<?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>63049</bug_id>
          
          <creation_ts>2011-06-21 00:10:53 -0700</creation_ts>
          <short_desc>Web Inspector: [Chromium] Remove old (aggregating) heap profiler</short_desc>
          <delta_ts>2011-06-21 12:54:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Naganov">mnaganov</reporter>
          <assigned_to name="Mikhail Naganov">mnaganov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>424313</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-06-21 00:10:53 -0700</bug_when>
    <thetext>Clean up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424317</commentid>
    <comment_count>1</comment_count>
      <attachid>97940</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-06-21 00:13:46 -0700</bug_when>
    <thetext>Created attachment 97940
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424319</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-21 00:16:46 -0700</bug_when>
    <thetext>Attachment 97940 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/insp...&quot; exit_code: 1

Source/WebCore/inspector/InspectorProfilerAgent.h:90:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424327</commentid>
    <comment_count>3</comment_count>
      <attachid>97943</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-06-21 00:30:02 -0700</bug_when>
    <thetext>Created attachment 97943
fix style violation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424433</commentid>
    <comment_count>4</comment_count>
      <attachid>97943</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-06-21 06:56:05 -0700</bug_when>
    <thetext>Comment on attachment 97943
fix style violation

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

&gt; Source/WebCore/bindings/v8/ScriptProfiler.cpp:95
&gt; +    ActivityControlAdapter adapter(control);

ASSERT(control)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424684</commentid>
    <comment_count>5</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-06-21 12:48:46 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 97943 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97943&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/ScriptProfiler.cpp:95
&gt; &gt; +    ActivityControlAdapter adapter(control);
&gt; 
&gt; ASSERT(control)

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424687</commentid>
    <comment_count>6</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-06-21 12:54:04 -0700</bug_when>
    <thetext>Manually committed http://trac.webkit.org/changeset/89372


2011-06-21  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Remove old (aggregating) heap profiler.
        https://bugs.webkit.org/show_bug.cgi?id=63049

        * inspector/profiler/detailed-heapshots-test.js:

2011-06-21  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Remove old (aggregating) heap profiler.
        https://bugs.webkit.org/show_bug.cgi?id=63049

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::takeHeapSnapshot):
        * inspector/Inspector.json:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::takeHeapSnapshot):
        * inspector/InspectorProfilerAgent.h:
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype.get profile):
        (WebInspector.DetailedHeapshotView.prototype.get baseProfile):
        (WebInspector.DetailedHeapshotView.prototype._profiles):
        (WebInspector.DetailedHeapshotProfileType):
        (WebInspector.DetailedHeapshotProfileType.prototype.buttonClicked):
        * inspector/front-end/HeapSnapshotView.js: Removed.
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.loadHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._addHeapSnapshotChunk):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.parsed):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._reportHeapSnapshotProgress):
        (WebInspector.ProfilesPanel.prototype._enableDetailedHeapProfiles):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/heapProfiler.css:
        * inspector/front-end/inspector.html:</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97940</attachid>
            <date>2011-06-21 00:13:46 -0700</date>
            <delta_ts>2011-06-21 00:30:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-63049</filename>
            <type>text/plain</type>
            <size>60939</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiNzE5ZWZkLi4yMDhlZWI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDYt
MjEgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hy
b21pdW1dIFJlbW92ZSBvbGQgKGFnZ3JlZ2F0aW5nKSBoZWFwIHByb2ZpbGVyLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMwNDkKKworICAgICAgICAq
IGluc3BlY3Rvci9wcm9maWxlci9kZXRhaWxlZC1oZWFwc2hvdHMtdGVzdC5qczoKKwogMjAxMS0w
Ni0yMCAgWXV0YSBLaXRhbXVyYSAgPHl1dGFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLiBVcGRhdGUgQ2hyb21pdW0gdGVzdCBleHBlY3RhdGlvbiBmb3IgaW5zcGVjdG9yL2Vs
ZW1lbnRzL2V2ZW50LWxpc3RlbmVyLXNpZGViYXIuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2RldGFpbGVkLWhlYXBzaG90cy10ZXN0LmpzIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2RldGFpbGVkLWhlYXBzaG90cy10ZXN0LmpzCmluZGV4
IDUyYWEwNWUuLjExYjViNjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9m
aWxlci9kZXRhaWxlZC1oZWFwc2hvdHMtdGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvcHJvZmlsZXIvZGV0YWlsZWQtaGVhcHNob3RzLXRlc3QuanMKQEAgLTM2MSw3ICszNjEsNyBA
QCBJbnNwZWN0b3JUZXN0LnRha2VBbmRPcGVuU25hcHNob3QgPSBmdW5jdGlvbihnZW5lcmF0b3Is
IGNhbGxiYWNrKQogewogICAgIGNhbGxiYWNrID0gSW5zcGVjdG9yVGVzdC5zYWZlV3JhcChjYWxs
YmFjayk7CiAgICAgdmFyIHVpZCA9IEluc3BlY3RvclRlc3QuX25leHRVaWQrKzsKLSAgICB2YXIg
cHJvZmlsZSA9IHsgdHlwZUlkOiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUu
VHlwZUlkLCB1aWQ6IHVpZCwgdGl0bGU6IFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSArICIuIiAr
IHVpZCB9OworICAgIHZhciBwcm9maWxlID0geyB0eXBlSWQ6IFdlYkluc3BlY3Rvci5EZXRhaWxl
ZEhlYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkLCB1aWQ6IHVpZCwgdGl0bGU6IFVzZXJJbml0aWF0
ZWRQcm9maWxlTmFtZSArICIuIiArIHVpZCB9OwogICAgIGZ1bmN0aW9uIHB1c2hHZW5lcmF0ZWRT
bmFwc2hvdCh0eXBlSWQsIHVpZCkKICAgICB7CiAgICAgICAgIHZhciBzbmFwc2hvdCA9IGdlbmVy
YXRvcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGM5NWNkNDguLjA1MWU1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNyBAQAorMjAxMS0wNi0yMSAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFtDaHJvbWl1bV0gUmVtb3ZlIG9sZCAoYWdncmVnYXRpbmcpIGhlYXAg
cHJvZmlsZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MzA0OQorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFByb2ZpbGVyOjp0YWtlSGVhcFNuYXBzaG90
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUHJvZmlsZXJBZ2VudDo6dGFrZUhlYXBTbmFwc2hvdCk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0RldGFpbGVkSGVhcHNob3RWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbGVk
SGVhcHNob3RWaWV3LnByb3RvdHlwZS5nZXQgcHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlLmdldCBiYXNlUHJvZmlsZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlLl9wcm9maWxl
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFByb2ZpbGVUeXBlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90UHJvZmlsZVR5cGUucHJvdG90
eXBlLmJ1dHRvbkNsaWNrZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNu
YXBzaG90Vmlldy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1By
b2ZpbGVzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90
b3R5cGUubG9hZEhlYXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQ
YW5lbC5wcm90b3R5cGUuX2FkZEhlYXBTbmFwc2hvdENodW5rKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fZmluaXNoSGVhcFNuYXBzaG90LnBhcnNlZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuX2ZpbmlzaEhl
YXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5
cGUudGFrZUhlYXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5l
bC5wcm90b3R5cGUuX3JlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fZW5hYmxlRGV0YWlsZWRIZWFwUHJvZmls
ZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL2hlYXBQcm9maWxlci5jc3M6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKwogMjAxMS0wNi0yMCAgRGFpIE1pa3VydWJl
ICA8ZG1pa3VydWJlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRh
bXVyYS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhZWZlN2M2Li4zZDA4OWExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC02MjY2LDcgKzYyNjYsNiBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1l
bmQvSEFSRW50cnkuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNu
YXBzaG90LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hv
dFByb3h5LmpzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hv
dFZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90
V29ya2VyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hv
dFdvcmtlckRpc3BhdGNoZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
SGVscFNjcmVlbi5qcycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCmluZGV4IGM2MjAxZGYuLjdhNzM3MzUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC02ODAyNSwxMCArNjgwMjUsNiBAQAogCQkJCQk+
CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxIZWFwU25hcHNob3RWaWV3LmpzIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJ
CTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxIZWFwU25h
cHNob3RXb3JrZXIuanMiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAKaW5kZXggMjE1MzdmNC4uZDNlMTcxMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcApAQCAtOTIs
MTIgKzkyLDggQEAgcHJpdmF0ZToKIFBhc3NSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBTY3Jp
cHRQcm9maWxlcjo6dGFrZUhlYXBTbmFwc2hvdChjb25zdCBTdHJpbmcmIHRpdGxlLCBIZWFwU25h
cHNob3RQcm9ncmVzcyogY29udHJvbCkKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgaHM7Ci0gICAg
Y29uc3Qgdjg6OkhlYXBTbmFwc2hvdCogc25hcHNob3QgPSAwOwotICAgIGlmIChjb250cm9sKSB7
Ci0gICAgICAgIEFjdGl2aXR5Q29udHJvbEFkYXB0ZXIgYWRhcHRlcihjb250cm9sKTsKLSAgICAg
ICAgc25hcHNob3QgPSB2ODo6SGVhcFByb2ZpbGVyOjpUYWtlU25hcHNob3QodjhTdHJpbmcodGl0
bGUpLCB2ODo6SGVhcFNuYXBzaG90OjprRnVsbCwgJmFkYXB0ZXIpOwotICAgIH0gZWxzZQotICAg
ICAgICBzbmFwc2hvdCA9IHY4OjpIZWFwUHJvZmlsZXI6OlRha2VTbmFwc2hvdCh2OFN0cmluZyh0
aXRsZSksIHY4OjpIZWFwU25hcHNob3Q6OmtBZ2dyZWdhdGVkKTsKKyAgICBBY3Rpdml0eUNvbnRy
b2xBZGFwdGVyIGFkYXB0ZXIoY29udHJvbCk7CisgICAgY29uc3Qgdjg6OkhlYXBTbmFwc2hvdCog
c25hcHNob3QgPSB2ODo6SGVhcFByb2ZpbGVyOjpUYWtlU25hcHNob3QodjhTdHJpbmcodGl0bGUp
LCB2ODo6SGVhcFNuYXBzaG90OjprRnVsbCwgJmFkYXB0ZXIpOwogICAgIHJldHVybiBzbmFwc2hv
dCA/IFNjcmlwdEhlYXBTbmFwc2hvdDo6Y3JlYXRlKHNuYXBzaG90KSA6IDA7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCBmMmNlNDc1Li42NWQ0MGEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCkBAIC0xNjkzLDEwICsxNjkz
LDcgQEAKICAgICAgICAgICAgICAgICAibmFtZSI6ICJjbGVhclByb2ZpbGVzIgogICAgICAgICAg
ICAgfSwKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAibmFtZSI6ICJ0YWtlSGVhcFNu
YXBzaG90IiwKLSAgICAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJkZXRhaWxlZCIsICJ0eXBlIjogImJvb2xlYW4iIH0KLSAgICAgICAg
ICAgICAgICBdCisgICAgICAgICAgICAgICAgIm5hbWUiOiAidGFrZUhlYXBTbmFwc2hvdCIKICAg
ICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIm5hbWUiOiAiY29s
bGVjdEdhcmJhZ2UiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudC5jcHAKaW5kZXggMzI5M2I0Yy4uYmI1M2U3MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcApAQCAtMzU4
LDEzICszNTgsMTMgQEAgcHJpdmF0ZToKIAogfTsKIAotdm9pZCBJbnNwZWN0b3JQcm9maWxlckFn
ZW50Ojp0YWtlSGVhcFNuYXBzaG90KEVycm9yU3RyaW5nKiwgYm9vbCBkZXRhaWxlZCkKK3ZvaWQg
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6dGFrZUhlYXBTbmFwc2hvdChFcnJvclN0cmluZyopCiB7
CiAgICAgU3RyaW5nIHRpdGxlID0gbWFrZVN0cmluZyhVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUs
ICcuJywgU3RyaW5nOjpudW1iZXIobV9uZXh0VXNlckluaXRpYXRlZEhlYXBTbmFwc2hvdE51bWJl
cikpOwogICAgICsrbV9uZXh0VXNlckluaXRpYXRlZEhlYXBTbmFwc2hvdE51bWJlcjsKIAogICAg
IEhlYXBTbmFwc2hvdFByb2dyZXNzIHByb2dyZXNzKG1fZnJvbnRlbmQpOwotICAgIFJlZlB0cjxT
Y3JpcHRIZWFwU25hcHNob3Q+IHNuYXBzaG90ID0gU2NyaXB0UHJvZmlsZXI6OnRha2VIZWFwU25h
cHNob3QodGl0bGUsIGRldGFpbGVkID8gJnByb2dyZXNzIDogMCk7CisgICAgUmVmUHRyPFNjcmlw
dEhlYXBTbmFwc2hvdD4gc25hcHNob3QgPSBTY3JpcHRQcm9maWxlcjo6dGFrZUhlYXBTbmFwc2hv
dCh0aXRsZSwgJnByb2dyZXNzKTsKICAgICBpZiAoc25hcHNob3QpIHsKICAgICAgICAgbV9zbmFw
c2hvdHMuYWRkKHNuYXBzaG90LT51aWQoKSwgc25hcHNob3QpOwogICAgICAgICBpZiAobV9mcm9u
dGVuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9m
aWxlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5oCmluZGV4IDZjNWNmNGMuLmQxZDdlMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaApAQCAtODcsNyArODcsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpOwogICAgIHZvaWQg
c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoYm9vbCBpZ25vcmVQcm9maWxlID0gZmFsc2UpOwot
ICAgIHZvaWQgdGFrZUhlYXBTbmFwc2hvdChFcnJvclN0cmluZyogZXJyb3IsIGJvb2wgZGV0YWls
ZWQpOworICAgIHZvaWQgdGFrZUhlYXBTbmFwc2hvdChFcnJvclN0cmluZyogZXJyb3IpOwogICAg
IHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9uKGJvb2wgaXNQcm9maWxpbmcpOwogCiBwcml2YXRlOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhl
YXBzaG90Vmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWls
ZWRIZWFwc2hvdFZpZXcuanMKaW5kZXggMzljNTk2OS4uNTJkOWM1ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90Vmlldy5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RW
aWV3LmpzCkBAIC02MzQsNyArNjM0LDcgQEAgV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RW
aWV3LnByb3RvdHlwZSA9IHsKIAogICAgIGdldCBwcm9maWxlKCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLnBhcmVudC5nZXRQcm9maWxlKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9m
aWxlVHlwZS5UeXBlSWQsIHRoaXMuX3Byb2ZpbGVVaWQpOworICAgICAgICByZXR1cm4gdGhpcy5w
YXJlbnQuZ2V0UHJvZmlsZShXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFByb2ZpbGVUeXBl
LlR5cGVJZCwgdGhpcy5fcHJvZmlsZVVpZCk7CiAgICAgfSwKIAogICAgIGdldCBwcm9maWxlV3Jh
cHBlcigpCkBAIC02NDQsNyArNjQ0LDcgQEAgV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RW
aWV3LnByb3RvdHlwZSA9IHsKIAogICAgIGdldCBiYXNlUHJvZmlsZSgpCiAgICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UHJvZmlsZShXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UHJvZmlsZVR5cGUuVHlwZUlkLCB0aGlzLl9iYXNlUHJvZmlsZVVpZCk7CisgICAgICAgIHJldHVy
biB0aGlzLnBhcmVudC5nZXRQcm9maWxlKFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90UHJv
ZmlsZVR5cGUuVHlwZUlkLCB0aGlzLl9iYXNlUHJvZmlsZVVpZCk7CiAgICAgfSwKIAogICAgIGdl
dCBiYXNlUHJvZmlsZVdyYXBwZXIoKQpAQCAtODYzLDcgKzg2Myw3IEBAIFdlYkluc3BlY3Rvci5E
ZXRhaWxlZEhlYXBzaG90Vmlldy5wcm90b3R5cGUgPSB7CiAKICAgICBfcHJvZmlsZXM6IGZ1bmN0
aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVz
LmdldFByb2ZpbGVzKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQp
OworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlcy5nZXRQcm9maWxl
cyhXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCk7CiAgICAg
fSwKIAogICAgIF9sb2FkUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZVVpZCwgY2FsbGJhY2spCkBA
IC0xMTc2LDkgKzExNzYsMTEgQEAgV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RWaWV3LnBy
b3RvdHlwZS5zaG93SGlkZGVuRGF0YSA9IHRydWU7CiAKIFdlYkluc3BlY3Rvci5EZXRhaWxlZEhl
YXBzaG90UHJvZmlsZVR5cGUgPSBmdW5jdGlvbigpCiB7Ci0gICAgV2ViSW5zcGVjdG9yLlByb2Zp
bGVUeXBlLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5
cGVJZCwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJIRUFQIFNOQVBTSE9UUyIpKTsKKyAgICBXZWJJ
bnNwZWN0b3IuUHJvZmlsZVR5cGUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFw
c2hvdFByb2ZpbGVUeXBlLlR5cGVJZCwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJIRUFQIFNOQVBT
SE9UUyIpKTsKIH0KIAorV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RQcm9maWxlVHlwZS5U
eXBlSWQgPSAiSEVBUCI7CisKIFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90UHJvZmlsZVR5
cGUucHJvdG90eXBlID0gewogICAgIGdldCBidXR0b25Ub29sdGlwKCkKICAgICB7CkBAIC0xMTky
LDcgKzExOTQsNyBAQCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFByb2ZpbGVUeXBlLnBy
b3RvdHlwZSA9IHsKIAogICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMudGFrZUhlYXBTbmFwc2hvdCh0cnVlKTsK
KyAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlcy50YWtlSGVhcFNuYXBzaG90KCk7
CiAgICAgfSwKIAogICAgIGdldCB3ZWxjb21lTWVzc2FnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZTAyZjcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMTAzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcgPSBmdW5jdGlv
bihwYXJlbnQsIHByb2ZpbGUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsK
LQotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoZWFwLXNuYXBzaG90LXZpZXciKTsK
LQotICAgIHRoaXMucGFyZW50ID0gcGFyZW50OwotICAgIHRoaXMucGFyZW50LmFkZEV2ZW50TGlz
dGVuZXIoInByb2ZpbGUgYWRkZWQiLCB0aGlzLl91cGRhdGVCYXNlT3B0aW9ucywgdGhpcyk7Ci0K
LSAgICB0aGlzLnNob3dDb3VudEFzUGVyY2VudCA9IGZhbHNlOwotICAgIHRoaXMuc2hvd1NpemVB
c1BlcmNlbnQgPSBmYWxzZTsKLSAgICB0aGlzLnNob3dDb3VudERlbHRhQXNQZXJjZW50ID0gZmFs
c2U7Ci0gICAgdGhpcy5zaG93U2l6ZURlbHRhQXNQZXJjZW50ID0gZmFsc2U7Ci0KLSAgICB0aGlz
LmNhdGVnb3JpZXMgPSB7Ci0gICAgICAgIGNvZGU6IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VD
YXRlZ29yeSgiY29kZSIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29kZSIpLCAicmdiKDI1NSwx
MjEsMCkiKSwKLSAgICAgICAgZGF0YTogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVnb3J5
KCJkYXRhIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPYmplY3RzIiksICJyZ2IoNDcsMTAyLDIz
NikiKQotICAgIH07Ci0KLSAgICB2YXIgc3VtbWFyeUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOwotICAgIHN1bW1hcnlDb250YWluZXIuaWQgPSAiaGVhcC1zbmFwc2hv
dC1zdW1tYXJ5LWNvbnRhaW5lciI7Ci0KLSAgICB0aGlzLmNvdW50c1N1bW1hcnlCYXIgPSBuZXcg
V2ViSW5zcGVjdG9yLlN1bW1hcnlCYXIodGhpcy5jYXRlZ29yaWVzKTsKLSAgICB0aGlzLmNvdW50
c1N1bW1hcnlCYXIuZWxlbWVudC5jbGFzc05hbWUgPSAiaGVhcC1zbmFwc2hvdC1zdW1tYXJ5IjsK
LSAgICB0aGlzLmNvdW50c1N1bW1hcnlCYXIuY2FsY3VsYXRvciA9IG5ldyBXZWJJbnNwZWN0b3Iu
SGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3IoKTsKLSAgICB2YXIgY291bnRzTGFiZWwgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBjb3VudHNMYWJlbC5jbGFzc05hbWUgPSAi
aGVhcC1zbmFwc2hvdC1zdW1tYXJ5LWxhYmVsIjsKLSAgICBjb3VudHNMYWJlbC50ZXh0Q29udGVu
dCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ291bnQiKTsKLSAgICB0aGlzLmNvdW50c1N1bW1h
cnlCYXIuZWxlbWVudC5hcHBlbmRDaGlsZChjb3VudHNMYWJlbCk7Ci0gICAgc3VtbWFyeUNvbnRh
aW5lci5hcHBlbmRDaGlsZCh0aGlzLmNvdW50c1N1bW1hcnlCYXIuZWxlbWVudCk7Ci0KLSAgICB0
aGlzLnNpemVzU3VtbWFyeUJhciA9IG5ldyBXZWJJbnNwZWN0b3IuU3VtbWFyeUJhcih0aGlzLmNh
dGVnb3JpZXMpOwotICAgIHRoaXMuc2l6ZXNTdW1tYXJ5QmFyLmVsZW1lbnQuY2xhc3NOYW1lID0g
ImhlYXAtc25hcHNob3Qtc3VtbWFyeSI7Ci0gICAgdGhpcy5zaXplc1N1bW1hcnlCYXIuY2FsY3Vs
YXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlTaXplQ2FsY3VsYXRvcigpOwotICAg
IHZhciBzaXplc0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTsKLSAgICBz
aXplc0xhYmVsLmNsYXNzTmFtZSA9ICJoZWFwLXNuYXBzaG90LXN1bW1hcnktbGFiZWwiOwotICAg
IHNpemVzTGFiZWwudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNpemUiKTsK
LSAgICB0aGlzLnNpemVzU3VtbWFyeUJhci5lbGVtZW50LmFwcGVuZENoaWxkKHNpemVzTGFiZWwp
OwotICAgIHN1bW1hcnlDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zaXplc1N1bW1hcnlCYXIu
ZWxlbWVudCk7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3VtbWFyeUNvbnRhaW5l
cik7Ci0KLSAgICB2YXIgY29sdW1ucyA9IHsKLSAgICAgICAgY29uczogeyB0aXRsZTogV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJDb25zdHJ1Y3RvciIpLCBkaXNjbG9zdXJlOiB0cnVlLCBzb3J0YWJs
ZTogdHJ1ZSB9LAotICAgICAgICBjb3VudDogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJDb3VudCIpLCB3aWR0aDogIjU0cHgiLCBzb3J0YWJsZTogdHJ1ZSB9LAotICAgICAgICBzaXpl
OiB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNpemUiKSwgd2lkdGg6ICI3MnB4Iiwg
c29ydDogImRlc2NlbmRpbmciLCBzb3J0YWJsZTogdHJ1ZSB9LAotICAgICAgICAvLyBceGIxIGlz
IGEgInBsdXMtbWludXMiIHNpZ24uCi0gICAgICAgIGNvdW50RGVsdGE6IHsgdGl0bGU6IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiXHhiMSBDb3VudCIpLCB3aWR0aDogIjcycHgiLCBzb3J0YWJsZTog
dHJ1ZSB9LAotICAgICAgICBzaXplRGVsdGE6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiXHhiMSBTaXplIiksIHdpZHRoOiAiNzJweCIsIHNvcnRhYmxlOiB0cnVlIH0KLSAgICB9Owot
Ci0gICAgdGhpcy5kYXRhR3JpZCA9IG5ldyBXZWJJbnNwZWN0b3IuRGF0YUdyaWQoY29sdW1ucyk7
Ci0gICAgdGhpcy5kYXRhR3JpZC5hZGRFdmVudExpc3RlbmVyKCJzb3J0aW5nIGNoYW5nZWQiLCB0
aGlzLl9zb3J0RGF0YSwgdGhpcyk7Ci0gICAgdGhpcy5kYXRhR3JpZC5lbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX21vdXNlRG93bkluRGF0YUdyaWQuYmluZCh0aGlz
KSwgdHJ1ZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZGF0YUdyaWQuZWxl
bWVudCk7Ci0KLSAgICB0aGlzLnByb2ZpbGUgPSBwcm9maWxlOwotCi0gICAgdGhpcy5iYXNlU2Vs
ZWN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHRoaXMu
YmFzZVNlbGVjdEVsZW1lbnQuY2xhc3NOYW1lID0gInN0YXR1cy1iYXItaXRlbSI7Ci0gICAgdGhp
cy5iYXNlU2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLl9jaGFu
Z2VCYXNlLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLl91cGRhdGVCYXNlT3B0aW9ucygp
OwotCi0gICAgdGhpcy5wZXJjZW50QnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJC
dXR0b24oIiIsICJwZXJjZW50LXRpbWUtc3RhdHVzLWJhci1pdGVtIHN0YXR1cy1iYXItaXRlbSIp
OwotICAgIHRoaXMucGVyY2VudEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMu
X3BlcmNlbnRDbGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsKLQotICAgIHRoaXMuX2xvYWRQcm9m
aWxlKHRoaXMucHJvZmlsZSwgcHJvZmlsZUNhbGxiYWNrLmJpbmQodGhpcykpOwotCi0gICAgZnVu
Y3Rpb24gcHJvZmlsZUNhbGxiYWNrKHByb2ZpbGUpCi0gICAgewotICAgICAgICB2YXIgbGlzdCA9
IHRoaXMuX3Byb2ZpbGVzKCk7Ci0gICAgICAgIHZhciBwcm9maWxlSW5kZXg7Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGlmIChsaXN0
W2ldLnVpZCA9PT0gcHJvZmlsZS51aWQpIHsKLSAgICAgICAgICAgICAgICBwcm9maWxlSW5kZXgg
PSBpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICBpZiAo
cHJvZmlsZUluZGV4ID4gMCkKLSAgICAgICAgICAgIHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQuc2Vs
ZWN0ZWRJbmRleCA9IHByb2ZpbGVJbmRleCAtIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IHByb2ZpbGVJbmRleDsKLSAg
ICAgICAgdGhpcy5fcmVzZXREYXRhR3JpZExpc3QocmVzZXRDb21wbGV0ZWQuYmluZCh0aGlzKSk7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcmVzZXRDb21wbGV0ZWQoKQotICAgIHsKLSAgICAgICAg
dGhpcy5yZWZyZXNoKCk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVBlcmNlbnRCdXR0b24oKTsKLSAg
ICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZSA9IHsKLSAg
ICBnZXQgc3RhdHVzQmFySXRlbXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFt0aGlzLmJhc2VT
ZWxlY3RFbGVtZW50LCB0aGlzLnBlcmNlbnRCdXR0b24uZWxlbWVudF07Ci0gICAgfSwKLQotICAg
IGdldCBwcm9maWxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wcm9maWxlOwotICAg
IH0sCi0KLSAgICBzZXQgcHJvZmlsZShwcm9maWxlKQotICAgIHsKLSAgICAgICAgdGhpcy5fcHJv
ZmlsZSA9IHByb2ZpbGU7Ci0gICAgfSwKLQotICAgIHNob3c6IGZ1bmN0aW9uKHBhcmVudEVsZW1l
bnQpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUuc2hvdy5jYWxs
KHRoaXMsIHBhcmVudEVsZW1lbnQpOwotICAgICAgICB0aGlzLmRhdGFHcmlkLnVwZGF0ZVdpZHRo
cygpOwotICAgIH0sCi0KLSAgICBoaWRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJ
bnNwZWN0b3IuVmlldy5wcm90b3R5cGUuaGlkZS5jYWxsKHRoaXMpOwotICAgICAgICB0aGlzLl9j
dXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAtMTsKLSAgICB9LAotCi0gICAgcmVzaXplOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5kYXRhR3JpZCkKLSAgICAgICAgICAgIHRo
aXMuZGF0YUdyaWQudXBkYXRlV2lkdGhzKCk7Ci0gICAgfSwKLQotICAgIHJlZnJlc2g6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGF0YUdyaWQucmVtb3ZlQ2hpbGRyZW4oKTsKLQot
ICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnNuYXBzaG90RGF0YUdyaWRMaXN0LmNoaWxkcmVu
OwotICAgICAgICB2YXIgY291bnQgPSBjaGlsZHJlbi5sZW5ndGg7Ci0gICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkKLSAgICAgICAgICAgIHRoaXMuZGF0
YUdyaWQuYXBwZW5kQ2hpbGQoY2hpbGRyZW5baW5kZXhdKTsKLQotICAgICAgICB0aGlzLl91cGRh
dGVTdW1tYXJ5R3JhcGgoKTsKLSAgICB9LAotCi0gICAgcmVmcmVzaFNob3dBc1BlcmNlbnRzOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl91cGRhdGVQZXJjZW50QnV0dG9uKCk7Ci0g
ICAgICAgIHRoaXMucmVmcmVzaFZpc2libGVEYXRhKCk7Ci0gICAgfSwKLQotICAgIF9kZWxldGVT
ZWFyY2hNYXRjaGVkRmxhZ3M6IGZ1bmN0aW9uKG5vZGUpCi0gICAgewotICAgICAgICBkZWxldGUg
bm9kZS5fc2VhcmNoTWF0Y2hlZENvbnNDb2x1bW47Ci0gICAgICAgIGRlbGV0ZSBub2RlLl9zZWFy
Y2hNYXRjaGVkQ291bnRDb2x1bW47Ci0gICAgICAgIGRlbGV0ZSBub2RlLl9zZWFyY2hNYXRjaGVk
U2l6ZUNvbHVtbjsKLSAgICAgICAgZGVsZXRlIG5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudERlbHRh
Q29sdW1uOwotICAgICAgICBkZWxldGUgbm9kZS5fc2VhcmNoTWF0Y2hlZFNpemVEZWx0YUNvbHVt
bjsKLSAgICB9LAotCi0gICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9zZWFyY2hSZXN1bHRzKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgcHJvZmlsZU5vZGUgPSB0aGlzLl9zZWFyY2hSZXN1bHRzW2ldLnByb2ZpbGVOb2RlOwot
ICAgICAgICAgICAgICAgIHRoaXMuX2RlbGV0ZVNlYXJjaE1hdGNoZWRGbGFncyhwcm9maWxlTm9k
ZSk7Ci0gICAgICAgICAgICAgICAgcHJvZmlsZU5vZGUucmVmcmVzaCgpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRlIHRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJh
Y2s7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IC0xOwotICAgICAg
ICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gW107Ci0gICAgfSwKLQotICAgIHBlcmZvcm1TZWFyY2g6
IGZ1bmN0aW9uKHF1ZXJ5LCBmaW5pc2hlZENhbGxiYWNrKQotICAgIHsKLSAgICAgICAgLy8gQ2Fs
bCBzZWFyY2hDYW5jZWxlZCBzaW5jZSBpdCB3aWxsIHJlc2V0IGV2ZXJ5dGhpbmcgd2UgbmVlZCBi
ZWZvcmUgZG9pbmcgYSBuZXcgc2VhcmNoLgotICAgICAgICB0aGlzLnNlYXJjaENhbmNlbGVkKCk7
Ci0KLSAgICAgICAgcXVlcnkgPSBxdWVyeS50cmltKCk7Ci0KLSAgICAgICAgaWYgKCFxdWVyeS5s
ZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fc2VhcmNoRmluaXNo
ZWRDYWxsYmFjayA9IGZpbmlzaGVkQ2FsbGJhY2s7Ci0KLSAgICAgICAgdmFyIGhlbHBlciA9IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LlNlYXJjaEhlbHBlcjsKLQotICAgICAgICB2YXIg
b3BlcmF0aW9uQW5kTnVtYmVyID0gaGVscGVyLnBhcnNlT3BlcmF0aW9uQW5kTnVtYmVyKHF1ZXJ5
KTsKLSAgICAgICAgdmFyIG9wZXJhdGlvbiA9IG9wZXJhdGlvbkFuZE51bWJlclswXTsKLSAgICAg
ICAgdmFyIHF1ZXJ5TnVtYmVyID0gb3BlcmF0aW9uQW5kTnVtYmVyWzFdOwotCi0gICAgICAgIHZh
ciBwZXJjZW50VW5pdHMgPSBoZWxwZXIucGVyY2VudHMudGVzdChxdWVyeSk7Ci0gICAgICAgIHZh
ciBtZWdhQnl0ZXNVbml0cyA9IGhlbHBlci5tZWdhQnl0ZXMudGVzdChxdWVyeSk7Ci0gICAgICAg
IHZhciBraWxvQnl0ZXNVbml0cyA9IGhlbHBlci5raWxvQnl0ZXMudGVzdChxdWVyeSk7Ci0gICAg
ICAgIHZhciBieXRlc1VuaXRzID0gaGVscGVyLmJ5dGVzLnRlc3QocXVlcnkpOwotCi0gICAgICAg
IHZhciBxdWVyeU51bWJlckJ5dGVzID0gKG1lZ2FCeXRlc1VuaXRzID8gKHF1ZXJ5TnVtYmVyICog
MTAyNCAqIDEwMjQpIDogKGtpbG9CeXRlc1VuaXRzID8gKHF1ZXJ5TnVtYmVyICogMTAyNCkgOiBx
dWVyeU51bWJlcikpOwotCi0gICAgICAgIGZ1bmN0aW9uIG1hdGNoZXNRdWVyeShoZWFwU25hcHNo
b3REYXRhR3JpZE5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RWaWV3LnByb3RvdHlwZS5fZGVsZXRlU2VhcmNoTWF0Y2hlZEZsYWdzKGhlYXBTbmFw
c2hvdERhdGFHcmlkTm9kZSk7Ci0KLSAgICAgICAgICAgIGlmIChwZXJjZW50VW5pdHMpIHsKLSAg
ICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb3Vu
dENvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuY291bnRQZXJjZW50
LCBxdWVyeU51bWJlcik7Ci0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2Rl
Ll9zZWFyY2hNYXRjaGVkU2l6ZUNvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3Jp
ZE5vZGUuc2l6ZVBlcmNlbnQsIHF1ZXJ5TnVtYmVyKTsKLSAgICAgICAgICAgICAgICBoZWFwU25h
cHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudERlbHRhQ29sdW1uID0gb3BlcmF0
aW9uKGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5jb3VudERlbHRhUGVyY2VudCwgcXVlcnlOdW1i
ZXIpOwotICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0
Y2hlZFNpemVEZWx0YUNvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUu
c2l6ZURlbHRhUGVyY2VudCwgcXVlcnlOdW1iZXIpOwotICAgICAgICAgICAgfSBlbHNlIGlmICht
ZWdhQnl0ZXNVbml0cyB8fCBraWxvQnl0ZXNVbml0cyB8fCBieXRlc1VuaXRzKSB7Ci0gICAgICAg
ICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkU2l6ZUNvbHVt
biA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuc2l6ZSwgcXVlcnlOdW1iZXJC
eXRlcyk7Ci0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hN
YXRjaGVkU2l6ZURlbHRhQ29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFwc2hvdERhdGFHcmlkTm9k
ZS5zaXplRGVsdGEsIHF1ZXJ5TnVtYmVyQnl0ZXMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb3Vu
dENvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuY291bnQsIHF1ZXJ5
TnVtYmVyKTsKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJj
aE1hdGNoZWRDb3VudERlbHRhQ29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFwc2hvdERhdGFHcmlk
Tm9kZS5jb3VudERlbHRhLCBxdWVyeU51bWJlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuY29uc3RydWN0b3JOYW1lLmhhc1N1YnN0
cmluZyhxdWVyeSwgdHJ1ZSkpCi0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWRO
b2RlLl9zZWFyY2hNYXRjaGVkQ29uc0NvbHVtbiA9IHRydWU7Ci0KLSAgICAgICAgICAgIGlmICho
ZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb25zQ29sdW1uIHx8Ci0gICAg
ICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkQ291bnRD
b2x1bW4gfHwKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJj
aE1hdGNoZWRTaXplQ29sdW1uIHx8Ci0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdy
aWROb2RlLl9zZWFyY2hNYXRjaGVkQ291bnREZWx0YUNvbHVtbiB8fAotICAgICAgICAgICAgICAg
IGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZFNpemVEZWx0YUNvbHVtbikg
ewotICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5yZWZyZXNoKCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5z
bmFwc2hvdERhdGFHcmlkTGlzdC5jaGlsZHJlblswXTsKLSAgICAgICAgdmFyIGRlcHRoID0gMDsK
LSAgICAgICAgdmFyIGluZm8gPSB7fTsKLQotICAgICAgICAvLyBUaGUgc2Vjb25kIGFuZCBzdWJz
ZXF1ZW50IGxldmVscyBvZiBoZWFwIHNuYXBzaG90IG5vZGVzIHJlcHJlc2VudCByZXRhaW5lcnMs
Ci0gICAgICAgIC8vIHNvIHJlY3Vyc2l2ZSBleHBhbnNpb24gd2lsbCBiZSBpbmZpbml0ZSwgc2lu
Y2UgYSBncmFwaCBpcyBiZWluZyB0cmF2ZXJzZWQuCi0gICAgICAgIC8vIFNvIGRlZmF1bHQgdG8g
YSByZWN1cnNpb24gY2FwIG9mIDIgbGV2ZWxzLgotICAgICAgICBjb25zdCBtYXhEZXB0aCA9IDI7
Ci0KLSAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICAgICAgICAgIGlmIChtYXRjaGVzUXVl
cnkoY3VycmVudCkpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cy5wdXNoKHsg
cHJvZmlsZU5vZGU6IGN1cnJlbnQgfSk7Ci0gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC50
cmF2ZXJzZU5leHROb2RlKGZhbHNlLCBudWxsLCAoZGVwdGggPj0gbWF4RGVwdGgpLCBpbmZvKTsK
LSAgICAgICAgICAgIGRlcHRoICs9IGluZm8uZGVwdGhDaGFuZ2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmaW5pc2hlZENhbGxiYWNrKHRoaXMsIHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsK
LSAgICB9LAotCi0gICAgLy8gRklYTUU6IG1vdmUgdGhlc2UgbWV0aG9kcyB0byBhIHN1cGVyY2xh
c3MsIGluaGVyaXQgYm90aCB2aWV3cyBmcm9tIGl0LgotICAgIGp1bXBUb0ZpcnN0U2VhcmNoUmVz
dWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLmp1bXBUb0ZpcnN0U2Vh
cmNoUmVzdWx0LAotICAgIGp1bXBUb0xhc3RTZWFyY2hSZXN1bHQ6IFdlYkluc3BlY3Rvci5DUFVQ
cm9maWxlVmlldy5wcm90b3R5cGUuanVtcFRvTGFzdFNlYXJjaFJlc3VsdCwKLSAgICBqdW1wVG9O
ZXh0U2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLmp1
bXBUb05leHRTZWFyY2hSZXN1bHQsCi0gICAganVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQ6IFdl
Ykluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUuanVtcFRvUHJldmlvdXNTZWFyY2hS
ZXN1bHQsCi0gICAgc2hvd2luZ0ZpcnN0U2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJv
ZmlsZVZpZXcucHJvdG90eXBlLnNob3dpbmdGaXJzdFNlYXJjaFJlc3VsdCwKLSAgICBzaG93aW5n
TGFzdFNlYXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3LnByb3RvdHlwZS5z
aG93aW5nTGFzdFNlYXJjaFJlc3VsdCwKLSAgICBfanVtcFRvU2VhcmNoUmVzdWx0OiBXZWJJbnNw
ZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLl9qdW1wVG9TZWFyY2hSZXN1bHQsCi0KLSAg
ICByZWZyZXNoVmlzaWJsZURhdGE6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjaGls
ZCA9IHRoaXMuZGF0YUdyaWQuY2hpbGRyZW5bMF07Ci0gICAgICAgIHdoaWxlIChjaGlsZCkgewot
ICAgICAgICAgICAgY2hpbGQucmVmcmVzaCgpOwotICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC50
cmF2ZXJzZU5leHROb2RlKGZhbHNlLCBudWxsLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICB0
aGlzLl91cGRhdGVTdW1tYXJ5R3JhcGgoKTsKLSAgICB9LAotCi0gICAgX2NoYW5nZUJhc2U6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmJhc2VTbmFwc2hvdC51aWQgPT09IHRo
aXMuX3Byb2ZpbGVzKClbdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4XS51aWQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fcmVzZXREYXRhR3JpZExpc3Qo
cmVzZXRDb21wbGV0ZWQuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gcmVzZXRDb21w
bGV0ZWQoKSB7Ci0gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTsKLQotICAgICAgICAgICAgaWYg
KCF0aGlzLmN1cnJlbnRRdWVyeSB8fCAhdGhpcy5fc2VhcmNoRmluaXNoZWRDYWxsYmFjayB8fCAh
dGhpcy5fc2VhcmNoUmVzdWx0cykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgIC8vIFRoZSBjdXJyZW50IHNlYXJjaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgYWdhaW4uIEZp
cnN0IG5lZ2F0ZSBvdXQgcHJldmlvdXMgbWF0Y2gKLSAgICAgICAgICAgIC8vIGNvdW50IGJ5IGNh
bGxpbmcgdGhlIHNlYXJjaCBmaW5pc2hlZCBjYWxsYmFjayB3aXRoIGEgbmVnYXRpdmUgbnVtYmVy
IG9mIG1hdGNoZXMuCi0gICAgICAgICAgICAvLyBUaGVuIHBlcmZvcm0gdGhlIHNlYXJjaCBhZ2Fp
biB3aXRoIHRoZSBzYW1lIHF1ZXJ5IGFuZCBjYWxsYmFjay4KLSAgICAgICAgICAgIHRoaXMuX3Nl
YXJjaEZpbmlzaGVkQ2FsbGJhY2sodGhpcywgLXRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsK
LSAgICAgICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCh0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5f
c2VhcmNoRmluaXNoZWRDYWxsYmFjayk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX2NyZWF0
ZVNuYXBzaG90RGF0YUdyaWRMaXN0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5fc25hcHNob3REYXRhR3JpZExpc3QpCi0gICAgICAgICAgZGVsZXRlIHRoaXMuX3NuYXBzaG90
RGF0YUdyaWRMaXN0OwotCi0gICAgICAgIHRoaXMuX3NuYXBzaG90RGF0YUdyaWRMaXN0ID0gbmV3
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QodGhpcywgdGhpcy5iYXNlU25h
cHNob3QuZW50cmllcywgdGhpcy5wcm9maWxlLmVudHJpZXMpOwotICAgICAgICByZXR1cm4gdGhp
cy5fc25hcHNob3REYXRhR3JpZExpc3Q7Ci0gICAgfSwKLQotICAgIF9wcm9maWxlczogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMu
Z2V0UHJvZmlsZXMoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCk7
Ci0gICAgfSwKLQotICAgIF9sb2FkUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSwgY2FsbGJhY2sp
Ci0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLmxvYWRIZWFwU25h
cHNob3QocHJvZmlsZS51aWQsIGNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgcHJvY2Vzc0xvYWRl
ZFNuYXBzaG90OiBmdW5jdGlvbihwcm9maWxlLCBsb2FkZWRTbmFwc2hvdCkKLSAgICB7Ci0gICAg
ICAgIHZhciBzbmFwc2hvdCA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlw
ZS5fY29udmVydFNuYXBzaG90KGxvYWRlZFNuYXBzaG90KTsKLSAgICAgICAgcHJvZmlsZS5jaGls
ZHJlbiA9IHNuYXBzaG90LmNoaWxkcmVuOwotICAgICAgICBwcm9maWxlLmVudHJpZXMgPSBzbmFw
c2hvdC5lbnRyaWVzOwotICAgICAgICBwcm9maWxlLmxvd2xldmVscyA9IHNuYXBzaG90Lmxvd2xl
dmVsczsKLSAgICAgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9w
cmVwYXJlUHJvZmlsZShwcm9maWxlKTsKLSAgICB9LAotCi0gICAgX21vdXNlRG93bkluRGF0YUdy
aWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LmRldGFpbCA8IDIp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNlbGwgPSBldmVudC50YXJnZXQu
ZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZSgidGQiKTsKLSAgICAgICAgaWYgKCFjZWxs
IHx8ICghY2VsbC5oYXNTdHlsZUNsYXNzKCJjb3VudC1jb2x1bW4iKSAmJiAhY2VsbC5oYXNTdHls
ZUNsYXNzKCJzaXplLWNvbHVtbiIpICYmICFjZWxsLmhhc1N0eWxlQ2xhc3MoImNvdW50RGVsdGEt
Y29sdW1uIikgJiYgIWNlbGwuaGFzU3R5bGVDbGFzcygic2l6ZURlbHRhLWNvbHVtbiIpKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoY2VsbC5oYXNTdHlsZUNsYXNzKCJjb3Vu
dC1jb2x1bW4iKSkKLSAgICAgICAgICAgIHRoaXMuc2hvd0NvdW50QXNQZXJjZW50ID0gIXRoaXMu
c2hvd0NvdW50QXNQZXJjZW50OwotICAgICAgICBlbHNlIGlmIChjZWxsLmhhc1N0eWxlQ2xhc3Mo
InNpemUtY29sdW1uIikpCi0gICAgICAgICAgICB0aGlzLnNob3dTaXplQXNQZXJjZW50ID0gIXRo
aXMuc2hvd1NpemVBc1BlcmNlbnQ7Ci0gICAgICAgIGVsc2UgaWYgKGNlbGwuaGFzU3R5bGVDbGFz
cygiY291bnREZWx0YS1jb2x1bW4iKSkKLSAgICAgICAgICAgIHRoaXMuc2hvd0NvdW50RGVsdGFB
c1BlcmNlbnQgPSAhdGhpcy5zaG93Q291bnREZWx0YUFzUGVyY2VudDsKLSAgICAgICAgZWxzZSBp
ZiAoY2VsbC5oYXNTdHlsZUNsYXNzKCJzaXplRGVsdGEtY29sdW1uIikpCi0gICAgICAgICAgICB0
aGlzLnNob3dTaXplRGVsdGFBc1BlcmNlbnQgPSAhdGhpcy5zaG93U2l6ZURlbHRhQXNQZXJjZW50
OwotCi0gICAgICAgIHRoaXMucmVmcmVzaFNob3dBc1BlcmNlbnRzKCk7Ci0KLSAgICAgICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0g
ICAgfSwKLQotICAgIGdldCBfaXNTaG93aW5nQXNQZXJjZW50KCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLnNob3dDb3VudEFzUGVyY2VudCAmJiB0aGlzLnNob3dTaXplQXNQZXJjZW50ICYm
IHRoaXMuc2hvd0NvdW50RGVsdGFBc1BlcmNlbnQgJiYgdGhpcy5zaG93U2l6ZURlbHRhQXNQZXJj
ZW50OwotICAgIH0sCi0KLSAgICBfcGVyY2VudENsaWNrZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAg
IHsKLSAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHRoaXMuX2lzU2hvd2luZ0FzUGVyY2VudDsK
LSAgICAgICAgdGhpcy5zaG93Q291bnRBc1BlcmNlbnQgPSAhY3VycmVudFN0YXRlOwotICAgICAg
ICB0aGlzLnNob3dTaXplQXNQZXJjZW50ID0gIWN1cnJlbnRTdGF0ZTsKLSAgICAgICAgdGhpcy5z
aG93Q291bnREZWx0YUFzUGVyY2VudCA9ICFjdXJyZW50U3RhdGU7Ci0gICAgICAgIHRoaXMuc2hv
d1NpemVEZWx0YUFzUGVyY2VudCA9ICFjdXJyZW50U3RhdGU7Ci0gICAgICAgIHRoaXMucmVmcmVz
aFNob3dBc1BlcmNlbnRzKCk7Ci0gICAgfSwKLQotICAgIF9jb252ZXJ0U25hcHNob3Q6IGZ1bmN0
aW9uKGxvYWRlZFNuYXBzaG90KQotICAgIHsKLSAgICAgICAgdmFyIHNuYXBzaG90ID0gbmV3IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QobG9hZGVkU25hcHNob3QpOwotICAgICAgICB2YXIgcmVz
dWx0ID0ge2xvd2xldmVsczoge30sIGVudHJpZXM6IHt9LCBjaGlsZHJlbjoge319OwotICAgICAg
ICB2YXIgcm9vdEVkZ2VzSXRlciA9IHNuYXBzaG90LnJvb3ROb2RlLmVkZ2VzOwotICAgICAgICBm
b3IgKHZhciBpdGVyID0gcm9vdEVkZ2VzSXRlcjsgaXRlci5oYXNOZXh0KCk7IGl0ZXIubmV4dCgp
KSB7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IGl0ZXIuZWRnZS5ub2RlOwotICAgICAgICAgICAg
aWYgKG5vZGUuaXNIaWRkZW4pCi0gICAgICAgICAgICAgICAgcmVzdWx0Lmxvd2xldmVsc1tub2Rl
Lm5hbWVdID0ge2NvdW50OiBub2RlLmluc3RhbmNlc0NvdW50LCBzaXplOiBub2RlLnNlbGZTaXpl
LCB0eXBlOiBub2RlLm5hbWV9OwotICAgICAgICAgICAgZWxzZSBpZiAobm9kZS5pbnN0YW5jZXND
b3VudCkKLSAgICAgICAgICAgICAgICByZXN1bHQuZW50cmllc1tub2RlLm5hbWVdID0ge2NvbnN0
cnVjdG9yTmFtZTogbm9kZS5uYW1lLCBjb3VudDogbm9kZS5pbnN0YW5jZXNDb3VudCwgc2l6ZTog
bm9kZS5zZWxmU2l6ZX07Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIg
ZW50cnkgPSB7Y29uc3RydWN0b3JOYW1lOiBub2RlLm5hbWV9OwotICAgICAgICAgICAgICAgIGZv
ciAodmFyIGlubmVySXRlciA9IG5vZGUuZWRnZXM7IGlubmVySXRlci5oYXNOZXh0KCk7IGlubmVy
SXRlci5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGVkZ2UgPSBpbm5lckl0ZXIu
ZWRnZTsKLSAgICAgICAgICAgICAgICAgICAgZW50cnlbZWRnZS5ub2RlSW5kZXhdID0ge2NvbnN0
cnVjdG9yTmFtZTogZWRnZS5ub2RlLm5hbWUsIGNvdW50OiBlZGdlLm5hbWV9OwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGRyZW5bcm9vdEVkZ2VzSXRlci5l
ZGdlLm5vZGVJbmRleF0gPSBlbnRyeTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBfcHJlcGFyZVByb2ZpbGU6IGZ1bmN0aW9u
KHByb2ZpbGUpCi0gICAgewotICAgICAgICBmb3IgKHZhciBwcm9maWxlRW50cnkgaW4gcHJvZmls
ZS5lbnRyaWVzKQotICAgICAgICAgICAgcHJvZmlsZS5lbnRyaWVzW3Byb2ZpbGVFbnRyeV0ucmV0
YWluZXJzID0ge307Ci0gICAgICAgIHByb2ZpbGUuY2x1c3RlcnMgPSB7fTsKLQotICAgICAgICBm
b3IgKHZhciBhZGRyIGluIHByb2ZpbGUuY2hpbGRyZW4pIHsKLSAgICAgICAgICAgIHZhciByZXRh
aW5lciA9IHByb2ZpbGUuY2hpbGRyZW5bYWRkcl07Ci0gICAgICAgICAgICB2YXIgcmV0YWluZXJJ
ZCA9IHJldGFpbmVyLmNvbnN0cnVjdG9yTmFtZSArICI6IiArIGFkZHI7Ci0gICAgICAgICAgICBm
b3IgKHZhciBjaGlsZEFkZHIgaW4gcmV0YWluZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hp
bGRBZGRyID09PSAiY29uc3RydWN0b3JOYW1lIikgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
dmFyIGl0ZW0gPSByZXRhaW5lcltjaGlsZEFkZHJdOwotICAgICAgICAgICAgICAgIHZhciBpdGVt
SWQgPSBpdGVtLmNvbnN0cnVjdG9yTmFtZSArICI6IiArIGNoaWxkQWRkcjsKLSAgICAgICAgICAg
ICAgICBpZiAoKGl0ZW0uY29uc3RydWN0b3JOYW1lID09PSAiT2JqZWN0IiB8fCBpdGVtLmNvbnN0
cnVjdG9yTmFtZSA9PT0gIkFycmF5IikpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEoaXRl
bUlkIGluIHByb2ZpbGUuY2x1c3RlcnMpKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmls
ZS5jbHVzdGVyc1tpdGVtSWRdID0geyBjb25zdHJ1Y3Rvck5hbWU6IGl0ZW1JZCwgcmV0YWluZXJz
OiB7fSB9OwotICAgICAgICAgICAgICAgICAgICBtZXJnZVJldGFpbmVycyhwcm9maWxlLmNsdXN0
ZXJzW2l0ZW1JZF0sIGl0ZW0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBt
ZXJnZVJldGFpbmVycyhwcm9maWxlLmVudHJpZXNbaXRlbS5jb25zdHJ1Y3Rvck5hbWVdLCBpdGVt
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIG1lcmdlUmV0
YWluZXJzKGVudHJ5LCBpdGVtKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIShyZXRhaW5l
ci5jb25zdHJ1Y3Rvck5hbWUgaW4gZW50cnkucmV0YWluZXJzKSkKLSAgICAgICAgICAgICAgIGVu
dHJ5LnJldGFpbmVyc1tyZXRhaW5lci5jb25zdHJ1Y3Rvck5hbWVdID0geyBjb25zdHJ1Y3Rvck5h
bWU6IHJldGFpbmVyLmNvbnN0cnVjdG9yTmFtZSwgY291bnQ6IDAsIGNsdXN0ZXJzOiB7fSB9Owot
ICAgICAgICAgICAgdmFyIHJldGFpbmVyRW50cnkgPSBlbnRyeS5yZXRhaW5lcnNbcmV0YWluZXIu
Y29uc3RydWN0b3JOYW1lXTsKLSAgICAgICAgICAgIHJldGFpbmVyRW50cnkuY291bnQgKz0gaXRl
bS5jb3VudDsKLSAgICAgICAgICAgIGlmIChyZXRhaW5lci5jb25zdHJ1Y3Rvck5hbWUgPT09ICJP
YmplY3QiIHx8IHJldGFpbmVyLmNvbnN0cnVjdG9yTmFtZSA9PT0gIkFycmF5IikKLSAgICAgICAg
ICAgICAgICByZXRhaW5lckVudHJ5LmNsdXN0ZXJzW3JldGFpbmVySWRdID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0sCi0KLSAgICBfcmVzZXREYXRhR3JpZExpc3Q6IGZ1bmN0aW9uKGNhbGxiYWNr
KQotICAgIHsKLSAgICAgICAgdGhpcy5fbG9hZFByb2ZpbGUodGhpcy5fcHJvZmlsZXMoKVt0aGlz
LmJhc2VTZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXhdLCBwcm9maWxlTG9hZGVkLmJpbmQodGhp
cykpOwotCi0gICAgICAgIGZ1bmN0aW9uIHByb2ZpbGVMb2FkZWQocHJvZmlsZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgdGhpcy5iYXNlU25hcHNob3QgPSBwcm9maWxlOwotICAgICAgICAgICAg
dmFyIGxhc3RDb21wYXJhdG9yID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTGlz
dC5wcm9wZXJ0eUNvbXBhcmF0b3IoInNpemUiLCBmYWxzZSk7Ci0gICAgICAgICAgICBpZiAodGhp
cy5zbmFwc2hvdERhdGFHcmlkTGlzdCkKLSAgICAgICAgICAgICAgICBsYXN0Q29tcGFyYXRvciA9
IHRoaXMuc25hcHNob3REYXRhR3JpZExpc3QubGFzdENvbXBhcmF0b3I7Ci0gICAgICAgICAgICB0
aGlzLnNuYXBzaG90RGF0YUdyaWRMaXN0ID0gdGhpcy5fY3JlYXRlU25hcHNob3REYXRhR3JpZExp
c3QoKTsKLSAgICAgICAgICAgIHRoaXMuc25hcHNob3REYXRhR3JpZExpc3Quc29ydChsYXN0Q29t
cGFyYXRvciwgdHJ1ZSk7Ci0gICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICB9Ci0gICAg
fSwKLQotICAgIF9zb3J0RGF0YTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNvcnRB
c2NlbmRpbmcgPSB0aGlzLmRhdGFHcmlkLnNvcnRPcmRlciA9PT0gImFzY2VuZGluZyI7Ci0gICAg
ICAgIHZhciBzb3J0Q29sdW1uSWRlbnRpZmllciA9IHRoaXMuZGF0YUdyaWQuc29ydENvbHVtbklk
ZW50aWZpZXI7Ci0gICAgICAgIHZhciBzb3J0UHJvcGVydHkgPSB7Ci0gICAgICAgICAgICBjb25z
OiBbImNvbnN0cnVjdG9yTmFtZSIsIG51bGxdLAotICAgICAgICAgICAgY291bnQ6IFsiY291bnQi
LCAiY29uc3RydWN0b3JOYW1lIl0sCi0gICAgICAgICAgICBzaXplOiBbInNpemUiLCAiY29uc3Ry
dWN0b3JOYW1lIl0sCi0gICAgICAgICAgICBjb3VudERlbHRhOiBbdGhpcy5zaG93Q291bnREZWx0
YUFzUGVyY2VudCA/ICJjb3VudERlbHRhUGVyY2VudCIgOiAiY291bnREZWx0YSIsICJjb25zdHJ1
Y3Rvck5hbWUiXSwKLSAgICAgICAgICAgIHNpemVEZWx0YTogW3RoaXMuc2hvd1NpemVEZWx0YUFz
UGVyY2VudCA/ICJzaXplRGVsdGFQZXJjZW50IiA6ICJzaXplRGVsdGEiLCAiY29uc3RydWN0b3JO
YW1lIl0KLSAgICAgICAgfVtzb3J0Q29sdW1uSWRlbnRpZmllcl07Ci0KLSAgICAgICAgdGhpcy5z
bmFwc2hvdERhdGFHcmlkTGlzdC5zb3J0KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3Jp
ZExpc3QucHJvcGVydHlDb21wYXJhdG9yKHNvcnRQcm9wZXJ0eVswXSwgc29ydFByb3BlcnR5WzFd
LCBzb3J0QXNjZW5kaW5nKSk7Ci0KLSAgICAgICAgdGhpcy5yZWZyZXNoKCk7Ci0gICAgfSwKLQot
ICAgIF91cGRhdGVCYXNlT3B0aW9uczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGxp
c3QgPSB0aGlzLl9wcm9maWxlcygpOwotICAgICAgICAvLyBXZSdyZSBhc3N1bWluZyB0aGF0IHNu
YXBzaG90cyBjYW4gb25seSBiZSBhZGRlZC4KLSAgICAgICAgaWYgKHRoaXMuYmFzZVNlbGVjdEVs
ZW1lbnQubGVuZ3RoID09PSBsaXN0Lmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBmb3IgKHZhciBpID0gdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5sZW5ndGgsIG4gPSBsaXN0
Lmxlbmd0aDsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgdmFyIGJhc2VPcHRpb24gPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKLSAgICAgICAgICAgIHZhciB0aXRsZSA9IGxp
c3RbaV0udGl0bGU7Ci0gICAgICAgICAgICBpZiAoIXRpdGxlLmluZGV4T2YoVXNlckluaXRpYXRl
ZFByb2ZpbGVOYW1lKSkKLSAgICAgICAgICAgICAgICB0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiU25hcHNob3QgJWQiLCB0aXRsZS5zdWJzdHJpbmcoVXNlckluaXRpYXRlZFByb2ZpbGVO
YW1lLmxlbmd0aCArIDEpKTsKLSAgICAgICAgICAgIGJhc2VPcHRpb24ubGFiZWwgPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkNvbXBhcmVkIHRvICVzIiwgdGl0bGUpOwotICAgICAgICAgICAgdGhp
cy5iYXNlU2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChiYXNlT3B0aW9uKTsKLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICBfdXBkYXRlUGVyY2VudEJ1dHRvbjogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgaWYgKHRoaXMuX2lzU2hvd2luZ0FzUGVyY2VudCkgewotICAgICAgICAgICAgdGhpcy5w
ZXJjZW50QnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IGFic29sdXRl
IGNvdW50cyBhbmQgc2l6ZXMuIik7Ci0gICAgICAgICAgICB0aGlzLnBlcmNlbnRCdXR0b24udG9n
Z2xlZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLnBlcmNlbnRC
dXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgY291bnRzIGFuZCBzaXpl
cyBhcyBwZXJjZW50YWdlcy4iKTsKLSAgICAgICAgICAgIHRoaXMucGVyY2VudEJ1dHRvbi50b2dn
bGVkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3VwZGF0ZVN1bW1hcnlHcmFw
aDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5jb3VudHNTdW1tYXJ5QmFyLmNhbGN1
bGF0b3Iuc2hvd0FzUGVyY2VudCA9IHRoaXMuX2lzU2hvd2luZ0FzUGVyY2VudDsKLSAgICAgICAg
dGhpcy5jb3VudHNTdW1tYXJ5QmFyLnVwZGF0ZSh0aGlzLnByb2ZpbGUubG93bGV2ZWxzKTsKLQot
ICAgICAgICB0aGlzLnNpemVzU3VtbWFyeUJhci5jYWxjdWxhdG9yLnNob3dBc1BlcmNlbnQgPSB0
aGlzLl9pc1Nob3dpbmdBc1BlcmNlbnQ7Ci0gICAgICAgIHRoaXMuc2l6ZXNTdW1tYXJ5QmFyLnVw
ZGF0ZSh0aGlzLnByb2ZpbGUubG93bGV2ZWxzKTsKLSAgICB9Ci19OwotCi1XZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcu
cHJvdG90eXBlOwotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5TZWFyY2hIZWxwZXIg
PSB7Ci0gICAgLy8gSW4gY29tcGFyYXRvcnMsIHdlIGFzc3VtZSB0aGF0IGEgdmFsdWUgZnJvbSBh
IG5vZGUgaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCi0gICAgb3BlcmF0aW9uczog
ewotICAgICAgICBMRVNTOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAhPT0gbnVsbCAmJiBh
IDwgYjsgfSwKLSAgICAgICAgTEVTU19PUl9FUVVBTDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJu
IGEgIT09IG51bGwgJiYgYSA8PSBiOyB9LAotICAgICAgICBFUVVBTDogZnVuY3Rpb24gKGEsIGIp
IHsgcmV0dXJuIGEgIT09IG51bGwgJiYgYSA9PT0gYjsgfSwKLSAgICAgICAgR1JFQVRFUl9PUl9F
UVVBTDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgIT09IG51bGwgJiYgYSA+PSBiOyB9LAot
ICAgICAgICBHUkVBVEVSOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAhPT0gbnVsbCAmJiBh
ID4gYjsgfQotICAgIH0sCi0KLSAgICBvcGVyYXRpb25QYXJzZXJzOiB7Ci0gICAgICAgIExFU1M6
IC9ePChcZCspLywKLSAgICAgICAgTEVTU19PUl9FUVVBTDogL148PShcZCspLywKLSAgICAgICAg
R1JFQVRFUl9PUl9FUVVBTDogL14+PShcZCspLywKLSAgICAgICAgR1JFQVRFUjogL14+KFxkKykv
Ci0gICAgfSwKLQotICAgIHBhcnNlT3BlcmF0aW9uQW5kTnVtYmVyOiBmdW5jdGlvbihxdWVyeSkK
LSAgICB7Ci0gICAgICAgIHZhciBvcGVyYXRpb25zID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFZpZXcuU2VhcmNoSGVscGVyLm9wZXJhdGlvbnM7Ci0gICAgICAgIHZhciBwYXJzZXJzID0gV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcuU2VhcmNoSGVscGVyLm9wZXJhdGlvblBhcnNlcnM7
Ci0gICAgICAgIGZvciAodmFyIG9wZXJhdGlvbiBpbiBwYXJzZXJzKSB7Ci0gICAgICAgICAgICB2
YXIgbWF0Y2ggPSBxdWVyeS5tYXRjaChwYXJzZXJzW29wZXJhdGlvbl0pOwotICAgICAgICAgICAg
aWYgKG1hdGNoICE9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBbb3BlcmF0aW9uc1tv
cGVyYXRpb25dLCBwYXJzZUZsb2F0KG1hdGNoWzFdKV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIFtvcGVyYXRpb25zLkVRVUFMLCBwYXJzZUZsb2F0KHF1ZXJ5KV07Ci0gICAgfSwKLQotICAg
IHBlcmNlbnRzOiAvJSQvLAotCi0gICAgbWVnYUJ5dGVzOiAvTUIkL2ksCi0KLSAgICBraWxvQnl0
ZXM6IC9LQiQvaSwKLQotICAgIGJ5dGVzOiAvQiQvaQotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFN1
bW1hcnlDYWxjdWxhdG9yID0gZnVuY3Rpb24obG93TGV2ZWxGaWVsZCkKLXsKLSAgICB0aGlzLnRv
dGFsID0gMTsKLSAgICB0aGlzLmxvd0xldmVsRmllbGQgPSBsb3dMZXZlbEZpZWxkOwotfQotCi1X
ZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDYWxjdWxhdG9yLnByb3RvdHlwZSA9IHsKLSAgICBjb21w
dXRlU3VtbWFyeVZhbHVlczogZnVuY3Rpb24obG93TGV2ZWxzKQotICAgIHsKLSAgICAgICAgdmFy
IGhpZ2hMZXZlbHMgPSB7IGRhdGE6IDAsIGNvZGU6IDAgfTsKLSAgICAgICAgdGhpcy50b3RhbCA9
IDA7Ci0gICAgICAgIGZvciAodmFyIGl0ZW0gaW4gbG93TGV2ZWxzKSB7Ci0gICAgICAgICAgICB2
YXIgaGlnaEl0ZW0gPSB0aGlzLl9oaWdoRnJvbUxvdyhpdGVtKTsKLSAgICAgICAgICAgIGlmICho
aWdoSXRlbSkgewotICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxvd0xldmVsc1tpdGVtXVt0
aGlzLmxvd0xldmVsRmllbGRdOwotICAgICAgICAgICAgICAgIGhpZ2hMZXZlbHNbaGlnaEl0ZW1d
ICs9IHZhbHVlOwotICAgICAgICAgICAgICAgIHRoaXMudG90YWwgKz0gdmFsdWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIHJlc3VsdCA9IHsgY2F0ZWdvcnlWYWx1ZXM6
IGhpZ2hMZXZlbHMgfTsKLSAgICAgICAgaWYgKCF0aGlzLnNob3dBc1BlcmNlbnQpCi0gICAgICAg
ICAgICByZXN1bHQudG90YWwgPSB0aGlzLnRvdGFsOwotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0sCi0KLSAgICBmb3JtYXRWYWx1ZTogZnVuY3Rpb24odmFsdWUpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5zaG93QXNQZXJjZW50KQotICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiJS4yZiUlIiwgdmFsdWUgLyB0aGlzLnRvdGFsICogMTAwLjApOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVUb1N0cmluZyh2YWx1ZSk7Ci0g
ICAgfSwKLQotICAgIGdldCBzaG93QXNQZXJjZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9zaG93QXNQZXJjZW50OwotICAgIH0sCi0KLSAgICBzZXQgc2hvd0FzUGVyY2VudCh4KQot
ICAgIHsKLSAgICAgICAgdGhpcy5fc2hvd0FzUGVyY2VudCA9IHg7Ci0gICAgfQotfQotCi1XZWJJ
bnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3IgPSBmdW5jdGlvbigpCi17Ci0gICAg
V2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5jYWxsKHRoaXMsICJjb3VudCIpOwot
fQotCi1XZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3IucHJvdG90eXBlID0g
ewotICAgIF9oaWdoRnJvbUxvdzogZnVuY3Rpb24odHlwZSkKLSAgICB7Ci0gICAgICAgIGlmICh0
eXBlID09PSAiQ09ERV9UWVBFIiB8fCB0eXBlID09PSAiU0hBUkVEX0ZVTkNUSU9OX0lORk9fVFlQ
RSIgfHwgdHlwZSA9PT0gIlNDUklQVF9UWVBFIikgcmV0dXJuICJjb2RlIjsKLSAgICAgICAgaWYg
KHR5cGUgPT09ICJTVFJJTkdfVFlQRSIgfHwgdHlwZSA9PT0gIkhFQVBfTlVNQkVSX1RZUEUiIHx8
IHR5cGUubWF0Y2goL15KU18vKSkgcmV0dXJuICJkYXRhIjsKLSAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgfSwKLQotICAgIF92YWx1ZVRvU3RyaW5nOiBmdW5jdGlvbih2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9y
LkhlYXBTdW1tYXJ5Q291bnRDYWxjdWxhdG9yLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuSGVhcFN1bW1hcnlDYWxjdWxhdG9yLnByb3RvdHlwZTsKLQotV2ViSW5zcGVjdG9yLkhl
YXBTdW1tYXJ5U2l6ZUNhbGN1bGF0b3IgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9y
LkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5jYWxsKHRoaXMsICJzaXplIik7Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5IZWFwU3VtbWFyeVNpemVDYWxjdWxhdG9yLnByb3RvdHlwZSA9IHsKLSAgICBfaGlnaEZy
b21Mb3c6IGZ1bmN0aW9uKHR5cGUpCi0gICAgewotICAgICAgICBpZiAodHlwZSA9PT0gIkNPREVf
VFlQRSIgfHwgdHlwZSA9PT0gIlNIQVJFRF9GVU5DVElPTl9JTkZPX1RZUEUiIHx8IHR5cGUgPT09
ICJTQ1JJUFRfVFlQRSIpCi0gICAgICAgICAgICByZXR1cm4gImNvZGUiOwotICAgICAgICBpZiAo
dHlwZSA9PT0gIlNUUklOR19UWVBFIiB8fCB0eXBlID09PSAiSEVBUF9OVU1CRVJfVFlQRSIgfHwg
dHlwZS5tYXRjaCgvXkpTXy8pIHx8IHR5cGUubWF0Y2goL19BUlJBWV9UWVBFJC8pKQotICAgICAg
ICAgICAgcmV0dXJuICJkYXRhIjsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAg
IF92YWx1ZVRvU3RyaW5nOiBOdW1iZXIuYnl0ZXNUb1N0cmluZwotfQotCi1XZWJJbnNwZWN0b3Iu
SGVhcFN1bW1hcnlTaXplQ2FsY3VsYXRvci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVj
dG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5wcm90b3R5cGU7Ci0KLVdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzID0gZnVuY3Rpb24ob3duaW5nVHJlZSkK
LXsKLSAgICB0aGlzLnRyZWUgPSBvd25pbmdUcmVlOwotCi0gICAgV2ViSW5zcGVjdG9yLkRhdGFH
cmlkTm9kZS5jYWxsKHRoaXMsIG51bGwsIHRoaXMuX2hhc1JldGFpbmVycyk7Ci0KLSAgICB0aGlz
LmFkZEV2ZW50TGlzdGVuZXIoInBvcHVsYXRlIiwgdGhpcy5fcG9wdWxhdGUsIHRoaXMpOwotfTsK
LQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJv
dG90eXBlID0gewotICAgIGlzRW1wdHlTZXQ6IGZ1bmN0aW9uKHNldCkKLSAgICB7Ci0gICAgICAg
IGZvciAodmFyIHggaW4gc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgZ2V0IF9oYXNSZXRhaW5lcnMoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuICF0aGlzLmlzRW1wdHlTZXQodGhpcy5yZXRhaW5lcnMpOwotICAgIH0sCi0K
LSAgICBnZXQgX3BhcmVudCgpCi0gICAgewotICAgICAgICAvLyBGb3IgdG9wLWxldmVsIG5vZGVz
LCByZXR1cm4gb3duaW5nIHRyZWUgYXMgYSBwYXJlbnQsIG5vdCBkYXRhIGdyaWQuCi0gICAgICAg
IHJldHVybiB0aGlzLnBhcmVudCAhPT0gdGhpcy5kYXRhR3JpZCA/IHRoaXMucGFyZW50IDogdGhp
cy50cmVlOwotICAgIH0sCi0KLSAgICBfcG9wdWxhdGU6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgZnVuY3Rpb24gYXBwZW5kRGlmZkVudHJ5KGJhc2VJdGVtLCBzbmFwc2hvdEl0ZW0p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3REYXRhR3JpZFJldGFpbmVyTm9kZSh0aGlzLnNuYXBzaG90VmlldywgYmFz
ZUl0ZW0sIHNuYXBzaG90SXRlbSwgdGhpcy50cmVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0
aGlzLnByb2R1Y2VEaWZmKHRoaXMuYmFzZVJldGFpbmVycywgdGhpcy5yZXRhaW5lcnMsIGFwcGVu
ZERpZmZFbnRyeS5iaW5kKHRoaXMpKTsKLQotICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7Ci0g
ICAgICAgICAgICB2YXIgY3VycmVudENvbXBhcmF0b3IgPSB0aGlzLl9wYXJlbnQubGFzdENvbXBh
cmF0b3I7Ci0gICAgICAgICAgICBpZiAoY3VycmVudENvbXBhcmF0b3IpCi0gICAgICAgICAgICAg
ICAgdGhpcy5zb3J0KGN1cnJlbnRDb21wYXJhdG9yLCB0cnVlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wdWxhdGUiLCB0aGlzLl9wb3B1bGF0ZSwg
dGhpcyk7Ci0gICAgfSwKLQotICAgIHByb2R1Y2VEaWZmOiBmdW5jdGlvbihiYXNlRW50cmllcywg
Y3VycmVudEVudHJpZXMsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaXRlbSBp
biBjdXJyZW50RW50cmllcykKLSAgICAgICAgICAgIGNhbGxiYWNrKGJhc2VFbnRyaWVzW2l0ZW1d
LCBjdXJyZW50RW50cmllc1tpdGVtXSk7Ci0KLSAgICAgICAgZm9yIChpdGVtIGluIGJhc2VFbnRy
aWVzKSB7Ci0gICAgICAgICAgICBpZiAoIShpdGVtIGluIGN1cnJlbnRFbnRyaWVzKSkKLSAgICAg
ICAgICAgICAgICBjYWxsYmFjayhiYXNlRW50cmllc1tpdGVtXSwgbnVsbCk7Ci0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgc29ydDogZnVuY3Rpb24oY29tcGFyYXRvciwgZm9yY2UpIHsKLSAgICAg
ICAgaWYgKCFmb3JjZSAmJiB0aGlzLmxhc3RDb21wYXJhdG9yID09PSBjb21wYXJhdG9yKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuY2hpbGRyZW4uc29ydChjb21wYXJhdG9y
KTsKLSAgICAgICAgdmFyIGNoaWxkQ291bnQgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsKLSAgICAg
ICAgZm9yICh2YXIgY2hpbGRJbmRleCA9IDA7IGNoaWxkSW5kZXggPCBjaGlsZENvdW50OyArK2No
aWxkSW5kZXgpCi0gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2NoaWxkSW5kZXhdLl9yZWNhbGN1
bGF0ZVNpYmxpbmdzKGNoaWxkSW5kZXgpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMu
Y2hpbGRyZW5baV07Ci0gICAgICAgICAgICBpZiAoIWZvcmNlICYmICghY2hpbGQuZXhwYW5kZWQg
fHwgY2hpbGQubGFzdENvbXBhcmF0b3IgPT09IGNvbXBhcmF0b3IpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgY2hpbGQuc29ydChjb21wYXJhdG9yLCBmb3JjZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgdGhpcy5sYXN0Q29tcGFyYXRvciA9IGNvbXBhcmF0b3I7Ci0gICAg
fSwKLQotICAgIHNpZ25Gb3JEZWx0YTogZnVuY3Rpb24oZGVsdGEpIHsKLSAgICAgICAgaWYgKGRl
bHRhID09PSAwKQotICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICBpZiAoZGVsdGEgPiAw
KQotICAgICAgICAgICAgcmV0dXJuICIrIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0
dXJuICJcdTIyMTIiOyAgLy8gTWF0aCBtaW51cyBzaWduLCBzYW1lIHdpZHRoIGFzIHBsdXMuCi0g
ICAgfSwKLQotICAgIHNob3dEZWx0YUFzUGVyY2VudDogZnVuY3Rpb24odmFsdWUpCi0gICAgewot
ICAgICAgICBpZiAodmFsdWUgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkKLSAgICAgICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIm5ldyIpOwotICAgICAgICBlbHNlIGlm
ICh2YWx1ZSA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKQotICAgICAgICAgICAgcmV0dXJu
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiZGVsZXRlZCIpOwotICAgICAgICBpZiAodmFsdWUgPiAx
MDAwLjApCi0gICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyA+MTAw
MCUlIiwgdGhpcy5zaWduRm9yRGVsdGEodmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiJXMlLjJmJSUiLCB0aGlzLnNpZ25Gb3JEZWx0YSh2YWx1ZSksIE1hdGgu
YWJzKHZhbHVlKSk7Ci0gICAgfSwKLQotICAgIGdldFRvdGFsQ291bnQ6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIGlmICghdGhpcy5fY291bnQpIHsKLSAgICAgICAgICAgIHRoaXMuX2NvdW50
ID0gMDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdGhpcy5jaGlsZHJlbi5sZW5n
dGg7IGkgPCBuOyArK2kpCi0gICAgICAgICAgICAgICAgdGhpcy5fY291bnQgKz0gdGhpcy5jaGls
ZHJlbltpXS5jb3VudDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5fY291bnQ7Ci0g
ICAgfSwKLQotICAgIGdldFRvdGFsU2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYg
KCF0aGlzLl9zaXplKSB7Ci0gICAgICAgICAgICB0aGlzLl9zaXplID0gMDsKLSAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwLCBuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpCi0g
ICAgICAgICAgICAgICAgdGhpcy5fc2l6ZSArPSB0aGlzLmNoaWxkcmVuW2ldLnNpemU7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7Ci0gICAgfSwKLQotICAgIGdldCBjb3Vu
dFBlcmNlbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuY291bnQgLyB0aGlzLl9wYXJl
bnQuZ2V0VG90YWxDb3VudCgpICogMTAwLjA7Ci0gICAgfSwKLQotICAgIGdldCBzaXplUGVyY2Vu
dCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5zaXplIC8gdGhpcy5fcGFyZW50LmdldFRv
dGFsU2l6ZSgpICogMTAwLjA7Ci0gICAgfSwKLQotICAgIGdldCBjb3VudERlbHRhUGVyY2VudCgp
Ci0gICAgewotICAgICAgICBpZiAodGhpcy5iYXNlQ291bnQgPiAwKSB7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5jb3VudCA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291bnREZWx0
YSAvIHRoaXMuYmFzZUNvdW50ICogMTAwLjA7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIE51bWJlci5ORUdBVElWRV9JTkZJTklUWTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICByZXR1cm4gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwotICAgIH0sCi0KLSAg
ICBnZXQgc2l6ZURlbHRhUGVyY2VudCgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5iYXNlU2l6
ZSA+IDApIHsKLSAgICAgICAgICAgIGlmICh0aGlzLnNpemUgPiAwKQotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLnNpemVEZWx0YSAvIHRoaXMuYmFzZVNpemUgKiAxMDAuMDsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZ
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5G
SU5JVFk7Ci0gICAgfSwKLQotICAgIGdldCBkYXRhKCkKLSAgICB7Ci0gICAgICAgIHZhciBkYXRh
ID0ge307Ci0KLSAgICAgICAgZGF0YVsiY29ucyJdID0gdGhpcy5jb25zdHJ1Y3Rvck5hbWU7Ci0K
LSAgICAgICAgaWYgKHRoaXMuc25hcHNob3RWaWV3LnNob3dDb3VudEFzUGVyY2VudCkKLSAgICAg
ICAgICAgIGRhdGFbImNvdW50Il0gPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMmYlJSIsIHRo
aXMuY291bnRQZXJjZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGF0YVsiY291bnQi
XSA9IHRoaXMuY291bnQ7Ci0KLSAgICAgICAgaWYgKHRoaXMuc2l6ZSAhPT0gbnVsbCkgewotICAg
ICAgICAgICAgaWYgKHRoaXMuc25hcHNob3RWaWV3LnNob3dTaXplQXNQZXJjZW50KQotICAgICAg
ICAgICAgICAgIGRhdGFbInNpemUiXSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4yZiUlIiwg
dGhpcy5zaXplUGVyY2VudCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZGF0
YVsic2l6ZSJdID0gTnVtYmVyLmJ5dGVzVG9TdHJpbmcodGhpcy5zaXplKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBkYXRhWyJzaXplIl0gPSAiIjsKLQotICAgICAgICBpZiAodGhpcy5z
bmFwc2hvdFZpZXcuc2hvd0NvdW50RGVsdGFBc1BlcmNlbnQpCi0gICAgICAgICAgICBkYXRhWyJj
b3VudERlbHRhIl0gPSB0aGlzLnNob3dEZWx0YUFzUGVyY2VudCh0aGlzLmNvdW50RGVsdGFQZXJj
ZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGF0YVsiY291bnREZWx0YSJdID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCIlcyVkIiwgdGhpcy5zaWduRm9yRGVsdGEodGhpcy5jb3VudERl
bHRhKSwgTWF0aC5hYnModGhpcy5jb3VudERlbHRhKSk7Ci0KLSAgICAgICAgaWYgKHRoaXMuc2l6
ZURlbHRhICE9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdFZpZXcuc2hv
d1NpemVEZWx0YUFzUGVyY2VudCkKLSAgICAgICAgICAgICAgICBkYXRhWyJzaXplRGVsdGEiXSA9
IHRoaXMuc2hvd0RlbHRhQXNQZXJjZW50KHRoaXMuc2l6ZURlbHRhUGVyY2VudCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZGF0YVsic2l6ZURlbHRhIl0gPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIiVzJXMiLCB0aGlzLnNpZ25Gb3JEZWx0YSh0aGlzLnNpemVEZWx0YSksIE51
bWJlci5ieXRlc1RvU3RyaW5nKE1hdGguYWJzKHRoaXMuc2l6ZURlbHRhKSkpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGRhdGFbInNpemVEZWx0YSJdID0gIiI7Ci0KLSAgICAgICAgcmV0
dXJuIGRhdGE7Ci0gICAgfSwKLQotICAgIGNyZWF0ZUNlbGw6IGZ1bmN0aW9uKGNvbHVtbklkZW50
aWZpZXIpCi0gICAgewotICAgICAgICB2YXIgY2VsbCA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5v
ZGUucHJvdG90eXBlLmNyZWF0ZUNlbGwuY2FsbCh0aGlzLCBjb2x1bW5JZGVudGlmaWVyKTsKLQot
ICAgICAgICBpZiAoKGNvbHVtbklkZW50aWZpZXIgPT09ICJjb25zIiAmJiB0aGlzLl9zZWFyY2hN
YXRjaGVkQ29uc0NvbHVtbikgfHwKLSAgICAgICAgICAgIChjb2x1bW5JZGVudGlmaWVyID09PSAi
Y291bnQiICYmIHRoaXMuX3NlYXJjaE1hdGNoZWRDb3VudENvbHVtbikgfHwKLSAgICAgICAgICAg
IChjb2x1bW5JZGVudGlmaWVyID09PSAic2l6ZSIgJiYgdGhpcy5fc2VhcmNoTWF0Y2hlZFNpemVD
b2x1bW4pIHx8Ci0gICAgICAgICAgICAoY29sdW1uSWRlbnRpZmllciA9PT0gImNvdW50RGVsdGEi
ICYmIHRoaXMuX3NlYXJjaE1hdGNoZWRDb3VudERlbHRhQ29sdW1uKSB8fAotICAgICAgICAgICAg
KGNvbHVtbklkZW50aWZpZXIgPT09ICJzaXplRGVsdGEiICYmIHRoaXMuX3NlYXJjaE1hdGNoZWRT
aXplRGVsdGFDb2x1bW4pKQotICAgICAgICAgICAgY2VsbC5hZGRTdHlsZUNsYXNzKCJoaWdobGln
aHQiKTsKLQotICAgICAgICByZXR1cm4gY2VsbDsKLSAgICB9Ci19OwotCi1XZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGUuX19wcm90b19f
ID0gV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGU7Ci0KLVdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3REYXRhR3JpZE5vZGUgPSBmdW5jdGlvbihzbmFwc2hvdFZpZXcsIGJhc2VFbnRy
eSwgc25hcHNob3RFbnRyeSwgb3duaW5nVHJlZSkKLXsKLSAgICB0aGlzLnNuYXBzaG90VmlldyA9
IHNuYXBzaG90VmlldzsKLQotICAgIGlmICghc25hcHNob3RFbnRyeSkKLSAgICAgICAgc25hcHNo
b3RFbnRyeSA9IHsgY29uc3RydWN0b3JOYW1lOiBiYXNlRW50cnkuY29uc3RydWN0b3JOYW1lLCBj
b3VudDogMCwgc2l6ZTogMCwgcmV0YWluZXJzOiB7fSB9OwotICAgIHRoaXMuY29uc3RydWN0b3JO
YW1lID0gc25hcHNob3RFbnRyeS5jb25zdHJ1Y3Rvck5hbWU7Ci0gICAgdGhpcy5jb3VudCA9IHNu
YXBzaG90RW50cnkuY291bnQ7Ci0gICAgdGhpcy5zaXplID0gc25hcHNob3RFbnRyeS5zaXplOwot
ICAgIHRoaXMucmV0YWluZXJzID0gc25hcHNob3RFbnRyeS5yZXRhaW5lcnM7Ci0KLSAgICBpZiAo
IWJhc2VFbnRyeSkKLSAgICAgICAgYmFzZUVudHJ5ID0geyBjb3VudDogMCwgc2l6ZTogMCwgcmV0
YWluZXJzOiB7fSB9OwotICAgIHRoaXMuYmFzZUNvdW50ID0gYmFzZUVudHJ5LmNvdW50OwotICAg
IHRoaXMuY291bnREZWx0YSA9IHRoaXMuY291bnQgLSB0aGlzLmJhc2VDb3VudDsKLSAgICB0aGlz
LmJhc2VTaXplID0gYmFzZUVudHJ5LnNpemU7Ci0gICAgdGhpcy5zaXplRGVsdGEgPSB0aGlzLnNp
emUgLSB0aGlzLmJhc2VTaXplOwotICAgIHRoaXMuYmFzZVJldGFpbmVycyA9IGJhc2VFbnRyeS5y
ZXRhaW5lcnM7Ci0KLSAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0
aFJldGFpbmVycy5jYWxsKHRoaXMsIG93bmluZ1RyZWUpOwotfTsKLQotV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdERhdGFHcmlkTm9kZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlOwotCi1XZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0ID0gZnVuY3Rpb24oc25hcHNob3RWaWV3
LCBiYXNlRW50cmllcywgc25hcHNob3RFbnRyaWVzKQotewotICAgIHRoaXMudHJlZSA9IHRoaXM7
Ci0gICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7Ci0gICAgdGhpcy5jaGlsZHJl
biA9IFtdOwotICAgIHRoaXMubGFzdENvbXBhcmF0b3IgPSBudWxsOwotICAgIHRoaXMucG9wdWxh
dGVDaGlsZHJlbihiYXNlRW50cmllcywgc25hcHNob3RFbnRyaWVzKTsKLX07Ci0KLVdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvdG90eXBlID0gewotICAgIGFwcGVuZENo
aWxkOiBmdW5jdGlvbihjaGlsZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGQoY2hp
bGQsIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTsKLSAgICB9LAotCi0gICAgaW5zZXJ0Q2hpbGQ6IGZ1
bmN0aW9uKGNoaWxkLCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNl
KGluZGV4LCAwLCBjaGlsZCk7Ci0gICAgfSwKLQotICAgIHJlbW92ZUNoaWxkcmVuOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107Ci0gICAgfSwKLQotICAgIHBv
cHVsYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKGJhc2VFbnRyaWVzLCBzbmFwc2hvdEVudHJpZXMpCi0g
ICAgewotICAgICAgICBmdW5jdGlvbiBhcHBlbmRMaXN0RW50cnkoYmFzZUl0ZW0sIHNuYXBzaG90
SXRlbSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChuZXcgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZSh0aGlzLnNuYXBzaG90VmlldywgYmFzZUl0
ZW0sIHNuYXBzaG90SXRlbSwgdGhpcykpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMucHJvZHVj
ZURpZmYoYmFzZUVudHJpZXMsIHNuYXBzaG90RW50cmllcywgYXBwZW5kTGlzdEVudHJ5LmJpbmQo
dGhpcykpOwotICAgIH0sCi0KLSAgICBwcm9kdWNlRGlmZjogV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLnByb2R1Y2VEaWZmLAotICAg
IHNvcnQ6IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJz
LnByb3RvdHlwZS5zb3J0LAotICAgIGdldFRvdGFsQ291bnQ6IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5nZXRUb3RhbENvdW50LAot
ICAgIGdldFRvdGFsU2l6ZTogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdp
dGhSZXRhaW5lcnMucHJvdG90eXBlLmdldFRvdGFsU2l6ZQotfTsKLQotV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdERhdGFHcmlkTGlzdC5wcm9wZXJ0eUNvbXBhcmF0b3JzID0gW3t9LCB7fV07Ci0K
LVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvcGVydHlDb21wYXJhdG9y
ID0gZnVuY3Rpb24ocHJvcGVydHksIHByb3BlcnR5MiwgaXNBc2NlbmRpbmcpCi17Ci0gICAgdmFy
IHByb3BlcnR5SGFzaCA9IHByb3BlcnR5ICsgIiMiICsgcHJvcGVydHkyOwotICAgIHZhciBjb21w
YXJhdG9yID0gdGhpcy5wcm9wZXJ0eUNvbXBhcmF0b3JzWyhpc0FzY2VuZGluZyA/IDEgOiAwKV1b
cHJvcGVydHlIYXNoXTsKLSAgICBpZiAoIWNvbXBhcmF0b3IpIHsKLSAgICAgICAgY29tcGFyYXRv
ciA9IGZ1bmN0aW9uKGxocywgcmhzKSB7Ci0gICAgICAgICAgICB2YXIgbCA9IGxoc1twcm9wZXJ0
eV0sIHIgPSByaHNbcHJvcGVydHldOwotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDA7Ci0gICAg
ICAgICAgICBpZiAobCAhPT0gbnVsbCAmJiByICE9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gbCA8IHIgPyAtMSA6IChsID4gciA/IDEgOiAwKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChyZXN1bHQgIT09IDAgfHwgcHJvcGVydHkyID09PSBudWxsKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGlzQXNjZW5kaW5nID8gcmVzdWx0IDogLXJlc3VsdDsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbCA9IGxoc1twcm9wZXJ0eTJdOwotICAg
ICAgICAgICAgICAgIHIgPSByaHNbcHJvcGVydHkyXTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
bCA8IHIgPyAtMSA6IChsID4gciA/IDEgOiAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsK
LSAgICAgICAgdGhpcy5wcm9wZXJ0eUNvbXBhcmF0b3JzWyhpc0FzY2VuZGluZyA/IDEgOiAwKV1b
cHJvcGVydHlIYXNoXSA9IGNvbXBhcmF0b3I7Ci0gICAgfQotICAgIHJldHVybiBjb21wYXJhdG9y
OwotfTsKLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkUmV0YWluZXJOb2RlID0g
ZnVuY3Rpb24oc25hcHNob3RWaWV3LCBiYXNlRW50cnksIHNuYXBzaG90RW50cnksIG93bmluZ1Ry
ZWUpCi17Ci0gICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7Ci0KLSAgICBpZiAo
IXNuYXBzaG90RW50cnkpCi0gICAgICAgIHNuYXBzaG90RW50cnkgPSB7IGNvbnN0cnVjdG9yTmFt
ZTogYmFzZUVudHJ5LmNvbnN0cnVjdG9yTmFtZSwgY291bnQ6IDAsIGNsdXN0ZXJzOiB7fSB9Owot
ICAgIHRoaXMuY29uc3RydWN0b3JOYW1lID0gc25hcHNob3RFbnRyeS5jb25zdHJ1Y3Rvck5hbWU7
Ci0gICAgdGhpcy5jb3VudCA9IHNuYXBzaG90RW50cnkuY291bnQ7Ci0gICAgdGhpcy5yZXRhaW5l
cnMgPSB0aGlzLl9jYWxjdWxhdGVSZXRhaW5lcnModGhpcy5zbmFwc2hvdFZpZXcucHJvZmlsZSwg
c25hcHNob3RFbnRyeS5jbHVzdGVycyk7Ci0KLSAgICBpZiAoIWJhc2VFbnRyeSkKLSAgICAgICAg
YmFzZUVudHJ5ID0geyBjb3VudDogMCwgY2x1c3RlcnM6IHt9IH07Ci0gICAgdGhpcy5iYXNlQ291
bnQgPSBiYXNlRW50cnkuY291bnQ7Ci0gICAgdGhpcy5jb3VudERlbHRhID0gdGhpcy5jb3VudCAt
IHRoaXMuYmFzZUNvdW50OwotICAgIHRoaXMuYmFzZVJldGFpbmVycyA9IHRoaXMuX2NhbGN1bGF0
ZVJldGFpbmVycyh0aGlzLnNuYXBzaG90Vmlldy5iYXNlU25hcHNob3QsIGJhc2VFbnRyeS5jbHVz
dGVycyk7Ci0KLSAgICB0aGlzLnNpemUgPSBudWxsOwotICAgIHRoaXMuc2l6ZURlbHRhID0gbnVs
bDsKLQotICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWlu
ZXJzLmNhbGwodGhpcywgb3duaW5nVHJlZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3REYXRhR3JpZFJldGFpbmVyTm9kZS5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IHNpemVQZXJjZW50
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAgICBnZXQgc2l6ZURl
bHRhUGVyY2VudCgpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAotCi0gICAg
X2NhbGN1bGF0ZVJldGFpbmVyczogZnVuY3Rpb24oc25hcHNob3QsIGNsdXN0ZXJzKQotICAgIHsK
LSAgICAgICAgdmFyIHJldGFpbmVycyA9IHt9OwotICAgICAgICBpZiAodGhpcy5pc0VtcHR5U2V0
KGNsdXN0ZXJzKSkgewotICAgICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3JOYW1lIGluIHNu
YXBzaG90LmVudHJpZXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90LmVudHJpZXNb
dGhpcy5jb25zdHJ1Y3Rvck5hbWVdLnJldGFpbmVyczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIEluIGNhc2Ugd2hlbiBhbiBlbnRyeSBpcyByZXRhaW5lZCBieSBjbHVzdGVycywg
d2UgbmVlZCB0byBnYXRoZXIgdXAgdGhlIGxpc3QKLSAgICAgICAgICAgIC8vIG9mIHJldGFpbmVy
cyBieSBtZXJnaW5nIHJldGFpbmVycyBvZiBldmVyeSBjbHVzdGVyLgotICAgICAgICAgICAgLy8g
RS5nLiBoYXZpbmcgc3VjaCBhIHRyZWU6Ci0gICAgICAgICAgICAvLyAgIEEKLSAgICAgICAgICAg
IC8vICAgICBPYmplY3Q6MSAgMTAKLSAgICAgICAgICAgIC8vICAgICAgIFggICAgICAgMwotICAg
ICAgICAgICAgLy8gICAgICAgWSAgICAgICA0Ci0gICAgICAgICAgICAvLyAgICAgT2JqZWN0OjIg
IDUKLSAgICAgICAgICAgIC8vICAgICAgIFggICAgICAgNgotICAgICAgICAgICAgLy8KLSAgICAg
ICAgICAgIC8vIHdpbGwgcmVzdWx0IGluIGEgZm9sbG93aW5nIHJldGFpbmVycyBsaXN0OiBYIDks
IFkgNC4KLSAgICAgICAgICAgIGZvciAodmFyIGNsdXN0ZXJOYW1lIGluIGNsdXN0ZXJzKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNsdXN0ZXJOYW1lIGluIHNuYXBzaG90LmNsdXN0ZXJzKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBjbHVzdGVyUmV0YWluZXJzID0gc25hcHNob3QuY2x1c3Rl
cnNbY2x1c3Rlck5hbWVdLnJldGFpbmVyczsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIg
Y2x1c3RlclJldGFpbmVyIGluIGNsdXN0ZXJSZXRhaW5lcnMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBjbHVzdGVyUmV0YWluZXJFbnRyeSA9IGNsdXN0ZXJSZXRhaW5lcnNbY2x1c3Rl
clJldGFpbmVyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNsdXN0ZXJSZXRhaW5l
ciBpbiByZXRhaW5lcnMpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbmVyc1tj
bHVzdGVyUmV0YWluZXJdID0geyBjb25zdHJ1Y3Rvck5hbWU6IGNsdXN0ZXJSZXRhaW5lckVudHJ5
LmNvbnN0cnVjdG9yTmFtZSwgY291bnQ6IDAsIGNsdXN0ZXJzOiB7fSB9OwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0YWluZXJzW2NsdXN0ZXJSZXRhaW5lcl0uY291bnQgKz0gY2x1c3RlclJl
dGFpbmVyRW50cnkuY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjbHVz
dGVyUmV0YWluZXJDbHVzdGVyIGluIGNsdXN0ZXJSZXRhaW5lckVudHJ5LmNsdXN0ZXJzKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbmVyc1tjbHVzdGVyUmV0YWluZXJdLmNsdXN0
ZXJzW2NsdXN0ZXJSZXRhaW5lckNsdXN0ZXJdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gcmV0YWluZXJzOwotICAgIH0KLX07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RE
YXRhR3JpZFJldGFpbmVyTm9kZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlOwotCi0KLVdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJ
bnNwZWN0b3IuUHJvZmlsZVR5cGUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UHJvZmlsZVR5cGUuVHlwZUlkLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhFQVAgU05BUFNIT1RT
IikpOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkID0g
IkhFQVAiOwotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBl
ID0gewotICAgIGdldCBidXR0b25Ub29sdGlwKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIlRha2UgaGVhcCBzbmFwc2hvdC4iKTsKLSAgICB9LAotCi0gICAg
Z2V0IGJ1dHRvblN0eWxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiaGVhcC1zbmFwc2hvdC1z
dGF0dXMtYmFyLWl0ZW0gc3RhdHVzLWJhci1pdGVtIjsKLSAgICB9LAotCi0gICAgYnV0dG9uQ2xp
Y2tlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgUHJvZmlsZXJBZ2VudC50YWtlSGVhcFNu
YXBzaG90KGZhbHNlKTsKLSAgICB9LAotCi0gICAgZ2V0IHdlbGNvbWVNZXNzYWdlKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkdldCBhIGhlYXAgc25hcHNo
b3QgYnkgcHJlc3NpbmcgdGhlICVzIGJ1dHRvbiBvbiB0aGUgc3RhdHVzIGJhci4iKTsKLSAgICB9
LAotCi0gICAgY3JlYXRlU2lkZWJhclRyZWVFbGVtZW50Rm9yUHJvZmlsZTogZnVuY3Rpb24ocHJv
ZmlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVTaWRl
YmFyVHJlZUVsZW1lbnQocHJvZmlsZSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTbmFwc2hvdCAl
ZCIpLCAiaGVhcC1zbmFwc2hvdC1zaWRlYmFyLXRyZWUtaXRlbSIpOwotICAgIH0sCi0KLSAgICBj
cmVhdGVWaWV3OiBmdW5jdGlvbihwcm9maWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90VmlldyhXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVz
LCBwcm9maWxlKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxl
VHlwZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLnByb3Rv
dHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJv
ZmlsZXNQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmls
ZXNQYW5lbC5qcwppbmRleCBhMGU0ZTVjLi43ZmNkN2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCkBAIC0xMjYsMTIgKzEy
Niw4IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsID0gZnVuY3Rpb24oKQogICAgIHRoaXMu
X3Jlc2V0KCk7CiAKICAgICB0aGlzLl9yZWdpc3RlclByb2ZpbGVUeXBlKG5ldyBXZWJJbnNwZWN0
b3IuQ1BVUHJvZmlsZVR5cGUoKSk7Ci0gICAgaWYgKFByZWZlcmVuY2VzLmhlYXBQcm9maWxlclBy
ZXNlbnQpIHsKLSAgICAgICAgaWYgKCFQcmVmZXJlbmNlcy5kZXRhaWxlZEhlYXBQcm9maWxlcykK
LSAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyUHJvZmlsZVR5cGUobmV3IFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RQcm9maWxlVHlwZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhp
cy5fcmVnaXN0ZXJQcm9maWxlVHlwZShuZXcgV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RQ
cm9maWxlVHlwZSgpKTsKLSAgICB9CisgICAgaWYgKFByZWZlcmVuY2VzLmhlYXBQcm9maWxlclBy
ZXNlbnQpCisgICAgICAgIHRoaXMuX3JlZ2lzdGVyUHJvZmlsZVR5cGUobmV3IFdlYkluc3BlY3Rv
ci5EZXRhaWxlZEhlYXBzaG90UHJvZmlsZVR5cGUoKSk7CiAKICAgICBJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlcigiUHJvZmlsZXIiLCBuZXcgV2ViSW5zcGVjdG9yLlBy
b2ZpbGVyRGlzcGF0Y2hlcih0aGlzKSk7CiAKQEAgLTQ0MSw5MCArNDM3LDQwIEBAIFdlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIGxvYWRIZWFwU25hcHNob3Q6
IGZ1bmN0aW9uKHVpZCwgY2FsbGJhY2spCiAgICAgewotICAgICAgICB2YXIgcHJvZmlsZSA9IHRo
aXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RQcm9maWxlVHlwZS5UeXBlSWQpXTsKKyAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLl9w
cm9maWxlc0lkTWFwW3RoaXMuX21ha2VLZXkodWlkLCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFw
c2hvdFByb2ZpbGVUeXBlLlR5cGVJZCldOwogICAgICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKCFQcmVmZXJlbmNlcy5kZXRhaWxlZEhlYXBQcm9m
aWxlcykgewotICAgICAgICAgICAgaWYgKHByb2ZpbGUuX2xvYWRlZCkKLSAgICAgICAgICAgICAg
ICBjYWxsYmFjayhwcm9maWxlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByb2ZpbGUuX2lzX2xv
YWRpbmcpCi0gICAgICAgICAgICAgICAgcHJvZmlsZS5fY2FsbGJhY2tzLnB1c2goY2FsbGJhY2sp
OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJvZmlsZS5faXNfbG9hZGlu
ZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcHJvZmlsZS5fY2FsbGJhY2tzID0gW2NhbGxiYWNr
XTsKLSAgICAgICAgICAgICAgICBwcm9maWxlLl9qc29uID0gIiI7Ci0gICAgICAgICAgICAgICAg
cHJvZmlsZS5zaWRlQmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
TG9hZGluZ1x1MjAyNiIpOwotICAgICAgICAgICAgICAgIFByb2ZpbGVyQWdlbnQuZ2V0UHJvZmls
ZShwcm9maWxlLnR5cGVJZCwgcHJvZmlsZS51aWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKCFwcm9maWxlLnByb3h5KQotICAgICAgICAgICAgICAg
IHByb2ZpbGUucHJveHkgPSAobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RXb3JrZXIoKSku
Y3JlYXRlT2JqZWN0KCJXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyIik7Ci0gICAgICAg
ICAgICB2YXIgcHJveHkgPSBwcm9maWxlLnByb3h5OwotICAgICAgICAgICAgaWYgKHByb3h5LnN0
YXJ0TG9hZGluZyhjYWxsYmFjaykpIHsKLSAgICAgICAgICAgICAgICBwcm9maWxlLnNpZGVCYXJF
bGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMb2FkaW5nXHUyMDI2Iik7
Ci0gICAgICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxlKHByb2ZpbGUudHlwZUlk
LCBwcm9maWxlLnVpZCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmICghcHJvZmlsZS5wcm94
eSkKKyAgICAgICAgICAgIHByb2ZpbGUucHJveHkgPSAobmV3IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RXb3JrZXIoKSkuY3JlYXRlT2JqZWN0KCJXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9h
ZGVyIik7CisgICAgICAgIHZhciBwcm94eSA9IHByb2ZpbGUucHJveHk7CisgICAgICAgIGlmIChw
cm94eS5zdGFydExvYWRpbmcoY2FsbGJhY2spKSB7CisgICAgICAgICAgICBwcm9maWxlLnNpZGVC
YXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMb2FkaW5nXHUyMDI2
Iik7CisgICAgICAgICAgICBQcm9maWxlckFnZW50LmdldFByb2ZpbGUocHJvZmlsZS50eXBlSWQs
IHByb2ZpbGUudWlkKTsKICAgICAgICAgfQogICAgIH0sCiAKICAgICBfYWRkSGVhcFNuYXBzaG90
Q2h1bms6IGZ1bmN0aW9uKHVpZCwgY2h1bmspCiAgICAgewotICAgICAgICB2YXIgcHJvZmlsZSA9
IHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpXTsKLSAgICAgICAgaWYgKCFwcm9maWxlKQorICAg
ICAgICB2YXIgcHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQs
IFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKV07CisgICAg
ICAgIGlmICghcHJvZmlsZSB8fCAhcHJvZmlsZS5wcm94eSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKCFQcmVmZXJlbmNlcy5kZXRhaWxlZEhlYXBQcm9maWxlcykgewotICAgICAg
ICAgICAgaWYgKHByb2ZpbGUuX2xvYWRlZCB8fCAhcHJvZmlsZS5faXNfbG9hZGluZykKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBwcm9maWxlLl9qc29uICs9IGNodW5rOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFwcm9maWxlLnByb3h5KQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHByb2ZpbGUucHJveHkucHVzaEpTT05DaHVu
ayhjaHVuayk7Ci0gICAgICAgIH0KKyAgICAgICAgcHJvZmlsZS5wcm94eS5wdXNoSlNPTkNodW5r
KGNodW5rKTsKICAgICB9LAogCiAgICAgX2ZpbmlzaEhlYXBTbmFwc2hvdDogZnVuY3Rpb24odWlk
KQogICAgIHsKLSAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLl9wcm9maWxlc0lkTWFwW3RoaXMu
X21ha2VLZXkodWlkLCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlk
KV07Ci0gICAgICAgIGlmICghcHJvZmlsZSkKKyAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLl9w
cm9maWxlc0lkTWFwW3RoaXMuX21ha2VLZXkodWlkLCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFw
c2hvdFByb2ZpbGVUeXBlLlR5cGVJZCldOworICAgICAgICBpZiAoIXByb2ZpbGUgfHwgIXByb2Zp
bGUucHJveHkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghUHJlZmVyZW5jZXMu
ZGV0YWlsZWRIZWFwUHJvZmlsZXMpIHsKLSAgICAgICAgICAgIGlmIChwcm9maWxlLl9sb2FkZWQg
fHwgIXByb2ZpbGUuX2lzX2xvYWRpbmcpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgcHJvZmlsZS5zaWRlQmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiUGFyc2luZ1x1MjAyNiIpOwotICAgICAgICAgICAgZnVuY3Rpb24gZG9QYXJzZSgpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGxvYWRlZFNuYXBzaG90ID0gSlNPTi5w
YXJzZShwcm9maWxlLl9qc29uKTsKLSAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2tzID0gcHJv
ZmlsZS5fY2FsbGJhY2tzOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9maWxlLl9jYWxsYmFj
a3M7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHByb2ZpbGUuX2pzb247Ci0gICAgICAgICAgICAg
ICAgZGVsZXRlIHByb2ZpbGUuX2lzX2xvYWRpbmc7Ci0gICAgICAgICAgICAgICAgcHJvZmlsZS5f
bG9hZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBwcm9maWxlLnNpZGVCYXJFbGVtZW50LnN1
YnRpdGxlID0gIiI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLkRldGFpbGVk
SGVhcHNob3RWaWV3LnByb3RvdHlwZS5pc0RldGFpbGVkU25hcHNob3QobG9hZGVkU25hcHNob3Qp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMuX2Vu
YWJsZURldGFpbGVkSGVhcFByb2ZpbGVzKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5wcm9jZXNzTG9hZGVkU25hcHNob3QocHJvZmlsZSwg
bG9hZGVkU25hcHNob3QpOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2Fs
bGJhY2tzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3NbaV0ocHJv
ZmlsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRUaW1lb3V0KGRvUGFyc2UsIDAp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFwcm9maWxlLnByb3h5KQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHZhciBwcm94eSA9IHByb2ZpbGUucHJv
eHk7Ci0gICAgICAgICAgICBmdW5jdGlvbiBwYXJzZWQoc25hcHNob3RQcm94eSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBwcm9maWxlLnByb3h5ID0gc25hcHNob3RQcm94eTsKLSAg
ICAgICAgICAgICAgICBwcm9maWxlLnNpZGVCYXJFbGVtZW50LnN1YnRpdGxlID0gTnVtYmVyLmJ5
dGVzVG9TdHJpbmcoc25hcHNob3RQcm94eS50b3RhbFNpemUpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHByb3h5LmZpbmlzaExvYWRpbmcocGFyc2VkKSkKLSAgICAgICAgICAgICAg
ICBwcm9maWxlLnNpZGVCYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJQYXJzaW5nXHUyMDI2Iik7CisgICAgICAgIHZhciBwcm94eSA9IHByb2ZpbGUucHJveHk7Cisg
ICAgICAgIGZ1bmN0aW9uIHBhcnNlZChzbmFwc2hvdFByb3h5KQorICAgICAgICB7CisgICAgICAg
ICAgICBwcm9maWxlLnByb3h5ID0gc25hcHNob3RQcm94eTsKKyAgICAgICAgICAgIHByb2ZpbGUu
c2lkZUJhckVsZW1lbnQuc3VidGl0bGUgPSBOdW1iZXIuYnl0ZXNUb1N0cmluZyhzbmFwc2hvdFBy
b3h5LnRvdGFsU2l6ZSk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHByb3h5LmZpbmlzaExvYWRp
bmcocGFyc2VkKSkKKyAgICAgICAgICAgIHByb2ZpbGUuc2lkZUJhckVsZW1lbnQuc3VidGl0bGUg
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlBhcnNpbmdcdTIwMjYiKTsKICAgICB9LAogCiAgICAg
c2hvd1ZpZXc6IGZ1bmN0aW9uKHZpZXcpCkBAIC03MTAsMTIgKzY1NiwxMiBAQCBXZWJJbnNwZWN0
b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMudXBkYXRlUHJvZmls
ZVR5cGVCdXR0b25zKCk7CiAgICAgfSwKIAotICAgIHRha2VIZWFwU25hcHNob3Q6IGZ1bmN0aW9u
KGRldGFpbGVkKQorICAgIHRha2VIZWFwU25hcHNob3Q6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIGlmICghdGhpcy5oYXNUZW1wb3JhcnlQcm9maWxlKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RQcm9maWxlVHlwZS5UeXBlSWQpKSB7CisgICAgICAgIGlmICghdGhpcy5oYXNUZW1wb3JhcnlQ
cm9maWxlKFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKSkg
ewogICAgICAgICAgICAgaWYgKCF0aGlzLl90ZW1wb3JhcnlUYWtpbmdTbmFwc2hvdCkgewogICAg
ICAgICAgICAgICAgIHRoaXMuX3RlbXBvcmFyeVRha2luZ1NuYXBzaG90ID0gewotICAgICAgICAg
ICAgICAgICAgICB0eXBlSWQ6IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5U
eXBlSWQsCisgICAgICAgICAgICAgICAgICAgIHR5cGVJZDogV2ViSW5zcGVjdG9yLkRldGFpbGVk
SGVhcHNob3RQcm9maWxlVHlwZS5UeXBlSWQsCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNuYXBzaG90dGluZ+KApiIpLAogICAgICAgICAgICAgICAg
ICAgICB1aWQ6IC0xLAogICAgICAgICAgICAgICAgICAgICBpc1RlbXBvcmFyeTogdHJ1ZQpAQCAt
NzIzLDEyICs2NjksMTIgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy5fYWRkUHJvZmlsZUhlYWRlcih0aGlz
Ll90ZW1wb3JhcnlUYWtpbmdTbmFwc2hvdCk7CiAgICAgICAgIH0KLSAgICAgICAgUHJvZmlsZXJB
Z2VudC50YWtlSGVhcFNuYXBzaG90KGRldGFpbGVkKTsKKyAgICAgICAgUHJvZmlsZXJBZ2VudC50
YWtlSGVhcFNuYXBzaG90KCk7CiAgICAgfSwKIAogICAgIF9yZXBvcnRIZWFwU25hcHNob3RQcm9n
cmVzczogZnVuY3Rpb24oZG9uZSwgdG90YWwpCiAgICAgewotICAgICAgICBpZiAodGhpcy5oYXNU
ZW1wb3JhcnlQcm9maWxlKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBl
SWQpKSB7CisgICAgICAgIGlmICh0aGlzLmhhc1RlbXBvcmFyeVByb2ZpbGUoV2ViSW5zcGVjdG9y
LkRldGFpbGVkSGVhcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpKSB7CiAgICAgICAgICAgICB0aGlz
Ll90ZW1wb3JhcnlUYWtpbmdTbmFwc2hvdC5zaWRlQmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiJS4yZiUlIiwgKGRvbmUgLyB0b3RhbCkgKiAxMDApOwogICAgICAg
ICAgICAgaWYgKGRvbmUgPj0gdG90YWwpCiAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlUHJv
ZmlsZUhlYWRlcih0aGlzLl90ZW1wb3JhcnlUYWtpbmdTbmFwc2hvdCk7CkBAIC03NDEsNyArNjg3
LDcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgdGhpcy5fY2xlYXJQcm9maWxlcygpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aGlz
Ll9yZXNldCgpOwotICAgICAgICB2YXIgb2xkUHJvZmlsZVR5cGUgPSB0aGlzLl9wcm9maWxlVHlw
ZXNCeUlkTWFwW1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWRdOwor
ICAgICAgICB2YXIgb2xkUHJvZmlsZVR5cGUgPSB0aGlzLl9wcm9maWxlVHlwZXNCeUlkTWFwW1dl
Ykluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkXTsKICAgICAgICAg
dmFyIHByb2ZpbGVUeXBlID0gbmV3IFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90UHJvZmls
ZVR5cGUoKTsKICAgICAgICAgcHJvZmlsZVR5cGUudHJlZUVsZW1lbnQgPSBvbGRQcm9maWxlVHlw
ZS50cmVlRWxlbWVudDsKICAgICAgICAgdGhpcy5fcHJvZmlsZVR5cGVzQnlJZE1hcFtwcm9maWxl
VHlwZS5pZF0gPSBwcm9maWxlVHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvV2ViS2l0LnFyYwppbmRleCA5ODE2ZGMwLi4wOGZmZTRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCkBAIC01Miw3ICs1Miw2IEBACiAg
ICAgPGZpbGU+SEFSRW50cnkuanM8L2ZpbGU+CiAgICAgPGZpbGU+SGVhcFNuYXBzaG90LmpzPC9m
aWxlPgogICAgIDxmaWxlPkhlYXBTbmFwc2hvdFByb3h5LmpzPC9maWxlPgotICAgIDxmaWxlPkhl
YXBTbmFwc2hvdFZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+SGVhcFNuYXBzaG90V29ya2VyLmpz
PC9maWxlPgogICAgIDxmaWxlPkhlYXBTbmFwc2hvdFdvcmtlckRpc3BhdGNoZXIuanM8L2ZpbGU+
CiAgICAgPGZpbGU+SGVscFNjcmVlbi5qczwvZmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaGVhcFByb2ZpbGVyLmNzcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaGVhcFByb2ZpbGVyLmNzcwppbmRleCA1ZTA4NDhkLi5lY2Y0
MTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2hlYXBQ
cm9maWxlci5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9oZWFw
UHJvZmlsZXIuY3NzCkBAIC0zNywxMDQgKzM3LDYgQEAKICAgICBjb250ZW50OiB1cmwoSW1hZ2Vz
L3Byb2ZpbGVTbWFsbEljb24ucG5nKTsKIH0KIAotLmhlYXAtc25hcHNob3QtdmlldyB7Ci0gICAg
ZGlzcGxheTogbm9uZTsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLSAgICBib3R0
b206IDA7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcudmlzaWJsZSB7Ci0gICAgZGlzcGxheTog
YmxvY2s7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB7Ci0gICAgYm9yZGVy
OiBub25lOwotICAgIG1heC1oZWlnaHQ6IDEwMCU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgdG9wOiAwOwotICAgIGJvdHRvbTogOTNw
eDsKLX0KLQotLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRoLmNvdW50LWNvbHVtbiB7
Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRh
LWdyaWQgdGQuY291bnQtY29sdW1uIHsKLSAgICB0ZXh0LWFsaWduOiByaWdodDsKLX0KLQotLmhl
YXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRoLnNpemUtY29sdW1uIHsKLSAgICB0ZXh0LWFs
aWduOiBjZW50ZXI7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB0ZC5zaXpl
LWNvbHVtbiB7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZp
ZXcgLmRhdGEtZ3JpZCB0aC5jb3VudERlbHRhLWNvbHVtbiB7Ci0gICAgdGV4dC1hbGlnbjogY2Vu
dGVyOwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGQuY291bnREZWx0YS1j
b2x1bW4gewotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3
IC5kYXRhLWdyaWQgdGguc2l6ZURlbHRhLWNvbHVtbiB7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVy
OwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGQuc2l6ZURlbHRhLWNvbHVt
biB7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci0KLSNoZWFwLXNuYXBzaG90LXN1bW1hcnkt
Y29udGFpbmVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcGFkZGluZy10b3A6IDIw
cHg7Ci0gICAgYm90dG9tOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgaGVp
Z2h0OiA5M3B4OwotICAgIG1hcmdpbi1sZWZ0OiAtMXB4OwotICAgIGJvcmRlci1sZWZ0OiAxcHgg
c29saWQgcmdiKDEwMiwgMTAyLCAxMDIpOwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxMDEs
IDExMSwgMTMwKTsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVh
ciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYmEoMCwgMCwgMCwgMC41KSksIHRvKHJn
YmEoMCwgMCwgMCwgMCkpKTsKLSAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Ci0gICAg
YmFja2dyb3VuZC1wb3NpdGlvbjogdG9wOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICB0
ZXh0LXNoYWRvdzogYmxhY2sgMCAxcHggMXB4OwotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0g
ICAgY29sb3I6IHdoaXRlOwotICAgIC13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAxcHggNnB4Owot
ICAgIC13ZWJraXQtYmFja2dyb3VuZC1vcmlnaW46IHBhZGRpbmc7Ci0gICAgLXdlYmtpdC1iYWNr
Z3JvdW5kLWNsaXA6IHBhZGRpbmc7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXN1bW1hcnkgewotICAg
IGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICB3aWR0aDogNTAlOwotICAgIG1pbi13aWR0aDog
MzAwcHg7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotfQotCi0uaGVhcC1zbmFwc2hvdC1zdW1t
YXJ5IGNhbnZhcy5zdW1tYXJ5LWdyYXBoIHsKLSAgICB3aWR0aDogMjI1cHg7Ci19Ci0KLS5oZWFw
LXNuYXBzaG90LXN1bW1hcnktbGFiZWwgewotICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICBmb250
LXdlaWdodDogYm9sZDsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAxcHg7Ci0g
ICAgd2lkdGg6IDUwJTsKLSAgICBsZWZ0OiAyNSU7Ci19Ci0KIC5kZXRhaWxlZC1oZWFwc2hvdC12
aWV3IHsKICAgICBkaXNwbGF5OiBub25lOwogICAgIG92ZXJmbG93OiBoaWRkZW47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAppbmRleCBk
N2ViYWUxLi42NTA1YThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTE0Niw3ICsxNDYsNiBAQCBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlBhcnRpYWxRdWlja1NvcnQuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkhlYXBTbmFw
c2hvdC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iSGVhcFNuYXBzaG90UHJveHkuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9IkhlYXBTbmFwc2hvdFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkhlYXBTbmFwc2hvdFdvcmtlckRpc3Bh
dGNoZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkRldGFpbGVkSGVhcHNob3RHcmlkTm9kZXMuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRldGFpbGVkSGVhcHNob3RWaWV3LmpzIj48L3Nj
cmlwdD4K
</data>
<flag name="commit-queue"
          id="92038"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97943</attachid>
            <date>2011-06-21 00:30:02 -0700</date>
            <delta_ts>2011-06-21 06:56:05 -0700</delta_ts>
            <desc>fix style violation</desc>
            <filename>patch-63049</filename>
            <type>text/plain</type>
            <size>60933</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiNzE5ZWZkLi4yMDhlZWI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDYt
MjEgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hy
b21pdW1dIFJlbW92ZSBvbGQgKGFnZ3JlZ2F0aW5nKSBoZWFwIHByb2ZpbGVyLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMwNDkKKworICAgICAgICAq
IGluc3BlY3Rvci9wcm9maWxlci9kZXRhaWxlZC1oZWFwc2hvdHMtdGVzdC5qczoKKwogMjAxMS0w
Ni0yMCAgWXV0YSBLaXRhbXVyYSAgPHl1dGFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLiBVcGRhdGUgQ2hyb21pdW0gdGVzdCBleHBlY3RhdGlvbiBmb3IgaW5zcGVjdG9yL2Vs
ZW1lbnRzL2V2ZW50LWxpc3RlbmVyLXNpZGViYXIuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2RldGFpbGVkLWhlYXBzaG90cy10ZXN0LmpzIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2RldGFpbGVkLWhlYXBzaG90cy10ZXN0LmpzCmluZGV4
IDUyYWEwNWUuLjExYjViNjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9m
aWxlci9kZXRhaWxlZC1oZWFwc2hvdHMtdGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvcHJvZmlsZXIvZGV0YWlsZWQtaGVhcHNob3RzLXRlc3QuanMKQEAgLTM2MSw3ICszNjEsNyBA
QCBJbnNwZWN0b3JUZXN0LnRha2VBbmRPcGVuU25hcHNob3QgPSBmdW5jdGlvbihnZW5lcmF0b3Is
IGNhbGxiYWNrKQogewogICAgIGNhbGxiYWNrID0gSW5zcGVjdG9yVGVzdC5zYWZlV3JhcChjYWxs
YmFjayk7CiAgICAgdmFyIHVpZCA9IEluc3BlY3RvclRlc3QuX25leHRVaWQrKzsKLSAgICB2YXIg
cHJvZmlsZSA9IHsgdHlwZUlkOiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUu
VHlwZUlkLCB1aWQ6IHVpZCwgdGl0bGU6IFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSArICIuIiAr
IHVpZCB9OworICAgIHZhciBwcm9maWxlID0geyB0eXBlSWQ6IFdlYkluc3BlY3Rvci5EZXRhaWxl
ZEhlYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkLCB1aWQ6IHVpZCwgdGl0bGU6IFVzZXJJbml0aWF0
ZWRQcm9maWxlTmFtZSArICIuIiArIHVpZCB9OwogICAgIGZ1bmN0aW9uIHB1c2hHZW5lcmF0ZWRT
bmFwc2hvdCh0eXBlSWQsIHVpZCkKICAgICB7CiAgICAgICAgIHZhciBzbmFwc2hvdCA9IGdlbmVy
YXRvcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGM5NWNkNDguLjA1MWU1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNyBAQAorMjAxMS0wNi0yMSAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFtDaHJvbWl1bV0gUmVtb3ZlIG9sZCAoYWdncmVnYXRpbmcpIGhlYXAg
cHJvZmlsZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MzA0OQorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFByb2ZpbGVyOjp0YWtlSGVhcFNuYXBzaG90
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUHJvZmlsZXJBZ2VudDo6dGFrZUhlYXBTbmFwc2hvdCk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0RldGFpbGVkSGVhcHNob3RWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbGVk
SGVhcHNob3RWaWV3LnByb3RvdHlwZS5nZXQgcHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlLmdldCBiYXNlUHJvZmlsZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlLl9wcm9maWxl
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFByb2ZpbGVUeXBlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90UHJvZmlsZVR5cGUucHJvdG90
eXBlLmJ1dHRvbkNsaWNrZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNu
YXBzaG90Vmlldy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1By
b2ZpbGVzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90
b3R5cGUubG9hZEhlYXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQ
YW5lbC5wcm90b3R5cGUuX2FkZEhlYXBTbmFwc2hvdENodW5rKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fZmluaXNoSGVhcFNuYXBzaG90LnBhcnNlZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuX2ZpbmlzaEhl
YXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5
cGUudGFrZUhlYXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5l
bC5wcm90b3R5cGUuX3JlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fZW5hYmxlRGV0YWlsZWRIZWFwUHJvZmls
ZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL2hlYXBQcm9maWxlci5jc3M6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKwogMjAxMS0wNi0yMCAgRGFpIE1pa3VydWJl
ICA8ZG1pa3VydWJlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRh
bXVyYS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhZWZlN2M2Li4zZDA4OWExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC02MjY2LDcgKzYyNjYsNiBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1l
bmQvSEFSRW50cnkuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNu
YXBzaG90LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hv
dFByb3h5LmpzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hv
dFZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90
V29ya2VyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hv
dFdvcmtlckRpc3BhdGNoZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
SGVscFNjcmVlbi5qcycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCmluZGV4IGM2MjAxZGYuLjdhNzM3MzUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC02ODAyNSwxMCArNjgwMjUsNiBAQAogCQkJCQk+
CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxIZWFwU25hcHNob3RWaWV3LmpzIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJ
CTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxIZWFwU25h
cHNob3RXb3JrZXIuanMiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAKaW5kZXggMjE1MzdmNC4uZDNlMTcxMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcApAQCAtOTIs
MTIgKzkyLDggQEAgcHJpdmF0ZToKIFBhc3NSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBTY3Jp
cHRQcm9maWxlcjo6dGFrZUhlYXBTbmFwc2hvdChjb25zdCBTdHJpbmcmIHRpdGxlLCBIZWFwU25h
cHNob3RQcm9ncmVzcyogY29udHJvbCkKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgaHM7Ci0gICAg
Y29uc3Qgdjg6OkhlYXBTbmFwc2hvdCogc25hcHNob3QgPSAwOwotICAgIGlmIChjb250cm9sKSB7
Ci0gICAgICAgIEFjdGl2aXR5Q29udHJvbEFkYXB0ZXIgYWRhcHRlcihjb250cm9sKTsKLSAgICAg
ICAgc25hcHNob3QgPSB2ODo6SGVhcFByb2ZpbGVyOjpUYWtlU25hcHNob3QodjhTdHJpbmcodGl0
bGUpLCB2ODo6SGVhcFNuYXBzaG90OjprRnVsbCwgJmFkYXB0ZXIpOwotICAgIH0gZWxzZQotICAg
ICAgICBzbmFwc2hvdCA9IHY4OjpIZWFwUHJvZmlsZXI6OlRha2VTbmFwc2hvdCh2OFN0cmluZyh0
aXRsZSksIHY4OjpIZWFwU25hcHNob3Q6OmtBZ2dyZWdhdGVkKTsKKyAgICBBY3Rpdml0eUNvbnRy
b2xBZGFwdGVyIGFkYXB0ZXIoY29udHJvbCk7CisgICAgY29uc3Qgdjg6OkhlYXBTbmFwc2hvdCog
c25hcHNob3QgPSB2ODo6SGVhcFByb2ZpbGVyOjpUYWtlU25hcHNob3QodjhTdHJpbmcodGl0bGUp
LCB2ODo6SGVhcFNuYXBzaG90OjprRnVsbCwgJmFkYXB0ZXIpOwogICAgIHJldHVybiBzbmFwc2hv
dCA/IFNjcmlwdEhlYXBTbmFwc2hvdDo6Y3JlYXRlKHNuYXBzaG90KSA6IDA7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCBmMmNlNDc1Li42NWQ0MGEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCkBAIC0xNjkzLDEwICsxNjkz
LDcgQEAKICAgICAgICAgICAgICAgICAibmFtZSI6ICJjbGVhclByb2ZpbGVzIgogICAgICAgICAg
ICAgfSwKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAibmFtZSI6ICJ0YWtlSGVhcFNu
YXBzaG90IiwKLSAgICAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJkZXRhaWxlZCIsICJ0eXBlIjogImJvb2xlYW4iIH0KLSAgICAgICAg
ICAgICAgICBdCisgICAgICAgICAgICAgICAgIm5hbWUiOiAidGFrZUhlYXBTbmFwc2hvdCIKICAg
ICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIm5hbWUiOiAiY29s
bGVjdEdhcmJhZ2UiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudC5jcHAKaW5kZXggMzI5M2I0Yy4uYmI1M2U3MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcApAQCAtMzU4
LDEzICszNTgsMTMgQEAgcHJpdmF0ZToKIAogfTsKIAotdm9pZCBJbnNwZWN0b3JQcm9maWxlckFn
ZW50Ojp0YWtlSGVhcFNuYXBzaG90KEVycm9yU3RyaW5nKiwgYm9vbCBkZXRhaWxlZCkKK3ZvaWQg
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6dGFrZUhlYXBTbmFwc2hvdChFcnJvclN0cmluZyopCiB7
CiAgICAgU3RyaW5nIHRpdGxlID0gbWFrZVN0cmluZyhVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUs
ICcuJywgU3RyaW5nOjpudW1iZXIobV9uZXh0VXNlckluaXRpYXRlZEhlYXBTbmFwc2hvdE51bWJl
cikpOwogICAgICsrbV9uZXh0VXNlckluaXRpYXRlZEhlYXBTbmFwc2hvdE51bWJlcjsKIAogICAg
IEhlYXBTbmFwc2hvdFByb2dyZXNzIHByb2dyZXNzKG1fZnJvbnRlbmQpOwotICAgIFJlZlB0cjxT
Y3JpcHRIZWFwU25hcHNob3Q+IHNuYXBzaG90ID0gU2NyaXB0UHJvZmlsZXI6OnRha2VIZWFwU25h
cHNob3QodGl0bGUsIGRldGFpbGVkID8gJnByb2dyZXNzIDogMCk7CisgICAgUmVmUHRyPFNjcmlw
dEhlYXBTbmFwc2hvdD4gc25hcHNob3QgPSBTY3JpcHRQcm9maWxlcjo6dGFrZUhlYXBTbmFwc2hv
dCh0aXRsZSwgJnByb2dyZXNzKTsKICAgICBpZiAoc25hcHNob3QpIHsKICAgICAgICAgbV9zbmFw
c2hvdHMuYWRkKHNuYXBzaG90LT51aWQoKSwgc25hcHNob3QpOwogICAgICAgICBpZiAobV9mcm9u
dGVuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9m
aWxlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5oCmluZGV4IDZjNWNmNGMuLjQwOTQxZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaApAQCAtODcsNyArODcsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpOwogICAgIHZvaWQg
c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoYm9vbCBpZ25vcmVQcm9maWxlID0gZmFsc2UpOwot
ICAgIHZvaWQgdGFrZUhlYXBTbmFwc2hvdChFcnJvclN0cmluZyogZXJyb3IsIGJvb2wgZGV0YWls
ZWQpOworICAgIHZvaWQgdGFrZUhlYXBTbmFwc2hvdChFcnJvclN0cmluZyopOwogICAgIHZvaWQg
dG9nZ2xlUmVjb3JkQnV0dG9uKGJvb2wgaXNQcm9maWxpbmcpOwogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90
Vmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFw
c2hvdFZpZXcuanMKaW5kZXggMzljNTk2OS4uNTJkOWM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90Vmlldy5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RWaWV3Lmpz
CkBAIC02MzQsNyArNjM0LDcgQEAgV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RWaWV3LnBy
b3RvdHlwZSA9IHsKIAogICAgIGdldCBwcm9maWxlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLnBhcmVudC5nZXRQcm9maWxlKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlw
ZS5UeXBlSWQsIHRoaXMuX3Byb2ZpbGVVaWQpOworICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQu
Z2V0UHJvZmlsZShXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJ
ZCwgdGhpcy5fcHJvZmlsZVVpZCk7CiAgICAgfSwKIAogICAgIGdldCBwcm9maWxlV3JhcHBlcigp
CkBAIC02NDQsNyArNjQ0LDcgQEAgV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RWaWV3LnBy
b3RvdHlwZSA9IHsKIAogICAgIGdldCBiYXNlUHJvZmlsZSgpCiAgICAgewotICAgICAgICByZXR1
cm4gdGhpcy5wYXJlbnQuZ2V0UHJvZmlsZShXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmls
ZVR5cGUuVHlwZUlkLCB0aGlzLl9iYXNlUHJvZmlsZVVpZCk7CisgICAgICAgIHJldHVybiB0aGlz
LnBhcmVudC5nZXRQcm9maWxlKFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90UHJvZmlsZVR5
cGUuVHlwZUlkLCB0aGlzLl9iYXNlUHJvZmlsZVVpZCk7CiAgICAgfSwKIAogICAgIGdldCBiYXNl
UHJvZmlsZVdyYXBwZXIoKQpAQCAtODYzLDcgKzg2Myw3IEBAIFdlYkluc3BlY3Rvci5EZXRhaWxl
ZEhlYXBzaG90Vmlldy5wcm90b3R5cGUgPSB7CiAKICAgICBfcHJvZmlsZXM6IGZ1bmN0aW9uKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLmdldFBy
b2ZpbGVzKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpOworICAg
ICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlcy5nZXRQcm9maWxlcyhXZWJJ
bnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCk7CiAgICAgfSwKIAog
ICAgIF9sb2FkUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZVVpZCwgY2FsbGJhY2spCkBAIC0xMTc2
LDkgKzExNzYsMTEgQEAgV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RWaWV3LnByb3RvdHlw
ZS5zaG93SGlkZGVuRGF0YSA9IHRydWU7CiAKIFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90
UHJvZmlsZVR5cGUgPSBmdW5jdGlvbigpCiB7Ci0gICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBl
LmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCwg
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJIRUFQIFNOQVBTSE9UUyIpKTsKKyAgICBXZWJJbnNwZWN0
b3IuUHJvZmlsZVR5cGUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFBy
b2ZpbGVUeXBlLlR5cGVJZCwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJIRUFQIFNOQVBTSE9UUyIp
KTsKIH0KIAorV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RQcm9maWxlVHlwZS5UeXBlSWQg
PSAiSEVBUCI7CisKIFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90UHJvZmlsZVR5cGUucHJv
dG90eXBlID0gewogICAgIGdldCBidXR0b25Ub29sdGlwKCkKICAgICB7CkBAIC0xMTkyLDcgKzEx
OTQsNyBAQCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlw
ZSA9IHsKIAogICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMudGFrZUhlYXBTbmFwc2hvdCh0cnVlKTsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlcy50YWtlSGVhcFNuYXBzaG90KCk7CiAgICAg
fSwKIAogICAgIGdldCB3ZWxjb21lTWVzc2FnZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDg3ZTAyZjcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzCisrKyAvZGV2L251bGwKQEAgLTEs
MTAzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcgPSBmdW5jdGlvbihwYXJl
bnQsIHByb2ZpbGUpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLQotICAg
IHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoZWFwLXNuYXBzaG90LXZpZXciKTsKLQotICAg
IHRoaXMucGFyZW50ID0gcGFyZW50OwotICAgIHRoaXMucGFyZW50LmFkZEV2ZW50TGlzdGVuZXIo
InByb2ZpbGUgYWRkZWQiLCB0aGlzLl91cGRhdGVCYXNlT3B0aW9ucywgdGhpcyk7Ci0KLSAgICB0
aGlzLnNob3dDb3VudEFzUGVyY2VudCA9IGZhbHNlOwotICAgIHRoaXMuc2hvd1NpemVBc1BlcmNl
bnQgPSBmYWxzZTsKLSAgICB0aGlzLnNob3dDb3VudERlbHRhQXNQZXJjZW50ID0gZmFsc2U7Ci0g
ICAgdGhpcy5zaG93U2l6ZURlbHRhQXNQZXJjZW50ID0gZmFsc2U7Ci0KLSAgICB0aGlzLmNhdGVn
b3JpZXMgPSB7Ci0gICAgICAgIGNvZGU6IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDYXRlZ29y
eSgiY29kZSIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29kZSIpLCAicmdiKDI1NSwxMjEsMCki
KSwKLSAgICAgICAgZGF0YTogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVnb3J5KCJkYXRh
IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPYmplY3RzIiksICJyZ2IoNDcsMTAyLDIzNikiKQot
ICAgIH07Ci0KLSAgICB2YXIgc3VtbWFyeUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwotICAgIHN1bW1hcnlDb250YWluZXIuaWQgPSAiaGVhcC1zbmFwc2hvdC1zdW1t
YXJ5LWNvbnRhaW5lciI7Ci0KLSAgICB0aGlzLmNvdW50c1N1bW1hcnlCYXIgPSBuZXcgV2ViSW5z
cGVjdG9yLlN1bW1hcnlCYXIodGhpcy5jYXRlZ29yaWVzKTsKLSAgICB0aGlzLmNvdW50c1N1bW1h
cnlCYXIuZWxlbWVudC5jbGFzc05hbWUgPSAiaGVhcC1zbmFwc2hvdC1zdW1tYXJ5IjsKLSAgICB0
aGlzLmNvdW50c1N1bW1hcnlCYXIuY2FsY3VsYXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFN1
bW1hcnlDb3VudENhbGN1bGF0b3IoKTsKLSAgICB2YXIgY291bnRzTGFiZWwgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBjb3VudHNMYWJlbC5jbGFzc05hbWUgPSAiaGVhcC1z
bmFwc2hvdC1zdW1tYXJ5LWxhYmVsIjsKLSAgICBjb3VudHNMYWJlbC50ZXh0Q29udGVudCA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiQ291bnQiKTsKLSAgICB0aGlzLmNvdW50c1N1bW1hcnlCYXIu
ZWxlbWVudC5hcHBlbmRDaGlsZChjb3VudHNMYWJlbCk7Ci0gICAgc3VtbWFyeUNvbnRhaW5lci5h
cHBlbmRDaGlsZCh0aGlzLmNvdW50c1N1bW1hcnlCYXIuZWxlbWVudCk7Ci0KLSAgICB0aGlzLnNp
emVzU3VtbWFyeUJhciA9IG5ldyBXZWJJbnNwZWN0b3IuU3VtbWFyeUJhcih0aGlzLmNhdGVnb3Jp
ZXMpOwotICAgIHRoaXMuc2l6ZXNTdW1tYXJ5QmFyLmVsZW1lbnQuY2xhc3NOYW1lID0gImhlYXAt
c25hcHNob3Qtc3VtbWFyeSI7Ci0gICAgdGhpcy5zaXplc1N1bW1hcnlCYXIuY2FsY3VsYXRvciA9
IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlTaXplQ2FsY3VsYXRvcigpOwotICAgIHZhciBz
aXplc0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTsKLSAgICBzaXplc0xh
YmVsLmNsYXNzTmFtZSA9ICJoZWFwLXNuYXBzaG90LXN1bW1hcnktbGFiZWwiOwotICAgIHNpemVz
TGFiZWwudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNpemUiKTsKLSAgICB0
aGlzLnNpemVzU3VtbWFyeUJhci5lbGVtZW50LmFwcGVuZENoaWxkKHNpemVzTGFiZWwpOwotICAg
IHN1bW1hcnlDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zaXplc1N1bW1hcnlCYXIuZWxlbWVu
dCk7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3VtbWFyeUNvbnRhaW5lcik7Ci0K
LSAgICB2YXIgY29sdW1ucyA9IHsKLSAgICAgICAgY29uczogeyB0aXRsZTogV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJDb25zdHJ1Y3RvciIpLCBkaXNjbG9zdXJlOiB0cnVlLCBzb3J0YWJsZTogdHJ1
ZSB9LAotICAgICAgICBjb3VudDogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb3Vu
dCIpLCB3aWR0aDogIjU0cHgiLCBzb3J0YWJsZTogdHJ1ZSB9LAotICAgICAgICBzaXplOiB7IHRp
dGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNpemUiKSwgd2lkdGg6ICI3MnB4Iiwgc29ydDog
ImRlc2NlbmRpbmciLCBzb3J0YWJsZTogdHJ1ZSB9LAotICAgICAgICAvLyBceGIxIGlzIGEgInBs
dXMtbWludXMiIHNpZ24uCi0gICAgICAgIGNvdW50RGVsdGE6IHsgdGl0bGU6IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiXHhiMSBDb3VudCIpLCB3aWR0aDogIjcycHgiLCBzb3J0YWJsZTogdHJ1ZSB9
LAotICAgICAgICBzaXplRGVsdGE6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiXHhi
MSBTaXplIiksIHdpZHRoOiAiNzJweCIsIHNvcnRhYmxlOiB0cnVlIH0KLSAgICB9OwotCi0gICAg
dGhpcy5kYXRhR3JpZCA9IG5ldyBXZWJJbnNwZWN0b3IuRGF0YUdyaWQoY29sdW1ucyk7Ci0gICAg
dGhpcy5kYXRhR3JpZC5hZGRFdmVudExpc3RlbmVyKCJzb3J0aW5nIGNoYW5nZWQiLCB0aGlzLl9z
b3J0RGF0YSwgdGhpcyk7Ci0gICAgdGhpcy5kYXRhR3JpZC5lbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoIm1vdXNlZG93biIsIHRoaXMuX21vdXNlRG93bkluRGF0YUdyaWQuYmluZCh0aGlzKSwgdHJ1
ZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZGF0YUdyaWQuZWxlbWVudCk7
Ci0KLSAgICB0aGlzLnByb2ZpbGUgPSBwcm9maWxlOwotCi0gICAgdGhpcy5iYXNlU2VsZWN0RWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHRoaXMuYmFzZVNl
bGVjdEVsZW1lbnQuY2xhc3NOYW1lID0gInN0YXR1cy1iYXItaXRlbSI7Ci0gICAgdGhpcy5iYXNl
U2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLl9jaGFuZ2VCYXNl
LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLl91cGRhdGVCYXNlT3B0aW9ucygpOwotCi0g
ICAgdGhpcy5wZXJjZW50QnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0b24o
IiIsICJwZXJjZW50LXRpbWUtc3RhdHVzLWJhci1pdGVtIHN0YXR1cy1iYXItaXRlbSIpOwotICAg
IHRoaXMucGVyY2VudEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3BlcmNl
bnRDbGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsKLQotICAgIHRoaXMuX2xvYWRQcm9maWxlKHRo
aXMucHJvZmlsZSwgcHJvZmlsZUNhbGxiYWNrLmJpbmQodGhpcykpOwotCi0gICAgZnVuY3Rpb24g
cHJvZmlsZUNhbGxiYWNrKHByb2ZpbGUpCi0gICAgewotICAgICAgICB2YXIgbGlzdCA9IHRoaXMu
X3Byb2ZpbGVzKCk7Ci0gICAgICAgIHZhciBwcm9maWxlSW5kZXg7Ci0gICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGlmIChsaXN0W2ldLnVp
ZCA9PT0gcHJvZmlsZS51aWQpIHsKLSAgICAgICAgICAgICAgICBwcm9maWxlSW5kZXggPSBpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICBpZiAocHJvZmls
ZUluZGV4ID4gMCkKLSAgICAgICAgICAgIHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJ
bmRleCA9IHByb2ZpbGVJbmRleCAtIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMu
YmFzZVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IHByb2ZpbGVJbmRleDsKLSAgICAgICAg
dGhpcy5fcmVzZXREYXRhR3JpZExpc3QocmVzZXRDb21wbGV0ZWQuYmluZCh0aGlzKSk7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gcmVzZXRDb21wbGV0ZWQoKQotICAgIHsKLSAgICAgICAgdGhpcy5y
ZWZyZXNoKCk7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVBlcmNlbnRCdXR0b24oKTsKLSAgICB9Ci19
Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZSA9IHsKLSAgICBnZXQg
c3RhdHVzQmFySXRlbXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFt0aGlzLmJhc2VTZWxlY3RF
bGVtZW50LCB0aGlzLnBlcmNlbnRCdXR0b24uZWxlbWVudF07Ci0gICAgfSwKLQotICAgIGdldCBw
cm9maWxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wcm9maWxlOwotICAgIH0sCi0K
LSAgICBzZXQgcHJvZmlsZShwcm9maWxlKQotICAgIHsKLSAgICAgICAgdGhpcy5fcHJvZmlsZSA9
IHByb2ZpbGU7Ci0gICAgfSwKLQotICAgIHNob3c6IGZ1bmN0aW9uKHBhcmVudEVsZW1lbnQpCi0g
ICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUuc2hvdy5jYWxsKHRoaXMs
IHBhcmVudEVsZW1lbnQpOwotICAgICAgICB0aGlzLmRhdGFHcmlkLnVwZGF0ZVdpZHRocygpOwot
ICAgIH0sCi0KLSAgICBoaWRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0
b3IuVmlldy5wcm90b3R5cGUuaGlkZS5jYWxsKHRoaXMpOwotICAgICAgICB0aGlzLl9jdXJyZW50
U2VhcmNoUmVzdWx0SW5kZXggPSAtMTsKLSAgICB9LAotCi0gICAgcmVzaXplOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICBpZiAodGhpcy5kYXRhR3JpZCkKLSAgICAgICAgICAgIHRoaXMuZGF0
YUdyaWQudXBkYXRlV2lkdGhzKCk7Ci0gICAgfSwKLQotICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHRoaXMuZGF0YUdyaWQucmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAgICAg
ICB2YXIgY2hpbGRyZW4gPSB0aGlzLnNuYXBzaG90RGF0YUdyaWRMaXN0LmNoaWxkcmVuOwotICAg
ICAgICB2YXIgY291bnQgPSBjaGlsZHJlbi5sZW5ndGg7Ci0gICAgICAgIGZvciAodmFyIGluZGV4
ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkKLSAgICAgICAgICAgIHRoaXMuZGF0YUdyaWQu
YXBwZW5kQ2hpbGQoY2hpbGRyZW5baW5kZXhdKTsKLQotICAgICAgICB0aGlzLl91cGRhdGVTdW1t
YXJ5R3JhcGgoKTsKLSAgICB9LAotCi0gICAgcmVmcmVzaFNob3dBc1BlcmNlbnRzOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLl91cGRhdGVQZXJjZW50QnV0dG9uKCk7Ci0gICAgICAg
IHRoaXMucmVmcmVzaFZpc2libGVEYXRhKCk7Ci0gICAgfSwKLQotICAgIF9kZWxldGVTZWFyY2hN
YXRjaGVkRmxhZ3M6IGZ1bmN0aW9uKG5vZGUpCi0gICAgewotICAgICAgICBkZWxldGUgbm9kZS5f
c2VhcmNoTWF0Y2hlZENvbnNDb2x1bW47Ci0gICAgICAgIGRlbGV0ZSBub2RlLl9zZWFyY2hNYXRj
aGVkQ291bnRDb2x1bW47Ci0gICAgICAgIGRlbGV0ZSBub2RlLl9zZWFyY2hNYXRjaGVkU2l6ZUNv
bHVtbjsKLSAgICAgICAgZGVsZXRlIG5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudERlbHRhQ29sdW1u
OwotICAgICAgICBkZWxldGUgbm9kZS5fc2VhcmNoTWF0Y2hlZFNpemVEZWx0YUNvbHVtbjsKLSAg
ICB9LAotCi0gICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9zZWFyY2hSZXN1bHRzKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIg
cHJvZmlsZU5vZGUgPSB0aGlzLl9zZWFyY2hSZXN1bHRzW2ldLnByb2ZpbGVOb2RlOwotICAgICAg
ICAgICAgICAgIHRoaXMuX2RlbGV0ZVNlYXJjaE1hdGNoZWRGbGFncyhwcm9maWxlTm9kZSk7Ci0g
ICAgICAgICAgICAgICAgcHJvZmlsZU5vZGUucmVmcmVzaCgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgZGVsZXRlIHRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2s7Ci0g
ICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IC0xOwotICAgICAgICB0aGlz
Ll9zZWFyY2hSZXN1bHRzID0gW107Ci0gICAgfSwKLQotICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0
aW9uKHF1ZXJ5LCBmaW5pc2hlZENhbGxiYWNrKQotICAgIHsKLSAgICAgICAgLy8gQ2FsbCBzZWFy
Y2hDYW5jZWxlZCBzaW5jZSBpdCB3aWxsIHJlc2V0IGV2ZXJ5dGhpbmcgd2UgbmVlZCBiZWZvcmUg
ZG9pbmcgYSBuZXcgc2VhcmNoLgotICAgICAgICB0aGlzLnNlYXJjaENhbmNlbGVkKCk7Ci0KLSAg
ICAgICAgcXVlcnkgPSBxdWVyeS50cmltKCk7Ci0KLSAgICAgICAgaWYgKCFxdWVyeS5sZW5ndGgp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fc2VhcmNoRmluaXNoZWRDYWxs
YmFjayA9IGZpbmlzaGVkQ2FsbGJhY2s7Ci0KLSAgICAgICAgdmFyIGhlbHBlciA9IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RWaWV3LlNlYXJjaEhlbHBlcjsKLQotICAgICAgICB2YXIgb3BlcmF0
aW9uQW5kTnVtYmVyID0gaGVscGVyLnBhcnNlT3BlcmF0aW9uQW5kTnVtYmVyKHF1ZXJ5KTsKLSAg
ICAgICAgdmFyIG9wZXJhdGlvbiA9IG9wZXJhdGlvbkFuZE51bWJlclswXTsKLSAgICAgICAgdmFy
IHF1ZXJ5TnVtYmVyID0gb3BlcmF0aW9uQW5kTnVtYmVyWzFdOwotCi0gICAgICAgIHZhciBwZXJj
ZW50VW5pdHMgPSBoZWxwZXIucGVyY2VudHMudGVzdChxdWVyeSk7Ci0gICAgICAgIHZhciBtZWdh
Qnl0ZXNVbml0cyA9IGhlbHBlci5tZWdhQnl0ZXMudGVzdChxdWVyeSk7Ci0gICAgICAgIHZhciBr
aWxvQnl0ZXNVbml0cyA9IGhlbHBlci5raWxvQnl0ZXMudGVzdChxdWVyeSk7Ci0gICAgICAgIHZh
ciBieXRlc1VuaXRzID0gaGVscGVyLmJ5dGVzLnRlc3QocXVlcnkpOwotCi0gICAgICAgIHZhciBx
dWVyeU51bWJlckJ5dGVzID0gKG1lZ2FCeXRlc1VuaXRzID8gKHF1ZXJ5TnVtYmVyICogMTAyNCAq
IDEwMjQpIDogKGtpbG9CeXRlc1VuaXRzID8gKHF1ZXJ5TnVtYmVyICogMTAyNCkgOiBxdWVyeU51
bWJlcikpOwotCi0gICAgICAgIGZ1bmN0aW9uIG1hdGNoZXNRdWVyeShoZWFwU25hcHNob3REYXRh
R3JpZE5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RWaWV3LnByb3RvdHlwZS5fZGVsZXRlU2VhcmNoTWF0Y2hlZEZsYWdzKGhlYXBTbmFwc2hvdERh
dGFHcmlkTm9kZSk7Ci0KLSAgICAgICAgICAgIGlmIChwZXJjZW50VW5pdHMpIHsKLSAgICAgICAg
ICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudENvbHVt
biA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuY291bnRQZXJjZW50LCBxdWVy
eU51bWJlcik7Ci0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFy
Y2hNYXRjaGVkU2l6ZUNvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUu
c2l6ZVBlcmNlbnQsIHF1ZXJ5TnVtYmVyKTsKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNob3RE
YXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudERlbHRhQ29sdW1uID0gb3BlcmF0aW9uKGhl
YXBTbmFwc2hvdERhdGFHcmlkTm9kZS5jb3VudERlbHRhUGVyY2VudCwgcXVlcnlOdW1iZXIpOwot
ICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZFNp
emVEZWx0YUNvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuc2l6ZURl
bHRhUGVyY2VudCwgcXVlcnlOdW1iZXIpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtZWdhQnl0
ZXNVbml0cyB8fCBraWxvQnl0ZXNVbml0cyB8fCBieXRlc1VuaXRzKSB7Ci0gICAgICAgICAgICAg
ICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkU2l6ZUNvbHVtbiA9IG9w
ZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuc2l6ZSwgcXVlcnlOdW1iZXJCeXRlcyk7
Ci0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVk
U2l6ZURlbHRhQ29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5zaXpl
RGVsdGEsIHF1ZXJ5TnVtYmVyQnl0ZXMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudENvbHVt
biA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuY291bnQsIHF1ZXJ5TnVtYmVy
KTsKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNo
ZWRDb3VudERlbHRhQ29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5j
b3VudERlbHRhLCBxdWVyeU51bWJlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
IChoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuY29uc3RydWN0b3JOYW1lLmhhc1N1YnN0cmluZyhx
dWVyeSwgdHJ1ZSkpCi0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9z
ZWFyY2hNYXRjaGVkQ29uc0NvbHVtbiA9IHRydWU7Ci0KLSAgICAgICAgICAgIGlmIChoZWFwU25h
cHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb25zQ29sdW1uIHx8Ci0gICAgICAgICAg
ICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkQ291bnRDb2x1bW4g
fHwKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNo
ZWRTaXplQ29sdW1uIHx8Ci0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2Rl
Ll9zZWFyY2hNYXRjaGVkQ291bnREZWx0YUNvbHVtbiB8fAotICAgICAgICAgICAgICAgIGhlYXBT
bmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZFNpemVEZWx0YUNvbHVtbikgewotICAg
ICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5yZWZyZXNoKCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5zbmFwc2hv
dERhdGFHcmlkTGlzdC5jaGlsZHJlblswXTsKLSAgICAgICAgdmFyIGRlcHRoID0gMDsKLSAgICAg
ICAgdmFyIGluZm8gPSB7fTsKLQotICAgICAgICAvLyBUaGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50
IGxldmVscyBvZiBoZWFwIHNuYXBzaG90IG5vZGVzIHJlcHJlc2VudCByZXRhaW5lcnMsCi0gICAg
ICAgIC8vIHNvIHJlY3Vyc2l2ZSBleHBhbnNpb24gd2lsbCBiZSBpbmZpbml0ZSwgc2luY2UgYSBn
cmFwaCBpcyBiZWluZyB0cmF2ZXJzZWQuCi0gICAgICAgIC8vIFNvIGRlZmF1bHQgdG8gYSByZWN1
cnNpb24gY2FwIG9mIDIgbGV2ZWxzLgotICAgICAgICBjb25zdCBtYXhEZXB0aCA9IDI7Ci0KLSAg
ICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICAgICAgICAgIGlmIChtYXRjaGVzUXVlcnkoY3Vy
cmVudCkpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cy5wdXNoKHsgcHJvZmls
ZU5vZGU6IGN1cnJlbnQgfSk7Ci0gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC50cmF2ZXJz
ZU5leHROb2RlKGZhbHNlLCBudWxsLCAoZGVwdGggPj0gbWF4RGVwdGgpLCBpbmZvKTsKLSAgICAg
ICAgICAgIGRlcHRoICs9IGluZm8uZGVwdGhDaGFuZ2U7Ci0gICAgICAgIH0KLQotICAgICAgICBm
aW5pc2hlZENhbGxiYWNrKHRoaXMsIHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsKLSAgICB9
LAotCi0gICAgLy8gRklYTUU6IG1vdmUgdGhlc2UgbWV0aG9kcyB0byBhIHN1cGVyY2xhc3MsIGlu
aGVyaXQgYm90aCB2aWV3cyBmcm9tIGl0LgotICAgIGp1bXBUb0ZpcnN0U2VhcmNoUmVzdWx0OiBX
ZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLmp1bXBUb0ZpcnN0U2VhcmNoUmVz
dWx0LAotICAgIGp1bXBUb0xhc3RTZWFyY2hSZXN1bHQ6IFdlYkluc3BlY3Rvci5DUFVQcm9maWxl
Vmlldy5wcm90b3R5cGUuanVtcFRvTGFzdFNlYXJjaFJlc3VsdCwKLSAgICBqdW1wVG9OZXh0U2Vh
cmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLmp1bXBUb05l
eHRTZWFyY2hSZXN1bHQsCi0gICAganVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQ6IFdlYkluc3Bl
Y3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUuanVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQs
Ci0gICAgc2hvd2luZ0ZpcnN0U2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZp
ZXcucHJvdG90eXBlLnNob3dpbmdGaXJzdFNlYXJjaFJlc3VsdCwKLSAgICBzaG93aW5nTGFzdFNl
YXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3LnByb3RvdHlwZS5zaG93aW5n
TGFzdFNlYXJjaFJlc3VsdCwKLSAgICBfanVtcFRvU2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3Iu
Q1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLl9qdW1wVG9TZWFyY2hSZXN1bHQsCi0KLSAgICByZWZy
ZXNoVmlzaWJsZURhdGE6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjaGlsZCA9IHRo
aXMuZGF0YUdyaWQuY2hpbGRyZW5bMF07Ci0gICAgICAgIHdoaWxlIChjaGlsZCkgewotICAgICAg
ICAgICAgY2hpbGQucmVmcmVzaCgpOwotICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC50cmF2ZXJz
ZU5leHROb2RlKGZhbHNlLCBudWxsLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl91
cGRhdGVTdW1tYXJ5R3JhcGgoKTsKLSAgICB9LAotCi0gICAgX2NoYW5nZUJhc2U6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmJhc2VTbmFwc2hvdC51aWQgPT09IHRoaXMuX3By
b2ZpbGVzKClbdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4XS51aWQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fcmVzZXREYXRhR3JpZExpc3QocmVzZXRD
b21wbGV0ZWQuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gcmVzZXRDb21wbGV0ZWQo
KSB7Ci0gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTsKLQotICAgICAgICAgICAgaWYgKCF0aGlz
LmN1cnJlbnRRdWVyeSB8fCAhdGhpcy5fc2VhcmNoRmluaXNoZWRDYWxsYmFjayB8fCAhdGhpcy5f
c2VhcmNoUmVzdWx0cykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIC8v
IFRoZSBjdXJyZW50IHNlYXJjaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgYWdhaW4uIEZpcnN0IG5l
Z2F0ZSBvdXQgcHJldmlvdXMgbWF0Y2gKLSAgICAgICAgICAgIC8vIGNvdW50IGJ5IGNhbGxpbmcg
dGhlIHNlYXJjaCBmaW5pc2hlZCBjYWxsYmFjayB3aXRoIGEgbmVnYXRpdmUgbnVtYmVyIG9mIG1h
dGNoZXMuCi0gICAgICAgICAgICAvLyBUaGVuIHBlcmZvcm0gdGhlIHNlYXJjaCBhZ2FpbiB3aXRo
IHRoZSBzYW1lIHF1ZXJ5IGFuZCBjYWxsYmFjay4KLSAgICAgICAgICAgIHRoaXMuX3NlYXJjaEZp
bmlzaGVkQ2FsbGJhY2sodGhpcywgLXRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsKLSAgICAg
ICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCh0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5fc2VhcmNo
RmluaXNoZWRDYWxsYmFjayk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX2NyZWF0ZVNuYXBz
aG90RGF0YUdyaWRMaXN0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc25h
cHNob3REYXRhR3JpZExpc3QpCi0gICAgICAgICAgZGVsZXRlIHRoaXMuX3NuYXBzaG90RGF0YUdy
aWRMaXN0OwotCi0gICAgICAgIHRoaXMuX3NuYXBzaG90RGF0YUdyaWRMaXN0ID0gbmV3IFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QodGhpcywgdGhpcy5iYXNlU25hcHNob3Qu
ZW50cmllcywgdGhpcy5wcm9maWxlLmVudHJpZXMpOwotICAgICAgICByZXR1cm4gdGhpcy5fc25h
cHNob3REYXRhR3JpZExpc3Q7Ci0gICAgfSwKLQotICAgIF9wcm9maWxlczogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMuZ2V0UHJv
ZmlsZXMoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCk7Ci0gICAg
fSwKLQotICAgIF9sb2FkUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSwgY2FsbGJhY2spCi0gICAg
ewotICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLmxvYWRIZWFwU25hcHNob3Qo
cHJvZmlsZS51aWQsIGNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgcHJvY2Vzc0xvYWRlZFNuYXBz
aG90OiBmdW5jdGlvbihwcm9maWxlLCBsb2FkZWRTbmFwc2hvdCkKLSAgICB7Ci0gICAgICAgIHZh
ciBzbmFwc2hvdCA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fY29u
dmVydFNuYXBzaG90KGxvYWRlZFNuYXBzaG90KTsKLSAgICAgICAgcHJvZmlsZS5jaGlsZHJlbiA9
IHNuYXBzaG90LmNoaWxkcmVuOwotICAgICAgICBwcm9maWxlLmVudHJpZXMgPSBzbmFwc2hvdC5l
bnRyaWVzOwotICAgICAgICBwcm9maWxlLmxvd2xldmVscyA9IHNuYXBzaG90Lmxvd2xldmVsczsK
LSAgICAgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9wcmVwYXJl
UHJvZmlsZShwcm9maWxlKTsKLSAgICB9LAotCi0gICAgX21vdXNlRG93bkluRGF0YUdyaWQ6IGZ1
bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LmRldGFpbCA8IDIpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNlbGwgPSBldmVudC50YXJnZXQuZW5jbG9z
aW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZSgidGQiKTsKLSAgICAgICAgaWYgKCFjZWxsIHx8ICgh
Y2VsbC5oYXNTdHlsZUNsYXNzKCJjb3VudC1jb2x1bW4iKSAmJiAhY2VsbC5oYXNTdHlsZUNsYXNz
KCJzaXplLWNvbHVtbiIpICYmICFjZWxsLmhhc1N0eWxlQ2xhc3MoImNvdW50RGVsdGEtY29sdW1u
IikgJiYgIWNlbGwuaGFzU3R5bGVDbGFzcygic2l6ZURlbHRhLWNvbHVtbiIpKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBpZiAoY2VsbC5oYXNTdHlsZUNsYXNzKCJjb3VudC1jb2x1
bW4iKSkKLSAgICAgICAgICAgIHRoaXMuc2hvd0NvdW50QXNQZXJjZW50ID0gIXRoaXMuc2hvd0Nv
dW50QXNQZXJjZW50OwotICAgICAgICBlbHNlIGlmIChjZWxsLmhhc1N0eWxlQ2xhc3MoInNpemUt
Y29sdW1uIikpCi0gICAgICAgICAgICB0aGlzLnNob3dTaXplQXNQZXJjZW50ID0gIXRoaXMuc2hv
d1NpemVBc1BlcmNlbnQ7Ci0gICAgICAgIGVsc2UgaWYgKGNlbGwuaGFzU3R5bGVDbGFzcygiY291
bnREZWx0YS1jb2x1bW4iKSkKLSAgICAgICAgICAgIHRoaXMuc2hvd0NvdW50RGVsdGFBc1BlcmNl
bnQgPSAhdGhpcy5zaG93Q291bnREZWx0YUFzUGVyY2VudDsKLSAgICAgICAgZWxzZSBpZiAoY2Vs
bC5oYXNTdHlsZUNsYXNzKCJzaXplRGVsdGEtY29sdW1uIikpCi0gICAgICAgICAgICB0aGlzLnNo
b3dTaXplRGVsdGFBc1BlcmNlbnQgPSAhdGhpcy5zaG93U2l6ZURlbHRhQXNQZXJjZW50OwotCi0g
ICAgICAgIHRoaXMucmVmcmVzaFNob3dBc1BlcmNlbnRzKCk7Ci0KLSAgICAgICAgZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKLSAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgfSwK
LQotICAgIGdldCBfaXNTaG93aW5nQXNQZXJjZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLnNob3dDb3VudEFzUGVyY2VudCAmJiB0aGlzLnNob3dTaXplQXNQZXJjZW50ICYmIHRoaXMu
c2hvd0NvdW50RGVsdGFBc1BlcmNlbnQgJiYgdGhpcy5zaG93U2l6ZURlbHRhQXNQZXJjZW50Owot
ICAgIH0sCi0KLSAgICBfcGVyY2VudENsaWNrZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAg
ICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHRoaXMuX2lzU2hvd2luZ0FzUGVyY2VudDsKLSAgICAg
ICAgdGhpcy5zaG93Q291bnRBc1BlcmNlbnQgPSAhY3VycmVudFN0YXRlOwotICAgICAgICB0aGlz
LnNob3dTaXplQXNQZXJjZW50ID0gIWN1cnJlbnRTdGF0ZTsKLSAgICAgICAgdGhpcy5zaG93Q291
bnREZWx0YUFzUGVyY2VudCA9ICFjdXJyZW50U3RhdGU7Ci0gICAgICAgIHRoaXMuc2hvd1NpemVE
ZWx0YUFzUGVyY2VudCA9ICFjdXJyZW50U3RhdGU7Ci0gICAgICAgIHRoaXMucmVmcmVzaFNob3dB
c1BlcmNlbnRzKCk7Ci0gICAgfSwKLQotICAgIF9jb252ZXJ0U25hcHNob3Q6IGZ1bmN0aW9uKGxv
YWRlZFNuYXBzaG90KQotICAgIHsKLSAgICAgICAgdmFyIHNuYXBzaG90ID0gbmV3IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3QobG9hZGVkU25hcHNob3QpOwotICAgICAgICB2YXIgcmVzdWx0ID0g
e2xvd2xldmVsczoge30sIGVudHJpZXM6IHt9LCBjaGlsZHJlbjoge319OwotICAgICAgICB2YXIg
cm9vdEVkZ2VzSXRlciA9IHNuYXBzaG90LnJvb3ROb2RlLmVkZ2VzOwotICAgICAgICBmb3IgKHZh
ciBpdGVyID0gcm9vdEVkZ2VzSXRlcjsgaXRlci5oYXNOZXh0KCk7IGl0ZXIubmV4dCgpKSB7Ci0g
ICAgICAgICAgICB2YXIgbm9kZSA9IGl0ZXIuZWRnZS5ub2RlOwotICAgICAgICAgICAgaWYgKG5v
ZGUuaXNIaWRkZW4pCi0gICAgICAgICAgICAgICAgcmVzdWx0Lmxvd2xldmVsc1tub2RlLm5hbWVd
ID0ge2NvdW50OiBub2RlLmluc3RhbmNlc0NvdW50LCBzaXplOiBub2RlLnNlbGZTaXplLCB0eXBl
OiBub2RlLm5hbWV9OwotICAgICAgICAgICAgZWxzZSBpZiAobm9kZS5pbnN0YW5jZXNDb3VudCkK
LSAgICAgICAgICAgICAgICByZXN1bHQuZW50cmllc1tub2RlLm5hbWVdID0ge2NvbnN0cnVjdG9y
TmFtZTogbm9kZS5uYW1lLCBjb3VudDogbm9kZS5pbnN0YW5jZXNDb3VudCwgc2l6ZTogbm9kZS5z
ZWxmU2l6ZX07Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgZW50cnkg
PSB7Y29uc3RydWN0b3JOYW1lOiBub2RlLm5hbWV9OwotICAgICAgICAgICAgICAgIGZvciAodmFy
IGlubmVySXRlciA9IG5vZGUuZWRnZXM7IGlubmVySXRlci5oYXNOZXh0KCk7IGlubmVySXRlci5u
ZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGVkZ2UgPSBpbm5lckl0ZXIuZWRnZTsK
LSAgICAgICAgICAgICAgICAgICAgZW50cnlbZWRnZS5ub2RlSW5kZXhdID0ge2NvbnN0cnVjdG9y
TmFtZTogZWRnZS5ub2RlLm5hbWUsIGNvdW50OiBlZGdlLm5hbWV9OwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGRyZW5bcm9vdEVkZ2VzSXRlci5lZGdlLm5v
ZGVJbmRleF0gPSBlbnRyeTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBfcHJlcGFyZVByb2ZpbGU6IGZ1bmN0aW9uKHByb2Zp
bGUpCi0gICAgewotICAgICAgICBmb3IgKHZhciBwcm9maWxlRW50cnkgaW4gcHJvZmlsZS5lbnRy
aWVzKQotICAgICAgICAgICAgcHJvZmlsZS5lbnRyaWVzW3Byb2ZpbGVFbnRyeV0ucmV0YWluZXJz
ID0ge307Ci0gICAgICAgIHByb2ZpbGUuY2x1c3RlcnMgPSB7fTsKLQotICAgICAgICBmb3IgKHZh
ciBhZGRyIGluIHByb2ZpbGUuY2hpbGRyZW4pIHsKLSAgICAgICAgICAgIHZhciByZXRhaW5lciA9
IHByb2ZpbGUuY2hpbGRyZW5bYWRkcl07Ci0gICAgICAgICAgICB2YXIgcmV0YWluZXJJZCA9IHJl
dGFpbmVyLmNvbnN0cnVjdG9yTmFtZSArICI6IiArIGFkZHI7Ci0gICAgICAgICAgICBmb3IgKHZh
ciBjaGlsZEFkZHIgaW4gcmV0YWluZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGRBZGRy
ID09PSAiY29uc3RydWN0b3JOYW1lIikgY29udGludWU7Ci0gICAgICAgICAgICAgICAgdmFyIGl0
ZW0gPSByZXRhaW5lcltjaGlsZEFkZHJdOwotICAgICAgICAgICAgICAgIHZhciBpdGVtSWQgPSBp
dGVtLmNvbnN0cnVjdG9yTmFtZSArICI6IiArIGNoaWxkQWRkcjsKLSAgICAgICAgICAgICAgICBp
ZiAoKGl0ZW0uY29uc3RydWN0b3JOYW1lID09PSAiT2JqZWN0IiB8fCBpdGVtLmNvbnN0cnVjdG9y
TmFtZSA9PT0gIkFycmF5IikpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEoaXRlbUlkIGlu
IHByb2ZpbGUuY2x1c3RlcnMpKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS5jbHVz
dGVyc1tpdGVtSWRdID0geyBjb25zdHJ1Y3Rvck5hbWU6IGl0ZW1JZCwgcmV0YWluZXJzOiB7fSB9
OwotICAgICAgICAgICAgICAgICAgICBtZXJnZVJldGFpbmVycyhwcm9maWxlLmNsdXN0ZXJzW2l0
ZW1JZF0sIGl0ZW0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZXJnZVJl
dGFpbmVycyhwcm9maWxlLmVudHJpZXNbaXRlbS5jb25zdHJ1Y3Rvck5hbWVdLCBpdGVtKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIG1lcmdlUmV0YWluZXJz
KGVudHJ5LCBpdGVtKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIShyZXRhaW5lci5jb25z
dHJ1Y3Rvck5hbWUgaW4gZW50cnkucmV0YWluZXJzKSkKLSAgICAgICAgICAgICAgIGVudHJ5LnJl
dGFpbmVyc1tyZXRhaW5lci5jb25zdHJ1Y3Rvck5hbWVdID0geyBjb25zdHJ1Y3Rvck5hbWU6IHJl
dGFpbmVyLmNvbnN0cnVjdG9yTmFtZSwgY291bnQ6IDAsIGNsdXN0ZXJzOiB7fSB9OwotICAgICAg
ICAgICAgdmFyIHJldGFpbmVyRW50cnkgPSBlbnRyeS5yZXRhaW5lcnNbcmV0YWluZXIuY29uc3Ry
dWN0b3JOYW1lXTsKLSAgICAgICAgICAgIHJldGFpbmVyRW50cnkuY291bnQgKz0gaXRlbS5jb3Vu
dDsKLSAgICAgICAgICAgIGlmIChyZXRhaW5lci5jb25zdHJ1Y3Rvck5hbWUgPT09ICJPYmplY3Qi
IHx8IHJldGFpbmVyLmNvbnN0cnVjdG9yTmFtZSA9PT0gIkFycmF5IikKLSAgICAgICAgICAgICAg
ICByZXRhaW5lckVudHJ5LmNsdXN0ZXJzW3JldGFpbmVySWRdID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICBfcmVzZXREYXRhR3JpZExpc3Q6IGZ1bmN0aW9uKGNhbGxiYWNrKQotICAg
IHsKLSAgICAgICAgdGhpcy5fbG9hZFByb2ZpbGUodGhpcy5fcHJvZmlsZXMoKVt0aGlzLmJhc2VT
ZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXhdLCBwcm9maWxlTG9hZGVkLmJpbmQodGhpcykpOwot
Ci0gICAgICAgIGZ1bmN0aW9uIHByb2ZpbGVMb2FkZWQocHJvZmlsZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgdGhpcy5iYXNlU25hcHNob3QgPSBwcm9maWxlOwotICAgICAgICAgICAgdmFyIGxh
c3RDb21wYXJhdG9yID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTGlzdC5wcm9w
ZXJ0eUNvbXBhcmF0b3IoInNpemUiLCBmYWxzZSk7Ci0gICAgICAgICAgICBpZiAodGhpcy5zbmFw
c2hvdERhdGFHcmlkTGlzdCkKLSAgICAgICAgICAgICAgICBsYXN0Q29tcGFyYXRvciA9IHRoaXMu
c25hcHNob3REYXRhR3JpZExpc3QubGFzdENvbXBhcmF0b3I7Ci0gICAgICAgICAgICB0aGlzLnNu
YXBzaG90RGF0YUdyaWRMaXN0ID0gdGhpcy5fY3JlYXRlU25hcHNob3REYXRhR3JpZExpc3QoKTsK
LSAgICAgICAgICAgIHRoaXMuc25hcHNob3REYXRhR3JpZExpc3Quc29ydChsYXN0Q29tcGFyYXRv
ciwgdHJ1ZSk7Ci0gICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICB9Ci0gICAgfSwKLQot
ICAgIF9zb3J0RGF0YTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNvcnRBc2NlbmRp
bmcgPSB0aGlzLmRhdGFHcmlkLnNvcnRPcmRlciA9PT0gImFzY2VuZGluZyI7Ci0gICAgICAgIHZh
ciBzb3J0Q29sdW1uSWRlbnRpZmllciA9IHRoaXMuZGF0YUdyaWQuc29ydENvbHVtbklkZW50aWZp
ZXI7Ci0gICAgICAgIHZhciBzb3J0UHJvcGVydHkgPSB7Ci0gICAgICAgICAgICBjb25zOiBbImNv
bnN0cnVjdG9yTmFtZSIsIG51bGxdLAotICAgICAgICAgICAgY291bnQ6IFsiY291bnQiLCAiY29u
c3RydWN0b3JOYW1lIl0sCi0gICAgICAgICAgICBzaXplOiBbInNpemUiLCAiY29uc3RydWN0b3JO
YW1lIl0sCi0gICAgICAgICAgICBjb3VudERlbHRhOiBbdGhpcy5zaG93Q291bnREZWx0YUFzUGVy
Y2VudCA/ICJjb3VudERlbHRhUGVyY2VudCIgOiAiY291bnREZWx0YSIsICJjb25zdHJ1Y3Rvck5h
bWUiXSwKLSAgICAgICAgICAgIHNpemVEZWx0YTogW3RoaXMuc2hvd1NpemVEZWx0YUFzUGVyY2Vu
dCA/ICJzaXplRGVsdGFQZXJjZW50IiA6ICJzaXplRGVsdGEiLCAiY29uc3RydWN0b3JOYW1lIl0K
LSAgICAgICAgfVtzb3J0Q29sdW1uSWRlbnRpZmllcl07Ci0KLSAgICAgICAgdGhpcy5zbmFwc2hv
dERhdGFHcmlkTGlzdC5zb3J0KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3Qu
cHJvcGVydHlDb21wYXJhdG9yKHNvcnRQcm9wZXJ0eVswXSwgc29ydFByb3BlcnR5WzFdLCBzb3J0
QXNjZW5kaW5nKSk7Ci0KLSAgICAgICAgdGhpcy5yZWZyZXNoKCk7Ci0gICAgfSwKLQotICAgIF91
cGRhdGVCYXNlT3B0aW9uczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGxpc3QgPSB0
aGlzLl9wcm9maWxlcygpOwotICAgICAgICAvLyBXZSdyZSBhc3N1bWluZyB0aGF0IHNuYXBzaG90
cyBjYW4gb25seSBiZSBhZGRlZC4KLSAgICAgICAgaWYgKHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQu
bGVuZ3RoID09PSBsaXN0Lmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBm
b3IgKHZhciBpID0gdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5sZW5ndGgsIG4gPSBsaXN0Lmxlbmd0
aDsgaSA8IG47ICsraSkgewotICAgICAgICAgICAgdmFyIGJhc2VPcHRpb24gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJvcHRpb24iKTsKLSAgICAgICAgICAgIHZhciB0aXRsZSA9IGxpc3RbaV0u
dGl0bGU7Ci0gICAgICAgICAgICBpZiAoIXRpdGxlLmluZGV4T2YoVXNlckluaXRpYXRlZFByb2Zp
bGVOYW1lKSkKLSAgICAgICAgICAgICAgICB0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
U25hcHNob3QgJWQiLCB0aXRsZS5zdWJzdHJpbmcoVXNlckluaXRpYXRlZFByb2ZpbGVOYW1lLmxl
bmd0aCArIDEpKTsKLSAgICAgICAgICAgIGJhc2VPcHRpb24ubGFiZWwgPSBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkNvbXBhcmVkIHRvICVzIiwgdGl0bGUpOwotICAgICAgICAgICAgdGhpcy5iYXNl
U2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChiYXNlT3B0aW9uKTsKLSAgICAgICAgfQotICAgIH0s
Ci0KLSAgICBfdXBkYXRlUGVyY2VudEJ1dHRvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX2lzU2hvd2luZ0FzUGVyY2VudCkgewotICAgICAgICAgICAgdGhpcy5wZXJjZW50
QnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IGFic29sdXRlIGNvdW50
cyBhbmQgc2l6ZXMuIik7Ci0gICAgICAgICAgICB0aGlzLnBlcmNlbnRCdXR0b24udG9nZ2xlZCA9
IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLnBlcmNlbnRCdXR0b24u
dGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgY291bnRzIGFuZCBzaXplcyBhcyBw
ZXJjZW50YWdlcy4iKTsKLSAgICAgICAgICAgIHRoaXMucGVyY2VudEJ1dHRvbi50b2dnbGVkID0g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3VwZGF0ZVN1bW1hcnlHcmFwaDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5jb3VudHNTdW1tYXJ5QmFyLmNhbGN1bGF0b3Iu
c2hvd0FzUGVyY2VudCA9IHRoaXMuX2lzU2hvd2luZ0FzUGVyY2VudDsKLSAgICAgICAgdGhpcy5j
b3VudHNTdW1tYXJ5QmFyLnVwZGF0ZSh0aGlzLnByb2ZpbGUubG93bGV2ZWxzKTsKLQotICAgICAg
ICB0aGlzLnNpemVzU3VtbWFyeUJhci5jYWxjdWxhdG9yLnNob3dBc1BlcmNlbnQgPSB0aGlzLl9p
c1Nob3dpbmdBc1BlcmNlbnQ7Ci0gICAgICAgIHRoaXMuc2l6ZXNTdW1tYXJ5QmFyLnVwZGF0ZSh0
aGlzLnByb2ZpbGUubG93bGV2ZWxzKTsKLSAgICB9Ci19OwotCi1XZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Vmlldy5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90
eXBlOwotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5TZWFyY2hIZWxwZXIgPSB7Ci0g
ICAgLy8gSW4gY29tcGFyYXRvcnMsIHdlIGFzc3VtZSB0aGF0IGEgdmFsdWUgZnJvbSBhIG5vZGUg
aXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCi0gICAgb3BlcmF0aW9uczogewotICAg
ICAgICBMRVNTOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAhPT0gbnVsbCAmJiBhIDwgYjsg
fSwKLSAgICAgICAgTEVTU19PUl9FUVVBTDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgIT09
IG51bGwgJiYgYSA8PSBiOyB9LAotICAgICAgICBFUVVBTDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0
dXJuIGEgIT09IG51bGwgJiYgYSA9PT0gYjsgfSwKLSAgICAgICAgR1JFQVRFUl9PUl9FUVVBTDog
ZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgIT09IG51bGwgJiYgYSA+PSBiOyB9LAotICAgICAg
ICBHUkVBVEVSOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAhPT0gbnVsbCAmJiBhID4gYjsg
fQotICAgIH0sCi0KLSAgICBvcGVyYXRpb25QYXJzZXJzOiB7Ci0gICAgICAgIExFU1M6IC9ePChc
ZCspLywKLSAgICAgICAgTEVTU19PUl9FUVVBTDogL148PShcZCspLywKLSAgICAgICAgR1JFQVRF
Ul9PUl9FUVVBTDogL14+PShcZCspLywKLSAgICAgICAgR1JFQVRFUjogL14+KFxkKykvCi0gICAg
fSwKLQotICAgIHBhcnNlT3BlcmF0aW9uQW5kTnVtYmVyOiBmdW5jdGlvbihxdWVyeSkKLSAgICB7
Ci0gICAgICAgIHZhciBvcGVyYXRpb25zID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcu
U2VhcmNoSGVscGVyLm9wZXJhdGlvbnM7Ci0gICAgICAgIHZhciBwYXJzZXJzID0gV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFZpZXcuU2VhcmNoSGVscGVyLm9wZXJhdGlvblBhcnNlcnM7Ci0gICAg
ICAgIGZvciAodmFyIG9wZXJhdGlvbiBpbiBwYXJzZXJzKSB7Ci0gICAgICAgICAgICB2YXIgbWF0
Y2ggPSBxdWVyeS5tYXRjaChwYXJzZXJzW29wZXJhdGlvbl0pOwotICAgICAgICAgICAgaWYgKG1h
dGNoICE9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBbb3BlcmF0aW9uc1tvcGVyYXRp
b25dLCBwYXJzZUZsb2F0KG1hdGNoWzFdKV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFtv
cGVyYXRpb25zLkVRVUFMLCBwYXJzZUZsb2F0KHF1ZXJ5KV07Ci0gICAgfSwKLQotICAgIHBlcmNl
bnRzOiAvJSQvLAotCi0gICAgbWVnYUJ5dGVzOiAvTUIkL2ksCi0KLSAgICBraWxvQnl0ZXM6IC9L
QiQvaSwKLQotICAgIGJ5dGVzOiAvQiQvaQotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlD
YWxjdWxhdG9yID0gZnVuY3Rpb24obG93TGV2ZWxGaWVsZCkKLXsKLSAgICB0aGlzLnRvdGFsID0g
MTsKLSAgICB0aGlzLmxvd0xldmVsRmllbGQgPSBsb3dMZXZlbEZpZWxkOwotfQotCi1XZWJJbnNw
ZWN0b3IuSGVhcFN1bW1hcnlDYWxjdWxhdG9yLnByb3RvdHlwZSA9IHsKLSAgICBjb21wdXRlU3Vt
bWFyeVZhbHVlczogZnVuY3Rpb24obG93TGV2ZWxzKQotICAgIHsKLSAgICAgICAgdmFyIGhpZ2hM
ZXZlbHMgPSB7IGRhdGE6IDAsIGNvZGU6IDAgfTsKLSAgICAgICAgdGhpcy50b3RhbCA9IDA7Ci0g
ICAgICAgIGZvciAodmFyIGl0ZW0gaW4gbG93TGV2ZWxzKSB7Ci0gICAgICAgICAgICB2YXIgaGln
aEl0ZW0gPSB0aGlzLl9oaWdoRnJvbUxvdyhpdGVtKTsKLSAgICAgICAgICAgIGlmIChoaWdoSXRl
bSkgewotICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxvd0xldmVsc1tpdGVtXVt0aGlzLmxv
d0xldmVsRmllbGRdOwotICAgICAgICAgICAgICAgIGhpZ2hMZXZlbHNbaGlnaEl0ZW1dICs9IHZh
bHVlOwotICAgICAgICAgICAgICAgIHRoaXMudG90YWwgKz0gdmFsdWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIHJlc3VsdCA9IHsgY2F0ZWdvcnlWYWx1ZXM6IGhpZ2hM
ZXZlbHMgfTsKLSAgICAgICAgaWYgKCF0aGlzLnNob3dBc1BlcmNlbnQpCi0gICAgICAgICAgICBy
ZXN1bHQudG90YWwgPSB0aGlzLnRvdGFsOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0s
Ci0KLSAgICBmb3JtYXRWYWx1ZTogZnVuY3Rpb24odmFsdWUpCi0gICAgewotICAgICAgICBpZiAo
dGhpcy5zaG93QXNQZXJjZW50KQotICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0
cmluZygiJS4yZiUlIiwgdmFsdWUgLyB0aGlzLnRvdGFsICogMTAwLjApOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVUb1N0cmluZyh2YWx1ZSk7Ci0gICAgfSwK
LQotICAgIGdldCBzaG93QXNQZXJjZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9z
aG93QXNQZXJjZW50OwotICAgIH0sCi0KLSAgICBzZXQgc2hvd0FzUGVyY2VudCh4KQotICAgIHsK
LSAgICAgICAgdGhpcy5fc2hvd0FzUGVyY2VudCA9IHg7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0
b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3IgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5z
cGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5jYWxsKHRoaXMsICJjb3VudCIpOwotfQotCi1X
ZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3IucHJvdG90eXBlID0gewotICAg
IF9oaWdoRnJvbUxvdzogZnVuY3Rpb24odHlwZSkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlID09
PSAiQ09ERV9UWVBFIiB8fCB0eXBlID09PSAiU0hBUkVEX0ZVTkNUSU9OX0lORk9fVFlQRSIgfHwg
dHlwZSA9PT0gIlNDUklQVF9UWVBFIikgcmV0dXJuICJjb2RlIjsKLSAgICAgICAgaWYgKHR5cGUg
PT09ICJTVFJJTkdfVFlQRSIgfHwgdHlwZSA9PT0gIkhFQVBfTlVNQkVSX1RZUEUiIHx8IHR5cGUu
bWF0Y2goL15KU18vKSkgcmV0dXJuICJkYXRhIjsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
fSwKLQotICAgIF92YWx1ZVRvU3RyaW5nOiBmdW5jdGlvbih2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB2YWx1ZS50b1N0cmluZygpOwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLkhlYXBT
dW1tYXJ5Q291bnRDYWxjdWxhdG9yLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3Iu
SGVhcFN1bW1hcnlDYWxjdWxhdG9yLnByb3RvdHlwZTsKLQotV2ViSW5zcGVjdG9yLkhlYXBTdW1t
YXJ5U2l6ZUNhbGN1bGF0b3IgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkhlYXBT
dW1tYXJ5Q2FsY3VsYXRvci5jYWxsKHRoaXMsICJzaXplIik7Ci19Ci0KLVdlYkluc3BlY3Rvci5I
ZWFwU3VtbWFyeVNpemVDYWxjdWxhdG9yLnByb3RvdHlwZSA9IHsKLSAgICBfaGlnaEZyb21Mb3c6
IGZ1bmN0aW9uKHR5cGUpCi0gICAgewotICAgICAgICBpZiAodHlwZSA9PT0gIkNPREVfVFlQRSIg
fHwgdHlwZSA9PT0gIlNIQVJFRF9GVU5DVElPTl9JTkZPX1RZUEUiIHx8IHR5cGUgPT09ICJTQ1JJ
UFRfVFlQRSIpCi0gICAgICAgICAgICByZXR1cm4gImNvZGUiOwotICAgICAgICBpZiAodHlwZSA9
PT0gIlNUUklOR19UWVBFIiB8fCB0eXBlID09PSAiSEVBUF9OVU1CRVJfVFlQRSIgfHwgdHlwZS5t
YXRjaCgvXkpTXy8pIHx8IHR5cGUubWF0Y2goL19BUlJBWV9UWVBFJC8pKQotICAgICAgICAgICAg
cmV0dXJuICJkYXRhIjsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIF92YWx1
ZVRvU3RyaW5nOiBOdW1iZXIuYnl0ZXNUb1N0cmluZwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFN1
bW1hcnlTaXplQ2FsY3VsYXRvci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkhl
YXBTdW1tYXJ5Q2FsY3VsYXRvci5wcm90b3R5cGU7Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzID0gZnVuY3Rpb24ob3duaW5nVHJlZSkKLXsKLSAg
ICB0aGlzLnRyZWUgPSBvd25pbmdUcmVlOwotCi0gICAgV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9k
ZS5jYWxsKHRoaXMsIG51bGwsIHRoaXMuX2hhc1JldGFpbmVycyk7Ci0KLSAgICB0aGlzLmFkZEV2
ZW50TGlzdGVuZXIoInBvcHVsYXRlIiwgdGhpcy5fcG9wdWxhdGUsIHRoaXMpOwotfTsKLQotV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBl
ID0gewotICAgIGlzRW1wdHlTZXQ6IGZ1bmN0aW9uKHNldCkKLSAgICB7Ci0gICAgICAgIGZvciAo
dmFyIHggaW4gc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9LAotCi0gICAgZ2V0IF9oYXNSZXRhaW5lcnMoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICF0aGlzLmlzRW1wdHlTZXQodGhpcy5yZXRhaW5lcnMpOwotICAgIH0sCi0KLSAgICBn
ZXQgX3BhcmVudCgpCi0gICAgewotICAgICAgICAvLyBGb3IgdG9wLWxldmVsIG5vZGVzLCByZXR1
cm4gb3duaW5nIHRyZWUgYXMgYSBwYXJlbnQsIG5vdCBkYXRhIGdyaWQuCi0gICAgICAgIHJldHVy
biB0aGlzLnBhcmVudCAhPT0gdGhpcy5kYXRhR3JpZCA/IHRoaXMucGFyZW50IDogdGhpcy50cmVl
OwotICAgIH0sCi0KLSAgICBfcG9wdWxhdGU6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAg
ICAgZnVuY3Rpb24gYXBwZW5kRGlmZkVudHJ5KGJhc2VJdGVtLCBzbmFwc2hvdEl0ZW0pCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3REYXRhR3JpZFJldGFpbmVyTm9kZSh0aGlzLnNuYXBzaG90VmlldywgYmFzZUl0ZW0s
IHNuYXBzaG90SXRlbSwgdGhpcy50cmVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnBy
b2R1Y2VEaWZmKHRoaXMuYmFzZVJldGFpbmVycywgdGhpcy5yZXRhaW5lcnMsIGFwcGVuZERpZmZF
bnRyeS5iaW5kKHRoaXMpKTsKLQotICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7Ci0gICAgICAg
ICAgICB2YXIgY3VycmVudENvbXBhcmF0b3IgPSB0aGlzLl9wYXJlbnQubGFzdENvbXBhcmF0b3I7
Ci0gICAgICAgICAgICBpZiAoY3VycmVudENvbXBhcmF0b3IpCi0gICAgICAgICAgICAgICAgdGhp
cy5zb3J0KGN1cnJlbnRDb21wYXJhdG9yLCB0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRo
aXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wdWxhdGUiLCB0aGlzLl9wb3B1bGF0ZSwgdGhpcyk7
Ci0gICAgfSwKLQotICAgIHByb2R1Y2VEaWZmOiBmdW5jdGlvbihiYXNlRW50cmllcywgY3VycmVu
dEVudHJpZXMsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaXRlbSBpbiBjdXJy
ZW50RW50cmllcykKLSAgICAgICAgICAgIGNhbGxiYWNrKGJhc2VFbnRyaWVzW2l0ZW1dLCBjdXJy
ZW50RW50cmllc1tpdGVtXSk7Ci0KLSAgICAgICAgZm9yIChpdGVtIGluIGJhc2VFbnRyaWVzKSB7
Ci0gICAgICAgICAgICBpZiAoIShpdGVtIGluIGN1cnJlbnRFbnRyaWVzKSkKLSAgICAgICAgICAg
ICAgICBjYWxsYmFjayhiYXNlRW50cmllc1tpdGVtXSwgbnVsbCk7Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgc29ydDogZnVuY3Rpb24oY29tcGFyYXRvciwgZm9yY2UpIHsKLSAgICAgICAgaWYg
KCFmb3JjZSAmJiB0aGlzLmxhc3RDb21wYXJhdG9yID09PSBjb21wYXJhdG9yKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuY2hpbGRyZW4uc29ydChjb21wYXJhdG9yKTsKLSAg
ICAgICAgdmFyIGNoaWxkQ291bnQgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsKLSAgICAgICAgZm9y
ICh2YXIgY2hpbGRJbmRleCA9IDA7IGNoaWxkSW5kZXggPCBjaGlsZENvdW50OyArK2NoaWxkSW5k
ZXgpCi0gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2NoaWxkSW5kZXhdLl9yZWNhbGN1bGF0ZVNp
YmxpbmdzKGNoaWxkSW5kZXgpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hp
bGRyZW4ubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRy
ZW5baV07Ci0gICAgICAgICAgICBpZiAoIWZvcmNlICYmICghY2hpbGQuZXhwYW5kZWQgfHwgY2hp
bGQubGFzdENvbXBhcmF0b3IgPT09IGNvbXBhcmF0b3IpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgY2hpbGQuc29ydChjb21wYXJhdG9yLCBmb3JjZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy5sYXN0Q29tcGFyYXRvciA9IGNvbXBhcmF0b3I7Ci0gICAgfSwKLQot
ICAgIHNpZ25Gb3JEZWx0YTogZnVuY3Rpb24oZGVsdGEpIHsKLSAgICAgICAgaWYgKGRlbHRhID09
PSAwKQotICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICBpZiAoZGVsdGEgPiAwKQotICAg
ICAgICAgICAgcmV0dXJuICIrIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuICJc
dTIyMTIiOyAgLy8gTWF0aCBtaW51cyBzaWduLCBzYW1lIHdpZHRoIGFzIHBsdXMuCi0gICAgfSwK
LQotICAgIHNob3dEZWx0YUFzUGVyY2VudDogZnVuY3Rpb24odmFsdWUpCi0gICAgewotICAgICAg
ICBpZiAodmFsdWUgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkKLSAgICAgICAgICAgIHJl
dHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIm5ldyIpOwotICAgICAgICBlbHNlIGlmICh2YWx1
ZSA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKQotICAgICAgICAgICAgcmV0dXJuIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiZGVsZXRlZCIpOwotICAgICAgICBpZiAodmFsdWUgPiAxMDAwLjAp
Ci0gICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyA+MTAwMCUlIiwg
dGhpcy5zaWduRm9yRGVsdGEodmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5V
SVN0cmluZygiJXMlLjJmJSUiLCB0aGlzLnNpZ25Gb3JEZWx0YSh2YWx1ZSksIE1hdGguYWJzKHZh
bHVlKSk7Ci0gICAgfSwKLQotICAgIGdldFRvdGFsQ291bnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIGlmICghdGhpcy5fY291bnQpIHsKLSAgICAgICAgICAgIHRoaXMuX2NvdW50ID0gMDsK
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkg
PCBuOyArK2kpCi0gICAgICAgICAgICAgICAgdGhpcy5fY291bnQgKz0gdGhpcy5jaGlsZHJlbltp
XS5jb3VudDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5fY291bnQ7Ci0gICAgfSwK
LQotICAgIGdldFRvdGFsU2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlz
Ll9zaXplKSB7Ci0gICAgICAgICAgICB0aGlzLl9zaXplID0gMDsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpCi0gICAgICAg
ICAgICAgICAgdGhpcy5fc2l6ZSArPSB0aGlzLmNoaWxkcmVuW2ldLnNpemU7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7Ci0gICAgfSwKLQotICAgIGdldCBjb3VudFBlcmNl
bnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuY291bnQgLyB0aGlzLl9wYXJlbnQuZ2V0
VG90YWxDb3VudCgpICogMTAwLjA7Ci0gICAgfSwKLQotICAgIGdldCBzaXplUGVyY2VudCgpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5zaXplIC8gdGhpcy5fcGFyZW50LmdldFRvdGFsU2l6
ZSgpICogMTAwLjA7Ci0gICAgfSwKLQotICAgIGdldCBjb3VudERlbHRhUGVyY2VudCgpCi0gICAg
ewotICAgICAgICBpZiAodGhpcy5iYXNlQ291bnQgPiAwKSB7Ci0gICAgICAgICAgICBpZiAodGhp
cy5jb3VudCA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291bnREZWx0YSAvIHRo
aXMuYmFzZUNvdW50ICogMTAwLjA7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
cmV0dXJuIE51bWJlci5ORUdBVElWRV9JTkZJTklUWTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICByZXR1cm4gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwotICAgIH0sCi0KLSAgICBnZXQg
c2l6ZURlbHRhUGVyY2VudCgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5iYXNlU2l6ZSA+IDAp
IHsKLSAgICAgICAgICAgIGlmICh0aGlzLnNpemUgPiAwKQotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnNpemVEZWx0YSAvIHRoaXMuYmFzZVNpemUgKiAxMDAuMDsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7
Ci0gICAgfSwKLQotICAgIGdldCBkYXRhKCkKLSAgICB7Ci0gICAgICAgIHZhciBkYXRhID0ge307
Ci0KLSAgICAgICAgZGF0YVsiY29ucyJdID0gdGhpcy5jb25zdHJ1Y3Rvck5hbWU7Ci0KLSAgICAg
ICAgaWYgKHRoaXMuc25hcHNob3RWaWV3LnNob3dDb3VudEFzUGVyY2VudCkKLSAgICAgICAgICAg
IGRhdGFbImNvdW50Il0gPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMmYlJSIsIHRoaXMuY291
bnRQZXJjZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGF0YVsiY291bnQiXSA9IHRo
aXMuY291bnQ7Ci0KLSAgICAgICAgaWYgKHRoaXMuc2l6ZSAhPT0gbnVsbCkgewotICAgICAgICAg
ICAgaWYgKHRoaXMuc25hcHNob3RWaWV3LnNob3dTaXplQXNQZXJjZW50KQotICAgICAgICAgICAg
ICAgIGRhdGFbInNpemUiXSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4yZiUlIiwgdGhpcy5z
aXplUGVyY2VudCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZGF0YVsic2l6
ZSJdID0gTnVtYmVyLmJ5dGVzVG9TdHJpbmcodGhpcy5zaXplKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBkYXRhWyJzaXplIl0gPSAiIjsKLQotICAgICAgICBpZiAodGhpcy5zbmFwc2hv
dFZpZXcuc2hvd0NvdW50RGVsdGFBc1BlcmNlbnQpCi0gICAgICAgICAgICBkYXRhWyJjb3VudERl
bHRhIl0gPSB0aGlzLnNob3dEZWx0YUFzUGVyY2VudCh0aGlzLmNvdW50RGVsdGFQZXJjZW50KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGF0YVsiY291bnREZWx0YSJdID0gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCIlcyVkIiwgdGhpcy5zaWduRm9yRGVsdGEodGhpcy5jb3VudERlbHRhKSwg
TWF0aC5hYnModGhpcy5jb3VudERlbHRhKSk7Ci0KLSAgICAgICAgaWYgKHRoaXMuc2l6ZURlbHRh
ICE9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdFZpZXcuc2hvd1NpemVE
ZWx0YUFzUGVyY2VudCkKLSAgICAgICAgICAgICAgICBkYXRhWyJzaXplRGVsdGEiXSA9IHRoaXMu
c2hvd0RlbHRhQXNQZXJjZW50KHRoaXMuc2l6ZURlbHRhUGVyY2VudCk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgZGF0YVsic2l6ZURlbHRhIl0gPSBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIiVzJXMiLCB0aGlzLnNpZ25Gb3JEZWx0YSh0aGlzLnNpemVEZWx0YSksIE51bWJlci5i
eXRlc1RvU3RyaW5nKE1hdGguYWJzKHRoaXMuc2l6ZURlbHRhKSkpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGRhdGFbInNpemVEZWx0YSJdID0gIiI7Ci0KLSAgICAgICAgcmV0dXJuIGRh
dGE7Ci0gICAgfSwKLQotICAgIGNyZWF0ZUNlbGw6IGZ1bmN0aW9uKGNvbHVtbklkZW50aWZpZXIp
Ci0gICAgewotICAgICAgICB2YXIgY2VsbCA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJv
dG90eXBlLmNyZWF0ZUNlbGwuY2FsbCh0aGlzLCBjb2x1bW5JZGVudGlmaWVyKTsKLQotICAgICAg
ICBpZiAoKGNvbHVtbklkZW50aWZpZXIgPT09ICJjb25zIiAmJiB0aGlzLl9zZWFyY2hNYXRjaGVk
Q29uc0NvbHVtbikgfHwKLSAgICAgICAgICAgIChjb2x1bW5JZGVudGlmaWVyID09PSAiY291bnQi
ICYmIHRoaXMuX3NlYXJjaE1hdGNoZWRDb3VudENvbHVtbikgfHwKLSAgICAgICAgICAgIChjb2x1
bW5JZGVudGlmaWVyID09PSAic2l6ZSIgJiYgdGhpcy5fc2VhcmNoTWF0Y2hlZFNpemVDb2x1bW4p
IHx8Ci0gICAgICAgICAgICAoY29sdW1uSWRlbnRpZmllciA9PT0gImNvdW50RGVsdGEiICYmIHRo
aXMuX3NlYXJjaE1hdGNoZWRDb3VudERlbHRhQ29sdW1uKSB8fAotICAgICAgICAgICAgKGNvbHVt
bklkZW50aWZpZXIgPT09ICJzaXplRGVsdGEiICYmIHRoaXMuX3NlYXJjaE1hdGNoZWRTaXplRGVs
dGFDb2x1bW4pKQotICAgICAgICAgICAgY2VsbC5hZGRTdHlsZUNsYXNzKCJoaWdobGlnaHQiKTsK
LQotICAgICAgICByZXR1cm4gY2VsbDsKLSAgICB9Ci19OwotCi1XZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGUuX19wcm90b19fID0gV2Vi
SW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGU7Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3REYXRhR3JpZE5vZGUgPSBmdW5jdGlvbihzbmFwc2hvdFZpZXcsIGJhc2VFbnRyeSwgc25h
cHNob3RFbnRyeSwgb3duaW5nVHJlZSkKLXsKLSAgICB0aGlzLnNuYXBzaG90VmlldyA9IHNuYXBz
aG90VmlldzsKLQotICAgIGlmICghc25hcHNob3RFbnRyeSkKLSAgICAgICAgc25hcHNob3RFbnRy
eSA9IHsgY29uc3RydWN0b3JOYW1lOiBiYXNlRW50cnkuY29uc3RydWN0b3JOYW1lLCBjb3VudDog
MCwgc2l6ZTogMCwgcmV0YWluZXJzOiB7fSB9OwotICAgIHRoaXMuY29uc3RydWN0b3JOYW1lID0g
c25hcHNob3RFbnRyeS5jb25zdHJ1Y3Rvck5hbWU7Ci0gICAgdGhpcy5jb3VudCA9IHNuYXBzaG90
RW50cnkuY291bnQ7Ci0gICAgdGhpcy5zaXplID0gc25hcHNob3RFbnRyeS5zaXplOwotICAgIHRo
aXMucmV0YWluZXJzID0gc25hcHNob3RFbnRyeS5yZXRhaW5lcnM7Ci0KLSAgICBpZiAoIWJhc2VF
bnRyeSkKLSAgICAgICAgYmFzZUVudHJ5ID0geyBjb3VudDogMCwgc2l6ZTogMCwgcmV0YWluZXJz
OiB7fSB9OwotICAgIHRoaXMuYmFzZUNvdW50ID0gYmFzZUVudHJ5LmNvdW50OwotICAgIHRoaXMu
Y291bnREZWx0YSA9IHRoaXMuY291bnQgLSB0aGlzLmJhc2VDb3VudDsKLSAgICB0aGlzLmJhc2VT
aXplID0gYmFzZUVudHJ5LnNpemU7Ci0gICAgdGhpcy5zaXplRGVsdGEgPSB0aGlzLnNpemUgLSB0
aGlzLmJhc2VTaXplOwotICAgIHRoaXMuYmFzZVJldGFpbmVycyA9IGJhc2VFbnRyeS5yZXRhaW5l
cnM7Ci0KLSAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFp
bmVycy5jYWxsKHRoaXMsIG93bmluZ1RyZWUpOwotfTsKLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdERhdGFHcmlkTm9kZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlOwotCi1XZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0ID0gZnVuY3Rpb24oc25hcHNob3RWaWV3LCBiYXNl
RW50cmllcywgc25hcHNob3RFbnRyaWVzKQotewotICAgIHRoaXMudHJlZSA9IHRoaXM7Ci0gICAg
dGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7Ci0gICAgdGhpcy5jaGlsZHJlbiA9IFtd
OwotICAgIHRoaXMubGFzdENvbXBhcmF0b3IgPSBudWxsOwotICAgIHRoaXMucG9wdWxhdGVDaGls
ZHJlbihiYXNlRW50cmllcywgc25hcHNob3RFbnRyaWVzKTsKLX07Ci0KLVdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvdG90eXBlID0gewotICAgIGFwcGVuZENoaWxkOiBm
dW5jdGlvbihjaGlsZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGQoY2hpbGQsIHRo
aXMuY2hpbGRyZW4ubGVuZ3RoKTsKLSAgICB9LAotCi0gICAgaW5zZXJ0Q2hpbGQ6IGZ1bmN0aW9u
KGNoaWxkLCBpbmRleCkKLSAgICB7Ci0gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4
LCAwLCBjaGlsZCk7Ci0gICAgfSwKLQotICAgIHJlbW92ZUNoaWxkcmVuOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107Ci0gICAgfSwKLQotICAgIHBvcHVsYXRl
Q2hpbGRyZW46IGZ1bmN0aW9uKGJhc2VFbnRyaWVzLCBzbmFwc2hvdEVudHJpZXMpCi0gICAgewot
ICAgICAgICBmdW5jdGlvbiBhcHBlbmRMaXN0RW50cnkoYmFzZUl0ZW0sIHNuYXBzaG90SXRlbSkK
LSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZSh0aGlzLnNuYXBzaG90VmlldywgYmFzZUl0ZW0sIHNu
YXBzaG90SXRlbSwgdGhpcykpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMucHJvZHVjZURpZmYo
YmFzZUVudHJpZXMsIHNuYXBzaG90RW50cmllcywgYXBwZW5kTGlzdEVudHJ5LmJpbmQodGhpcykp
OwotICAgIH0sCi0KLSAgICBwcm9kdWNlRGlmZjogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERh
dGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLnByb2R1Y2VEaWZmLAotICAgIHNvcnQ6
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3Rv
dHlwZS5zb3J0LAotICAgIGdldFRvdGFsQ291bnQ6IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RE
YXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5nZXRUb3RhbENvdW50LAotICAgIGdl
dFRvdGFsU2l6ZTogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRh
aW5lcnMucHJvdG90eXBlLmdldFRvdGFsU2l6ZQotfTsKLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdERhdGFHcmlkTGlzdC5wcm9wZXJ0eUNvbXBhcmF0b3JzID0gW3t9LCB7fV07Ci0KLVdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvcGVydHlDb21wYXJhdG9yID0gZnVu
Y3Rpb24ocHJvcGVydHksIHByb3BlcnR5MiwgaXNBc2NlbmRpbmcpCi17Ci0gICAgdmFyIHByb3Bl
cnR5SGFzaCA9IHByb3BlcnR5ICsgIiMiICsgcHJvcGVydHkyOwotICAgIHZhciBjb21wYXJhdG9y
ID0gdGhpcy5wcm9wZXJ0eUNvbXBhcmF0b3JzWyhpc0FzY2VuZGluZyA/IDEgOiAwKV1bcHJvcGVy
dHlIYXNoXTsKLSAgICBpZiAoIWNvbXBhcmF0b3IpIHsKLSAgICAgICAgY29tcGFyYXRvciA9IGZ1
bmN0aW9uKGxocywgcmhzKSB7Ci0gICAgICAgICAgICB2YXIgbCA9IGxoc1twcm9wZXJ0eV0sIHIg
PSByaHNbcHJvcGVydHldOwotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDA7Ci0gICAgICAgICAg
ICBpZiAobCAhPT0gbnVsbCAmJiByICE9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gbCA8IHIgPyAtMSA6IChsID4gciA/IDEgOiAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChyZXN1bHQgIT09IDAgfHwgcHJvcGVydHkyID09PSBudWxsKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGlzQXNjZW5kaW5nID8gcmVzdWx0IDogLXJlc3VsdDsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbCA9IGxoc1twcm9wZXJ0eTJdOwotICAgICAgICAg
ICAgICAgIHIgPSByaHNbcHJvcGVydHkyXTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbCA8IHIg
PyAtMSA6IChsID4gciA/IDEgOiAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAg
ICAgdGhpcy5wcm9wZXJ0eUNvbXBhcmF0b3JzWyhpc0FzY2VuZGluZyA/IDEgOiAwKV1bcHJvcGVy
dHlIYXNoXSA9IGNvbXBhcmF0b3I7Ci0gICAgfQotICAgIHJldHVybiBjb21wYXJhdG9yOwotfTsK
LQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkUmV0YWluZXJOb2RlID0gZnVuY3Rp
b24oc25hcHNob3RWaWV3LCBiYXNlRW50cnksIHNuYXBzaG90RW50cnksIG93bmluZ1RyZWUpCi17
Ci0gICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7Ci0KLSAgICBpZiAoIXNuYXBz
aG90RW50cnkpCi0gICAgICAgIHNuYXBzaG90RW50cnkgPSB7IGNvbnN0cnVjdG9yTmFtZTogYmFz
ZUVudHJ5LmNvbnN0cnVjdG9yTmFtZSwgY291bnQ6IDAsIGNsdXN0ZXJzOiB7fSB9OwotICAgIHRo
aXMuY29uc3RydWN0b3JOYW1lID0gc25hcHNob3RFbnRyeS5jb25zdHJ1Y3Rvck5hbWU7Ci0gICAg
dGhpcy5jb3VudCA9IHNuYXBzaG90RW50cnkuY291bnQ7Ci0gICAgdGhpcy5yZXRhaW5lcnMgPSB0
aGlzLl9jYWxjdWxhdGVSZXRhaW5lcnModGhpcy5zbmFwc2hvdFZpZXcucHJvZmlsZSwgc25hcHNo
b3RFbnRyeS5jbHVzdGVycyk7Ci0KLSAgICBpZiAoIWJhc2VFbnRyeSkKLSAgICAgICAgYmFzZUVu
dHJ5ID0geyBjb3VudDogMCwgY2x1c3RlcnM6IHt9IH07Ci0gICAgdGhpcy5iYXNlQ291bnQgPSBi
YXNlRW50cnkuY291bnQ7Ci0gICAgdGhpcy5jb3VudERlbHRhID0gdGhpcy5jb3VudCAtIHRoaXMu
YmFzZUNvdW50OwotICAgIHRoaXMuYmFzZVJldGFpbmVycyA9IHRoaXMuX2NhbGN1bGF0ZVJldGFp
bmVycyh0aGlzLnNuYXBzaG90Vmlldy5iYXNlU25hcHNob3QsIGJhc2VFbnRyeS5jbHVzdGVycyk7
Ci0KLSAgICB0aGlzLnNpemUgPSBudWxsOwotICAgIHRoaXMuc2l6ZURlbHRhID0gbnVsbDsKLQot
ICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLmNh
bGwodGhpcywgb3duaW5nVHJlZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRh
R3JpZFJldGFpbmVyTm9kZS5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IHNpemVQZXJjZW50KCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAgICBnZXQgc2l6ZURlbHRhUGVy
Y2VudCgpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAotCi0gICAgX2NhbGN1
bGF0ZVJldGFpbmVyczogZnVuY3Rpb24oc25hcHNob3QsIGNsdXN0ZXJzKQotICAgIHsKLSAgICAg
ICAgdmFyIHJldGFpbmVycyA9IHt9OwotICAgICAgICBpZiAodGhpcy5pc0VtcHR5U2V0KGNsdXN0
ZXJzKSkgewotICAgICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3JOYW1lIGluIHNuYXBzaG90
LmVudHJpZXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90LmVudHJpZXNbdGhpcy5j
b25zdHJ1Y3Rvck5hbWVdLnJldGFpbmVyczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IC8vIEluIGNhc2Ugd2hlbiBhbiBlbnRyeSBpcyByZXRhaW5lZCBieSBjbHVzdGVycywgd2UgbmVl
ZCB0byBnYXRoZXIgdXAgdGhlIGxpc3QKLSAgICAgICAgICAgIC8vIG9mIHJldGFpbmVycyBieSBt
ZXJnaW5nIHJldGFpbmVycyBvZiBldmVyeSBjbHVzdGVyLgotICAgICAgICAgICAgLy8gRS5nLiBo
YXZpbmcgc3VjaCBhIHRyZWU6Ci0gICAgICAgICAgICAvLyAgIEEKLSAgICAgICAgICAgIC8vICAg
ICBPYmplY3Q6MSAgMTAKLSAgICAgICAgICAgIC8vICAgICAgIFggICAgICAgMwotICAgICAgICAg
ICAgLy8gICAgICAgWSAgICAgICA0Ci0gICAgICAgICAgICAvLyAgICAgT2JqZWN0OjIgIDUKLSAg
ICAgICAgICAgIC8vICAgICAgIFggICAgICAgNgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
IC8vIHdpbGwgcmVzdWx0IGluIGEgZm9sbG93aW5nIHJldGFpbmVycyBsaXN0OiBYIDksIFkgNC4K
LSAgICAgICAgICAgIGZvciAodmFyIGNsdXN0ZXJOYW1lIGluIGNsdXN0ZXJzKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNsdXN0ZXJOYW1lIGluIHNuYXBzaG90LmNsdXN0ZXJzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBjbHVzdGVyUmV0YWluZXJzID0gc25hcHNob3QuY2x1c3RlcnNbY2x1
c3Rlck5hbWVdLnJldGFpbmVyczsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2x1c3Rl
clJldGFpbmVyIGluIGNsdXN0ZXJSZXRhaW5lcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBjbHVzdGVyUmV0YWluZXJFbnRyeSA9IGNsdXN0ZXJSZXRhaW5lcnNbY2x1c3RlclJldGFp
bmVyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNsdXN0ZXJSZXRhaW5lciBpbiBy
ZXRhaW5lcnMpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbmVyc1tjbHVzdGVy
UmV0YWluZXJdID0geyBjb25zdHJ1Y3Rvck5hbWU6IGNsdXN0ZXJSZXRhaW5lckVudHJ5LmNvbnN0
cnVjdG9yTmFtZSwgY291bnQ6IDAsIGNsdXN0ZXJzOiB7fSB9OwotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0YWluZXJzW2NsdXN0ZXJSZXRhaW5lcl0uY291bnQgKz0gY2x1c3RlclJldGFpbmVy
RW50cnkuY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjbHVzdGVyUmV0
YWluZXJDbHVzdGVyIGluIGNsdXN0ZXJSZXRhaW5lckVudHJ5LmNsdXN0ZXJzKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldGFpbmVyc1tjbHVzdGVyUmV0YWluZXJdLmNsdXN0ZXJzW2Ns
dXN0ZXJSZXRhaW5lckNsdXN0ZXJdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
cmV0YWluZXJzOwotICAgIH0KLX07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3Jp
ZFJldGFpbmVyTm9kZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlOwotCi0KLVdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm9maWxlVHlwZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0
b3IuUHJvZmlsZVR5cGUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmls
ZVR5cGUuVHlwZUlkLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhFQVAgU05BUFNIT1RTIikpOwot
fQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkID0gIkhFQVAi
OwotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlID0gewot
ICAgIGdldCBidXR0b25Ub29sdGlwKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlRha2UgaGVhcCBzbmFwc2hvdC4iKTsKLSAgICB9LAotCi0gICAgZ2V0IGJ1
dHRvblN0eWxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiaGVhcC1zbmFwc2hvdC1zdGF0dXMt
YmFyLWl0ZW0gc3RhdHVzLWJhci1pdGVtIjsKLSAgICB9LAotCi0gICAgYnV0dG9uQ2xpY2tlZDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgUHJvZmlsZXJBZ2VudC50YWtlSGVhcFNuYXBzaG90
KGZhbHNlKTsKLSAgICB9LAotCi0gICAgZ2V0IHdlbGNvbWVNZXNzYWdlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkdldCBhIGhlYXAgc25hcHNob3QgYnkg
cHJlc3NpbmcgdGhlICVzIGJ1dHRvbiBvbiB0aGUgc3RhdHVzIGJhci4iKTsKLSAgICB9LAotCi0g
ICAgY3JlYXRlU2lkZWJhclRyZWVFbGVtZW50Rm9yUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVTaWRlYmFyVHJl
ZUVsZW1lbnQocHJvZmlsZSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTbmFwc2hvdCAlZCIpLCAi
aGVhcC1zbmFwc2hvdC1zaWRlYmFyLXRyZWUtaXRlbSIpOwotICAgIH0sCi0KLSAgICBjcmVhdGVW
aWV3OiBmdW5jdGlvbihwcm9maWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90VmlldyhXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLCBwcm9m
aWxlKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5w
cm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQ
YW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5l
bC5qcwppbmRleCBhMGU0ZTVjLi43ZmNkN2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCkBAIC0xMjYsMTIgKzEyNiw4IEBA
IFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX3Jlc2V0
KCk7CiAKICAgICB0aGlzLl9yZWdpc3RlclByb2ZpbGVUeXBlKG5ldyBXZWJJbnNwZWN0b3IuQ1BV
UHJvZmlsZVR5cGUoKSk7Ci0gICAgaWYgKFByZWZlcmVuY2VzLmhlYXBQcm9maWxlclByZXNlbnQp
IHsKLSAgICAgICAgaWYgKCFQcmVmZXJlbmNlcy5kZXRhaWxlZEhlYXBQcm9maWxlcykKLSAgICAg
ICAgICAgIHRoaXMuX3JlZ2lzdGVyUHJvZmlsZVR5cGUobmV3IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RQcm9maWxlVHlwZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fcmVn
aXN0ZXJQcm9maWxlVHlwZShuZXcgV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RQcm9maWxl
VHlwZSgpKTsKLSAgICB9CisgICAgaWYgKFByZWZlcmVuY2VzLmhlYXBQcm9maWxlclByZXNlbnQp
CisgICAgICAgIHRoaXMuX3JlZ2lzdGVyUHJvZmlsZVR5cGUobmV3IFdlYkluc3BlY3Rvci5EZXRh
aWxlZEhlYXBzaG90UHJvZmlsZVR5cGUoKSk7CiAKICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRG9tYWluRGlzcGF0Y2hlcigiUHJvZmlsZXIiLCBuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVy
RGlzcGF0Y2hlcih0aGlzKSk7CiAKQEAgLTQ0MSw5MCArNDM3LDQwIEBAIFdlYkluc3BlY3Rvci5Q
cm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIGxvYWRIZWFwU25hcHNob3Q6IGZ1bmN0
aW9uKHVpZCwgY2FsbGJhY2spCiAgICAgewotICAgICAgICB2YXIgcHJvZmlsZSA9IHRoaXMuX3By
b2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQ
cm9maWxlVHlwZS5UeXBlSWQpXTsKKyAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLl9wcm9maWxl
c0lkTWFwW3RoaXMuX21ha2VLZXkodWlkLCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFBy
b2ZpbGVUeXBlLlR5cGVJZCldOwogICAgICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgaWYgKCFQcmVmZXJlbmNlcy5kZXRhaWxlZEhlYXBQcm9maWxlcykg
ewotICAgICAgICAgICAgaWYgKHByb2ZpbGUuX2xvYWRlZCkKLSAgICAgICAgICAgICAgICBjYWxs
YmFjayhwcm9maWxlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByb2ZpbGUuX2lzX2xvYWRpbmcp
Ci0gICAgICAgICAgICAgICAgcHJvZmlsZS5fY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJvZmlsZS5faXNfbG9hZGluZyA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgcHJvZmlsZS5fY2FsbGJhY2tzID0gW2NhbGxiYWNrXTsKLSAg
ICAgICAgICAgICAgICBwcm9maWxlLl9qc29uID0gIiI7Ci0gICAgICAgICAgICAgICAgcHJvZmls
ZS5zaWRlQmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTG9hZGlu
Z1x1MjAyNiIpOwotICAgICAgICAgICAgICAgIFByb2ZpbGVyQWdlbnQuZ2V0UHJvZmlsZShwcm9m
aWxlLnR5cGVJZCwgcHJvZmlsZS51aWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKCFwcm9maWxlLnByb3h5KQotICAgICAgICAgICAgICAgIHByb2Zp
bGUucHJveHkgPSAobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RXb3JrZXIoKSkuY3JlYXRl
T2JqZWN0KCJXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyIik7Ci0gICAgICAgICAgICB2
YXIgcHJveHkgPSBwcm9maWxlLnByb3h5OwotICAgICAgICAgICAgaWYgKHByb3h5LnN0YXJ0TG9h
ZGluZyhjYWxsYmFjaykpIHsKLSAgICAgICAgICAgICAgICBwcm9maWxlLnNpZGVCYXJFbGVtZW50
LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMb2FkaW5nXHUyMDI2Iik7Ci0gICAg
ICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxlKHByb2ZpbGUudHlwZUlkLCBwcm9m
aWxlLnVpZCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmICghcHJvZmlsZS5wcm94eSkKKyAg
ICAgICAgICAgIHByb2ZpbGUucHJveHkgPSAobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RX
b3JrZXIoKSkuY3JlYXRlT2JqZWN0KCJXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyIik7
CisgICAgICAgIHZhciBwcm94eSA9IHByb2ZpbGUucHJveHk7CisgICAgICAgIGlmIChwcm94eS5z
dGFydExvYWRpbmcoY2FsbGJhY2spKSB7CisgICAgICAgICAgICBwcm9maWxlLnNpZGVCYXJFbGVt
ZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMb2FkaW5nXHUyMDI2Iik7Cisg
ICAgICAgICAgICBQcm9maWxlckFnZW50LmdldFByb2ZpbGUocHJvZmlsZS50eXBlSWQsIHByb2Zp
bGUudWlkKTsKICAgICAgICAgfQogICAgIH0sCiAKICAgICBfYWRkSGVhcFNuYXBzaG90Q2h1bms6
IGZ1bmN0aW9uKHVpZCwgY2h1bmspCiAgICAgewotICAgICAgICB2YXIgcHJvZmlsZSA9IHRoaXMu
X3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RQcm9maWxlVHlwZS5UeXBlSWQpXTsKLSAgICAgICAgaWYgKCFwcm9maWxlKQorICAgICAgICB2
YXIgcHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdlYklu
c3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKV07CisgICAgICAgIGlm
ICghcHJvZmlsZSB8fCAhcHJvZmlsZS5wcm94eSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaWYgKCFQcmVmZXJlbmNlcy5kZXRhaWxlZEhlYXBQcm9maWxlcykgewotICAgICAgICAgICAg
aWYgKHByb2ZpbGUuX2xvYWRlZCB8fCAhcHJvZmlsZS5faXNfbG9hZGluZykKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBwcm9maWxlLl9qc29uICs9IGNodW5rOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFwcm9maWxlLnByb3h5KQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIHByb2ZpbGUucHJveHkucHVzaEpTT05DaHVuayhjaHVu
ayk7Ci0gICAgICAgIH0KKyAgICAgICAgcHJvZmlsZS5wcm94eS5wdXNoSlNPTkNodW5rKGNodW5r
KTsKICAgICB9LAogCiAgICAgX2ZpbmlzaEhlYXBTbmFwc2hvdDogZnVuY3Rpb24odWlkKQogICAg
IHsKLSAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLl9wcm9maWxlc0lkTWFwW3RoaXMuX21ha2VL
ZXkodWlkLCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKV07Ci0g
ICAgICAgIGlmICghcHJvZmlsZSkKKyAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLl9wcm9maWxl
c0lkTWFwW3RoaXMuX21ha2VLZXkodWlkLCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFBy
b2ZpbGVUeXBlLlR5cGVJZCldOworICAgICAgICBpZiAoIXByb2ZpbGUgfHwgIXByb2ZpbGUucHJv
eHkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghUHJlZmVyZW5jZXMuZGV0YWls
ZWRIZWFwUHJvZmlsZXMpIHsKLSAgICAgICAgICAgIGlmIChwcm9maWxlLl9sb2FkZWQgfHwgIXBy
b2ZpbGUuX2lzX2xvYWRpbmcpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
cHJvZmlsZS5zaWRlQmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
UGFyc2luZ1x1MjAyNiIpOwotICAgICAgICAgICAgZnVuY3Rpb24gZG9QYXJzZSgpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGxvYWRlZFNuYXBzaG90ID0gSlNPTi5wYXJzZShw
cm9maWxlLl9qc29uKTsKLSAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2tzID0gcHJvZmlsZS5f
Y2FsbGJhY2tzOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9maWxlLl9jYWxsYmFja3M7Ci0g
ICAgICAgICAgICAgICAgZGVsZXRlIHByb2ZpbGUuX2pzb247Ci0gICAgICAgICAgICAgICAgZGVs
ZXRlIHByb2ZpbGUuX2lzX2xvYWRpbmc7Ci0gICAgICAgICAgICAgICAgcHJvZmlsZS5fbG9hZGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBwcm9maWxlLnNpZGVCYXJFbGVtZW50LnN1YnRpdGxl
ID0gIiI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNo
b3RWaWV3LnByb3RvdHlwZS5pc0RldGFpbGVkU25hcHNob3QobG9hZGVkU25hcHNob3QpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMuX2VuYWJsZURl
dGFpbGVkSGVhcFByb2ZpbGVzKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RWaWV3LnByb3RvdHlwZS5wcm9jZXNzTG9hZGVkU25hcHNob3QocHJvZmlsZSwgbG9hZGVk
U25hcHNob3QpOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tz
Lmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3NbaV0ocHJvZmlsZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRUaW1lb3V0KGRvUGFyc2UsIDApOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFwcm9maWxlLnByb3h5KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHZhciBwcm94eSA9IHByb2ZpbGUucHJveHk7Ci0g
ICAgICAgICAgICBmdW5jdGlvbiBwYXJzZWQoc25hcHNob3RQcm94eSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBwcm9maWxlLnByb3h5ID0gc25hcHNob3RQcm94eTsKLSAgICAgICAg
ICAgICAgICBwcm9maWxlLnNpZGVCYXJFbGVtZW50LnN1YnRpdGxlID0gTnVtYmVyLmJ5dGVzVG9T
dHJpbmcoc25hcHNob3RQcm94eS50b3RhbFNpemUpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKHByb3h5LmZpbmlzaExvYWRpbmcocGFyc2VkKSkKLSAgICAgICAgICAgICAgICBwcm9m
aWxlLnNpZGVCYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQYXJz
aW5nXHUyMDI2Iik7CisgICAgICAgIHZhciBwcm94eSA9IHByb2ZpbGUucHJveHk7CisgICAgICAg
IGZ1bmN0aW9uIHBhcnNlZChzbmFwc2hvdFByb3h5KQorICAgICAgICB7CisgICAgICAgICAgICBw
cm9maWxlLnByb3h5ID0gc25hcHNob3RQcm94eTsKKyAgICAgICAgICAgIHByb2ZpbGUuc2lkZUJh
ckVsZW1lbnQuc3VidGl0bGUgPSBOdW1iZXIuYnl0ZXNUb1N0cmluZyhzbmFwc2hvdFByb3h5LnRv
dGFsU2l6ZSk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHByb3h5LmZpbmlzaExvYWRpbmcocGFy
c2VkKSkKKyAgICAgICAgICAgIHByb2ZpbGUuc2lkZUJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIlBhcnNpbmdcdTIwMjYiKTsKICAgICB9LAogCiAgICAgc2hvd1Zp
ZXc6IGZ1bmN0aW9uKHZpZXcpCkBAIC03MTAsMTIgKzY1NiwxMiBAQCBXZWJJbnNwZWN0b3IuUHJv
ZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMudXBkYXRlUHJvZmlsZVR5cGVC
dXR0b25zKCk7CiAgICAgfSwKIAotICAgIHRha2VIZWFwU25hcHNob3Q6IGZ1bmN0aW9uKGRldGFp
bGVkKQorICAgIHRha2VIZWFwU25hcHNob3Q6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGlm
ICghdGhpcy5oYXNUZW1wb3JhcnlQcm9maWxlKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9m
aWxlVHlwZS5UeXBlSWQpKSB7CisgICAgICAgIGlmICghdGhpcy5oYXNUZW1wb3JhcnlQcm9maWxl
KFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKSkgewogICAg
ICAgICAgICAgaWYgKCF0aGlzLl90ZW1wb3JhcnlUYWtpbmdTbmFwc2hvdCkgewogICAgICAgICAg
ICAgICAgIHRoaXMuX3RlbXBvcmFyeVRha2luZ1NuYXBzaG90ID0gewotICAgICAgICAgICAgICAg
ICAgICB0eXBlSWQ6IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQs
CisgICAgICAgICAgICAgICAgICAgIHR5cGVJZDogV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNo
b3RQcm9maWxlVHlwZS5UeXBlSWQsCiAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlNuYXBzaG90dGluZ+KApiIpLAogICAgICAgICAgICAgICAgICAgICB1
aWQ6IC0xLAogICAgICAgICAgICAgICAgICAgICBpc1RlbXBvcmFyeTogdHJ1ZQpAQCAtNzIzLDEy
ICs2NjksMTIgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy5fYWRkUHJvZmlsZUhlYWRlcih0aGlzLl90ZW1w
b3JhcnlUYWtpbmdTbmFwc2hvdCk7CiAgICAgICAgIH0KLSAgICAgICAgUHJvZmlsZXJBZ2VudC50
YWtlSGVhcFNuYXBzaG90KGRldGFpbGVkKTsKKyAgICAgICAgUHJvZmlsZXJBZ2VudC50YWtlSGVh
cFNuYXBzaG90KCk7CiAgICAgfSwKIAogICAgIF9yZXBvcnRIZWFwU25hcHNob3RQcm9ncmVzczog
ZnVuY3Rpb24oZG9uZSwgdG90YWwpCiAgICAgewotICAgICAgICBpZiAodGhpcy5oYXNUZW1wb3Jh
cnlQcm9maWxlKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpKSB7
CisgICAgICAgIGlmICh0aGlzLmhhc1RlbXBvcmFyeVByb2ZpbGUoV2ViSW5zcGVjdG9yLkRldGFp
bGVkSGVhcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpKSB7CiAgICAgICAgICAgICB0aGlzLl90ZW1w
b3JhcnlUYWtpbmdTbmFwc2hvdC5zaWRlQmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiJS4yZiUlIiwgKGRvbmUgLyB0b3RhbCkgKiAxMDApOwogICAgICAgICAgICAg
aWYgKGRvbmUgPj0gdG90YWwpCiAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlUHJvZmlsZUhl
YWRlcih0aGlzLl90ZW1wb3JhcnlUYWtpbmdTbmFwc2hvdCk7CkBAIC03NDEsNyArNjg3LDcgQEAg
V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhp
cy5fY2xlYXJQcm9maWxlcygpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aGlzLl9yZXNl
dCgpOwotICAgICAgICB2YXIgb2xkUHJvZmlsZVR5cGUgPSB0aGlzLl9wcm9maWxlVHlwZXNCeUlk
TWFwW1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWRdOworICAgICAg
ICB2YXIgb2xkUHJvZmlsZVR5cGUgPSB0aGlzLl9wcm9maWxlVHlwZXNCeUlkTWFwW1dlYkluc3Bl
Y3Rvci5EZXRhaWxlZEhlYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkXTsKICAgICAgICAgdmFyIHBy
b2ZpbGVUeXBlID0gbmV3IFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90UHJvZmlsZVR5cGUo
KTsKICAgICAgICAgcHJvZmlsZVR5cGUudHJlZUVsZW1lbnQgPSBvbGRQcm9maWxlVHlwZS50cmVl
RWxlbWVudDsKICAgICAgICAgdGhpcy5fcHJvZmlsZVR5cGVzQnlJZE1hcFtwcm9maWxlVHlwZS5p
ZF0gPSBwcm9maWxlVHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvV2ViS2l0LnFyYyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
V2ViS2l0LnFyYwppbmRleCA5ODE2ZGMwLi4wOGZmZTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCkBAIC01Miw3ICs1Miw2IEBACiAgICAgPGZp
bGU+SEFSRW50cnkuanM8L2ZpbGU+CiAgICAgPGZpbGU+SGVhcFNuYXBzaG90LmpzPC9maWxlPgog
ICAgIDxmaWxlPkhlYXBTbmFwc2hvdFByb3h5LmpzPC9maWxlPgotICAgIDxmaWxlPkhlYXBTbmFw
c2hvdFZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+SGVhcFNuYXBzaG90V29ya2VyLmpzPC9maWxl
PgogICAgIDxmaWxlPkhlYXBTbmFwc2hvdFdvcmtlckRpc3BhdGNoZXIuanM8L2ZpbGU+CiAgICAg
PGZpbGU+SGVscFNjcmVlbi5qczwvZmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaGVhcFByb2ZpbGVyLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaGVhcFByb2ZpbGVyLmNzcwppbmRleCA1ZTA4NDhkLi5lY2Y0MTlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2hlYXBQcm9maWxl
ci5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9oZWFwUHJvZmls
ZXIuY3NzCkBAIC0zNywxMDQgKzM3LDYgQEAKICAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3Byb2Zp
bGVTbWFsbEljb24ucG5nKTsKIH0KIAotLmhlYXAtc25hcHNob3QtdmlldyB7Ci0gICAgZGlzcGxh
eTogbm9uZTsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
LSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLSAgICBib3R0b206IDA7
Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcudmlzaWJsZSB7Ci0gICAgZGlzcGxheTogYmxvY2s7
Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB7Ci0gICAgYm9yZGVyOiBub25l
OwotICAgIG1heC1oZWlnaHQ6IDEwMCU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGxl
ZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgdG9wOiAwOwotICAgIGJvdHRvbTogOTNweDsKLX0K
LQotLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRoLmNvdW50LWNvbHVtbiB7Ci0gICAg
dGV4dC1hbGlnbjogY2VudGVyOwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQg
dGQuY291bnQtY29sdW1uIHsKLSAgICB0ZXh0LWFsaWduOiByaWdodDsKLX0KLQotLmhlYXAtc25h
cHNob3QtdmlldyAuZGF0YS1ncmlkIHRoLnNpemUtY29sdW1uIHsKLSAgICB0ZXh0LWFsaWduOiBj
ZW50ZXI7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB0ZC5zaXplLWNvbHVt
biB7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmRh
dGEtZ3JpZCB0aC5jb3VudERlbHRhLWNvbHVtbiB7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwot
fQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGQuY291bnREZWx0YS1jb2x1bW4g
ewotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRh
LWdyaWQgdGguc2l6ZURlbHRhLWNvbHVtbiB7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQot
Ci0uaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGQuc2l6ZURlbHRhLWNvbHVtbiB7Ci0g
ICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci0KLSNoZWFwLXNuYXBzaG90LXN1bW1hcnktY29udGFp
bmVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcGFkZGluZy10b3A6IDIwcHg7Ci0g
ICAgYm90dG9tOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgaGVpZ2h0OiA5
M3B4OwotICAgIG1hcmdpbi1sZWZ0OiAtMXB4OwotICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQg
cmdiKDEwMiwgMTAyLCAxMDIpOwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxMDEsIDExMSwg
MTMwKTsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVm
dCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYmEoMCwgMCwgMCwgMC41KSksIHRvKHJnYmEoMCwg
MCwgMCwgMCkpKTsKLSAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7Ci0gICAgYmFja2dy
b3VuZC1wb3NpdGlvbjogdG9wOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICB0ZXh0LXNo
YWRvdzogYmxhY2sgMCAxcHggMXB4OwotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0gICAgY29s
b3I6IHdoaXRlOwotICAgIC13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAxcHggNnB4OwotICAgIC13
ZWJraXQtYmFja2dyb3VuZC1vcmlnaW46IHBhZGRpbmc7Ci0gICAgLXdlYmtpdC1iYWNrZ3JvdW5k
LWNsaXA6IHBhZGRpbmc7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXN1bW1hcnkgewotICAgIGRpc3Bs
YXk6IGlubGluZS1ibG9jazsKLSAgICB3aWR0aDogNTAlOwotICAgIG1pbi13aWR0aDogMzAwcHg7
Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotfQotCi0uaGVhcC1zbmFwc2hvdC1zdW1tYXJ5IGNh
bnZhcy5zdW1tYXJ5LWdyYXBoIHsKLSAgICB3aWR0aDogMjI1cHg7Ci19Ci0KLS5oZWFwLXNuYXBz
aG90LXN1bW1hcnktbGFiZWwgewotICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICBmb250LXdlaWdo
dDogYm9sZDsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAxcHg7Ci0gICAgd2lk
dGg6IDUwJTsKLSAgICBsZWZ0OiAyNSU7Ci19Ci0KIC5kZXRhaWxlZC1oZWFwc2hvdC12aWV3IHsK
ICAgICBkaXNwbGF5OiBub25lOwogICAgIG92ZXJmbG93OiBoaWRkZW47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAppbmRleCBkN2ViYWUx
Li42NTA1YThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5odG1sCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmh0bWwKQEAgLTE0Niw3ICsxNDYsNiBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlBhcnRpYWxRdWlja1NvcnQuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkhlYXBTbmFwc2hvdC5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSGVh
cFNuYXBzaG90UHJveHkuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IkhlYXBTbmFwc2hvdFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkhlYXBTbmFwc2hvdFdvcmtlckRpc3BhdGNoZXIu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRl
dGFpbGVkSGVhcHNob3RHcmlkTm9kZXMuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRldGFpbGVkSGVhcHNob3RWaWV3LmpzIj48L3NjcmlwdD4K
</data>
<flag name="review"
          id="92042"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="92043"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
      

    </bug>

</bugzilla>