<?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>58320</bug_id>
          
          <creation_ts>2011-04-12 07:13:14 -0700</creation_ts>
          <short_desc>Web Inspector: [Chromium] Prepare to move detailed heap snapshots storage and processing into workers</short_desc>
          <delta_ts>2011-04-13 04:40:49 -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>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>383985</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-04-12 07:13:14 -0700</bug_when>
    <thetext>The current approach of storing detailed heap snapshots in Inspector&apos;s memory isn&apos;t scalable. E.g. V8 has constraints on VM heap size, and it is pretty easy to cross the boundary when working with large apps, resulting in Inspector crash. As each worker has its own VM heap, moving each snapshot into a dedicated worker seems like a more scalable solution.

As workers interaction with main page is asynchronous, and they can&apos;t directly access each others data, some work must be done to change the way Profiles panel UI retrieves heap snapshots data. The first approximation is to introduce a wrapper object around a snapshot that hides snapshot data, and processes snapshot queries asynchronously (using setTimeout), to emulate worker behavior. This is addressed by the following patch, except building snapshots diffs, which requires a bit more work to be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383986</commentid>
    <comment_count>1</comment_count>
      <attachid>89198</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-04-12 07:17:39 -0700</bug_when>
    <thetext>Created attachment 89198
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384785</commentid>
    <comment_count>2</comment_count>
      <attachid>89198</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-04-13 04:22:04 -0700</bug_when>
    <thetext>Comment on attachment 89198
patch

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

&gt; LayoutTests/inspector/profiler/detailed-heapshots-test.js:398
&gt; +        debugger;

console.error?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384794</commentid>
    <comment_count>3</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-04-13 04:31:07 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 89198 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89198&amp;action=review
&gt; 
&gt; &gt; LayoutTests/inspector/profiler/detailed-heapshots-test.js:398
&gt; &gt; +        debugger;
&gt; 
&gt; console.error?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384799</commentid>
    <comment_count>4</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-04-13 04:40:49 -0700</bug_when>
    <thetext>Manually committed http://trac.webkit.org/changeset/83718


2011-04-13  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Prepare to move detailed heap snapshots storage and processing into workers.
        https://bugs.webkit.org/show_bug.cgi?id=58320

        Introduce a proxy object that emulates worker behavior and change UI code to cope with it.

        * inspector/profiler/detailed-heapshots-test.js:
        (initialize_DetailedHeapshotTest):

2011-04-13  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Prepare to move detailed heap snapshots storage and processing into workers.
        https://bugs.webkit.org/show_bug.cgi?id=58320

        Introduce a proxy object that emulates worker behavior and change UI code to cope with it.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._populate.doPopulate.sorted):
        (WebInspector.HeapSnapshotGridNode.prototype._populate.doPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype._populate):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.childrenRetrieved.notify):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.childrenRetrieved):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.doSort.afterSort.afterPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.doSort.afterSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get _shallowSizePercent):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype._updateHasChildren):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._createProvider):
        (WebInspector.HeapSnapshotInstanceNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createProvider):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotIteratorsTuple.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotDiffNode.prototype._calculateDiff):
        (WebInspector.HeapSnapshotDiffNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._childHashForEntity):
        (WebInspector.HeapSnapshotDiffNode.prototype._childHashForNode):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren.firstProviderPopulated):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren.else.firstProviderPopulated):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotDominatorObjectNode):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createProvider):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._performSorting):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource.baseSnapshotNodeIdsReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource.pushBaseSnapshotNodeIds):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource.snapshotNodeIdsReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotRetainingPathsList):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype._resetPaths):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.setDataSource):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.refresh):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext.pathFound):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext.startSearching):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext):
        (WebInspector.DetailedHeapshotView.profileCallback):
        (WebInspector.DetailedHeapshotView):
        (WebInspector.DetailedHeapshotView.prototype.get profileWrapper):
        (WebInspector.DetailedHeapshotView.prototype.get baseProfileWrapper):
        (WebInspector.DetailedHeapshotView.prototype.show.profileCallback1):
        (WebInspector.DetailedHeapshotView.prototype.show.profileCallback2):
        (WebInspector.DetailedHeapshotView.prototype.show):
        (WebInspector.DetailedHeapshotView.prototype._changeBase.baseProfileLoaded):
        * inspector/front-end/HeapSnapshot.js:
        * inspector/front-end/HeapSnapshotProxy.js: Added.
        * inspector/front-end/PleaseWaitMessage.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype.loadHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._addHeapSnapshotChunk):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.doParse):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.else.parsed):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89198</attachid>
            <date>2011-04-12 07:17:39 -0700</date>
            <delta_ts>2011-04-13 04:22:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-58320</filename>
            <type>text/plain</type>
            <size>55953</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYWViNzNhLi43NjM5YTVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDQt
MTIgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hy
b21pdW1dIFByZXBhcmUgdG8gbW92ZSBkZXRhaWxlZCBoZWFwIHNuYXBzaG90cyBzdG9yYWdlIGFu
ZCBwcm9jZXNzaW5nIGludG8gd29ya2Vycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU4MzIwCisKKyAgICAgICAgSW50cm9kdWNlIGEgcHJveHkgb2Jq
ZWN0IHRoYXQgZW11bGF0ZXMgd29ya2VyIGJlaGF2aW9yIGFuZCBjaGFuZ2UgVUkgY29kZSB0byBj
b3BlIHdpdGggaXQuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvZmlsZXIvZGV0YWlsZWQtaGVh
cHNob3RzLXRlc3QuanM6CisgICAgICAgIChpbml0aWFsaXplX0RldGFpbGVkSGVhcHNob3RUZXN0
KToKKwogMjAxMS0wNC0xMSAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2RldGFpbGVkLWhlYXBzaG90cy10ZXN0LmpzIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2RldGFpbGVkLWhlYXBzaG90cy10ZXN0Lmpz
CmluZGV4IDIwYzQ1OWIuLmQyODJlZGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9wcm9maWxlci9kZXRhaWxlZC1oZWFwc2hvdHMtdGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvcHJvZmlsZXIvZGV0YWlsZWQtaGVhcHNob3RzLXRlc3QuanMKQEAgLTE2OSw3ICsx
NjksNiBAQCBJbnNwZWN0b3JUZXN0LmNsaWNrQ29sdW1uID0gZnVuY3Rpb24oY29sdW1uLCBjYWxs
YmFjaykKIAogICAgIGZ1bmN0aW9uIHNvcnRpbmdDb21wbGV0ZSgpCiAgICAgewotICAgICAgICB0
aGlzLl9jdXJyZW50R3JpZCgpLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNvcnRpbmcgY29tcGxldGUi
LCBzb3J0aW5nQ29tcGxldGUsIHRoaXMpOwogICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVx
dWFscyhjb2x1bW4uaWRlbnRpZmllciwgdGhpcy5fY3VycmVudEdyaWQoKS5zb3J0Q29sdW1uSWRl
bnRpZmllciwgInVuZXhwZWN0ZWQgc29ydGluZyIpOwogICAgICAgICBjb2x1bW4uc29ydCA9IHRo
aXMuX2N1cnJlbnRHcmlkKCkuc29ydE9yZGVyOwogICAgICAgICBmdW5jdGlvbiBjYWxsQ2FsbGJh
Y2soKQpAQCAtMTc4LDcgKzE3Nyw3IEBAIEluc3BlY3RvclRlc3QuY2xpY2tDb2x1bW4gPSBmdW5j
dGlvbihjb2x1bW4sIGNhbGxiYWNrKQogICAgICAgICB9CiAgICAgICAgIHNldFRpbWVvdXQoY2Fs
bENhbGxiYWNrLCAwKTsKICAgICB9Ci0gICAgdGhpcy5fY3VycmVudEdyaWQoKS5hZGRFdmVudExp
c3RlbmVyKCJzb3J0aW5nIGNvbXBsZXRlIiwgc29ydGluZ0NvbXBsZXRlLCB0aGlzKTsKKyAgICBJ
bnNwZWN0b3JUZXN0Ll9wcmVwYXJlRm9yUmVjdXJzaXZlU29ydChzb3J0aW5nQ29tcGxldGUuYmlu
ZCh0aGlzKSk7CiAgICAgdGhpcy5fY3VycmVudEdyaWQoKS5fY2xpY2tJbkhlYWRlckNlbGwoZXZl
bnQpOwogfTsKIApAQCAtMzU5LDEyICszNTgsNyBAQCBJbnNwZWN0b3JUZXN0LnN3aXRjaFRvVmll
dyA9IGZ1bmN0aW9uKHRpdGxlLCBjYWxsYmFjaykKICAgICAgICAgc2V0VGltZW91dChjYWxsYmFj
aywgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZnVuY3Rpb24gc29ydGluZ0NvbXBs
ZXRlKCkKLSAgICB7Ci0gICAgICAgIHZpZXcudmlld3NbaW5kZXhdLmdyaWQucmVtb3ZlRXZlbnRM
aXN0ZW5lcigic29ydGluZyBjb21wbGV0ZSIsIHNvcnRpbmdDb21wbGV0ZSwgdGhpcyk7Ci0gICAg
ICAgIHNldFRpbWVvdXQoY2FsbGJhY2ssIDApOwotICAgIH0KLSAgICB2aWV3LnZpZXdzW2luZGV4
XS5ncmlkLmFkZEV2ZW50TGlzdGVuZXIoInNvcnRpbmcgY29tcGxldGUiLCBzb3J0aW5nQ29tcGxl
dGUsIHRoaXMpOworICAgIEluc3BlY3RvclRlc3QuX3ByZXBhcmVGb3JSZWN1cnNpdmVTb3J0KGNh
bGxiYWNrLCB2aWV3LnZpZXdzW2luZGV4XS5ncmlkKTsKICAgICB2aWV3Ll9jaGFuZ2VWaWV3KHt0
YXJnZXQ6IHtzZWxlY3RlZEluZGV4OiBpbmRleH19KTsKIH07CiAKQEAgLTM5OCw2ICszOTIsMzgg
QEAgSW5zcGVjdG9yVGVzdC5fY3VycmVudEdyaWQgPSBmdW5jdGlvbigpCiAgICAgcmV0dXJuIFdl
Ykluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMudmlzaWJsZVZpZXcuZGF0YUdyaWQ7CiB9OwogCitJ
bnNwZWN0b3JUZXN0Ll9wcmVwYXJlRm9yUmVjdXJzaXZlU29ydCA9IGZ1bmN0aW9uKGNhbGxiYWNr
LCBncmlkKQoreworICAgIGlmIChJbnNwZWN0b3JUZXN0Ll9yZWN1cnNpdmVTb3J0Q2FsbGJhY2sp
CisgICAgICAgIGRlYnVnZ2VyOworICAgIEluc3BlY3RvclRlc3QuX3JlY3Vyc2l2ZVNvcnRDYWxs
YmFjayA9IGNhbGxiYWNrOworICAgIEluc3BlY3RvclRlc3QuX3JlY3Vyc2l2ZVNvcnREZXB0aCA9
IDA7CisgICAgZ3JpZCA9IGdyaWQgfHwgSW5zcGVjdG9yVGVzdC5fY3VycmVudEdyaWQoKTsKKyAg
ICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoInN0YXJ0IHNvcnRpbmciLCBJbnNwZWN0b3JUZXN0Ll9y
ZWN1cnNpdmVTb3J0RW50ZXIsIEluc3BlY3RvclRlc3QpOworICAgIGdyaWQuYWRkRXZlbnRMaXN0
ZW5lcigic29ydGluZyBjb21wbGV0ZSIsIEluc3BlY3RvclRlc3QuX3JlY3Vyc2l2ZVNvcnRMZWF2
ZSwgSW5zcGVjdG9yVGVzdCk7CisgICAgSW5zcGVjdG9yVGVzdC5fcmVjdXJzaXZlU29ydEdyaWQg
PSBncmlkOworfTsKKworSW5zcGVjdG9yVGVzdC5fcmVjdXJzaXZlU29ydEVudGVyID0gZnVuY3Rp
b24oKQoreworICAgICsrSW5zcGVjdG9yVGVzdC5fcmVjdXJzaXZlU29ydERlcHRoOworICAgIGlm
IChpc05hTihJbnNwZWN0b3JUZXN0Ll9yZWN1cnNpdmVTb3J0RGVwdGgpKQorICAgICAgICBkZWJ1
Z2dlcjsKK307CisKK0luc3BlY3RvclRlc3QuX3JlY3Vyc2l2ZVNvcnRMZWF2ZSA9IGZ1bmN0aW9u
KCkKK3sKKyAgICBpZiAoIS0tSW5zcGVjdG9yVGVzdC5fcmVjdXJzaXZlU29ydERlcHRoKSB7Cisg
ICAgICAgIHZhciBjYWxsYmFjayA9IEluc3BlY3RvclRlc3QuX3JlY3Vyc2l2ZVNvcnRDYWxsYmFj
azsKKyAgICAgICAgZGVsZXRlIEluc3BlY3RvclRlc3QuX3JlY3Vyc2l2ZVNvcnRDYWxsYmFjazsK
KyAgICAgICAgSW5zcGVjdG9yVGVzdC5fcmVjdXJzaXZlU29ydEdyaWQucmVtb3ZlRXZlbnRMaXN0
ZW5lcigic3RhcnQgc29ydGluZyIsIEluc3BlY3RvclRlc3QuX3JlY3Vyc2l2ZVNvcnRFbnRlciwg
SW5zcGVjdG9yVGVzdCk7CisgICAgICAgIEluc3BlY3RvclRlc3QuX3JlY3Vyc2l2ZVNvcnRHcmlk
LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNvcnRpbmcgY29tcGxldGUiLCBJbnNwZWN0b3JUZXN0Ll9y
ZWN1cnNpdmVTb3J0TGVhdmUsIEluc3BlY3RvclRlc3QpOworICAgICAgICBzZXRUaW1lb3V0KGNh
bGxiYWNrLCAwKTsKKyAgICB9CisgICAgaWYgKCEoSW5zcGVjdG9yVGVzdC5fcmVjdXJzaXZlU29y
dERlcHRoID49IDApKQorICAgICAgICBkZWJ1Z2dlcjsKK307CisKIEluc3BlY3RvclRlc3QuX3Nu
YXBzaG90Vmlld1Nob3duID0gZnVuY3Rpb24oKQogewogICAgIGlmIChJbnNwZWN0b3JUZXN0Ll90
YWtlQW5kT3BlblNuYXBzaG90Q2FsbGJhY2spIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzYWEzMGYxLi5hYWFh
YTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODcgQEAKKzIwMTEtMDQtMTIgIE1pa2hhaWwgTmFn
YW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hyb21pdW1dIFByZXBhcmUg
dG8gbW92ZSBkZXRhaWxlZCBoZWFwIHNuYXBzaG90cyBzdG9yYWdlIGFuZCBwcm9jZXNzaW5nIGlu
dG8gd29ya2Vycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU4MzIwCisKKyAgICAgICAgSW50cm9kdWNlIGEgcHJveHkgb2JqZWN0IHRoYXQgZW11bGF0
ZXMgd29ya2VyIGJlaGF2aW9yIGFuZCBjaGFuZ2UgVUkgY29kZSB0byBjb3BlIHdpdGggaXQuCisK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2o6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90
R3JpZE5vZGVzLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2Rl
LnByb3RvdHlwZS5fcG9wdWxhdGUuZG9Qb3B1bGF0ZS5zb3J0ZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5fcG9wdWxhdGUuZG9Qb3B1bGF0
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBl
Ll9wb3B1bGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUu
cHJvdG90eXBlLnBvcHVsYXRlQ2hpbGRyZW4uY2hpbGRyZW5SZXRyaWV2ZWQubm90aWZ5KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUucG9wdWxh
dGVDaGlsZHJlbi5jaGlsZHJlblJldHJpZXZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBlLnBvcHVsYXRlQ2hpbGRyZW4pOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5zb3J0LmRvU29ydC5h
ZnRlclNvcnQuYWZ0ZXJQb3B1bGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90R3JpZE5vZGUucHJvdG90eXBlLnNvcnQuZG9Tb3J0LmFmdGVyU29ydCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBlLnNvcnQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5wcm90b3R5cGUuZ2V0
IF9zaGFsbG93U2l6ZVBlcmNlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dEdlbmVyaWNPYmplY3ROb2RlLnByb3RvdHlwZS5fdXBkYXRlSGFzQ2hpbGRyZW4pOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE9iamVjdE5vZGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdE9iamVjdE5vZGUucHJvdG90eXBlLl9jcmVhdGVDaGlsZE5vZGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE9iamVjdE5vZGUucHJvdG90eXBl
Ll9jcmVhdGVQcm92aWRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90SW5z
dGFuY2VOb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RJbnN0YW5jZU5v
ZGUucHJvdG90eXBlLl9jcmVhdGVDaGlsZE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEluc3RhbmNlTm9kZS5wcm90b3R5cGUuX2NyZWF0ZVByb3ZpZGVyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb25zdHJ1Y3Rvck5vZGUucHJvdG90eXBlLl9j
cmVhdGVDaGlsZE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnN0
cnVjdG9yTm9kZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzUHJvdmlkZXIpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdEl0ZXJhdG9yc1R1cGxlLnByb3RvdHlwZS5zb3J0QW5kUmV3
aW5kKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmTm9kZS5wcm90b3R5
cGUuX2NhbGN1bGF0ZURpZmYpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERp
ZmZOb2RlLnByb3RvdHlwZS5fY3JlYXRlQ2hpbGROb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3REaWZmTm9kZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzUHJvdmlkZXIuY3Jl
YXRlUHJvdmlkZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZOb2Rl
LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNQcm92aWRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90RGlmZk5vZGUucHJvdG90eXBlLl9jaGlsZEhhc2hGb3JFbnRpdHkpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZOb2RlLnByb3RvdHlwZS5fY2hpbGRI
YXNoRm9yTm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZk5vZGUu
cHJvdG90eXBlLnBvcHVsYXRlQ2hpbGRyZW4uZmlyc3RQcm92aWRlclBvcHVsYXRlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZk5vZGUucHJvdG90eXBlLnBvcHVsYXRl
Q2hpbGRyZW4uZWxzZS5maXJzdFByb3ZpZGVyUG9wdWxhdGVkKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3REaWZmTm9kZS5wcm90b3R5cGUucG9wdWxhdGVDaGlsZHJlbik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RG9taW5hdG9yT2JqZWN0Tm9kZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RG9taW5hdG9yT2JqZWN0Tm9kZS5wcm90
b3R5cGUuX2NyZWF0ZUNoaWxkTm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RG9taW5hdG9yT2JqZWN0Tm9kZS5wcm90b3R5cGUuX2NyZWF0ZVByb3ZpZGVyKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RWaWV3LmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQucHJvdG90eXBlLnNv
cnRpbmdDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJs
ZURhdGFHcmlkLnByb3RvdHlwZS5fcGVyZm9ybVNvcnRpbmcpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdENvbnN0cnVjdG9yc0RhdGFHcmlkLnByb3RvdHlwZS5zZXREYXRhU291
cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb25zdHJ1Y3RvcnNEYXRh
R3JpZC5wcm90b3R5cGUucG9wdWxhdGVDaGlsZHJlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90RGlmZkRhdGFHcmlkLnByb3RvdHlwZS5zZXRCYXNlRGF0YVNvdXJjZS5iYXNl
U25hcHNob3ROb2RlSWRzUmVjZWl2ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdERpZmZEYXRhR3JpZC5wcm90b3R5cGUuc2V0QmFzZURhdGFTb3VyY2UucHVzaEJhc2VTbmFw
c2hvdE5vZGVJZHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZEYXRh
R3JpZC5wcm90b3R5cGUuc2V0QmFzZURhdGFTb3VyY2Uuc25hcHNob3ROb2RlSWRzUmVjZWl2ZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZEYXRhR3JpZC5wcm90b3R5
cGUuc2V0QmFzZURhdGFTb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dERpZmZEYXRhR3JpZC5wcm90b3R5cGUucG9wdWxhdGVDaGlsZHJlbi5iYXNlQWdncmVnYXRlc1Jl
Y2VpdmVkLmFnZ3JlZ2F0ZXNSZWNlaXZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RGlmZkRhdGFHcmlkLnByb3RvdHlwZS5wb3B1bGF0ZUNoaWxkcmVuKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5pbmdQYXRoc0xpc3QpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmluZ1BhdGhzTGlzdC5wcm90b3R5cGUuX3Jl
c2V0UGF0aHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmluZ1Bh
dGhzTGlzdC5wcm90b3R5cGUuc2V0RGF0YVNvdXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90UmV0YWluaW5nUGF0aHNMaXN0LnByb3RvdHlwZS5yZWZyZXNoKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5pbmdQYXRoc0xpc3QucHJvdG90eXBl
LnNob3dOZXh0LnBhdGhGb3VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UmV0YWluaW5nUGF0aHNMaXN0LnByb3RvdHlwZS5zaG93TmV4dC5zdGFydFNlYXJjaGluZyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluaW5nUGF0aHNMaXN0LnByb3Rv
dHlwZS5zaG93TmV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFZp
ZXcucHJvZmlsZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBz
aG90Vmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJv
dG90eXBlLmdldCBwcm9maWxlV3JhcHBlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGV0YWls
ZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlLmdldCBiYXNlUHJvZmlsZVdyYXBwZXIpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RWaWV3LnByb3RvdHlwZS5zaG93LnByb2Zp
bGVDYWxsYmFjazEpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RWaWV3
LnByb3RvdHlwZS5zaG93LnByb2ZpbGVDYWxsYmFjazIpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkRldGFpbGVkSGVhcHNob3RWaWV3LnByb3RvdHlwZS5zaG93KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5EZXRhaWxlZEhlYXBzaG90Vmlldy5wcm90b3R5cGUuX2NoYW5nZUJhc2UuYmFzZVByb2Zp
bGVMb2FkZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Lmpz
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanM6IEFk
ZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUGxlYXNlV2FpdE1lc3NhZ2UuanM6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLl9yZXNldCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUubG9hZEhlYXBTbmFwc2hvdCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuX2FkZEhlYXBT
bmFwc2hvdENodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3Rv
dHlwZS5fZmluaXNoSGVhcFNuYXBzaG90LmRvUGFyc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLl9maW5pc2hIZWFwU25hcHNob3QuZWxzZS5wYXJzZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLl9maW5pc2hI
ZWFwU25hcHNob3QpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorCiAyMDExLTA0
LTEyICBBbmRyZXkgQWRhaWtpbiAgPGFhbmRyZXlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDFmNDZhOGUuLjE1
MDI2MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTYyMDksNiArNjIwOSw3IEBACiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Hb1RvTGluZURpYWxvZy5qcycsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9IQVJFbnRyeS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9IZWxwU2NyZWVuLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlVmlldy5qcycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IGM2MTBhNGUuLjdhZjc3N2YgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC02NzE2OSw2ICs2NzE2OSwxMCBAQAogCQkJCQk+CiAJ
CQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZy
b250LWVuZFxIZWFwU25hcHNob3RQcm94eS5qcyIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSGVhcFNuYXBz
aG90Vmlldy5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdEdyaWROb2Rlcy5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdEdyaWROb2Rl
cy5qcwppbmRleCA0NjljYjk0Li40N2UzNmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RHcmlkTm9kZXMuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVz
LmpzCkBAIC01MiwxMyArNTIsMTUgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2Rl
LnByb3RvdHlwZSA9IHsKICAgICAgICAgZnVuY3Rpb24gZG9Qb3B1bGF0ZSgpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wdWxhdGUiLCB0aGlzLl9w
b3B1bGF0ZSwgdGhpcyk7Ci0gICAgICAgICAgICB0aGlzLl9wcm92aWRlci5zb3J0KHRoaXMuY29t
cGFyYXRvcigpKTsKLSAgICAgICAgICAgIHRoaXMuX3Byb3ZpZGVyLmZpcnN0KCk7Ci0gICAgICAg
ICAgICB0aGlzLnBvcHVsYXRlQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNvcnRl
ZChpZ25vcmVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVD
aGlsZHJlbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fcHJvdmlkZXIuc29y
dEFuZFJld2luZCh0aGlzLmNvbXBhcmF0b3IoKSwgc29ydGVkLmJpbmQodGhpcykpOwogICAgICAg
ICB9CiAgICAgfSwKIAotICAgIHBvcHVsYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKHByb3ZpZGVyLCBo
b3dNYW55LCBhdEluZGV4LCBzdXBwcmVzc05vdGlmeUFib3V0Q29tcGxldGlvbikKKyAgICBwb3B1
bGF0ZUNoaWxkcmVuOiBmdW5jdGlvbihwcm92aWRlciwgaG93TWFueSwgYXRJbmRleCwgYWZ0ZXJQ
b3B1bGF0ZSwgc3VwcHJlc3NOb3RpZnlBYm91dENvbXBsZXRpb24pCiAgICAgewogICAgICAgICBp
ZiAoIWhvd01hbnkgJiYgcHJvdmlkZXIpIHsKICAgICAgICAgICAgIGhvd01hbnkgPSBwcm92aWRl
ci5pbnN0YW5jZUNvdW50OwpAQCAtNzcsMjEgKzc5LDM1IEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RHcmlkTm9kZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9yICggOyBob3dNYW55ID4gMCAmJiBwcm92
aWRlci5oYXNOZXh0KCk7IHByb3ZpZGVyLm5leHQoKSwgKytwcm92aWRlci5pbnN0YW5jZUNvdW50
LCAtLWhvd01hbnkpIHsKLSAgICAgICAgICAgIHZhciBpdGVtID0gcHJvdmlkZXIuaXRlbTsKLSAg
ICAgICAgICAgIGlmIChoYXZlU2F2ZWRDaGlsZHJlbikgewotICAgICAgICAgICAgICAgIHZhciBo
YXNoID0gdGhpcy5fY2hpbGRIYXNoRm9yRW50aXR5KGl0ZW0pOwotICAgICAgICAgICAgICAgIGlm
IChoYXNoIGluIHRoaXMuX3NhdmVkQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5pbnNlcnRDaGlsZCh0aGlzLl9zYXZlZENoaWxkcmVuW2hhc2hdLCBhdEluZGV4KyspOwotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIGNo
aWxkcmVuUmV0cmlldmVkKGl0ZW1zLCBoYXNOZXh0LCBsZW5ndGgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAo
aGF2ZVNhdmVkQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2ggPSB0aGlz
Ll9jaGlsZEhhc2hGb3JFbnRpdHkoaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNo
IGluIHRoaXMuX3NhdmVkQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
aW5zZXJ0Q2hpbGQodGhpcy5fc2F2ZWRDaGlsZHJlbltoYXNoXSwgYXRJbmRleCsrKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGQodGhpcy5fY3Jl
YXRlQ2hpbGROb2RlKGl0ZW0sIHByb3ZpZGVyKSwgYXRJbmRleCsrKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHByb3ZpZGVyLmluc3RhbmNlQ291bnQgKz0gaXRlbXMubGVuZ3RoOworCisg
ICAgICAgICAgICBpZiAoaGFzTmV4dCkKKyAgICAgICAgICAgICAgICB0aGlzLmluc2VydENoaWxk
KG5ldyBXZWJJbnNwZWN0b3IuU2hvd01vcmVEYXRhR3JpZE5vZGUodGhpcy5wb3B1bGF0ZUNoaWxk
cmVuLmJpbmQodGhpcywgcHJvdmlkZXIpLCB0aGlzLl9kZWZhdWx0UG9wdWxhdGVDb3VudCwgbGVu
Z3RoKSwgYXRJbmRleCsrKTsKKyAgICAgICAgICAgIGlmIChhZnRlclBvcHVsYXRlKQorICAgICAg
ICAgICAgICAgIGFmdGVyUG9wdWxhdGUoKTsKKyAgICAgICAgICAgIGlmICghc3VwcHJlc3NOb3Rp
ZnlBYm91dENvbXBsZXRpb24pIHsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBub3RpZnkoKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoInBvcHVsYXRlIGNvbXBsZXRlIik7CiAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHNldFRpbWVvdXQobm90aWZ5LmJpbmQodGhpcyksIDApOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgdGhpcy5pbnNlcnRDaGlsZCh0aGlzLl9jcmVhdGVDaGlsZE5vZGUo
cHJvdmlkZXIpLCBhdEluZGV4KyspOwogICAgICAgICB9Ci0gICAgICAgIGlmIChwcm92aWRlci5o
YXNOZXh0KCkpCi0gICAgICAgICAgICB0aGlzLmluc2VydENoaWxkKG5ldyBXZWJJbnNwZWN0b3Iu
U2hvd01vcmVEYXRhR3JpZE5vZGUodGhpcy5wb3B1bGF0ZUNoaWxkcmVuLmJpbmQodGhpcywgcHJv
dmlkZXIpLCB0aGlzLl9kZWZhdWx0UG9wdWxhdGVDb3VudCwgcHJvdmlkZXIubGVuZ3RoKSwgYXRJ
bmRleCsrKTsKLSAgICAgICAgaWYgKCFzdXBwcmVzc05vdGlmeUFib3V0Q29tcGxldGlvbikKLSAg
ICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJwb3B1bGF0ZSBjb21wbGV0
ZSIpOworICAgICAgICBwcm92aWRlci5nZXROZXh0SXRlbXMoaG93TWFueSwgY2hpbGRyZW5SZXRy
aWV2ZWQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIF9zYXZlQ2hpbGRyZW46IGZ1bmN0aW9u
KCkKQEAgLTEwNiwzMyArMTIyLDM4IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9k
ZS5wcm90b3R5cGUgPSB7CiAKICAgICBzb3J0OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2
YXIgY29tcGFyYXRvciA9IHRoaXMuY29tcGFyYXRvcigpOwotICAgICAgICBXZWJJbnNwZWN0b3Iu
UGxlYXNlV2FpdE1lc3NhZ2UucHJvdG90eXBlLnN0YXJ0QWN0aW9uKHRoaXMuZGF0YUdyaWQuZWxl
bWVudCwgZG9Tb3J0LmJpbmQodGhpcykpOwotCiAgICAgICAgIGZ1bmN0aW9uIGRvU29ydCgpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9wcm92aWRlci5zb3J0KGNvbXBhcmF0b3Ip
KSB7CisgICAgICAgICAgICBmdW5jdGlvbiBhZnRlclNvcnQoc29ydGVkKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmICghc29ydGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgdGhpcy5fc2F2ZUNoaWxkcmVuKCk7CiAgICAgICAgICAgICAg
ICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICAgICAgICAgIHRoaXMuX3Byb3ZpZGVy
LmZpcnN0KCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUNoaWxkcmVuKHRoaXMuX3By
b3ZpZGVyKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMuY2hpbGRy
ZW4ubGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9
IHRoaXMuY2hpbGRyZW5baV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5leHBhbmRl
ZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnNvcnQoKTsKKyAgICAgCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gYWZ0ZXJQb3B1bGF0ZSgpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMuY2hpbGRyZW4ubGVuZ3Ro
OyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlz
LmNoaWxkcmVuW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmV4cGFuZGVk
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnNvcnQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFHcmlkLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycygic29ydGluZyBjb21wbGV0ZSIpOwogICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlQ2hpbGRyZW4odGhpcy5fcHJvdmlkZXIsIG51bGws
IG51bGwsIGFmdGVyUG9wdWxhdGUuYmluZCh0aGlzKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAodGhpcy5kYXRhR3JpZCA9PT0gdGhpcykKLSAgICAgICAgICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycygic29ydGluZyBjb21wbGV0ZSIpOworICAgICAgICAgICAg
dGhpcy5fcHJvdmlkZXIuc29ydEFuZFJld2luZCh0aGlzLmNvbXBhcmF0b3IoKSwgYWZ0ZXJTb3J0
LmJpbmQodGhpcykpOwogICAgICAgICB9CisgICAgICAgIHRoaXMuZGF0YUdyaWQuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKCJzdGFydCBzb3J0aW5nIik7CisgICAgICAgIFdlYkluc3BlY3Rvci5Q
bGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUuc3RhcnRBY3Rpb24odGhpcy5kYXRhR3JpZC5lbGVt
ZW50LCBkb1NvcnQuYmluZCh0aGlzKSk7CiAgICAgfQogfTsKIAogV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuRGF0YUdy
aWROb2RlLnByb3RvdHlwZTsKIAotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmpl
Y3ROb2RlID0gZnVuY3Rpb24odHJlZSwgbm9kZSwgaGFzQ2hpbGRyZW4pCitXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUgPSBmdW5jdGlvbih0cmVlLCBub2RlKQogewot
ICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5jYWxsKHRoaXMsIHRyZWUsIGhh
c0NoaWxkcmVuKTsKKyAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUuY2FsbCh0
aGlzLCB0cmVlLCBmYWxzZSk7CiAgICAgdGhpcy5fbmFtZSA9IG5vZGUubmFtZTsKICAgICB0aGlz
Ll90eXBlID0gbm9kZS50eXBlOwogICAgIHRoaXMuX3NoYWxsb3dTaXplID0gbm9kZS5zZWxmU2l6
ZTsKQEAgLTIyMiw2ICsyNDMsMTUgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNP
YmplY3ROb2RlLnByb3RvdHlwZSA9IHsKICAgICBnZXQgX3NoYWxsb3dTaXplUGVyY2VudCgpCiAg
ICAgewogICAgICAgICByZXR1cm4gdGhpcy5fc2hhbGxvd1NpemUgLyB0aGlzLmRhdGFHcmlkLnNu
YXBzaG90LnRvdGFsU2l6ZSAqIDEwMC4wOworICAgIH0sCisKKyAgICBfdXBkYXRlSGFzQ2hpbGRy
ZW46IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGlzRW1wdHlDYWxsYmFjayhp
c0VtcHR5KQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gIWlzRW1w
dHk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcHJvdmlkZXIuaXNFbXB0eShpc0VtcHR5Q2Fs
bGJhY2suYmluZCh0aGlzKSk7CiAgICAgfQogfQogCkBAIC0yMjksMjQgKzI1OSwyMyBAQCBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUucHJvdG90eXBlLl9fcHJvdG9f
XyA9IFdlYkluc3BlY3Rvci5IZQogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90T2JqZWN0Tm9k
ZSA9IGZ1bmN0aW9uKHRyZWUsIGVkZ2UpCiB7Ci0gICAgdmFyIHByb3ZpZGVyID0gdGhpcy5fY3Jl
YXRlUHJvdmlkZXIodHJlZS5zbmFwc2hvdCwgZWRnZS5ub2RlSW5kZXgpOwotICAgIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5jYWxsKHRoaXMsIHRyZWUsIGVkZ2Uu
bm9kZSwgIXByb3ZpZGVyLmlzRW1wdHkpOworICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RH
ZW5lcmljT2JqZWN0Tm9kZS5jYWxsKHRoaXMsIHRyZWUsIGVkZ2Uubm9kZSk7CiAgICAgdGhpcy5f
cmVmZXJlbmNlTmFtZSA9IGVkZ2UubmFtZTsKICAgICB0aGlzLl9yZWZlcmVuY2VUeXBlID0gZWRn
ZS50eXBlOwotICAgIHRoaXMuX3Byb3ZpZGVyID0gcHJvdmlkZXI7CisgICAgdGhpcy5fcHJvdmlk
ZXIgPSB0aGlzLl9jcmVhdGVQcm92aWRlcih0cmVlLnNuYXBzaG90LCBlZGdlLm5vZGVJbmRleCk7
CisgICAgdGhpcy5fdXBkYXRlSGFzQ2hpbGRyZW4oKTsKIH0KIAogV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdE9iamVjdE5vZGUucHJvdG90eXBlID0gewotICAgIF9jcmVhdGVDaGlsZE5vZGU6IGZ1
bmN0aW9uKHByb3ZpZGVyKQorICAgIF9jcmVhdGVDaGlsZE5vZGU6IGZ1bmN0aW9uKGl0ZW0pCiAg
ICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RPYmplY3RO
b2RlKHRoaXMuZGF0YUdyaWQsIHByb3ZpZGVyLml0ZW0pOworICAgICAgICByZXR1cm4gbmV3IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RPYmplY3ROb2RlKHRoaXMuZGF0YUdyaWQsIGl0ZW0pOwog
ICAgIH0sCiAKICAgICBfY3JlYXRlUHJvdmlkZXI6IGZ1bmN0aW9uKHNuYXBzaG90LCBub2RlSW5k
ZXgpCiAgICAgewogICAgICAgICB2YXIgc2hvd0hpZGRlbkRhdGEgPSBXZWJJbnNwZWN0b3IuRGV0
YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlLnNob3dIaWRkZW5EYXRhOwotICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc1Byb3ZpZGVyKAotICAgICAgICAg
ICAgc25hcHNob3QsCisgICAgICAgIHJldHVybiBzbmFwc2hvdC5jcmVhdGVFZGdlc1Byb3ZpZGVy
KAogICAgICAgICAgICAgbm9kZUluZGV4LAogICAgICAgICAgICAgZnVuY3Rpb24oZWRnZSkgewog
ICAgICAgICAgICAgICAgIHJldHVybiAhZWRnZS5pc0ludmlzaWJsZQpAQCAtMzE4LDIzICszNDcs
MjIgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE9iamVjdE5vZGUucHJvdG90eXBlLl9fcHJv
dG9fXyA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHMKIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dEluc3RhbmNlTm9kZSA9IGZ1bmN0aW9uKHRyZWUsIGJhc2VTbmFwc2hvdCwgc25hcHNob3QsIG5v
ZGUpCiB7Ci0gICAgdmFyIHByb3ZpZGVyID0gdGhpcy5fY3JlYXRlUHJvdmlkZXIoYmFzZVNuYXBz
aG90IHx8IHNuYXBzaG90LCBub2RlLm5vZGVJbmRleCk7ICAKLSAgICBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUuY2FsbCh0aGlzLCB0cmVlLCBub2RlLCAhcHJvdmlk
ZXIuaXNFbXB0eSk7CisgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3RO
b2RlLmNhbGwodGhpcywgdHJlZSwgbm9kZSk7CiAgICAgdGhpcy5faXNEZWxldGVkTm9kZSA9ICEh
YmFzZVNuYXBzaG90OwotICAgIHRoaXMuX3Byb3ZpZGVyID0gcHJvdmlkZXI7ICAgIAorICAgIHRo
aXMuX3Byb3ZpZGVyID0gdGhpcy5fY3JlYXRlUHJvdmlkZXIoYmFzZVNuYXBzaG90IHx8IHNuYXBz
aG90LCBub2RlLm5vZGVJbmRleCk7CisgICAgdGhpcy5fdXBkYXRlSGFzQ2hpbGRyZW4oKTsKIH07
CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RJbnN0YW5jZU5vZGUucHJvdG90eXBlID0gewot
ICAgIF9jcmVhdGVDaGlsZE5vZGU6IGZ1bmN0aW9uKHByb3ZpZGVyKQorICAgIF9jcmVhdGVDaGls
ZE5vZGU6IGZ1bmN0aW9uKGl0ZW0pCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RPYmplY3ROb2RlKHRoaXMuZGF0YUdyaWQsIHByb3ZpZGVyLml0ZW0p
OworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RPYmplY3ROb2Rl
KHRoaXMuZGF0YUdyaWQsIGl0ZW0pOwogICAgIH0sCiAKICAgICBfY3JlYXRlUHJvdmlkZXI6IGZ1
bmN0aW9uKHNuYXBzaG90LCBub2RlSW5kZXgpCiAgICAgewogICAgICAgICB2YXIgc2hvd0hpZGRl
bkRhdGEgPSBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlLnNob3dI
aWRkZW5EYXRhOwotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RF
ZGdlc1Byb3ZpZGVyKAotICAgICAgICAgICAgc25hcHNob3QsCisgICAgICAgIHJldHVybiBzbmFw
c2hvdC5jcmVhdGVFZGdlc1Byb3ZpZGVyKAogICAgICAgICAgICAgbm9kZUluZGV4LAogICAgICAg
ICAgICAgZnVuY3Rpb24oZWRnZSkgewogICAgICAgICAgICAgICAgIHJldHVybiAhZWRnZS5pc0lu
dmlzaWJsZQpAQCAtNDAyLDE1ICs0MzAsMTQgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENv
bnN0cnVjdG9yTm9kZSA9IGZ1bmN0aW9uKHRyZWUsIGNsYXNzTmFtZSwgYWdncmVnYXRlKQogfQog
CiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JOb2RlLnByb3RvdHlwZSA9IHsK
LSAgICBfY3JlYXRlQ2hpbGROb2RlOiBmdW5jdGlvbihwcm92aWRlcikKKyAgICBfY3JlYXRlQ2hp
bGROb2RlOiBmdW5jdGlvbihpdGVtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90SW5zdGFuY2VOb2RlKHRoaXMuZGF0YUdyaWQsIG51bGwsIHRoaXMu
ZGF0YUdyaWQuc25hcHNob3QsIHByb3ZpZGVyLml0ZW0pOworICAgICAgICByZXR1cm4gbmV3IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RJbnN0YW5jZU5vZGUodGhpcy5kYXRhR3JpZCwgbnVsbCwg
dGhpcy5kYXRhR3JpZC5zbmFwc2hvdCwgaXRlbSk7CiAgICAgfSwKIAogICAgIF9jcmVhdGVOb2Rl
c1Byb3ZpZGVyOiBmdW5jdGlvbihzbmFwc2hvdCwgbm9kZVR5cGUsIG5vZGVDbGFzc05hbWUpCiAg
ICAgewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rlc1By
b3ZpZGVyKAotICAgICAgICAgICAgc25hcHNob3QsCisgICAgICAgIHJldHVybiBzbmFwc2hvdC5j
cmVhdGVOb2Rlc1Byb3ZpZGVyKAogICAgICAgICAgICAgZnVuY3Rpb24gKG5vZGUpIHsKICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gbm9kZVR5cGUKICAgICAgICAgICAgICAg
ICAgICAgJiYgKG5vZGVDbGFzc05hbWUgPT09IG51bGwgfHwgbm9kZS5jbGFzc05hbWUgPT09IG5v
ZGVDbGFzc05hbWUpOwpAQCAtNDc1LDE2ICs1MDIsMTMgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdEl0ZXJhdG9yc1R1cGxlID0gZnVuY3Rpb24oaXQxLCBpdDIpCiB9CiAKIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RJdGVyYXRvcnNUdXBsZS5wcm90b3R5cGUgPSB7Ci0gICAgZmlyc3Q6IGZ1
bmN0aW9uKCkKKyAgICBzb3J0QW5kUmV3aW5kOiBmdW5jdGlvbihjb21wYXJhdG9yLCBjYWxsYmFj
aykKICAgICB7Ci0gICAgICAgIHRoaXMuX2l0MS5maXJzdCgpOwotICAgICAgICB0aGlzLl9pdDIu
Zmlyc3QoKTsKLSAgICB9LAotCi0gICAgc29ydDogZnVuY3Rpb24oY29tcGFyYXRvcikKLSAgICB7
Ci0gICAgICAgIHRoaXMuX2l0MS5zb3J0KGNvbXBhcmF0b3IpOwotICAgICAgICB0aGlzLl9pdDIu
c29ydChjb21wYXJhdG9yKTsKKyAgICAgICAgZnVuY3Rpb24gYWZ0ZXJTb3J0KGlnbm9yZWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuX2l0Mi5zb3J0QW5kUmV3aW5kKGNvbXBhcmF0b3Is
IGNhbGxiYWNrKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9pdDEuc29ydEFuZFJld2luZChj
b21wYXJhdG9yLCBhZnRlclNvcnQuYmluZCh0aGlzKSk7CiAgICAgfQogfTsKIApAQCAtNTA5LDgg
KzUzMyw4IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmTm9kZS5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHRoaXMuX3JlbW92ZWRDb3VudCA9IDA7CiAgICAgICAgIHRoaXMuX2FkZGVkU2l6
ZSA9IDA7CiAgICAgICAgIHRoaXMuX3JlbW92ZWRTaXplID0gMDsKLSAgICAgICAgdmFyIG5vZGVB
ID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlKGJhc2VTbmFwc2hvdCk7Ci0gICAg
ICAgIHZhciBub2RlQiA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZShzbmFwc2hv
dCk7CisgICAgICAgIHZhciBub2RlQSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9k
ZShiYXNlU25hcHNob3QuX3NuYXBzaG90KTsKKyAgICAgICAgdmFyIG5vZGVCID0gbmV3IFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3ROb2RlKHNuYXBzaG90Ll9zbmFwc2hvdCk7CiAgICAgICAgIG5v
ZGVBLm5vZGVJbmRleCA9IGJhc2VJbmRleGVzW2ldOwogICAgICAgICBub2RlQi5ub2RlSW5kZXgg
PSBjdXJyZW50SW5kZXhlc1tqXTsKICAgICAgICAgd2hpbGUgKGkgPCBsICYmIGogPCBtKSB7CkBA
IC01MzUsMTggKzU1OSwxOCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZk5vZGUucHJv
dG90eXBlID0gewogICAgICAgICB3aGlsZSAoaiA8IG0pIHsKICAgICAgICAgICAgIHRoaXMuX2Fk
ZGVkQ291bnQrKzsKICAgICAgICAgICAgIHRoaXMuX2FkZGVkU2l6ZSArPSBub2RlQi5zZWxmU2l6
ZTsKLSAgICAgICAgICAgIG5vZGVCLm5vZGVJbmRleCA9IGN1cnJlbnRJbmRleGVzWysral07ICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZUIubm9kZUluZGV4ID0gY3VycmVudEluZGV4
ZXNbKytqXTsKICAgICAgICAgfQogICAgICAgICB0aGlzLl9jb3VudERlbHRhID0gdGhpcy5fYWRk
ZWRDb3VudCAtIHRoaXMuX3JlbW92ZWRDb3VudDsKICAgICAgICAgdGhpcy5fc2l6ZURlbHRhID0g
dGhpcy5fYWRkZWRTaXplIC0gdGhpcy5fcmVtb3ZlZFNpemU7CiAgICAgfSwKIAotICAgIF9jcmVh
dGVDaGlsZE5vZGU6IGZ1bmN0aW9uKHByb3ZpZGVyKQorICAgIF9jcmVhdGVDaGlsZE5vZGU6IGZ1
bmN0aW9uKGl0ZW0sIHByb3ZpZGVyKQogICAgIHsKICAgICAgICAgaWYgKHByb3ZpZGVyID09PSB0
aGlzLl9wcm92aWRlci5faXQxKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90SW5zdGFuY2VOb2RlKHRoaXMuZGF0YUdyaWQsIG51bGwsIHByb3ZpZGVyLnNu
YXBzaG90LCBwcm92aWRlci5pdGVtKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdEluc3RhbmNlTm9kZSh0aGlzLmRhdGFHcmlkLCBudWxsLCBwcm92aWRl
ci5zbmFwc2hvdCwgaXRlbSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBuZXcg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEluc3RhbmNlTm9kZSh0aGlzLmRhdGFHcmlkLCBwcm92
aWRlci5zbmFwc2hvdCwgbnVsbCwgcHJvdmlkZXIuaXRlbSk7CisgICAgICAgICAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RJbnN0YW5jZU5vZGUodGhpcy5kYXRhR3JpZCwg
cHJvdmlkZXIuc25hcHNob3QsIG51bGwsIGl0ZW0pOwogICAgIH0sCiAKICAgICBfY3JlYXRlTm9k
ZXNQcm92aWRlcjogZnVuY3Rpb24oYmFzZVNuYXBzaG90LCBzbmFwc2hvdCwgbm9kZVR5cGUsIG5v
ZGVDbGFzc05hbWUpCkBAIC01NTYsMTYgKzU4MCwyOCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RGlmZk5vZGUucHJvdG90eXBlID0gewogCiAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVByb3Zp
ZGVyKHNuYXBzaG90LCBvdGhlclNuYXBzaG90KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rlc1Byb3ZpZGVyKAotICAgICAgICAg
ICAgICAgIHNuYXBzaG90LAorICAgICAgICAgICAgdmFyIG90aGVyU25hcHNob3RJZCA9IG90aGVy
U25hcHNob3QudWlkOworICAgICAgICAgICAgdmFyIHByb3ZpZGVyID0gc25hcHNob3QuY3JlYXRl
Tm9kZXNQcm92aWRlcigKICAgICAgICAgICAgICAgICBmdW5jdGlvbiAobm9kZSkgewogICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gbm9kZVR5cGUKICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiAobm9kZUNsYXNzTmFtZSA9PT0gbnVsbCB8fCBub2RlLmNsYXNzTmFt
ZSA9PT0gbm9kZUNsYXNzTmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhb3RoZXJT
bmFwc2hvdC5oYXNJZChub2RlLmlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhdGhp
cy5zbmFwc2hvdEhhc05vZGVXaXRoSWQob3RoZXJTbmFwc2hvdElkLCBub2RlLmlkKTsKICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHByb3ZpZGVyLnNuYXBzaG90ID0gc25hcHNob3Q7
CisgICAgICAgICAgICByZXR1cm4gcHJvdmlkZXI7CiAgICAgICAgIH0KICAgICB9LAogCisgICAg
X2NoaWxkSGFzaEZvckVudGl0eTogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBub2RlLmlkOworICAgIH0sCisKKyAgICBfY2hpbGRIYXNoRm9yTm9kZTogZnVuY3Rpb24oY2hp
bGROb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS5zbmFwc2hvdE5vZGVJZDsK
KyAgICB9LAorCiAgICAgY29tcGFyYXRvcjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFy
IHNvcnRBc2NlbmRpbmcgPSB0aGlzLmRhdGFHcmlkLnNvcnRPcmRlciA9PT0gImFzY2VuZGluZyI7
CkBAIC01ODIsMTYgKzYxOCwyMiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZk5vZGUu
cHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZp
bHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5jcmVhdGVDb21wYXJhdG9yKHNvcnRGaWVs
ZHMpOwogICAgIH0sCiAKLSAgICBwb3B1bGF0ZUNoaWxkcmVuOiBmdW5jdGlvbihwcm92aWRlciwg
aG93TWFueSwgYXRJbmRleCkKKyAgICBwb3B1bGF0ZUNoaWxkcmVuOiBmdW5jdGlvbihwcm92aWRl
ciwgaG93TWFueSwgYXRJbmRleCwgYWZ0ZXJQb3B1bGF0ZSkKICAgICB7CiAgICAgICAgIGlmICgh
cHJvdmlkZXIgJiYgIWhvd01hbnkpIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RHcmlkTm9kZS5wcm90b3R5cGUucG9wdWxhdGVDaGlsZHJlbi5jYWxsKHRoaXMsIHRoaXMu
X3Byb3ZpZGVyLl9pdDEsIHRoaXMuX2RlZmF1bHRQb3B1bGF0ZUNvdW50LCBudWxsLCB0cnVlKTsK
LSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUu
cG9wdWxhdGVDaGlsZHJlbi5jYWxsKHRoaXMsIHRoaXMuX3Byb3ZpZGVyLl9pdDIsIHRoaXMuX2Rl
ZmF1bHRQb3B1bGF0ZUNvdW50KTsKKyAgICAgICAgICAgIHZhciBmaXJzdFByb3ZpZGVyUG9wdWxh
dGVkID0gZnVuY3Rpb24oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUucG9wdWxhdGVDaGlsZHJlbi5jYWxs
KHRoaXMsIHRoaXMuX3Byb3ZpZGVyLl9pdDIsIHRoaXMuX2RlZmF1bHRQb3B1bGF0ZUNvdW50LCBh
dEluZGV4LCBhZnRlclBvcHVsYXRlKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBlLnBvcHVsYXRlQ2hpbGRyZW4u
Y2FsbCh0aGlzLCB0aGlzLl9wcm92aWRlci5faXQxLCB0aGlzLl9kZWZhdWx0UG9wdWxhdGVDb3Vu
dCwgYXRJbmRleCwgZmlyc3RQcm92aWRlclBvcHVsYXRlZC5iaW5kKHRoaXMpLCB0cnVlKTsKICAg
ICAgICAgfSBlbHNlIGlmICghaG93TWFueSkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5wb3B1bGF0ZUNoaWxkcmVuLmNhbGwodGhpcywg
dGhpcy5fcHJvdmlkZXIuX2l0MSwgbnVsbCwgbnVsbCwgdHJ1ZSk7Ci0gICAgICAgICAgICBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBlLnBvcHVsYXRlQ2hpbGRyZW4u
Y2FsbCh0aGlzLCB0aGlzLl9wcm92aWRlci5faXQyKTsKKyAgICAgICAgICAgIHZhciBmaXJzdFBy
b3ZpZGVyUG9wdWxhdGVkID0gZnVuY3Rpb24oKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUucG9wdWxhdGVD
aGlsZHJlbi5jYWxsKHRoaXMsIHRoaXMuX3Byb3ZpZGVyLl9pdDIsIG51bGwsIGF0SW5kZXgsIGFm
dGVyUG9wdWxhdGUpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUucG9wdWxhdGVDaGlsZHJlbi5jYWxsKHRoaXMs
IHRoaXMuX3Byb3ZpZGVyLl9pdDEsIG51bGwsIGF0SW5kZXgsIGZpcnN0UHJvdmlkZXJQb3B1bGF0
ZWQuYmluZCh0aGlzKSwgdHJ1ZSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5wb3B1bGF0ZUNoaWxkcmVuLmNh
bGwodGhpcywgcHJvdmlkZXIsIGhvd01hbnksIGF0SW5kZXgpOworICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5wb3B1bGF0ZUNoaWxkcmVuLmNh
bGwodGhpcywgcHJvdmlkZXIsIGhvd01hbnksIGF0SW5kZXgsIGFmdGVyUG9wdWxhdGUpOwogICAg
IH0sCiAKICAgICBfc2lnbkZvckRlbHRhOiBmdW5jdGlvbihkZWx0YSkKQEAgLTYyOCwyMiArNjcw
LDIxIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmTm9kZS5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvCiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3REb21pbmF0b3JPYmplY3ROb2RlID0gZnVuY3Rpb24odHJlZSwgbm9kZSkKIHsKLSAgICB2YXIg
cHJvdmlkZXIgPSB0aGlzLl9jcmVhdGVQcm92aWRlcih0cmVlLnNuYXBzaG90LCBub2RlLm5vZGVJ
bmRleCk7Ci0gICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlLmNh
bGwodGhpcywgdHJlZSwgbm9kZSwgIXByb3ZpZGVyLmlzRW1wdHkpOwotICAgIHRoaXMuX3Byb3Zp
ZGVyID0gcHJvdmlkZXI7CisgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmpl
Y3ROb2RlLmNhbGwodGhpcywgdHJlZSwgbm9kZSk7CisgICAgdGhpcy5fcHJvdmlkZXIgPSB0aGlz
Ll9jcmVhdGVQcm92aWRlcih0cmVlLnNuYXBzaG90LCBub2RlLm5vZGVJbmRleCk7CisgICAgdGhp
cy5fdXBkYXRlSGFzQ2hpbGRyZW4oKTsKIH07CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RE
b21pbmF0b3JPYmplY3ROb2RlLnByb3RvdHlwZSA9IHsKLSAgICBfY3JlYXRlQ2hpbGROb2RlOiBm
dW5jdGlvbihwcm92aWRlcikKKyAgICBfY3JlYXRlQ2hpbGROb2RlOiBmdW5jdGlvbihpdGVtKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RG9taW5h
dG9yT2JqZWN0Tm9kZSh0aGlzLmRhdGFHcmlkLCBwcm92aWRlci5pdGVtKTsKKyAgICAgICAgcmV0
dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RG9taW5hdG9yT2JqZWN0Tm9kZSh0aGlz
LmRhdGFHcmlkLCBpdGVtKTsKICAgICB9LAogCiAgICAgX2NyZWF0ZVByb3ZpZGVyOiBmdW5jdGlv
bihzbmFwc2hvdCwgbm9kZUluZGV4KQogICAgIHsKICAgICAgICAgdmFyIHNob3dIaWRkZW5EYXRh
ID0gV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RWaWV3LnByb3RvdHlwZS5zaG93SGlkZGVu
RGF0YTsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQ
cm92aWRlcigKLSAgICAgICAgICAgIHNuYXBzaG90LAorICAgICAgICByZXR1cm4gc25hcHNob3Qu
Y3JlYXRlTm9kZXNQcm92aWRlcigKICAgICAgICAgICAgIGZ1bmN0aW9uIChub2RlKSB7CiAgICAg
ICAgICAgICAgICAgIHZhciBkb21pbmF0b3JJbmRleCA9IG5vZGUuZG9taW5hdG9ySW5kZXg7CiAg
ICAgICAgICAgICAgICAgIHJldHVybiBkb21pbmF0b3JJbmRleCA9PT0gbm9kZUluZGV4CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNo
b3RWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhl
YXBzaG90Vmlldy5qcwppbmRleCBhMjFiZjc1Li5mYTYxODlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RWaWV3LmpzCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcu
anMKQEAgLTY2LDYgKzY2LDEwIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURh
dGFHcmlkLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBzb3J0QXNjZW5kaW5nID0g
dGhpcy5zb3J0T3JkZXIgPT09ICJhc2NlbmRpbmciOwogICAgICAgICB2YXIgc29ydENvbHVtbklk
ZW50aWZpZXIgPSB0aGlzLnNvcnRDb2x1bW5JZGVudGlmaWVyOworICAgICAgICBpZiAodGhpcy5f
bGFzdFNvcnRDb2x1bW5JZGVudGlmaWVyID09PSBzb3J0Q29sdW1uSWRlbnRpZmllciAmJiB0aGlz
Ll9sYXN0U29ydEFzY2VuZGluZyA9PT0gc29ydEFzY2VuZGluZykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgdGhpcy5fbGFzdFNvcnRDb2x1bW5JZGVudGlmaWVyID0gc29ydENvbHVtbklk
ZW50aWZpZXI7CisgICAgICAgIHRoaXMuX2xhc3RTb3J0QXNjZW5kaW5nID0gc29ydEFzY2VuZGlu
ZzsKICAgICAgICAgdmFyIHNvcnRGaWVsZHMgPSB0aGlzLl9zb3J0RmllbGRzKHNvcnRDb2x1bW5J
ZGVudGlmaWVyLCBzb3J0QXNjZW5kaW5nKTsKIAogICAgICAgICBmdW5jdGlvbiBTb3J0QnlUd29G
aWVsZHMobm9kZUEsIG5vZGVCKQpAQCAtODYsMTEgKzkwLDExIEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RTb3J0YWJsZURhdGFHcmlkLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAg
ICAgIHRoaXMuX3BlcmZvcm1Tb3J0aW5nKFNvcnRCeVR3b0ZpZWxkcyk7Ci0gICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJzb3J0aW5nIGNvbXBsZXRlIik7CiAgICAgfSwKIAog
ICAgIF9wZXJmb3JtU29ydGluZzogZnVuY3Rpb24oc29ydEZ1bmN0aW9uKQogICAgIHsKKyAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInN0YXJ0IHNvcnRpbmciKTsKICAgICAg
ICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjsKICAgICAgICAgdGhpcy5yZW1vdmVDaGls
ZHJlbigpOwogICAgICAgICBjaGlsZHJlbi5zb3J0KHNvcnRGdW5jdGlvbik7CkBAIC0xMDAsNiAr
MTA0LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQucHJvdG90
eXBlID0gewogICAgICAgICAgICAgaWYgKGNoaWxkLmV4cGFuZGVkKQogICAgICAgICAgICAgICAg
IGNoaWxkLnNvcnQoKTsKICAgICAgICAgfQorICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycygic29ydGluZyBjb21wbGV0ZSIpOwogICAgIH0KIH07CiAKQEAgLTEzNCwxNCArMTM5
LDE3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb25zdHJ1Y3RvcnNEYXRhR3JpZC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuc25hcHNob3RWaWV3ID0gc25hcHNob3RWaWV3OwogICAg
ICAgICB0aGlzLnNuYXBzaG90ID0gc25hcHNob3Q7CiAgICAgICAgIHRoaXMucG9wdWxhdGVDaGls
ZHJlbigpOwotICAgICAgICB0aGlzLnNvcnRpbmdDaGFuZ2VkKCk7CiAgICAgfSwKIAogICAgIHBv
cHVsYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBhZ2dyZWdhdGVz
ID0gdGhpcy5zbmFwc2hvdC5hZ2dyZWdhdGVzKCk7Ci0gICAgICAgIGZvciAodmFyIGNvbnN0cnVj
dG9yIGluIGFnZ3JlZ2F0ZXMpCi0gICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKG5ldyBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JOb2RlKHRoaXMsIGNvbnN0cnVjdG9yLCBh
Z2dyZWdhdGVzW2NvbnN0cnVjdG9yXSkpOworICAgICAgICBmdW5jdGlvbiBhZ2dyZWdhdGVzUmVj
ZWl2ZWQoYWdncmVnYXRlcykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh2YXIgY29uc3Ry
dWN0b3IgaW4gYWdncmVnYXRlcykKKyAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKG5l
dyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JOb2RlKHRoaXMsIGNvbnN0cnVj
dG9yLCBhZ2dyZWdhdGVzW2NvbnN0cnVjdG9yXSkpOworICAgICAgICAgICAgdGhpcy5zb3J0aW5n
Q2hhbmdlZCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuc25hcHNob3QuYWdncmVnYXRlcyhm
YWxzZSwgYWdncmVnYXRlc1JlY2VpdmVkLmJpbmQodGhpcykpOwogICAgIH0KIH07CiAKQEAgLTE4
OCwyOCArMTk2LDU1IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmRGF0YUdyaWQucHJv
dG90eXBlID0gewogICAgIHsKICAgICAgICAgdGhpcy5iYXNlU25hcHNob3QgPSBiYXNlU25hcHNo
b3Q7CiAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgaWYgKHRoaXMuYmFz
ZVNuYXBzaG90ICE9PSB0aGlzLnNuYXBzaG90KSB7CisgICAgICAgIGlmICh0aGlzLmJhc2VTbmFw
c2hvdCA9PT0gdGhpcy5zbmFwc2hvdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBm
dW5jdGlvbiBiYXNlU25hcHNob3ROb2RlSWRzUmVjZWl2ZWQobm9kZUlkcykKKyAgICAgICAgewor
ICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5wdXNoU25hcHNob3ROb2RlSWRzKHRoaXMuYmFzZVNu
YXBzaG90LnVpZCwgbm9kZUlkcyk7CiAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlQ2hpbGRyZW4o
KTsKLSAgICAgICAgICAgIHRoaXMuc29ydGluZ0NoYW5nZWQoKTsKICAgICAgICAgfQorICAgICAg
ICBmdW5jdGlvbiBwdXNoQmFzZVNuYXBzaG90Tm9kZUlkcygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICghdGhpcy5zbmFwc2hvdC5oYXNTbmFwc2hvdE5vZGVJZHModGhpcy5iYXNlU25hcHNo
b3QudWlkKSkKKyAgICAgICAgICAgICAgICB0aGlzLmJhc2VTbmFwc2hvdC5ub2RlSWRzKGJhc2VT
bmFwc2hvdE5vZGVJZHNSZWNlaXZlZC5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlQ2hpbGRyZW4oKTsgICAgICAgIAorICAgICAgICB9
CisgICAgICAgIGZ1bmN0aW9uIHNuYXBzaG90Tm9kZUlkc1JlY2VpdmVkKG5vZGVJZHMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRoaXMuYmFzZVNuYXBzaG90LnB1c2hTbmFwc2hvdE5vZGVJZHMo
dGhpcy5zbmFwc2hvdC51aWQsIG5vZGVJZHMpOworICAgICAgICAgICAgcHVzaEJhc2VTbmFwc2hv
dE5vZGVJZHMuY2FsbCh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuYmFzZVNu
YXBzaG90Lmhhc1NuYXBzaG90Tm9kZUlkcyh0aGlzLnNuYXBzaG90LnVpZCkpCisgICAgICAgICAg
ICB0aGlzLnNuYXBzaG90Lm5vZGVJZHMoc25hcHNob3ROb2RlSWRzUmVjZWl2ZWQuYmluZCh0aGlz
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHB1c2hCYXNlU25hcHNob3ROb2RlSWRzLmNh
bGwodGhpcyk7CiAgICAgfSwKIAogICAgIHBvcHVsYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKCkKICAg
ICB7Ci0gICAgICAgIHZhciBiYXNlQ2xhc3NlcyA9IHRoaXMuYmFzZVNuYXBzaG90LmFnZ3JlZ2F0
ZXModHJ1ZSk7Ci0gICAgICAgIHZhciBjbGFzc2VzID0gdGhpcy5zbmFwc2hvdC5hZ2dyZWdhdGVz
KHRydWUpOwotICAgICAgICBmb3IgKHZhciBjbHNzIGluIGJhc2VDbGFzc2VzKSB7Ci0gICAgICAg
ICAgICB2YXIgbm9kZSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZk5vZGUodGhp
cywgY2xzcywgYmFzZUNsYXNzZXNbY2xzc10sIGNsYXNzZXNbY2xzc10pOwotICAgICAgICAgICAg
aWYgKCFub2RlLnplcm9EaWZmKQotICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQobm9k
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChjbHNzIGluIGNsYXNzZXMpIHsKLSAgICAgICAg
ICAgIGlmICghKGNsc3MgaW4gYmFzZUNsYXNzZXMpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5v
ZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZOb2RlKHRoaXMsIGNsc3MsIG51
bGwsIGNsYXNzZXNbY2xzc10pOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS56ZXJvRGlmZikK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChub2RlKTsKKyAgICAgICAgZnVu
Y3Rpb24gYmFzZUFnZ3JlZ2F0ZXNSZWNlaXZlZChiYXNlQ2xhc3NlcykKKyAgICAgICAgeworICAg
ICAgICAgICAgZnVuY3Rpb24gYWdncmVnYXRlc1JlY2VpdmVkKGNsYXNzZXMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgY2xzcyBpbiBiYXNlQ2xhc3NlcykgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
RGlmZk5vZGUodGhpcywgY2xzcywgYmFzZUNsYXNzZXNbY2xzc10sIGNsYXNzZXNbY2xzc10pOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuemVyb0RpZmYpCisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmFwcGVuZENoaWxkKG5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBmb3IgKGNsc3MgaW4gY2xhc3NlcykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIShjbHNzIGluIGJhc2VDbGFzc2VzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZOb2RlKHRoaXMsIGNsc3Ms
IG51bGwsIGNsYXNzZXNbY2xzc10pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2Rl
Lnplcm9EaWZmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQo
bm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgdGhpcy5zb3J0aW5nQ2hhbmdlZCgpOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5zbmFwc2hvdC5hZ2dyZWdhdGVzKHRydWUsIGFnZ3JlZ2F0ZXNSZWNlaXZlZC5iaW5k
KHRoaXMpKTsKICAgICAgICAgfQorICAgICAgICB0aGlzLmJhc2VTbmFwc2hvdC5hZ2dyZWdhdGVz
KHRydWUsIGJhc2VBZ2dyZWdhdGVzUmVjZWl2ZWQuYmluZCh0aGlzKSk7CiAgICAgfQogfTsKIApA
QCAtMjQ5LDYgKzI4NCw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5pbmdQYXRo
c0xpc3QgPSBmdW5jdGlvbigpCiAgICAgICAgIGxlbjogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJMZW5ndGgiKSwgd2lkdGg6ICI5MHB4Iiwgc29ydGFibGU6IHRydWUsIHNvcnQ6ICJh
c2NlbmRpbmciIH0KICAgICB9OwogICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJs
ZURhdGFHcmlkLmNhbGwodGhpcywgY29sdW1ucyk7CisgICAgdGhpcy5fZGVmYXVsdFBvcHVsYXRl
Q291bnQgPSAxMDA7CiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5pbmdQYXRo
c0xpc3QucHJvdG90eXBlID0gewpAQCAtMjYwLDYgKzI5NiwxNCBAQCBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UmV0YWluaW5nUGF0aHNMaXN0LnByb3RvdHlwZSA9IHsKICAgICAgICAgfVtzb3J0
Q29sdW1uXTsKICAgICB9LAogCisgICAgX3Jlc2V0UGF0aHM6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX3NldFJvb3RDaGlsZHJlbkZvckZpbmRlcigpOworICAgICAgICB0aGlzLnJl
bW92ZUNoaWxkcmVuKCk7CisgICAgICAgIHRoaXMuX2NvdW50ZXIgPSAwOworICAgICAgICB0aGlz
LnNob3dOZXh0KHRoaXMuX2RlZmF1bHRQb3B1bGF0ZUNvdW50KTsKKyAgICB9LAorCiAgICAgc2V0
RGF0YVNvdXJjZTogZnVuY3Rpb24oc25hcHNob3RWaWV3LCBzbmFwc2hvdCwgbm9kZUluZGV4LCBw
cmVmaXgpCiAgICAgewogICAgICAgICB0aGlzLnNuYXBzaG90VmlldyA9IHNuYXBzaG90VmlldzsK
QEAgLTI2Nyw1MyArMzExLDQ5IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5pbmdQ
YXRoc0xpc3QucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmICh0aGlzLnBhdGhGaW5kZXIpCiAg
ICAgICAgICAgICB0aGlzLnNlYXJjaENhbmNlbGxlZCgpOwotCi0gICAgICAgIHRoaXMucGF0aEZp
bmRlciA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UGF0aEZpbmRlcihzbmFwc2hvdCwg
bm9kZUluZGV4KTsKLSAgICAgICAgdGhpcy5fc2V0Um9vdENoaWxkcmVuRm9yRmluZGVyKCk7Ci0K
LSAgICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOwotCi0gICAgICAgIHRoaXMuX2NvdW50ZXIg
PSAwOwotICAgICAgICB0aGlzLnNob3dOZXh0KDEwMCk7CisgICAgICAgIHRoaXMucGF0aEZpbmRl
ciA9IHNuYXBzaG90LmNyZWF0ZVBhdGhGaW5kZXIobm9kZUluZGV4KTsKKyAgICAgICAgdGhpcy5f
cmVzZXRQYXRocygpOwogICAgIH0sCiAKICAgICByZWZyZXNoOiBmdW5jdGlvbigpCiAgICAgewot
ICAgICAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHRoaXMuX2NvdW50ZXIgPSAw
OwogICAgICAgICBkZWxldGUgdGhpcy5fY2FuY2VsOwotICAgICAgICB0aGlzLl9zZXRSb290Q2hp
bGRyZW5Gb3JGaW5kZXIoKTsKLSAgICAgICAgdGhpcy5zaG93TmV4dCgxMDApOworICAgICAgICB0
aGlzLl9yZXNldFBhdGhzKCk7CiAgICAgfSwKIAogICAgIHNob3dOZXh0OiBmdW5jdGlvbihwYXRo
c0NvdW50KQogICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLlBsZWFzZVdhaXRNZXNzYWdlLnBy
b3RvdHlwZS5zaG93KHRoaXMuZWxlbWVudCwgdGhpcy5zZWFyY2hDYW5jZWxsZWQuYmluZCh0aGlz
LCBwYXRoc0NvdW50KSk7Ci0gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHN0YXJ0U2VhcmNoaW5n
LmJpbmQodGhpcyksIDUwMCk7CisKKyAgICAgICAgZnVuY3Rpb24gcGF0aEZvdW5kKHJlc3VsdCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUuaGlkZSgpOwor
ICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGlsZHJlbi5sZW5ndGgpCisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUoe3Bh
dGg6V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDYW4ndCBmaW5kIGFueSBwYXRocy4iKSwgbGVuOiIi
fSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHJlc3VsdCAhPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJlZml4
KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQucGF0aCA9IHRoaXMuX3ByZWZpeCArIHJlc3Vs
dC5wYXRoOworICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rv
ci5EYXRhR3JpZE5vZGUocmVzdWx0LCBmYWxzZSkpOworICAgICAgICAgICAgICAgICsrdGhpcy5f
Y291bnRlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldFRpbWVvdXQoc3RhcnRTZWFy
Y2hpbmcuYmluZCh0aGlzKSwgMCk7CisgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBzdGFy
dFNlYXJjaGluZygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9jYW5jZWwgIT09
IHRoaXMucGF0aEZpbmRlcikgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb3VudGVyIDwg
cGF0aHNDb3VudCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5wYXRo
RmluZGVyLmZpbmROZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51
bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5QbGVhc2VXYWl0TWVz
c2FnZS5wcm90b3R5cGUuaGlkZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlz
LmNoaWxkcmVuLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVu
ZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlKHtwYXRoOldlYkluc3BlY3Rvci5V
SVN0cmluZygiQ2FuJ3QgZmluZCBhbnkgcGF0aHMuIiksIGxlbjoiIn0sIGZhbHNlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAocmVzdWx0ICE9PSBmYWxzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
X3ByZWZpeCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucGF0aCA9IHRoaXMu
X3ByZWZpeCArIHJlc3VsdC5wYXRoOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBl
bmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZShyZXN1bHQsIGZhbHNlKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMuX2NvdW50ZXI7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoc3RhcnRTZWFyY2hp
bmcuYmluZCh0aGlzKSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hDYW5jZWxsZWQu
Y2FsbCh0aGlzLCBwYXRoc0NvdW50KTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9jYW5jZWwgPT09
IHRoaXMucGF0aEZpbmRlcikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBk
ZWxldGUgdGhpcy5fY2FuY2VsOworICAgICAgICAgICAgaWYgKHRoaXMuX2NvdW50ZXIgPCBwYXRo
c0NvdW50KQorICAgICAgICAgICAgICAgIHRoaXMucGF0aEZpbmRlci5maW5kTmV4dChwYXRoRm91
bmQuYmluZCh0aGlzKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlz
LnNlYXJjaENhbmNlbGxlZC5jYWxsKHRoaXMsIHBhdGhzQ291bnQpOworICAgICAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl9jYW5jZWw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLl9j
YW5jZWwgPSBmYWxzZTsKICAgICAgICAgfQorICAgICAgICBzZXRUaW1lb3V0KHN0YXJ0U2VhcmNo
aW5nLmJpbmQodGhpcyksIDApOwogICAgIH0sCiAKICAgICBzZWFyY2hDYW5jZWxsZWQ6IGZ1bmN0
aW9uKHBhdGhzQ291bnQpCkBAIC00NTMsMTIgKzQ5MywxMiBAQCBXZWJJbnNwZWN0b3IuRGV0YWls
ZWRIZWFwc2hvdFZpZXcgPSBmdW5jdGlvbihwYXJlbnQsIHByb2ZpbGUpCiAKICAgICB0aGlzLl9s
b2FkUHJvZmlsZSh0aGlzLl9wcm9maWxlVWlkLCBwcm9maWxlQ2FsbGJhY2suYmluZCh0aGlzKSk7
CiAKLSAgICBmdW5jdGlvbiBwcm9maWxlQ2FsbGJhY2socHJvZmlsZSkKKyAgICBmdW5jdGlvbiBw
cm9maWxlQ2FsbGJhY2soKQogICAgIHsKICAgICAgICAgdmFyIGxpc3QgPSB0aGlzLl9wcm9maWxl
cygpOwogICAgICAgICB2YXIgcHJvZmlsZUluZGV4OwogICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxpc3QubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBpZiAobGlzdFtpXS51aWQgPT09IHBy
b2ZpbGUudWlkKSB7CisgICAgICAgICAgICBpZiAobGlzdFtpXS51aWQgPT09IHRoaXMuX3Byb2Zp
bGVVaWQpIHsKICAgICAgICAgICAgICAgICBwcm9maWxlSW5kZXggPSBpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNDkzLDcgKzUzMyw3IEBAIFdlYkluc3BlY3Rv
ci5EZXRhaWxlZEhlYXBzaG90Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgZ2V0IHByb2ZpbGVXcmFw
cGVyKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fcHJvZmlsZVdyYXBwZXIpCi0gICAgICAg
ICAgICB0aGlzLl9wcm9maWxlV3JhcHBlciA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
KHRoaXMucHJvZmlsZSk7CisgICAgICAgICAgICB0aGlzLl9wcm9maWxlV3JhcHBlciA9IHRoaXMu
cHJvZmlsZS5wcm94eTsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2ZpbGVXcmFwcGVyOwogICAg
IH0sCiAKQEAgLTUwNCwzNCArNTQ0LDI3IEBAIFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90
Vmlldy5wcm90b3R5cGUgPSB7CiAKICAgICBnZXQgYmFzZVByb2ZpbGVXcmFwcGVyKCkKICAgICB7
Ci0gICAgICAgIGlmICghdGhpcy5fYmFzZVByb2ZpbGVXcmFwcGVyKSB7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5iYXNlUHJvZmlsZSAhPT0gdGhpcy5wcm9maWxlKQotICAgICAgICAgICAgICAgIHRo
aXMuX2Jhc2VQcm9maWxlV3JhcHBlciA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90KHRo
aXMuYmFzZVByb2ZpbGUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRoaXMu
X2Jhc2VQcm9maWxlV3JhcHBlciA9IHRoaXMucHJvZmlsZVdyYXBwZXI7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKCF0aGlzLl9iYXNlUHJvZmlsZVdyYXBwZXIpCisgICAgICAgICAgICB0aGlzLl9i
YXNlUHJvZmlsZVdyYXBwZXIgPSB0aGlzLmJhc2VQcm9maWxlLnByb3h5OwogICAgICAgICByZXR1
cm4gdGhpcy5fYmFzZVByb2ZpbGVXcmFwcGVyOwogICAgIH0sCiAKICAgICBzaG93OiBmdW5jdGlv
bihwYXJlbnRFbGVtZW50KQogICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90
eXBlLnNob3cuY2FsbCh0aGlzLCBwYXJlbnRFbGVtZW50KTsKLSAgICAgICAgaWYgKCF0aGlzLnBy
b2ZpbGUuX2xvYWRlZCkKKyAgICAgICAgaWYgKCF0aGlzLnByb2ZpbGVXcmFwcGVyLmxvYWRlZCkK
ICAgICAgICAgICAgIHRoaXMuX2xvYWRQcm9maWxlKHRoaXMuX3Byb2ZpbGVVaWQsIHByb2ZpbGVD
YWxsYmFjazEuYmluZCh0aGlzKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByb2ZpbGVD
YWxsYmFjazEuY2FsbCh0aGlzLCB0aGlzLnByb2ZpbGUpOworICAgICAgICAgICAgcHJvZmlsZUNh
bGxiYWNrMS5jYWxsKHRoaXMpOwogCi0gICAgICAgIGZ1bmN0aW9uIHByb2ZpbGVDYWxsYmFjazEo
cHJvZmlsZSkgewotICAgICAgICAgICAgdGhpcy5wcm9maWxlV3JhcHBlci5yZXN0b3JlKHByb2Zp
bGUpOwotICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVByb2ZpbGUgJiYgIXRoaXMuYmFzZVByb2Zp
bGUuX2xvYWRlZCkKKyAgICAgICAgZnVuY3Rpb24gcHJvZmlsZUNhbGxiYWNrMSgpIHsKKyAgICAg
ICAgICAgIGlmICh0aGlzLmJhc2VQcm9maWxlICYmICF0aGlzLmJhc2VQcm9maWxlV3JhcHBlci5s
b2FkZWQpCiAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZFByb2ZpbGUodGhpcy5fYmFzZVByb2Zp
bGVVaWQsIHByb2ZpbGVDYWxsYmFjazIuYmluZCh0aGlzKSk7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgcHJvZmlsZUNhbGxiYWNrMi5jYWxsKHRoaXMsIHRoaXMuYmFzZVByb2Zp
bGUpOworICAgICAgICAgICAgICAgIHByb2ZpbGVDYWxsYmFjazIuY2FsbCh0aGlzKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIHByb2ZpbGVDYWxsYmFjazIocHJvZmlsZSkgewotICAg
ICAgICAgICAgaWYgKHByb2ZpbGUpCi0gICAgICAgICAgICAgICAgdGhpcy5iYXNlUHJvZmlsZVdy
YXBwZXIucmVzdG9yZShwcm9maWxlKTsKKyAgICAgICAgZnVuY3Rpb24gcHJvZmlsZUNhbGxiYWNr
MigpIHsKICAgICAgICAgICAgIHRoaXMuY3VycmVudFZpZXcuc2hvdygpOwogICAgICAgICAgICAg
dGhpcy5kYXRhR3JpZC51cGRhdGVXaWR0aHMoKTsKICAgICAgICAgfQpAQCAtNzAwLDcgKzczMyw3
IEBAIFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90Vmlldy5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHRoaXMuX2Jhc2VQcm9maWxlVWlkID0gdGhpcy5fcHJvZmlsZXMoKVt0aGlzLmJhc2VTZWxl
Y3RFbGVtZW50LnNlbGVjdGVkSW5kZXhdLnVpZDsKICAgICAgICAgdGhpcy5fbG9hZFByb2ZpbGUo
dGhpcy5fYmFzZVByb2ZpbGVVaWQsIGJhc2VQcm9maWxlTG9hZGVkLmJpbmQodGhpcykpOwogCi0g
ICAgICAgIGZ1bmN0aW9uIGJhc2VQcm9maWxlTG9hZGVkKHByb2ZpbGUpCisgICAgICAgIGZ1bmN0
aW9uIGJhc2VQcm9maWxlTG9hZGVkKCkKICAgICAgICAgewogICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX2Jhc2VQcm9maWxlV3JhcHBlcjsKICAgICAgICAgICAgIHRoaXMuYmFzZVByb2ZpbGUuX2xh
c3RTaG93biA9IERhdGUubm93KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCmluZGV4IGM5ZDFlMzAuLjJiMWFmZWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCkBA
IC01NTIsMTIgKzU1Miw2IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0g
ewogICAgICAgICByZXR1cm4gdGhpcy5fbm9kZUNvdW50OwogICAgIH0sCiAKLSAgICByZXN0b3Jl
OiBmdW5jdGlvbihwcm9maWxlKQotICAgIHsKLSAgICAgICAgdGhpcy5fbm9kZXMgPSBwcm9maWxl
Lm5vZGVzOwotICAgICAgICB0aGlzLl9zdHJpbmdzID0gcHJvZmlsZS5zdHJpbmdzOwotICAgIH0s
Ci0KICAgICBnZXQgcm9vdE5vZGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSh0aGlzLCB0aGlzLl9yb290Tm9kZUluZGV4KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJv
eHkuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFBy
b3h5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YTYxZDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFw
c2hvdFByb3h5LmpzCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRkZAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UHJveHkgPSBmdW5jdGlvbigpCit7ICAgCisgICAgdGhpcy5fc25hcHNob3QgPSBudWxsOworICAg
IHRoaXMuX25vZGVJZHMgPSBbXTsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5
LnByb3RvdHlwZSA9IHsKKyAgICBfaW52b2tlR2V0dGVyOiBmdW5jdGlvbihnZXR0ZXJOYW1lLCBj
YWxsYmFjaykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIHJldHVyblJlc3VsdCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3NuYXBzaG90W2dldHRlck5hbWVdKTsKKyAg
ICAgICAgfQorICAgICAgICBzZXRUaW1lb3V0KHJldHVyblJlc3VsdC5iaW5kKHRoaXMpLCAwKTsK
KyAgICB9LAorCisgICAgYWdncmVnYXRlczogZnVuY3Rpb24od2l0aE5vZGVJbmRleGVzLCBjYWxs
YmFjaykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIHJldHVyblJlc3VsdCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3NuYXBzaG90LmFnZ3JlZ2F0ZXMod2l0aE5vZGVJ
bmRleGVzKSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0VGltZW91dChyZXR1cm5SZXN1bHQuYmlu
ZCh0aGlzKSwgMCk7CisgICAgfSwKKworICAgIF9leHRyYWN0RWRnZURhdGE6IGZ1bmN0aW9uKGVk
Z2UpCisgICAgeworICAgICAgICByZXR1cm4ge25hbWU6IGVkZ2UubmFtZSwgbm9kZTogdGhpcy5f
ZXh0cmFjdE5vZGVEYXRhKGVkZ2Uubm9kZSksIG5vZGVJbmRleDogZWRnZS5ub2RlSW5kZXgsIHR5
cGU6IGVkZ2UudHlwZX07CisgICAgfSwKKworICAgIF9leHRyYWN0Tm9kZURhdGE6IGZ1bmN0aW9u
KG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4ge2lkOiBub2RlLmlkLCBuYW1lOiBub2RlLm5h
bWUsIG5vZGVJbmRleDogbm9kZS5ub2RlSW5kZXgsIHJldGFpbmVkU2l6ZTogbm9kZS5yZXRhaW5l
ZFNpemUsIHNlbGZTaXplOiBub2RlLnNlbGZTaXplLCB0eXBlOiBub2RlLnR5cGV9OworICAgIH0s
CisKKyAgICBjcmVhdGVFZGdlc1Byb3ZpZGVyOiBmdW5jdGlvbihub2RlSW5kZXgsIGZpbHRlcikK
KyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVByb3ZpZGVyKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGZpbHRlcikKKyAgICAgICAgICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIuYmlu
ZCh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dEVkZ2VzUHJvdmlkZXIodGhpcy5fc25hcHNob3QsIG5vZGVJbmRleCwgZmlsdGVyKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm92aWRl
clByb3h5KGNyZWF0ZVByb3ZpZGVyLmJpbmQodGhpcyksIHRoaXMuX2V4dHJhY3RFZGdlRGF0YS5i
aW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgY3JlYXRlTm9kZXNQcm92aWRlcjogZnVuY3Rpb24o
ZmlsdGVyKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gY3JlYXRlUHJvdmlkZXIoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoZmlsdGVyKQorICAgICAgICAgICAgICAgIGZpbHRlciA9IGZp
bHRlci5iaW5kKHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90Tm9kZXNQcm92aWRlcih0aGlzLl9zbmFwc2hvdCwgZmlsdGVyKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm92aWRlclBy
b3h5KGNyZWF0ZVByb3ZpZGVyLmJpbmQodGhpcyksIHRoaXMuX2V4dHJhY3ROb2RlRGF0YS5iaW5k
KHRoaXMpKTsKKyAgICB9LAorCisgICAgY3JlYXRlUGF0aEZpbmRlcjogZnVuY3Rpb24odGFyZ2V0
Tm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90UGF0aEZpbmRlclByb3h5KG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UGF0aEZp
bmRlcih0aGlzLl9zbmFwc2hvdCwgdGFyZ2V0Tm9kZUluZGV4KSk7CisgICAgfSwKKworICAgIGRp
c3Bvc2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3NuYXBzaG90LmRpc3Bvc2Uo
KTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX25vZGVJZHM7CisgICAgfSwKKworICAgIGhhc1NuYXBz
aG90Tm9kZUlkczogZnVuY3Rpb24oc25hcHNob3RJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
bmFwc2hvdElkIGluIHRoaXMuX25vZGVJZHM7CisgICAgfSwKKworICAgIGZpbmlzaExvYWRpbmc6
IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3NuYXBzaG90IHx8
ICF0aGlzLl9pc0xvYWRpbmcpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZ1
bmN0aW9uIHBhcnNlKCkgeworICAgICAgICAgICAgdmFyIHJhd1NuYXBzaG90ID0gSlNPTi5wYXJz
ZSh0aGlzLl9qc29uKTsKKyAgICAgICAgICAgIHZhciBsb2FkQ2FsbGJhY2tzID0gdGhpcy5fb25M
b2FkQ2FsbGJhY2tzOworICAgICAgICAgICAgbG9hZENhbGxiYWNrcy5zcGxpY2UoMCwgMCwgY2Fs
bGJhY2spOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29uTG9hZENhbGxiYWNrOworICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX2pzb247CisgICAgICAgICAgICBkZWxldGUgdGhpcy5faXNMb2Fk
aW5nOworICAgICAgICAgICAgdGhpcy5fc25hcHNob3QgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdChyYXdTbmFwc2hvdCk7CisgICAgICAgICAgICB0aGlzLl9ub2RlQ291bnQgPSB0aGlz
Ll9zbmFwc2hvdC5ub2RlQ291bnQ7CisgICAgICAgICAgICB0aGlzLl9yb290Tm9kZUluZGV4ID0g
dGhpcy5fc25hcHNob3QuX3Jvb3ROb2RlSW5kZXg7CisgICAgICAgICAgICB0aGlzLl90b3RhbFNp
emUgPSB0aGlzLl9zbmFwc2hvdC50b3RhbFNpemU7CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGxvYWRDYWxsYmFja3MubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgbG9hZENh
bGxiYWNrc1tpXSgpOworICAgICAgICB9CisgICAgICAgIHNldFRpbWVvdXQocGFyc2UuYmluZCh0
aGlzKSwgMCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0sCisKKyAgICBnZXQgbG9hZGVk
KCkKKyAgICB7CisgICAgICAgIHJldHVybiAhIXRoaXMuX3NuYXBzaG90OworICAgIH0sCisKKyAg
ICBnZXQgbm9kZUNvdW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9ub2RlQ291bnQ7
CisgICAgfSwKKworICAgIG5vZGVJZHM6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAg
ICAgdGhpcy5faW52b2tlR2V0dGVyKCJub2RlSWRzIiwgY2FsbGJhY2spOworICAgIH0sCisKKyAg
ICBwdXNoSlNPTkNodW5rOiBmdW5jdGlvbihjaHVuaykKKyAgICB7CisgICAgICAgIGlmICh0aGlz
LmxvYWRlZCB8fCAhdGhpcy5faXNMb2FkaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB0aGlzLl9qc29uICs9IGNodW5rOworICAgIH0sCisKKyAgICBwdXNoU25hcHNob3ROb2RlSWRz
OiBmdW5jdGlvbihzbmFwc2hvdElkLCBub2RlSWRzKQorICAgIHsKKyAgICAgICAgdGhpcy5fbm9k
ZUlkc1tzbmFwc2hvdElkXSA9IG5vZGVJZHM7CisgICAgfSwKKworICAgIGdldCByb290Tm9kZUlu
ZGV4KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9yb290Tm9kZUluZGV4OworICAgIH0s
CisKKyAgICBzbmFwc2hvdEhhc05vZGVXaXRoSWQ6IGZ1bmN0aW9uKHNuYXBzaG90SWQsIG5vZGVJ
ZCkKKyAgICB7CisgICAgICAgIHZhciBub2RlSWRzID0gdGhpcy5fbm9kZUlkc1tzbmFwc2hvdElk
XTsKKyAgICAgICAgaWYgKG5vZGVJZHMpCisgICAgICAgICAgICByZXR1cm4gbm9kZUlkcy5iaW5h
cnlJbmRleE9mKG5vZGVJZCwgdGhpcy5fc25hcHNob3QuX251bWJlcnNDb21wYXJhdG9yKSA+PSAw
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKworICAg
IHN0YXJ0TG9hZGluZzogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgeworICAgICAgICBpZiAodGhp
cy5fc25hcHNob3QpIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGFzeW5jSW52b2tlKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgc2V0VGltZW91dChjYWxsYmFjaywgMCk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNMb2FkaW5nKSB7CisgICAgICAgICAgICB0
aGlzLl9vbkxvYWRDYWxsYmFja3MucHVzaChjYWxsYmFjayk7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSB0
cnVlOworICAgICAgICAgICAgdGhpcy5fb25Mb2FkQ2FsbGJhY2tzID0gW2NhbGxiYWNrXTsKKyAg
ICAgICAgICAgIHRoaXMuX2pzb24gPSAiIjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfSwKKworICAgIGdldCB0b3RhbFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3RvdGFsU2l6ZTsKKyAgICB9LAorCisgICAgZ2V0IHVpZCgpCisgICAgeworICAg
ICAgICByZXR1cm4gdGhpcy5fc25hcHNob3QudWlkOworICAgIH0KK307CisKK1dlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm92aWRlclByb3h5ID0gZnVuY3Rpb24oY3JlYXRlUHJvdmlkZXIsIGV4
dHJhY3REYXRhKQoreworICAgIHRoaXMuX3Byb3ZpZGVyID0gY3JlYXRlUHJvdmlkZXIoKTsKKyAg
ICB0aGlzLl9leHRyYWN0RGF0YSA9IGV4dHJhY3REYXRhOworfQorCitXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UHJvdmlkZXJQcm94eS5wcm90b3R5cGUgPSB7CisgICAgZ2V0TmV4dEl0ZW1zOiBm
dW5jdGlvbihjb3VudCwgY2FsbGJhY2spCisgICAgeworICAgICAgICBmdW5jdGlvbiByZXR1cm5S
ZXN1bHQoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KGNv
dW50KTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwIDsgaSA8IGNvdW50ICYmIHRoaXMuX3By
b3ZpZGVyLmhhc05leHQoKTsgKytpLCB0aGlzLl9wcm92aWRlci5uZXh0KCkpCisgICAgICAgICAg
ICAgICAgcmVzdWx0W2ldID0gdGhpcy5fZXh0cmFjdERhdGEodGhpcy5fcHJvdmlkZXIuaXRlbSk7
CisgICAgICAgICAgICByZXN1bHQubGVuZ3RoID0gaTsKKyAgICAgICAgICAgIGNhbGxiYWNrKHJl
c3VsdCwgdGhpcy5fcHJvdmlkZXIuaGFzTmV4dCgpLCB0aGlzLl9wcm92aWRlci5sZW5ndGgpOwor
ICAgICAgICB9CisgICAgICAgIHNldFRpbWVvdXQocmV0dXJuUmVzdWx0LmJpbmQodGhpcyksIDAp
OworICAgIH0sCisKKyAgICBpc0VtcHR5OiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICB7CisgICAg
ICAgIGZ1bmN0aW9uIHJldHVyblJlc3VsdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhbGxi
YWNrKHRoaXMuX3Byb3ZpZGVyLmlzRW1wdHkpOworICAgICAgICB9CisgICAgICAgIHNldFRpbWVv
dXQocmV0dXJuUmVzdWx0LmJpbmQodGhpcyksIDApOworICAgIH0sCisKKyAgICBzb3J0QW5kUmV3
aW5kOiBmdW5jdGlvbihjb21wYXJhdG9yLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGZ1bmN0
aW9uIHJldHVyblJlc3VsdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSB0
aGlzLl9wcm92aWRlci5zb3J0KGNvbXBhcmF0b3IpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkK
KyAgICAgICAgICAgICAgICB0aGlzLl9wcm92aWRlci5maXJzdCgpOworICAgICAgICAgICAgY2Fs
bGJhY2socmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICBzZXRUaW1lb3V0KHJldHVyblJlc3Vs
dC5iaW5kKHRoaXMpLCAwKTsKKyAgICB9Cit9OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UGF0aEZpbmRlclByb3h5ID0gZnVuY3Rpb24ocGF0aEZpbmRlcikKK3sKKyAgICB0aGlzLl9wYXRo
RmluZGVyID0gcGF0aEZpbmRlcjsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhG
aW5kZXJQcm94eS5wcm90b3R5cGUgPSB7CisgICAgZmluZE5leHQ6IGZ1bmN0aW9uKGNhbGxiYWNr
KQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gcmV0dXJuUmVzdWx0KCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY2FsbGJhY2sodGhpcy5fcGF0aEZpbmRlci5maW5kTmV4dCgpKTsKKyAgICAgICAg
fQorICAgICAgICBzZXRUaW1lb3V0KHJldHVyblJlc3VsdC5iaW5kKHRoaXMpLCAwKTsKKyAgICB9
LAorCisgICAgdXBkYXRlUm9vdHM6IGZ1bmN0aW9uKGZpbHRlcikKKyAgICB7CisgICAgICAgIGZ1
bmN0aW9uIGFzeW5jSW52b2tlKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5fcGF0aEZp
bmRlci51cGRhdGVSb290cyhmaWx0ZXIpOworICAgICAgICB9CisgICAgICAgIHNldFRpbWVvdXQo
YXN5bmNJbnZva2UuYmluZCh0aGlzKSwgMCk7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUGxlYXNlV2FpdE1lc3NhZ2UuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BsZWFzZVdhaXRNZXNzYWdlLmpzCmluZGV4
IGUxOTgwYTAuLmM1ZGRkNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUGxlYXNlV2FpdE1lc3NhZ2UuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9QbGVhc2VXYWl0TWVzc2FnZS5qcwpAQCAtODYsNyArODYsNyBAQCBXZWJJ
bnNwZWN0b3IuUGxlYXNlV2FpdE1lc3NhZ2UucHJvdG90eXBlID0gewogICAgICAgICB2YXIgaW5z
dGFuY2UgPSBXZWJJbnNwZWN0b3IuUGxlYXNlV2FpdE1lc3NhZ2UucHJvdG90eXBlLmluc3RhbmNl
OwogICAgICAgICB2YXIgbWVzc2FnZSA9IGluc3RhbmNlLmVsZW1lbnQ7CiAgICAgICAgIGlmICht
ZXNzYWdlLnBhcmVudE5vZGUgPT09IGVsZW1lbnQpIHsKLSAgICAgICAgICAgIGFjdGlvbkNhbGxi
YWNrKCk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGFjdGlvbkNhbGxiYWNrLCAwKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwppbmRleCAxZWU2N2EwLi5kOWEx
MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2Zp
bGVzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9m
aWxlc1BhbmVsLmpzCkBAIC0yMTEsMTEgKzIxMSw2IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1Bh
bmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmICh2aWV3ICYmICgiZGlzcG9zZSIgaW4g
dmlldykpCiAgICAgICAgICAgICAgICAgdmlldy5kaXNwb3NlKCk7CiAgICAgICAgICAgICBkZWxl
dGUgdGhpcy5fcHJvZmlsZXNbaV0uX3Byb2ZpbGVWaWV3OwotICAgICAgICAgICAgdmFyIHByb2Zp
bGUgPSB0aGlzLl9wcm9maWxlc1tpXTsKLSAgICAgICAgICAgIGlmIChwcm9maWxlLm5vZGVzKSB7
Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHByb2ZpbGUubm9kZXM7Ci0gICAgICAgICAgICAgICAg
ZGVsZXRlIHByb2ZpbGUuc3RyaW5nczsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBkZWxldGUgdGhpcy52aXNpYmxlVmlldzsKIApAQCAtNDUwLDU4ICs0NDUsODQgQEAgV2ViSW5z
cGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIXByb2ZpbGUp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKHByb2ZpbGUuX2xvYWRlZCkKLSAg
ICAgICAgICAgIGNhbGxiYWNrKHByb2ZpbGUpOwotICAgICAgICBlbHNlIGlmIChwcm9maWxlLl9p
c19sb2FkaW5nKQotICAgICAgICAgICAgcHJvZmlsZS5fY2FsbGJhY2tzLnB1c2goY2FsbGJhY2sp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHByb2ZpbGUuX2lzX2xvYWRpbmcgPSB0cnVl
OwotICAgICAgICAgICAgcHJvZmlsZS5fY2FsbGJhY2tzID0gW2NhbGxiYWNrXTsKLSAgICAgICAg
ICAgIHByb2ZpbGUuX2pzb24gPSAiIjsKLSAgICAgICAgICAgIHByb2ZpbGUuc2lkZUJhckVsZW1l
bnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxvYWRpbmfigKYiKTsKLSAgICAg
ICAgICAgIFByb2ZpbGVyQWdlbnQuZ2V0UHJvZmlsZShwcm9maWxlLnR5cGVJZCwgcHJvZmlsZS51
aWQpOworICAgICAgICBpZiAoIVByZWZlcmVuY2VzLmRldGFpbGVkSGVhcFByb2ZpbGVzKSB7Cisg
ICAgICAgICAgICBpZiAocHJvZmlsZS5fbG9hZGVkKQorICAgICAgICAgICAgICAgIGNhbGxiYWNr
KHByb2ZpbGUpOworICAgICAgICAgICAgZWxzZSBpZiAocHJvZmlsZS5faXNfbG9hZGluZykKKyAg
ICAgICAgICAgICAgICBwcm9maWxlLl9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLl9pc19sb2FkaW5nID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBwcm9maWxlLl9jYWxsYmFja3MgPSBbY2FsbGJhY2tdOworICAgICAg
ICAgICAgICAgIHByb2ZpbGUuX2pzb24gPSAiIjsKKyAgICAgICAgICAgICAgICBwcm9maWxlLnNp
ZGVCYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMb2FkaW5nXHUy
MDI2Iik7CisgICAgICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxlKHByb2ZpbGUu
dHlwZUlkLCBwcm9maWxlLnVpZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpZiAoIXByb2ZpbGUucHJveHkpCisgICAgICAgICAgICAgICAgcHJvZmlsZS5w
cm94eSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkoKTsKKyAgICAgICAgICAg
IHZhciBwcm94eSA9IHByb2ZpbGUucHJveHk7CisgICAgICAgICAgICBpZiAocHJveHkuc3RhcnRM
b2FkaW5nKGNhbGxiYWNrKSkgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuc2lkZUJhckVsZW1l
bnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxvYWRpbmdcdTIwMjYiKTsKKyAg
ICAgICAgICAgICAgICBQcm9maWxlckFnZW50LmdldFByb2ZpbGUocHJvZmlsZS50eXBlSWQsIHBy
b2ZpbGUudWlkKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0sCiAKICAgICBfYWRk
SGVhcFNuYXBzaG90Q2h1bms6IGZ1bmN0aW9uKHVpZCwgY2h1bmspCiAgICAgewogICAgICAgICB2
YXIgcHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpXTsKLSAgICAgICAgaWYgKCFw
cm9maWxlIHx8IHByb2ZpbGUuX2xvYWRlZCB8fCAhcHJvZmlsZS5faXNfbG9hZGluZykKKyAgICAg
ICAgaWYgKCFwcm9maWxlKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHByb2ZpbGUu
X2pzb24gKz0gY2h1bms7CisgICAgICAgIGlmICghUHJlZmVyZW5jZXMuZGV0YWlsZWRIZWFwUHJv
ZmlsZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9maWxlLl9sb2FkZWQgfHwgIXByb2ZpbGUuX2lz
X2xvYWRpbmcpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcHJvZmlsZS5f
anNvbiArPSBjaHVuazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghcHJvZmls
ZS5wcm94eSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBwcm9maWxlLnBy
b3h5LnB1c2hKU09OQ2h1bmsoY2h1bmspOworICAgICAgICB9CiAgICAgfSwKIAogICAgIF9maW5p
c2hIZWFwU25hcHNob3Q6IGZ1bmN0aW9uKHVpZCkKICAgICB7CiAgICAgICAgIHZhciBwcm9maWxl
ID0gdGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlzLl9tYWtlS2V5KHVpZCwgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCldOwotICAgICAgICBpZiAoIXByb2ZpbGUgfHwg
cHJvZmlsZS5fbG9hZGVkIHx8ICFwcm9maWxlLl9pc19sb2FkaW5nKQorICAgICAgICBpZiAoIXBy
b2ZpbGUpCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgcHJvZmlsZS5zaWRlQmFyRWxl
bWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUGFyc2luZ+KApiIpOwotICAg
ICAgICB3aW5kb3cuc2V0VGltZW91dChkb1BhcnNlLCAwKTsKLQotICAgICAgICBmdW5jdGlvbiBk
b1BhcnNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGxvYWRlZFNuYXBzaG90ID0gSlNP
Ti5wYXJzZShwcm9maWxlLl9qc29uKTsKLSAgICAgICAgICAgIGRlbGV0ZSBwcm9maWxlLl9qc29u
OwotICAgICAgICAgICAgZGVsZXRlIHByb2ZpbGUuX2lzX2xvYWRpbmc7Ci0gICAgICAgICAgICB2
YXIgY2FsbGJhY2tzID0gcHJvZmlsZS5fY2FsbGJhY2tzOwotICAgICAgICAgICAgZGVsZXRlIHBy
b2ZpbGUuX2NhbGxiYWNrczsKLSAgICAgICAgICAgIHByb2ZpbGUuX2xvYWRlZCA9IHRydWU7Ci0g
ICAgICAgICAgICBwcm9maWxlLnNpZGVCYXJFbGVtZW50LnN1YnRpdGxlID0gIiI7Ci0KLSAgICAg
ICAgICAgIGlmICghUHJlZmVyZW5jZXMuZGV0YWlsZWRIZWFwUHJvZmlsZXMgJiYgV2ViSW5zcGVj
dG9yLkRldGFpbGVkSGVhcHNob3RWaWV3LnByb3RvdHlwZS5pc0RldGFpbGVkU25hcHNob3QobG9h
ZGVkU25hcHNob3QpKSB7Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9m
aWxlcy5fZW5hYmxlRGV0YWlsZWRIZWFwUHJvZmlsZXMoZmFsc2UpOworICAgICAgICBpZiAoIVBy
ZWZlcmVuY2VzLmRldGFpbGVkSGVhcFByb2ZpbGVzKSB7CisgICAgICAgICAgICBpZiAocHJvZmls
ZS5fbG9hZGVkIHx8ICFwcm9maWxlLl9pc19sb2FkaW5nKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByb2ZpbGUuc2lkZUJhckVsZW1lbnQuc3Vi
dGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlBhcnNpbmdcdTIwMjYiKTsKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIGRvUGFyc2UoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZh
ciBsb2FkZWRTbmFwc2hvdCA9IEpTT04ucGFyc2UocHJvZmlsZS5fanNvbik7CisgICAgICAgICAg
ICAgICAgdmFyIGNhbGxiYWNrcyA9IHByb2ZpbGUuX2NhbGxiYWNrczsKKyAgICAgICAgICAgICAg
ICBkZWxldGUgcHJvZmlsZS5fY2FsbGJhY2tzOworICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9m
aWxlLl9qc29uOworICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9maWxlLl9pc19sb2FkaW5nOwor
ICAgICAgICAgICAgICAgIHByb2ZpbGUuX2xvYWRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
cHJvZmlsZS5zaWRlQmFyRWxlbWVudC5zdWJ0aXRsZSA9ICIiOworCisgICAgICAgICAgICAgICAg
aWYgKFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90Vmlldy5wcm90b3R5cGUuaXNEZXRhaWxl
ZFNuYXBzaG90KGxvYWRlZFNuYXBzaG90KSkgeworICAgICAgICAgICAgICAgICAgICBXZWJJbnNw
ZWN0b3IucGFuZWxzLnByb2ZpbGVzLl9lbmFibGVEZXRhaWxlZEhlYXBQcm9maWxlcyhmYWxzZSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICghUHJlZmVyZW5jZXMuZGV0YWlsZWRIZWFwUHJvZmlsZXMpCiAgICAgICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLnByb2Nlc3NMb2Fk
ZWRTbmFwc2hvdChwcm9maWxlLCBsb2FkZWRTbmFwc2hvdCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RWaWV3LnByb3RvdHlw
ZS5wcm9jZXNzTG9hZGVkU25hcHNob3QocHJvZmlsZSwgbG9hZGVkU25hcHNob3QpOwotICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICAgICAgY2FsbGJhY2tzW2ldKHByb2ZpbGUpOworICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgICAgICBj
YWxsYmFja3NbaV0ocHJvZmlsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRUaW1l
b3V0KGRvUGFyc2UsIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFwcm9m
aWxlLnByb3h5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHZhciBwcm94
eSA9IHByb2ZpbGUucHJveHk7CisgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZWQoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHByb2ZpbGUuc2lkZUJhckVsZW1lbnQuc3VidGl0bGUg
PSBOdW1iZXIuYnl0ZXNUb1N0cmluZyhwcm94eS50b3RhbFNpemUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHByb3h5LmZpbmlzaExvYWRpbmcocGFyc2VkKSkKKyAgICAgICAgICAg
ICAgICBwcm9maWxlLnNpZGVCYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJQYXJzaW5nXHUyMDI2Iik7CiAgICAgICAgIH0KICAgICB9LAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKaW5kZXggMDIwYWM0YS4uZjNlOGQw
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQu
cXJjCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpA
QCAtNTAsNiArNTAsNyBAQAogICAgIDxmaWxlPkdvVG9MaW5lRGlhbG9nLmpzPC9maWxlPgogICAg
IDxmaWxlPkhBUkVudHJ5LmpzPC9maWxlPgogICAgIDxmaWxlPkhlYXBTbmFwc2hvdC5qczwvZmls
ZT4KKyAgICA8ZmlsZT5IZWFwU25hcHNob3RQcm94eS5qczwvZmlsZT4KICAgICA8ZmlsZT5IZWFw
U25hcHNob3RWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkhlbHBTY3JlZW4uanM8L2ZpbGU+CiAg
ICAgPGZpbGU+SW1hZ2VWaWV3LmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggMjdiODRlZC4uZThjYjEwZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRt
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1s
CkBAIC0xNDAsNiArMTQwLDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJUb3BEb3duUHJvZmlsZURhdGFHcmlkVHJlZS5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUHJvZmlsZVZpZXcuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkhlYXBTbmFw
c2hvdC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iSGVhcFNuYXBzaG90UHJveHkuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9IkhlYXBTbmFwc2hvdFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRldGFpbGVkSGVhcHNob3RHcmlkTm9k
ZXMuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IkRldGFpbGVkSGVhcHNob3RWaWV3LmpzIj48L3NjcmlwdD4K
</data>
<flag name="review"
          id="81839"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="81840"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
      

    </bug>

</bugzilla>