<?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>59189</bug_id>
          
          <creation_ts>2011-04-22 04:44:30 -0700</creation_ts>
          <short_desc>Web Inspector: [Chromium] Refactor code prior to moving detailed heap snapshots into workers</short_desc>
          <delta_ts>2011-04-22 06:15:51 -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>
          
          <blocked>59094</blocked>
          <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>390709</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-04-22 04:44:30 -0700</bug_when>
    <thetext>The patch in the issue 59094 appears too big. This patch separates refactoring that contained in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390710</commentid>
    <comment_count>1</comment_count>
      <attachid>90691</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-04-22 04:48:37 -0700</bug_when>
    <thetext>Created attachment 90691
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390743</commentid>
    <comment_count>2</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-04-22 06:15:51 -0700</bug_when>
    <thetext>Manually committed http://trac.webkit.org/changeset/84619


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

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Refactor code prior to moving detailed heap snapshots into workers.
        https://bugs.webkit.org/show_bug.cgi?id=59189

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/BinarySearch.js: Added.
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._populate.sorted):
        (WebInspector.HeapSnapshotGridNode.prototype._populate):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.afterSort.afterPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.afterSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._enhanceData):
        (WebInspector.HeapSnapshotInstanceNode.prototype.get isDeletedNode):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.diffCalculated):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.baseIdsReceived):
        (WebInspector.HeapSnapshotDiffNode.prototype.get data):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged.sort):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._performSorting):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingEnter):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingLeave):
        (WebInspector.HeapSnapshotContainmentDataGrid):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype._defaultPopulateCount.100.setDataSource):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived.addNodeIfNonZeroDiff):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotDominatorsDataGrid):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype._defaultPopulateCount.25.setDataSource):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype._performSorting):
        (WebInspector.DetailedHeapshotView.prototype._changeBase.baseProfileLoaded):
        (WebInspector.DetailedHeapshotView.prototype._changeBase):
        (WebInspector.DetailedHeapshotView.prototype._changeView):
        (WebInspector.DetailedHeapshotView.prototype._showStringContentPopup.displayString):
        (WebInspector.DetailedHeapshotView.prototype._showStringContentPopup):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype.pushBaseNodeIds):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.serializeNextItems):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotEdgesProvider.prototype._serialize):
        (WebInspector.HeapSnapshotNodesProvider.prototype._serialize):
        (WebInspector.HeapSnapshotsDiff.prototype.calculate):
        (WebInspector.HeapSnapshotsDiff.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotsDiff.prototype.pushBaseSelfSizes):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createNodesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotProviderProxy):
        (WebInspector.HeapSnapshotProviderProxy.prototype.serializeNextItems):
        (WebInspector.HeapSnapshotProviderProxy.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseSelfSizes):
        * inspector/front-end/PleaseWaitMessage.js:
        (WebInspector.PleaseWaitMessage.prototype.showAndWaitFor):
        (WebInspector.PleaseWaitMessage.prototype.unlistenAndHide):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/utilities.js:

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

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Refactor code prior to moving detailed heap snapshots into workers.
        https://bugs.webkit.org/show_bug.cgi?id=59189

        * inspector/profiler/detailed-heapshots-comparison-sorting.html:
        * inspector/profiler/detailed-heapshots-test.js:
        (initialize_DetailedHeapshotTest):
        (initialize_DetailedHeapshotTest.):
        * inspector/profiler/heap-snapshot-expected.txt:
        * inspector/profiler/heap-snapshot.html:</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90691</attachid>
            <date>2011-04-22 04:48:37 -0700</date>
            <delta_ts>2011-04-22 05:25:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-59189</filename>
            <type>text/plain</type>
            <size>49931</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmMGE2ZjAxLi5hMjM0YjE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDQt
MjIgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hy
b21pdW1dIFJlZmFjdG9yIGNvZGUgcHJpb3IgdG8gbW92aW5nIGRldGFpbGVkIGhlYXAgc25hcHNo
b3RzIGludG8gd29ya2Vycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU5MTg5CisKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvZmlsZXIvZGV0YWlsZWQt
aGVhcHNob3RzLWNvbXBhcmlzb24tc29ydGluZy5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9w
cm9maWxlci9kZXRhaWxlZC1oZWFwc2hvdHMtdGVzdC5qczoKKyAgICAgICAgKGluaXRpYWxpemVf
RGV0YWlsZWRIZWFwc2hvdFRlc3QpOgorICAgICAgICAoaW5pdGlhbGl6ZV9EZXRhaWxlZEhlYXBz
aG90VGVzdC4pOgorICAgICAgICAqIGluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC5o
dG1sOgorCiAyMDExLTA0LTIyICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+
CiAKICAgICAgICAgW1F0XWZhc3QvdXJsL2lkbmEgdGVzdHMgZmFpbApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2RldGFpbGVkLWhlYXBzaG90cy1jb21wYXJpc29u
LXNvcnRpbmcuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9kZXRhaWxlZC1o
ZWFwc2hvdHMtY29tcGFyaXNvbi1zb3J0aW5nLmh0bWwKaW5kZXggMWZjYmE3NC4uYWYwZGQwZCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2RldGFpbGVkLWhlYXBz
aG90cy1jb21wYXJpc29uLXNvcnRpbmcuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
cHJvZmlsZXIvZGV0YWlsZWQtaGVhcHNob3RzLWNvbXBhcmlzb24tc29ydGluZy5odG1sCkBAIC0y
Niw3ICsyNiw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBm
dW5jdGlvbiBzdGVwMSgpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5zd2l0Y2hUb1ZpZXcoIkNvbXBhcmlzb24iLCBuZXh0KTsKKyAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LnN3aXRjaFRvVmlldygiQ29tcGFyaXNvbiIsIHN0ZXAyKTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgdmFyIGNvbHVtbnM7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvcHJvZmlsZXIvZGV0YWlsZWQtaGVhcHNob3RzLXRlc3QuanMgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvZGV0YWlsZWQtaGVhcHNob3RzLXRlc3QuanMKaW5kZXgg
ZDE0MTdjZi4uMWYwYjE4ZmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9m
aWxlci9kZXRhaWxlZC1oZWFwc2hvdHMtdGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvcHJvZmlsZXIvZGV0YWlsZWQtaGVhcHNob3RzLXRlc3QuanMKQEAgLTE2OSw2ICsxNjksNyBA
QCBJbnNwZWN0b3JUZXN0LmNsaWNrQ29sdW1uID0gZnVuY3Rpb24oY29sdW1uLCBjYWxsYmFjaykK
IAogICAgIGZ1bmN0aW9uIHNvcnRpbmdDb21wbGV0ZSgpCiAgICAgeworICAgICAgICBJbnNwZWN0
b3JUZXN0Ll9jdXJyZW50R3JpZCgpLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNvcnRpbmcgY29tcGxl
dGUiLCBzb3J0aW5nQ29tcGxldGUsIHRoaXMpOwogICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2Vy
dEVxdWFscyhjb2x1bW4uaWRlbnRpZmllciwgdGhpcy5fY3VycmVudEdyaWQoKS5zb3J0Q29sdW1u
SWRlbnRpZmllciwgInVuZXhwZWN0ZWQgc29ydGluZyIpOwogICAgICAgICBjb2x1bW4uc29ydCA9
IHRoaXMuX2N1cnJlbnRHcmlkKCkuc29ydE9yZGVyOwogICAgICAgICBmdW5jdGlvbiBjYWxsQ2Fs
bGJhY2soKQpAQCAtMTc3LDcgKzE3OCw3IEBAIEluc3BlY3RvclRlc3QuY2xpY2tDb2x1bW4gPSBm
dW5jdGlvbihjb2x1bW4sIGNhbGxiYWNrKQogICAgICAgICB9CiAgICAgICAgIHNldFRpbWVvdXQo
Y2FsbENhbGxiYWNrLCAwKTsKICAgICB9Ci0gICAgSW5zcGVjdG9yVGVzdC5fcHJlcGFyZUZvclJl
Y3Vyc2l2ZVNvcnQoc29ydGluZ0NvbXBsZXRlLmJpbmQodGhpcykpOworICAgIEluc3BlY3RvclRl
c3QuX2N1cnJlbnRHcmlkKCkuYWRkRXZlbnRMaXN0ZW5lcigic29ydGluZyBjb21wbGV0ZSIsIHNv
cnRpbmdDb21wbGV0ZSwgdGhpcyk7CiAgICAgdGhpcy5fY3VycmVudEdyaWQoKS5fY2xpY2tJbkhl
YWRlckNlbGwoZXZlbnQpOwogfTsKIApAQCAtMjk0LDcgKzI5NSwxMyBAQCBJbnNwZWN0b3JUZXN0
LmV4cGFuZFJvdyA9IGZ1bmN0aW9uKHJvdywgY2FsbGJhY2spCiAgICAgICAgIHNldFRpbWVvdXQo
Y2FsbENhbGxiYWNrLCAwKTsKICAgICB9CiAgICAgcm93LmFkZEV2ZW50TGlzdGVuZXIoInBvcHVs
YXRlIGNvbXBsZXRlIiwgcG9wdWxhdGVDb21wbGV0ZSwgdGhpcyk7Ci0gICAgcm93LmV4cGFuZCgp
OworICAgIChmdW5jdGlvbiBleHBhbmQoKQorICAgIHsKKyAgICAgICAgaWYgKHJvdy5oYXNDaGls
ZHJlbikKKyAgICAgICAgICAgIHJvdy5leHBhbmQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc2V0VGltZW91dChleHBhbmQsIDApOworICAgIH0pKCk7CiB9OwogCiBJbnNwZWN0b3JUZXN0
LmZpbmRBbmRFeHBhbmRHQ1Jvb3RzID0gZnVuY3Rpb24oY2FsbGJhY2spCkBAIC0zNTgsNyArMzY1
LDEzIEBAIEluc3BlY3RvclRlc3Quc3dpdGNoVG9WaWV3ID0gZnVuY3Rpb24odGl0bGUsIGNhbGxi
YWNrKQogICAgICAgICBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBJbnNwZWN0b3JUZXN0Ll9wcmVwYXJlRm9yUmVjdXJzaXZlU29ydChjYWxsYmFj
aywgdmlldy52aWV3c1tpbmRleF0uZ3JpZCk7CisgICAgdmFyIGdyaWQgPSB2aWV3LnZpZXdzW2lu
ZGV4XS5ncmlkOworICAgIGZ1bmN0aW9uIHNvcnRpbmdDb21wbGV0ZSgpCisgICAgeworICAgICAg
ICBncmlkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNvcnRpbmcgY29tcGxldGUiLCBzb3J0aW5nQ29t
cGxldGUsIHRoaXMpOworICAgICAgICBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTsKKyAgICB9Cisg
ICAgdmlldy52aWV3c1tpbmRleF0uZ3JpZC5hZGRFdmVudExpc3RlbmVyKCJzb3J0aW5nIGNvbXBs
ZXRlIiwgc29ydGluZ0NvbXBsZXRlLCB0aGlzKTsKICAgICB2aWV3Ll9jaGFuZ2VWaWV3KHt0YXJn
ZXQ6IHtzZWxlY3RlZEluZGV4OiBpbmRleH19KTsKIH07CiAKQEAgLTM5Miw0NCArNDA1LDE4IEBA
IEluc3BlY3RvclRlc3QuX2N1cnJlbnRHcmlkID0gZnVuY3Rpb24oKQogICAgIHJldHVybiBXZWJJ
bnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLnZpc2libGVWaWV3LmRhdGFHcmlkOwogfTsKIAotSW5z
cGVjdG9yVGVzdC5fcHJlcGFyZUZvclJlY3Vyc2l2ZVNvcnQgPSBmdW5jdGlvbihjYWxsYmFjaywg
Z3JpZCkKLXsKLSAgICBpZiAoSW5zcGVjdG9yVGVzdC5fcmVjdXJzaXZlU29ydENhbGxiYWNrKQot
ICAgICAgICBjb25zb2xlLmVycm9yKCJEaWRuJ3QgZmluaXNoZWQgd2l0aCBwcmV2aW91cyBzb3J0
aW5nIik7Ci0gICAgSW5zcGVjdG9yVGVzdC5fcmVjdXJzaXZlU29ydENhbGxiYWNrID0gY2FsbGJh
Y2s7Ci0gICAgSW5zcGVjdG9yVGVzdC5fcmVjdXJzaXZlU29ydERlcHRoID0gMDsKLSAgICBncmlk
ID0gZ3JpZCB8fCBJbnNwZWN0b3JUZXN0Ll9jdXJyZW50R3JpZCgpOwotICAgIGdyaWQuYWRkRXZl
bnRMaXN0ZW5lcigic3RhcnQgc29ydGluZyIsIEluc3BlY3RvclRlc3QuX3JlY3Vyc2l2ZVNvcnRF
bnRlciwgSW5zcGVjdG9yVGVzdCk7Ci0gICAgZ3JpZC5hZGRFdmVudExpc3RlbmVyKCJzb3J0aW5n
IGNvbXBsZXRlIiwgSW5zcGVjdG9yVGVzdC5fcmVjdXJzaXZlU29ydExlYXZlLCBJbnNwZWN0b3JU
ZXN0KTsKLSAgICBJbnNwZWN0b3JUZXN0Ll9yZWN1cnNpdmVTb3J0R3JpZCA9IGdyaWQ7Ci19Owot
Ci1JbnNwZWN0b3JUZXN0Ll9yZWN1cnNpdmVTb3J0RW50ZXIgPSBmdW5jdGlvbigpCi17Ci0gICAg
KytJbnNwZWN0b3JUZXN0Ll9yZWN1cnNpdmVTb3J0RGVwdGg7Ci0gICAgaWYgKGlzTmFOKEluc3Bl
Y3RvclRlc3QuX3JlY3Vyc2l2ZVNvcnREZXB0aCkpCi0gICAgICAgIGNvbnNvbGUuZXJyb3IoIldh
c24ndCBwcmVwYXJlZCB0byB0cmFjayBzb3J0aW5nIik7Ci19OwotCi1JbnNwZWN0b3JUZXN0Ll9y
ZWN1cnNpdmVTb3J0TGVhdmUgPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKCEtLUluc3BlY3RvclRl
c3QuX3JlY3Vyc2l2ZVNvcnREZXB0aCkgewotICAgICAgICB2YXIgY2FsbGJhY2sgPSBJbnNwZWN0
b3JUZXN0Ll9yZWN1cnNpdmVTb3J0Q2FsbGJhY2s7Ci0gICAgICAgIGRlbGV0ZSBJbnNwZWN0b3JU
ZXN0Ll9yZWN1cnNpdmVTb3J0Q2FsbGJhY2s7Ci0gICAgICAgIEluc3BlY3RvclRlc3QuX3JlY3Vy
c2l2ZVNvcnRHcmlkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInN0YXJ0IHNvcnRpbmciLCBJbnNwZWN0
b3JUZXN0Ll9yZWN1cnNpdmVTb3J0RW50ZXIsIEluc3BlY3RvclRlc3QpOwotICAgICAgICBJbnNw
ZWN0b3JUZXN0Ll9yZWN1cnNpdmVTb3J0R3JpZC5yZW1vdmVFdmVudExpc3RlbmVyKCJzb3J0aW5n
IGNvbXBsZXRlIiwgSW5zcGVjdG9yVGVzdC5fcmVjdXJzaXZlU29ydExlYXZlLCBJbnNwZWN0b3JU
ZXN0KTsKLSAgICAgICAgc2V0VGltZW91dChjYWxsYmFjaywgMCk7Ci0gICAgfQotICAgIGlmICgh
KEluc3BlY3RvclRlc3QuX3JlY3Vyc2l2ZVNvcnREZXB0aCA+PSAwKSkKLSAgICAgICAgY29uc29s
ZS5lcnJvcigiQmFkIHNvcnQgbmVzdGluZyIpOwotfTsKLQogSW5zcGVjdG9yVGVzdC5fc25hcHNo
b3RWaWV3U2hvd24gPSBmdW5jdGlvbigpCiB7CiAgICAgaWYgKEluc3BlY3RvclRlc3QuX3Rha2VB
bmRPcGVuU25hcHNob3RDYWxsYmFjaykgewogICAgICAgICB2YXIgY2FsbGJhY2sgPSBJbnNwZWN0
b3JUZXN0Ll90YWtlQW5kT3BlblNuYXBzaG90Q2FsbGJhY2s7CiAgICAgICAgIEluc3BlY3RvclRl
c3QuX3Rha2VBbmRPcGVuU25hcHNob3RDYWxsYmFjayA9IG51bGw7Ci0gICAgICAgIGNhbGxiYWNr
KCk7CisgICAgICAgIHZhciBkYXRhR3JpZCA9IHRoaXMuZGF0YUdyaWQ7CisgICAgICAgIGZ1bmN0
aW9uIHNvcnRpbmdDb21wbGV0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGFHcmlkLnJl
bW92ZUV2ZW50TGlzdGVuZXIoInNvcnRpbmcgY29tcGxldGUiLCBzb3J0aW5nQ29tcGxldGUsIG51
bGwpOworICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhR3Jp
ZC5hZGRFdmVudExpc3RlbmVyKCJzb3J0aW5nIGNvbXBsZXRlIiwgc29ydGluZ0NvbXBsZXRlLCBu
dWxsKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJv
ZmlsZXIvaGVhcC1zbmFwc2hvdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
cHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1leHBlY3RlZC50eHQKaW5kZXggMjI0MWUxMy4uNzhlMjdl
MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNo
b3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFw
LXNuYXBzaG90LWV4cGVjdGVkLnR4dApAQCAtMTMsOCArMTMsNiBAQCBSdW5uaW5nOiBoZWFwU25h
cHNob3ROb2RlQW5kRWRnZVRlc3QKIAogUnVubmluZzogaGVhcFNuYXBzaG90U2ltcGxlVGVzdAog
Ci1SdW5uaW5nOiBoZWFwU25hcHNob3RJZHNUZXN0Ci0KIFJ1bm5pbmc6IGhlYXBTbmFwc2hvdFJl
dGFpbmVyc1Rlc3QKIAogUnVubmluZzogaGVhcFNuYXBzaG90QWdncmVnYXRlc1Rlc3QKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90Lmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC5odG1sCmluZGV4
IDFjMDRmNjIuLmEyZDQ1NDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9m
aWxlci9oZWFwLXNuYXBzaG90Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2Zp
bGVyL2hlYXAtc25hcHNob3QuaHRtbApAQCAtOTUsMTcgKzk1LDYgQEAgZnVuY3Rpb24gdGVzdCgp
CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgZnVuY3Rpb24gaGVh
cFNuYXBzaG90SWRzVGVzdChuZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgc25hcHNo
b3QgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdChJbnNwZWN0b3JUZXN0LmNyZWF0ZUhl
YXBTbmFwc2hvdE1vY2soKSk7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFs
cyhmYWxzZSwgc25hcHNob3QuaGFzSWQoMCksICJoYXMgaWQgMCIpOwotICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDE7IGkgPD0gNjsgKytpKQotICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0RXF1YWxzKHRydWUsIHNuYXBzaG90Lmhhc0lkKGkpLCAiaGFzIGlkICIgKyBpKTsKLSAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKGZhbHNlLCBzbmFwc2hvdC5oYXNJ
ZCg3KSwgImhhcyBpZCA3Iik7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFs
cyhmYWxzZSwgc25hcHNob3QuaGFzSWQoMTAwKSwgImhhcyBpZCAxMDAiKTsKLSAgICAgICAgICAg
IG5leHQoKTsKLSAgICAgICAgfSwKLQogICAgICAgICBmdW5jdGlvbiBoZWFwU25hcHNob3RSZXRh
aW5lcnNUZXN0KG5leHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBzbmFwc2hvdCA9IG5l
dyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90KEluc3BlY3RvclRlc3QuY3JlYXRlSGVhcFNuYXBz
aG90TW9jaygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZTU3OGQ1Li41MDRlOThmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMTEtMDQtMjIgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hyb21pdW1dIFJlZmFjdG9yIGNvZGUgcHJpb3IgdG8gbW92
aW5nIGRldGFpbGVkIGhlYXAgc25hcHNob3RzIGludG8gd29ya2Vycy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MTg5CisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CaW5hcnlTZWFyY2guanM6IEFkZGVkLgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdEdyaWROb2Rlcy5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUuX3BvcHVs
YXRlLnNvcnRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUu
cHJvdG90eXBlLl9wb3B1bGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
R3JpZE5vZGUucHJvdG90eXBlLnBvcHVsYXRlQ2hpbGRyZW4pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5zb3J0LmFmdGVyU29ydC5hZnRlclBv
cHVsYXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90
b3R5cGUuc29ydC5hZnRlclNvcnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dEdyaWROb2RlLnByb3RvdHlwZS5zb3J0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RPYmplY3ROb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RPYmpl
Y3ROb2RlLnByb3RvdHlwZS5fY3JlYXRlQ2hpbGROb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RJbnN0YW5jZU5vZGUucHJvdG90eXBlLl9jcmVhdGVDaGlsZE5vZGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEluc3RhbmNlTm9kZS5wcm90b3R5cGUu
X2VuaGFuY2VEYXRhKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RJbnN0YW5j
ZU5vZGUucHJvdG90eXBlLmdldCBpc0RlbGV0ZWROb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3REaWZmTm9kZS5wcm90b3R5cGUuY2FsY3VsYXRlRGlmZi5kaWZmQ2FsY3Vs
YXRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZk5vZGUucHJvdG90
eXBlLmNhbGN1bGF0ZURpZmYuYmFzZUlkc1JlY2VpdmVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3REaWZmTm9kZS5wcm90b3R5cGUuZ2V0IGRhdGEpOgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5wcm90b3R5cGUuc29ydGluZ0No
YW5nZWQuc29ydCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVE
YXRhR3JpZC5wcm90b3R5cGUuc29ydGluZ0NoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQucHJvdG90eXBlLl9wZXJmb3JtU29ydGluZyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5wcm90
b3R5cGUucmVjdXJzaXZlU29ydGluZ0VudGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RTb3J0YWJsZURhdGFHcmlkLnByb3RvdHlwZS5yZWN1cnNpdmVTb3J0aW5nTGVhdmUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnRhaW5tZW50RGF0YUdyaWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnRhaW5tZW50RGF0YUdyaWQu
cHJvdG90eXBlLl9kZWZhdWx0UG9wdWxhdGVDb3VudC4xMDAuc2V0RGF0YVNvdXJjZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29udGFpbm1lbnREYXRhR3JpZC5wcm90b3R5
cGUuc29ydGluZ0NoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERp
ZmZEYXRhR3JpZC5wcm90b3R5cGUuc2V0QmFzZURhdGFTb3VyY2UpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdERpZmZEYXRhR3JpZC5wcm90b3R5cGUucG9wdWxhdGVDaGlsZHJl
bi5iYXNlQWdncmVnYXRlc1JlY2VpdmVkLmFnZ3JlZ2F0ZXNSZWNlaXZlZC5hZGROb2RlSWZOb25a
ZXJvRGlmZik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZkRhdGFHcmlk
LnByb3RvdHlwZS5wb3B1bGF0ZUNoaWxkcmVuLmJhc2VBZ2dyZWdhdGVzUmVjZWl2ZWQuYWdncmVn
YXRlc1JlY2VpdmVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmRGF0
YUdyaWQucHJvdG90eXBlLnBvcHVsYXRlQ2hpbGRyZW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdERvbWluYXRvcnNEYXRhR3JpZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90RG9taW5hdG9yc0RhdGFHcmlkLnByb3RvdHlwZS5fZGVmYXVsdFBvcHVsYXRl
Q291bnQuMjUuc2V0RGF0YVNvdXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RG9taW5hdG9yc0RhdGFHcmlkLnByb3RvdHlwZS5zb3J0aW5nQ2hhbmdlZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluaW5nUGF0aHNMaXN0LnByb3RvdHlwZS5f
cGVyZm9ybVNvcnRpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RW
aWV3LnByb3RvdHlwZS5fY2hhbmdlQmFzZS5iYXNlUHJvZmlsZUxvYWRlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlLl9jaGFuZ2VCYXNlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90Vmlldy5wcm90b3R5cGUuX2No
YW5nZVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RWaWV3LnBy
b3RvdHlwZS5fc2hvd1N0cmluZ0NvbnRlbnRQb3B1cC5kaXNwbGF5U3RyaW5nKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90Vmlldy5wcm90b3R5cGUuX3Nob3dTdHJpbmdD
b250ZW50UG9wdXApOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90
LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuZGlzcG9z
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5wdXNoQmFz
ZU5vZGVJZHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZpbHRlcmVkT3Jk
ZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5zZXJpYWxpemVOZXh0SXRlbXMpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5z
b3J0QW5kUmV3aW5kKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc1By
b3ZpZGVyLnByb3RvdHlwZS5fc2VyaWFsaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3ROb2Rlc1Byb3ZpZGVyLnByb3RvdHlwZS5fc2VyaWFsaXplKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RzRGlmZi5wcm90b3R5cGUuY2FsY3VsYXRlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RzRGlmZi5wcm90b3R5cGUucHVzaEJhc2VJZHMp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdHNEaWZmLnByb3RvdHlwZS5wdXNo
QmFzZVNlbGZTaXplcyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNo
b3RQcm94eS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eS5wcm90
b3R5cGUuY3JlYXRlRWRnZXNQcm92aWRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90UHJveHkucHJvdG90eXBlLmNyZWF0ZU5vZGVzUHJvdmlkZXIpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5LnByb3RvdHlwZS5wdXNoQmFzZUlkcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlkZXJQcm94eSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvdmlkZXJQcm94eS5wcm90b3R5cGUuc2VyaWFsaXpl
TmV4dEl0ZW1zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm92aWRlclBy
b3h5LnByb3RvdHlwZS5zb3J0QW5kUmV3aW5kKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RzRGlmZlByb3h5LnByb3RvdHlwZS5wdXNoQmFzZUlkcyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90c0RpZmZQcm94eS5wcm90b3R5cGUucHVzaEJhc2VTZWxmU2l6
ZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUGxlYXNlV2FpdE1lc3NhZ2UuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUGxlYXNlV2FpdE1lc3NhZ2UucHJvdG90eXBlLnNob3dB
bmRXYWl0Rm9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90
b3R5cGUudW5saXN0ZW5BbmRIaWRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dl
YktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qczoKKwogMjAxMS0wNC0y
MiAgQW5uaWUgU3VsbGl2YW4gIDxzdWxsaXZhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA5NWJmMDQwLi43MGI1
ZDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC02MTg1LDYgKzYxODUsNyBAQAogICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSZXN1bHRWaWV3LmpzJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9mcm9udC1lbmQvQXVkaXRzUGFuZWwuanMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvQmluYXJ5U2VhcmNoLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L0JvdHRvbVVwUHJvZmlsZURhdGFHcmlkVHJlZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggYTAwOWVmZi4uOWY1YzI0YyAx
MDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTY3
MjE3LDYgKzY3MjE3LDEwIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEJpbmFyeVNlYXJjaC5qcyIKKwkJ
CQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3Bl
Y3Rvclxmcm9udC1lbmRcQm90dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVlLmpzIgogCQkJCQk+CiAJ
CQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9CaW5hcnlTZWFyY2guanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Jp
bmFyeVNlYXJjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGVkYTFl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9C
aW5hcnlTZWFyY2guanMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitmdW5jdGlvbiBiaW5hcnlTZWFyY2gob2JqZWN0
LCBhcnJheSwgY29tcGFyYXRvcikKK3sKKyAgICB2YXIgZmlyc3QgPSAwOworICAgIHZhciBsYXN0
ID0gYXJyYXkubGVuZ3RoIC0gMTsKKworICAgIHdoaWxlIChmaXJzdCA8PSBsYXN0KSB7CisgICAg
ICAgIHZhciBtaWQgPSAoZmlyc3QgKyBsYXN0KSA+PiAxOworICAgICAgICB2YXIgYyA9IGNvbXBh
cmF0b3Iob2JqZWN0LCBhcnJheVttaWRdKTsKKyAgICAgICAgaWYgKGMgPiAwKQorICAgICAgICAg
ICAgZmlyc3QgPSBtaWQgKyAxOworICAgICAgICBlbHNlIGlmIChjIDwgMCkKKyAgICAgICAgICAg
IGxhc3QgPSBtaWQgLSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbWlkOwor
ICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgbmVhcmVzdCBsZXNzZXIgaW5kZXgsICItMSIgbWVh
bnMgIjAsICItMiIgbWVhbnMgIjEiLCBldGMuCisgICAgcmV0dXJuIC0oZmlyc3QgKyAxKTsKK30K
KworT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgImJpbmFyeUluZGV4T2Yi
LCB7IHZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgY29tcGFyYXRvcikKK3sKKyAgICB2YXIgcmVzdWx0
ID0gYmluYXJ5U2VhcmNoKHZhbHVlLCB0aGlzLCBjb21wYXJhdG9yKTsKKyAgICByZXR1cm4gcmVz
dWx0ID49IDAgPyByZXN1bHQgOiAtMTsKK319KTsKKworZnVuY3Rpb24gaW5zZXJ0aW9uSW5kZXhG
b3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKGFuT2JqZWN0LCBhTGlzdCwgYUZ1bmN0aW9u
KQoreworICAgIHZhciBpbmRleCA9IGJpbmFyeVNlYXJjaChhbk9iamVjdCwgYUxpc3QsIGFGdW5j
dGlvbik7CisgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgLy8gU2VlIGJpbmFyeVNlYXJjaCBp
bXBsZW1lbnRhdGlvbi4KKyAgICAgICAgcmV0dXJuIC1pbmRleCAtIDE7CisgICAgZWxzZSB7Cisg
ICAgICAgIC8vIFJldHVybiB0aGUgZmlyc3Qgb2NjdXJhbmNlIG9mIGFuIGl0ZW0gaW4gdGhlIGxp
c3QuCisgICAgICAgIHdoaWxlIChpbmRleCA+IDAgJiYgYUZ1bmN0aW9uKGFuT2JqZWN0LCBhTGlz
dFtpbmRleCAtIDFdKSA9PT0gMCkKKyAgICAgICAgICAgIGluZGV4LS07CisgICAgICAgIHJldHVy
biBpbmRleDsgICAgICAgIAorICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdEdyaWROb2Rlcy5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdEdyaWROb2Rlcy5qcwpp
bmRleCBlNzA2ZTFkLi43ZTI5MzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RHcmlkTm9kZXMuanMKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpzCkBA
IC00NywxNyArNDcsMTMgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3Rv
dHlwZSA9IHsKIAogICAgIF9wb3B1bGF0ZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAg
ICBXZWJJbnNwZWN0b3IuUGxlYXNlV2FpdE1lc3NhZ2UucHJvdG90eXBlLnN0YXJ0QWN0aW9uKHRo
aXMuZGF0YUdyaWQuZWxlbWVudCwgZG9Qb3B1bGF0ZS5iaW5kKHRoaXMpKTsKLQotICAgICAgICBm
dW5jdGlvbiBkb1BvcHVsYXRlKCkKKyAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJw
b3B1bGF0ZSIsIHRoaXMuX3BvcHVsYXRlLCB0aGlzKTsKKyAgICAgICAgZnVuY3Rpb24gc29ydGVk
KGlnbm9yZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5l
cigicG9wdWxhdGUiLCB0aGlzLl9wb3B1bGF0ZSwgdGhpcyk7Ci0gICAgICAgICAgICBmdW5jdGlv
biBzb3J0ZWQoaWdub3JlZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aGlzLnBv
cHVsYXRlQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuX3Byb3Zp
ZGVyLnNvcnRBbmRSZXdpbmQodGhpcy5jb21wYXJhdG9yKCksIHNvcnRlZC5iaW5kKHRoaXMpKTsK
KyAgICAgICAgICAgIHRoaXMucG9wdWxhdGVDaGlsZHJlbigpOwogICAgICAgICB9CisgICAgICAg
IFdlYkluc3BlY3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUuc2hvd0FuZFdhaXRGb3Io
dGhpcy5kYXRhR3JpZC5lbGVtZW50LCB0aGlzLCAicG9wdWxhdGUgY29tcGxldGUiKTsKKyAgICAg
ICAgdGhpcy5fcHJvdmlkZXIuc29ydEFuZFJld2luZCh0aGlzLmNvbXBhcmF0b3IoKSwgc29ydGVk
LmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBwb3B1bGF0ZUNoaWxkcmVuOiBmdW5jdGlvbihw
cm92aWRlciwgaG93TWFueSwgYXRJbmRleCwgYWZ0ZXJQb3B1bGF0ZSwgc3VwcHJlc3NOb3RpZnlB
Ym91dENvbXBsZXRpb24pCkBAIC04MCw4ICs3NiwxMCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90R3JpZE5vZGUucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBmdW5jdGlvbiBjaGlsZHJlblJldHJpZXZlZChpdGVtcywgaGFzTmV4dCwg
bGVuZ3RoKQorICAgICAgICBmdW5jdGlvbiBjaGlsZHJlblJldHJpZXZlZChpdGVtcykKICAgICAg
ICAgeworICAgICAgICAgICAgdmFyIGhhc05leHQgPSBpdGVtcy5oYXNOZXh0OworICAgICAgICAg
ICAgdmFyIGxlbmd0aCA9IGl0ZW1zLnRvdGFsTGVuZ3RoOwogICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyArK2kpIHsKICAgICAgICAgICAgICAgICB2
YXIgaXRlbSA9IGl0ZW1zW2ldOwogICAgICAgICAgICAgICAgIGlmIChoYXZlU2F2ZWRDaGlsZHJl
bikgewpAQCAtMTA3LDcgKzEwNSw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9k
ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgc2V0VGltZW91dChub3RpZnkuYmluZCh0
aGlzKSwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcHJvdmlkZXIuZ2V0
TmV4dEl0ZW1zKGhvd01hbnksIGNoaWxkcmVuUmV0cmlldmVkLmJpbmQodGhpcykpOworICAgICAg
ICBwcm92aWRlci5zZXJpYWxpemVOZXh0SXRlbXMoaG93TWFueSwgY2hpbGRyZW5SZXRyaWV2ZWQu
YmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIF9zYXZlQ2hpbGRyZW46IGZ1bmN0aW9uKCkKQEAg
LTEyMiwzMCArMTIwLDI5IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90
b3R5cGUgPSB7CiAKICAgICBzb3J0OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBmdW5jdGlv
biBkb1NvcnQoKQorICAgICAgICBXZWJJbnNwZWN0b3IuUGxlYXNlV2FpdE1lc3NhZ2UucHJvdG90
eXBlLnNob3dBbmRXYWl0Rm9yKHRoaXMuZGF0YUdyaWQuZWxlbWVudCwgdGhpcy5kYXRhR3JpZCwg
InNvcnRpbmcgY29tcGxldGUiKTsKKyAgICAgICAgdGhpcy5kYXRhR3JpZC5yZWN1cnNpdmVTb3J0
aW5nRW50ZXIoKTsKKyAgICAgICAgZnVuY3Rpb24gYWZ0ZXJTb3J0KHNvcnRlZCkKICAgICAgICAg
ewotICAgICAgICAgICAgZnVuY3Rpb24gYWZ0ZXJTb3J0KHNvcnRlZCkKKyAgICAgICAgICAgIGlm
ICghc29ydGVkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5kYXRhR3JpZC5yZWN1cnNpdmVTb3J0
aW5nTGVhdmUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB0aGlzLl9zYXZlQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hp
bGRyZW4oKTsKKyAKKyAgICAgICAgICAgIGZ1bmN0aW9uIGFmdGVyUG9wdWxhdGUoKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmICghc29ydGVkKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2F2ZUNoaWxkcmVuKCk7Ci0gICAgICAg
ICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOwotICAgICAKLSAgICAgICAgICAgICAgICBm
dW5jdGlvbiBhZnRlclBvcHVsYXRlKCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5b
aV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZXhwYW5kZWQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc29ydCgpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUdyaWQuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKCJzb3J0aW5nIGNvbXBsZXRlIik7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAs
IGwgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldOworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQuZXhwYW5kZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zb3J0KCk7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVDaGlsZHJl
bih0aGlzLl9wcm92aWRlciwgbnVsbCwgbnVsbCwgYWZ0ZXJQb3B1bGF0ZS5iaW5kKHRoaXMpKTsK
KyAgICAgICAgICAgICAgICB0aGlzLmRhdGFHcmlkLnJlY3Vyc2l2ZVNvcnRpbmdMZWF2ZSgpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5fcHJvdmlkZXIuc29ydEFuZFJld2luZCh0
aGlzLmNvbXBhcmF0b3IoKSwgYWZ0ZXJTb3J0LmJpbmQodGhpcykpOworICAgICAgICAgICAgdGhp
cy5wb3B1bGF0ZUNoaWxkcmVuKHRoaXMuX3Byb3ZpZGVyLCBudWxsLCBudWxsLCBhZnRlclBvcHVs
YXRlLmJpbmQodGhpcykpOwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuZGF0YUdyaWQuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKCJzdGFydCBzb3J0aW5nIik7Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUuc3RhcnRBY3Rpb24odGhpcy5kYXRhR3JpZC5l
bGVtZW50LCBkb1NvcnQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX3Byb3ZpZGVyLnNvcnRB
bmRSZXdpbmQodGhpcy5jb21wYXJhdG9yKCksIGFmdGVyU29ydC5iaW5kKHRoaXMpKTsKICAgICB9
CiB9OwogCkBAIC0yNTcsMTkgKzI1NCwyMCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2Vu
ZXJpY09iamVjdE5vZGUucHJvdG90eXBlID0gewogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
R2VuZXJpY09iamVjdE5vZGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGU7CiAKLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RP
YmplY3ROb2RlID0gZnVuY3Rpb24odHJlZSwgZWRnZSkKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RPYmplY3ROb2RlID0gZnVuY3Rpb24odHJlZSwgaXNGcm9tQmFzZVNuYXBzaG90LCBlZGdlKQog
ewogICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5jYWxsKHRo
aXMsIHRyZWUsIGVkZ2Uubm9kZSk7CiAgICAgdGhpcy5fcmVmZXJlbmNlTmFtZSA9IGVkZ2UubmFt
ZTsKICAgICB0aGlzLl9yZWZlcmVuY2VUeXBlID0gZWRnZS50eXBlOwotICAgIHRoaXMuX3Byb3Zp
ZGVyID0gdGhpcy5fY3JlYXRlUHJvdmlkZXIodHJlZS5zbmFwc2hvdCwgZWRnZS5ub2RlSW5kZXgp
OworICAgIHRoaXMuX2lzRnJvbUJhc2VTbmFwc2hvdCA9IGlzRnJvbUJhc2VTbmFwc2hvdDsKKyAg
ICB0aGlzLl9wcm92aWRlciA9IHRoaXMuX2NyZWF0ZVByb3ZpZGVyKCFpc0Zyb21CYXNlU25hcHNo
b3QgPyB0cmVlLnNuYXBzaG90IDogdHJlZS5iYXNlU25hcHNob3QsIGVkZ2Uubm9kZUluZGV4KTsK
ICAgICB0aGlzLl91cGRhdGVIYXNDaGlsZHJlbigpOwogfQogCiBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90T2JqZWN0Tm9kZS5wcm90b3R5cGUgPSB7CiAgICAgX2NyZWF0ZUNoaWxkTm9kZTogZnVu
Y3Rpb24oaXRlbSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdE9iamVjdE5vZGUodGhpcy5kYXRhR3JpZCwgaXRlbSk7CisgICAgICAgIHJldHVybiBu
ZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE9iamVjdE5vZGUodGhpcy5kYXRhR3JpZCwgdGhp
cy5faXNGcm9tQmFzZVNuYXBzaG90LCBpdGVtKTsKICAgICB9LAogCiAgICAgX2NyZWF0ZVByb3Zp
ZGVyOiBmdW5jdGlvbihzbmFwc2hvdCwgbm9kZUluZGV4KQpAQCAtMzU2LDcgKzM1NCw3IEBAIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RJbnN0YW5jZU5vZGUgPSBmdW5jdGlvbih0cmVlLCBiYXNl
U25hcHNob3QsIHNuYXBzaG90LCBuCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90SW5zdGFuY2VO
b2RlLnByb3RvdHlwZSA9IHsKICAgICBfY3JlYXRlQ2hpbGROb2RlOiBmdW5jdGlvbihpdGVtKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90T2JqZWN0
Tm9kZSh0aGlzLmRhdGFHcmlkLCBpdGVtKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90T2JqZWN0Tm9kZSh0aGlzLmRhdGFHcmlkLCB0aGlzLl9pc0RlbGV0ZWRO
b2RlLCBpdGVtKTsKICAgICB9LAogCiAgICAgX2NyZWF0ZVByb3ZpZGVyOiBmdW5jdGlvbihzbmFw
c2hvdCwgbm9kZUluZGV4KQpAQCAtNDE0LDYgKzQxMiwxMSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90SW5zdGFuY2VOb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGRhdGFbInJlbW92
ZWRTaXplIl0gPSAiIjsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZGF0YTsKKyAgICB9LAor
CisgICAgZ2V0IGlzRGVsZXRlZE5vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lz
RGVsZXRlZE5vZGU7CiAgICAgfQogfQogCkBAIC01MjgsMTAgKzUzMSwxNSBAQCBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90RGlmZk5vZGUucHJvdG90eXBlID0gewogICAgICAgICAKICAgICAgICAg
ZnVuY3Rpb24gZGlmZkNhbGN1bGF0ZWQoZGlmZlJlc3VsdCkKICAgICAgICAgewotICAgICAgICAg
ICAgdGhpcy5fZGlmZiA9IGRpZmZSZXN1bHQ7CisgICAgICAgICAgICB0aGlzLl9hZGRlZENvdW50
ID0gZGlmZlJlc3VsdC5hZGRlZENvdW50OworICAgICAgICAgICAgdGhpcy5fcmVtb3ZlZENvdW50
ID0gZGlmZlJlc3VsdC5yZW1vdmVkQ291bnQ7CisgICAgICAgICAgICB0aGlzLl9jb3VudERlbHRh
ID0gZGlmZlJlc3VsdC5jb3VudERlbHRhOworICAgICAgICAgICAgdGhpcy5fYWRkZWRTaXplID0g
ZGlmZlJlc3VsdC5hZGRlZFNpemU7CisgICAgICAgICAgICB0aGlzLl9yZW1vdmVkU2l6ZSA9IGRp
ZmZSZXN1bHQucmVtb3ZlZFNpemU7CisgICAgICAgICAgICB0aGlzLl9zaXplRGVsdGEgPSBkaWZm
UmVzdWx0LnNpemVEZWx0YTsKICAgICAgICAgICAgIHRoaXMuX2Jhc2VJbmRleGVzID0gbnVsbDsK
ICAgICAgICAgICAgIHRoaXMuX2luZGV4ZXMgPSBudWxsOwotICAgICAgICAgICAgY2FsbGJhY2so
dGhpcy5fZGlmZi5hZGRlZFNpemUgPT09IDAgJiYgdGhpcy5fZGlmZi5yZW1vdmVkU2l6ZSA9PT0g
MCk7CisgICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9hZGRlZFNpemUgPT09IDAgJiYgdGhpcy5f
cmVtb3ZlZFNpemUgPT09IDApOwogICAgICAgICB9CiAgICAgICAgIGZ1bmN0aW9uIGJhc2VTZWxm
U2l6ZXNSZWNlaXZlZChiYXNlU2VsZlNpemVzKQogICAgICAgICB7CkBAIC01NDAsNyArNTQ4LDcg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZOb2RlLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgfQogICAgICAgICBmdW5jdGlvbiBiYXNlSWRzUmVjZWl2ZWQoYmFzZUlkcykKICAgICAgICAg
ewotICAgICAgICAgICAgZGlmZi5wdXNoQmFzZUlkcyhkYXRhR3JpZC5iYXNlU25hcHNob3QudWlk
LCBiYXNlSWRzKTsKKyAgICAgICAgICAgIGRpZmYucHVzaEJhc2VJZHMoYmFzZUlkcyk7CiAgICAg
ICAgICAgICBkYXRhR3JpZC5zbmFwc2hvdC5wdXNoQmFzZUlkcyhkYXRhR3JpZC5iYXNlU25hcHNo
b3QudWlkLCB0aGlzLl9uYW1lLCBiYXNlSWRzKTsKICAgICAgICAgICAgIGRhdGFHcmlkLmJhc2VT
bmFwc2hvdC5ub2RlRmllbGRWYWx1ZXNCeUluZGV4KCJzZWxmU2l6ZSIsIHRoaXMuX2Jhc2VJbmRl
eGVzLCBiYXNlU2VsZlNpemVzUmVjZWl2ZWQuYmluZCh0aGlzKSk7CiAgICAgICAgIH0KQEAgLTYz
OCwxNCArNjQ2LDEyIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmTm9kZS5wcm90b3R5
cGUgPSB7CiAgICAgewogICAgICAgICB2YXIgZGF0YSA9IHtvYmplY3Q6IHRoaXMuX25hbWV9Owog
Ci0gICAgICAgIGRhdGFbImFkZGVkQ291bnQiXSA9IHRoaXMuX2RpZmYuYWRkZWRDb3VudDsKLSAg
ICAgICAgZGF0YVsicmVtb3ZlZENvdW50Il0gPSB0aGlzLl9kaWZmLnJlbW92ZWRDb3VudDsKLSAg
ICAgICAgdmFyIGNvdW50RGVsdGEgPSB0aGlzLl9kaWZmLmNvdW50RGVsdGE7Ci0gICAgICAgIGRh
dGFbImNvdW50RGVsdGEiXSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJXMlZCIsIHRoaXMuX3Np
Z25Gb3JEZWx0YShjb3VudERlbHRhKSwgTWF0aC5hYnMoY291bnREZWx0YSkpOwotICAgICAgICBk
YXRhWyJhZGRlZFNpemUiXSA9IE51bWJlci5ieXRlc1RvU3RyaW5nKHRoaXMuX2RpZmYuYWRkZWRT
aXplKTsKLSAgICAgICAgZGF0YVsicmVtb3ZlZFNpemUiXSA9IE51bWJlci5ieXRlc1RvU3RyaW5n
KHRoaXMuX2RpZmYucmVtb3ZlZFNpemUpOwotICAgICAgICB2YXIgc2l6ZURlbHRhID0gdGhpcy5f
ZGlmZi5zaXplRGVsdGE7Ci0gICAgICAgIGRhdGFbInNpemVEZWx0YSJdID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCIlcyVzIiwgdGhpcy5fc2lnbkZvckRlbHRhKHNpemVEZWx0YSksIE51bWJlci5i
eXRlc1RvU3RyaW5nKE1hdGguYWJzKHNpemVEZWx0YSkpKTsKKyAgICAgICAgZGF0YVsiYWRkZWRD
b3VudCJdID0gdGhpcy5fYWRkZWRDb3VudDsKKyAgICAgICAgZGF0YVsicmVtb3ZlZENvdW50Il0g
PSB0aGlzLl9yZW1vdmVkQ291bnQ7CisgICAgICAgIGRhdGFbImNvdW50RGVsdGEiXSA9IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiJXMlZCIsIHRoaXMuX3NpZ25Gb3JEZWx0YSh0aGlzLl9jb3VudERl
bHRhKSwgTWF0aC5hYnModGhpcy5fY291bnREZWx0YSkpOworICAgICAgICBkYXRhWyJhZGRlZFNp
emUiXSA9IE51bWJlci5ieXRlc1RvU3RyaW5nKHRoaXMuX2FkZGVkU2l6ZSk7CisgICAgICAgIGRh
dGFbInJlbW92ZWRTaXplIl0gPSBOdW1iZXIuYnl0ZXNUb1N0cmluZyh0aGlzLl9yZW1vdmVkU2l6
ZSk7CisgICAgICAgIGRhdGFbInNpemVEZWx0YSJdID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIl
cyVzIiwgdGhpcy5fc2lnbkZvckRlbHRhKHRoaXMuX3NpemVEZWx0YSksIE51bWJlci5ieXRlc1Rv
U3RyaW5nKE1hdGguYWJzKHRoaXMuX3NpemVEZWx0YSkpKTsKIAogICAgICAgICByZXR1cm4gZGF0
YTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RldGFpbGVkSGVhcHNob3RWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9EZXRhaWxlZEhlYXBzaG90Vmlldy5qcwppbmRleCAxZTQ2YjUxLi43YzA0NjZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNo
b3RWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWls
ZWRIZWFwc2hvdFZpZXcuanMKQEAgLTI4LDMzICsyOCw2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb250YWlubWVudERhdGFHcmlkID0gZnVuY3Rp
b24oKQotewotICAgIHZhciBjb2x1bW5zID0gewotICAgICAgICBvYmplY3Q6IHsgdGl0bGU6IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiT2JqZWN0IiksIGRpc2Nsb3N1cmU6IHRydWUsIHNvcnRhYmxl
OiB0cnVlLCBzb3J0OiAiYXNjZW5kaW5nIiB9LAotICAgICAgICBzaGFsbG93U2l6ZTogeyB0aXRs
ZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaGFsbG93IFNpemUiKSwgd2lkdGg6ICI5MHB4Iiwg
c29ydGFibGU6IHRydWUgfSwKLSAgICAgICAgcmV0YWluZWRTaXplOiB7IHRpdGxlOiBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlJldGFpbmVkIFNpemUiKSwgd2lkdGg6ICI5MHB4Iiwgc29ydGFibGU6
IHRydWUgfQotICAgIH07Ci0gICAgV2ViSW5zcGVjdG9yLkRhdGFHcmlkLmNhbGwodGhpcywgY29s
dW1ucyk7Ci0gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCJzb3J0aW5nIGNoYW5nZWQiLCB0aGlz
LnNvcnQsIHRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29udGFpbm1lbnRE
YXRhR3JpZC5wcm90b3R5cGUgPSB7Ci0gICAgX2RlZmF1bHRQb3B1bGF0ZUNvdW50OiAxMDAsCi0K
LSAgICBzZXREYXRhU291cmNlOiBmdW5jdGlvbihzbmFwc2hvdFZpZXcsIHNuYXBzaG90KQotICAg
IHsKLSAgICAgICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7Ci0gICAgICAgIHRo
aXMuc25hcHNob3QgPSBzbmFwc2hvdDsKLSAgICAgICAgdGhpcy5zbmFwc2hvdE5vZGVJbmRleCA9
IHRoaXMuc25hcHNob3Qucm9vdE5vZGVJbmRleDsKLSAgICAgICAgdGhpcy5fcHJvdmlkZXIgPSB0
aGlzLl9jcmVhdGVQcm92aWRlcihzbmFwc2hvdCwgdGhpcy5zbmFwc2hvdE5vZGVJbmRleCk7Ci0g
ICAgICAgIHRoaXMuc29ydCgpOwotICAgIH0KLX07Ci0KLU1peEluU25hcHNob3ROb2RlRnVuY3Rp
b25zKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RPYmplY3ROb2RlLnByb3RvdHlwZSwgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdENvbnRhaW5tZW50RGF0YUdyaWQucHJvdG90eXBlKTsKLVdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RDb250YWlubWVudERhdGFHcmlkLnByb3RvdHlwZS5fX3Byb3Rv
X18gPSBXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlOwotCiBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90U29ydGFibGVEYXRhR3JpZCA9IGZ1bmN0aW9uKGNvbHVtbnMpCiB7CiAgICAgV2Vi
SW5zcGVjdG9yLkRhdGFHcmlkLmNhbGwodGhpcywgY29sdW1ucyk7CkBAIC04OSwxMiArNjIsMTcg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMu
X3BlcmZvcm1Tb3J0aW5nKFNvcnRCeVR3b0ZpZWxkcyk7CisgICAgICAgIFdlYkluc3BlY3Rvci5Q
bGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUuc2hvd0FuZFdhaXRGb3IodGhpcy5lbGVtZW50LCB0
aGlzLCAic29ydGluZyBjb21wbGV0ZSIpOworICAgICAgICBmdW5jdGlvbiBzb3J0KCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdGhpcy5fcGVyZm9ybVNvcnRpbmcoU29ydEJ5VHdvRmllbGRzKTsK
KyAgICAgICAgfQorICAgICAgICBzZXRUaW1lb3V0KHNvcnQuYmluZCh0aGlzKSwgMCk7CiAgICAg
fSwKIAogICAgIF9wZXJmb3JtU29ydGluZzogZnVuY3Rpb24oc29ydEZ1bmN0aW9uKQogICAgIHsK
LSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInN0YXJ0IHNvcnRpbmciKTsK
KyAgICAgICAgdGhpcy5yZWN1cnNpdmVTb3J0aW5nRW50ZXIoKTsKICAgICAgICAgdmFyIGNoaWxk
cmVuID0gdGhpcy5jaGlsZHJlbjsKICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOwogICAg
ICAgICBjaGlsZHJlbi5zb3J0KHNvcnRGdW5jdGlvbik7CkBAIC0xMDQsMTIgKzgyLDYxIEBAIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIGlmIChjaGlsZC5leHBhbmRlZCkKICAgICAgICAgICAgICAgICBjaGlsZC5zb3J0
KCk7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInNv
cnRpbmcgY29tcGxldGUiKTsKKyAgICAgICAgdGhpcy5yZWN1cnNpdmVTb3J0aW5nTGVhdmUoKTsK
KyAgICB9LAorCisgICAgcmVjdXJzaXZlU29ydGluZ0VudGVyOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICBpZiAoISgiX3JlY3Vyc2l2ZVNvcnRpbmdEZXB0aCIgaW4gdGhpcykpCisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNpdmVTb3J0aW5nRGVwdGggPSAxOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICArK3RoaXMuX3JlY3Vyc2l2ZVNvcnRpbmdEZXB0aDsKKyAgICB9LAorCisgICAgcmVj
dXJzaXZlU29ydGluZ0xlYXZlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoISgiX3Jl
Y3Vyc2l2ZVNvcnRpbmdEZXB0aCIgaW4gdGhpcykpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGlmICghLS10aGlzLl9yZWN1cnNpdmVTb3J0aW5nRGVwdGgpIHsKKyAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl9yZWN1cnNpdmVTb3J0aW5nRGVwdGg7CisgICAgICAgICAgICB0aGlzLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycygic29ydGluZyBjb21wbGV0ZSIpOworICAgICAgICB9CiAgICAg
fQogfTsKIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQucHJvdG90
eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGU7CiAKK1dlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RDb250YWlubWVudERhdGFHcmlkID0gZnVuY3Rpb24oKQorewor
ICAgIHZhciBjb2x1bW5zID0geworICAgICAgICBvYmplY3Q6IHsgdGl0bGU6IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiT2JqZWN0IiksIGRpc2Nsb3N1cmU6IHRydWUsIHNvcnRhYmxlOiB0cnVlLCBz
b3J0OiAiYXNjZW5kaW5nIiB9LAorICAgICAgICBzaGFsbG93U2l6ZTogeyB0aXRsZTogV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJTaGFsbG93IFNpemUiKSwgd2lkdGg6ICI5MHB4Iiwgc29ydGFibGU6
IHRydWUgfSwKKyAgICAgICAgcmV0YWluZWRTaXplOiB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlJldGFpbmVkIFNpemUiKSwgd2lkdGg6ICI5MHB4Iiwgc29ydGFibGU6IHRydWUgfQor
ICAgIH07CisgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQuY2Fs
bCh0aGlzLCBjb2x1bW5zKTsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnRhaW5t
ZW50RGF0YUdyaWQucHJvdG90eXBlID0geworICAgIF9kZWZhdWx0UG9wdWxhdGVDb3VudDogMTAw
LAorCisgICAgc2V0RGF0YVNvdXJjZTogZnVuY3Rpb24oc25hcHNob3RWaWV3LCBzbmFwc2hvdCkK
KyAgICB7CisgICAgICAgIHRoaXMuc25hcHNob3RWaWV3ID0gc25hcHNob3RWaWV3OworICAgICAg
ICB0aGlzLnNuYXBzaG90ID0gc25hcHNob3Q7CisgICAgICAgIHRoaXMuc25hcHNob3ROb2RlSW5k
ZXggPSB0aGlzLnNuYXBzaG90LnJvb3ROb2RlSW5kZXg7CisgICAgICAgIHRoaXMuX3Byb3ZpZGVy
ID0gdGhpcy5fY3JlYXRlUHJvdmlkZXIoc25hcHNob3QsIHRoaXMuc25hcHNob3ROb2RlSW5kZXgp
OworICAgICAgICB0aGlzLnNvcnQoKTsKKyAgICB9LAorCisgICAgc29ydGluZ0NoYW5nZWQ6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuc29ydCgpOworICAgIH0KK307CisKK01peElu
U25hcHNob3ROb2RlRnVuY3Rpb25zKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RPYmplY3ROb2Rl
LnByb3RvdHlwZSwgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnRhaW5tZW50RGF0YUdyaWQu
cHJvdG90eXBlKTsKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb250YWlubWVudERhdGFHcmlk
LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVE
YXRhR3JpZC5wcm90b3R5cGU7CisKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb25zdHJ1Y3Rv
cnNEYXRhR3JpZCA9IGZ1bmN0aW9uKCkKIHsKICAgICB2YXIgY29sdW1ucyA9IHsKQEAgLTE5Niw4
ICsyMjMsMTAgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZEYXRhR3JpZC5wcm90b3R5
cGUgPSB7CiAgICAgewogICAgICAgICB0aGlzLmJhc2VTbmFwc2hvdCA9IGJhc2VTbmFwc2hvdDsK
ICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICBpZiAodGhpcy5iYXNlU25h
cHNob3QgPT09IHRoaXMuc25hcHNob3QpCisgICAgICAgIGlmICh0aGlzLmJhc2VTbmFwc2hvdCA9
PT0gdGhpcy5zbmFwc2hvdCkgeworICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoInNvcnRpbmcgY29tcGxldGUiKTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQogICAgICAgICB0aGlzLnBvcHVsYXRlQ2hpbGRyZW4oKTsgICAgICAgIAogICAgIH0sCiAKQEAg
LTIwOCwyNSArMjM3LDI1IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmRGF0YUdyaWQu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgZnVuY3Rpb24gYWdncmVnYXRlc1JlY2VpdmVkKGNs
YXNzZXMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdmFyIG5vZGVDb3VudCA9IDA7
Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkTm9kZUlmTm9uWmVyb0RpZmYobm9kZSwgemVy
b0RpZmYpCisgICAgICAgICAgICAgICAgdmFyIG5vZGVzID0gW107CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgY2xzcyBpbiBiYXNlQ2xhc3NlcykKKyAgICAgICAgICAgICAgICAgICAgbm9kZXMu
cHVzaChuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZOb2RlKHRoaXMsIGNsc3MsIGJh
c2VDbGFzc2VzW2Nsc3NdLCBjbGFzc2VzW2Nsc3NdKSk7CisgICAgICAgICAgICAgICAgZm9yIChj
bHNzIGluIGNsYXNzZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoY2xzcyBpbiBiYXNl
Q2xhc3NlcykpCisgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKG5ldyBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90RGlmZk5vZGUodGhpcywgY2xzcywgbnVsbCwgY2xhc3Nlc1tjbHNz
XSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub2RlQ291bnQgPSBub2Rl
cy5sZW5ndGg7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkTm9kZUlmTm9uWmVyb0RpZmYo
Ym91bmROb2RlLCB6ZXJvRGlmZikKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgIGlmICghemVyb0RpZmYpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENo
aWxkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChib3Vu
ZE5vZGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIS0tbm9kZUNvdW50KQogICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5zb3J0aW5nQ2hhbmdlZCgpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBjbHNzIGluIGJhc2VDbGFzc2VzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZm
Tm9kZSh0aGlzLCBjbHNzLCBiYXNlQ2xhc3Nlc1tjbHNzXSwgY2xhc3Nlc1tjbHNzXSk7Ci0gICAg
ICAgICAgICAgICAgICAgICsrbm9kZUNvdW50OworICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwLCBsID0gbm9kZXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBub2RlID0gbm9kZXNbaV07CiAgICAgICAgICAgICAgICAgICAgIG5vZGUuY2FsY3VsYXRl
RGlmZih0aGlzLCBhZGROb2RlSWZOb25aZXJvRGlmZi5iaW5kKHRoaXMsIG5vZGUpKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChjbHNzIGluIGNsYXNzZXMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCEoY2xzcyBpbiBiYXNlQ2xhc3NlcykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RE
aWZmTm9kZSh0aGlzLCBjbHNzLCBudWxsLCBjbGFzc2VzW2Nsc3NdKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICsrbm9kZUNvdW50OwotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jYWxj
dWxhdGVEaWZmKHRoaXMsIGFkZE5vZGVJZk5vblplcm9EaWZmLmJpbmQodGhpcywgbm9kZSkpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5hZ2dyZWdhdGVzKHRydWUsIGFnZ3JlZ2F0ZXNSZWNl
aXZlZC5iaW5kKHRoaXMpKTsKICAgICAgICAgfQpAQCAtMjQzLDggKzI3Miw3IEBAIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3REb21pbmF0b3JzRGF0YUdyaWQgPSBmdW5jdGlvbigpCiAgICAgICAg
IHNoYWxsb3dTaXplOiB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNoYWxsb3cgU2l6
ZSIpLCB3aWR0aDogIjkwcHgiLCBzb3J0YWJsZTogdHJ1ZSB9LAogICAgICAgICByZXRhaW5lZFNp
emU6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmV0YWluZWQgU2l6ZSIpLCB3aWR0
aDogIjkwcHgiLCBzb3J0OiAiZGVzY2VuZGluZyIsIHNvcnRhYmxlOiB0cnVlIH0KICAgICB9Owot
ICAgIFdlYkluc3BlY3Rvci5EYXRhR3JpZC5jYWxsKHRoaXMsIGNvbHVtbnMpOwotICAgIHRoaXMu
YWRkRXZlbnRMaXN0ZW5lcigic29ydGluZyBjaGFuZ2VkIiwgdGhpcy5zb3J0LCB0aGlzKTsKKyAg
ICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5jYWxsKHRoaXMsIGNv
bHVtbnMpOwogfQogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RG9taW5hdG9yc0RhdGFHcmlk
LnByb3RvdHlwZSA9IHsKQEAgLTI1NywxMSArMjg1LDE2IEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3REb21pbmF0b3JzRGF0YUdyaWQucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnNuYXBz
aG90Tm9kZUluZGV4ID0gdGhpcy5zbmFwc2hvdC5yb290Tm9kZUluZGV4OwogICAgICAgICB0aGlz
Ll9wcm92aWRlciA9IHRoaXMuX2NyZWF0ZVByb3ZpZGVyKHNuYXBzaG90LCB0aGlzLnNuYXBzaG90
Tm9kZUluZGV4KTsKICAgICAgICAgdGhpcy5zb3J0KCk7CisgICAgfSwKKworICAgIHNvcnRpbmdD
aGFuZ2VkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLnNvcnQoKTsKICAgICB9CiB9
OwogCiBNaXhJblNuYXBzaG90Tm9kZUZ1bmN0aW9ucyhXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
RG9taW5hdG9yT2JqZWN0Tm9kZS5wcm90b3R5cGUsIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RE
b21pbmF0b3JzRGF0YUdyaWQucHJvdG90eXBlKTsKLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RE
b21pbmF0b3JzRGF0YUdyaWQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5EYXRh
R3JpZC5wcm90b3R5cGU7CitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RG9taW5hdG9yc0RhdGFH
cmlkLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFi
bGVEYXRhR3JpZC5wcm90b3R5cGU7CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5p
bmdQYXRoc0xpc3QgPSBmdW5jdGlvbigpCiB7CkBAIC0zNzIsOCArNDA1LDkgQEAgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFJldGFpbmluZ1BhdGhzTGlzdC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBzb3J0RnVuY3Rpb24obm9kZUEuZGF0YSwgbm9kZUIuZGF0
YSk7CiAgICAgICAgIH0KLQorICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNvcnRpbmdFbnRlcigpOwog
ICAgICAgICB0aGlzLnNvcnROb2RlcyhEYXRhRXh0cmFjdG9yV3JhcHBlcik7CisgICAgICAgIHRo
aXMucmVjdXJzaXZlU29ydGluZ0xlYXZlKCk7CiAgICAgfQogfTsKIApAQCAtNzIzLDExICs3NTcs
NyBAQCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlID0gewogICAg
ICAgICB7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYmFzZVByb2ZpbGVXcmFwcGVyOwogICAg
ICAgICAgICAgdGhpcy5iYXNlUHJvZmlsZS5fbGFzdFNob3duID0gRGF0ZS5ub3coKTsKLSAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUuc3RhcnRBY3Rp
b24odGhpcy5jdXJyZW50Vmlldy5lbGVtZW50LCBzaG93RGlmZkRhdGEuYmluZCh0aGlzKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzaG93RGlmZkRhdGEoKQotICAgICAgICB7Cisg
ICAgICAgICAgICBXZWJJbnNwZWN0b3IuUGxlYXNlV2FpdE1lc3NhZ2UucHJvdG90eXBlLnNob3dB
bmRXYWl0Rm9yKHRoaXMuY3VycmVudFZpZXcuZWxlbWVudCwgdGhpcy5kaWZmRGF0YUdyaWQsICJz
b3J0aW5nIGNvbXBsZXRlIik7CiAgICAgICAgICAgICB0aGlzLmRpZmZEYXRhR3JpZC5zZXRCYXNl
RGF0YVNvdXJjZSh0aGlzLmJhc2VQcm9maWxlV3JhcHBlcik7CiAgICAgICAgIH0KIApAQCAtODA1
LDEzICs4MzUsMTAgQEAgV2ViSW5zcGVjdG9yLkRldGFpbGVkSGVhcHNob3RWaWV3LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRoaXMu
YmFzZVNlbGVjdEVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgICAgICAgICBp
ZiAoIXRoaXMuZGF0YUdyaWQuc25hcHNob3RWaWV3KQotICAgICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUuc3RhcnRBY3Rpb24odGhpcy5jdXJyZW50
Vmlldy5lbGVtZW50LCBsb2FkRGF0YS5iaW5kKHRoaXMpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIGxvYWREYXRhKCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5kYXRhR3Jp
ZC5zZXREYXRhU291cmNlKHRoaXMsIHRoaXMucHJvZmlsZVdyYXBwZXIpOworICAgICAgICAgICAg
aWYgKCF0aGlzLmRhdGFHcmlkLnNuYXBzaG90VmlldykgeworICAgICAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUuc2hvd0FuZFdhaXRGb3IodGhpcy5j
dXJyZW50Vmlldy5lbGVtZW50LCB0aGlzLmRhdGFHcmlkLCAic29ydGluZyBjb21wbGV0ZSIpOwor
ICAgICAgICAgICAgICAgIHRoaXMuZGF0YUdyaWQuc2V0RGF0YVNvdXJjZSh0aGlzLCB0aGlzLnBy
b2ZpbGVXcmFwcGVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
dGhpcy5jdXJyZW50UXVlcnkgfHwgIXRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2sgfHwgIXRo
aXMuX3NlYXJjaFJlc3VsdHMpCkBAIC04NjcsMTMgKzg5NCwxOSBAQCBXZWJJbnNwZWN0b3IuRGV0
YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlID0gewogCiAgICAgX3Nob3dTdHJpbmdDb250ZW50
UG9wdXA6IGZ1bmN0aW9uKHNwYW4pCiAgICAgewotICAgICAgICB2YXIgc25hcHNob3ROb2RlID0g
bmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlKHRoaXMucHJvZmlsZVdyYXBwZXIsIHNw
YW4uc25hcHNob3ROb2RlSW5kZXgpOwogICAgICAgICB2YXIgc3RyaW5nQ29udGVudEVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgIHN0cmluZ0NvbnRlbnRF
bGVtZW50LmNsYXNzTmFtZSA9ICJtb25vc3BhY2UgY29uc29sZS1mb3JtYXR0ZWQtc3RyaW5nIjsK
ICAgICAgICAgc3RyaW5nQ29udGVudEVsZW1lbnQuc3R5bGUud2hpdGVTcGFjZSA9ICJwcmUiOwot
ICAgICAgICBzdHJpbmdDb250ZW50RWxlbWVudC50ZXh0Q29udGVudCA9ICJcIiIgKyBzbmFwc2hv
dE5vZGUubmFtZSArICJcIiI7CisKICAgICAgICAgdmFyIHBvcG92ZXIgPSBuZXcgV2ViSW5zcGVj
dG9yLlBvcG92ZXIoc3RyaW5nQ29udGVudEVsZW1lbnQpOwotICAgICAgICBwb3BvdmVyLnNob3co
c3Bhbik7CisgICAgICAgIGZ1bmN0aW9uIGRpc3BsYXlTdHJpbmcobmFtZXMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChuYW1lcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgc3Ry
aW5nQ29udGVudEVsZW1lbnQudGV4dENvbnRlbnQgPSAiXCIiICsgbmFtZXNbMF0gKyAiXCIiOyAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBwb3BvdmVyLnNob3coc3Bhbik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5wcm9maWxlV3JhcHBlci5ub2RlRmllbGRWYWx1
ZXNCeUluZGV4KCJuYW1lIiwgW3NwYW4uc25hcHNob3ROb2RlSW5kZXhdLCBkaXNwbGF5U3RyaW5n
KTsKICAgICAgICAgcmV0dXJuIHBvcG92ZXI7CiAgICAgfSwKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcwppbmRleCA3ODFhMTNiLi42
MDBjYmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hl
YXBTbmFwc2hvdC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hl
YXBTbmFwc2hvdC5qcwpAQCAtNTI2LDcgKzUyNiw2IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3QucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMuX25vZGVzOwogICAg
ICAgICBkZWxldGUgdGhpcy5fc3RyaW5nczsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2lkc0xpc3Q7
CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9yZXRhaW5lcnM7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9y
ZXRhaW5lckluZGV4OwogICAgICAgICBkZWxldGUgdGhpcy5fbm9kZUluZGV4OwpAQCAtNTc5LDE4
ICs1NzgsNiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAg
ICAgcmV0dXJuIHRoaXMucm9vdE5vZGUucmV0YWluZWRTaXplOwogICAgIH0sCiAKLSAgICBoYXNJ
ZDogZnVuY3Rpb24oaWQpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5ub2RlSWRzLmJpbmFy
eUluZGV4T2YoaWQsIHRoaXMuX251bWJlcnNDb21wYXJhdG9yKSA+PSAwOwotICAgIH0sCi0KLSAg
ICBnZXQgbm9kZUlkcygpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2lkc0xpc3QpCi0gICAg
ICAgICAgICB0aGlzLl9idWlsZElkc0xpc3QoKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lkc0xp
c3Q7Ci0gICAgfSwKLQogICAgIF9yZXRhaW5lcnNGb3JOb2RlOiBmdW5jdGlvbihub2RlKQogICAg
IHsKICAgICAgICAgaWYgKCF0aGlzLl9yZXRhaW5lcnMpCkBAIC02OTEsMTcgKzY3OCw2IEBAIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9hZ2dy
ZWdhdGVzV2l0aEluZGV4ZXMgPSB0cnVlOwogICAgIH0sCiAKLSAgICBfYnVpbGRJZHNMaXN0OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgY291bnQgPSAwOwotICAgICAgICBmb3IgKHZh
ciBub2Rlc0l0ZXIgPSB0aGlzLl9hbGxOb2Rlczsgbm9kZXNJdGVyLmhhc05leHQoKTsgbm9kZXNJ
dGVyLm5leHQoKSwgKytjb3VudCk7Ci0gICAgICAgIHRoaXMuX2lkc0xpc3QgPSBuZXcgQXJyYXko
Y291bnQpOwotICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAgIGZvciAobm9kZXNJdGVyID0gdGhp
cy5fYWxsTm9kZXM7IG5vZGVzSXRlci5oYXNOZXh0KCk7IG5vZGVzSXRlci5uZXh0KCksICsrY291
bnQpCi0gICAgICAgICAgICB0aGlzLl9pZHNMaXN0W2NvdW50XSA9IG5vZGVzSXRlci5ub2RlLmlk
OwotICAgICAgICB0aGlzLl9pZHNMaXN0LnNvcnQodGhpcy5fbnVtYmVyc0NvbXBhcmF0b3IpOwot
ICAgIH0sCi0KICAgICBfYnVpbGROb2RlSW5kZXg6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAg
IHZhciBjb3VudCA9IDA7CkBAIC03NzUsNyArNzUxLDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9iYXNlTm9kZUlkc1tiYXNl
U25hcHNob3RJZF1bY2xhc3NOYW1lXS5iaW5hcnlJbmRleE9mKG5vZGVJZCwgdGhpcy5fbnVtYmVy
c0NvbXBhcmF0b3IpICE9PSAtMTsKICAgICB9LAogCi0gICAgdXBkYXRlQmFzZU5vZGVJZHM6IGZ1
bmN0aW9uKGJhc2VTbmFwc2hvdElkLCBjbGFzc05hbWUsIG5vZGVJZHMpCisgICAgcHVzaEJhc2VO
b2RlSWRzOiBmdW5jdGlvbihiYXNlU25hcHNob3RJZCwgY2xhc3NOYW1lLCBub2RlSWRzKQogICAg
IHsKICAgICAgICAgaWYgKCF0aGlzLl9iYXNlTm9kZUlkcykKICAgICAgICAgICAgIHRoaXMuX2Jh
c2VOb2RlSWRzID0gW107CkBAIC04NTEsNiArODI3LDI1IEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RGaWx0ZXJlZE9yZGVyZWRJdGVyYXRvci5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAg
ICArK3RoaXMuX3Bvc2l0aW9uOwogICAgIH0sCisKKyAgICBzZXJpYWxpemVOZXh0SXRlbXM6IGZ1
bmN0aW9uKGNvdW50KQorICAgIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheShjb3Vu
dCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwIDsgaSA8IGNvdW50ICYmIHRoaXMuaGFzTmV4dCgp
OyArK2ksIHRoaXMubmV4dCgpKQorICAgICAgICAgICAgcmVzdWx0W2ldID0gdGhpcy5fc2VyaWFs
aXplKHRoaXMuaXRlbSk7CisgICAgICAgIHJlc3VsdC5sZW5ndGggPSBpOworICAgICAgICByZXN1
bHQuaGFzTmV4dCA9IHRoaXMuaGFzTmV4dCgpOworICAgICAgICByZXN1bHQudG90YWxMZW5ndGgg
PSB0aGlzLmxlbmd0aDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAgc29y
dEFuZFJld2luZDogZnVuY3Rpb24oY29tcGFyYXRvcikKKyAgICB7CisgICAgICAgIHZhciByZXN1
bHQgPSB0aGlzLnNvcnQoY29tcGFyYXRvcik7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAg
ICAgICB0aGlzLmZpcnN0KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogfQogCiBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IucHJvdG90eXBl
LmNyZWF0ZUNvbXBhcmF0b3IgPSBmdW5jdGlvbihmaWVsZE5hbWVzKQpAQCAtODY2LDYgKzg2MSwx
MSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNQcm92aWRlciA9IGZ1bmN0aW9uKHNu
YXBzaG90LCBub2RlSW5kZXgsIGZpbHRlcikKIH0KIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dEVkZ2VzUHJvdmlkZXIucHJvdG90eXBlID0geworICAgIF9zZXJpYWxpemU6IGZ1bmN0aW9uKGVk
Z2UpCisgICAgeworICAgICAgICByZXR1cm4ge25hbWU6IGVkZ2UubmFtZSwgbm9kZTogV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlkZXIucHJvdG90eXBlLl9zZXJpYWxpemUoZWRn
ZS5ub2RlKSwgbm9kZUluZGV4OiBlZGdlLm5vZGVJbmRleCwgdHlwZTogZWRnZS50eXBlfTsKKyAg
ICB9LAorCiAgICAgc29ydDogZnVuY3Rpb24oY29tcGFyYXRvcikKICAgICB7CiAgICAgICAgIGlm
ICh0aGlzLl9sYXN0Q29tcGFyYXRvciA9PT0gY29tcGFyYXRvcikKQEAgLTk0OSw2ICs5NDksMTEg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlkZXIgPSBmdW5jdGlvbihzbmFw
c2hvdCwgZmlsdGVyKQogfQogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRl
ci5wcm90b3R5cGUgPSB7CisgICAgX3NlcmlhbGl6ZTogZnVuY3Rpb24obm9kZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB7aWQ6IG5vZGUuaWQsIG5hbWU6IG5vZGUubmFtZSwgbm9kZUluZGV4OiBu
b2RlLm5vZGVJbmRleCwgcmV0YWluZWRTaXplOiBub2RlLnJldGFpbmVkU2l6ZSwgc2VsZlNpemU6
IG5vZGUuc2VsZlNpemUsIHR5cGU6IG5vZGUudHlwZX07CisgICAgfSwKKwogICAgIHNvcnQ6IGZ1
bmN0aW9uKGNvbXBhcmF0b3IpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fbGFzdENvbXBhcmF0
b3IgPT09IGNvbXBhcmF0b3IpCkBAIC0xMTUzLDI0ICsxMTU4LDE1IEBAIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RzRGlmZiA9IGZ1bmN0aW9uKHNuYXBzaG90LCBjbGFzc05hbWUpCiB9OwogCiBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90c0RpZmYucHJvdG90eXBlID0gewotICAgIHNldCBiYXNl
SWRzKGJhc2VJZHMpCi0gICAgewotICAgICAgICB0aGlzLl9iYXNlSWRzID0gYmFzZUlkczsKLSAg
ICB9LAotCi0gICAgc2V0IGJhc2VTZWxmU2l6ZXMoYmFzZVNlbGZTaXplcykKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2Jhc2VTZWxmU2l6ZXMgPSBiYXNlU2VsZlNpemVzOwotICAgIH0sCi0KICAgICBj
YWxjdWxhdGU6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBpbmRleGVzID0gdGhpcy5f
c25hcHNob3QuYWdncmVnYXRlcyh0cnVlKVt0aGlzLl9jbGFzc05hbWVdLmlkeHM7CisgICAgICAg
IHZhciBhZ2dyZWdhdGVzID0gdGhpcy5fc25hcHNob3QuYWdncmVnYXRlcyh0cnVlKVt0aGlzLl9j
bGFzc05hbWVdOworICAgICAgICB2YXIgaW5kZXhlcyA9IGFnZ3JlZ2F0ZXMgPyBhZ2dyZWdhdGVz
LmlkeHMgOiBbXTsKICAgICAgICAgdmFyIGkgPSAwLCBsID0gdGhpcy5fYmFzZUlkcy5sZW5ndGg7
CiAgICAgICAgIHZhciBqID0gMCwgbSA9IGluZGV4ZXMubGVuZ3RoOwogICAgICAgICB2YXIgZGlm
ZiA9IHsgYWRkZWRDb3VudDogMCwgcmVtb3ZlZENvdW50OiAwLCBhZGRlZFNpemU6IDAsIHJlbW92
ZWRTaXplOiAwIH07CiAgICAgICAgICAgIAotICAgICAgICB2YXIgbm9kZUIgPSBuZXcgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcy5fc25hcHNob3QpOworICAgICAgICB2YXIgbm9k
ZUIgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcy5fc25hcHNob3QsIGlu
ZGV4ZXNbal0pOwogICAgICAgICB3aGlsZSAoaSA8IGwgJiYgaiA8IG0pIHsKICAgICAgICAgICAg
IHZhciBub2RlQUlkID0gdGhpcy5fYmFzZUlkc1tpXTsKICAgICAgICAgICAgIGlmIChub2RlQUlk
IDwgbm9kZUIuaWQpIHsKQEAgLTExOTksNSArMTE5NSwxNSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90c0RpZmYucHJvdG90eXBlID0gewogICAgICAgICBkaWZmLmNvdW50RGVsdGEgPSBkaWZm
LmFkZGVkQ291bnQgLSBkaWZmLnJlbW92ZWRDb3VudDsKICAgICAgICAgZGlmZi5zaXplRGVsdGEg
PSBkaWZmLmFkZGVkU2l6ZSAtIGRpZmYucmVtb3ZlZFNpemU7CiAgICAgICAgIHJldHVybiBkaWZm
OworICAgIH0sCisKKyAgICBwdXNoQmFzZUlkczogZnVuY3Rpb24oYmFzZUlkcykKKyAgICB7Cisg
ICAgICAgIHRoaXMuX2Jhc2VJZHMgPSBiYXNlSWRzOworICAgIH0sCisKKyAgICBwdXNoQmFzZVNl
bGZTaXplczogZnVuY3Rpb24oYmFzZVNlbGZTaXplcykKKyAgICB7CisgICAgICAgIHRoaXMuX2Jh
c2VTZWxmU2l6ZXMgPSBiYXNlU2VsZlNpemVzOwogICAgIH0KIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcwppbmRl
eCBiYjBhN2VjLi42YzQ5Y2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanMKQEAgLTUyLDE2ICs1Miw2IEBAIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHNldFRp
bWVvdXQocmV0dXJuUmVzdWx0LmJpbmQodGhpcyksIDApOwogICAgIH0sCiAKLSAgICBfZXh0cmFj
dEVkZ2VEYXRhOiBmdW5jdGlvbihlZGdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHtuYW1lOiBl
ZGdlLm5hbWUsIG5vZGU6IHRoaXMuX2V4dHJhY3ROb2RlRGF0YShlZGdlLm5vZGUpLCBub2RlSW5k
ZXg6IGVkZ2Uubm9kZUluZGV4LCB0eXBlOiBlZGdlLnR5cGV9OwotICAgIH0sCi0KLSAgICBfZXh0
cmFjdE5vZGVEYXRhOiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHtpZDog
bm9kZS5pZCwgbmFtZTogbm9kZS5uYW1lLCBub2RlSW5kZXg6IG5vZGUubm9kZUluZGV4LCByZXRh
aW5lZFNpemU6IG5vZGUucmV0YWluZWRTaXplLCBzZWxmU2l6ZTogbm9kZS5zZWxmU2l6ZSwgdHlw
ZTogbm9kZS50eXBlfTsKLSAgICB9LAotCiAgICAgY3JlYXRlRGlmZjogZnVuY3Rpb24oY2xhc3NO
YW1lKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
c0RpZmZQcm94eShuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdHNEaWZmKHRoaXMuX3NuYXBz
aG90LCBjbGFzc05hbWUpKTsKQEAgLTc1LDcgKzY1LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFByb3h5LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIu
YmluZCh0aGlzLl9zbmFwc2hvdCk7CiAgICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RFZGdlc1Byb3ZpZGVyKHRoaXMuX3NuYXBzaG90LCBub2RlSW5kZXgsIGZp
bHRlcik7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90UHJvdmlkZXJQcm94eShjcmVhdGVQcm92aWRlci5iaW5kKHRoaXMpLCB0aGlzLl9leHRy
YWN0RWRnZURhdGEuYmluZCh0aGlzKSk7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFByb3ZpZGVyUHJveHkoY3JlYXRlUHJvdmlkZXIuYmluZCh0aGlzKSk7CiAg
ICAgfSwKIAogICAgIGNyZWF0ZU5vZGVzUHJvdmlkZXI6IGZ1bmN0aW9uKGZpbHRlcikKQEAgLTg2
LDcgKzc2LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3h5LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIuYmluZCh0aGlzLl9zbmFwc2hvdCk7CiAg
ICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rlc1Byb3Zp
ZGVyKHRoaXMuX3NuYXBzaG90LCBmaWx0ZXIpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBu
ZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3ZpZGVyUHJveHkoY3JlYXRlUHJvdmlkZXIu
YmluZCh0aGlzKSwgdGhpcy5fZXh0cmFjdE5vZGVEYXRhLmJpbmQodGhpcykpOworICAgICAgICBy
ZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm92aWRlclByb3h5KGNyZWF0ZVBy
b3ZpZGVyLmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBjcmVhdGVQYXRoRmluZGVyOiBmdW5j
dGlvbih0YXJnZXROb2RlSW5kZXgpCkBAIC0xNDAsMTEgKzEzMCw2IEBAIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RQcm94eS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHNldFRpbWVvdXQocmV0dXJu
UmVzdWx0LmJpbmQodGhpcyksIDApOwogICAgIH0sCiAKLSAgICBub2RlSWRzOiBmdW5jdGlvbihj
YWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMuX2ludm9rZUdldHRlcigibm9kZUlkcyIsIGNh
bGxiYWNrKTsKLSAgICB9LAotCiAgICAgcHVzaEpTT05DaHVuazogZnVuY3Rpb24oY2h1bmspCiAg
ICAgewogICAgICAgICBpZiAodGhpcy5sb2FkZWQgfHwgIXRoaXMuX2lzTG9hZGluZykKQEAgLTE1
NCw3ICsxMzksNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkucHJvdG90eXBlID0g
ewogCiAgICAgcHVzaEJhc2VJZHM6IGZ1bmN0aW9uKHNuYXBzaG90SWQsIGNsYXNzTmFtZSwgbm9k
ZUlkcykKICAgICB7Ci0gICAgICAgIHRoaXMuX3NuYXBzaG90LnVwZGF0ZUJhc2VOb2RlSWRzKHNu
YXBzaG90SWQsIGNsYXNzTmFtZSwgbm9kZUlkcyk7CisgICAgICAgIHRoaXMuX3NuYXBzaG90LnB1
c2hCYXNlTm9kZUlkcyhzbmFwc2hvdElkLCBjbGFzc05hbWUsIG5vZGVJZHMpOwogICAgIH0sCiAK
ICAgICBnZXQgcm9vdE5vZGVJbmRleCgpCkBAIC0xOTMsMjIgKzE3OCwxNyBAQCBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90UHJveHkucHJvdG90eXBlID0gewogICAgIH0KIH07CiAKLVdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RQcm92aWRlclByb3h5ID0gZnVuY3Rpb24oY3JlYXRlUHJvdmlkZXIs
IGV4dHJhY3REYXRhKQorV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3ZpZGVyUHJveHkgPSBm
dW5jdGlvbihjcmVhdGVQcm92aWRlcikKIHsKICAgICB0aGlzLl9wcm92aWRlciA9IGNyZWF0ZVBy
b3ZpZGVyKCk7Ci0gICAgdGhpcy5fZXh0cmFjdERhdGEgPSBleHRyYWN0RGF0YTsKIH0KIAogV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb3ZpZGVyUHJveHkucHJvdG90eXBlID0gewotICAgIGdl
dE5leHRJdGVtczogZnVuY3Rpb24oY291bnQsIGNhbGxiYWNrKQorICAgIHNlcmlhbGl6ZU5leHRJ
dGVtczogZnVuY3Rpb24oY291bnQsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgZnVuY3Rpb24g
cmV0dXJuUmVzdWx0KCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBB
cnJheShjb3VudCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCA7IGkgPCBjb3VudCAmJiB0
aGlzLl9wcm92aWRlci5oYXNOZXh0KCk7ICsraSwgdGhpcy5fcHJvdmlkZXIubmV4dCgpKQotICAg
ICAgICAgICAgICAgIHJlc3VsdFtpXSA9IHRoaXMuX2V4dHJhY3REYXRhKHRoaXMuX3Byb3ZpZGVy
Lml0ZW0pOwotICAgICAgICAgICAgcmVzdWx0Lmxlbmd0aCA9IGk7Ci0gICAgICAgICAgICBjYWxs
YmFjayhyZXN1bHQsIHRoaXMuX3Byb3ZpZGVyLmhhc05leHQoKSwgdGhpcy5fcHJvdmlkZXIubGVu
Z3RoKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3Byb3ZpZGVyLnNlcmlhbGl6ZU5leHRJ
dGVtcyhjb3VudCkpOwogICAgICAgICB9CiAgICAgICAgIHNldFRpbWVvdXQocmV0dXJuUmVzdWx0
LmJpbmQodGhpcyksIDApOwogICAgIH0sCkBAIC0yMjYsMTAgKzIwNiw3IEBAIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm92aWRlclByb3h5LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAg
IGZ1bmN0aW9uIHJldHVyblJlc3VsdCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciByZXN1
bHQgPSB0aGlzLl9wcm92aWRlci5zb3J0KGNvbXBhcmF0b3IpOwotICAgICAgICAgICAgaWYgKHJl
c3VsdCkKLSAgICAgICAgICAgICAgICB0aGlzLl9wcm92aWRlci5maXJzdCgpOwotICAgICAgICAg
ICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3Byb3ZpZGVy
LnNvcnRBbmRSZXdpbmQoY29tcGFyYXRvcikpOwogICAgICAgICB9CiAgICAgICAgIHNldFRpbWVv
dXQocmV0dXJuUmVzdWx0LmJpbmQodGhpcyksIDApOwogICAgIH0KQEAgLTI3NSwxMyArMjUyLDEz
IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RzRGlmZlByb3h5LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgc2V0VGltZW91dChyZXR1cm5SZXN1bHQuYmluZCh0aGlzKSwgMCk7CiAgICAgfSwKIAot
ICAgIHB1c2hCYXNlSWRzOiBmdW5jdGlvbihiYXNlU25hcHNob3RJZCwgYmFzZUlkcykKKyAgICBw
dXNoQmFzZUlkczogZnVuY3Rpb24oYmFzZUlkcykKICAgICB7Ci0gICAgICAgIHRoaXMuX2RpZmYu
YmFzZUlkcyA9IGJhc2VJZHM7CisgICAgICAgIHRoaXMuX2RpZmYucHVzaEJhc2VJZHMoYmFzZUlk
cyk7CiAgICAgfSwKIAogICAgIHB1c2hCYXNlU2VsZlNpemVzOiBmdW5jdGlvbihiYXNlU2VsZlNp
emVzKQogICAgIHsKLSAgICAgICAgdGhpcy5fZGlmZi5iYXNlU2VsZlNpemVzID0gYmFzZVNlbGZT
aXplczsKKyAgICAgICAgdGhpcy5fZGlmZi5wdXNoQmFzZVNlbGZTaXplcyhiYXNlU2VsZlNpemVz
KTsKICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9QbGVhc2VXYWl0TWVzc2FnZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvUGxlYXNlV2FpdE1lc3NhZ2UuanMKaW5kZXggYzVkZGQ0OS4uODRjZGExOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QbGVhc2VXYWl0TWVzc2Fn
ZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BsZWFzZVdhaXRN
ZXNzYWdlLmpzCkBAIC04MSwyNyArODEsMjIgQEAgV2ViSW5zcGVjdG9yLlBsZWFzZVdhaXRNZXNz
YWdlLnByb3RvdHlwZSA9IHsKICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChtZXNzYWdlKTsK
ICAgICB9LAogCi0gICAgc3RhcnRBY3Rpb246IGZ1bmN0aW9uKGVsZW1lbnQsIGFjdGlvbkNhbGxi
YWNrLCBjYW5jZWxDYWxsYmFjaykKKyAgICBzaG93QW5kV2FpdEZvcjogZnVuY3Rpb24oZWxlbWVu
dCwgbGlzdGVuT2JqZWN0LCBsaXN0ZW5FdmVudCkKICAgICB7CiAgICAgICAgIHZhciBpbnN0YW5j
ZSA9IFdlYkluc3BlY3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUuaW5zdGFuY2U7CiAg
ICAgICAgIHZhciBtZXNzYWdlID0gaW5zdGFuY2UuZWxlbWVudDsKLSAgICAgICAgaWYgKG1lc3Nh
Z2UucGFyZW50Tm9kZSA9PT0gZWxlbWVudCkgewotICAgICAgICAgICAgc2V0VGltZW91dChhY3Rp
b25DYWxsYmFjaywgMCk7CisgICAgICAgIGlmIChtZXNzYWdlLnBhcmVudE5vZGUgPT09IGVsZW1l
bnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgCi0gICAgICAgIGZ1bmN0
aW9uIGRvQWN0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
ICAgICBhY3Rpb25DYWxsYmFjaygpOwotICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAg
ICAgICAgICBpZiAobWVzc2FnZS5wYXJlbnROb2RlKQotICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobWVzc2FnZSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KIAotICAgICAgICBXZWJJbnNwZWN0b3IuUGxlYXNlV2FpdE1lc3NhZ2UucHJvdG90eXBl
LnNob3coZWxlbWVudCwgY2FuY2VsQ2FsbGJhY2spOwotICAgICAgICBzZXRUaW1lb3V0KGRvQWN0
aW9uLCAwKTsKKyAgICAgICAgbGlzdGVuT2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIobGlzdGVuRXZl
bnQsIFdlYkluc3BlY3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUudW5saXN0ZW5BbmRI
aWRlLmJpbmQoaW5zdGFuY2UsIGxpc3Rlbk9iamVjdCwgbGlzdGVuRXZlbnQpLCBpbnN0YW5jZSk7
CisgICAgICAgIFdlYkluc3BlY3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUuc2hvdyhl
bGVtZW50KTsKKyAgICB9LAorCisgICAgdW5saXN0ZW5BbmRIaWRlOiBmdW5jdGlvbihsaXN0ZW5P
YmplY3QsIGxpc3RlbkV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGluc3RhbmNlID0gV2ViSW5z
cGVjdG9yLlBsZWFzZVdhaXRNZXNzYWdlLnByb3RvdHlwZS5pbnN0YW5jZTsKKyAgICAgICAgbGlz
dGVuT2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuRXZlbnQsIFdlYkluc3BlY3Rvci5Q
bGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUudW5saXN0ZW5BbmRIaWRlLCBpbnN0YW5jZSk7Cisg
ICAgICAgIFdlYkluc3BlY3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUuaGlkZSgpOwog
ICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvV2ViS2l0LnFyYyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0
LnFyYwppbmRleCAxYjVjYjM5Li40ZWU5ZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCkBAIC04LDYgKzgsNyBAQAogICAgIDxmaWxlPkF1ZGl0
UmVzdWx0Vmlldy5qczwvZmlsZT4KICAgICA8ZmlsZT5BdWRpdFJ1bGVzLmpzPC9maWxlPgogICAg
IDxmaWxlPkF1ZGl0c1BhbmVsLmpzPC9maWxlPgorICAgIDxmaWxlPkJpbmFyeVNlYXJjaC5qczwv
ZmlsZT4KICAgICA8ZmlsZT5Cb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUuanM8L2ZpbGU+CiAg
ICAgPGZpbGU+QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qczwvZmlsZT4KICAgICA8ZmlsZT5DYWxs
U3RhY2tTaWRlYmFyUGFuZS5qczwvZmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDE4YzI1NjQuLjFlZDNiZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApA
QCAtMzksNiArMzksNyBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlw
ZT0idGV4dC9jc3MiIGhyZWY9InBvcG92ZXIuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJ0ZXh0Vmlld2VyLmNzcyI+CiAgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idXRpbGl0aWVzLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJCaW5hcnlTZWFyY2guanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRyZWVvdXRsaW5l
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJp
bnNwZWN0b3IuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9Ikluc3BlY3RvckJhY2tlbmRTdHViLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKaW5kZXggZWE4Y2E4MC4uNjRh
N2E5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGls
aXRpZXMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRp
ZXMuanMKQEAgLTc3NCw0NiArNzc0LDYgQEAgQXJyYXkuY29udmVydCA9IGZ1bmN0aW9uKGxpc3Qp
CiAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGxpc3QpOwogfQogCi1mdW5j
dGlvbiBiaW5hcnlTZWFyY2gob2JqZWN0LCBhcnJheSwgY29tcGFyYXRvcikKLXsKLSAgICB2YXIg
Zmlyc3QgPSAwOwotICAgIHZhciBsYXN0ID0gYXJyYXkubGVuZ3RoIC0gMTsKLQotICAgIHdoaWxl
IChmaXJzdCA8PSBsYXN0KSB7Ci0gICAgICAgIHZhciBtaWQgPSAoZmlyc3QgKyBsYXN0KSA+PiAx
OwotICAgICAgICB2YXIgYyA9IGNvbXBhcmF0b3Iob2JqZWN0LCBhcnJheVttaWRdKTsKLSAgICAg
ICAgaWYgKGMgPiAwKQotICAgICAgICAgICAgZmlyc3QgPSBtaWQgKyAxOwotICAgICAgICBlbHNl
IGlmIChjIDwgMCkKLSAgICAgICAgICAgIGxhc3QgPSBtaWQgLSAxOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICByZXR1cm4gbWlkOwotICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgbmVhcmVz
dCBsZXNzZXIgaW5kZXgsICItMSIgbWVhbnMgIjAsICItMiIgbWVhbnMgIjEiLCBldGMuCi0gICAg
cmV0dXJuIC0oZmlyc3QgKyAxKTsKLX0KLQotT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnBy
b3RvdHlwZSwgImJpbmFyeUluZGV4T2YiLCB7IHZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgY29tcGFy
YXRvcikKLXsKLSAgICB2YXIgcmVzdWx0ID0gYmluYXJ5U2VhcmNoKHZhbHVlLCB0aGlzLCBjb21w
YXJhdG9yKTsKLSAgICByZXR1cm4gcmVzdWx0ID49IDAgPyByZXN1bHQgOiAtMTsKLX19KTsKLQot
ZnVuY3Rpb24gaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKGFu
T2JqZWN0LCBhTGlzdCwgYUZ1bmN0aW9uKQotewotICAgIHZhciBpbmRleCA9IGJpbmFyeVNlYXJj
aChhbk9iamVjdCwgYUxpc3QsIGFGdW5jdGlvbik7Ci0gICAgaWYgKGluZGV4IDwgMCkKLSAgICAg
ICAgLy8gU2VlIGJpbmFyeVNlYXJjaCBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgcmV0dXJuIC1p
bmRleCAtIDE7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFJldHVybiB0aGUgZmlyc3Qgb2NjdXJh
bmNlIG9mIGFuIGl0ZW0gaW4gdGhlIGxpc3QuCi0gICAgICAgIHdoaWxlIChpbmRleCA+IDAgJiYg
YUZ1bmN0aW9uKGFuT2JqZWN0LCBhTGlzdFtpbmRleCAtIDFdKSA9PT0gMCkKLSAgICAgICAgICAg
IGluZGV4LS07Ci0gICAgICAgIHJldHVybiBpbmRleDsgICAgICAgIAotICAgIH0KLX0KLQogU3Ry
aW5nLnNwcmludGYgPSBmdW5jdGlvbihmb3JtYXQpCiB7CiAgICAgcmV0dXJuIFN0cmluZy52c3By
aW50Zihmb3JtYXQsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpOwo=
</data>
<flag name="review"
          id="83451"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="83452"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
      

    </bug>

</bugzilla>