<?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>182342</bug_id>
          
          <creation_ts>2018-01-31 11:21:57 -0800</creation_ts>
          <short_desc>Web Inspector: TabBar redesign: remove New Tab button and add experimental feature flag</short_desc>
          <delta_ts>2018-02-02 13:04:59 -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</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>181611</blocked>
    
    <blocked>182413</blocked>
    
    <blocked>182353</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Matt Baker">mattbaker</reporter>
          <assigned_to name="Matt Baker">mattbaker</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1395082</commentid>
    <comment_count>0</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-01-31 11:21:57 -0800</bug_when>
    <thetext>Summary:
Remove New Tab button and add experimental feature flag. Add LegacyTabBar to retain the existing behavior. For now the same CSS file can be used by both bars, but follow-up TabBar redesign patches will require that a LegacyTabBar.css be added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395084</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-31 11:22:30 -0800</bug_when>
    <thetext>&lt;rdar://problem/37078662&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395100</commentid>
    <comment_count>2</comment_count>
      <attachid>332789</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-01-31 11:50:21 -0800</bug_when>
    <thetext>Created attachment 332789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395346</commentid>
    <comment_count>3</comment_count>
      <attachid>332789</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-01-31 22:23:44 -0800</bug_when>
    <thetext>Comment on attachment 332789
Patch

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

Overall, it looks good.  I&apos;d like to see the CSS/contextmenu changes I mentioned before I give r+, but I don&apos;t see any major issues.

&gt; Source/WebInspectorUI/UserInterface/Views/TabBar.js:172
&gt; +        if (this.normalTabCount === 1)
&gt; +            return null;

In addition to this check, you should add some CSS to make it so that if the last tab left is ephemeral, the close button isn&apos;t even visible.  All that&apos;s necessary is adding a few `:not(.single-tab)` to a few selectors in TabBar.css, although I&apos;m not sure which.  The same is true of the contextmenu item &quot;Close Tab&quot;, which is added in GeneralTabBarItem.js.

&gt; Source/WebInspectorUI/UserInterface/Views/TabBar.js:787
&gt; +            }, !!openTabBarItem, disabled);

I think you meant to used `checked` instead of `!!openTabBarItem` here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395512</commentid>
    <comment_count>4</comment_count>
      <attachid>332789</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2018-02-01 09:25:33 -0800</bug_when>
    <thetext>Comment on attachment 332789
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/TabBar.js:172
&gt;&gt; +            return null;
&gt; 
&gt; In addition to this check, you should add some CSS to make it so that if the last tab left is ephemeral, the close button isn&apos;t even visible.  All that&apos;s necessary is adding a few `:not(.single-tab)` to a few selectors in TabBar.css, although I&apos;m not sure which.  The same is true of the contextmenu item &quot;Close Tab&quot;, which is added in GeneralTabBarItem.js.

Yep, CSS changes would be needed for that case. In that case, it is likely best to fork the CSS file instead of adding additional CSS selectors and complicating the file. It will be easier to remove the legacy CSS file, than the selector complexities when this experiment is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395564</commentid>
    <comment_count>5</comment_count>
      <attachid>332789</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-02-01 11:07:30 -0800</bug_when>
    <thetext>Comment on attachment 332789
Patch

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Views/TabBar.js:172
&gt;&gt;&gt; +            return null;
&gt;&gt; 
&gt;&gt; In addition to this check, you should add some CSS to make it so that if the last tab left is ephemeral, the close button isn&apos;t even visible.  All that&apos;s necessary is adding a few `:not(.single-tab)` to a few selectors in TabBar.css, although I&apos;m not sure which.  The same is true of the contextmenu item &quot;Close Tab&quot;, which is added in GeneralTabBarItem.js.
&gt; 
&gt; Yep, CSS changes would be needed for that case. In that case, it is likely best to fork the CSS file instead of adding additional CSS selectors and complicating the file. It will be easier to remove the legacy CSS file, than the selector complexities when this experiment is done.

Nice catch Devin, I just tried:

1. Close all normal tabs except one (Elements, for example)
2. Do a search
3. Close Elements tab
4. Last open tab is ephemeral!

I think a better approach would be to prevent step 3 above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395612</commentid>
    <comment_count>6</comment_count>
      <attachid>332905</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-02-01 13:31:46 -0800</bug_when>
    <thetext>Created attachment 332905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395759</commentid>
    <comment_count>7</comment_count>
      <attachid>332905</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-02-01 22:59:36 -0800</bug_when>
    <thetext>Comment on attachment 332905
Patch

r=me.  Nice job!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395774</commentid>
    <comment_count>8</comment_count>
      <attachid>332905</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-02 01:02:37 -0800</bug_when>
    <thetext>Comment on attachment 332905
Patch

Rejecting attachment 332905 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 332905, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
rdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 332, in _call_chain
    result = func(*args)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 1170, in https_open
    return self.do_open(conn_factory, req)
  File &quot;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_urllib2_fork.py&quot;, line 1118, in do_open
    raise URLError(err)
urllib2.URLError: &lt;urlopen error [Errno 60] Operation timed out&gt;

Full output: http://webkit-queues.webkit.org/results/6328509</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395967</commentid>
    <comment_count>9</comment_count>
      <attachid>332905</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-02 13:04:57 -0800</bug_when>
    <thetext>Comment on attachment 332905
Patch

Clearing flags on attachment: 332905

Committed r228024: &lt;https://trac.webkit.org/changeset/228024&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395968</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-02 13:04:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332789</attachid>
            <date>2018-01-31 11:50:21 -0800</date>
            <delta_ts>2018-02-01 13:31:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182342-20180131115020.patch</filename>
            <type>text/plain</type>
            <size>52207</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI3OTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCBk
YjNmZWZkNTJmYzAxY2UxN2YwOGUyOTgyMThiZTM4NTBjZmUzNjQ2Li42NWU0ZDJjNmJhNDY3Yjg3
NDE5YzNjMTZhMzk3N2E3NjBiNDFmOTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NyBAQAorMjAxOC0wMS0zMSAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogVGFiQmFyIHJlZGVzaWduOiByZW1vdmUgTmV3IFRh
YiBidXR0b24gYW5kIGFkZCBleHBlcmltZW50YWwgZmVhdHVyZSBmbGFnCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODIzNDIKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzM3MDc4NjYyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBleHBlcmltZW50YWwgc2V0dGluZyBn
cm91cCwgIlVzZXIgSW50ZXJmYWNlIiwgd2l0aAorICAgICAgICBhIHNpbmdsZSBzZXR0aW5nLCAi
RW5hYmxlIE5ldyBUYWJCYXIiLiBXaGVuIGVuYWJsZWQsIHRoZSBOZXcgVGFiIGJ1dHRvbiBpcwor
ICAgICAgICBubyBsb25nZXIgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgVGFiQmFyLiBUaGUg
Y29udGV4dCBtZW51IGZvciBjaG9vc2luZworICAgICAgICB0aGUgc2V0IG9mIG9wZW4gdGFicyBu
byBsb25nZXIgYWxsb3dzIHRoZSBsYXN0IG9wZW4gdGFiIHRvIGJlIGNsb3NlZCAodW5jaGVja2Vk
KS4KKworICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5q
czoKKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzOgorICAgICAgICAoV0ku
Y29udGVudExvYWRlZCk6CisgICAgICAgIChXSS5fdHJ5VG9SZXN0b3JlUGVuZGluZ1RhYnMpOgor
ICAgICAgICBSZXRhaW4gbGVnYWN5IGJlaGF2aW9yIGJlaGluZCBleHBlcmltZW50IGZlYXR1cmUg
c2V0dGluZy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9TZXR0aW5nLmpzOgorICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2Uv
Vmlld3MvTGVnYWN5VGFiQmFyLmpzOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9UYWJCYXIuanMuCisgICAgICAgIChXSS5MZWdhY3lUYWJCYXIp
OgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFyLnByb3RvdHlwZS5nZXQgbmV3VGFiVGFiQmFySXRl
bSk6CisgICAgICAgIChXSS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLnVwZGF0ZU5ld1RhYlRhYkJh
ckl0ZW1TdGF0ZSk6CisgICAgICAgIChXSS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLmFkZFRhYkJh
ckl0ZW0pOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFyLnByb3RvdHlwZS5pbnNlcnRUYWJCYXJJ
dGVtLmFuaW1hdGVUYWJzKToKKyAgICAgICAgKFdJLkxlZ2FjeVRhYkJhci5wcm90b3R5cGUuaW5z
ZXJ0VGFiQmFySXRlbS5yZW1vdmVTdHlsZXMpOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFyLnBy
b3RvdHlwZS5pbnNlcnRUYWJCYXJJdGVtKToKKyAgICAgICAgKFdJLkxlZ2FjeVRhYkJhci5wcm90
b3R5cGUucmVtb3ZlVGFiQmFySXRlbS5hbmltYXRlVGFicyk6CisgICAgICAgIChXSS5MZWdhY3lU
YWJCYXIucHJvdG90eXBlLnJlbW92ZVRhYkJhckl0ZW0ucmVtb3ZlU3R5bGVzKToKKyAgICAgICAg
KFdJLkxlZ2FjeVRhYkJhci5wcm90b3R5cGUucmVtb3ZlVGFiQmFySXRlbSk6CisgICAgICAgIChX
SS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLnNlbGVjdFByZXZpb3VzVGFiKToKKyAgICAgICAgKFdJ
LkxlZ2FjeVRhYkJhci5wcm90b3R5cGUuc2VsZWN0TmV4dFRhYik6CisgICAgICAgIChXSS5MZWdh
Y3lUYWJCYXIucHJvdG90eXBlLmdldCBzZWxlY3RlZFRhYkJhckl0ZW0pOgorICAgICAgICAoV0ku
TGVnYWN5VGFiQmFyLnByb3RvdHlwZS5zZXQgc2VsZWN0ZWRUYWJCYXJJdGVtKToKKyAgICAgICAg
KFdJLkxlZ2FjeVRhYkJhci5wcm90b3R5cGUuZ2V0IHRhYkJhckl0ZW1zKToKKyAgICAgICAgKFdJ
LkxlZ2FjeVRhYkJhci5wcm90b3R5cGUuZ2V0IG5vcm1hbFRhYkNvdW50KToKKyAgICAgICAgKFdJ
LkxlZ2FjeVRhYkJhci5wcm90b3R5cGUubGF5b3V0LmZvcmNlSXRlbUhpZGRlbik6CisgICAgICAg
IChXSS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLmxheW91dCk6CisgICAgICAgIChXSS5MZWdhY3lU
YWJCYXIucHJvdG90eXBlLl90YWJCYXJJdGVtc0Zyb21MZWZ0VG9SaWdodCk6CisgICAgICAgIChX
SS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLl9maW5kVGFiQmFySXRlbSk6CisgICAgICAgIChXSS5M
ZWdhY3lUYWJCYXIucHJvdG90eXBlLl9oYXNNb3JlVGhhbk9uZU5vcm1hbFRhYik6CisgICAgICAg
IChXSS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLl9vcGVuRGVmYXVsdFRhYik6CisgICAgICAgIChX
SS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLl9yZWNvcmRUYWJCYXJJdGVtU2l6ZXNBbmRQb3NpdGlv
bnMpOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFyLnByb3RvdHlwZS5fYXBwbHlUYWJCYXJJdGVt
U2l6ZXNBbmRQb3NpdGlvbnMpOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFyLnByb3RvdHlwZS5f
Y2xlYXJUYWJCYXJJdGVtU2l6ZXNBbmRQb3NpdGlvbnMpOgorICAgICAgICAoV0kuTGVnYWN5VGFi
QmFyLnByb3RvdHlwZS5fZmluaXNoRXhwYW5kaW5nVGFic0FmdGVyQ2xvc2UuKToKKyAgICAgICAg
KFdJLkxlZ2FjeVRhYkJhci5wcm90b3R5cGUuX2ZpbmlzaEV4cGFuZGluZ1RhYnNBZnRlckNsb3Nl
KToKKyAgICAgICAgKFdJLkxlZ2FjeVRhYkJhci5wcm90b3R5cGUuX2hhbmRsZU1vdXNlRG93bik6
CisgICAgICAgIChXSS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLl9oYW5kbGVDbGljayk6CisgICAg
ICAgIChXSS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLl9oYW5kbGVNb3VzZU1vdmVkKToKKyAgICAg
ICAgKFdJLkxlZ2FjeVRhYkJhci5wcm90b3R5cGUuX2hhbmRsZU1vdXNlVXApOgorICAgICAgICAo
V0kuTGVnYWN5VGFiQmFyLnByb3RvdHlwZS5faGFuZGxlTW91c2VMZWF2ZSk6CisgICAgICAgIChX
SS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLl9oYW5kbGVDb250ZXh0TWVudSk6CisgICAgICAgIChX
SS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLl9oYW5kbGVOZXdUYWJDbGljayk6CisgICAgICAgIChX
SS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLl9oYW5kbGVUYWJQaWNrZXJUYWJDb250ZXh0TWVudSk6
CisgICAgICAgIChXSS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLl9oYW5kbGVOZXdUYWJNb3VzZUVu
dGVyKToKKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50
Vmlldy5qczoKKyAgICAgICAgKFdJLlNldHRpbmdzVGFiQ29udGVudFZpZXcucHJvdG90eXBlLl9j
cmVhdGVFeHBlcmltZW50YWxTZXR0aW5nc1ZpZXcpOgorCisgICAgICAgICogVXNlckludGVyZmFj
ZS9WaWV3cy9UYWJCYXIuY3NzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVGFiQmFy
LmpzOgorICAgICAgICAoV0kuVGFiQmFyKToKKyAgICAgICAgKFdJLlRhYkJhci5wcm90b3R5cGUu
aW5zZXJ0VGFiQmFySXRlbSk6CisgICAgICAgIChXSS5UYWJCYXIucHJvdG90eXBlLnJlbW92ZVRh
YkJhckl0ZW0pOgorICAgICAgICAoV0kuVGFiQmFyLnByb3RvdHlwZS5zZXQgc2VsZWN0ZWRUYWJC
YXJJdGVtKToKKyAgICAgICAgKFdJLlRhYkJhci5wcm90b3R5cGUuX2hhbmRsZU1vdXNlRG93bik6
CisgICAgICAgIChXSS5UYWJCYXIucHJvdG90eXBlLl9oYW5kbGVDbGljayk6CisgICAgICAgIChX
SS5UYWJCYXIucHJvdG90eXBlLl9oYW5kbGVNb3VzZU1vdmVkKToKKyAgICAgICAgKFdJLlRhYkJh
ci5wcm90b3R5cGUuX2hhbmRsZU1vdXNlTGVhdmUpOgorICAgICAgICAoV0kuVGFiQmFyLnByb3Rv
dHlwZS5faGFuZGxlQ29udGV4dE1lbnUpOgorICAgICAgICAoV0kuVGFiQmFyLnByb3RvdHlwZS5f
aGFuZGxlVGFiUGlja2VyVGFiQ29udGV4dE1lbnUpOgorICAgICAgICAoV0kuVGFiQmFyLnByb3Rv
dHlwZS5nZXQgbmV3VGFiVGFiQmFySXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXSS5UYWJCYXIu
cHJvdG90eXBlLnVwZGF0ZU5ld1RhYlRhYkJhckl0ZW1TdGF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXSS5UYWJCYXIucHJvdG90eXBlLl9vcGVuRGVmYXVsdFRhYik6IERlbGV0ZWQuCisgICAgICAg
IChXSS5UYWJCYXIucHJvdG90eXBlLl9oYW5kbGVOZXdUYWJDbGljayk6IERlbGV0ZWQuCisgICAg
ICAgIChXSS5UYWJCYXIucHJvdG90eXBlLl9oYW5kbGVOZXdUYWJNb3VzZUVudGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIHRoZSBOZXcgVGFiIGJ1dHRvbiBhbmQgZGVm
YXVsdCB0YWIuIFdpdGhvdXQgYSBkZWZhdWx0CisgICAgICAgIHRhYiwgdGhlcmUgaXMgbm90aGlu
ZyB0byBkaXNwbGF5IHdoZW4gbm8gdGFicyBhcmUgb3Blbiwgc28gcHJldmVudCB0aGUKKyAgICAg
ICAgbGFzdCBub24tcGlubmVkIHRhYiBmcm9tIGJlaW5nIHJlbW92ZWQuCisKIDIwMTgtMDEtMzAg
IERldmluIFJvdXNzbyAgPHdlYmtpdEBkZXZpbnJvdXNzby5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogUmVwbGFjZSBPYmplY3Quc2hhbGxvd01lcmdlIHdpdGggRVMyMDE4IHNwcmVhZCBv
cGVyYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMv
ZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2Nh
bGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggNmVmOTAwMWFiMjg5
NTIxZmRjNDdmZWZjMWEwMDM0M2JlNjhiNTMwOS4uMDEwNGJhZDQ1NGE0ZjM5MjIwZGU0YjYxYzMx
MjNiMWI4ODYzNjc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXph
dGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCkBAIC0zNjcs
NiArMzY3LDcgQEAgbG9jYWxpemVkU3RyaW5nc1siRW5hYmxlIEJyZWFrcG9pbnQiXSA9ICJFbmFi
bGUgQnJlYWtwb2ludCI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJFbmFibGUgQnJlYWtwb2ludHMiXSA9
ICJFbmFibGUgQnJlYWtwb2ludHMiOwogbG9jYWxpemVkU3RyaW5nc1siRW5hYmxlIEV2ZW50IExp
c3RlbmVyIl0gPSAiRW5hYmxlIEV2ZW50IExpc3RlbmVyIjsKIGxvY2FsaXplZFN0cmluZ3NbIkVu
YWJsZSBMYXllcnMgVGFiIl0gPSAiRW5hYmxlIExheWVycyBUYWIiOworbG9jYWxpemVkU3RyaW5n
c1siRW5hYmxlIE5ldyBUYWIgQmFyIl0gPSAiRW5hYmxlIE5ldyBUYWIgQmFyIjsKIGxvY2FsaXpl
ZFN0cmluZ3NbIkVuYWJsZSBQcm9ncmFtIl0gPSAiRW5hYmxlIFByb2dyYW0iOwogbG9jYWxpemVk
U3RyaW5nc1siRW5hYmxlIGFsbCBicmVha3BvaW50cyAoJXMpIl0gPSAiRW5hYmxlIGFsbCBicmVh
a3BvaW50cyAoJXMpIjsKIGxvY2FsaXplZFN0cmluZ3NbIkVuYWJsZSBicmVha3BvaW50cyJdID0g
IkVuYWJsZSBicmVha3BvaW50cyI7CkBAIC0xMDA4LDYgKzEwMDksNyBAQCBsb2NhbGl6ZWRTdHJp
bmdzWyJVc2UgRGVmYXVsdCBNZWRpYSBTdHlsZXMiXSA9ICJVc2UgRGVmYXVsdCBNZWRpYSBTdHls
ZXMiOwogbG9jYWxpemVkU3RyaW5nc1siVXNlIHRoZSByZXNvdXJjZSBjYWNoZSB3aGVuIGxvYWRp
bmcgcmVzb3VyY2VzIl0gPSAiVXNlIHRoZSByZXNvdXJjZSBjYWNoZSB3aGVuIGxvYWRpbmcgcmVz
b3VyY2VzIjsKIGxvY2FsaXplZFN0cmluZ3NbIlVzZXIgQWdlbnQiXSA9ICJVc2VyIEFnZW50IjsK
IGxvY2FsaXplZFN0cmluZ3NbIlVzZXIgQWdlbnQgU3R5bGVzaGVldCJdID0gIlVzZXIgQWdlbnQg
U3R5bGVzaGVldCI7Citsb2NhbGl6ZWRTdHJpbmdzWyJVc2VyIEludGVyZmFjZToiXSA9ICJVc2Vy
IEludGVyZmFjZToiOwogbG9jYWxpemVkU3RyaW5nc1siVXNlciBTdHlsZXNoZWV0Il0gPSAiVXNl
ciBTdHlsZXNoZWV0IjsKIGxvY2FsaXplZFN0cmluZ3NbIlVzaW5nIEtleXdvcmQgVmFsdWUiXSA9
ICJVc2luZyBLZXl3b3JkIFZhbHVlIjsKIGxvY2FsaXplZFN0cmluZ3NbIlVzaW5nIHByZXZpb3Vz
IHNlbGVjdG9yIOKAnCVz4oCdIl0gPSAiVXNpbmcgcHJldmlvdXMgc2VsZWN0b3Ig4oCcJXPigJ0i
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9N
YWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpz
CmluZGV4IDI4MzcxZjZhM2ZlZWYzZDU5ZjAwMzdkYmVlZDYzMzY1YzExNTk2NjUuLmQxZWQ2MzU5
ZGE2ZDQ1ZDUxY2Q4ZmNjZDVjOTk0ZTZlNjhlNDEzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTI3MCw4ICsyNzAsMTIgQEAg
V0kuY29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICAvLyBDcmVhdGUgdGhlIHVzZXIgaW50
ZXJmYWNlIGVsZW1lbnRzLgogICAgIHRoaXMudG9vbGJhciA9IG5ldyBXSS5Ub29sYmFyKGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJ0b29sYmFyIikpOwogCi0gICAgdGhpcy50YWJCYXIgPSBuZXcg
V0kuVGFiQmFyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWItYmFyIikpOwotICAgIHRoaXMu
dGFiQmFyLmFkZEV2ZW50TGlzdGVuZXIoV0kuVGFiQmFyLkV2ZW50Lk9wZW5EZWZhdWx0VGFiLCB0
aGlzLl9vcGVuRGVmYXVsdFRhYiwgdGhpcyk7CisgICAgaWYgKFdJLnNldHRpbmdzLmV4cGVyaW1l
bnRhbEVuYWJsZU5ld1RhYkJhci52YWx1ZSkKKyAgICAgICAgdGhpcy50YWJCYXIgPSBuZXcgV0ku
VGFiQmFyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWItYmFyIikpOworICAgIGVsc2Ugewor
ICAgICAgICB0aGlzLnRhYkJhciA9IG5ldyBXSS5MZWdhY3lUYWJCYXIoZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInRhYi1iYXIiKSk7CisgICAgICAgIHRoaXMudGFiQmFyLmFkZEV2ZW50TGlzdGVu
ZXIoV0kuVGFiQmFyLkV2ZW50Lk9wZW5EZWZhdWx0VGFiLCB0aGlzLl9vcGVuRGVmYXVsdFRhYiwg
dGhpcyk7CisgICAgfQogCiAgICAgdGhpcy5fY29udGVudEVsZW1lbnQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY29udGVudCIpOwogICAgIHRoaXMuX2NvbnRlbnRFbGVtZW50LnNldEF0dHJp
YnV0ZSgicm9sZSIsICJtYWluIik7CkBAIC02MDEsNyArNjA1LDggQEAgV0kuX3RyeVRvUmVzdG9y
ZVBlbmRpbmdUYWJzID0gZnVuY3Rpb24oKQogCiAgICAgdGhpcy5fcGVuZGluZ09wZW5UYWJzID0g
c3RpbGxQZW5kaW5nT3BlblRhYnM7CiAKLSAgICB0aGlzLnRhYkJyb3dzZXIudGFiQmFyLnVwZGF0
ZU5ld1RhYlRhYkJhckl0ZW1TdGF0ZSgpOworICAgIGlmICghV0kuc2V0dGluZ3MuZXhwZXJpbWVu
dGFsRW5hYmxlTmV3VGFiQmFyLnZhbHVlKQorICAgICAgICB0aGlzLnRhYkJyb3dzZXIudGFiQmFy
LnVwZGF0ZU5ld1RhYlRhYkJhckl0ZW1TdGF0ZSgpOwogfTsKIAogV0kuc2hvd05ld1RhYlRhYiA9
IGZ1bmN0aW9uKG9wdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9CYXNlL1NldHRpbmcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9CYXNlL1NldHRpbmcuanMKaW5kZXggZjI1YjNkN2M0NWVhNTczZDA2NTE5ZTE0Zjdm
MTczMjllMjMxMWFmNS4uOTAxNWZhZGFhMWRiODYxNTY4MTA1YjMzMWY4YTBiYzhkYmYwNDk4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9TZXR0
aW5nLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvU2V0
dGluZy5qcwpAQCAtMTI2LDQgKzEyNiw1IEBAIFdJLnNldHRpbmdzID0gewogICAgIGV4cGVyaW1l
bnRhbEVuYWJsZUxheWVyc1RhYjogbmV3IFdJLlNldHRpbmcoImV4cGVyaW1lbnRhbC1lbmFibGUt
bGF5ZXJzLXRhYiIsIGZhbHNlKSwKICAgICBleHBlcmltZW50YWxMZWdhY3lTdHlsZUVkaXRvcjog
bmV3IFdJLlNldHRpbmcoImV4cGVyaW1lbnRhbC1sZWdhY3ktc3R5bGUtZWRpdG9yIiwgZmFsc2Up
LAogICAgIGV4cGVyaW1lbnRhbExlZ2FjeVZpc3VhbFNpZGViYXI6IG5ldyBXSS5TZXR0aW5nKCJl
eHBlcmltZW50YWwtbGVnYWN5LXZpc3VhbC1zaWRlYmFyIiwgZmFsc2UpLAorICAgIGV4cGVyaW1l
bnRhbEVuYWJsZU5ld1RhYkJhcjogbmV3IFdJLlNldHRpbmcoImV4cGVyaW1lbnRhbC1lbmFibGUt
bmV3LXRhYi1iYXIiLCBmYWxzZSksCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IDMzYmVjNGUzNmIyOWUwNGMyY2FkNzA4NWFmMzZmOGUx
MWNlNzIwYjIuLmUxNWFjZjIyMzRkZTU3YjE5ZGM1N2ZmYWJlMjE1OGEwYTE2MjQ3YzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAorKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKQEAgLTQ3OSw2
ICs0NzksOCBAQAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UcmVlT3V0bGluZS5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1RyZWVPdXRsaW5lR3JvdXAuanMiPjwvc2NyaXB0
PgogCisgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0xlZ2FjeVRhYkJhci5qcyI+PC9zY3JpcHQ+CisK
ICAgICA8c2NyaXB0IHNyYz0iVmlld3MvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9EYXRhYmFzZVVzZXJRdWVyeVZpZXdCYXNlLmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGF0YWJhc2VVc2VyUXVlcnlFcnJvclZp
ZXcuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvTGVnYWN5VGFiQmFyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvTGVnYWN5VGFiQmFyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4ZTkxZDU5OGM5
MTQwMDhkNmU1YjhiNDlkYzVmYTRkMTFlODU4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MZWdhY3lUYWJCYXIuanMKQEAgLTAs
MCArMSw4NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXSS5MZWdhY3lUYWJCYXIgPSBjbGFzcyBMZWdhY3lU
YWJCYXIgZXh0ZW5kcyBXSS5WaWV3Cit7CisgICAgY29uc3RydWN0b3IoZWxlbWVudCwgdGFiQmFy
SXRlbXMpCisgICAgeworICAgICAgICBzdXBlcihlbGVtZW50KTsKKworICAgICAgICB0aGlzLmVs
ZW1lbnQuY2xhc3NMaXN0LmFkZCgidGFiLWJhciIpOworICAgICAgICB0aGlzLmVsZW1lbnQuc2V0
QXR0cmlidXRlKCJyb2xlIiwgInRhYmxpc3QiKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX2hhbmRsZU1vdXNlRG93bi5iaW5kKHRoaXMp
KTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5f
aGFuZGxlQ2xpY2suYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZWxlYXZlIiwgdGhpcy5faGFuZGxlTW91c2VMZWF2ZS5iaW5kKHRoaXMpKTsK
KyAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhp
cy5faGFuZGxlQ29udGV4dE1lbnUuYmluZCh0aGlzKSk7CisKKyAgICAgICAgdGhpcy5lbGVtZW50
LmNyZWF0ZUNoaWxkKCJkaXYiLCAidG9wLWJvcmRlciIpOworCisgICAgICAgIHRoaXMuX3RhYkJh
ckl0ZW1zID0gW107CisgICAgICAgIHRoaXMuX2hpZGRlblRhYkJhckl0ZW1zID0gW107CisKKyAg
ICAgICAgaWYgKHRhYkJhckl0ZW1zKSB7CisgICAgICAgICAgICBmb3IgKGxldCB0YWJCYXJJdGVt
IGluIHRhYkJhckl0ZW1zKQorICAgICAgICAgICAgICAgIHRoaXMuYWRkVGFiQmFySXRlbSh0YWJC
YXJJdGVtKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuYWRkVGFiQmFySXRlbShXSS5zZXR0
aW5nc1RhYkNvbnRlbnRWaWV3LnRhYkJhckl0ZW0sIHtzdXBwcmVzc0FuaW1hdGlvbnM6IHRydWV9
KTsKKworICAgICAgICB0aGlzLl9uZXdUYWJUYWJCYXJJdGVtID0gbmV3IFdJLlBpbm5lZFRhYkJh
ckl0ZW0oIkltYWdlcy9OZXdUYWJQbHVzLnN2ZyIsIFdJLlVJU3RyaW5nKCJDcmVhdGUgYSBuZXcg
dGFiIikpOworICAgICAgICB0aGlzLl9uZXdUYWJUYWJCYXJJdGVtLmVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigibW91c2VlbnRlciIsIHRoaXMuX2hhbmRsZU5ld1RhYk1vdXNlRW50ZXIuYmluZCh0
aGlzKSk7CisgICAgICAgIHRoaXMuX25ld1RhYlRhYkJhckl0ZW0uZWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCJjbGljayIsIHRoaXMuX2hhbmRsZU5ld1RhYkNsaWNrLmJpbmQodGhpcykpOworICAg
ICAgICB0aGlzLmFkZFRhYkJhckl0ZW0odGhpcy5fbmV3VGFiVGFiQmFySXRlbSwge3N1cHByZXNz
QW5pbWF0aW9uczogdHJ1ZX0pOworCisgICAgICAgIHRoaXMuX3RhYlBpY2tlclRhYkJhckl0ZW0g
PSBuZXcgV0kuUGlubmVkVGFiQmFySXRlbSgiSW1hZ2VzL1RhYlBpY2tlci5zdmciLCBXSS5VSVN0
cmluZygiU2hvdyBoaWRkZW4gdGFicyIpKTsKKyAgICAgICAgdGhpcy5fdGFiUGlja2VyVGFiQmFy
SXRlbS5lbGVtZW50LmNsYXNzTGlzdC5hZGQoInRhYi1waWNrZXIiKTsKKyAgICAgICAgdGhpcy5f
dGFiUGlja2VyVGFiQmFySXRlbS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51
IiwgdGhpcy5faGFuZGxlVGFiUGlja2VyVGFiQ29udGV4dE1lbnUuYmluZCh0aGlzKSk7CisgICAg
ICAgIHRoaXMuYWRkVGFiQmFySXRlbSh0aGlzLl90YWJQaWNrZXJUYWJCYXJJdGVtLCB7c3VwcHJl
c3NBbmltYXRpb25zOiB0cnVlfSk7CisgICAgfQorCisgICAgLy8gUHVibGljCisKKyAgICBnZXQg
bmV3VGFiVGFiQmFySXRlbSgpIHsgcmV0dXJuIHRoaXMuX25ld1RhYlRhYkJhckl0ZW07IH0KKwor
ICAgIHVwZGF0ZU5ld1RhYlRhYkJhckl0ZW1TdGF0ZSgpCisgICAgeworICAgICAgICBsZXQgbmV3
VGFiRXhpc3RzID0gIVdJLmlzTmV3VGFiV2l0aFR5cGVBbGxvd2VkKFdJLk5ld1RhYkNvbnRlbnRW
aWV3LlR5cGUpOworICAgICAgICB0aGlzLl9uZXdUYWJUYWJCYXJJdGVtLmRpc2FibGVkID0gbmV3
VGFiRXhpc3RzOworICAgIH0KKworICAgIGFkZFRhYkJhckl0ZW0odGFiQmFySXRlbSwgb3B0aW9u
cyA9IHt9KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0VGFiQmFySXRlbSh0YWJC
YXJJdGVtLCB0aGlzLl90YWJCYXJJdGVtcy5sZW5ndGgsIG9wdGlvbnMpOworICAgIH0KKworICAg
IGluc2VydFRhYkJhckl0ZW0odGFiQmFySXRlbSwgaW5kZXgsIG9wdGlvbnMgPSB7fSkKKyAgICB7
CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRhYkJhckl0ZW0gaW5zdGFuY2VvZiBXSS5UYWJCYXJJ
dGVtKTsKKyAgICAgICAgaWYgKCEodGFiQmFySXRlbSBpbnN0YW5jZW9mIFdJLlRhYkJhckl0ZW0p
KQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgaWYgKHRhYkJhckl0ZW0ucGFy
ZW50VGFiQmFyID09PSB0aGlzKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAg
aWYgKHRoaXMuX3RhYkFuaW1hdGVkQ2xvc2VkU2luY2VNb3VzZUVudGVyKSB7CisgICAgICAgICAg
ICAvLyBEZWxheSBhZGRpbmcgdGhlIG5ldyB0YWIgdW50aWwgd2UgY2FuIGV4cGFuZCB0aGUgdGFi
cyBhZnRlciBhIGNsb3NlZCB0YWIuCisgICAgICAgICAgICB0aGlzLl9maW5pc2hFeHBhbmRpbmdU
YWJzQWZ0ZXJDbG9zZSgpLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0
VGFiQmFySXRlbSh0YWJCYXJJdGVtLCBpbmRleCwgb3B0aW9ucyk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRhYkJh
ckl0ZW0ucGFyZW50VGFiQmFyKQorICAgICAgICAgICAgdGFiQmFySXRlbS5wYXJlbnRUYWJCYXIu
cmVtb3ZlVGFiQmFySXRlbSh0YWJCYXJJdGVtKTsKKworICAgICAgICB0YWJCYXJJdGVtLnBhcmVu
dFRhYkJhciA9IHRoaXM7CisKKyAgICAgICAgaW5kZXggPSBOdW1iZXIuY29uc3RyYWluKGluZGV4
LCAwLCB0aGlzLm5vcm1hbFRhYkNvdW50KTsKKworICAgICAgICBpZiAodGhpcy5lbGVtZW50LmNs
YXNzTGlzdC5jb250YWlucygiYW5pbWF0aW5nIikpIHsKKyAgICAgICAgICAgIHJlcXVlc3RBbmlt
YXRpb25GcmFtZShyZW1vdmVTdHlsZXMuYmluZCh0aGlzKSk7CisgICAgICAgICAgICBvcHRpb25z
LnN1cHByZXNzQW5pbWF0aW9ucyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2YXIgYmVm
b3JlVGFiU2l6ZXNBbmRQb3NpdGlvbnM7CisgICAgICAgIGlmICghb3B0aW9ucy5zdXBwcmVzc0Fu
aW1hdGlvbnMpCisgICAgICAgICAgICBiZWZvcmVUYWJTaXplc0FuZFBvc2l0aW9ucyA9IHRoaXMu
X3JlY29yZFRhYkJhckl0ZW1TaXplc0FuZFBvc2l0aW9ucygpOworCisgICAgICAgIHRoaXMuX3Rh
YkJhckl0ZW1zLnNwbGljZShpbmRleCwgMCwgdGFiQmFySXRlbSk7CisKKyAgICAgICAgdmFyIG5l
eHRTaWJsaW5nID0gdGhpcy5fdGFiQmFySXRlbXNbaW5kZXggKyAxXTsKKyAgICAgICAgbGV0IG5l
eHRTaWJsaW5nRWxlbWVudCA9IG5leHRTaWJsaW5nID8gbmV4dFNpYmxpbmcuZWxlbWVudCA6IHRo
aXMuX3RhYkJhckl0ZW1zLmxhc3RWYWx1ZS5lbGVtZW50OworCisgICAgICAgIGlmICh0aGlzLmVs
ZW1lbnQuaXNBbmNlc3RvcihuZXh0U2libGluZ0VsZW1lbnQpKQorICAgICAgICAgICAgdGhpcy5l
bGVtZW50Lmluc2VydEJlZm9yZSh0YWJCYXJJdGVtLmVsZW1lbnQsIG5leHRTaWJsaW5nRWxlbWVu
dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0
YWJCYXJJdGVtLmVsZW1lbnQpOworCisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QudG9n
Z2xlKCJzaW5nbGUtdGFiIiwgIXRoaXMuX2hhc01vcmVUaGFuT25lTm9ybWFsVGFiKCkpOworCisg
ICAgICAgIHRhYkJhckl0ZW0uZWxlbWVudC5zdHlsZS5sZWZ0ID0gbnVsbDsKKyAgICAgICAgdGFi
QmFySXRlbS5lbGVtZW50LnN0eWxlLndpZHRoID0gbnVsbDsKKworICAgICAgICBmdW5jdGlvbiBh
bmltYXRlVGFicygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xp
c3QuYWRkKCJhbmltYXRpbmciKTsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3Qu
YWRkKCJpbnNlcnRpbmctdGFiIik7CisKKyAgICAgICAgICAgIHRoaXMuX2FwcGx5VGFiQmFySXRl
bVNpemVzQW5kUG9zaXRpb25zKGFmdGVyVGFiU2l6ZXNBbmRQb3NpdGlvbnMpOworCisgICAgICAg
ICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0VHJhbnNpdGlvbkVuZCIs
IHJlbW92ZVN0eWxlc0xpc3RlbmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJl
bW92ZVN0eWxlcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xp
c3QucmVtb3ZlKCJzdGF0aWMtbGF5b3V0Iik7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xh
c3NMaXN0LnJlbW92ZSgiYW5pbWF0aW5nIik7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xh
c3NMaXN0LnJlbW92ZSgiaW5zZXJ0aW5nLXRhYiIpOworCisgICAgICAgICAgICB0YWJCYXJJdGVt
LmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiYmVpbmctaW5zZXJ0ZWQiKTsKKworICAgICAgICAg
ICAgdGhpcy5fY2xlYXJUYWJCYXJJdGVtU2l6ZXNBbmRQb3NpdGlvbnMoKTsKKworICAgICAgICAg
ICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmtpdFRyYW5zaXRpb25FbmQi
LCByZW1vdmVTdHlsZXNMaXN0ZW5lcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW9wdGlv
bnMuc3VwcHJlc3NBbmltYXRpb25zKSB7CisgICAgICAgICAgICB2YXIgYWZ0ZXJUYWJTaXplc0Fu
ZFBvc2l0aW9ucyA9IHRoaXMuX3JlY29yZFRhYkJhckl0ZW1TaXplc0FuZFBvc2l0aW9ucygpOwor
CisgICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpOworCisgICAgICAgICAgICBsZXQgdGFi
QmFySXRlbXMgPSB0aGlzLl90YWJCYXJJdGVtc0Zyb21MZWZ0VG9SaWdodCgpOworICAgICAgICAg
ICAgbGV0IHByZXZpb3VzVGFiQmFySXRlbSA9IHRhYkJhckl0ZW1zW3RhYkJhckl0ZW1zLmluZGV4
T2YodGFiQmFySXRlbSkgLSAxXSB8fCBudWxsOworICAgICAgICAgICAgbGV0IHByZXZpb3VzVGFi
QmFySXRlbVNpemVBbmRQb3NpdGlvbiA9IHByZXZpb3VzVGFiQmFySXRlbSA/IGJlZm9yZVRhYlNp
emVzQW5kUG9zaXRpb25zLmdldChwcmV2aW91c1RhYkJhckl0ZW0pIDogbnVsbDsKKworICAgICAg
ICAgICAgaWYgKHByZXZpb3VzVGFiQmFySXRlbVNpemVBbmRQb3NpdGlvbikKKyAgICAgICAgICAg
ICAgICBiZWZvcmVUYWJTaXplc0FuZFBvc2l0aW9ucy5zZXQodGFiQmFySXRlbSwge2xlZnQ6IHBy
ZXZpb3VzVGFiQmFySXRlbVNpemVBbmRQb3NpdGlvbi5sZWZ0ICsgcHJldmlvdXNUYWJCYXJJdGVt
U2l6ZUFuZFBvc2l0aW9uLndpZHRoLCB3aWR0aDogMH0pOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGJlZm9yZVRhYlNpemVzQW5kUG9zaXRpb25zLnNldCh0YWJCYXJJdGVtLCB7
bGVmdDogMCwgd2lkdGg6IDB9KTsKKworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlz
dC5hZGQoInN0YXRpYy1sYXlvdXQiKTsKKyAgICAgICAgICAgIHRhYkJhckl0ZW0uZWxlbWVudC5j
bGFzc0xpc3QuYWRkKCJiZWluZy1pbnNlcnRlZCIpOworCisgICAgICAgICAgICB0aGlzLl9hcHBs
eVRhYkJhckl0ZW1TaXplc0FuZFBvc2l0aW9ucyhiZWZvcmVUYWJTaXplc0FuZFBvc2l0aW9ucyk7
CisKKyAgICAgICAgICAgIHZhciByZW1vdmVTdHlsZXNMaXN0ZW5lciA9IHJlbW92ZVN0eWxlcy5i
aW5kKHRoaXMpOworCisgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZVRh
YnMuYmluZCh0aGlzKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhpcy5uZWVkc0xh
eW91dCgpOworCisgICAgICAgIGlmICghKHRhYkJhckl0ZW0gaW5zdGFuY2VvZiBXSS5QaW5uZWRU
YWJCYXJJdGVtKSkKKyAgICAgICAgICAgIHRoaXMudXBkYXRlTmV3VGFiVGFiQmFySXRlbVN0YXRl
KCk7CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGFiQmFyLkV2
ZW50LlRhYkJhckl0ZW1BZGRlZCwge3RhYkJhckl0ZW19KTsKKworICAgICAgICByZXR1cm4gdGFi
QmFySXRlbTsKKyAgICB9CisKKyAgICByZW1vdmVUYWJCYXJJdGVtKHRhYkJhckl0ZW1PckluZGV4
LCBvcHRpb25zID0ge30pCisgICAgeworICAgICAgICBsZXQgdGFiQmFySXRlbSA9IHRoaXMuX2Zp
bmRUYWJCYXJJdGVtKHRhYkJhckl0ZW1PckluZGV4KTsKKyAgICAgICAgaWYgKCF0YWJCYXJJdGVt
IHx8IHRhYkJhckl0ZW0gaW5zdGFuY2VvZiBXSS5QaW5uZWRUYWJCYXJJdGVtKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgdGFiQmFySXRlbS5wYXJlbnRUYWJCYXIgPSBudWxs
OworCisgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0gPT09IHRhYkJhckl0ZW0p
IHsKKyAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3RhYkJhckl0ZW1zLmluZGV4T2YodGFi
QmFySXRlbSk7CisgICAgICAgICAgICB2YXIgbmV4dFRhYkJhckl0ZW0gPSB0aGlzLl90YWJCYXJJ
dGVtc1tpbmRleCArIDFdOworICAgICAgICAgICAgaWYgKCFuZXh0VGFiQmFySXRlbSB8fCBuZXh0
VGFiQmFySXRlbSBpbnN0YW5jZW9mIFdJLlBpbm5lZFRhYkJhckl0ZW0pCisgICAgICAgICAgICAg
ICAgbmV4dFRhYkJhckl0ZW0gPSB0aGlzLl90YWJCYXJJdGVtc1tpbmRleCAtIDFdOworCisgICAg
ICAgICAgICB0aGlzLnNlbGVjdGVkVGFiQmFySXRlbSA9IG5leHRUYWJCYXJJdGVtOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImFuaW1h
dGluZyIpKSB7CisgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVtb3ZlU3R5bGVz
LmJpbmQodGhpcykpOworICAgICAgICAgICAgb3B0aW9ucy5zdXBwcmVzc0FuaW1hdGlvbnMgPSB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGJlZm9yZVRhYlNpemVzQW5kUG9zaXRpb25z
OworICAgICAgICBpZiAoIW9wdGlvbnMuc3VwcHJlc3NBbmltYXRpb25zKQorICAgICAgICAgICAg
YmVmb3JlVGFiU2l6ZXNBbmRQb3NpdGlvbnMgPSB0aGlzLl9yZWNvcmRUYWJCYXJJdGVtU2l6ZXNB
bmRQb3NpdGlvbnMoKTsKKworICAgICAgICAvLyBTdWJ0cmFjdCAxIGZyb20gbm9ybWFsVGFiQ291
bnQgc2luY2UgYXJyYXlzIGJlZ2luIGluZGV4aW5nIGF0IDAuCisgICAgICAgIGxldCB3YXNMYXN0
Tm9ybWFsVGFiID0gdGhpcy5fdGFiQmFySXRlbXMuaW5kZXhPZih0YWJCYXJJdGVtKSA9PT0gdGhp
cy5ub3JtYWxUYWJDb3VudCAtIDE7CisKKyAgICAgICAgdGhpcy5fdGFiQmFySXRlbXMucmVtb3Zl
KHRhYkJhckl0ZW0pOworICAgICAgICB0YWJCYXJJdGVtLmVsZW1lbnQucmVtb3ZlKCk7CisKKyAg
ICAgICAgdmFyIGhhc01vcmVUaGFuT25lTm9ybWFsVGFiID0gdGhpcy5faGFzTW9yZVRoYW5PbmVO
b3JtYWxUYWIoKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoInNpbmds
ZS10YWIiLCAhaGFzTW9yZVRoYW5PbmVOb3JtYWxUYWIpOworCisgICAgICAgIGNvbnN0IHNob3Vs
ZE9wZW5EZWZhdWx0VGFiID0gIXRhYkJhckl0ZW0uaXNEZWZhdWx0VGFiICYmICF0aGlzLm5vcm1h
bFRhYkNvdW50OworICAgICAgICBpZiAoc2hvdWxkT3BlbkRlZmF1bHRUYWIpCisgICAgICAgICAg
ICBvcHRpb25zLnN1cHByZXNzQW5pbWF0aW9ucyA9IHRydWU7CisKKyAgICAgICAgaWYgKCFoYXNN
b3JlVGhhbk9uZU5vcm1hbFRhYiB8fCB3YXNMYXN0Tm9ybWFsVGFiIHx8ICFvcHRpb25zLnN1cHBy
ZXNzRXhwYW5zaW9uKSB7CisgICAgICAgICAgICBpZiAoIW9wdGlvbnMuc3VwcHJlc3NBbmltYXRp
b25zKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGFiQW5pbWF0ZWRDbG9zZWRTaW5jZU1vdXNl
RW50ZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmlzaEV4cGFuZGluZ1RhYnNB
ZnRlckNsb3NlKGJlZm9yZVRhYlNpemVzQW5kUG9zaXRpb25zKTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIHRoaXMubmVlZHNMYXlvdXQoKTsKKworICAgICAgICAgICAgdGhp
cy51cGRhdGVOZXdUYWJUYWJCYXJJdGVtU3RhdGUoKTsKKworICAgICAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGFiQmFyLkV2ZW50LlRhYkJhckl0ZW1SZW1vdmVkLCB7
dGFiQmFySXRlbX0pOworCisgICAgICAgICAgICBpZiAoc2hvdWxkT3BlbkRlZmF1bHRUYWIpCisg
ICAgICAgICAgICAgICAgdGhpcy5fb3BlbkRlZmF1bHRUYWIoKTsKKworICAgICAgICAgICAgcmV0
dXJuIHRhYkJhckl0ZW07CisgICAgICAgIH0KKworICAgICAgICB2YXIgbGFzdE5vcm1hbFRhYkJh
ckl0ZW07CisKKyAgICAgICAgZnVuY3Rpb24gYW5pbWF0ZVRhYnMoKQorICAgICAgICB7CisgICAg
ICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiYW5pbWF0aW5nIik7CisgICAgICAg
ICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2xvc2luZy10YWIiKTsKKworICAgICAg
ICAgICAgLy8gRm9yIFJUTCwgd2UgbmVlZCB0byBwbGFjZSBleHRyYSBzcGFjZSBiZXR3ZWVuIHBp
bm5lZCB0YWIgYW5kIGZpcnN0IG5vcm1hbCB0YWIuCisgICAgICAgICAgICAvLyBGcm9tIGxlZnQg
dG8gcmlnaHQgdGhlcmUgaXMgcGlubmVkIHRhYnMsIGV4dHJhIHNwYWNlLCB0aGVuIG5vcm1hbCB0
YWJzLiBDb21wdXRlCisgICAgICAgICAgICAvLyBob3cgbXVjaCBleHRyYSBzcGFjZSB3ZSBuZWVk
IHRvIGFkZGl0aW9uYWxseSBhZGQgZm9yIG5vcm1hbCB0YWIgaXRlbXMuCisgICAgICAgICAgICBs
ZXQgZXh0cmFTcGFjZUJldHdlZW5Ob3JtYWxBbmRQaW5uZWRUYWJzID0gMDsKKyAgICAgICAgICAg
IGlmIChXSS5yZXNvbHZlZExheW91dERpcmVjdGlvbigpID09PSBXSS5MYXlvdXREaXJlY3Rpb24u
UlRMKSB7CisgICAgICAgICAgICAgICAgZXh0cmFTcGFjZUJldHdlZW5Ob3JtYWxBbmRQaW5uZWRU
YWJzID0gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoOworICAgICAg
ICAgICAgICAgIGZvciAobGV0IGN1cnJlbnRUYWJCYXJJdGVtIG9mIHRoaXMuX3RhYkJhckl0ZW1z
RnJvbUxlZnRUb1JpZ2h0KCkpCisgICAgICAgICAgICAgICAgICAgIGV4dHJhU3BhY2VCZXR3ZWVu
Tm9ybWFsQW5kUGlubmVkVGFicyAtPSBjdXJyZW50VGFiQmFySXRlbS5lbGVtZW50LmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpLndpZHRoOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZXQg
bGVmdCA9IDA7CisgICAgICAgICAgICBmb3IgKGxldCBjdXJyZW50VGFiQmFySXRlbSBvZiB0aGlz
Ll90YWJCYXJJdGVtc0Zyb21MZWZ0VG9SaWdodCgpKSB7CisgICAgICAgICAgICAgICAgbGV0IHNp
emVBbmRQb3NpdGlvbiA9IGJlZm9yZVRhYlNpemVzQW5kUG9zaXRpb25zLmdldChjdXJyZW50VGFi
QmFySXRlbSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIShjdXJyZW50VGFiQmFySXRlbSBpbnN0
YW5jZW9mIFdJLlBpbm5lZFRhYkJhckl0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRUYWJCYXJJdGVtLmVsZW1lbnQuc3R5bGUubGVmdCA9IGV4dHJhU3BhY2VCZXR3ZWVuTm9ybWFs
QW5kUGlubmVkVGFicyArIGxlZnQgKyAicHgiOworICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9
IHNpemVBbmRQb3NpdGlvbi53aWR0aDsKKyAgICAgICAgICAgICAgICAgICAgbGFzdE5vcm1hbFRh
YkJhckl0ZW0gPSBjdXJyZW50VGFiQmFySXRlbTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgbGVmdCA9IHNpemVBbmRQb3NpdGlvbi5sZWZ0ICsgc2l6ZUFuZFBv
c2l0aW9uLndpZHRoOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUaGUgc2VsZWN0
ZWQgdGFiIGFuZCBsYXN0IHRhYiBuZWVkIHRvIGRyYXcgYSByaWdodCBib3JkZXIgYXMgd2VsbCwg
c28gbWFrZSB0aGVtIDFweCB3aWRlci4KKyAgICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZFRh
YkJhckl0ZW0pCisgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJCYXJJdGVtLmVsZW1l
bnQuc3R5bGUud2lkdGggPSAocGFyc2VGbG9hdCh0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0uZWxl
bWVudC5zdHlsZS53aWR0aCkgKyAxKSArICJweCI7CisKKyAgICAgICAgICAgIGlmIChsYXN0Tm9y
bWFsVGFiQmFySXRlbSAhPT0gdGhpcy5fc2VsZWN0ZWRUYWJCYXJJdGVtKQorICAgICAgICAgICAg
ICAgIGxhc3ROb3JtYWxUYWJCYXJJdGVtLmVsZW1lbnQuc3R5bGUud2lkdGggPSAocGFyc2VGbG9h
dChsYXN0Tm9ybWFsVGFiQmFySXRlbS5lbGVtZW50LnN0eWxlLndpZHRoKSArIDEpICsgInB4IjsK
KworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdFRyYW5z
aXRpb25FbmQiLCByZW1vdmVTdHlsZXNMaXN0ZW5lcik7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiByZW1vdmVTdHlsZXMoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgc2Vs
ZWN0ZWQgdGFiIG5lZWRzIHRvIHN0b3AgZHJhd2luZyB0aGUgcmlnaHQgYm9yZGVyLCBzbyBtYWtl
IGl0IDFweCBzbWFsbGVyLiBPbmx5IGlmIGl0IGlzbid0IHRoZSBsYXN0LgorICAgICAgICAgICAg
aWYgKHRoaXMuX3NlbGVjdGVkVGFiQmFySXRlbSAmJiB0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0g
IT09IGxhc3ROb3JtYWxUYWJCYXJJdGVtKQorICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVk
VGFiQmFySXRlbS5lbGVtZW50LnN0eWxlLndpZHRoID0gKHBhcnNlRmxvYXQodGhpcy5fc2VsZWN0
ZWRUYWJCYXJJdGVtLmVsZW1lbnQuc3R5bGUud2lkdGgpIC0gMSkgKyAicHgiOworCisgICAgICAg
ICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiYW5pbWF0aW5nIik7CisgICAgICAg
ICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiY2xvc2luZy10YWIiKTsKKworICAg
ICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTsKKworICAgICAgICAgICAgdGhpcy5lbGVtZW50
LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmtpdFRyYW5zaXRpb25FbmQiLCByZW1vdmVTdHlsZXNM
aXN0ZW5lcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW9wdGlvbnMuc3VwcHJlc3NBbmlt
YXRpb25zKSB7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgic3RhdGlj
LWxheW91dCIpOworCisgICAgICAgICAgICB0aGlzLl90YWJBbmltYXRlZENsb3NlZFNpbmNlTW91
c2VFbnRlciA9IHRydWU7CisKKyAgICAgICAgICAgIHRoaXMuX2FwcGx5VGFiQmFySXRlbVNpemVz
QW5kUG9zaXRpb25zKGJlZm9yZVRhYlNpemVzQW5kUG9zaXRpb25zKTsKKworICAgICAgICAgICAg
dmFyIHJlbW92ZVN0eWxlc0xpc3RlbmVyID0gcmVtb3ZlU3R5bGVzLmJpbmQodGhpcyk7CisKKyAg
ICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlVGFicy5iaW5kKHRoaXMpKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aGlzLm5lZWRzTGF5b3V0KCk7CisKKyAgICAg
ICAgdGhpcy51cGRhdGVOZXdUYWJUYWJCYXJJdGVtU3RhdGUoKTsKKworICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXSS5UYWJCYXIuRXZlbnQuVGFiQmFySXRlbVJlbW92ZWQs
IHt0YWJCYXJJdGVtfSk7CisKKyAgICAgICAgaWYgKHNob3VsZE9wZW5EZWZhdWx0VGFiKQorICAg
ICAgICAgICAgdGhpcy5fb3BlbkRlZmF1bHRUYWIoKTsKKworICAgICAgICByZXR1cm4gdGFiQmFy
SXRlbTsKKyAgICB9CisKKyAgICBzZWxlY3RQcmV2aW91c1RhYigpCisgICAgeworICAgICAgICBp
ZiAodGhpcy5fdGFiQmFySXRlbXMubGVuZ3RoIDw9IDEpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSB0aGlzLl90YWJCYXJJdGVtcy5pbmRleE9mKHRoaXMu
X3NlbGVjdGVkVGFiQmFySXRlbSk7CisgICAgICAgIHZhciBuZXdJbmRleCA9IHN0YXJ0SW5kZXg7
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChuZXdJbmRleCA9PT0gMCkKKyAgICAgICAg
ICAgICAgICBuZXdJbmRleCA9IHRoaXMuX3RhYkJhckl0ZW1zLmxlbmd0aCAtIDE7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV3SW5kZXgtLTsKKworICAgICAgICAgICAgaWYg
KCEodGhpcy5fdGFiQmFySXRlbXNbbmV3SW5kZXhdIGluc3RhbmNlb2YgV0kuUGlubmVkVGFiQmFy
SXRlbSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gd2hpbGUgKG5ld0luZGV4
ICE9PSBzdGFydEluZGV4KTsKKworICAgICAgICBpZiAobmV3SW5kZXggPT09IHN0YXJ0SW5kZXgp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkJhckl0ZW0g
PSB0aGlzLl90YWJCYXJJdGVtc1tuZXdJbmRleF07CisgICAgfQorCisgICAgc2VsZWN0TmV4dFRh
YigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fdGFiQmFySXRlbXMubGVuZ3RoIDw9IDEpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSB0aGlzLl90YWJC
YXJJdGVtcy5pbmRleE9mKHRoaXMuX3NlbGVjdGVkVGFiQmFySXRlbSk7CisgICAgICAgIHZhciBu
ZXdJbmRleCA9IHN0YXJ0SW5kZXg7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChuZXdJ
bmRleCA9PT0gdGhpcy5fdGFiQmFySXRlbXMubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgICAgICBu
ZXdJbmRleCA9IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV3SW5kZXgr
KzsKKworICAgICAgICAgICAgaWYgKCEodGhpcy5fdGFiQmFySXRlbXNbbmV3SW5kZXhdIGluc3Rh
bmNlb2YgV0kuUGlubmVkVGFiQmFySXRlbSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0gd2hpbGUgKG5ld0luZGV4ICE9PSBzdGFydEluZGV4KTsKKworICAgICAgICBpZiAobmV3
SW5kZXggPT09IHN0YXJ0SW5kZXgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhp
cy5zZWxlY3RlZFRhYkJhckl0ZW0gPSB0aGlzLl90YWJCYXJJdGVtc1tuZXdJbmRleF07CisgICAg
fQorCisgICAgZ2V0IHNlbGVjdGVkVGFiQmFySXRlbSgpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fc2VsZWN0ZWRUYWJCYXJJdGVtOworICAgIH0KKworICAgIHNldCBzZWxlY3RlZFRhYkJh
ckl0ZW0odGFiQmFySXRlbU9ySW5kZXgpCisgICAgeworICAgICAgICBsZXQgdGFiQmFySXRlbSA9
IHRoaXMuX2ZpbmRUYWJCYXJJdGVtKHRhYkJhckl0ZW1PckluZGV4KTsKKyAgICAgICAgaWYgKHRh
YkJhckl0ZW0gPT09IHRoaXMuX25ld1RhYlRhYkJhckl0ZW0pIHsKKyAgICAgICAgICAgIC8vIEdl
dCB0aGUgaXRlbSBiZWZvcmUgdGhlIE5ldy1UYWIgaXRlbSBzaW5jZSBpdCBpcyBub3Qgc2VsZWN0
YWJsZS4KKyAgICAgICAgICAgIHRhYkJhckl0ZW0gPSB0aGlzLl90YWJCYXJJdGVtc1t0aGlzLm5v
cm1hbFRhYkNvdW50IC0gMV07CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5fc2VsZWN0
ZWRUYWJCYXJJdGVtID09PSB0YWJCYXJJdGVtKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmICh0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0pCisgICAgICAgICAgICB0aGlzLl9zZWxl
Y3RlZFRhYkJhckl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTsKKworICAgICAgICB0aGlzLl9zZWxlY3Rl
ZFRhYkJhckl0ZW0gPSB0YWJCYXJJdGVtIHx8IG51bGw7CisKKyAgICAgICAgaWYgKHRoaXMuX3Nl
bGVjdGVkVGFiQmFySXRlbSkgeworICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJCYXJJdGVt
LnNlbGVjdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZFRhYkJhckl0
ZW0uZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImhpZGRlbiIpKQorICAgICAgICAgICAgICAg
IHRoaXMubmVlZHNMYXlvdXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdJLlRhYkJhci5FdmVudC5UYWJCYXJJdGVtU2VsZWN0ZWQpOworICAg
IH0KKworICAgIGdldCB0YWJCYXJJdGVtcygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
dGFiQmFySXRlbXM7CisgICAgfQorCisgICAgZ2V0IG5vcm1hbFRhYkNvdW50KCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl90YWJCYXJJdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICEoaXRlbSBp
bnN0YW5jZW9mIFdJLlBpbm5lZFRhYkJhckl0ZW0pKS5sZW5ndGg7CisgICAgfQorCisgICAgLy8g
UHJvdGVjdGVkCisKKyAgICBsYXlvdXQoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuZWxlbWVu
dC5jbGFzc0xpc3QuY29udGFpbnMoInN0YXRpYy1sYXlvdXQiKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2FsY3VsYXRlLXdpZHRo
Iik7CisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJjb2xsYXBzZWQiKTsK
KworICAgICAgICBmdW5jdGlvbiBmb3JjZUl0ZW1IaWRkZW4oaXRlbSwgaGlkZGVuKSB7CisgICAg
ICAgICAgICBpdGVtLmVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgiaGlkZGVuIiwgISFoaWRkZW4p
OworICAgICAgICB9CisKKyAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLl90YWJCYXJJdGVt
cykKKyAgICAgICAgICAgIGZvcmNlSXRlbUhpZGRlbihpdGVtLCBpdGVtID09PSB0aGlzLl90YWJQ
aWNrZXJUYWJCYXJJdGVtKTsKKworICAgICAgICBmdW5jdGlvbiBtZWFzdXJlSXRlbVdpZHRoKGl0
ZW0pIHsKKyAgICAgICAgICAgIGlmICghaXRlbVtXSS5UYWJCYXIuQ2FjaGVkV2lkdGhTeW1ib2xd
KQorICAgICAgICAgICAgICAgIGl0ZW1bV0kuVGFiQmFyLkNhY2hlZFdpZHRoU3ltYm9sXSA9IGl0
ZW0uZWxlbWVudC5yZWFsT2Zmc2V0V2lkdGg7CisgICAgICAgICAgICByZXR1cm4gaXRlbVtXSS5U
YWJCYXIuQ2FjaGVkV2lkdGhTeW1ib2xdOworICAgICAgICB9CisKKyAgICAgICAgbGV0IHJlY2Fs
Y3VsYXRlSXRlbVdpZHRocyA9ICgpID0+IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90YWJC
YXJJdGVtcy5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PiB7CisgICAgICAgICAgICAgICAgaXRlbVtX
SS5UYWJCYXIuQ2FjaGVkV2lkdGhTeW1ib2xdID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAg
IHJldHVybiB0b3RhbCArIG1lYXN1cmVJdGVtV2lkdGgoaXRlbSk7CisgICAgICAgICAgICB9LCAw
KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLl9oaWRkZW5UYWJCYXJJdGVtcyA9IFtdOwor
CisgICAgICAgIGxldCB0b3RhbEl0ZW1XaWR0aCA9IHJlY2FsY3VsYXRlSXRlbVdpZHRocygpOwor
ICAgICAgICBsZXQgYmFyV2lkdGggPSB0aGlzLmVsZW1lbnQucmVhbE9mZnNldFdpZHRoOworCisg
ICAgICAgIGlmICh0b3RhbEl0ZW1XaWR0aCA+IGJhcldpZHRoKSB7CisgICAgICAgICAgICB0aGlz
LmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29sbGFwc2VkIik7CisgICAgICAgICAgICB0b3RhbEl0
ZW1XaWR0aCA9IHJlY2FsY3VsYXRlSXRlbVdpZHRocygpOworICAgICAgICAgICAgaWYgKHRvdGFs
SXRlbVdpZHRoID4gYmFyV2lkdGgpIHsKKyAgICAgICAgICAgICAgICBmb3JjZUl0ZW1IaWRkZW4o
dGhpcy5fdGFiUGlja2VyVGFiQmFySXRlbSwgZmFsc2UpOworICAgICAgICAgICAgICAgIHRvdGFs
SXRlbVdpZHRoICs9IG1lYXN1cmVJdGVtV2lkdGgodGhpcy5fdGFiUGlja2VyVGFiQmFySXRlbSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxldCB0YWJCYXJJdGVtcyA9IHRoaXMuX3Rh
YkJhckl0ZW1zRnJvbUxlZnRUb1JpZ2h0KCk7CisgICAgICAgICAgICBsZXQgaW5kZXggPSB0YWJC
YXJJdGVtcy5sZW5ndGg7CisgICAgICAgICAgICB3aGlsZSAodG90YWxJdGVtV2lkdGggPiBiYXJX
aWR0aCAmJiAtLWluZGV4ID49IDApIHsKKyAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IHRhYkJh
ckl0ZW1zW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gdGhpcy5zZWxlY3Rl
ZFRhYkJhckl0ZW0gfHwgaXRlbSBpbnN0YW5jZW9mIFdJLlBpbm5lZFRhYkJhckl0ZW0pCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdG90YWxJdGVtV2lk
dGggLT0gbWVhc3VyZUl0ZW1XaWR0aChpdGVtKTsKKyAgICAgICAgICAgICAgICBmb3JjZUl0ZW1I
aWRkZW4oaXRlbSwgdHJ1ZSk7CisKKyAgICAgICAgICAgICAgICB0aGlzLl9oaWRkZW5UYWJCYXJJ
dGVtcy5wdXNoKGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhp
cy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoImNhbGN1bGF0ZS13aWR0aCIpOworICAgIH0KKwor
ICAgIC8vIFByaXZhdGUKKworICAgIF90YWJCYXJJdGVtc0Zyb21MZWZ0VG9SaWdodCgpCisgICAg
eworICAgICAgICByZXR1cm4gV0kucmVzb2x2ZWRMYXlvdXREaXJlY3Rpb24oKSA9PT0gV0kuTGF5
b3V0RGlyZWN0aW9uLkxUUiA/IHRoaXMuX3RhYkJhckl0ZW1zIDogdGhpcy5fdGFiQmFySXRlbXMu
c2xpY2UoKS5yZXZlcnNlKCk7CisgICAgfQorCisgICAgX2ZpbmRUYWJCYXJJdGVtKHRhYkJhckl0
ZW1PckluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKHR5cGVvZiB0YWJCYXJJdGVtT3JJbmRleCA9
PT0gIm51bWJlciIpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFiQmFySXRlbXNbdGFiQmFy
SXRlbU9ySW5kZXhdIHx8IG51bGw7CisKKyAgICAgICAgaWYgKHRhYkJhckl0ZW1PckluZGV4IGlu
c3RhbmNlb2YgV0kuVGFiQmFySXRlbSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3RhYkJhckl0
ZW1zLmluY2x1ZGVzKHRhYkJhckl0ZW1PckluZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGFiQmFySXRlbU9ySW5kZXg7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICB9CisKKyAgICBfaGFzTW9yZVRoYW5PbmVOb3JtYWxUYWIoKQorICAgIHsKKyAgICAgICAgbGV0
IG5vcm1hbFRhYkNvdW50ID0gMDsKKyAgICAgICAgZm9yIChsZXQgdGFiQmFySXRlbSBvZiB0aGlz
Ll90YWJCYXJJdGVtcykgeworICAgICAgICAgICAgaWYgKHRhYkJhckl0ZW0gaW5zdGFuY2VvZiBX
SS5QaW5uZWRUYWJCYXJJdGVtKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICArK25vcm1hbFRhYkNvdW50OworICAgICAgICAgICAgaWYgKG5vcm1hbFRhYkNvdW50ID49
IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgX29wZW5EZWZhdWx0VGFiKCkKKyAgICB7CisgICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLlRhYkJhci5FdmVudC5PcGVuRGVm
YXVsdFRhYik7CisgICAgfQorCisgICAgX3JlY29yZFRhYkJhckl0ZW1TaXplc0FuZFBvc2l0aW9u
cygpCisgICAgeworICAgICAgICB2YXIgdGFiQmFySXRlbVNpemVzQW5kUG9zaXRpb25zID0gbmV3
IE1hcDsKKworICAgICAgICBjb25zdCBiYXJSZWN0ID0gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpOworCisgICAgICAgIGZvciAodmFyIHRhYkJhckl0ZW0gb2YgdGhpcy5fdGFi
QmFySXRlbXMpIHsKKyAgICAgICAgICAgIHZhciBib3VuZGluZ1JlY3QgPSB0YWJCYXJJdGVtLmVs
ZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgICAgICB0YWJCYXJJdGVtU2l6
ZXNBbmRQb3NpdGlvbnMuc2V0KHRhYkJhckl0ZW0sIHtsZWZ0OiBib3VuZGluZ1JlY3QubGVmdCAt
IGJhclJlY3QubGVmdCwgd2lkdGg6IGJvdW5kaW5nUmVjdC53aWR0aH0pOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHRhYkJhckl0ZW1TaXplc0FuZFBvc2l0aW9uczsKKyAgICB9CisKKyAg
ICBfYXBwbHlUYWJCYXJJdGVtU2l6ZXNBbmRQb3NpdGlvbnModGFiQmFySXRlbVNpemVzQW5kUG9z
aXRpb25zLCBza2lwVGFiQmFySXRlbSkKKyAgICB7CisgICAgICAgIGZvciAodmFyIFt0YWJCYXJJ
dGVtLCBzaXplQW5kUG9zaXRpb25dIG9mIHRhYkJhckl0ZW1TaXplc0FuZFBvc2l0aW9ucykgewor
ICAgICAgICAgICAgaWYgKHNraXBUYWJCYXJJdGVtICYmIHRhYkJhckl0ZW0gPT09IHNraXBUYWJC
YXJJdGVtKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGFiQmFySXRl
bS5lbGVtZW50LnN0eWxlLmxlZnQgPSBzaXplQW5kUG9zaXRpb24ubGVmdCArICJweCI7CisgICAg
ICAgICAgICB0YWJCYXJJdGVtLmVsZW1lbnQuc3R5bGUud2lkdGggPSBzaXplQW5kUG9zaXRpb24u
d2lkdGggKyAicHgiOworICAgICAgICB9CisgICAgfQorCisgICAgX2NsZWFyVGFiQmFySXRlbVNp
emVzQW5kUG9zaXRpb25zKHNraXBUYWJCYXJJdGVtKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIg
dGFiQmFySXRlbSBvZiB0aGlzLl90YWJCYXJJdGVtcykgeworICAgICAgICAgICAgaWYgKHNraXBU
YWJCYXJJdGVtICYmIHRhYkJhckl0ZW0gPT09IHNraXBUYWJCYXJJdGVtKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGFiQmFySXRlbS5lbGVtZW50LnN0eWxlLmxlZnQg
PSBudWxsOworICAgICAgICAgICAgdGFiQmFySXRlbS5lbGVtZW50LnN0eWxlLndpZHRoID0gbnVs
bDsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9maW5pc2hFeHBhbmRpbmdUYWJzQWZ0ZXJDbG9z
ZShiZWZvcmVUYWJTaXplc0FuZFBvc2l0aW9ucykKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcg
UHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHRoaXMuX3RhYkFuaW1hdGVkQ2xvc2VkU2luY2VNb3VzZUVudGVyKTsKKyAgICAgICAg
ICAgIHRoaXMuX3RhYkFuaW1hdGVkQ2xvc2VkU2luY2VNb3VzZUVudGVyID0gZmFsc2U7CisKKyAg
ICAgICAgICAgIGlmICghYmVmb3JlVGFiU2l6ZXNBbmRQb3NpdGlvbnMpCisgICAgICAgICAgICAg
ICAgYmVmb3JlVGFiU2l6ZXNBbmRQb3NpdGlvbnMgPSB0aGlzLl9yZWNvcmRUYWJCYXJJdGVtU2l6
ZXNBbmRQb3NpdGlvbnMoKTsKKworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5y
ZW1vdmUoInN0YXRpYy1sYXlvdXQiKTsKKyAgICAgICAgICAgIHRoaXMuX2NsZWFyVGFiQmFySXRl
bVNpemVzQW5kUG9zaXRpb25zKCk7CisKKyAgICAgICAgICAgIHZhciBhZnRlclRhYlNpemVzQW5k
UG9zaXRpb25zID0gdGhpcy5fcmVjb3JkVGFiQmFySXRlbVNpemVzQW5kUG9zaXRpb25zKCk7CisK
KyAgICAgICAgICAgIHRoaXMuX2FwcGx5VGFiQmFySXRlbVNpemVzQW5kUG9zaXRpb25zKGJlZm9y
ZVRhYlNpemVzQW5kUG9zaXRpb25zKTsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xp
c3QuYWRkKCJzdGF0aWMtbGF5b3V0Iik7CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGFuaW1hdGVU
YWJzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NM
aXN0LmFkZCgic3RhdGljLWxheW91dCIpOworICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5j
bGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKTsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQu
Y2xhc3NMaXN0LmFkZCgiZXhwYW5kaW5nLXRhYnMiKTsKKworICAgICAgICAgICAgICAgIHRoaXMu
X2FwcGx5VGFiQmFySXRlbVNpemVzQW5kUG9zaXRpb25zKGFmdGVyVGFiU2l6ZXNBbmRQb3NpdGlv
bnMpOworCisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndl
YmtpdFRyYW5zaXRpb25FbmQiLCByZW1vdmVTdHlsZXNMaXN0ZW5lcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHJlbW92ZVN0eWxlcygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoInN0YXRpYy1sYXlv
dXQiKTsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiYW5p
bWF0aW5nIik7CisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUo
ImV4cGFuZGluZy10YWJzIik7CisKKyAgICAgICAgICAgICAgICB0aGlzLl9jbGVhclRhYkJhckl0
ZW1TaXplc0FuZFBvc2l0aW9ucygpOworCisgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMYXlv
dXQoKTsKKworICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVy
KCJ3ZWJraXRUcmFuc2l0aW9uRW5kIiwgcmVtb3ZlU3R5bGVzTGlzdGVuZXIpOworCisgICAgICAg
ICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcmVt
b3ZlU3R5bGVzTGlzdGVuZXIgPSByZW1vdmVTdHlsZXMuYmluZCh0aGlzKTsKKworICAgICAgICAg
ICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGVUYWJzLmJpbmQodGhpcykpOworICAgICAg
ICB9LmJpbmQodGhpcykpOworICAgIH0KKworICAgIF9oYW5kbGVNb3VzZURvd24oZXZlbnQpCisg
ICAgeworICAgICAgICAvLyBPbmx5IGNvbnNpZGVyIGxlZnQgbW91c2UgY2xpY2tzIGZvciB0YWIg
bW92ZW1lbnQuCisgICAgICAgIGlmIChldmVudC5idXR0b24gIT09IDAgfHwgZXZlbnQuY3RybEtl
eSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBsZXQgaXRlbUVsZW1lbnQgPSBldmVu
dC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcyhXSS5UYWJCYXJJdGVtLlN0eWxl
Q2xhc3NOYW1lKTsKKyAgICAgICAgaWYgKCFpdGVtRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBsZXQgdGFiQmFySXRlbSA9IGl0ZW1FbGVtZW50W1dJLlRhYkJhckl0ZW0u
RWxlbWVudFJlZmVyZW5jZVN5bWJvbF07CisgICAgICAgIGlmICghdGFiQmFySXRlbSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGFiQmFySXRlbS5kaXNhYmxlZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGFiQmFySXRlbSA9PT0gdGhpcy5fbmV3VGFi
VGFiQmFySXRlbSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGFiQmFySXRl
bSA9PT0gdGhpcy5fdGFiUGlja2VyVGFiQmFySXRlbSkgeworICAgICAgICAgICAgaWYgKCF0aGlz
Ll9oaWRkZW5UYWJCYXJJdGVtcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBsZXQgY29udGV4dE1lbnUgPSBXSS5Db250ZXh0TWVudS5jcmVhdGVGcm9tRXZl
bnQoZXZlbnQpOworICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLl9oaWRkZW5UYWJC
YXJJdGVtcykKKyAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKGl0ZW0udGl0
bGUsICgpID0+IHRoaXMuc2VsZWN0ZWRUYWJCYXJJdGVtID0gaXRlbSk7CisKKyAgICAgICAgICAg
IGNvbnRleHRNZW51LnNob3coKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGxldCBjbG9zZUJ1dHRvbkVsZW1lbnQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9k
ZU9yU2VsZldpdGhDbGFzcyhXSS5UYWJCYXJJdGVtLkNsb3NlQnV0dG9uU3R5bGVDbGFzc05hbWUp
OworICAgICAgICBpZiAoY2xvc2VCdXR0b25FbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJCYXJJdGVtID0gdGFiQmFySXRlbTsKKworICAgICAg
ICBpZiAodGFiQmFySXRlbSBpbnN0YW5jZW9mIFdJLlBpbm5lZFRhYkJhckl0ZW0gfHwgIXRoaXMu
X2hhc01vcmVUaGFuT25lTm9ybWFsVGFiKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdGhpcy5fZmlyc3ROb3JtYWxUYWJJdGVtSW5kZXggPSAwOworICAgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IHRoaXMuX3RhYkJhckl0ZW1zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5fdGFiQmFySXRlbXNbaV0gaW5zdGFuY2VvZiBXSS5QaW5uZWRUYWJCYXJJdGVtKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB0aGlzLl9maXJzdE5vcm1h
bFRhYkl0ZW1JbmRleCA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXMuX21vdXNlSXNEb3duID0gdHJ1ZTsKKworICAgICAgICB0aGlzLl9tb3VzZU1vdmVk
RXZlbnRMaXN0ZW5lciA9IHRoaXMuX2hhbmRsZU1vdXNlTW92ZWQuYmluZCh0aGlzKTsKKyAgICAg
ICAgdGhpcy5fbW91c2VVcEV2ZW50TGlzdGVuZXIgPSB0aGlzLl9oYW5kbGVNb3VzZVVwLmJpbmQo
dGhpcyk7CisKKyAgICAgICAgLy8gUmVnaXN0ZXIgdGhlc2UgbGlzdGVuZXJzIG9uIHRoZSBkb2N1
bWVudCBzbyB3ZSBjYW4gdHJhY2sgdGhlIG1vdXNlIGlmIGl0IGxlYXZlcyB0aGUgdGFiIGJhci4K
KyAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5fbW91
c2VNb3ZlZEV2ZW50TGlzdGVuZXIsIHRydWUpOworICAgICAgICBkb2N1bWVudC5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5fbW91c2VVcEV2ZW50TGlzdGVuZXIsIHRydWUpOworCisg
ICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdh
dGlvbigpOworICAgIH0KKworICAgIF9oYW5kbGVDbGljayhldmVudCkKKyAgICB7CisgICAgICAg
IHZhciBpdGVtRWxlbWVudCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENs
YXNzKFdJLlRhYkJhckl0ZW0uU3R5bGVDbGFzc05hbWUpOworICAgICAgICBpZiAoIWl0ZW1FbGVt
ZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciB0YWJCYXJJdGVtID0gaXRl
bUVsZW1lbnRbV0kuVGFiQmFySXRlbS5FbGVtZW50UmVmZXJlbmNlU3ltYm9sXTsKKyAgICAgICAg
aWYgKCF0YWJCYXJJdGVtKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0YWJC
YXJJdGVtLmRpc2FibGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0IGNs
aWNrZWRNaWRkbGVCdXR0b24gPSBldmVudC5idXR0b24gPT09IDE7CisKKyAgICAgICAgdmFyIGNs
b3NlQnV0dG9uRWxlbWVudCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENs
YXNzKFdJLlRhYkJhckl0ZW0uQ2xvc2VCdXR0b25TdHlsZUNsYXNzTmFtZSk7CisgICAgICAgIGlm
IChjbG9zZUJ1dHRvbkVsZW1lbnQgfHwgY2xpY2tlZE1pZGRsZUJ1dHRvbikgeworICAgICAgICAg
ICAgLy8gRGlzYWxsb3cgY2xvc2luZyB0aGUgZGVmYXVsdCB0YWIgaWYgaXQgaXMgdGhlIG9ubHkg
dGFiLgorICAgICAgICAgICAgaWYgKHRhYkJhckl0ZW0uaXNEZWZhdWx0VGFiICYmIHRoaXMuZWxl
bWVudC5jbGFzc0xpc3QuY29udGFpbnMoInNpbmdsZS10YWIiKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIGlmICghZXZlbnQuYWx0S2V5KSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5yZW1vdmVUYWJCYXJJdGVtKHRhYkJhckl0ZW0sIHtzdXBwcmVzc0V4cGFuc2lvbjog
dHJ1ZX0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX3RhYkJhckl0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsg
LS1pKSB7CisgICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLl90YWJCYXJJdGVtc1tpXTsK
KyAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PT0gdGFiQmFySXRlbSB8fCBpdGVtIGluc3RhbmNl
b2YgV0kuUGlubmVkVGFiQmFySXRlbSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVUYWJCYXJJdGVtKGl0ZW0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgX2hhbmRsZU1vdXNlTW92ZWQoZXZlbnQpCisgICAg
eworICAgICAgICBjb25zb2xlLmFzc2VydChldmVudC5idXR0b24gPT09IDApOworICAgICAgICBj
b25zb2xlLmFzc2VydCh0aGlzLl9tb3VzZUlzRG93bik7CisgICAgICAgIGlmICghdGhpcy5fbW91
c2VJc0Rvd24pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29uc29sZS5hc3NlcnQo
dGhpcy5fc2VsZWN0ZWRUYWJCYXJJdGVtKTsKKyAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3RlZFRh
YkJhckl0ZW0pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTsKKyAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisKKyAgICAgICAgaWYg
KCF0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJzdGF0aWMtbGF5b3V0IikpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2FwcGx5VGFiQmFySXRlbVNpemVzQW5kUG9zaXRpb25zKHRoaXMuX3Jl
Y29yZFRhYkJhckl0ZW1TaXplc0FuZFBvc2l0aW9ucygpKTsKKyAgICAgICAgICAgIHRoaXMuZWxl
bWVudC5jbGFzc0xpc3QuYWRkKCJzdGF0aWMtbGF5b3V0Iik7CisgICAgICAgICAgICB0aGlzLmVs
ZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmctdGFiIik7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAodGhpcy5fbW91c2VPZmZzZXQgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIHRoaXMu
X21vdXNlT2Zmc2V0ID0gZXZlbnQucGFnZVggLSB0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0uZWxl
bWVudC50b3RhbE9mZnNldExlZnQ7CisKKyAgICAgICAgdmFyIHRhYkJhck1vdXNlT2Zmc2V0ID0g
ZXZlbnQucGFnZVggLSB0aGlzLmVsZW1lbnQudG90YWxPZmZzZXRMZWZ0OworICAgICAgICB2YXIg
bmV3TGVmdCA9IHRhYkJhck1vdXNlT2Zmc2V0IC0gdGhpcy5fbW91c2VPZmZzZXQ7CisKKyAgICAg
ICAgdGhpcy5fc2VsZWN0ZWRUYWJCYXJJdGVtLmVsZW1lbnQuc3R5bGUubGVmdCA9IG5ld0xlZnQg
KyAicHgiOworCisgICAgICAgIHZhciBzZWxlY3RlZFRhYk1pZFggPSBuZXdMZWZ0ICsgKHRoaXMu
X3NlbGVjdGVkVGFiQmFySXRlbS5lbGVtZW50LnJlYWxPZmZzZXRXaWR0aCAvIDIpOworCisgICAg
ICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLl90YWJCYXJJdGVtcy5pbmRleE9mKHRoaXMuX3Nl
bGVjdGVkVGFiQmFySXRlbSk7CisgICAgICAgIHZhciBuZXdJbmRleCA9IGN1cnJlbnRJbmRleDsK
KworICAgICAgICBmb3IgKGxldCB0YWJCYXJJdGVtIG9mIHRoaXMuX3RhYkJhckl0ZW1zKSB7Cisg
ICAgICAgICAgICBpZiAodGFiQmFySXRlbSA9PT0gdGhpcy5fc2VsZWN0ZWRUYWJCYXJJdGVtKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB2YXIgdGFiQmFySXRlbVJl
Y3QgPSB0YWJCYXJJdGVtLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisKKyAgICAg
ICAgICAgIGlmIChzZWxlY3RlZFRhYk1pZFggPCB0YWJCYXJJdGVtUmVjdC5sZWZ0IHx8IHNlbGVj
dGVkVGFiTWlkWCA+IHRhYkJhckl0ZW1SZWN0LnJpZ2h0KQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBuZXdJbmRleCA9IHRoaXMuX3RhYkJhckl0ZW1zLmluZGV4T2Yo
dGFiQmFySXRlbSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFN1YnRyYWN0IDEgZnJvbSBub3JtYWxUYWJDb3VudCBzaW5jZSBhcnJheXMgYmVnaW4gaW5kZXhp
bmcgYXQgMC4KKyAgICAgICAgbmV3SW5kZXggPSBOdW1iZXIuY29uc3RyYWluKG5ld0luZGV4LCB0
aGlzLl9maXJzdE5vcm1hbFRhYkl0ZW1JbmRleCwgdGhpcy5ub3JtYWxUYWJDb3VudCAtIDEpOwor
CisgICAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IG5ld0luZGV4KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHRoaXMuX3RhYkJhckl0ZW1zLnNwbGljZShjdXJyZW50SW5kZXgsIDEp
OworICAgICAgICB0aGlzLl90YWJCYXJJdGVtcy5zcGxpY2UobmV3SW5kZXgsIDAsIHRoaXMuX3Nl
bGVjdGVkVGFiQmFySXRlbSk7CisKKyAgICAgICAgbGV0IG5leHRTaWJsaW5nID0gdGhpcy5fdGFi
QmFySXRlbXNbbmV3SW5kZXggKyAxXTsKKyAgICAgICAgbGV0IG5leHRTaWJsaW5nRWxlbWVudCA9
IG5leHRTaWJsaW5nID8gbmV4dFNpYmxpbmcuZWxlbWVudCA6IHRoaXMuX25ld1RhYlRhYkJhckl0
ZW0uZWxlbWVudDsKKworICAgICAgICB0aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX3Nl
bGVjdGVkVGFiQmFySXRlbS5lbGVtZW50LCBuZXh0U2libGluZ0VsZW1lbnQpOworCisgICAgICAg
IC8vIEZJWE1FOiBBbmltYXRlIHRoZSB0YWJzIHRoYXQgbW92ZSB0byBtYWtlIHJvb20gZm9yIHRo
ZSBzZWxlY3RlZCB0YWIuIFRoaXMgd2FzIGNhdXNpbmcgbWUgdHJvdWJsZSB3aGVuIEkgdHJpZWQu
CisKKyAgICAgICAgbGV0IGxlZnQgPSAwOworICAgICAgICBmb3IgKGxldCB0YWJCYXJJdGVtIG9m
IHRoaXMuX3RhYkJhckl0ZW1zRnJvbUxlZnRUb1JpZ2h0KCkpIHsKKyAgICAgICAgICAgIGlmICh0
YWJCYXJJdGVtICE9PSB0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0gJiYgdGFiQmFySXRlbSAhPT0g
dGhpcy5fbmV3VGFiVGFiQmFySXRlbSAmJiBwYXJzZUZsb2F0KHRhYkJhckl0ZW0uZWxlbWVudC5z
dHlsZS5sZWZ0KSAhPT0gbGVmdCkKKyAgICAgICAgICAgICAgICB0YWJCYXJJdGVtLmVsZW1lbnQu
c3R5bGUubGVmdCA9IGxlZnQgKyAicHgiOworICAgICAgICAgICAgbGVmdCArPSBwYXJzZUZsb2F0
KHRhYkJhckl0ZW0uZWxlbWVudC5zdHlsZS53aWR0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBfaGFuZGxlTW91c2VVcChldmVudCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGV2
ZW50LmJ1dHRvbiA9PT0gMCk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX21vdXNlSXNE
b3duKTsKKyAgICAgICAgaWYgKCF0aGlzLl9tb3VzZUlzRG93bikKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmctdGFi
Iik7CisKKyAgICAgICAgaWYgKCF0aGlzLl90YWJBbmltYXRlZENsb3NlZFNpbmNlTW91c2VFbnRl
cikgeworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoInN0YXRpYy1s
YXlvdXQiKTsKKyAgICAgICAgICAgIHRoaXMuX2NsZWFyVGFiQmFySXRlbVNpemVzQW5kUG9zaXRp
b25zKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZXQgbGVmdCA9IDA7CisgICAg
ICAgICAgICBmb3IgKGxldCB0YWJCYXJJdGVtIG9mIHRoaXMuX3RhYkJhckl0ZW1zRnJvbUxlZnRU
b1JpZ2h0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGFiQmFySXRlbSA9PT0gdGhpcy5fc2Vs
ZWN0ZWRUYWJCYXJJdGVtKQorICAgICAgICAgICAgICAgICAgICB0YWJCYXJJdGVtLmVsZW1lbnQu
c3R5bGUubGVmdCA9IGxlZnQgKyAicHgiOworICAgICAgICAgICAgICAgIGxlZnQgKz0gcGFyc2VG
bG9hdCh0YWJCYXJJdGVtLmVsZW1lbnQuc3R5bGUud2lkdGgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgdGhpcy5fbW91c2VJc0Rvd24gPSBmYWxzZTsKKyAgICAgICAgdGhp
cy5fbW91c2VPZmZzZXQgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZl
bnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5fbW91c2VNb3ZlZEV2ZW50TGlzdGVuZXIsIHRy
dWUpOworICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhp
cy5fbW91c2VVcEV2ZW50TGlzdGVuZXIsIHRydWUpOworCisgICAgICAgIHRoaXMuX21vdXNlTW92
ZWRFdmVudExpc3RlbmVyID0gbnVsbDsKKyAgICAgICAgdGhpcy5fbW91c2VVcEV2ZW50TGlzdGVu
ZXIgPSBudWxsOworCisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIGV2
ZW50LnN0b3BQcm9wYWdhdGlvbigpOworCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlz
dGVuZXJzKFdJLlRhYkJhci5FdmVudC5UYWJCYXJJdGVtc1Jlb3JkZXJlZCk7CisgICAgfQorCisg
ICAgX2hhbmRsZU1vdXNlTGVhdmUoZXZlbnQpCisgICAgeworICAgICAgICBpZiAodGhpcy5fbW91
c2VJc0Rvd24gfHwgIXRoaXMuX3RhYkFuaW1hdGVkQ2xvc2VkU2luY2VNb3VzZUVudGVyIHx8ICF0
aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJzdGF0aWMtbGF5b3V0IikgfHwgdGhpcy5l
bGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiYW5pbWF0aW5nIikpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgLy8gVGhpcyBldmVudCBjYW4gc3RpbGwgZmlyZSB3aGVuIHRoZSBtb3Vz
ZSBpcyBpbnNpZGUgdGhlIGVsZW1lbnQgaWYgRE9NIG5vZGVzIGFyZSBhZGRlZCwgcmVtb3ZlZCBv
ciBnZW5lcmFsbHkgY2hhbmdlIGluc2lkZS4KKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG1vdXNl
IHJlYWxseSBkaWQgbGVhdmUgdGhlIGVsZW1lbnQgYnkgY2hlY2tpbmcgdGhlIGJvdW5kcy4KKyAg
ICAgICAgLy8gRklYTUU6IElzIHRoaXMgYSBXZWJLaXQgYnVnIG9yIGNvcnJlY3QgYmVoYXZpb3I/
CisgICAgICAgIGNvbnN0IGJhclJlY3QgPSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCk7CisgICAgICAgIGNvbnN0IG5ld1RhYkl0ZW1SZWN0ID0gdGhpcy5fbmV3VGFiVGFiQmFy
SXRlbS5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICBpZiAoZXZlbnQu
cGFnZVkgPiBiYXJSZWN0LnRvcCAmJiBldmVudC5wYWdlWSA8IGJhclJlY3QuYm90dG9tICYmIGV2
ZW50LnBhZ2VYID4gYmFyUmVjdC5sZWZ0ICYmIGV2ZW50LnBhZ2VYIDwgKG5ld1RhYkl0ZW1SZWN0
ID8gbmV3VGFiSXRlbVJlY3QucmlnaHQgOiBiYXJSZWN0LnJpZ2h0KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB0aGlzLl9maW5pc2hFeHBhbmRpbmdUYWJzQWZ0ZXJDbG9zZSgpOwor
ICAgIH0KKworICAgIF9oYW5kbGVDb250ZXh0TWVudShldmVudCkKKyAgICB7CisgICAgICAgIGxl
dCBjb250ZXh0TWVudSA9IFdJLkNvbnRleHRNZW51LmNyZWF0ZUZyb21FdmVudChldmVudCk7CisK
KyAgICAgICAgZm9yIChsZXQgdGFiQ2xhc3Mgb2YgV0kua25vd25UYWJDbGFzc2VzKCkpIHsKKyAg
ICAgICAgICAgIGlmICh0YWJDbGFzcy5pc0VwaGVtZXJhbCgpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBsZXQgb3BlblRhYkJhckl0ZW0gPSBudWxsOworICAgICAg
ICAgICAgZm9yIChsZXQgdGFiQmFySXRlbSBvZiB0aGlzLl90YWJCYXJJdGVtcykgeworICAgICAg
ICAgICAgICAgIGxldCB0YWJDb250ZW50VmlldyA9IHRhYkJhckl0ZW0ucmVwcmVzZW50ZWRPYmpl
Y3Q7CisgICAgICAgICAgICAgICAgaWYgKCEodGFiQ29udGVudFZpZXcgaW5zdGFuY2VvZiBXSS5U
YWJDb250ZW50VmlldykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICAgICAgaWYgKHRhYkNvbnRlbnRWaWV3LnR5cGUgPT09IHRhYkNsYXNzLlR5cGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgb3BlblRhYkJhckl0ZW0gPSB0YWJCYXJJdGVtOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZENoZWNrYm94SXRlbSh0YWJDbGFzcy50YWJJbmZv
KCkudGl0bGUsICgpID0+IHsKKyAgICAgICAgICAgICAgICBpZiAob3BlblRhYkJhckl0ZW0pCisg
ICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFiQmFySXRlbShvcGVuVGFiQmFySXRlbSk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBXSS5jcmVhdGVOZXdU
YWJXaXRoVHlwZSh0YWJDbGFzcy5UeXBlLCB7c2hvdWxkU2hvd05ld1RhYjogdHJ1ZX0pOworICAg
ICAgICAgICAgfSwgISFvcGVuVGFiQmFySXRlbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBf
aGFuZGxlTmV3VGFiQ2xpY2soZXZlbnQpCisgICAgeworICAgICAgICBXSS5zaG93TmV3VGFiVGFi
KCk7CisgICAgfQorCisgICAgX2hhbmRsZVRhYlBpY2tlclRhYkNvbnRleHRNZW51KGV2ZW50KQor
ICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9oaWRkZW5UYWJCYXJJdGVtcy5sZW5ndGgpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0IGNvbnRleHRNZW51ID0gV0kuQ29udGV4dE1l
bnUuY3JlYXRlRnJvbUV2ZW50KGV2ZW50KTsKKyAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlz
Ll9oaWRkZW5UYWJCYXJJdGVtcykgeworICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRl
bShpdGVtLnRpdGxlLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkJh
ckl0ZW0gPSBpdGVtOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBf
aGFuZGxlTmV3VGFiTW91c2VFbnRlcihldmVudCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5f
dGFiQW5pbWF0ZWRDbG9zZWRTaW5jZU1vdXNlRW50ZXIgfHwgIXRoaXMuZWxlbWVudC5jbGFzc0xp
c3QuY29udGFpbnMoInN0YXRpYy1sYXlvdXQiKSB8fCB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmNv
bnRhaW5zKCJhbmltYXRpbmciKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlz
Ll9maW5pc2hFeHBhbmRpbmdUYWJzQWZ0ZXJDbG9zZSgpOworICAgIH0KK307CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNv
bnRlbnRWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
U2V0dGluZ3NUYWJDb250ZW50Vmlldy5qcwppbmRleCBlZGI0NjdhM2E2MDkwZjlkOGI4NjE4MmFk
ZTkyZjMxZGU4ZGZiZGRkLi43M2Y4YTdiY2E4NGI1YzRkMjIzYmI0MWU4MGNmNDkyOGI1ZjUzNjVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9T
ZXR0aW5nc1RhYkNvbnRlbnRWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcuanMKQEAgLTI1NCw2ICsyNTQs
OSBAQCBXSS5TZXR0aW5nc1RhYkNvbnRlbnRWaWV3ID0gY2xhc3MgU2V0dGluZ3NUYWJDb250ZW50
VmlldyBleHRlbmRzIFdJLlRhYkNvbnRlbnRWaQogICAgICAgICAgICAgZXhwZXJpbWVudGFsU2V0
dGluZ3NWaWV3LmFkZFNlcGFyYXRvcigpOwogICAgICAgICB9CiAKKyAgICAgICAgZXhwZXJpbWVu
dGFsU2V0dGluZ3NWaWV3LmFkZFNldHRpbmcoV0kuVUlTdHJpbmcoIlVzZXIgSW50ZXJmYWNlOiIp
LCBXSS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVOZXdUYWJCYXIsIFdJLlVJU3RyaW5nKCJF
bmFibGUgTmV3IFRhYiBCYXIiKSk7CisgICAgICAgIGV4cGVyaW1lbnRhbFNldHRpbmdzVmlldy5h
ZGRTZXBhcmF0b3IoKTsKKwogICAgICAgICBsZXQgcmVsb2FkSW5zcGVjdG9yQnV0dG9uID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICAgICAgIHJlbG9hZEluc3BlY3RvckJ1
dHRvbi50ZXh0Q29udGVudCA9IFdJLlVJU3RyaW5nKCJSZWxvYWQgV2ViIEluc3BlY3RvciIpOwog
ICAgICAgICByZWxvYWRJbnNwZWN0b3JCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAo
KSA9PiB7IHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsgfSk7CkBAIC0yNzEsNiArMjc0LDcgQEAg
V0kuU2V0dGluZ3NUYWJDb250ZW50VmlldyA9IGNsYXNzIFNldHRpbmdzVGFiQ29udGVudFZpZXcg
ZXh0ZW5kcyBXSS5UYWJDb250ZW50VmkKICAgICAgICAgbGlzdGVuRm9yQ2hhbmdlKFdJLnNldHRp
bmdzLmV4cGVyaW1lbnRhbExlZ2FjeVN0eWxlRWRpdG9yKTsKICAgICAgICAgbGlzdGVuRm9yQ2hh
bmdlKFdJLnNldHRpbmdzLmV4cGVyaW1lbnRhbExlZ2FjeVZpc3VhbFNpZGViYXIpOwogICAgICAg
ICBsaXN0ZW5Gb3JDaGFuZ2UoV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlTGF5ZXJzVGFi
KTsKKyAgICAgICAgbGlzdGVuRm9yQ2hhbmdlKFdJLnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJs
ZU5ld1RhYkJhcik7CiAKICAgICAgICAgdGhpcy5hZGRTZXR0aW5nc1ZpZXcoZXhwZXJpbWVudGFs
U2V0dGluZ3NWaWV3KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9UYWJCYXIuY3NzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvVGFiQmFyLmNzcwppbmRleCBhZmYwZDUxNDZlMWZjMDNiOTQwZGI5
NDI4OTkwZWY2NzZjMTI1ZjU5Li5iMDc5YTMxMzRmZjk0MzQxOWI2N2YyZmUyMzFhZTMzYzBlY2Uz
MGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9UYWJCYXIuY3NzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1RhYkJhci5jc3MKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UYWJCYXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9UYWJCYXIuanMKaW5kZXggNmY4ZGMzYmExMTRlNzA2NmI3YTY3ZDFkYWVmZGUx
YTJmNTM5ODg4OC4uNThjZTE4MzU1NTk0YjA5MGZmNzY3ODMxMTNlMzU5NGNhYmZjOTMyNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGFiQmFy
LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RhYkJh
ci5qcwpAQCAtNDgsMTEgKzQ4LDYgQEAgV0kuVGFiQmFyID0gY2xhc3MgVGFiQmFyIGV4dGVuZHMg
V0kuVmlldwogCiAgICAgICAgIHRoaXMuYWRkVGFiQmFySXRlbShXSS5zZXR0aW5nc1RhYkNvbnRl
bnRWaWV3LnRhYkJhckl0ZW0sIHtzdXBwcmVzc0FuaW1hdGlvbnM6IHRydWV9KTsKIAotICAgICAg
ICB0aGlzLl9uZXdUYWJUYWJCYXJJdGVtID0gbmV3IFdJLlBpbm5lZFRhYkJhckl0ZW0oIkltYWdl
cy9OZXdUYWJQbHVzLnN2ZyIsIFdJLlVJU3RyaW5nKCJDcmVhdGUgYSBuZXcgdGFiIikpOwotICAg
ICAgICB0aGlzLl9uZXdUYWJUYWJCYXJJdGVtLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91
c2VlbnRlciIsIHRoaXMuX2hhbmRsZU5ld1RhYk1vdXNlRW50ZXIuYmluZCh0aGlzKSk7Ci0gICAg
ICAgIHRoaXMuX25ld1RhYlRhYkJhckl0ZW0uZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGlj
ayIsIHRoaXMuX2hhbmRsZU5ld1RhYkNsaWNrLmJpbmQodGhpcykpOwotICAgICAgICB0aGlzLmFk
ZFRhYkJhckl0ZW0odGhpcy5fbmV3VGFiVGFiQmFySXRlbSwge3N1cHByZXNzQW5pbWF0aW9uczog
dHJ1ZX0pOwotCiAgICAgICAgIHRoaXMuX3RhYlBpY2tlclRhYkJhckl0ZW0gPSBuZXcgV0kuUGlu
bmVkVGFiQmFySXRlbSgiSW1hZ2VzL1RhYlBpY2tlci5zdmciLCBXSS5VSVN0cmluZygiU2hvdyBo
aWRkZW4gdGFicyIpKTsKICAgICAgICAgdGhpcy5fdGFiUGlja2VyVGFiQmFySXRlbS5lbGVtZW50
LmNsYXNzTGlzdC5hZGQoInRhYi1waWNrZXIiKTsKICAgICAgICAgdGhpcy5fdGFiUGlja2VyVGFi
QmFySXRlbS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5faGFu
ZGxlVGFiUGlja2VyVGFiQ29udGV4dE1lbnUuYmluZCh0aGlzKSk7CkBAIC02MSwxNCArNTYsNiBA
QCBXSS5UYWJCYXIgPSBjbGFzcyBUYWJCYXIgZXh0ZW5kcyBXSS5WaWV3CiAKICAgICAvLyBQdWJs
aWMKIAotICAgIGdldCBuZXdUYWJUYWJCYXJJdGVtKCkgeyByZXR1cm4gdGhpcy5fbmV3VGFiVGFi
QmFySXRlbTsgfQotCi0gICAgdXBkYXRlTmV3VGFiVGFiQmFySXRlbVN0YXRlKCkKLSAgICB7Ci0g
ICAgICAgIGxldCBuZXdUYWJFeGlzdHMgPSAhV0kuaXNOZXdUYWJXaXRoVHlwZUFsbG93ZWQoV0ku
TmV3VGFiQ29udGVudFZpZXcuVHlwZSk7Ci0gICAgICAgIHRoaXMuX25ld1RhYlRhYkJhckl0ZW0u
ZGlzYWJsZWQgPSBuZXdUYWJFeGlzdHM7Ci0gICAgfQotCiAgICAgYWRkVGFiQmFySXRlbSh0YWJC
YXJJdGVtLCBvcHRpb25zID0ge30pCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRU
YWJCYXJJdGVtKHRhYkJhckl0ZW0sIHRoaXMuX3RhYkJhckl0ZW1zLmxlbmd0aCwgb3B0aW9ucyk7
CkBAIC0xNzAsOSArMTU3LDYgQEAgV0kuVGFiQmFyID0gY2xhc3MgVGFiQmFyIGV4dGVuZHMgV0ku
VmlldwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHRoaXMubmVlZHNMYXlvdXQoKTsKIAot
ICAgICAgICBpZiAoISh0YWJCYXJJdGVtIGluc3RhbmNlb2YgV0kuUGlubmVkVGFiQmFySXRlbSkp
Ci0gICAgICAgICAgICB0aGlzLnVwZGF0ZU5ld1RhYlRhYkJhckl0ZW1TdGF0ZSgpOwotCiAgICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLlRhYkJhci5FdmVudC5UYWJCYXJJ
dGVtQWRkZWQsIHt0YWJCYXJJdGVtfSk7CiAKICAgICAgICAgcmV0dXJuIHRhYkJhckl0ZW07CkBA
IC0xODQsNiArMTY4LDkgQEAgV0kuVGFiQmFyID0gY2xhc3MgVGFiQmFyIGV4dGVuZHMgV0kuVmll
dwogICAgICAgICBpZiAoIXRhYkJhckl0ZW0gfHwgdGFiQmFySXRlbSBpbnN0YW5jZW9mIFdJLlBp
bm5lZFRhYkJhckl0ZW0pCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAorICAgICAgICBpZiAo
dGhpcy5ub3JtYWxUYWJDb3VudCA9PT0gMSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCiAg
ICAgICAgIHRhYkJhckl0ZW0ucGFyZW50VGFiQmFyID0gbnVsbDsKIAogICAgICAgICBpZiAodGhp
cy5fc2VsZWN0ZWRUYWJCYXJJdGVtID09PSB0YWJCYXJJdGVtKSB7CkBAIC0yMTMsMTAgKzIwMCw2
IEBAIFdJLlRhYkJhciA9IGNsYXNzIFRhYkJhciBleHRlbmRzIFdJLlZpZXcKICAgICAgICAgdmFy
IGhhc01vcmVUaGFuT25lTm9ybWFsVGFiID0gdGhpcy5faGFzTW9yZVRoYW5PbmVOb3JtYWxUYWIo
KTsKICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoInNpbmdsZS10YWIiLCAh
aGFzTW9yZVRoYW5PbmVOb3JtYWxUYWIpOwogCi0gICAgICAgIGNvbnN0IHNob3VsZE9wZW5EZWZh
dWx0VGFiID0gIXRhYkJhckl0ZW0uaXNEZWZhdWx0VGFiICYmICF0aGlzLm5vcm1hbFRhYkNvdW50
OwotICAgICAgICBpZiAoc2hvdWxkT3BlbkRlZmF1bHRUYWIpCi0gICAgICAgICAgICBvcHRpb25z
LnN1cHByZXNzQW5pbWF0aW9ucyA9IHRydWU7Ci0KICAgICAgICAgaWYgKCFoYXNNb3JlVGhhbk9u
ZU5vcm1hbFRhYiB8fCB3YXNMYXN0Tm9ybWFsVGFiIHx8ICFvcHRpb25zLnN1cHByZXNzRXhwYW5z
aW9uKSB7CiAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuc3VwcHJlc3NBbmltYXRpb25zKSB7CiAg
ICAgICAgICAgICAgICAgdGhpcy5fdGFiQW5pbWF0ZWRDbG9zZWRTaW5jZU1vdXNlRW50ZXIgPSB0
cnVlOwpAQCAtMjI0LDEzICsyMDcsNyBAQCBXSS5UYWJCYXIgPSBjbGFzcyBUYWJCYXIgZXh0ZW5k
cyBXSS5WaWV3CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICB0aGlzLm5lZWRz
TGF5b3V0KCk7CiAKLSAgICAgICAgICAgIHRoaXMudXBkYXRlTmV3VGFiVGFiQmFySXRlbVN0YXRl
KCk7Ci0KICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLlRhYkJh
ci5FdmVudC5UYWJCYXJJdGVtUmVtb3ZlZCwge3RhYkJhckl0ZW19KTsKLQotICAgICAgICAgICAg
aWYgKHNob3VsZE9wZW5EZWZhdWx0VGFiKQotICAgICAgICAgICAgICAgIHRoaXMuX29wZW5EZWZh
dWx0VGFiKCk7Ci0KICAgICAgICAgICAgIHJldHVybiB0YWJCYXJJdGVtOwogICAgICAgICB9CiAK
QEAgLTMwMCwxMyArMjc3LDggQEAgV0kuVGFiQmFyID0gY2xhc3MgVGFiQmFyIGV4dGVuZHMgV0ku
VmlldwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHRoaXMubmVlZHNMYXlvdXQoKTsKIAot
ICAgICAgICB0aGlzLnVwZGF0ZU5ld1RhYlRhYkJhckl0ZW1TdGF0ZSgpOwotCiAgICAgICAgIHRo
aXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLlRhYkJhci5FdmVudC5UYWJCYXJJdGVtUmVt
b3ZlZCwge3RhYkJhckl0ZW19KTsKIAotICAgICAgICBpZiAoc2hvdWxkT3BlbkRlZmF1bHRUYWIp
Ci0gICAgICAgICAgICB0aGlzLl9vcGVuRGVmYXVsdFRhYigpOwotCiAgICAgICAgIHJldHVybiB0
YWJCYXJJdGVtOwogICAgIH0KIApAQCAtMzY0LDExICszMzYsNiBAQCBXSS5UYWJCYXIgPSBjbGFz
cyBUYWJCYXIgZXh0ZW5kcyBXSS5WaWV3CiAgICAgc2V0IHNlbGVjdGVkVGFiQmFySXRlbSh0YWJC
YXJJdGVtT3JJbmRleCkKICAgICB7CiAgICAgICAgIGxldCB0YWJCYXJJdGVtID0gdGhpcy5fZmlu
ZFRhYkJhckl0ZW0odGFiQmFySXRlbU9ySW5kZXgpOwotICAgICAgICBpZiAodGFiQmFySXRlbSA9
PT0gdGhpcy5fbmV3VGFiVGFiQmFySXRlbSkgewotICAgICAgICAgICAgLy8gR2V0IHRoZSBpdGVt
IGJlZm9yZSB0aGUgTmV3LVRhYiBpdGVtIHNpbmNlIGl0IGlzIG5vdCBzZWxlY3RhYmxlLgotICAg
ICAgICAgICAgdGFiQmFySXRlbSA9IHRoaXMuX3RhYkJhckl0ZW1zW3RoaXMubm9ybWFsVGFiQ291
bnQgLSAxXTsKLSAgICAgICAgfQotCiAgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZFRhYkJhckl0
ZW0gPT09IHRhYkJhckl0ZW0pCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTQ5MSwxMSArNDU4
LDYgQEAgV0kuVGFiQmFyID0gY2xhc3MgVGFiQmFyIGV4dGVuZHMgV0kuVmlldwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgX29wZW5EZWZhdWx0VGFiKCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLlRhYkJhci5FdmVudC5PcGVuRGVm
YXVsdFRhYik7Ci0gICAgfQotCiAgICAgX3JlY29yZFRhYkJhckl0ZW1TaXplc0FuZFBvc2l0aW9u
cygpCiAgICAgewogICAgICAgICB2YXIgdGFiQmFySXRlbVNpemVzQW5kUG9zaXRpb25zID0gbmV3
IE1hcDsKQEAgLTU5Niw5ICs1NTgsNiBAQCBXSS5UYWJCYXIgPSBjbGFzcyBUYWJCYXIgZXh0ZW5k
cyBXSS5WaWV3CiAgICAgICAgIGlmICh0YWJCYXJJdGVtLmRpc2FibGVkKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIGlmICh0YWJCYXJJdGVtID09PSB0aGlzLl9uZXdUYWJUYWJCYXJJ
dGVtKQotICAgICAgICAgICAgcmV0dXJuOwotCiAgICAgICAgIGlmICh0YWJCYXJJdGVtID09PSB0
aGlzLl90YWJQaWNrZXJUYWJCYXJJdGVtKSB7CiAgICAgICAgICAgICBpZiAoIXRoaXMuX2hpZGRl
blRhYkJhckl0ZW1zLmxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC02NTksOCAr
NjE4LDggQEAgV0kuVGFiQmFyID0gY2xhc3MgVGFiQmFyIGV4dGVuZHMgV0kuVmlldwogCiAgICAg
ICAgIHZhciBjbG9zZUJ1dHRvbkVsZW1lbnQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9y
U2VsZldpdGhDbGFzcyhXSS5UYWJCYXJJdGVtLkNsb3NlQnV0dG9uU3R5bGVDbGFzc05hbWUpOwog
ICAgICAgICBpZiAoY2xvc2VCdXR0b25FbGVtZW50IHx8IGNsaWNrZWRNaWRkbGVCdXR0b24pIHsK
LSAgICAgICAgICAgIC8vIERpc2FsbG93IGNsb3NpbmcgdGhlIGRlZmF1bHQgdGFiIGlmIGl0IGlz
IHRoZSBvbmx5IHRhYi4KLSAgICAgICAgICAgIGlmICh0YWJCYXJJdGVtLmlzRGVmYXVsdFRhYiAm
JiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJzaW5nbGUtdGFiIikpCisgICAgICAg
ICAgICAvLyBEaXNhbGxvdyBjbG9zaW5nIHRoZSBvbmx5IHRhYi4KKyAgICAgICAgICAgIGlmICh0
aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJzaW5nbGUtdGFiIikpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBpZiAoIWV2ZW50LmFsdEtleSkgewpAQCAtNzMz
LDcgKzY5Miw3IEBAIFdJLlRhYkJhciA9IGNsYXNzIFRhYkJhciBleHRlbmRzIFdJLlZpZXcKICAg
ICAgICAgdGhpcy5fdGFiQmFySXRlbXMuc3BsaWNlKG5ld0luZGV4LCAwLCB0aGlzLl9zZWxlY3Rl
ZFRhYkJhckl0ZW0pOwogCiAgICAgICAgIGxldCBuZXh0U2libGluZyA9IHRoaXMuX3RhYkJhckl0
ZW1zW25ld0luZGV4ICsgMV07Ci0gICAgICAgIGxldCBuZXh0U2libGluZ0VsZW1lbnQgPSBuZXh0
U2libGluZyA/IG5leHRTaWJsaW5nLmVsZW1lbnQgOiB0aGlzLl9uZXdUYWJUYWJCYXJJdGVtLmVs
ZW1lbnQ7CisgICAgICAgIGxldCBuZXh0U2libGluZ0VsZW1lbnQgPSBuZXh0U2libGluZyA/IG5l
eHRTaWJsaW5nLmVsZW1lbnQgOiBudWxsOwogCiAgICAgICAgIHRoaXMuZWxlbWVudC5pbnNlcnRC
ZWZvcmUodGhpcy5fc2VsZWN0ZWRUYWJCYXJJdGVtLmVsZW1lbnQsIG5leHRTaWJsaW5nRWxlbWVu
dCk7CiAKQEAgLTc0MSw3ICs3MDAsNyBAQCBXSS5UYWJCYXIgPSBjbGFzcyBUYWJCYXIgZXh0ZW5k
cyBXSS5WaWV3CiAKICAgICAgICAgbGV0IGxlZnQgPSAwOwogICAgICAgICBmb3IgKGxldCB0YWJC
YXJJdGVtIG9mIHRoaXMuX3RhYkJhckl0ZW1zRnJvbUxlZnRUb1JpZ2h0KCkpIHsKLSAgICAgICAg
ICAgIGlmICh0YWJCYXJJdGVtICE9PSB0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0gJiYgdGFiQmFy
SXRlbSAhPT0gdGhpcy5fbmV3VGFiVGFiQmFySXRlbSAmJiBwYXJzZUZsb2F0KHRhYkJhckl0ZW0u
ZWxlbWVudC5zdHlsZS5sZWZ0KSAhPT0gbGVmdCkKKyAgICAgICAgICAgIGlmICh0YWJCYXJJdGVt
ICE9PSB0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0gJiYgcGFyc2VGbG9hdCh0YWJCYXJJdGVtLmVs
ZW1lbnQuc3R5bGUubGVmdCkgIT09IGxlZnQpCiAgICAgICAgICAgICAgICAgdGFiQmFySXRlbS5l
bGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0ICsgInB4IjsKICAgICAgICAgICAgIGxlZnQgKz0gcGFy
c2VGbG9hdCh0YWJCYXJJdGVtLmVsZW1lbnQuc3R5bGUud2lkdGgpOwogICAgICAgICB9CkBAIC03
OTIsOCArNzUxLDcgQEAgV0kuVGFiQmFyID0gY2xhc3MgVGFiQmFyIGV4dGVuZHMgV0kuVmlldwog
ICAgICAgICAvLyBDaGVjayBpZiB0aGUgbW91c2UgcmVhbGx5IGRpZCBsZWF2ZSB0aGUgZWxlbWVu
dCBieSBjaGVja2luZyB0aGUgYm91bmRzLgogICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBhIFdl
YktpdCBidWcgb3IgY29ycmVjdCBiZWhhdmlvcj8KICAgICAgICAgY29uc3QgYmFyUmVjdCA9IHRo
aXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgICAgY29uc3QgbmV3VGFi
SXRlbVJlY3QgPSB0aGlzLl9uZXdUYWJUYWJCYXJJdGVtLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7Ci0gICAgICAgIGlmIChldmVudC5wYWdlWSA+IGJhclJlY3QudG9wICYmIGV2ZW50
LnBhZ2VZIDwgYmFyUmVjdC5ib3R0b20gJiYgZXZlbnQucGFnZVggPiBiYXJSZWN0LmxlZnQgJiYg
ZXZlbnQucGFnZVggPCAobmV3VGFiSXRlbVJlY3QgPyBuZXdUYWJJdGVtUmVjdC5yaWdodCA6IGJh
clJlY3QucmlnaHQpKQorICAgICAgICBpZiAoZXZlbnQucGFnZVkgPiBiYXJSZWN0LnRvcCAmJiBl
dmVudC5wYWdlWSA8IGJhclJlY3QuYm90dG9tICYmIGV2ZW50LnBhZ2VYID4gYmFyUmVjdC5sZWZ0
ICYmIGV2ZW50LnBhZ2VYIDwgYmFyUmVjdC5yaWdodCkKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICB0aGlzLl9maW5pc2hFeHBhbmRpbmdUYWJzQWZ0ZXJDbG9zZSgpOwpAQCAtODE5LDIw
ICs3NzcsMTcgQEAgV0kuVGFiQmFyID0gY2xhc3MgVGFiQmFyIGV4dGVuZHMgV0kuVmlldwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgbGV0IGNoZWNrZWQg
PSAhIW9wZW5UYWJCYXJJdGVtOworICAgICAgICAgICAgbGV0IGRpc2FibGVkID0gY2hlY2tlZCAm
JiB0aGlzLm5vcm1hbFRhYkNvdW50ID09PSAxOwogICAgICAgICAgICAgY29udGV4dE1lbnUuYXBw
ZW5kQ2hlY2tib3hJdGVtKHRhYkNsYXNzLnRhYkluZm8oKS50aXRsZSwgKCkgPT4gewogICAgICAg
ICAgICAgICAgIGlmIChvcGVuVGFiQmFySXRlbSkKICAgICAgICAgICAgICAgICAgICAgdGhpcy5y
ZW1vdmVUYWJCYXJJdGVtKG9wZW5UYWJCYXJJdGVtKTsKICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIFdJLmNyZWF0ZU5ld1RhYldpdGhUeXBlKHRhYkNsYXNzLlR5cGUs
IHtzaG91bGRTaG93TmV3VGFiOiB0cnVlfSk7Ci0gICAgICAgICAgICB9LCAhIW9wZW5UYWJCYXJJ
dGVtKTsKKyAgICAgICAgICAgIH0sICEhb3BlblRhYkJhckl0ZW0sIGRpc2FibGVkKTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIF9oYW5kbGVOZXdUYWJDbGljayhldmVudCkKLSAgICB7Ci0gICAg
ICAgIFdJLnNob3dOZXdUYWJUYWIoKTsKLSAgICB9Ci0KICAgICBfaGFuZGxlVGFiUGlja2VyVGFi
Q29udGV4dE1lbnUoZXZlbnQpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2hpZGRlblRhYkJh
ckl0ZW1zLmxlbmd0aCkKQEAgLTg0NSwxNCArODAwLDYgQEAgV0kuVGFiQmFyID0gY2xhc3MgVGFi
QmFyIGV4dGVuZHMgV0kuVmlldwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9Ci0K
LSAgICBfaGFuZGxlTmV3VGFiTW91c2VFbnRlcihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICgh
dGhpcy5fdGFiQW5pbWF0ZWRDbG9zZWRTaW5jZU1vdXNlRW50ZXIgfHwgIXRoaXMuZWxlbWVudC5j
bGFzc0xpc3QuY29udGFpbnMoInN0YXRpYy1sYXlvdXQiKSB8fCB0aGlzLmVsZW1lbnQuY2xhc3NM
aXN0LmNvbnRhaW5zKCJhbmltYXRpbmciKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICB0aGlzLl9maW5pc2hFeHBhbmRpbmdUYWJzQWZ0ZXJDbG9zZSgpOwotICAgIH0KIH07CiAKIFdJ
LlRhYkJhci5DYWNoZWRXaWR0aFN5bWJvbCA9IFN5bWJvbCgiY2FjaGVkLXdpZHRoIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332905</attachid>
            <date>2018-02-01 13:31:46 -0800</date>
            <delta_ts>2018-02-02 13:04:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182342-20180201133145.patch</filename>
            <type>text/plain</type>
            <size>70061</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI3OTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCBk
YjNmZWZkNTJmYzAxY2UxN2YwOGUyOTgyMThiZTM4NTBjZmUzNjQ2Li43NTFhMGU0MWUzODJlZWIw
NDQxNjZhODY4NjIzZjgyZTgxM2ViNzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzMgQEAKKzIwMTgtMDItMDEgIE1hdHQgQmFrZXIgIDxtYXR0YmFrZXJAYXBwbGUuY29t
PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFRhYkJhciByZWRlc2lnbjogcmVtb3ZlIE5ldyBU
YWIgYnV0dG9uIGFuZCBhZGQgZXhwZXJpbWVudGFsIGZlYXR1cmUgZmxhZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMzQyCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8zNzA3ODY2Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgZXhwZXJpbWVudGFsIHNldHRpbmcg
Z3JvdXAsICJVc2VyIEludGVyZmFjZSIsIHdpdGgKKyAgICAgICAgYSBzaW5nbGUgc2V0dGluZywg
IkVuYWJsZSBOZXcgVGFiQmFyIi4gV2hlbiBlbmFibGVkLCB0aGUgTmV3IFRhYiBidXR0b24gaXMK
KyAgICAgICAgbm8gbG9uZ2VyIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIFRhYkJhci4gVGhl
ICdvcGVuIHRhYnMnIGNvbnRleHQgbWVudQorICAgICAgICBubyBsb25nZXIgYWxsb3dzIHRoZSBs
YXN0IG5vbi1lcGhlbWVyYWwgb3BlbiB0YWIgdG8gYmUgY2xvc2VkICh1bmNoZWNrZWQpLgorCisg
ICAgICAgICogTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorCisg
ICAgICAgICogVXNlckludGVyZmFjZS9CYXNlL01haW4uanM6CisgICAgICAgIChXSS5jb250ZW50
TG9hZGVkKToKKyAgICAgICAgKFdJLl90cnlUb1Jlc3RvcmVQZW5kaW5nVGFicyk6CisgICAgICAg
IFJldGFpbiBsZWdhY3kgYmVoYXZpb3IgYmVoaW5kIGV4cGVyaW1lbnRhbCBmZWF0dXJlIHNldHRp
bmcuCisgICAgICAgIChXSS5pc05ld1RhYldpdGhUeXBlQWxsb3dlZCk6CisKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL0Jhc2UvU2V0dGluZy5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01h
aW4uaHRtbDoKKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvQ2FudmFzVGFiQ29udGVu
dFZpZXcuanM6CisgICAgICAgIChXSS5DYW52YXNUYWJDb250ZW50Vmlldyk6CisgICAgICAgICog
VXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlVGFiQ29udGVudFZpZXcuanM6CisgICAgICAgIChX
SS5Db25zb2xlVGFiQ29udGVudFZpZXcpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3Mv
RGVidWdnZXJUYWJDb250ZW50Vmlldy5qczoKKyAgICAgICAgKFdJLkRlYnVnZ2VyVGFiQ29udGVu
dFZpZXcpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvRWxlbWVudHNUYWJDb250ZW50
Vmlldy5qczoKKyAgICAgICAgKFdJLkVsZW1lbnRzVGFiQ29udGVudFZpZXcpOgorCisgICAgICAg
ICogVXNlckludGVyZmFjZS9WaWV3cy9HZW5lcmFsVGFiQmFySXRlbS5qczoKKyAgICAgICAgKFdJ
LkdlbmVyYWxUYWJCYXJJdGVtKToKKyAgICAgICAgKFdJLkdlbmVyYWxUYWJCYXJJdGVtLnByb3Rv
dHlwZS5mcm9tVGFiSW5mbyk6CisgICAgICAgIChXSS5HZW5lcmFsVGFiQmFySXRlbS5wcm90b3R5
cGUuZ2V0IGlzRXBoZW1lcmFsKToKKyAgICAgICAgKFdJLkdlbmVyYWxUYWJCYXJJdGVtLmZyb21U
YWJDb250ZW50Vmlld0NvbnN0cnVjdG9yKTogRGVsZXRlZC4KKworICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvVmlld3MvTGF5ZXJzVGFiQ29udGVudFZpZXcuanM6CisgICAgICAgIChXSS5MYXllcnNU
YWJDb250ZW50Vmlldyk6CisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0xlZ2FjeVRh
YkJhci5qczogQ29waWVkIGZyb20gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvVGFiQmFyLmpzLgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFyKToKKyAgICAgICAgKFdJ
LkxlZ2FjeVRhYkJhci5wcm90b3R5cGUuZ2V0IG5ld1RhYlRhYkJhckl0ZW0pOgorICAgICAgICAo
V0kuTGVnYWN5VGFiQmFyLnByb3RvdHlwZS51cGRhdGVOZXdUYWJUYWJCYXJJdGVtU3RhdGUpOgor
ICAgICAgICAoV0kuTGVnYWN5VGFiQmFyLnByb3RvdHlwZS5hZGRUYWJCYXJJdGVtKToKKyAgICAg
ICAgKFdJLkxlZ2FjeVRhYkJhci5wcm90b3R5cGUuaW5zZXJ0VGFiQmFySXRlbS5hbmltYXRlVGFi
cyk6CisgICAgICAgIChXSS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLmluc2VydFRhYkJhckl0ZW0u
cmVtb3ZlU3R5bGVzKToKKyAgICAgICAgKFdJLkxlZ2FjeVRhYkJhci5wcm90b3R5cGUuaW5zZXJ0
VGFiQmFySXRlbSk6CisgICAgICAgIChXSS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLnJlbW92ZVRh
YkJhckl0ZW0uYW5pbWF0ZVRhYnMpOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFyLnByb3RvdHlw
ZS5yZW1vdmVUYWJCYXJJdGVtLnJlbW92ZVN0eWxlcyk6CisgICAgICAgIChXSS5MZWdhY3lUYWJC
YXIucHJvdG90eXBlLnJlbW92ZVRhYkJhckl0ZW0pOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFy
LnByb3RvdHlwZS5zZWxlY3RQcmV2aW91c1RhYik6CisgICAgICAgIChXSS5MZWdhY3lUYWJCYXIu
cHJvdG90eXBlLnNlbGVjdE5leHRUYWIpOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFyLnByb3Rv
dHlwZS5nZXQgc2VsZWN0ZWRUYWJCYXJJdGVtKToKKyAgICAgICAgKFdJLkxlZ2FjeVRhYkJhci5w
cm90b3R5cGUuc2V0IHNlbGVjdGVkVGFiQmFySXRlbSk6CisgICAgICAgIChXSS5MZWdhY3lUYWJC
YXIucHJvdG90eXBlLmdldCB0YWJCYXJJdGVtcyk6CisgICAgICAgIChXSS5MZWdhY3lUYWJCYXIu
cHJvdG90eXBlLmdldCBub3JtYWxUYWJDb3VudCk6CisgICAgICAgIChXSS5MZWdhY3lUYWJCYXIu
cHJvdG90eXBlLmxheW91dC5mb3JjZUl0ZW1IaWRkZW4pOgorICAgICAgICAoV0kuTGVnYWN5VGFi
QmFyLnByb3RvdHlwZS5sYXlvdXQpOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFyLnByb3RvdHlw
ZS5fdGFiQmFySXRlbXNGcm9tTGVmdFRvUmlnaHQpOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFy
LnByb3RvdHlwZS5fZmluZFRhYkJhckl0ZW0pOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFyLnBy
b3RvdHlwZS5faGFzTW9yZVRoYW5PbmVOb3JtYWxUYWIpOgorICAgICAgICAoV0kuTGVnYWN5VGFi
QmFyLnByb3RvdHlwZS5fb3BlbkRlZmF1bHRUYWIpOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFy
LnByb3RvdHlwZS5fcmVjb3JkVGFiQmFySXRlbVNpemVzQW5kUG9zaXRpb25zKToKKyAgICAgICAg
KFdJLkxlZ2FjeVRhYkJhci5wcm90b3R5cGUuX2FwcGx5VGFiQmFySXRlbVNpemVzQW5kUG9zaXRp
b25zKToKKyAgICAgICAgKFdJLkxlZ2FjeVRhYkJhci5wcm90b3R5cGUuX2NsZWFyVGFiQmFySXRl
bVNpemVzQW5kUG9zaXRpb25zKToKKyAgICAgICAgKFdJLkxlZ2FjeVRhYkJhci5wcm90b3R5cGUu
X2ZpbmlzaEV4cGFuZGluZ1RhYnNBZnRlckNsb3NlLik6CisgICAgICAgIChXSS5MZWdhY3lUYWJC
YXIucHJvdG90eXBlLl9maW5pc2hFeHBhbmRpbmdUYWJzQWZ0ZXJDbG9zZSk6CisgICAgICAgIChX
SS5MZWdhY3lUYWJCYXIucHJvdG90eXBlLl9oYW5kbGVNb3VzZURvd24pOgorICAgICAgICAoV0ku
TGVnYWN5VGFiQmFyLnByb3RvdHlwZS5faGFuZGxlQ2xpY2spOgorICAgICAgICAoV0kuTGVnYWN5
VGFiQmFyLnByb3RvdHlwZS5faGFuZGxlTW91c2VNb3ZlZCk6CisgICAgICAgIChXSS5MZWdhY3lU
YWJCYXIucHJvdG90eXBlLl9oYW5kbGVNb3VzZVVwKToKKyAgICAgICAgKFdJLkxlZ2FjeVRhYkJh
ci5wcm90b3R5cGUuX2hhbmRsZU1vdXNlTGVhdmUpOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFy
LnByb3RvdHlwZS5faGFuZGxlQ29udGV4dE1lbnUpOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFy
LnByb3RvdHlwZS5faGFuZGxlTmV3VGFiQ2xpY2spOgorICAgICAgICAoV0kuTGVnYWN5VGFiQmFy
LnByb3RvdHlwZS5faGFuZGxlVGFiUGlja2VyVGFiQ29udGV4dE1lbnUpOgorICAgICAgICAoV0ku
TGVnYWN5VGFiQmFyLnByb3RvdHlwZS5faGFuZGxlTmV3VGFiTW91c2VFbnRlcik6CisKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL05ldHdvcmtUYWJDb250ZW50Vmlldy5qczoKKyAgICAg
ICAgKFdJLk5ldHdvcmtUYWJDb250ZW50Vmlldyk6CisgICAgICAgICogVXNlckludGVyZmFjZS9W
aWV3cy9OZXdUYWJDb250ZW50Vmlldy5qczoKKyAgICAgICAgKFdJLk5ld1RhYkNvbnRlbnRWaWV3
KToKKyAgICAgICAgKFdJLk5ld1RhYkNvbnRlbnRWaWV3LnRhYkluZm8pOgorICAgICAgICAoV0ku
TmV3VGFiQ29udGVudFZpZXcuaXNFcGhlbWVyYWwpOiBEZWxldGVkLgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvVmlld3MvUmVzb3VyY2VzVGFiQ29udGVudFZpZXcuanM6CisgICAgICAgIChXSS5S
ZXNvdXJjZXNUYWJDb250ZW50Vmlldyk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9T
ZWFyY2hUYWJDb250ZW50Vmlldy5qczoKKyAgICAgICAgKFdJLlNlYXJjaFRhYkNvbnRlbnRWaWV3
KToKKyAgICAgICAgKFdJLlNlYXJjaFRhYkNvbnRlbnRWaWV3LnRhYkluZm8pOgorICAgICAgICAo
V0kuU2VhcmNoVGFiQ29udGVudFZpZXcuaXNFcGhlbWVyYWwpOiBEZWxldGVkLgorCisgICAgICAg
ICogVXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRWaWV3LmpzOgorICAgICAg
ICAoV0kuU2V0dGluZ3NUYWJDb250ZW50Vmlldy50YWJJbmZvKToKKyAgICAgICAgKFdJLlNldHRp
bmdzVGFiQ29udGVudFZpZXcucHJvdG90eXBlLl9jcmVhdGVFeHBlcmltZW50YWxTZXR0aW5nc1Zp
ZXcpOgorICAgICAgICAoV0kuU2V0dGluZ3NUYWJDb250ZW50Vmlldy5pc0VwaGVtZXJhbCk6IERl
bGV0ZWQuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1N0b3JhZ2VUYWJDb250ZW50
Vmlldy5qczoKKyAgICAgICAgKFdJLlN0b3JhZ2VUYWJDb250ZW50Vmlldyk6CisKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL1ZpZXdzL1RhYkJhci5jc3M6CisgICAgICAgICogVXNlckludGVyZmFj
ZS9WaWV3cy9UYWJCYXIuanM6CisgICAgICAgIChXSS5UYWJCYXIpOgorICAgICAgICAoV0kuVGFi
QmFyLnByb3RvdHlwZS5pbnNlcnRUYWJCYXJJdGVtKToKKyAgICAgICAgKFdJLlRhYkJhci5wcm90
b3R5cGUucmVtb3ZlVGFiQmFySXRlbSk6CisgICAgICAgIChXSS5UYWJCYXIucHJvdG90eXBlLnNl
dCBzZWxlY3RlZFRhYkJhckl0ZW0pOgorICAgICAgICAoV0kuVGFiQmFyLnByb3RvdHlwZS5nZXQg
bm9ybWFsTm9uRXBoZW1lcmFsVGFiQ291bnQpOgorICAgICAgICAoV0kuVGFiQmFyLnByb3RvdHlw
ZS5faGFuZGxlTW91c2VEb3duKToKKyAgICAgICAgKFdJLlRhYkJhci5wcm90b3R5cGUuX2hhbmRs
ZUNsaWNrKToKKyAgICAgICAgKFdJLlRhYkJhci5wcm90b3R5cGUuX2hhbmRsZU1vdXNlTW92ZWQp
OgorICAgICAgICAoV0kuVGFiQmFyLnByb3RvdHlwZS5faGFuZGxlTW91c2VMZWF2ZSk6CisgICAg
ICAgIChXSS5UYWJCYXIucHJvdG90eXBlLl9oYW5kbGVDb250ZXh0TWVudSk6CisgICAgICAgIChX
SS5UYWJCYXIucHJvdG90eXBlLl9oYW5kbGVUYWJQaWNrZXJUYWJDb250ZXh0TWVudSk6CisgICAg
ICAgIChXSS5UYWJCYXIucHJvdG90eXBlLmdldCBuZXdUYWJUYWJCYXJJdGVtKTogRGVsZXRlZC4K
KyAgICAgICAgKFdJLlRhYkJhci5wcm90b3R5cGUudXBkYXRlTmV3VGFiVGFiQmFySXRlbVN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdJLlRhYkJhci5wcm90b3R5cGUuX29wZW5EZWZhdWx0VGFi
KTogRGVsZXRlZC4KKyAgICAgICAgKFdJLlRhYkJhci5wcm90b3R5cGUuX2hhbmRsZU5ld1RhYkNs
aWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdJLlRhYkJhci5wcm90b3R5cGUuX2hhbmRsZU5ld1Rh
Yk1vdXNlRW50ZXIpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgdGhlIE5l
dyBUYWIgYnV0dG9uIGFuZCBkZWZhdWx0IHRhYi4gV2l0aG91dCBhIGRlZmF1bHQKKyAgICAgICAg
dGFiLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRpc3BsYXkgd2hlbiBubyB0YWJzIGFyZSBvcGVuLCBz
byBwcmV2ZW50IHRoZQorICAgICAgICBsYXN0IG5vbi1waW5uZWQgdGFiIGZyb20gYmVpbmcgcmVt
b3ZlZC4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVGFiQnJvd3Nlci5qczoKKyAg
ICAgICAgKFdJLlRhYkJyb3dzZXIuX3RhYkJhckl0ZW1SZW1vdmVkKToKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL1RhYkNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV0kuVGFiQ29udGVu
dFZpZXcuaXNFcGhlbWVyYWwpOiBEZWxldGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmll
d3MvVGltZWxpbmVUYWJDb250ZW50Vmlldy5qczoKKyAgICAgICAgKFdJLlRpbWVsaW5lVGFiQ29u
dGVudFZpZXcpOgorCiAyMDE4LTAxLTMwICBEZXZpbiBSb3Vzc28gIDx3ZWJraXRAZGV2aW5yb3Vz
c28uY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlcGxhY2UgT2JqZWN0LnNoYWxsb3dN
ZXJnZSB3aXRoIEVTMjAxOCBzcHJlYWQgb3BlcmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJp
bmdzLmpzCmluZGV4IDZlZjkwMDFhYjI4OTUyMWZkYzQ3ZmVmYzFhMDAzNDNiZTY4YjUzMDkuLjAx
MDRiYWQ0NTRhNGYzOTIyMGRlNGI2MWMzMTIzYjFiODg2MzY3NjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3Mu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9j
YWxpemVkU3RyaW5ncy5qcwpAQCAtMzY3LDYgKzM2Nyw3IEBAIGxvY2FsaXplZFN0cmluZ3NbIkVu
YWJsZSBCcmVha3BvaW50Il0gPSAiRW5hYmxlIEJyZWFrcG9pbnQiOwogbG9jYWxpemVkU3RyaW5n
c1siRW5hYmxlIEJyZWFrcG9pbnRzIl0gPSAiRW5hYmxlIEJyZWFrcG9pbnRzIjsKIGxvY2FsaXpl
ZFN0cmluZ3NbIkVuYWJsZSBFdmVudCBMaXN0ZW5lciJdID0gIkVuYWJsZSBFdmVudCBMaXN0ZW5l
ciI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJFbmFibGUgTGF5ZXJzIFRhYiJdID0gIkVuYWJsZSBMYXll
cnMgVGFiIjsKK2xvY2FsaXplZFN0cmluZ3NbIkVuYWJsZSBOZXcgVGFiIEJhciJdID0gIkVuYWJs
ZSBOZXcgVGFiIEJhciI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJFbmFibGUgUHJvZ3JhbSJdID0gIkVu
YWJsZSBQcm9ncmFtIjsKIGxvY2FsaXplZFN0cmluZ3NbIkVuYWJsZSBhbGwgYnJlYWtwb2ludHMg
KCVzKSJdID0gIkVuYWJsZSBhbGwgYnJlYWtwb2ludHMgKCVzKSI7CiBsb2NhbGl6ZWRTdHJpbmdz
WyJFbmFibGUgYnJlYWtwb2ludHMiXSA9ICJFbmFibGUgYnJlYWtwb2ludHMiOwpAQCAtMTAwOCw2
ICsxMDA5LDcgQEAgbG9jYWxpemVkU3RyaW5nc1siVXNlIERlZmF1bHQgTWVkaWEgU3R5bGVzIl0g
PSAiVXNlIERlZmF1bHQgTWVkaWEgU3R5bGVzIjsKIGxvY2FsaXplZFN0cmluZ3NbIlVzZSB0aGUg
cmVzb3VyY2UgY2FjaGUgd2hlbiBsb2FkaW5nIHJlc291cmNlcyJdID0gIlVzZSB0aGUgcmVzb3Vy
Y2UgY2FjaGUgd2hlbiBsb2FkaW5nIHJlc291cmNlcyI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJVc2Vy
IEFnZW50Il0gPSAiVXNlciBBZ2VudCI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJVc2VyIEFnZW50IFN0
eWxlc2hlZXQiXSA9ICJVc2VyIEFnZW50IFN0eWxlc2hlZXQiOworbG9jYWxpemVkU3RyaW5nc1si
VXNlciBJbnRlcmZhY2U6Il0gPSAiVXNlciBJbnRlcmZhY2U6IjsKIGxvY2FsaXplZFN0cmluZ3Nb
IlVzZXIgU3R5bGVzaGVldCJdID0gIlVzZXIgU3R5bGVzaGVldCI7CiBsb2NhbGl6ZWRTdHJpbmdz
WyJVc2luZyBLZXl3b3JkIFZhbHVlIl0gPSAiVXNpbmcgS2V5d29yZCBWYWx1ZSI7CiBsb2NhbGl6
ZWRTdHJpbmdzWyJVc2luZyBwcmV2aW91cyBzZWxlY3RvciDigJwlc+KAnSJdID0gIlVzaW5nIHBy
ZXZpb3VzIHNlbGVjdG9yIOKAnCVz4oCdIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwppbmRleCAyODM3MWY2YTNmZWVmM2Q1OWYwMDM3ZGJl
ZWQ2MzM2NWMxMTU5NjY1Li42Yjg2MDE0ZDVmMDQ1NDA0ZGM0ODczZDU3ZGJiMjYyZDMzNWM2M2Y5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01h
aW4uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWlu
LmpzCkBAIC0yNzAsOCArMjcwLDEyIEBAIFdJLmNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpCiAg
ICAgLy8gQ3JlYXRlIHRoZSB1c2VyIGludGVyZmFjZSBlbGVtZW50cy4KICAgICB0aGlzLnRvb2xi
YXIgPSBuZXcgV0kuVG9vbGJhcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidG9vbGJhciIpKTsK
IAotICAgIHRoaXMudGFiQmFyID0gbmV3IFdJLlRhYkJhcihkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgidGFiLWJhciIpKTsKLSAgICB0aGlzLnRhYkJhci5hZGRFdmVudExpc3RlbmVyKFdJLlRhYkJh
ci5FdmVudC5PcGVuRGVmYXVsdFRhYiwgdGhpcy5fb3BlbkRlZmF1bHRUYWIsIHRoaXMpOworICAg
IGlmIChXSS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVOZXdUYWJCYXIudmFsdWUpCisgICAg
ICAgIHRoaXMudGFiQmFyID0gbmV3IFdJLlRhYkJhcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
dGFiLWJhciIpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGhpcy50YWJCYXIgPSBuZXcgV0kuTGVn
YWN5VGFiQmFyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWItYmFyIikpOworICAgICAgICB0
aGlzLnRhYkJhci5hZGRFdmVudExpc3RlbmVyKFdJLlRhYkJhci5FdmVudC5PcGVuRGVmYXVsdFRh
YiwgdGhpcy5fb3BlbkRlZmF1bHRUYWIsIHRoaXMpOworICAgIH0KIAogICAgIHRoaXMuX2NvbnRl
bnRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKTsKICAgICB0aGlz
Ll9jb250ZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoInJvbGUiLCAibWFpbiIpOwpAQCAtNjAxLDcg
KzYwNSw4IEBAIFdJLl90cnlUb1Jlc3RvcmVQZW5kaW5nVGFicyA9IGZ1bmN0aW9uKCkKIAogICAg
IHRoaXMuX3BlbmRpbmdPcGVuVGFicyA9IHN0aWxsUGVuZGluZ09wZW5UYWJzOwogCi0gICAgdGhp
cy50YWJCcm93c2VyLnRhYkJhci51cGRhdGVOZXdUYWJUYWJCYXJJdGVtU3RhdGUoKTsKKyAgICBp
ZiAoIVdJLnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJsZU5ld1RhYkJhci52YWx1ZSkKKyAgICAg
ICAgdGhpcy50YWJCcm93c2VyLnRhYkJhci51cGRhdGVOZXdUYWJUYWJCYXJJdGVtU3RhdGUoKTsK
IH07CiAKIFdJLnNob3dOZXdUYWJUYWIgPSBmdW5jdGlvbihvcHRpb25zKQpAQCAtNjMyLDcgKzYz
Nyw3IEBAIFdJLmlzTmV3VGFiV2l0aFR5cGVBbGxvd2VkID0gZnVuY3Rpb24odGFiVHlwZSkKIAog
ICAgIGlmICh0YWJDbGFzcyA9PT0gV0kuTmV3VGFiQ29udGVudFZpZXcpIHsKICAgICAgICAgbGV0
IGFsbFRhYnMgPSBBcnJheS5mcm9tKHRoaXMua25vd25UYWJDbGFzc2VzKCkpOwotICAgICAgICBs
ZXQgYWRkYWJsZVRhYnMgPSBhbGxUYWJzLmZpbHRlcigodGFiQ2xhc3MpID0+ICF0YWJDbGFzcy5p
c0VwaGVtZXJhbCgpKTsKKyAgICAgICAgbGV0IGFkZGFibGVUYWJzID0gYWxsVGFicy5maWx0ZXIo
KHRhYkNsYXNzKSA9PiAhdGFiQ2xhc3MudGFiSW5mbygpLmlzRXBoZW1lcmFsKTsKICAgICAgICAg
bGV0IGNhbk1ha2VOZXdUYWIgPSBhZGRhYmxlVGFicy5zb21lKCh0YWJDbGFzcykgPT4gV0kuaXNO
ZXdUYWJXaXRoVHlwZUFsbG93ZWQodGFiQ2xhc3MuVHlwZSkpOwogICAgICAgICByZXR1cm4gY2Fu
TWFrZU5ld1RhYjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9CYXNlL1NldHRpbmcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9CYXNlL1NldHRpbmcuanMKaW5kZXggZjI1YjNkN2M0NWVhNTczZDA2NTE5ZTE0Zjdm
MTczMjllMjMxMWFmNS4uOTAxNWZhZGFhMWRiODYxNTY4MTA1YjMzMWY4YTBiYzhkYmYwNDk4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9TZXR0
aW5nLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvU2V0
dGluZy5qcwpAQCAtMTI2LDQgKzEyNiw1IEBAIFdJLnNldHRpbmdzID0gewogICAgIGV4cGVyaW1l
bnRhbEVuYWJsZUxheWVyc1RhYjogbmV3IFdJLlNldHRpbmcoImV4cGVyaW1lbnRhbC1lbmFibGUt
bGF5ZXJzLXRhYiIsIGZhbHNlKSwKICAgICBleHBlcmltZW50YWxMZWdhY3lTdHlsZUVkaXRvcjog
bmV3IFdJLlNldHRpbmcoImV4cGVyaW1lbnRhbC1sZWdhY3ktc3R5bGUtZWRpdG9yIiwgZmFsc2Up
LAogICAgIGV4cGVyaW1lbnRhbExlZ2FjeVZpc3VhbFNpZGViYXI6IG5ldyBXSS5TZXR0aW5nKCJl
eHBlcmltZW50YWwtbGVnYWN5LXZpc3VhbC1zaWRlYmFyIiwgZmFsc2UpLAorICAgIGV4cGVyaW1l
bnRhbEVuYWJsZU5ld1RhYkJhcjogbmV3IFdJLlNldHRpbmcoImV4cGVyaW1lbnRhbC1lbmFibGUt
bmV3LXRhYi1iYXIiLCBmYWxzZSksCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IDMzYmVjNGUzNmIyOWUwNGMyY2FkNzA4NWFmMzZmOGUx
MWNlNzIwYjIuLmUxNWFjZjIyMzRkZTU3YjE5ZGM1N2ZmYWJlMjE1OGEwYTE2MjQ3YzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAorKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKQEAgLTQ3OSw2
ICs0NzksOCBAQAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UcmVlT3V0bGluZS5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1RyZWVPdXRsaW5lR3JvdXAuanMiPjwvc2NyaXB0
PgogCisgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0xlZ2FjeVRhYkJhci5qcyI+PC9zY3JpcHQ+CisK
ICAgICA8c2NyaXB0IHNyYz0iVmlld3MvQnV0dG9uTmF2aWdhdGlvbkl0ZW0uanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9EYXRhYmFzZVVzZXJRdWVyeVZpZXdCYXNlLmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGF0YWJhc2VVc2VyUXVlcnlFcnJvclZp
ZXcuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvQ2FudmFzVGFiQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DYW52YXNUYWJDb250ZW50Vmlldy5qcwppbmRleCBj
NGRlYTA3ZWViOTlhYTFjMGQzMTBkY2IzOWY5YmFjYzhjMjE3YTQwLi44MzY0Yjk1MmUwOGJmMDM5
YjhkNWNjM2MyMDNhN2Y0YjE1MjE5OTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9DYW52YXNUYWJDb250ZW50Vmlldy5qcworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DYW52YXNUYWJDb250ZW50Vmll
dy5qcwpAQCAtMjksNyArMjksNyBAQCBXSS5DYW52YXNUYWJDb250ZW50VmlldyA9IGNsYXNzIENh
bnZhc1RhYkNvbnRlbnRWaWV3IGV4dGVuZHMgV0kuQ29udGVudEJyb3dzZXJUYQogICAgIHsKICAg
ICAgICAgY29uc29sZS5hc3NlcnQoIXJlcHJlc2VudGVkT2JqZWN0IHx8IHJlcHJlc2VudGVkT2Jq
ZWN0IGluc3RhbmNlb2YgV0kuQ2FudmFzKTsKIAotICAgICAgICBsZXQgdGFiQmFySXRlbSA9IFdJ
LkdlbmVyYWxUYWJCYXJJdGVtLmZyb21UYWJDb250ZW50Vmlld0NvbnN0cnVjdG9yKFdJLkNhbnZh
c1RhYkNvbnRlbnRWaWV3KTsKKyAgICAgICAgbGV0IHRhYkJhckl0ZW0gPSBXSS5HZW5lcmFsVGFi
QmFySXRlbS5mcm9tVGFiSW5mbyhXSS5DYW52YXNUYWJDb250ZW50Vmlldy50YWJJbmZvKCkpOwog
CiAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25TaWRlYmFyUGFuZWxDb25zdHJ1Y3RvciA9IFdJLlJl
Y29yZGluZ05hdmlnYXRpb25TaWRlYmFyUGFuZWw7CiAgICAgICAgIGNvbnN0IGRldGFpbHNTaWRl
YmFyUGFuZWxDb25zdHJ1Y3RvcnMgPSBbV0kuUmVjb3JkaW5nU3RhdGVEZXRhaWxzU2lkZWJhclBh
bmVsLCBXSS5SZWNvcmRpbmdUcmFjZURldGFpbHNTaWRlYmFyUGFuZWwsIFdJLkNhbnZhc0RldGFp
bHNTaWRlYmFyUGFuZWxdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvQ29uc29sZVRhYkNvbnRlbnRWaWV3LmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZVRhYkNvbnRlbnRWaWV3LmpzCmluZGV4
IDg0ZDNlMzgyNjRiYzA0NGZkYzRlN2YyNjk5YmQyNDdkYjJjYzE4ZjIuLjEyNTk4NmE2NmJkMjFl
MmEzN2FmNjZkZWM4YTA1MjcyNzZkYWJhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVUYWJDb250ZW50Vmlldy5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlVGFiQ29udGVu
dFZpZXcuanMKQEAgLTI3LDcgKzI3LDcgQEAgV0kuQ29uc29sZVRhYkNvbnRlbnRWaWV3ID0gY2xh
c3MgQ29uc29sZVRhYkNvbnRlbnRWaWV3IGV4dGVuZHMgV0kuQ29udGVudEJyb3dzZXIKIHsKICAg
ICBjb25zdHJ1Y3RvcihpZGVudGlmaWVyKQogICAgIHsKLSAgICAgICAgbGV0IHRhYkJhckl0ZW0g
PSBXSS5HZW5lcmFsVGFiQmFySXRlbS5mcm9tVGFiQ29udGVudFZpZXdDb25zdHJ1Y3RvcihXSS5D
b25zb2xlVGFiQ29udGVudFZpZXcpOworICAgICAgICBsZXQgdGFiQmFySXRlbSA9IFdJLkdlbmVy
YWxUYWJCYXJJdGVtLmZyb21UYWJJbmZvKFdJLkNvbnNvbGVUYWJDb250ZW50Vmlldy50YWJJbmZv
KCkpOwogCiAgICAgICAgIHN1cGVyKGlkZW50aWZpZXIgfHwgImNvbnNvbGUiLCAiY29uc29sZSIs
IHRhYkJhckl0ZW0sIG51bGwsIG51bGwsIHRydWUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RlYnVnZ2VyVGFiQ29udGVudFZp
ZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9EZWJ1Z2dl
clRhYkNvbnRlbnRWaWV3LmpzCmluZGV4IGVkZTdkMmU3OTdkOGQ3MDcxYzE3MWUxOWMxOWZlZGM5
YjNlYmMxZWEuLjk3ZTY0MzY2MWIyZTdjMTdkNDE1NTFmYTY5MWFiMWM0YmQ3YWQwN2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0RlYnVnZ2Vy
VGFiQ29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvRGVidWdnZXJUYWJDb250ZW50Vmlldy5qcwpAQCAtMjcsNyArMjcsNyBAQCBXSS5E
ZWJ1Z2dlclRhYkNvbnRlbnRWaWV3ID0gY2xhc3MgRGVidWdnZXJUYWJDb250ZW50VmlldyBleHRl
bmRzIFdJLkNvbnRlbnRCcm93cwogewogICAgIGNvbnN0cnVjdG9yKGlkZW50aWZpZXIpCiAgICAg
ewotICAgICAgICBsZXQgdGFiQmFySXRlbSA9IFdJLkdlbmVyYWxUYWJCYXJJdGVtLmZyb21UYWJD
b250ZW50Vmlld0NvbnN0cnVjdG9yKFdJLkRlYnVnZ2VyVGFiQ29udGVudFZpZXcpOworICAgICAg
ICBsZXQgdGFiQmFySXRlbSA9IFdJLkdlbmVyYWxUYWJCYXJJdGVtLmZyb21UYWJJbmZvKFdJLkRl
YnVnZ2VyVGFiQ29udGVudFZpZXcudGFiSW5mbygpKTsKICAgICAgICAgbGV0IGRldGFpbHNTaWRl
YmFyUGFuZWxDb25zdHJ1Y3RvcnMgPSBbV0kuU2NvcGVDaGFpbkRldGFpbHNTaWRlYmFyUGFuZWws
IFdJLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbCwgV0kuUHJvYmVEZXRhaWxzU2lkZWJhclBh
bmVsXTsKIAogICAgICAgICBzdXBlcihpZGVudGlmaWVyIHx8ICJkZWJ1Z2dlciIsICJkZWJ1Z2dl
ciIsIHRhYkJhckl0ZW0sIFdJLkRlYnVnZ2VyU2lkZWJhclBhbmVsLCBkZXRhaWxzU2lkZWJhclBh
bmVsQ29uc3RydWN0b3JzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0VsZW1lbnRzVGFiQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9FbGVtZW50c1RhYkNvbnRlbnRWaWV3LmpzCmlu
ZGV4IGUwNGRlMzdhZDNhMTg1MjdhOTUwODU2Njg3NTAzODMyMDEyZWE0ODIuLjFlMmQ2YzFmZmFi
NDY2MjcwNmJjNGRiMjBmODZhZjkxZWM0YmNhODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0VsZW1lbnRzVGFiQ29udGVudFZpZXcuanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRWxlbWVudHNUYWJD
b250ZW50Vmlldy5qcwpAQCAtMjcsNyArMjcsNyBAQCBXSS5FbGVtZW50c1RhYkNvbnRlbnRWaWV3
ID0gY2xhc3MgRWxlbWVudHNUYWJDb250ZW50VmlldyBleHRlbmRzIFdJLkNvbnRlbnRCcm93cwog
ewogICAgIGNvbnN0cnVjdG9yKGlkZW50aWZpZXIpCiAgICAgewotICAgICAgICBsZXQgdGFiQmFy
SXRlbSA9IFdJLkdlbmVyYWxUYWJCYXJJdGVtLmZyb21UYWJDb250ZW50Vmlld0NvbnN0cnVjdG9y
KFdJLkVsZW1lbnRzVGFiQ29udGVudFZpZXcpOworICAgICAgICBsZXQgdGFiQmFySXRlbSA9IFdJ
LkdlbmVyYWxUYWJCYXJJdGVtLmZyb21UYWJJbmZvKFdJLkVsZW1lbnRzVGFiQ29udGVudFZpZXcu
dGFiSW5mbygpKTsKICAgICAgICAgbGV0IGRldGFpbHNTaWRlYmFyUGFuZWxDb25zdHJ1Y3RvcnMg
PSBbV0kuUnVsZXNTdHlsZURldGFpbHNTaWRlYmFyUGFuZWwsIFdJLkNvbXB1dGVkU3R5bGVEZXRh
aWxzU2lkZWJhclBhbmVsLCBXSS5ET01Ob2RlRGV0YWlsc1NpZGViYXJQYW5lbF07CiAKICAgICAg
ICAgaWYgKHdpbmRvdy5MYXllclRyZWVBZ2VudCAmJiAhV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFs
RW5hYmxlTGF5ZXJzVGFiLnZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvR2VuZXJhbFRhYkJhckl0ZW0uanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9HZW5lcmFsVGFiQmFySXRlbS5qcwppbmRleCBm
ZDA1ZGJkMTc2ZTBmZGY0N2M5MmQ3OGQ3NGIyYTlhMTY4MGFkNDQ1Li44YjMzZmVhZjUzNDM5OTZh
ZmRlOThiYmRhMWE5NjFlNGQ5Yjk5ZmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9HZW5lcmFsVGFiQmFySXRlbS5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9HZW5lcmFsVGFiQmFySXRlbS5qcwpA
QCAtMjYsMTEgKzI2LDEzIEBACiAKIFdJLkdlbmVyYWxUYWJCYXJJdGVtID0gY2xhc3MgR2VuZXJh
bFRhYkJhckl0ZW0gZXh0ZW5kcyBXSS5UYWJCYXJJdGVtCiB7Ci0gICAgY29uc3RydWN0b3IoaW1h
Z2UsIHRpdGxlLCBpc0VwaGVtZXJhbCkKKyAgICBjb25zdHJ1Y3RvcihpbWFnZSwgdGl0bGUsIGlz
RXBoZW1lcmFsID0gZmFsc2UpCiAgICAgewogICAgICAgICBzdXBlcihpbWFnZSwgdGl0bGUpOwog
Ci0gICAgICAgIGlmIChpc0VwaGVtZXJhbCkgeworICAgICAgICB0aGlzLl9pc0VwaGVtZXJhbCA9
IGlzRXBoZW1lcmFsOworCisgICAgICAgIGlmICh0aGlzLl9pc0VwaGVtZXJhbCkgewogICAgICAg
ICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoImVwaGVtZXJhbCIpOwogCiAgICAgICAg
ICAgICBsZXQgY2xvc2VCdXR0b25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7CkBAIC00MiwxNSArNDQsMTUgQEAgV0kuR2VuZXJhbFRhYkJhckl0ZW0gPSBjbGFzcyBHZW5l
cmFsVGFiQmFySXRlbSBleHRlbmRzIFdJLlRhYkJhckl0ZW0KICAgICAgICAgfQogICAgIH0KIAot
ICAgIHN0YXRpYyBmcm9tVGFiQ29udGVudFZpZXdDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikKKyAg
ICBzdGF0aWMgZnJvbVRhYkluZm8oe2ltYWdlLCB0aXRsZSwgaXNFcGhlbWVyYWx9KQogICAgIHsK
LSAgICAgICAgbGV0IHtpbWFnZSwgdGl0bGV9ID0gY29uc3RydWN0b3IudGFiSW5mbygpOwotICAg
ICAgICBsZXQgaXNFcGhlbWVyYWwgPSBjb25zdHJ1Y3Rvci5pc0VwaGVtZXJhbCgpOwogICAgICAg
ICByZXR1cm4gbmV3IFdJLkdlbmVyYWxUYWJCYXJJdGVtKGltYWdlLCB0aXRsZSwgaXNFcGhlbWVy
YWwpOwogICAgIH0KIAogICAgIC8vIFB1YmxpYwogCisgICAgZ2V0IGlzRXBoZW1lcmFsKCkgeyBy
ZXR1cm4gdGhpcy5faXNFcGhlbWVyYWw7IH0KKwogICAgIGdldCB0aXRsZSgpCiAgICAgewogICAg
ICAgICByZXR1cm4gc3VwZXIudGl0bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9MYXllcnNUYWJDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xheWVyc1RhYkNvbnRlbnRWaWV3Lmpz
CmluZGV4IDZkMjZkNGMwNzVmZTVmM2ZkNThjZTdmNjIxOGE4YWIyMzI5Njg2NTkuLjI4NWIxYzRl
Y2ZmZDcyN2FiNmQ1N2I4ZjlkNzk4ZWUzYmQ0ZWUxYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xheWVyc1RhYkNvbnRlbnRWaWV3LmpzCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xheWVyc1RhYkNv
bnRlbnRWaWV3LmpzCkBAIC0yNyw3ICsyNyw3IEBAIFdJLkxheWVyc1RhYkNvbnRlbnRWaWV3ID0g
Y2xhc3MgTGF5ZXJzVGFiQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5Db250ZW50QnJvd3NlclRhCiB7
CiAgICAgY29uc3RydWN0b3IoKQogICAgIHsKLSAgICAgICAgbGV0IHRhYkJhckl0ZW0gPSBXSS5H
ZW5lcmFsVGFiQmFySXRlbS5mcm9tVGFiQ29udGVudFZpZXdDb25zdHJ1Y3RvcihXSS5MYXllcnNU
YWJDb250ZW50Vmlldyk7CisgICAgICAgIGxldCB0YWJCYXJJdGVtID0gV0kuR2VuZXJhbFRhYkJh
ckl0ZW0uZnJvbVRhYkluZm8oV0kuTGF5ZXJzVGFiQ29udGVudFZpZXcudGFiSW5mbygpKTsKIAog
ICAgICAgICBjb25zdCBuYXZpZ2F0aW9uU2lkZWJhclBhbmVsQ29uc3RydWN0b3IgPSBudWxsOwog
ICAgICAgICBjb25zdCBkZXRhaWxzU2lkZWJhclBhbmVsQ29uc3RydWN0b3JzID0gW1dJLkxheWVy
RGV0YWlsc1NpZGViYXJQYW5lbF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9MZWdhY3lUYWJCYXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9MZWdhY3lUYWJCYXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTljZThh
Y2FkZTZmMDBmYmJlYjZkYzdhNjc3NmRmMzI3NmUyYjJiMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xlZ2FjeVRhYkJhci5qcwpA
QCAtMCwwICsxLDg1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dJLkxlZ2FjeVRhYkJhciA9IGNsYXNzIExl
Z2FjeVRhYkJhciBleHRlbmRzIFdJLlZpZXcKK3sKKyAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCB0
YWJCYXJJdGVtcykKKyAgICB7CisgICAgICAgIHN1cGVyKGVsZW1lbnQpOworCisgICAgICAgIHRo
aXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJ0YWItYmFyIik7CisgICAgICAgIHRoaXMuZWxlbWVu
dC5zZXRBdHRyaWJ1dGUoInJvbGUiLCAidGFibGlzdCIpOworICAgICAgICB0aGlzLmVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5faGFuZGxlTW91c2VEb3duLmJpbmQo
dGhpcykpOworICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0
aGlzLl9oYW5kbGVDbGljay5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCB0aGlzLl9oYW5kbGVNb3VzZUxlYXZlLmJpbmQodGhp
cykpOworICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUi
LCB0aGlzLl9oYW5kbGVDb250ZXh0TWVudS5iaW5kKHRoaXMpKTsKKworICAgICAgICB0aGlzLmVs
ZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJ0b3AtYm9yZGVyIik7CisKKyAgICAgICAgdGhpcy5f
dGFiQmFySXRlbXMgPSBbXTsKKyAgICAgICAgdGhpcy5faGlkZGVuVGFiQmFySXRlbXMgPSBbXTsK
KworICAgICAgICBpZiAodGFiQmFySXRlbXMpIHsKKyAgICAgICAgICAgIGZvciAobGV0IHRhYkJh
ckl0ZW0gaW4gdGFiQmFySXRlbXMpCisgICAgICAgICAgICAgICAgdGhpcy5hZGRUYWJCYXJJdGVt
KHRhYkJhckl0ZW0pOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5hZGRUYWJCYXJJdGVtKFdJ
LnNldHRpbmdzVGFiQ29udGVudFZpZXcudGFiQmFySXRlbSwge3N1cHByZXNzQW5pbWF0aW9uczog
dHJ1ZX0pOworCisgICAgICAgIHRoaXMuX25ld1RhYlRhYkJhckl0ZW0gPSBuZXcgV0kuUGlubmVk
VGFiQmFySXRlbSgiSW1hZ2VzL05ld1RhYlBsdXMuc3ZnIiwgV0kuVUlTdHJpbmcoIkNyZWF0ZSBh
IG5ldyB0YWIiKSk7CisgICAgICAgIHRoaXMuX25ld1RhYlRhYkJhckl0ZW0uZWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgdGhpcy5faGFuZGxlTmV3VGFiTW91c2VFbnRlci5i
aW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fbmV3VGFiVGFiQmFySXRlbS5lbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5faGFuZGxlTmV3VGFiQ2xpY2suYmluZCh0aGlzKSk7
CisgICAgICAgIHRoaXMuYWRkVGFiQmFySXRlbSh0aGlzLl9uZXdUYWJUYWJCYXJJdGVtLCB7c3Vw
cHJlc3NBbmltYXRpb25zOiB0cnVlfSk7CisKKyAgICAgICAgdGhpcy5fdGFiUGlja2VyVGFiQmFy
SXRlbSA9IG5ldyBXSS5QaW5uZWRUYWJCYXJJdGVtKCJJbWFnZXMvVGFiUGlja2VyLnN2ZyIsIFdJ
LlVJU3RyaW5nKCJTaG93IGhpZGRlbiB0YWJzIikpOworICAgICAgICB0aGlzLl90YWJQaWNrZXJU
YWJCYXJJdGVtLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgidGFiLXBpY2tlciIpOworICAgICAgICB0
aGlzLl90YWJQaWNrZXJUYWJCYXJJdGVtLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4
dG1lbnUiLCB0aGlzLl9oYW5kbGVUYWJQaWNrZXJUYWJDb250ZXh0TWVudS5iaW5kKHRoaXMpKTsK
KyAgICAgICAgdGhpcy5hZGRUYWJCYXJJdGVtKHRoaXMuX3RhYlBpY2tlclRhYkJhckl0ZW0sIHtz
dXBwcmVzc0FuaW1hdGlvbnM6IHRydWV9KTsKKyAgICB9CisKKyAgICAvLyBQdWJsaWMKKworICAg
IGdldCBuZXdUYWJUYWJCYXJJdGVtKCkgeyByZXR1cm4gdGhpcy5fbmV3VGFiVGFiQmFySXRlbTsg
fQorCisgICAgdXBkYXRlTmV3VGFiVGFiQmFySXRlbVN0YXRlKCkKKyAgICB7CisgICAgICAgIGxl
dCBuZXdUYWJFeGlzdHMgPSAhV0kuaXNOZXdUYWJXaXRoVHlwZUFsbG93ZWQoV0kuTmV3VGFiQ29u
dGVudFZpZXcuVHlwZSk7CisgICAgICAgIHRoaXMuX25ld1RhYlRhYkJhckl0ZW0uZGlzYWJsZWQg
PSBuZXdUYWJFeGlzdHM7CisgICAgfQorCisgICAgYWRkVGFiQmFySXRlbSh0YWJCYXJJdGVtLCBv
cHRpb25zID0ge30pCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRUYWJCYXJJdGVt
KHRhYkJhckl0ZW0sIHRoaXMuX3RhYkJhckl0ZW1zLmxlbmd0aCwgb3B0aW9ucyk7CisgICAgfQor
CisgICAgaW5zZXJ0VGFiQmFySXRlbSh0YWJCYXJJdGVtLCBpbmRleCwgb3B0aW9ucyA9IHt9KQor
ICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGFiQmFySXRlbSBpbnN0YW5jZW9mIFdJLlRh
YkJhckl0ZW0pOworICAgICAgICBpZiAoISh0YWJCYXJJdGVtIGluc3RhbmNlb2YgV0kuVGFiQmFy
SXRlbSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBpZiAodGFiQmFySXRl
bS5wYXJlbnRUYWJCYXIgPT09IHRoaXMpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAg
ICAgICBpZiAodGhpcy5fdGFiQW5pbWF0ZWRDbG9zZWRTaW5jZU1vdXNlRW50ZXIpIHsKKyAgICAg
ICAgICAgIC8vIERlbGF5IGFkZGluZyB0aGUgbmV3IHRhYiB1bnRpbCB3ZSBjYW4gZXhwYW5kIHRo
ZSB0YWJzIGFmdGVyIGEgY2xvc2VkIHRhYi4KKyAgICAgICAgICAgIHRoaXMuX2ZpbmlzaEV4cGFu
ZGluZ1RhYnNBZnRlckNsb3NlKCkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgdGhpcy5p
bnNlcnRUYWJCYXJJdGVtKHRhYkJhckl0ZW0sIGluZGV4LCBvcHRpb25zKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
dGFiQmFySXRlbS5wYXJlbnRUYWJCYXIpCisgICAgICAgICAgICB0YWJCYXJJdGVtLnBhcmVudFRh
YkJhci5yZW1vdmVUYWJCYXJJdGVtKHRhYkJhckl0ZW0pOworCisgICAgICAgIHRhYkJhckl0ZW0u
cGFyZW50VGFiQmFyID0gdGhpczsKKworICAgICAgICBpbmRleCA9IE51bWJlci5jb25zdHJhaW4o
aW5kZXgsIDAsIHRoaXMubm9ybWFsVGFiQ291bnQpOworCisgICAgICAgIGlmICh0aGlzLmVsZW1l
bnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhbmltYXRpbmciKSkgeworICAgICAgICAgICAgcmVxdWVz
dEFuaW1hdGlvbkZyYW1lKHJlbW92ZVN0eWxlcy5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIG9w
dGlvbnMuc3VwcHJlc3NBbmltYXRpb25zID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZh
ciBiZWZvcmVUYWJTaXplc0FuZFBvc2l0aW9uczsKKyAgICAgICAgaWYgKCFvcHRpb25zLnN1cHBy
ZXNzQW5pbWF0aW9ucykKKyAgICAgICAgICAgIGJlZm9yZVRhYlNpemVzQW5kUG9zaXRpb25zID0g
dGhpcy5fcmVjb3JkVGFiQmFySXRlbVNpemVzQW5kUG9zaXRpb25zKCk7CisKKyAgICAgICAgdGhp
cy5fdGFiQmFySXRlbXMuc3BsaWNlKGluZGV4LCAwLCB0YWJCYXJJdGVtKTsKKworICAgICAgICB2
YXIgbmV4dFNpYmxpbmcgPSB0aGlzLl90YWJCYXJJdGVtc1tpbmRleCArIDFdOworICAgICAgICBs
ZXQgbmV4dFNpYmxpbmdFbGVtZW50ID0gbmV4dFNpYmxpbmcgPyBuZXh0U2libGluZy5lbGVtZW50
IDogdGhpcy5fdGFiQmFySXRlbXMubGFzdFZhbHVlLmVsZW1lbnQ7CisKKyAgICAgICAgaWYgKHRo
aXMuZWxlbWVudC5pc0FuY2VzdG9yKG5leHRTaWJsaW5nRWxlbWVudCkpCisgICAgICAgICAgICB0
aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRhYkJhckl0ZW0uZWxlbWVudCwgbmV4dFNpYmxpbmdF
bGVtZW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENo
aWxkKHRhYkJhckl0ZW0uZWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlz
dC50b2dnbGUoInNpbmdsZS10YWIiLCAhdGhpcy5faGFzTW9yZVRoYW5PbmVOb3JtYWxUYWIoKSk7
CisKKyAgICAgICAgdGFiQmFySXRlbS5lbGVtZW50LnN0eWxlLmxlZnQgPSBudWxsOworICAgICAg
ICB0YWJCYXJJdGVtLmVsZW1lbnQuc3R5bGUud2lkdGggPSBudWxsOworCisgICAgICAgIGZ1bmN0
aW9uIGFuaW1hdGVUYWJzKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNs
YXNzTGlzdC5hZGQoImFuaW1hdGluZyIpOworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNz
TGlzdC5hZGQoImluc2VydGluZy10YWIiKTsKKworICAgICAgICAgICAgdGhpcy5fYXBwbHlUYWJC
YXJJdGVtU2l6ZXNBbmRQb3NpdGlvbnMoYWZ0ZXJUYWJTaXplc0FuZFBvc2l0aW9ucyk7CisKKyAg
ICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRUcmFuc2l0aW9u
RW5kIiwgcmVtb3ZlU3R5bGVzTGlzdGVuZXIpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gcmVtb3ZlU3R5bGVzKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNs
YXNzTGlzdC5yZW1vdmUoInN0YXRpYy1sYXlvdXQiKTsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVu
dC5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRpbmciKTsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVu
dC5jbGFzc0xpc3QucmVtb3ZlKCJpbnNlcnRpbmctdGFiIik7CisKKyAgICAgICAgICAgIHRhYkJh
ckl0ZW0uZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJiZWluZy1pbnNlcnRlZCIpOworCisgICAg
ICAgICAgICB0aGlzLl9jbGVhclRhYkJhckl0ZW1TaXplc0FuZFBvc2l0aW9ucygpOworCisgICAg
ICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2Via2l0VHJhbnNpdGlv
bkVuZCIsIHJlbW92ZVN0eWxlc0xpc3RlbmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
b3B0aW9ucy5zdXBwcmVzc0FuaW1hdGlvbnMpIHsKKyAgICAgICAgICAgIHZhciBhZnRlclRhYlNp
emVzQW5kUG9zaXRpb25zID0gdGhpcy5fcmVjb3JkVGFiQmFySXRlbVNpemVzQW5kUG9zaXRpb25z
KCk7CisKKyAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7CisKKyAgICAgICAgICAgIGxl
dCB0YWJCYXJJdGVtcyA9IHRoaXMuX3RhYkJhckl0ZW1zRnJvbUxlZnRUb1JpZ2h0KCk7CisgICAg
ICAgICAgICBsZXQgcHJldmlvdXNUYWJCYXJJdGVtID0gdGFiQmFySXRlbXNbdGFiQmFySXRlbXMu
aW5kZXhPZih0YWJCYXJJdGVtKSAtIDFdIHx8IG51bGw7CisgICAgICAgICAgICBsZXQgcHJldmlv
dXNUYWJCYXJJdGVtU2l6ZUFuZFBvc2l0aW9uID0gcHJldmlvdXNUYWJCYXJJdGVtID8gYmVmb3Jl
VGFiU2l6ZXNBbmRQb3NpdGlvbnMuZ2V0KHByZXZpb3VzVGFiQmFySXRlbSkgOiBudWxsOworCisg
ICAgICAgICAgICBpZiAocHJldmlvdXNUYWJCYXJJdGVtU2l6ZUFuZFBvc2l0aW9uKQorICAgICAg
ICAgICAgICAgIGJlZm9yZVRhYlNpemVzQW5kUG9zaXRpb25zLnNldCh0YWJCYXJJdGVtLCB7bGVm
dDogcHJldmlvdXNUYWJCYXJJdGVtU2l6ZUFuZFBvc2l0aW9uLmxlZnQgKyBwcmV2aW91c1RhYkJh
ckl0ZW1TaXplQW5kUG9zaXRpb24ud2lkdGgsIHdpZHRoOiAwfSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgYmVmb3JlVGFiU2l6ZXNBbmRQb3NpdGlvbnMuc2V0KHRhYkJhckl0
ZW0sIHtsZWZ0OiAwLCB3aWR0aDogMH0pOworCisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xh
c3NMaXN0LmFkZCgic3RhdGljLWxheW91dCIpOworICAgICAgICAgICAgdGFiQmFySXRlbS5lbGVt
ZW50LmNsYXNzTGlzdC5hZGQoImJlaW5nLWluc2VydGVkIik7CisKKyAgICAgICAgICAgIHRoaXMu
X2FwcGx5VGFiQmFySXRlbVNpemVzQW5kUG9zaXRpb25zKGJlZm9yZVRhYlNpemVzQW5kUG9zaXRp
b25zKTsKKworICAgICAgICAgICAgdmFyIHJlbW92ZVN0eWxlc0xpc3RlbmVyID0gcmVtb3ZlU3R5
bGVzLmJpbmQodGhpcyk7CisKKyAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmlt
YXRlVGFicy5iaW5kKHRoaXMpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aGlzLm5l
ZWRzTGF5b3V0KCk7CisKKyAgICAgICAgaWYgKCEodGFiQmFySXRlbSBpbnN0YW5jZW9mIFdJLlBp
bm5lZFRhYkJhckl0ZW0pKQorICAgICAgICAgICAgdGhpcy51cGRhdGVOZXdUYWJUYWJCYXJJdGVt
U3RhdGUoKTsKKworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXSS5UYWJC
YXIuRXZlbnQuVGFiQmFySXRlbUFkZGVkLCB7dGFiQmFySXRlbX0pOworCisgICAgICAgIHJldHVy
biB0YWJCYXJJdGVtOworICAgIH0KKworICAgIHJlbW92ZVRhYkJhckl0ZW0odGFiQmFySXRlbU9y
SW5kZXgsIG9wdGlvbnMgPSB7fSkKKyAgICB7CisgICAgICAgIGxldCB0YWJCYXJJdGVtID0gdGhp
cy5fZmluZFRhYkJhckl0ZW0odGFiQmFySXRlbU9ySW5kZXgpOworICAgICAgICBpZiAoIXRhYkJh
ckl0ZW0gfHwgdGFiQmFySXRlbSBpbnN0YW5jZW9mIFdJLlBpbm5lZFRhYkJhckl0ZW0pCisgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICB0YWJCYXJJdGVtLnBhcmVudFRhYkJhciA9
IG51bGw7CisKKyAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkVGFiQmFySXRlbSA9PT0gdGFiQmFy
SXRlbSkgeworICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5fdGFiQmFySXRlbXMuaW5kZXhP
Zih0YWJCYXJJdGVtKTsKKyAgICAgICAgICAgIHZhciBuZXh0VGFiQmFySXRlbSA9IHRoaXMuX3Rh
YkJhckl0ZW1zW2luZGV4ICsgMV07CisgICAgICAgICAgICBpZiAoIW5leHRUYWJCYXJJdGVtIHx8
IG5leHRUYWJCYXJJdGVtIGluc3RhbmNlb2YgV0kuUGlubmVkVGFiQmFySXRlbSkKKyAgICAgICAg
ICAgICAgICBuZXh0VGFiQmFySXRlbSA9IHRoaXMuX3RhYkJhckl0ZW1zW2luZGV4IC0gMV07CisK
KyAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJCYXJJdGVtID0gbmV4dFRhYkJhckl0ZW07Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygi
YW5pbWF0aW5nIikpIHsKKyAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShyZW1vdmVT
dHlsZXMuYmluZCh0aGlzKSk7CisgICAgICAgICAgICBvcHRpb25zLnN1cHByZXNzQW5pbWF0aW9u
cyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2YXIgYmVmb3JlVGFiU2l6ZXNBbmRQb3Np
dGlvbnM7CisgICAgICAgIGlmICghb3B0aW9ucy5zdXBwcmVzc0FuaW1hdGlvbnMpCisgICAgICAg
ICAgICBiZWZvcmVUYWJTaXplc0FuZFBvc2l0aW9ucyA9IHRoaXMuX3JlY29yZFRhYkJhckl0ZW1T
aXplc0FuZFBvc2l0aW9ucygpOworCisgICAgICAgIC8vIFN1YnRyYWN0IDEgZnJvbSBub3JtYWxU
YWJDb3VudCBzaW5jZSBhcnJheXMgYmVnaW4gaW5kZXhpbmcgYXQgMC4KKyAgICAgICAgbGV0IHdh
c0xhc3ROb3JtYWxUYWIgPSB0aGlzLl90YWJCYXJJdGVtcy5pbmRleE9mKHRhYkJhckl0ZW0pID09
PSB0aGlzLm5vcm1hbFRhYkNvdW50IC0gMTsKKworICAgICAgICB0aGlzLl90YWJCYXJJdGVtcy5y
ZW1vdmUodGFiQmFySXRlbSk7CisgICAgICAgIHRhYkJhckl0ZW0uZWxlbWVudC5yZW1vdmUoKTsK
KworICAgICAgICB2YXIgaGFzTW9yZVRoYW5PbmVOb3JtYWxUYWIgPSB0aGlzLl9oYXNNb3JlVGhh
bk9uZU5vcm1hbFRhYigpOworICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgi
c2luZ2xlLXRhYiIsICFoYXNNb3JlVGhhbk9uZU5vcm1hbFRhYik7CisKKyAgICAgICAgY29uc3Qg
c2hvdWxkT3BlbkRlZmF1bHRUYWIgPSAhdGFiQmFySXRlbS5pc0RlZmF1bHRUYWIgJiYgIXRoaXMu
bm9ybWFsVGFiQ291bnQ7CisgICAgICAgIGlmIChzaG91bGRPcGVuRGVmYXVsdFRhYikKKyAgICAg
ICAgICAgIG9wdGlvbnMuc3VwcHJlc3NBbmltYXRpb25zID0gdHJ1ZTsKKworICAgICAgICBpZiAo
IWhhc01vcmVUaGFuT25lTm9ybWFsVGFiIHx8IHdhc0xhc3ROb3JtYWxUYWIgfHwgIW9wdGlvbnMu
c3VwcHJlc3NFeHBhbnNpb24pIHsKKyAgICAgICAgICAgIGlmICghb3B0aW9ucy5zdXBwcmVzc0Fu
aW1hdGlvbnMpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90YWJBbmltYXRlZENsb3NlZFNpbmNl
TW91c2VFbnRlciA9IHRydWU7CisgICAgICAgICAgICAgICAgdGhpcy5fZmluaXNoRXhwYW5kaW5n
VGFic0FmdGVyQ2xvc2UoYmVmb3JlVGFiU2l6ZXNBbmRQb3NpdGlvbnMpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5uZWVkc0xheW91dCgpOworCisgICAgICAgICAg
ICB0aGlzLnVwZGF0ZU5ld1RhYlRhYkJhckl0ZW1TdGF0ZSgpOworCisgICAgICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXSS5UYWJCYXIuRXZlbnQuVGFiQmFySXRlbVJlbW92
ZWQsIHt0YWJCYXJJdGVtfSk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRPcGVuRGVmYXVsdFRh
YikKKyAgICAgICAgICAgICAgICB0aGlzLl9vcGVuRGVmYXVsdFRhYigpOworCisgICAgICAgICAg
ICByZXR1cm4gdGFiQmFySXRlbTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBsYXN0Tm9ybWFs
VGFiQmFySXRlbTsKKworICAgICAgICBmdW5jdGlvbiBhbmltYXRlVGFicygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKTsKKyAg
ICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjbG9zaW5nLXRhYiIpOworCisg
ICAgICAgICAgICAvLyBGb3IgUlRMLCB3ZSBuZWVkIHRvIHBsYWNlIGV4dHJhIHNwYWNlIGJldHdl
ZW4gcGlubmVkIHRhYiBhbmQgZmlyc3Qgbm9ybWFsIHRhYi4KKyAgICAgICAgICAgIC8vIEZyb20g
bGVmdCB0byByaWdodCB0aGVyZSBpcyBwaW5uZWQgdGFicywgZXh0cmEgc3BhY2UsIHRoZW4gbm9y
bWFsIHRhYnMuIENvbXB1dGUKKyAgICAgICAgICAgIC8vIGhvdyBtdWNoIGV4dHJhIHNwYWNlIHdl
IG5lZWQgdG8gYWRkaXRpb25hbGx5IGFkZCBmb3Igbm9ybWFsIHRhYiBpdGVtcy4KKyAgICAgICAg
ICAgIGxldCBleHRyYVNwYWNlQmV0d2Vlbk5vcm1hbEFuZFBpbm5lZFRhYnMgPSAwOworICAgICAg
ICAgICAgaWYgKFdJLnJlc29sdmVkTGF5b3V0RGlyZWN0aW9uKCkgPT09IFdJLkxheW91dERpcmVj
dGlvbi5SVEwpIHsKKyAgICAgICAgICAgICAgICBleHRyYVNwYWNlQmV0d2Vlbk5vcm1hbEFuZFBp
bm5lZFRhYnMgPSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7Cisg
ICAgICAgICAgICAgICAgZm9yIChsZXQgY3VycmVudFRhYkJhckl0ZW0gb2YgdGhpcy5fdGFiQmFy
SXRlbXNGcm9tTGVmdFRvUmlnaHQoKSkKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFTcGFjZUJl
dHdlZW5Ob3JtYWxBbmRQaW5uZWRUYWJzIC09IGN1cnJlbnRUYWJCYXJJdGVtLmVsZW1lbnQuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGxldCBsZWZ0ID0gMDsKKyAgICAgICAgICAgIGZvciAobGV0IGN1cnJlbnRUYWJCYXJJdGVtIG9m
IHRoaXMuX3RhYkJhckl0ZW1zRnJvbUxlZnRUb1JpZ2h0KCkpIHsKKyAgICAgICAgICAgICAgICBs
ZXQgc2l6ZUFuZFBvc2l0aW9uID0gYmVmb3JlVGFiU2l6ZXNBbmRQb3NpdGlvbnMuZ2V0KGN1cnJl
bnRUYWJCYXJJdGVtKTsKKworICAgICAgICAgICAgICAgIGlmICghKGN1cnJlbnRUYWJCYXJJdGVt
IGluc3RhbmNlb2YgV0kuUGlubmVkVGFiQmFySXRlbSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFRhYkJhckl0ZW0uZWxlbWVudC5zdHlsZS5sZWZ0ID0gZXh0cmFTcGFjZUJldHdlZW5O
b3JtYWxBbmRQaW5uZWRUYWJzICsgbGVmdCArICJweCI7CisgICAgICAgICAgICAgICAgICAgIGxl
ZnQgKz0gc2l6ZUFuZFBvc2l0aW9uLndpZHRoOworICAgICAgICAgICAgICAgICAgICBsYXN0Tm9y
bWFsVGFiQmFySXRlbSA9IGN1cnJlbnRUYWJCYXJJdGVtOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gc2l6ZUFuZFBvc2l0aW9uLmxlZnQgKyBzaXpl
QW5kUG9zaXRpb24ud2lkdGg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoZSBz
ZWxlY3RlZCB0YWIgYW5kIGxhc3QgdGFiIG5lZWQgdG8gZHJhdyBhIHJpZ2h0IGJvcmRlciBhcyB3
ZWxsLCBzbyBtYWtlIHRoZW0gMXB4IHdpZGVyLgorICAgICAgICAgICAgaWYgKHRoaXMuX3NlbGVj
dGVkVGFiQmFySXRlbSkKKyAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0u
ZWxlbWVudC5zdHlsZS53aWR0aCA9IChwYXJzZUZsb2F0KHRoaXMuX3NlbGVjdGVkVGFiQmFySXRl
bS5lbGVtZW50LnN0eWxlLndpZHRoKSArIDEpICsgInB4IjsKKworICAgICAgICAgICAgaWYgKGxh
c3ROb3JtYWxUYWJCYXJJdGVtICE9PSB0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0pCisgICAgICAg
ICAgICAgICAgbGFzdE5vcm1hbFRhYkJhckl0ZW0uZWxlbWVudC5zdHlsZS53aWR0aCA9IChwYXJz
ZUZsb2F0KGxhc3ROb3JtYWxUYWJCYXJJdGVtLmVsZW1lbnQuc3R5bGUud2lkdGgpICsgMSkgKyAi
cHgiOworCisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0
VHJhbnNpdGlvbkVuZCIsIHJlbW92ZVN0eWxlc0xpc3RlbmVyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHJlbW92ZVN0eWxlcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRo
ZSBzZWxlY3RlZCB0YWIgbmVlZHMgdG8gc3RvcCBkcmF3aW5nIHRoZSByaWdodCBib3JkZXIsIHNv
IG1ha2UgaXQgMXB4IHNtYWxsZXIuIE9ubHkgaWYgaXQgaXNuJ3QgdGhlIGxhc3QuCisgICAgICAg
ICAgICBpZiAodGhpcy5fc2VsZWN0ZWRUYWJCYXJJdGVtICYmIHRoaXMuX3NlbGVjdGVkVGFiQmFy
SXRlbSAhPT0gbGFzdE5vcm1hbFRhYkJhckl0ZW0pCisgICAgICAgICAgICAgICAgdGhpcy5fc2Vs
ZWN0ZWRUYWJCYXJJdGVtLmVsZW1lbnQuc3R5bGUud2lkdGggPSAocGFyc2VGbG9hdCh0aGlzLl9z
ZWxlY3RlZFRhYkJhckl0ZW0uZWxlbWVudC5zdHlsZS53aWR0aCkgLSAxKSArICJweCI7CisKKyAg
ICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRpbmciKTsKKyAg
ICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJjbG9zaW5nLXRhYiIpOwor
CisgICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpOworCisgICAgICAgICAgICB0aGlzLmVs
ZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2Via2l0VHJhbnNpdGlvbkVuZCIsIHJlbW92ZVN0
eWxlc0xpc3RlbmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghb3B0aW9ucy5zdXBwcmVz
c0FuaW1hdGlvbnMpIHsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJz
dGF0aWMtbGF5b3V0Iik7CisKKyAgICAgICAgICAgIHRoaXMuX3RhYkFuaW1hdGVkQ2xvc2VkU2lu
Y2VNb3VzZUVudGVyID0gdHJ1ZTsKKworICAgICAgICAgICAgdGhpcy5fYXBwbHlUYWJCYXJJdGVt
U2l6ZXNBbmRQb3NpdGlvbnMoYmVmb3JlVGFiU2l6ZXNBbmRQb3NpdGlvbnMpOworCisgICAgICAg
ICAgICB2YXIgcmVtb3ZlU3R5bGVzTGlzdGVuZXIgPSByZW1vdmVTdHlsZXMuYmluZCh0aGlzKTsK
KworICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGVUYWJzLmJpbmQodGhp
cykpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRoaXMubmVlZHNMYXlvdXQoKTsKKwor
ICAgICAgICB0aGlzLnVwZGF0ZU5ld1RhYlRhYkJhckl0ZW1TdGF0ZSgpOworCisgICAgICAgIHRo
aXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdJLlRhYkJhci5FdmVudC5UYWJCYXJJdGVtUmVt
b3ZlZCwge3RhYkJhckl0ZW19KTsKKworICAgICAgICBpZiAoc2hvdWxkT3BlbkRlZmF1bHRUYWIp
CisgICAgICAgICAgICB0aGlzLl9vcGVuRGVmYXVsdFRhYigpOworCisgICAgICAgIHJldHVybiB0
YWJCYXJJdGVtOworICAgIH0KKworICAgIHNlbGVjdFByZXZpb3VzVGFiKCkKKyAgICB7CisgICAg
ICAgIGlmICh0aGlzLl90YWJCYXJJdGVtcy5sZW5ndGggPD0gMSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMuX3RhYkJhckl0ZW1zLmluZGV4T2Yo
dGhpcy5fc2VsZWN0ZWRUYWJCYXJJdGVtKTsKKyAgICAgICAgdmFyIG5ld0luZGV4ID0gc3RhcnRJ
bmRleDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKG5ld0luZGV4ID09PSAwKQorICAg
ICAgICAgICAgICAgIG5ld0luZGV4ID0gdGhpcy5fdGFiQmFySXRlbXMubGVuZ3RoIC0gMTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXdJbmRleC0tOworCisgICAgICAgICAg
ICBpZiAoISh0aGlzLl90YWJCYXJJdGVtc1tuZXdJbmRleF0gaW5zdGFuY2VvZiBXSS5QaW5uZWRU
YWJCYXJJdGVtKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSB3aGlsZSAobmV3
SW5kZXggIT09IHN0YXJ0SW5kZXgpOworCisgICAgICAgIGlmIChuZXdJbmRleCA9PT0gc3RhcnRJ
bmRleCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLnNlbGVjdGVkVGFiQmFy
SXRlbSA9IHRoaXMuX3RhYkJhckl0ZW1zW25ld0luZGV4XTsKKyAgICB9CisKKyAgICBzZWxlY3RO
ZXh0VGFiKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl90YWJCYXJJdGVtcy5sZW5ndGggPD0g
MSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMu
X3RhYkJhckl0ZW1zLmluZGV4T2YodGhpcy5fc2VsZWN0ZWRUYWJCYXJJdGVtKTsKKyAgICAgICAg
dmFyIG5ld0luZGV4ID0gc3RhcnRJbmRleDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYg
KG5ld0luZGV4ID09PSB0aGlzLl90YWJCYXJJdGVtcy5sZW5ndGggLSAxKQorICAgICAgICAgICAg
ICAgIG5ld0luZGV4ID0gMDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXdJ
bmRleCsrOworCisgICAgICAgICAgICBpZiAoISh0aGlzLl90YWJCYXJJdGVtc1tuZXdJbmRleF0g
aW5zdGFuY2VvZiBXSS5QaW5uZWRUYWJCYXJJdGVtKSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfSB3aGlsZSAobmV3SW5kZXggIT09IHN0YXJ0SW5kZXgpOworCisgICAgICAgIGlm
IChuZXdJbmRleCA9PT0gc3RhcnRJbmRleCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICB0aGlzLnNlbGVjdGVkVGFiQmFySXRlbSA9IHRoaXMuX3RhYkJhckl0ZW1zW25ld0luZGV4XTsK
KyAgICB9CisKKyAgICBnZXQgc2VsZWN0ZWRUYWJCYXJJdGVtKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW07CisgICAgfQorCisgICAgc2V0IHNlbGVjdGVk
VGFiQmFySXRlbSh0YWJCYXJJdGVtT3JJbmRleCkKKyAgICB7CisgICAgICAgIGxldCB0YWJCYXJJ
dGVtID0gdGhpcy5fZmluZFRhYkJhckl0ZW0odGFiQmFySXRlbU9ySW5kZXgpOworICAgICAgICBp
ZiAodGFiQmFySXRlbSA9PT0gdGhpcy5fbmV3VGFiVGFiQmFySXRlbSkgeworICAgICAgICAgICAg
Ly8gR2V0IHRoZSBpdGVtIGJlZm9yZSB0aGUgTmV3LVRhYiBpdGVtIHNpbmNlIGl0IGlzIG5vdCBz
ZWxlY3RhYmxlLgorICAgICAgICAgICAgdGFiQmFySXRlbSA9IHRoaXMuX3RhYkJhckl0ZW1zW3Ro
aXMubm9ybWFsVGFiQ291bnQgLSAxXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLl9z
ZWxlY3RlZFRhYkJhckl0ZW0gPT09IHRhYkJhckl0ZW0pCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkVGFiQmFySXRlbSkKKyAgICAgICAgICAgIHRoaXMu
X3NlbGVjdGVkVGFiQmFySXRlbS5zZWxlY3RlZCA9IGZhbHNlOworCisgICAgICAgIHRoaXMuX3Nl
bGVjdGVkVGFiQmFySXRlbSA9IHRhYkJhckl0ZW0gfHwgbnVsbDsKKworICAgICAgICBpZiAodGhp
cy5fc2VsZWN0ZWRUYWJCYXJJdGVtKSB7CisgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFRhYkJh
ckl0ZW0uc2VsZWN0ZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkVGFi
QmFySXRlbS5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiaGlkZGVuIikpCisgICAgICAgICAg
ICAgICAgdGhpcy5uZWVkc0xheW91dCgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGFiQmFyLkV2ZW50LlRhYkJhckl0ZW1TZWxlY3RlZCk7
CisgICAgfQorCisgICAgZ2V0IHRhYkJhckl0ZW1zKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl90YWJCYXJJdGVtczsKKyAgICB9CisKKyAgICBnZXQgbm9ybWFsVGFiQ291bnQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RhYkJhckl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIShp
dGVtIGluc3RhbmNlb2YgV0kuUGlubmVkVGFiQmFySXRlbSkpLmxlbmd0aDsKKyAgICB9CisKKyAg
ICAvLyBQcm90ZWN0ZWQKKworICAgIGxheW91dCgpCisgICAgeworICAgICAgICBpZiAodGhpcy5l
bGVtZW50LmNsYXNzTGlzdC5jb250YWlucygic3RhdGljLWxheW91dCIpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjYWxjdWxhdGUt
d2lkdGgiKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoImNvbGxhcHNl
ZCIpOworCisgICAgICAgIGZ1bmN0aW9uIGZvcmNlSXRlbUhpZGRlbihpdGVtLCBoaWRkZW4pIHsK
KyAgICAgICAgICAgIGl0ZW0uZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCJoaWRkZW4iLCAhIWhp
ZGRlbik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuX3RhYkJh
ckl0ZW1zKQorICAgICAgICAgICAgZm9yY2VJdGVtSGlkZGVuKGl0ZW0sIGl0ZW0gPT09IHRoaXMu
X3RhYlBpY2tlclRhYkJhckl0ZW0pOworCisgICAgICAgIGZ1bmN0aW9uIG1lYXN1cmVJdGVtV2lk
dGgoaXRlbSkgeworICAgICAgICAgICAgaWYgKCFpdGVtW1dJLlRhYkJhci5DYWNoZWRXaWR0aFN5
bWJvbF0pCisgICAgICAgICAgICAgICAgaXRlbVtXSS5UYWJCYXIuQ2FjaGVkV2lkdGhTeW1ib2xd
ID0gaXRlbS5lbGVtZW50LnJlYWxPZmZzZXRXaWR0aDsKKyAgICAgICAgICAgIHJldHVybiBpdGVt
W1dJLlRhYkJhci5DYWNoZWRXaWR0aFN5bWJvbF07CisgICAgICAgIH0KKworICAgICAgICBsZXQg
cmVjYWxjdWxhdGVJdGVtV2lkdGhzID0gKCkgPT4geworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3RhYkJhckl0ZW1zLnJlZHVjZSgodG90YWwsIGl0ZW0pID0+IHsKKyAgICAgICAgICAgICAgICBp
dGVtW1dJLlRhYkJhci5DYWNoZWRXaWR0aFN5bWJvbF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRvdGFsICsgbWVhc3VyZUl0ZW1XaWR0aChpdGVtKTsKKyAgICAgICAgICAg
IH0sIDApOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuX2hpZGRlblRhYkJhckl0ZW1zID0g
W107CisKKyAgICAgICAgbGV0IHRvdGFsSXRlbVdpZHRoID0gcmVjYWxjdWxhdGVJdGVtV2lkdGhz
KCk7CisgICAgICAgIGxldCBiYXJXaWR0aCA9IHRoaXMuZWxlbWVudC5yZWFsT2Zmc2V0V2lkdGg7
CisKKyAgICAgICAgaWYgKHRvdGFsSXRlbVdpZHRoID4gYmFyV2lkdGgpIHsKKyAgICAgICAgICAg
IHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb2xsYXBzZWQiKTsKKyAgICAgICAgICAgIHRv
dGFsSXRlbVdpZHRoID0gcmVjYWxjdWxhdGVJdGVtV2lkdGhzKCk7CisgICAgICAgICAgICBpZiAo
dG90YWxJdGVtV2lkdGggPiBiYXJXaWR0aCkgeworICAgICAgICAgICAgICAgIGZvcmNlSXRlbUhp
ZGRlbih0aGlzLl90YWJQaWNrZXJUYWJCYXJJdGVtLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
dG90YWxJdGVtV2lkdGggKz0gbWVhc3VyZUl0ZW1XaWR0aCh0aGlzLl90YWJQaWNrZXJUYWJCYXJJ
dGVtKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGV0IHRhYkJhckl0ZW1zID0gdGhp
cy5fdGFiQmFySXRlbXNGcm9tTGVmdFRvUmlnaHQoKTsKKyAgICAgICAgICAgIGxldCBpbmRleCA9
IHRhYkJhckl0ZW1zLmxlbmd0aDsKKyAgICAgICAgICAgIHdoaWxlICh0b3RhbEl0ZW1XaWR0aCA+
IGJhcldpZHRoICYmIC0taW5kZXggPj0gMCkgeworICAgICAgICAgICAgICAgIGxldCBpdGVtID0g
dGFiQmFySXRlbXNbaW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSB0aGlzLnNl
bGVjdGVkVGFiQmFySXRlbSB8fCBpdGVtIGluc3RhbmNlb2YgV0kuUGlubmVkVGFiQmFySXRlbSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICB0b3RhbEl0
ZW1XaWR0aCAtPSBtZWFzdXJlSXRlbVdpZHRoKGl0ZW0pOworICAgICAgICAgICAgICAgIGZvcmNl
SXRlbUhpZGRlbihpdGVtLCB0cnVlKTsKKworICAgICAgICAgICAgICAgIHRoaXMuX2hpZGRlblRh
YkJhckl0ZW1zLnB1c2goaXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiY2FsY3VsYXRlLXdpZHRoIik7CisgICAg
fQorCisgICAgLy8gUHJpdmF0ZQorCisgICAgX3RhYkJhckl0ZW1zRnJvbUxlZnRUb1JpZ2h0KCkK
KyAgICB7CisgICAgICAgIHJldHVybiBXSS5yZXNvbHZlZExheW91dERpcmVjdGlvbigpID09PSBX
SS5MYXlvdXREaXJlY3Rpb24uTFRSID8gdGhpcy5fdGFiQmFySXRlbXMgOiB0aGlzLl90YWJCYXJJ
dGVtcy5zbGljZSgpLnJldmVyc2UoKTsKKyAgICB9CisKKyAgICBfZmluZFRhYkJhckl0ZW0odGFi
QmFySXRlbU9ySW5kZXgpCisgICAgeworICAgICAgICBpZiAodHlwZW9mIHRhYkJhckl0ZW1Pcklu
ZGV4ID09PSAibnVtYmVyIikKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl90YWJCYXJJdGVtc1t0
YWJCYXJJdGVtT3JJbmRleF0gfHwgbnVsbDsKKworICAgICAgICBpZiAodGFiQmFySXRlbU9ySW5k
ZXggaW5zdGFuY2VvZiBXSS5UYWJCYXJJdGVtKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fdGFi
QmFySXRlbXMuaW5jbHVkZXModGFiQmFySXRlbU9ySW5kZXgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0YWJCYXJJdGVtT3JJbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxs
OworICAgIH0KKworICAgIF9oYXNNb3JlVGhhbk9uZU5vcm1hbFRhYigpCisgICAgeworICAgICAg
ICBsZXQgbm9ybWFsVGFiQ291bnQgPSAwOworICAgICAgICBmb3IgKGxldCB0YWJCYXJJdGVtIG9m
IHRoaXMuX3RhYkJhckl0ZW1zKSB7CisgICAgICAgICAgICBpZiAodGFiQmFySXRlbSBpbnN0YW5j
ZW9mIFdJLlBpbm5lZFRhYkJhckl0ZW0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICsrbm9ybWFsVGFiQ291bnQ7CisgICAgICAgICAgICBpZiAobm9ybWFsVGFiQ291
bnQgPj0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBfb3BlbkRlZmF1bHRUYWIoKQorICAgIHsK
KyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGFiQmFyLkV2ZW50Lk9w
ZW5EZWZhdWx0VGFiKTsKKyAgICB9CisKKyAgICBfcmVjb3JkVGFiQmFySXRlbVNpemVzQW5kUG9z
aXRpb25zKCkKKyAgICB7CisgICAgICAgIHZhciB0YWJCYXJJdGVtU2l6ZXNBbmRQb3NpdGlvbnMg
PSBuZXcgTWFwOworCisgICAgICAgIGNvbnN0IGJhclJlY3QgPSB0aGlzLmVsZW1lbnQuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCk7CisKKyAgICAgICAgZm9yICh2YXIgdGFiQmFySXRlbSBvZiB0aGlz
Ll90YWJCYXJJdGVtcykgeworICAgICAgICAgICAgdmFyIGJvdW5kaW5nUmVjdCA9IHRhYkJhckl0
ZW0uZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgICAgIHRhYkJhckl0
ZW1TaXplc0FuZFBvc2l0aW9ucy5zZXQodGFiQmFySXRlbSwge2xlZnQ6IGJvdW5kaW5nUmVjdC5s
ZWZ0IC0gYmFyUmVjdC5sZWZ0LCB3aWR0aDogYm91bmRpbmdSZWN0LndpZHRofSk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gdGFiQmFySXRlbVNpemVzQW5kUG9zaXRpb25zOworICAgIH0K
KworICAgIF9hcHBseVRhYkJhckl0ZW1TaXplc0FuZFBvc2l0aW9ucyh0YWJCYXJJdGVtU2l6ZXNB
bmRQb3NpdGlvbnMsIHNraXBUYWJCYXJJdGVtKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgW3Rh
YkJhckl0ZW0sIHNpemVBbmRQb3NpdGlvbl0gb2YgdGFiQmFySXRlbVNpemVzQW5kUG9zaXRpb25z
KSB7CisgICAgICAgICAgICBpZiAoc2tpcFRhYkJhckl0ZW0gJiYgdGFiQmFySXRlbSA9PT0gc2tp
cFRhYkJhckl0ZW0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJC
YXJJdGVtLmVsZW1lbnQuc3R5bGUubGVmdCA9IHNpemVBbmRQb3NpdGlvbi5sZWZ0ICsgInB4IjsK
KyAgICAgICAgICAgIHRhYkJhckl0ZW0uZWxlbWVudC5zdHlsZS53aWR0aCA9IHNpemVBbmRQb3Np
dGlvbi53aWR0aCArICJweCI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfY2xlYXJUYWJCYXJJ
dGVtU2l6ZXNBbmRQb3NpdGlvbnMoc2tpcFRhYkJhckl0ZW0pCisgICAgeworICAgICAgICBmb3Ig
KHZhciB0YWJCYXJJdGVtIG9mIHRoaXMuX3RhYkJhckl0ZW1zKSB7CisgICAgICAgICAgICBpZiAo
c2tpcFRhYkJhckl0ZW0gJiYgdGFiQmFySXRlbSA9PT0gc2tpcFRhYkJhckl0ZW0pCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJCYXJJdGVtLmVsZW1lbnQuc3R5bGUu
bGVmdCA9IG51bGw7CisgICAgICAgICAgICB0YWJCYXJJdGVtLmVsZW1lbnQuc3R5bGUud2lkdGgg
PSBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgX2ZpbmlzaEV4cGFuZGluZ1RhYnNBZnRl
ckNsb3NlKGJlZm9yZVRhYlNpemVzQW5kUG9zaXRpb25zKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgY29u
c29sZS5hc3NlcnQodGhpcy5fdGFiQW5pbWF0ZWRDbG9zZWRTaW5jZU1vdXNlRW50ZXIpOworICAg
ICAgICAgICAgdGhpcy5fdGFiQW5pbWF0ZWRDbG9zZWRTaW5jZU1vdXNlRW50ZXIgPSBmYWxzZTsK
KworICAgICAgICAgICAgaWYgKCFiZWZvcmVUYWJTaXplc0FuZFBvc2l0aW9ucykKKyAgICAgICAg
ICAgICAgICBiZWZvcmVUYWJTaXplc0FuZFBvc2l0aW9ucyA9IHRoaXMuX3JlY29yZFRhYkJhckl0
ZW1TaXplc0FuZFBvc2l0aW9ucygpOworCisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NM
aXN0LnJlbW92ZSgic3RhdGljLWxheW91dCIpOworICAgICAgICAgICAgdGhpcy5fY2xlYXJUYWJC
YXJJdGVtU2l6ZXNBbmRQb3NpdGlvbnMoKTsKKworICAgICAgICAgICAgdmFyIGFmdGVyVGFiU2l6
ZXNBbmRQb3NpdGlvbnMgPSB0aGlzLl9yZWNvcmRUYWJCYXJJdGVtU2l6ZXNBbmRQb3NpdGlvbnMo
KTsKKworICAgICAgICAgICAgdGhpcy5fYXBwbHlUYWJCYXJJdGVtU2l6ZXNBbmRQb3NpdGlvbnMo
YmVmb3JlVGFiU2l6ZXNBbmRQb3NpdGlvbnMpOworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNs
YXNzTGlzdC5hZGQoInN0YXRpYy1sYXlvdXQiKTsKKworICAgICAgICAgICAgZnVuY3Rpb24gYW5p
bWF0ZVRhYnMoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5j
bGFzc0xpc3QuYWRkKCJzdGF0aWMtbGF5b3V0Iik7CisgICAgICAgICAgICAgICAgdGhpcy5lbGVt
ZW50LmNsYXNzTGlzdC5hZGQoImFuaW1hdGluZyIpOworICAgICAgICAgICAgICAgIHRoaXMuZWxl
bWVudC5jbGFzc0xpc3QuYWRkKCJleHBhbmRpbmctdGFicyIpOworCisgICAgICAgICAgICAgICAg
dGhpcy5fYXBwbHlUYWJCYXJJdGVtU2l6ZXNBbmRQb3NpdGlvbnMoYWZ0ZXJUYWJTaXplc0FuZFBv
c2l0aW9ucyk7CisKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigid2Via2l0VHJhbnNpdGlvbkVuZCIsIHJlbW92ZVN0eWxlc0xpc3RlbmVyKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlU3R5bGVzKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgic3RhdGlj
LWxheW91dCIpOworICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3Zl
KCJhbmltYXRpbmciKTsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJl
bW92ZSgiZXhwYW5kaW5nLXRhYnMiKTsKKworICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyVGFi
QmFySXRlbVNpemVzQW5kUG9zaXRpb25zKCk7CisKKyAgICAgICAgICAgICAgICB0aGlzLnVwZGF0
ZUxheW91dCgpOworCisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlz
dGVuZXIoIndlYmtpdFRyYW5zaXRpb25FbmQiLCByZW1vdmVTdHlsZXNMaXN0ZW5lcik7CisKKyAg
ICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZh
ciByZW1vdmVTdHlsZXNMaXN0ZW5lciA9IHJlbW92ZVN0eWxlcy5iaW5kKHRoaXMpOworCisgICAg
ICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZVRhYnMuYmluZCh0aGlzKSk7Cisg
ICAgICAgIH0uYmluZCh0aGlzKSk7CisgICAgfQorCisgICAgX2hhbmRsZU1vdXNlRG93bihldmVu
dCkKKyAgICB7CisgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgbGVmdCBtb3VzZSBjbGlja3MgZm9y
IHRhYiBtb3ZlbWVudC4KKyAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbiAhPT0gMCB8fCBldmVudC5j
dHJsS2V5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBpdGVtRWxlbWVudCA9
IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKFdJLlRhYkJhckl0ZW0u
U3R5bGVDbGFzc05hbWUpOworICAgICAgICBpZiAoIWl0ZW1FbGVtZW50KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGxldCB0YWJCYXJJdGVtID0gaXRlbUVsZW1lbnRbV0kuVGFiQmFy
SXRlbS5FbGVtZW50UmVmZXJlbmNlU3ltYm9sXTsKKyAgICAgICAgaWYgKCF0YWJCYXJJdGVtKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0YWJCYXJJdGVtLmRpc2FibGVkKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0YWJCYXJJdGVtID09PSB0aGlzLl9u
ZXdUYWJUYWJCYXJJdGVtKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0YWJC
YXJJdGVtID09PSB0aGlzLl90YWJQaWNrZXJUYWJCYXJJdGVtKSB7CisgICAgICAgICAgICBpZiAo
IXRoaXMuX2hpZGRlblRhYkJhckl0ZW1zLmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIGxldCBjb250ZXh0TWVudSA9IFdJLkNvbnRleHRNZW51LmNyZWF0ZUZy
b21FdmVudChldmVudCk7CisgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuX2hpZGRl
blRhYkJhckl0ZW1zKQorICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oaXRl
bS50aXRsZSwgKCkgPT4gdGhpcy5zZWxlY3RlZFRhYkJhckl0ZW0gPSBpdGVtKTsKKworICAgICAg
ICAgICAgY29udGV4dE1lbnUuc2hvdygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgbGV0IGNsb3NlQnV0dG9uRWxlbWVudCA9IGV2ZW50LnRhcmdldC5lbmNsb3Np
bmdOb2RlT3JTZWxmV2l0aENsYXNzKFdJLlRhYkJhckl0ZW0uQ2xvc2VCdXR0b25TdHlsZUNsYXNz
TmFtZSk7CisgICAgICAgIGlmIChjbG9zZUJ1dHRvbkVsZW1lbnQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkJhckl0ZW0gPSB0YWJCYXJJdGVtOworCisg
ICAgICAgIGlmICh0YWJCYXJJdGVtIGluc3RhbmNlb2YgV0kuUGlubmVkVGFiQmFySXRlbSB8fCAh
dGhpcy5faGFzTW9yZVRoYW5PbmVOb3JtYWxUYWIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB0aGlzLl9maXJzdE5vcm1hbFRhYkl0ZW1JbmRleCA9IDA7CisgICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgdGhpcy5fdGFiQmFySXRlbXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLl90YWJCYXJJdGVtc1tpXSBpbnN0YW5jZW9mIFdJLlBpbm5lZFRhYkJhckl0
ZW0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHRoaXMuX2ZpcnN0
Tm9ybWFsVGFiSXRlbUluZGV4ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgdGhpcy5fbW91c2VJc0Rvd24gPSB0cnVlOworCisgICAgICAgIHRoaXMuX21vdXNl
TW92ZWRFdmVudExpc3RlbmVyID0gdGhpcy5faGFuZGxlTW91c2VNb3ZlZC5iaW5kKHRoaXMpOwor
ICAgICAgICB0aGlzLl9tb3VzZVVwRXZlbnRMaXN0ZW5lciA9IHRoaXMuX2hhbmRsZU1vdXNlVXAu
YmluZCh0aGlzKTsKKworICAgICAgICAvLyBSZWdpc3RlciB0aGVzZSBsaXN0ZW5lcnMgb24gdGhl
IGRvY3VtZW50IHNvIHdlIGNhbiB0cmFjayB0aGUgbW91c2UgaWYgaXQgbGVhdmVzIHRoZSB0YWIg
YmFyLgorICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlz
Ll9tb3VzZU1vdmVkRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7CisgICAgICAgIGRvY3VtZW50LmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLl9tb3VzZVVwRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7
CisKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgZXZlbnQuc3RvcFBy
b3BhZ2F0aW9uKCk7CisgICAgfQorCisgICAgX2hhbmRsZUNsaWNrKGV2ZW50KQorICAgIHsKKyAg
ICAgICAgdmFyIGl0ZW1FbGVtZW50ID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZX
aXRoQ2xhc3MoV0kuVGFiQmFySXRlbS5TdHlsZUNsYXNzTmFtZSk7CisgICAgICAgIGlmICghaXRl
bUVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHRhYkJhckl0ZW0g
PSBpdGVtRWxlbWVudFtXSS5UYWJCYXJJdGVtLkVsZW1lbnRSZWZlcmVuY2VTeW1ib2xdOworICAg
ICAgICBpZiAoIXRhYkJhckl0ZW0pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYg
KHRhYkJhckl0ZW0uZGlzYWJsZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29u
c3QgY2xpY2tlZE1pZGRsZUJ1dHRvbiA9IGV2ZW50LmJ1dHRvbiA9PT0gMTsKKworICAgICAgICB2
YXIgY2xvc2VCdXR0b25FbGVtZW50ID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZX
aXRoQ2xhc3MoV0kuVGFiQmFySXRlbS5DbG9zZUJ1dHRvblN0eWxlQ2xhc3NOYW1lKTsKKyAgICAg
ICAgaWYgKGNsb3NlQnV0dG9uRWxlbWVudCB8fCBjbGlja2VkTWlkZGxlQnV0dG9uKSB7CisgICAg
ICAgICAgICAvLyBEaXNhbGxvdyBjbG9zaW5nIHRoZSBkZWZhdWx0IHRhYiBpZiBpdCBpcyB0aGUg
b25seSB0YWIuCisgICAgICAgICAgICBpZiAodGFiQmFySXRlbS5pc0RlZmF1bHRUYWIgJiYgdGhp
cy5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygic2luZ2xlLXRhYiIpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKCFldmVudC5hbHRLZXkpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLnJlbW92ZVRhYkJhckl0ZW0odGFiQmFySXRlbSwge3N1cHByZXNzRXhwYW5z
aW9uOiB0cnVlfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fdGFiQmFySXRlbXMubGVuZ3RoIC0gMTsgaSA+
PSAwOyAtLWkpIHsKKyAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX3RhYkJhckl0ZW1z
W2ldOworICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSB0YWJCYXJJdGVtIHx8IGl0ZW0gaW5z
dGFuY2VvZiBXSS5QaW5uZWRUYWJCYXJJdGVtKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRhYkJhckl0ZW0oaXRlbSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfaGFuZGxlTW91c2VNb3ZlZChldmVudCkK
KyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGV2ZW50LmJ1dHRvbiA9PT0gMCk7CisgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX21vdXNlSXNEb3duKTsKKyAgICAgICAgaWYgKCF0aGlz
Ll9tb3VzZUlzRG93bikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zb2xlLmFz
c2VydCh0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0pOworICAgICAgICBpZiAoIXRoaXMuX3NlbGVj
dGVkVGFiQmFySXRlbSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKworICAgICAg
ICBpZiAoIXRoaXMuZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoInN0YXRpYy1sYXlvdXQiKSkg
eworICAgICAgICAgICAgdGhpcy5fYXBwbHlUYWJCYXJJdGVtU2l6ZXNBbmRQb3NpdGlvbnModGhp
cy5fcmVjb3JkVGFiQmFySXRlbVNpemVzQW5kUG9zaXRpb25zKCkpOworICAgICAgICAgICAgdGhp
cy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoInN0YXRpYy1sYXlvdXQiKTsKKyAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZy10YWIiKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh0aGlzLl9tb3VzZU9mZnNldCA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAg
dGhpcy5fbW91c2VPZmZzZXQgPSBldmVudC5wYWdlWCAtIHRoaXMuX3NlbGVjdGVkVGFiQmFySXRl
bS5lbGVtZW50LnRvdGFsT2Zmc2V0TGVmdDsKKworICAgICAgICB2YXIgdGFiQmFyTW91c2VPZmZz
ZXQgPSBldmVudC5wYWdlWCAtIHRoaXMuZWxlbWVudC50b3RhbE9mZnNldExlZnQ7CisgICAgICAg
IHZhciBuZXdMZWZ0ID0gdGFiQmFyTW91c2VPZmZzZXQgLSB0aGlzLl9tb3VzZU9mZnNldDsKKwor
ICAgICAgICB0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0uZWxlbWVudC5zdHlsZS5sZWZ0ID0gbmV3
TGVmdCArICJweCI7CisKKyAgICAgICAgdmFyIHNlbGVjdGVkVGFiTWlkWCA9IG5ld0xlZnQgKyAo
dGhpcy5fc2VsZWN0ZWRUYWJCYXJJdGVtLmVsZW1lbnQucmVhbE9mZnNldFdpZHRoIC8gMik7CisK
KyAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuX3RhYkJhckl0ZW1zLmluZGV4T2YodGhp
cy5fc2VsZWN0ZWRUYWJCYXJJdGVtKTsKKyAgICAgICAgdmFyIG5ld0luZGV4ID0gY3VycmVudElu
ZGV4OworCisgICAgICAgIGZvciAobGV0IHRhYkJhckl0ZW0gb2YgdGhpcy5fdGFiQmFySXRlbXMp
IHsKKyAgICAgICAgICAgIGlmICh0YWJCYXJJdGVtID09PSB0aGlzLl9zZWxlY3RlZFRhYkJhckl0
ZW0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHZhciB0YWJCYXJJ
dGVtUmVjdCA9IHRhYkJhckl0ZW0uZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKwor
ICAgICAgICAgICAgaWYgKHNlbGVjdGVkVGFiTWlkWCA8IHRhYkJhckl0ZW1SZWN0LmxlZnQgfHwg
c2VsZWN0ZWRUYWJNaWRYID4gdGFiQmFySXRlbVJlY3QucmlnaHQpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIG5ld0luZGV4ID0gdGhpcy5fdGFiQmFySXRlbXMuaW5k
ZXhPZih0YWJCYXJJdGVtKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gU3VidHJhY3QgMSBmcm9tIG5vcm1hbFRhYkNvdW50IHNpbmNlIGFycmF5cyBiZWdpbiBp
bmRleGluZyBhdCAwLgorICAgICAgICBuZXdJbmRleCA9IE51bWJlci5jb25zdHJhaW4obmV3SW5k
ZXgsIHRoaXMuX2ZpcnN0Tm9ybWFsVGFiSXRlbUluZGV4LCB0aGlzLm5vcm1hbFRhYkNvdW50IC0g
MSk7CisKKyAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gbmV3SW5kZXgpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fdGFiQmFySXRlbXMuc3BsaWNlKGN1cnJlbnRJbmRl
eCwgMSk7CisgICAgICAgIHRoaXMuX3RhYkJhckl0ZW1zLnNwbGljZShuZXdJbmRleCwgMCwgdGhp
cy5fc2VsZWN0ZWRUYWJCYXJJdGVtKTsKKworICAgICAgICBsZXQgbmV4dFNpYmxpbmcgPSB0aGlz
Ll90YWJCYXJJdGVtc1tuZXdJbmRleCArIDFdOworICAgICAgICBsZXQgbmV4dFNpYmxpbmdFbGVt
ZW50ID0gbmV4dFNpYmxpbmcgPyBuZXh0U2libGluZy5lbGVtZW50IDogdGhpcy5fbmV3VGFiVGFi
QmFySXRlbS5lbGVtZW50OworCisgICAgICAgIHRoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUodGhp
cy5fc2VsZWN0ZWRUYWJCYXJJdGVtLmVsZW1lbnQsIG5leHRTaWJsaW5nRWxlbWVudCk7CisKKyAg
ICAgICAgLy8gRklYTUU6IEFuaW1hdGUgdGhlIHRhYnMgdGhhdCBtb3ZlIHRvIG1ha2Ugcm9vbSBm
b3IgdGhlIHNlbGVjdGVkIHRhYi4gVGhpcyB3YXMgY2F1c2luZyBtZSB0cm91YmxlIHdoZW4gSSB0
cmllZC4KKworICAgICAgICBsZXQgbGVmdCA9IDA7CisgICAgICAgIGZvciAobGV0IHRhYkJhckl0
ZW0gb2YgdGhpcy5fdGFiQmFySXRlbXNGcm9tTGVmdFRvUmlnaHQoKSkgeworICAgICAgICAgICAg
aWYgKHRhYkJhckl0ZW0gIT09IHRoaXMuX3NlbGVjdGVkVGFiQmFySXRlbSAmJiB0YWJCYXJJdGVt
ICE9PSB0aGlzLl9uZXdUYWJUYWJCYXJJdGVtICYmIHBhcnNlRmxvYXQodGFiQmFySXRlbS5lbGVt
ZW50LnN0eWxlLmxlZnQpICE9PSBsZWZ0KQorICAgICAgICAgICAgICAgIHRhYkJhckl0ZW0uZWxl
bWVudC5zdHlsZS5sZWZ0ID0gbGVmdCArICJweCI7CisgICAgICAgICAgICBsZWZ0ICs9IHBhcnNl
RmxvYXQodGFiQmFySXRlbS5lbGVtZW50LnN0eWxlLndpZHRoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIF9oYW5kbGVNb3VzZVVwKGV2ZW50KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3Nl
cnQoZXZlbnQuYnV0dG9uID09PSAwKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fbW91
c2VJc0Rvd24pOworICAgICAgICBpZiAoIXRoaXMuX21vdXNlSXNEb3duKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2lu
Zy10YWIiKTsKKworICAgICAgICBpZiAoIXRoaXMuX3RhYkFuaW1hdGVkQ2xvc2VkU2luY2VNb3Vz
ZUVudGVyKSB7CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgic3Rh
dGljLWxheW91dCIpOworICAgICAgICAgICAgdGhpcy5fY2xlYXJUYWJCYXJJdGVtU2l6ZXNBbmRQ
b3NpdGlvbnMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxldCBsZWZ0ID0gMDsK
KyAgICAgICAgICAgIGZvciAobGV0IHRhYkJhckl0ZW0gb2YgdGhpcy5fdGFiQmFySXRlbXNGcm9t
TGVmdFRvUmlnaHQoKSkgeworICAgICAgICAgICAgICAgIGlmICh0YWJCYXJJdGVtID09PSB0aGlz
Ll9zZWxlY3RlZFRhYkJhckl0ZW0pCisgICAgICAgICAgICAgICAgICAgIHRhYkJhckl0ZW0uZWxl
bWVudC5zdHlsZS5sZWZ0ID0gbGVmdCArICJweCI7CisgICAgICAgICAgICAgICAgbGVmdCArPSBw
YXJzZUZsb2F0KHRhYkJhckl0ZW0uZWxlbWVudC5zdHlsZS53aWR0aCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9tb3VzZUlzRG93biA9IGZhbHNlOworICAgICAg
ICB0aGlzLl9tb3VzZU9mZnNldCA9IHVuZGVmaW5lZDsKKworICAgICAgICBkb2N1bWVudC5yZW1v
dmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLl9tb3VzZU1vdmVkRXZlbnRMaXN0ZW5l
ciwgdHJ1ZSk7CisgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAi
LCB0aGlzLl9tb3VzZVVwRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7CisKKyAgICAgICAgdGhpcy5fbW91
c2VNb3ZlZEV2ZW50TGlzdGVuZXIgPSBudWxsOworICAgICAgICB0aGlzLl9tb3VzZVVwRXZlbnRM
aXN0ZW5lciA9IG51bGw7CisKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAg
ICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoV0kuVGFiQmFyLkV2ZW50LlRhYkJhckl0ZW1zUmVvcmRlcmVkKTsKKyAgICB9
CisKKyAgICBfaGFuZGxlTW91c2VMZWF2ZShldmVudCkKKyAgICB7CisgICAgICAgIGlmICh0aGlz
Ll9tb3VzZUlzRG93biB8fCAhdGhpcy5fdGFiQW5pbWF0ZWRDbG9zZWRTaW5jZU1vdXNlRW50ZXIg
fHwgIXRoaXMuZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoInN0YXRpYy1sYXlvdXQiKSB8fCB0
aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhbmltYXRpbmciKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAvLyBUaGlzIGV2ZW50IGNhbiBzdGlsbCBmaXJlIHdoZW4gdGhl
IG1vdXNlIGlzIGluc2lkZSB0aGUgZWxlbWVudCBpZiBET00gbm9kZXMgYXJlIGFkZGVkLCByZW1v
dmVkIG9yIGdlbmVyYWxseSBjaGFuZ2UgaW5zaWRlLgorICAgICAgICAvLyBDaGVjayBpZiB0aGUg
bW91c2UgcmVhbGx5IGRpZCBsZWF2ZSB0aGUgZWxlbWVudCBieSBjaGVja2luZyB0aGUgYm91bmRz
LgorICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBhIFdlYktpdCBidWcgb3IgY29ycmVjdCBiZWhh
dmlvcj8KKyAgICAgICAgY29uc3QgYmFyUmVjdCA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKTsKKyAgICAgICAgY29uc3QgbmV3VGFiSXRlbVJlY3QgPSB0aGlzLl9uZXdUYWJU
YWJCYXJJdGVtLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgIGlmIChl
dmVudC5wYWdlWSA+IGJhclJlY3QudG9wICYmIGV2ZW50LnBhZ2VZIDwgYmFyUmVjdC5ib3R0b20g
JiYgZXZlbnQucGFnZVggPiBiYXJSZWN0LmxlZnQgJiYgZXZlbnQucGFnZVggPCAobmV3VGFiSXRl
bVJlY3QgPyBuZXdUYWJJdGVtUmVjdC5yaWdodCA6IGJhclJlY3QucmlnaHQpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2ZpbmlzaEV4cGFuZGluZ1RhYnNBZnRlckNsb3Nl
KCk7CisgICAgfQorCisgICAgX2hhbmRsZUNvbnRleHRNZW51KGV2ZW50KQorICAgIHsKKyAgICAg
ICAgbGV0IGNvbnRleHRNZW51ID0gV0kuQ29udGV4dE1lbnUuY3JlYXRlRnJvbUV2ZW50KGV2ZW50
KTsKKworICAgICAgICBmb3IgKGxldCB0YWJDbGFzcyBvZiBXSS5rbm93blRhYkNsYXNzZXMoKSkg
eworICAgICAgICAgICAgaWYgKHRhYkNsYXNzLnRhYkluZm8oKS5pc0VwaGVtZXJhbCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbGV0IG9wZW5UYWJCYXJJdGVtID0g
bnVsbDsKKyAgICAgICAgICAgIGZvciAobGV0IHRhYkJhckl0ZW0gb2YgdGhpcy5fdGFiQmFySXRl
bXMpIHsKKyAgICAgICAgICAgICAgICBsZXQgdGFiQ29udGVudFZpZXcgPSB0YWJCYXJJdGVtLnJl
cHJlc2VudGVkT2JqZWN0OworICAgICAgICAgICAgICAgIGlmICghKHRhYkNvbnRlbnRWaWV3IGlu
c3RhbmNlb2YgV0kuVGFiQ29udGVudFZpZXcpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgICAgIGlmICh0YWJDb250ZW50Vmlldy50eXBlID09PSB0YWJDbGFz
cy5UeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIG9wZW5UYWJCYXJJdGVtID0gdGFiQmFySXRl
bTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRDaGVja2JveEl0ZW0odGFi
Q2xhc3MudGFiSW5mbygpLnRpdGxlLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKG9wZW5U
YWJCYXJJdGVtKQorICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRhYkJhckl0ZW0ob3Bl
blRhYkJhckl0ZW0pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
V0kuY3JlYXRlTmV3VGFiV2l0aFR5cGUodGFiQ2xhc3MuVHlwZSwge3Nob3VsZFNob3dOZXdUYWI6
IHRydWV9KTsKKyAgICAgICAgICAgIH0sICEhb3BlblRhYkJhckl0ZW0pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgX2hhbmRsZU5ld1RhYkNsaWNrKGV2ZW50KQorICAgIHsKKyAgICAgICAgV0ku
c2hvd05ld1RhYlRhYigpOworICAgIH0KKworICAgIF9oYW5kbGVUYWJQaWNrZXJUYWJDb250ZXh0
TWVudShldmVudCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5faGlkZGVuVGFiQmFySXRlbXMu
bGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBjb250ZXh0TWVudSA9
IFdJLkNvbnRleHRNZW51LmNyZWF0ZUZyb21FdmVudChldmVudCk7CisgICAgICAgIGZvciAobGV0
IGl0ZW0gb2YgdGhpcy5faGlkZGVuVGFiQmFySXRlbXMpIHsKKyAgICAgICAgICAgIGNvbnRleHRN
ZW51LmFwcGVuZEl0ZW0oaXRlbS50aXRsZSwgKCkgPT4geworICAgICAgICAgICAgICAgIHRoaXMu
c2VsZWN0ZWRUYWJCYXJJdGVtID0gaXRlbTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgX2hhbmRsZU5ld1RhYk1vdXNlRW50ZXIoZXZlbnQpCisgICAgeworICAgICAg
ICBpZiAoIXRoaXMuX3RhYkFuaW1hdGVkQ2xvc2VkU2luY2VNb3VzZUVudGVyIHx8ICF0aGlzLmVs
ZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJzdGF0aWMtbGF5b3V0IikgfHwgdGhpcy5lbGVtZW50
LmNsYXNzTGlzdC5jb250YWlucygiYW5pbWF0aW5nIikpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdGhpcy5fZmluaXNoRXhwYW5kaW5nVGFic0FmdGVyQ2xvc2UoKTsKKyAgICB9Cit9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
TmV0d29ya1RhYkNvbnRlbnRWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvTmV0d29ya1RhYkNvbnRlbnRWaWV3LmpzCmluZGV4IDc1ZjUzOTlkZmJkMjg4
MjZjZmFhZDU5MzczYTM4NmU4ZDM3MDdkOGIuLmU5YjhjNGVlYjc2NWM3ZGViZDBmM2UxNjVhMzI1
N2Q2NTFmMDI2NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL05ldHdvcmtUYWJDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9OZXR3b3JrVGFiQ29udGVudFZpZXcuanMKQEAgLTI3
LDcgKzI3LDcgQEAgV0kuTmV0d29ya1RhYkNvbnRlbnRWaWV3ID0gY2xhc3MgTmV0d29ya1RhYkNv
bnRlbnRWaWV3IGV4dGVuZHMgV0kuVGFiQ29udGVudFZpZXcKIHsKICAgICBjb25zdHJ1Y3Rvcihp
ZGVudGlmaWVyKQogICAgIHsKLSAgICAgICAgbGV0IHRhYkJhckl0ZW0gPSBXSS5HZW5lcmFsVGFi
QmFySXRlbS5mcm9tVGFiQ29udGVudFZpZXdDb25zdHJ1Y3RvcihXSS5OZXR3b3JrVGFiQ29udGVu
dFZpZXcpOworICAgICAgICBsZXQgdGFiQmFySXRlbSA9IFdJLkdlbmVyYWxUYWJCYXJJdGVtLmZy
b21UYWJJbmZvKFdJLk5ldHdvcmtUYWJDb250ZW50Vmlldy50YWJJbmZvKCkpOwogCiAgICAgICAg
IHN1cGVyKGlkZW50aWZpZXIgfHwgIm5ldHdvcmsiLCAibmV0d29yayIsIHRhYkJhckl0ZW0pOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9O
ZXdUYWJDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL05ld1RhYkNvbnRlbnRWaWV3LmpzCmluZGV4IGVmZmJlNTZmYzY1NDQzYmJjYThhOTFm
MzBlZmEzZDRlZjRhY2Y3NmEuLjU2MjY2NDk2Njg1YTA5ZGFiNThjNmIwNmRmNjZlNDUxY2FiOTEx
ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L05ld1RhYkNvbnRlbnRWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL05ld1RhYkNvbnRlbnRWaWV3LmpzCkBAIC0yNyw3ICsyNyw3IEBAIFdJLk5l
d1RhYkNvbnRlbnRWaWV3ID0gY2xhc3MgTmV3VGFiQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5UYWJD
b250ZW50VmlldwogewogICAgIGNvbnN0cnVjdG9yKGlkZW50aWZpZXIpCiAgICAgewotICAgICAg
ICBsZXQgdGFiQmFySXRlbSA9IFdJLkdlbmVyYWxUYWJCYXJJdGVtLmZyb21UYWJDb250ZW50Vmll
d0NvbnN0cnVjdG9yKFdJLk5ld1RhYkNvbnRlbnRWaWV3KTsKKyAgICAgICAgbGV0IHRhYkJhckl0
ZW0gPSBXSS5HZW5lcmFsVGFiQmFySXRlbS5mcm9tVGFiSW5mbyhXSS5OZXdUYWJDb250ZW50Vmll
dy50YWJJbmZvKCkpOwogICAgICAgICB0YWJCYXJJdGVtLmlzRGVmYXVsdFRhYiA9IHRydWU7CiAK
ICAgICAgICAgc3VwZXIoaWRlbnRpZmllciB8fCAibmV3LXRhYiIsICJuZXctdGFiIiwgdGFiQmFy
SXRlbSk7CkBAIC0zNSw3ICszNSw3IEBAIFdJLk5ld1RhYkNvbnRlbnRWaWV3ID0gY2xhc3MgTmV3
VGFiQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5UYWJDb250ZW50VmlldwogICAgICAgICB0aGlzLl90
YWJFbGVtZW50c0J5VGFiQ2xhc3MgPSBuZXcgTWFwOwogCiAgICAgICAgIGxldCBhbGxUYWJDbGFz
c2VzID0gQXJyYXkuZnJvbShXSS5rbm93blRhYkNsYXNzZXMoKSk7Ci0gICAgICAgIHRoaXMuX3No
b3duVGFiQ2xhc3NlcyA9IGFsbFRhYkNsYXNzZXMuZmlsdGVyKCh0YWJDbGFzcykgPT4gdGFiQ2xh
c3MuaXNUYWJBbGxvd2VkKCkgJiYgIXRhYkNsYXNzLmlzRXBoZW1lcmFsKCkpOworICAgICAgICB0
aGlzLl9zaG93blRhYkNsYXNzZXMgPSBhbGxUYWJDbGFzc2VzLmZpbHRlcigodGFiQ2xhc3MpID0+
IHRhYkNsYXNzLmlzVGFiQWxsb3dlZCgpICYmICF0YWJDbGFzcy50YWJJbmZvKCkuaXNFcGhlbWVy
YWwpOwogICAgICAgICB0aGlzLl9zaG93blRhYkNsYXNzZXMuc29ydCgoYSwgYikgPT4gYS50YWJJ
bmZvKCkudGl0bGUuZXh0ZW5kZWRMb2NhbGVDb21wYXJlKGIudGFiSW5mbygpLnRpdGxlKSk7CiAg
ICAgfQogCkBAIC00NCwxNCArNDQsMTAgQEAgV0kuTmV3VGFiQ29udGVudFZpZXcgPSBjbGFzcyBO
ZXdUYWJDb250ZW50VmlldyBleHRlbmRzIFdJLlRhYkNvbnRlbnRWaWV3CiAgICAgICAgIHJldHVy
biB7CiAgICAgICAgICAgICBpbWFnZTogIkltYWdlcy9OZXdUYWIuc3ZnIiwKICAgICAgICAgICAg
IHRpdGxlOiBXSS5VSVN0cmluZygiTmV3IFRhYiIpLAorICAgICAgICAgICAgaXNFcGhlbWVyYWw6
IHRydWUsCiAgICAgICAgIH07CiAgICAgfQogCi0gICAgc3RhdGljIGlzRXBoZW1lcmFsKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQogICAgIHN0YXRpYyBzaG91bGRTYXZl
VGFiKCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291cmNlc1RhYkNvbnRlbnRWaWV3
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvUmVzb3VyY2Vz
VGFiQ29udGVudFZpZXcuanMKaW5kZXggYjA4MjJkYTkxZTQ1YzNmNzg2OWQ2NGUzM2QyNzMyMzM5
ZmIyMzBmZi4uNDg1OGZmZDEwMzIyZTllMTU4YmQ1ZWMwMmVjYjg5MDY2Y2YwNmJlOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvUmVzb3VyY2Vz
VGFiQ29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvUmVzb3VyY2VzVGFiQ29udGVudFZpZXcuanMKQEAgLTI3LDcgKzI3LDcgQEAgV0ku
UmVzb3VyY2VzVGFiQ29udGVudFZpZXcgPSBjbGFzcyBSZXNvdXJjZXNUYWJDb250ZW50VmlldyBl
eHRlbmRzIFdJLkNvbnRlbnRCcm8KIHsKICAgICBjb25zdHJ1Y3RvcihpZGVudGlmaWVyKQogICAg
IHsKLSAgICAgICAgbGV0IHRhYkJhckl0ZW0gPSBXSS5HZW5lcmFsVGFiQmFySXRlbS5mcm9tVGFi
Q29udGVudFZpZXdDb25zdHJ1Y3RvcihXSS5SZXNvdXJjZXNUYWJDb250ZW50Vmlldyk7CisgICAg
ICAgIGxldCB0YWJCYXJJdGVtID0gV0kuR2VuZXJhbFRhYkJhckl0ZW0uZnJvbVRhYkluZm8oV0ku
UmVzb3VyY2VzVGFiQ29udGVudFZpZXcudGFiSW5mbygpKTsKICAgICAgICAgY29uc3QgZGV0YWls
c1NpZGViYXJQYW5lbENvbnN0cnVjdG9ycyA9IFtXSS5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFu
ZWwsIFdJLlByb2JlRGV0YWlsc1NpZGViYXJQYW5lbF07CiAgICAgICAgIHN1cGVyKGlkZW50aWZp
ZXIgfHwgInJlc291cmNlcyIsICJyZXNvdXJjZXMiLCB0YWJCYXJJdGVtLCBXSS5SZXNvdXJjZVNp
ZGViYXJQYW5lbCwgZGV0YWlsc1NpZGViYXJQYW5lbENvbnN0cnVjdG9ycyk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2VhcmNo
VGFiQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9TZWFyY2hUYWJDb250ZW50Vmlldy5qcwppbmRleCBkMGVjYTZkNDZkMTFiOGJkNDAyMzAz
N2UxMTAyODM4ZTYyMmE4OWVlLi4zMjU2NjJiZTc0Y2Y2NmI2ZDRkZWQzOTkyY2YzNTNlYWQ2ZTY5
NjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9TZWFyY2hUYWJDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9TZWFyY2hUYWJDb250ZW50Vmlldy5qcwpAQCAtMjcsNyArMjcsNyBA
QCBXSS5TZWFyY2hUYWJDb250ZW50VmlldyA9IGNsYXNzIFNlYXJjaFRhYkNvbnRlbnRWaWV3IGV4
dGVuZHMgV0kuQ29udGVudEJyb3dzZXJUYQogewogICAgIGNvbnN0cnVjdG9yKGlkZW50aWZpZXIp
CiAgICAgewotICAgICAgICBsZXQgdGFiQmFySXRlbSA9IFdJLkdlbmVyYWxUYWJCYXJJdGVtLmZy
b21UYWJDb250ZW50Vmlld0NvbnN0cnVjdG9yKFdJLlNlYXJjaFRhYkNvbnRlbnRWaWV3KTsKKyAg
ICAgICAgbGV0IHRhYkJhckl0ZW0gPSBXSS5HZW5lcmFsVGFiQmFySXRlbS5mcm9tVGFiSW5mbyhX
SS5TZWFyY2hUYWJDb250ZW50Vmlldy50YWJJbmZvKCkpOwogICAgICAgICBsZXQgZGV0YWlsc1Np
ZGViYXJQYW5lbENvbnN0cnVjdG9ycyA9IFtXSS5SZXNvdXJjZURldGFpbHNTaWRlYmFyUGFuZWws
IFdJLlByb2JlRGV0YWlsc1NpZGViYXJQYW5lbCwKICAgICAgICAgICAgIFdJLkRPTU5vZGVEZXRh
aWxzU2lkZWJhclBhbmVsLCBXSS5Db21wdXRlZFN0eWxlRGV0YWlsc1NpZGViYXJQYW5lbCwgV0ku
UnVsZXNTdHlsZURldGFpbHNTaWRlYmFyUGFuZWxdOwogCkBAIC00NCwxNCArNDQsMTAgQEAgV0ku
U2VhcmNoVGFiQ29udGVudFZpZXcgPSBjbGFzcyBTZWFyY2hUYWJDb250ZW50VmlldyBleHRlbmRz
IFdJLkNvbnRlbnRCcm93c2VyVGEKICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgIGltYWdl
OiAiSW1hZ2VzL1NlYXJjaFJlc3VsdHMuc3ZnIiwKICAgICAgICAgICAgIHRpdGxlOiBXSS5VSVN0
cmluZygiU2VhcmNoIiksCisgICAgICAgICAgICBpc0VwaGVtZXJhbDogdHJ1ZSwKICAgICAgICAg
fTsKICAgICB9CiAKLSAgICBzdGF0aWMgaXNFcGhlbWVyYWwoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCiAgICAgLy8gUHVibGljCiAKICAgICBnZXQgdHlwZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5n
c1RhYkNvbnRlbnRWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qcwppbmRleCBlZGI0NjdhM2E2MDkwZjlkOGI4
NjE4MmFkZTkyZjMxZGU4ZGZiZGRkLi4yMjFjZDE1OWQ2YzlmNGE4OWM4MmNmOWUwNTRiNmIzZDJm
NWY2NTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcuanMKQEAgLTQ0LDE0
ICs0NCwxMCBAQCBXSS5TZXR0aW5nc1RhYkNvbnRlbnRWaWV3ID0gY2xhc3MgU2V0dGluZ3NUYWJD
b250ZW50VmlldyBleHRlbmRzIFdJLlRhYkNvbnRlbnRWaQogICAgICAgICByZXR1cm4gewogICAg
ICAgICAgICAgaW1hZ2U6ICJJbWFnZXMvR2Vhci5zdmciLAogICAgICAgICAgICAgdGl0bGU6IFdJ
LlVJU3RyaW5nKCJTZXR0aW5ncyIpLAorICAgICAgICAgICAgaXNFcGhlbWVyYWw6IHRydWUsCiAg
ICAgICAgIH07CiAgICAgfQogCi0gICAgc3RhdGljIGlzRXBoZW1lcmFsKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQogICAgIHN0YXRpYyBzaG91bGRTYXZlVGFiKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI1NCw2ICsyNTAsOSBAQCBXSS5TZXR0aW5n
c1RhYkNvbnRlbnRWaWV3ID0gY2xhc3MgU2V0dGluZ3NUYWJDb250ZW50VmlldyBleHRlbmRzIFdJ
LlRhYkNvbnRlbnRWaQogICAgICAgICAgICAgZXhwZXJpbWVudGFsU2V0dGluZ3NWaWV3LmFkZFNl
cGFyYXRvcigpOwogICAgICAgICB9CiAKKyAgICAgICAgZXhwZXJpbWVudGFsU2V0dGluZ3NWaWV3
LmFkZFNldHRpbmcoV0kuVUlTdHJpbmcoIlVzZXIgSW50ZXJmYWNlOiIpLCBXSS5zZXR0aW5ncy5l
eHBlcmltZW50YWxFbmFibGVOZXdUYWJCYXIsIFdJLlVJU3RyaW5nKCJFbmFibGUgTmV3IFRhYiBC
YXIiKSk7CisgICAgICAgIGV4cGVyaW1lbnRhbFNldHRpbmdzVmlldy5hZGRTZXBhcmF0b3IoKTsK
KwogICAgICAgICBsZXQgcmVsb2FkSW5zcGVjdG9yQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiYnV0dG9uIik7CiAgICAgICAgIHJlbG9hZEluc3BlY3RvckJ1dHRvbi50ZXh0Q29udGVu
dCA9IFdJLlVJU3RyaW5nKCJSZWxvYWQgV2ViIEluc3BlY3RvciIpOwogICAgICAgICByZWxvYWRJ
bnNwZWN0b3JCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7IHdpbmRvdy5s
b2NhdGlvbi5yZWxvYWQoKTsgfSk7CkBAIC0yNzEsNiArMjcwLDcgQEAgV0kuU2V0dGluZ3NUYWJD
b250ZW50VmlldyA9IGNsYXNzIFNldHRpbmdzVGFiQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5UYWJD
b250ZW50VmkKICAgICAgICAgbGlzdGVuRm9yQ2hhbmdlKFdJLnNldHRpbmdzLmV4cGVyaW1lbnRh
bExlZ2FjeVN0eWxlRWRpdG9yKTsKICAgICAgICAgbGlzdGVuRm9yQ2hhbmdlKFdJLnNldHRpbmdz
LmV4cGVyaW1lbnRhbExlZ2FjeVZpc3VhbFNpZGViYXIpOwogICAgICAgICBsaXN0ZW5Gb3JDaGFu
Z2UoV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlTGF5ZXJzVGFiKTsKKyAgICAgICAgbGlz
dGVuRm9yQ2hhbmdlKFdJLnNldHRpbmdzLmV4cGVyaW1lbnRhbEVuYWJsZU5ld1RhYkJhcik7CiAK
ICAgICAgICAgdGhpcy5hZGRTZXR0aW5nc1ZpZXcoZXhwZXJpbWVudGFsU2V0dGluZ3NWaWV3KTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9TdG9yYWdlVGFiQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9TdG9yYWdlVGFiQ29udGVudFZpZXcuanMKaW5kZXggMGYxMzY5Y2Uw
ZTgwY2VlOWQxMzI0MThiZWExNTRiYjNlZWEwNTRmMS4uMzdlMzczY2E5YzY0M2IxMjEwZDExYzY2
N2VjNThkMDFjYjc4MjhkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvU3RvcmFnZVRhYkNvbnRlbnRWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1N0b3JhZ2VUYWJDb250ZW50Vmlldy5qcwpA
QCAtMjcsNyArMjcsNyBAQCBXSS5TdG9yYWdlVGFiQ29udGVudFZpZXcgPSBjbGFzcyBTdG9yYWdl
VGFiQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5Db250ZW50QnJvd3NlcgogewogICAgIGNvbnN0cnVj
dG9yKGlkZW50aWZpZXIpCiAgICAgewotICAgICAgICBsZXQgdGFiQmFySXRlbSA9IFdJLkdlbmVy
YWxUYWJCYXJJdGVtLmZyb21UYWJDb250ZW50Vmlld0NvbnN0cnVjdG9yKFdJLlN0b3JhZ2VUYWJD
b250ZW50Vmlldyk7CisgICAgICAgIGxldCB0YWJCYXJJdGVtID0gV0kuR2VuZXJhbFRhYkJhckl0
ZW0uZnJvbVRhYkluZm8oV0kuU3RvcmFnZVRhYkNvbnRlbnRWaWV3LnRhYkluZm8oKSk7CiAgICAg
ICAgIGxldCBkZXRhaWxzU2lkZWJhclBhbmVsQ29uc3RydWN0b3JzID0gW1dJLkFwcGxpY2F0aW9u
Q2FjaGVEZXRhaWxzU2lkZWJhclBhbmVsLCBXSS5JbmRleGVkRGF0YWJhc2VEZXRhaWxzU2lkZWJh
clBhbmVsXTsKIAogICAgICAgICBzdXBlcihpZGVudGlmaWVyIHx8ICJzdG9yYWdlIiwgInN0b3Jh
Z2UiLCB0YWJCYXJJdGVtLCBXSS5TdG9yYWdlU2lkZWJhclBhbmVsLCBkZXRhaWxzU2lkZWJhclBh
bmVsQ29uc3RydWN0b3JzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1RhYkJhci5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UYWJCYXIuY3NzCmluZGV4IGFmZjBkNTE0NmUxZmMwM2I5NDBkYjk0Mjg5
OTBlZjY3NmMxMjVmNTkuLmIwNzlhMzEzNGZmOTQzNDE5YjY3ZjJmZTIzMWFlMzNjMGVjZTMwYTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Rh
YkJhci5jc3MKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
VGFiQmFyLmNzcwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1RhYkJhci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1RhYkJhci5qcwppbmRleCA2ZjhkYzNiYTExNGU3MDY2YjdhNjdkMWRhZWZkZTFhMmY1
Mzk4ODg4Li43NDA0MzFiMGUxNDdjNWI4OGIzODJmM2E1ZTAzZWFiNWViNTFmYmFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UYWJCYXIuanMK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGFiQmFyLmpz
CkBAIC00OCwxMSArNDgsNiBAQCBXSS5UYWJCYXIgPSBjbGFzcyBUYWJCYXIgZXh0ZW5kcyBXSS5W
aWV3CiAKICAgICAgICAgdGhpcy5hZGRUYWJCYXJJdGVtKFdJLnNldHRpbmdzVGFiQ29udGVudFZp
ZXcudGFiQmFySXRlbSwge3N1cHByZXNzQW5pbWF0aW9uczogdHJ1ZX0pOwogCi0gICAgICAgIHRo
aXMuX25ld1RhYlRhYkJhckl0ZW0gPSBuZXcgV0kuUGlubmVkVGFiQmFySXRlbSgiSW1hZ2VzL05l
d1RhYlBsdXMuc3ZnIiwgV0kuVUlTdHJpbmcoIkNyZWF0ZSBhIG5ldyB0YWIiKSk7Ci0gICAgICAg
IHRoaXMuX25ld1RhYlRhYkJhckl0ZW0uZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVu
dGVyIiwgdGhpcy5faGFuZGxlTmV3VGFiTW91c2VFbnRlci5iaW5kKHRoaXMpKTsKLSAgICAgICAg
dGhpcy5fbmV3VGFiVGFiQmFySXRlbS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg
dGhpcy5faGFuZGxlTmV3VGFiQ2xpY2suYmluZCh0aGlzKSk7Ci0gICAgICAgIHRoaXMuYWRkVGFi
QmFySXRlbSh0aGlzLl9uZXdUYWJUYWJCYXJJdGVtLCB7c3VwcHJlc3NBbmltYXRpb25zOiB0cnVl
fSk7Ci0KICAgICAgICAgdGhpcy5fdGFiUGlja2VyVGFiQmFySXRlbSA9IG5ldyBXSS5QaW5uZWRU
YWJCYXJJdGVtKCJJbWFnZXMvVGFiUGlja2VyLnN2ZyIsIFdJLlVJU3RyaW5nKCJTaG93IGhpZGRl
biB0YWJzIikpOwogICAgICAgICB0aGlzLl90YWJQaWNrZXJUYWJCYXJJdGVtLmVsZW1lbnQuY2xh
c3NMaXN0LmFkZCgidGFiLXBpY2tlciIpOwogICAgICAgICB0aGlzLl90YWJQaWNrZXJUYWJCYXJJ
dGVtLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9oYW5kbGVU
YWJQaWNrZXJUYWJDb250ZXh0TWVudS5iaW5kKHRoaXMpKTsKQEAgLTYxLDE0ICs1Niw2IEBAIFdJ
LlRhYkJhciA9IGNsYXNzIFRhYkJhciBleHRlbmRzIFdJLlZpZXcKIAogICAgIC8vIFB1YmxpYwog
Ci0gICAgZ2V0IG5ld1RhYlRhYkJhckl0ZW0oKSB7IHJldHVybiB0aGlzLl9uZXdUYWJUYWJCYXJJ
dGVtOyB9Ci0KLSAgICB1cGRhdGVOZXdUYWJUYWJCYXJJdGVtU3RhdGUoKQotICAgIHsKLSAgICAg
ICAgbGV0IG5ld1RhYkV4aXN0cyA9ICFXSS5pc05ld1RhYldpdGhUeXBlQWxsb3dlZChXSS5OZXdU
YWJDb250ZW50Vmlldy5UeXBlKTsKLSAgICAgICAgdGhpcy5fbmV3VGFiVGFiQmFySXRlbS5kaXNh
YmxlZCA9IG5ld1RhYkV4aXN0czsKLSAgICB9Ci0KICAgICBhZGRUYWJCYXJJdGVtKHRhYkJhckl0
ZW0sIG9wdGlvbnMgPSB7fSkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLmluc2VydFRhYkJh
ckl0ZW0odGFiQmFySXRlbSwgdGhpcy5fdGFiQmFySXRlbXMubGVuZ3RoLCBvcHRpb25zKTsKQEAg
LTE3MCw5ICsxNTcsNiBAQCBXSS5UYWJCYXIgPSBjbGFzcyBUYWJCYXIgZXh0ZW5kcyBXSS5WaWV3
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdGhpcy5uZWVkc0xheW91dCgpOwogCi0gICAg
ICAgIGlmICghKHRhYkJhckl0ZW0gaW5zdGFuY2VvZiBXSS5QaW5uZWRUYWJCYXJJdGVtKSkKLSAg
ICAgICAgICAgIHRoaXMudXBkYXRlTmV3VGFiVGFiQmFySXRlbVN0YXRlKCk7Ci0KICAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGFiQmFyLkV2ZW50LlRhYkJhckl0ZW1B
ZGRlZCwge3RhYkJhckl0ZW19KTsKIAogICAgICAgICByZXR1cm4gdGFiQmFySXRlbTsKQEAgLTE4
NCw2ICsxNjgsOSBAQCBXSS5UYWJCYXIgPSBjbGFzcyBUYWJCYXIgZXh0ZW5kcyBXSS5WaWV3CiAg
ICAgICAgIGlmICghdGFiQmFySXRlbSB8fCB0YWJCYXJJdGVtIGluc3RhbmNlb2YgV0kuUGlubmVk
VGFiQmFySXRlbSkKICAgICAgICAgICAgIHJldHVybiBudWxsOwogCisgICAgICAgIGlmICghdGFi
QmFySXRlbS5pc0VwaGVtZXJhbCAmJiB0aGlzLm5vcm1hbE5vbkVwaGVtZXJhbFRhYkNvdW50ID09
PSAxKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKICAgICAgICAgdGFiQmFySXRlbS5wYXJl
bnRUYWJCYXIgPSBudWxsOwogCiAgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0g
PT09IHRhYkJhckl0ZW0pIHsKQEAgLTIxMywxMCArMjAwLDYgQEAgV0kuVGFiQmFyID0gY2xhc3Mg
VGFiQmFyIGV4dGVuZHMgV0kuVmlldwogICAgICAgICB2YXIgaGFzTW9yZVRoYW5PbmVOb3JtYWxU
YWIgPSB0aGlzLl9oYXNNb3JlVGhhbk9uZU5vcm1hbFRhYigpOwogICAgICAgICB0aGlzLmVsZW1l
bnQuY2xhc3NMaXN0LnRvZ2dsZSgic2luZ2xlLXRhYiIsICFoYXNNb3JlVGhhbk9uZU5vcm1hbFRh
Yik7CiAKLSAgICAgICAgY29uc3Qgc2hvdWxkT3BlbkRlZmF1bHRUYWIgPSAhdGFiQmFySXRlbS5p
c0RlZmF1bHRUYWIgJiYgIXRoaXMubm9ybWFsVGFiQ291bnQ7Ci0gICAgICAgIGlmIChzaG91bGRP
cGVuRGVmYXVsdFRhYikKLSAgICAgICAgICAgIG9wdGlvbnMuc3VwcHJlc3NBbmltYXRpb25zID0g
dHJ1ZTsKLQogICAgICAgICBpZiAoIWhhc01vcmVUaGFuT25lTm9ybWFsVGFiIHx8IHdhc0xhc3RO
b3JtYWxUYWIgfHwgIW9wdGlvbnMuc3VwcHJlc3NFeHBhbnNpb24pIHsKICAgICAgICAgICAgIGlm
ICghb3B0aW9ucy5zdXBwcmVzc0FuaW1hdGlvbnMpIHsKICAgICAgICAgICAgICAgICB0aGlzLl90
YWJBbmltYXRlZENsb3NlZFNpbmNlTW91c2VFbnRlciA9IHRydWU7CkBAIC0yMjQsMTMgKzIwNyw3
IEBAIFdJLlRhYkJhciA9IGNsYXNzIFRhYkJhciBleHRlbmRzIFdJLlZpZXcKICAgICAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgICAgIHRoaXMubmVlZHNMYXlvdXQoKTsKIAotICAgICAgICAg
ICAgdGhpcy51cGRhdGVOZXdUYWJUYWJCYXJJdGVtU3RhdGUoKTsKLQogICAgICAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGFiQmFyLkV2ZW50LlRhYkJhckl0ZW1SZW1v
dmVkLCB7dGFiQmFySXRlbX0pOwotCi0gICAgICAgICAgICBpZiAoc2hvdWxkT3BlbkRlZmF1bHRU
YWIpCi0gICAgICAgICAgICAgICAgdGhpcy5fb3BlbkRlZmF1bHRUYWIoKTsKLQogICAgICAgICAg
ICAgcmV0dXJuIHRhYkJhckl0ZW07CiAgICAgICAgIH0KIApAQCAtMzAwLDEzICsyNzcsOCBAQCBX
SS5UYWJCYXIgPSBjbGFzcyBUYWJCYXIgZXh0ZW5kcyBXSS5WaWV3CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgdGhpcy5uZWVkc0xheW91dCgpOwogCi0gICAgICAgIHRoaXMudXBkYXRlTmV3
VGFiVGFiQmFySXRlbVN0YXRlKCk7Ci0KICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoV0kuVGFiQmFyLkV2ZW50LlRhYkJhckl0ZW1SZW1vdmVkLCB7dGFiQmFySXRlbX0pOwog
Ci0gICAgICAgIGlmIChzaG91bGRPcGVuRGVmYXVsdFRhYikKLSAgICAgICAgICAgIHRoaXMuX29w
ZW5EZWZhdWx0VGFiKCk7Ci0KICAgICAgICAgcmV0dXJuIHRhYkJhckl0ZW07CiAgICAgfQogCkBA
IC0zNjQsMTEgKzMzNiw2IEBAIFdJLlRhYkJhciA9IGNsYXNzIFRhYkJhciBleHRlbmRzIFdJLlZp
ZXcKICAgICBzZXQgc2VsZWN0ZWRUYWJCYXJJdGVtKHRhYkJhckl0ZW1PckluZGV4KQogICAgIHsK
ICAgICAgICAgbGV0IHRhYkJhckl0ZW0gPSB0aGlzLl9maW5kVGFiQmFySXRlbSh0YWJCYXJJdGVt
T3JJbmRleCk7Ci0gICAgICAgIGlmICh0YWJCYXJJdGVtID09PSB0aGlzLl9uZXdUYWJUYWJCYXJJ
dGVtKSB7Ci0gICAgICAgICAgICAvLyBHZXQgdGhlIGl0ZW0gYmVmb3JlIHRoZSBOZXctVGFiIGl0
ZW0gc2luY2UgaXQgaXMgbm90IHNlbGVjdGFibGUuCi0gICAgICAgICAgICB0YWJCYXJJdGVtID0g
dGhpcy5fdGFiQmFySXRlbXNbdGhpcy5ub3JtYWxUYWJDb3VudCAtIDFdOwotICAgICAgICB9Ci0K
ICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkVGFiQmFySXRlbSA9PT0gdGFiQmFySXRlbSkKICAg
ICAgICAgICAgIHJldHVybjsKIApAQCAtMzk2LDYgKzM2MywxMSBAQCBXSS5UYWJCYXIgPSBjbGFz
cyBUYWJCYXIgZXh0ZW5kcyBXSS5WaWV3CiAgICAgICAgIHJldHVybiB0aGlzLl90YWJCYXJJdGVt
cy5maWx0ZXIoKGl0ZW0pID0+ICEoaXRlbSBpbnN0YW5jZW9mIFdJLlBpbm5lZFRhYkJhckl0ZW0p
KS5sZW5ndGg7CiAgICAgfQogCisgICAgZ2V0IG5vcm1hbE5vbkVwaGVtZXJhbFRhYkNvdW50KCkK
KyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl90YWJCYXJJdGVtcy5maWx0ZXIoKGl0ZW0pID0+
ICFpdGVtLmlzRXBoZW1lcmFsICYmICEoaXRlbSBpbnN0YW5jZW9mIFdJLlBpbm5lZFRhYkJhckl0
ZW0pKS5sZW5ndGg7CisgICAgfQorCiAgICAgLy8gUHJvdGVjdGVkCiAKICAgICBsYXlvdXQoKQpA
QCAtNDkxLDExICs0NjMsNiBAQCBXSS5UYWJCYXIgPSBjbGFzcyBUYWJCYXIgZXh0ZW5kcyBXSS5W
aWV3CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBfb3BlbkRlZmF1bHRUYWIo
KQotICAgIHsKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGFiQmFy
LkV2ZW50Lk9wZW5EZWZhdWx0VGFiKTsKLSAgICB9Ci0KICAgICBfcmVjb3JkVGFiQmFySXRlbVNp
emVzQW5kUG9zaXRpb25zKCkKICAgICB7CiAgICAgICAgIHZhciB0YWJCYXJJdGVtU2l6ZXNBbmRQ
b3NpdGlvbnMgPSBuZXcgTWFwOwpAQCAtNTk2LDkgKzU2Myw2IEBAIFdJLlRhYkJhciA9IGNsYXNz
IFRhYkJhciBleHRlbmRzIFdJLlZpZXcKICAgICAgICAgaWYgKHRhYkJhckl0ZW0uZGlzYWJsZWQp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKHRhYkJhckl0ZW0gPT09IHRoaXMu
X25ld1RhYlRhYkJhckl0ZW0pCi0gICAgICAgICAgICByZXR1cm47Ci0KICAgICAgICAgaWYgKHRh
YkJhckl0ZW0gPT09IHRoaXMuX3RhYlBpY2tlclRhYkJhckl0ZW0pIHsKICAgICAgICAgICAgIGlm
ICghdGhpcy5faGlkZGVuVGFiQmFySXRlbXMubGVuZ3RoKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTY1OSw4ICs2MjMsOCBAQCBXSS5UYWJCYXIgPSBjbGFzcyBUYWJCYXIgZXh0ZW5kcyBX
SS5WaWV3CiAKICAgICAgICAgdmFyIGNsb3NlQnV0dG9uRWxlbWVudCA9IGV2ZW50LnRhcmdldC5l
bmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKFdJLlRhYkJhckl0ZW0uQ2xvc2VCdXR0b25TdHls
ZUNsYXNzTmFtZSk7CiAgICAgICAgIGlmIChjbG9zZUJ1dHRvbkVsZW1lbnQgfHwgY2xpY2tlZE1p
ZGRsZUJ1dHRvbikgewotICAgICAgICAgICAgLy8gRGlzYWxsb3cgY2xvc2luZyB0aGUgZGVmYXVs
dCB0YWIgaWYgaXQgaXMgdGhlIG9ubHkgdGFiLgotICAgICAgICAgICAgaWYgKHRhYkJhckl0ZW0u
aXNEZWZhdWx0VGFiICYmIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoInNpbmdsZS10
YWIiKSkKKyAgICAgICAgICAgIC8vIERpc2FsbG93IGNsb3NpbmcgdGhlIG9ubHkgdGFiLgorICAg
ICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoInNpbmdsZS10YWIi
KSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGlmICghZXZlbnQuYWx0
S2V5KSB7CkBAIC03MzMsNyArNjk3LDcgQEAgV0kuVGFiQmFyID0gY2xhc3MgVGFiQmFyIGV4dGVu
ZHMgV0kuVmlldwogICAgICAgICB0aGlzLl90YWJCYXJJdGVtcy5zcGxpY2UobmV3SW5kZXgsIDAs
IHRoaXMuX3NlbGVjdGVkVGFiQmFySXRlbSk7CiAKICAgICAgICAgbGV0IG5leHRTaWJsaW5nID0g
dGhpcy5fdGFiQmFySXRlbXNbbmV3SW5kZXggKyAxXTsKLSAgICAgICAgbGV0IG5leHRTaWJsaW5n
RWxlbWVudCA9IG5leHRTaWJsaW5nID8gbmV4dFNpYmxpbmcuZWxlbWVudCA6IHRoaXMuX25ld1Rh
YlRhYkJhckl0ZW0uZWxlbWVudDsKKyAgICAgICAgbGV0IG5leHRTaWJsaW5nRWxlbWVudCA9IG5l
eHRTaWJsaW5nID8gbmV4dFNpYmxpbmcuZWxlbWVudCA6IG51bGw7CiAKICAgICAgICAgdGhpcy5l
bGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLl9zZWxlY3RlZFRhYkJhckl0ZW0uZWxlbWVudCwgbmV4
dFNpYmxpbmdFbGVtZW50KTsKIApAQCAtNzQxLDcgKzcwNSw3IEBAIFdJLlRhYkJhciA9IGNsYXNz
IFRhYkJhciBleHRlbmRzIFdJLlZpZXcKIAogICAgICAgICBsZXQgbGVmdCA9IDA7CiAgICAgICAg
IGZvciAobGV0IHRhYkJhckl0ZW0gb2YgdGhpcy5fdGFiQmFySXRlbXNGcm9tTGVmdFRvUmlnaHQo
KSkgewotICAgICAgICAgICAgaWYgKHRhYkJhckl0ZW0gIT09IHRoaXMuX3NlbGVjdGVkVGFiQmFy
SXRlbSAmJiB0YWJCYXJJdGVtICE9PSB0aGlzLl9uZXdUYWJUYWJCYXJJdGVtICYmIHBhcnNlRmxv
YXQodGFiQmFySXRlbS5lbGVtZW50LnN0eWxlLmxlZnQpICE9PSBsZWZ0KQorICAgICAgICAgICAg
aWYgKHRhYkJhckl0ZW0gIT09IHRoaXMuX3NlbGVjdGVkVGFiQmFySXRlbSAmJiBwYXJzZUZsb2F0
KHRhYkJhckl0ZW0uZWxlbWVudC5zdHlsZS5sZWZ0KSAhPT0gbGVmdCkKICAgICAgICAgICAgICAg
ICB0YWJCYXJJdGVtLmVsZW1lbnQuc3R5bGUubGVmdCA9IGxlZnQgKyAicHgiOwogICAgICAgICAg
ICAgbGVmdCArPSBwYXJzZUZsb2F0KHRhYkJhckl0ZW0uZWxlbWVudC5zdHlsZS53aWR0aCk7CiAg
ICAgICAgIH0KQEAgLTc5Miw4ICs3NTYsNyBAQCBXSS5UYWJCYXIgPSBjbGFzcyBUYWJCYXIgZXh0
ZW5kcyBXSS5WaWV3CiAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBtb3VzZSByZWFsbHkgZGlkIGxl
YXZlIHRoZSBlbGVtZW50IGJ5IGNoZWNraW5nIHRoZSBib3VuZHMuCiAgICAgICAgIC8vIEZJWE1F
OiBJcyB0aGlzIGEgV2ViS2l0IGJ1ZyBvciBjb3JyZWN0IGJlaGF2aW9yPwogICAgICAgICBjb25z
dCBiYXJSZWN0ID0gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgICAg
ICBjb25zdCBuZXdUYWJJdGVtUmVjdCA9IHRoaXMuX25ld1RhYlRhYkJhckl0ZW0uZWxlbWVudC5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgICAgaWYgKGV2ZW50LnBhZ2VZID4gYmFyUmVj
dC50b3AgJiYgZXZlbnQucGFnZVkgPCBiYXJSZWN0LmJvdHRvbSAmJiBldmVudC5wYWdlWCA+IGJh
clJlY3QubGVmdCAmJiBldmVudC5wYWdlWCA8IChuZXdUYWJJdGVtUmVjdCA/IG5ld1RhYkl0ZW1S
ZWN0LnJpZ2h0IDogYmFyUmVjdC5yaWdodCkpCisgICAgICAgIGlmIChldmVudC5wYWdlWSA+IGJh
clJlY3QudG9wICYmIGV2ZW50LnBhZ2VZIDwgYmFyUmVjdC5ib3R0b20gJiYgZXZlbnQucGFnZVgg
PiBiYXJSZWN0LmxlZnQgJiYgZXZlbnQucGFnZVggPCBiYXJSZWN0LnJpZ2h0KQogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMuX2ZpbmlzaEV4cGFuZGluZ1RhYnNBZnRlckNsb3Nl
KCk7CkBAIC04MDQsNyArNzY3LDcgQEAgV0kuVGFiQmFyID0gY2xhc3MgVGFiQmFyIGV4dGVuZHMg
V0kuVmlldwogICAgICAgICBsZXQgY29udGV4dE1lbnUgPSBXSS5Db250ZXh0TWVudS5jcmVhdGVG
cm9tRXZlbnQoZXZlbnQpOwogCiAgICAgICAgIGZvciAobGV0IHRhYkNsYXNzIG9mIFdJLmtub3du
VGFiQ2xhc3NlcygpKSB7Ci0gICAgICAgICAgICBpZiAodGFiQ2xhc3MuaXNFcGhlbWVyYWwoKSkK
KyAgICAgICAgICAgIGlmICh0YWJDbGFzcy50YWJJbmZvKCkuaXNFcGhlbWVyYWwpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGxldCBvcGVuVGFiQmFySXRlbSA9IG51
bGw7CkBAIC04MTksMjAgKzc4MiwxNyBAQCBXSS5UYWJCYXIgPSBjbGFzcyBUYWJCYXIgZXh0ZW5k
cyBXSS5WaWV3CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCisgICAgICAgICAg
ICBsZXQgY2hlY2tlZCA9ICEhb3BlblRhYkJhckl0ZW07CisgICAgICAgICAgICBsZXQgZGlzYWJs
ZWQgPSBjaGVja2VkICYmIHRoaXMubm9ybWFsTm9uRXBoZW1lcmFsVGFiQ291bnQgPT09IDE7CiAg
ICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRDaGVja2JveEl0ZW0odGFiQ2xhc3MudGFiSW5m
bygpLnRpdGxlLCAoKSA9PiB7CiAgICAgICAgICAgICAgICAgaWYgKG9wZW5UYWJCYXJJdGVtKQog
ICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRhYkJhckl0ZW0ob3BlblRhYkJhckl0ZW0p
OwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgV0kuY3JlYXRlTmV3
VGFiV2l0aFR5cGUodGFiQ2xhc3MuVHlwZSwge3Nob3VsZFNob3dOZXdUYWI6IHRydWV9KTsKLSAg
ICAgICAgICAgIH0sICEhb3BlblRhYkJhckl0ZW0pOworICAgICAgICAgICAgfSwgY2hlY2tlZCwg
ZGlzYWJsZWQpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgX2hhbmRsZU5ld1RhYkNsaWNrKGV2
ZW50KQotICAgIHsKLSAgICAgICAgV0kuc2hvd05ld1RhYlRhYigpOwotICAgIH0KLQogICAgIF9o
YW5kbGVUYWJQaWNrZXJUYWJDb250ZXh0TWVudShldmVudCkKICAgICB7CiAgICAgICAgIGlmICgh
dGhpcy5faGlkZGVuVGFiQmFySXRlbXMubGVuZ3RoKQpAQCAtODQ1LDE0ICs4MDUsNiBAQCBXSS5U
YWJCYXIgPSBjbGFzcyBUYWJCYXIgZXh0ZW5kcyBXSS5WaWV3CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfQogICAgIH0KLQotICAgIF9oYW5kbGVOZXdUYWJNb3VzZUVudGVyKGV2ZW50KQotICAg
IHsKLSAgICAgICAgaWYgKCF0aGlzLl90YWJBbmltYXRlZENsb3NlZFNpbmNlTW91c2VFbnRlciB8
fCAhdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygic3RhdGljLWxheW91dCIpIHx8IHRo
aXMuZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImFuaW1hdGluZyIpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2ZpbmlzaEV4cGFuZGluZ1RhYnNBZnRlckNsb3NlKCk7
Ci0gICAgfQogfTsKIAogV0kuVGFiQmFyLkNhY2hlZFdpZHRoU3ltYm9sID0gU3ltYm9sKCJjYWNo
ZWQtd2lkdGgiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1RhYkJyb3dzZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9UYWJCcm93c2VyLmpzCmluZGV4IGEwMmY1MDEyNmFiMTZhOTQyZTBlM2UyMzI1
ZjBiNjBhM2I0YTNhMWQuLmE2OGZkOTJkMDhiOTlkZTAxYWNlZjY5ZjFjZjE2YmVkMGEyMzVmNmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Rh
YkJyb3dzZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvVGFiQnJvd3Nlci5qcwpAQCAtMjgzLDcgKzI4Myw3IEBAIFdJLlRhYkJyb3dzZXIgPSBjbGFz
cyBUYWJCcm93c2VyIGV4dGVuZHMgV0kuVmlldwogCiAgICAgICAgIHRoaXMuX3JlY2VudFRhYkNv
bnRlbnRWaWV3cy5yZW1vdmUodGFiQ29udGVudFZpZXcpOwogCi0gICAgICAgIGlmICghdGFiQ29u
dGVudFZpZXcuY29uc3RydWN0b3IuaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgaWYgKCF0YWJDb250
ZW50Vmlldy5jb25zdHJ1Y3Rvci50YWJJbmZvKCkuaXNFcGhlbWVyYWwpCiAgICAgICAgICAgICB0
aGlzLl9jbG9zZWRUYWJDbGFzc2VzLmFkZCh0YWJDb250ZW50Vmlldy5jb25zdHJ1Y3Rvcik7CiAK
ICAgICAgICAgdGhpcy5fY29udGVudFZpZXdDb250YWluZXIuY2xvc2VDb250ZW50Vmlldyh0YWJD
b250ZW50Vmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9UYWJDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1RhYkNvbnRlbnRWaWV3LmpzCmluZGV4IDMxNTkyZGJhOGQ2NzUzMDg2
YTRjODUyYjUyMWZhZGY4NzgyZjBiMTguLjY3MmM5MDViMzIwNzg5ZjI1MWExMjc4ZTFjNmM4MmVh
ZWFkMTYyZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1RhYkNvbnRlbnRWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1RhYkNvbnRlbnRWaWV3LmpzCkBAIC02NSwxMiArNjUsNiBAQCBXSS5U
YWJDb250ZW50VmlldyA9IGNsYXNzIFRhYkNvbnRlbnRWaWV3IGV4dGVuZHMgV0kuQ29udGVudFZp
ZXcKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgc3RhdGljIGlzRXBoZW1lcmFs
KCkKLSAgICB7Ci0gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFiIHNob3VsZCBub3Qg
YmUgc2hvd24gaW4gdGhlIG5ldyB0YWIgY29udGVudCB2aWV3LgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCiAgICAgc3RhdGljIHNob3VsZFNhdmVUYWIoKQogICAgIHsKICAgICAgICAg
Ly8gUmV0dXJucyBmYWxzZSBpZiB0aGUgdGFiIHNob3VsZCBub3QgYmUgcmVzdG9yZWQgd2hlbiBy
ZS1vcGVuaW5nIHRoZSBJbnNwZWN0b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9UaW1lbGluZVRhYkNvbnRlbnRWaWV3LmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGltZWxpbmVUYWJDb250ZW50Vmll
dy5qcwppbmRleCA3MjA3ZWMzYWU0YTg1MWEyMjdmODhkMTRmNTkzMDRlMmI1ZjI4NTc0Li44Y2Vm
OWIzMmNkNTJkMGZhYWYwYjM0ZjU5NGZiYzI1NTJmYjBkYzdiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UaW1lbGluZVRhYkNvbnRlbnRWaWV3
LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RpbWVs
aW5lVGFiQ29udGVudFZpZXcuanMKQEAgLTI3LDcgKzI3LDcgQEAgV0kuVGltZWxpbmVUYWJDb250
ZW50VmlldyA9IGNsYXNzIFRpbWVsaW5lVGFiQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5Db250ZW50
QnJvd3MKIHsKICAgICBjb25zdHJ1Y3RvcihpZGVudGlmaWVyKQogICAgIHsKLSAgICAgICAgbGV0
IHRhYkJhckl0ZW0gPSBXSS5HZW5lcmFsVGFiQmFySXRlbS5mcm9tVGFiQ29udGVudFZpZXdDb25z
dHJ1Y3RvcihXSS5UaW1lbGluZVRhYkNvbnRlbnRWaWV3KTsKKyAgICAgICAgbGV0IHRhYkJhckl0
ZW0gPSBXSS5HZW5lcmFsVGFiQmFySXRlbS5mcm9tVGFiSW5mbyhXSS5UaW1lbGluZVRhYkNvbnRl
bnRWaWV3LnRhYkluZm8oKSk7CiAgICAgICAgIGxldCBkZXRhaWxzU2lkZWJhclBhbmVsQ29uc3Ry
dWN0b3JzID0gW1dJLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbCwgV0kuUHJvYmVEZXRhaWxz
U2lkZWJhclBhbmVsXTsKIAogICAgICAgICBzdXBlcihpZGVudGlmaWVyIHx8ICJ0aW1lbGluZSIs
ICJ0aW1lbGluZSIsIHRhYkJhckl0ZW0sIG51bGwsIGRldGFpbHNTaWRlYmFyUGFuZWxDb25zdHJ1
Y3RvcnMpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>