<?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>195321</bug_id>
          
          <creation_ts>2019-03-05 01:14:52 -0800</creation_ts>
          <short_desc>Web Inspector: CPU Usage Timeline - Allow clicking a bar in the overview to select a tight time range around it</short_desc>
          <delta_ts>2019-03-06 14:51:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>194455</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1512562</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-03-05 01:14:52 -0800</bug_when>
    <thetext>CPU Usage Timeline - Allow clicking a bar in the overview to select a tight time range around it

Steps to reproduce:
1. Record a CPU usage timeline on a website
2. Click a CPU bar in the overview
  =&gt; Nothing happens, expected it to be selected</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512563</commentid>
    <comment_count>1</comment_count>
      <attachid>363619</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-03-05 01:19:33 -0800</bug_when>
    <thetext>Created attachment 363619
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512935</commentid>
    <comment_count>2</comment_count>
      <attachid>363619</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-03-05 17:58:00 -0800</bug_when>
    <thetext>Comment on attachment 363619
[PATCH] Proposed Fix

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

r=me

&gt; Source/WebInspectorUI/UserInterface/Models/Timeline.js:113
&gt; +        if (before &lt; after)
&gt; +            return recordBefore;
&gt; +        return recordAfter;

NIT: I&apos;d make this into a ternary.

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.css:85
&gt; +    fill: var(--selected-background-color) !important;
&gt; +    stroke: var(--selected-background-color-active) !important;

Is there any way to avoid the `!important`? :(

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.css:86
&gt; +    fill-opacity: 0.5;

NIT: I&apos;d put this alongside the `fill` property above.

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:49
&gt; +        this._chart.element.addEventListener(&quot;click&quot;, this._handleGraphMouseClick.bind(this));

NIT: I&apos;d use `_handleChartClick` instead, as it more closely matches the variable name (&quot;Chart&quot; vs &quot;Graph&quot;) and event name (&quot;Click vs &quot;MouseClick&quot;).
NIT: I&apos;d move this above to be immediately below the initialization of `this._chart`.  I prefer adding event listeners before adding the element to the DOM.

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:54
&gt; +        this._lastSelectedRecordLayout = null;

Why is &quot;Layout&quot; part of the name?  It seems unnecessary.

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:119
&gt; +        let visibleRecords = this._cpuTimeline.recordsInTimeRange(graphStartTime, visibleEndTime + (WI.CPUTimelineOverviewGraph.samplingRatePerSecond / 2), includeRecordBeforeStart);

I thought you preferred using the non-`WI` name when referenced from within the class?

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:127
&gt; +        let intervalWidth = (WI.CPUTimelineOverviewGraph.samplingRatePerSecond / secondsPerPixel);

Ditto (&gt;119).

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:134
&gt; +            let x = xScale(record.startTime - (WI.CPUTimelineOverviewGraph.samplingRatePerSecond / 2));

Ditto (&gt;119).

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:150
&gt; +        if (this._lastSelectedRecordLayout !== this.selectedRecord)
&gt; +            this.needsLayout();

It might be worth mentioning that this is necessary since we don&apos;t actually have any of the actual DOM nodes for the records.  As such, the only way to add a &quot;selected&quot; class to a matching record is by redrawing the entire graph.

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:180
&gt; +            // Try again lower, since the scroll bar prevents low clicks.
&gt; +            const tryLowerOffset = 5;
&gt; +            elements = document.elementsFromPoint(event.pageX, event.pageY + tryLowerOffset);
&gt; +            rectElement = elements.find((x) =&gt; x.localName === &quot;rect&quot;);

Do we still need this now that &lt;https://webkit.org/b/195318&gt; has landed?

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:185
&gt; +        let chartElement = rectElement.closest(&quot;.stacked-column-chart&quot;);

It&apos;s cases like these that I see the utility in having a static variable for the CSS class of the element (e.g. `WI.StackedColumnChart.className`).

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:194
&gt; +        let rect = chartElement.getBoundingClientRect();
&gt; +        let position = event.pageX - rect.left;
&gt; +
&gt; +        if (WI.resolvedLayoutDirection() === WI.LayoutDirection.RTL)
&gt; +            return rect.width - position;
&gt; +        return position;

We should make this into a utility function on `Element.prototype` given how often we seem to use it.  Something like `positionWithinElement`.

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:199
&gt; +        let clickPosition = this._graphPositionForMouseEvent(event);

Shouldn&apos;t this be called `graphPosition` to match the function name?  If not, we should rename it to `_clickPositionForMouseEvent` or something like that.

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:203
&gt; +        let secondsPerPixel = this.timelineOverview.secondsPerPixel;

NIT: I&apos;d inline this.

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:207
&gt; +        let clickTime = graphStartTime + graphClickTime;

Ditto (&gt;203).

&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:209
&gt; +        console.log(&quot;click&quot;, record);

Oops.

&gt; Source/WebInspectorUI/UserInterface/Views/StackedColumnChart.js:87
&gt; +    addColumnSet(x, totalHeight, width, heights, additionalClass)

It&apos;s moments like these that I wish we used `optional = {}` in more places :(

&gt; Source/WebInspectorUI/UserInterface/Views/TimelineOverview.js:770
&gt; +                let selectionPadding = 2.25 * WI.CPUTimelineOverviewGraph.samplingRatePerSecond;

NIT: I&apos;d flip the order of the multiplication so that the &quot;base&quot; is first and the &quot;multiplier&quot; is second (e.g. &quot;multiply &lt;known value&gt; by &lt;scale&gt;&quot; rather than &quot;multiply &lt;scale&gt; by &lt;known value&gt;&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513148</commentid>
    <comment_count>3</comment_count>
      <attachid>363619</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-03-06 13:11:36 -0800</bug_when>
    <thetext>Comment on attachment 363619
[PATCH] Proposed Fix

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.css:85
&gt;&gt; +    stroke: var(--selected-background-color-active) !important;
&gt; 
&gt; Is there any way to avoid the `!important`? :(

I was matching what we did for timeline record bars:

    .timeline-record-bar.selected &gt; .segment {
        background-color: var(--selected-background-color) !important;
        border-color: var(--selected-background-color-active) !important;
    }

Normally &quot;selected&quot; appearances are the rare cases we use important to ensure regardless of specificity we get selected styles.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:54
&gt;&gt; +        this._lastSelectedRecordLayout = null;
&gt; 
&gt; Why is &quot;Layout&quot; part of the name?  It seems unnecessary.

It is the last selected record we performed a layout with. Selected record may change many times, but we only need to update our layout if it doesn&apos;t match the one when we last did a layout.

I&apos;ll rename this to:

    this._lastSelectedRecordInLayout

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:119
&gt;&gt; +        let visibleRecords = this._cpuTimeline.recordsInTimeRange(graphStartTime, visibleEndTime + (WI.CPUTimelineOverviewGraph.samplingRatePerSecond / 2), includeRecordBeforeStart);
&gt; 
&gt; I thought you preferred using the non-`WI` name when referenced from within the class?

Oops, yes I meant to go back and fix this after the global replace I did.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:150
&gt;&gt; +            this.needsLayout();
&gt; 
&gt; It might be worth mentioning that this is necessary since we don&apos;t actually have any of the actual DOM nodes for the records.  As such, the only way to add a &quot;selected&quot; class to a matching record is by redrawing the entire graph.

Added a comment.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:180
&gt;&gt; +            rectElement = elements.find((x) =&gt; x.localName === &quot;rect&quot;);
&gt; 
&gt; Do we still need this now that &lt;https://webkit.org/b/195318&gt; has landed?

Hmm, yes and no. When there is no scrollbar visible, clicks will work everywhere now. But if there is a scroll bar visible then there might be a bar underneath the scrollbar (an overlay) which cannot be clicked directly. That said, I don&apos;t think scrollbars are common here, and normally I think people will want to click large columns, not near zero columns (which are already hard to click at 4px).

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/CPUTimelineOverviewGraph.js:199
&gt;&gt; +        let clickPosition = this._graphPositionForMouseEvent(event);
&gt; 
&gt; Shouldn&apos;t this be called `graphPosition` to match the function name?  If not, we should rename it to `_clickPositionForMouseEvent` or something like that.

I&apos;ll just name this `position`. It is the click position within the graph.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513204</commentid>
    <comment_count>4</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-03-06 14:35:22 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/242567/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513211</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-06 14:51:39 -0800</bug_when>
    <thetext>&lt;rdar://problem/48653647&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363619</attachid>
            <date>2019-03-05 01:19:33 -0800</date>
            <delta_ts>2019-03-06 13:11:36 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>select-1.patch</filename>
            <type>text/plain</type>
            <size>15314</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGM0MGM5NTAxMTY2Li42MzRlZTZiOTY4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTktMDMtMDUgIEpvc2Vw
aCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDUFUgVXNhZ2UgVGltZWxpbmUgLSBBbGxvdyBjbGlja2luZyBhIGJhciBpbiB0aGUgb3ZlcnZp
ZXcgdG8gc2VsZWN0IGEgdGlnaHQgdGltZSByYW5nZSBhcm91bmQgaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTMyMQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMv
VGltZWxpbmUuanM6CisgICAgICAgIChXSS5UaW1lbGluZS5wcm90b3R5cGUuY2xvc2VzdFJlY29y
ZFRvKToKKyAgICAgICAgSGVscGVyIHRvIGdldCB0aGUgY2xvc2VzdCByZWNvcmQgdG8gYSB0aW1l
c3RhbXAuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0NQVVRpbWVsaW5lT3ZlcnZp
ZXdHcmFwaC5jc3M6CisgICAgICAgICgudGltZWxpbmUtb3ZlcnZpZXctZ3JhcGguY3B1ID4gLnN0
YWNrZWQtY29sdW1uLWNoYXJ0KToKKyAgICAgICAgKC50aW1lbGluZS1vdmVydmlldy1ncmFwaC5j
cHUgPiAuc3RhY2tlZC1jb2x1bW4tY2hhcnQgPiBzdmcgPiByZWN0LnNlbGVjdGVkKToKKyAgICAg
ICAgU3R5bGUgYSBzZWxlY3RlZCByZWNvcmQgd2l0aCB0aGUgYWN0aXZlIGNvbG9yLgorCisgICAg
ICAgICogVXNlckludGVyZmFjZS9WaWV3cy9DUFVUaW1lbGluZU92ZXJ2aWV3R3JhcGguanM6Cisg
ICAgICAgIChXSS5DUFVUaW1lbGluZU92ZXJ2aWV3R3JhcGgpOgorICAgICAgICAoV0kuQ1BVVGlt
ZWxpbmVPdmVydmlld0dyYXBoLnByb3RvdHlwZS5nZXQgc2FtcGxpbmdSYXRlUGVyU2Vjb25kKToK
KyAgICAgICAgKFdJLkNQVVRpbWVsaW5lT3ZlcnZpZXdHcmFwaC5wcm90b3R5cGUucmVzZXQpOgor
ICAgICAgICAoV0kuQ1BVVGltZWxpbmVPdmVydmlld0dyYXBoLnByb3RvdHlwZS5sYXlvdXQpOgor
ICAgICAgICAoV0kuQ1BVVGltZWxpbmVPdmVydmlld0dyYXBoLnByb3RvdHlwZS51cGRhdGVTZWxl
Y3RlZFJlY29yZCk6CisgICAgICAgIChXSS5DUFVUaW1lbGluZU92ZXJ2aWV3R3JhcGgucHJvdG90
eXBlLl9ncmFwaFBvc2l0aW9uRm9yTW91c2VFdmVudCk6CisgICAgICAgIChXSS5DUFVUaW1lbGlu
ZU92ZXJ2aWV3R3JhcGgucHJvdG90eXBlLl9oYW5kbGVHcmFwaE1vdXNlQ2xpY2spOgorICAgICAg
ICBBIGNsaWNrIGluIHRoZSBvdmVydmlldyB3aGljaCBoaXRzIGEgcmVjdCB0cmlnZ2VycyBhIHNl
bGVjdGlvbiBvZgorICAgICAgICB0aGUgYXNzb2NpYXRlZCB0aW1lbGluZSByZWNvcmQuCisKKyAg
ICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1N0YWNrZWRDb2x1bW5DaGFydC5qczoKKyAgICAg
ICAgKFdJLlN0YWNrZWRDb2x1bW5DaGFydC5wcm90b3R5cGUuYWRkQ29sdW1uU2V0KToKKyAgICAg
ICAgKFdJLlN0YWNrZWRDb2x1bW5DaGFydC5wcm90b3R5cGUubGF5b3V0KToKKyAgICAgICAgQWxs
b3cgc2V0dGluZyBhbiBhZGRpdGlvbmFsIGNsYXNzIG5hbWUgd2l0aCBhIGNvbHVtbiBzZXQuCisg
ICAgICAgIEl0IHdpbGwgc2V0IHRoZSBjbGFzcyBuYW1lIG9uIGVhY2ggcmVjdCBpbiB0aGF0IGNv
bHVtbi4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVGltZWxpbmVPdmVydmlldy5q
czoKKyAgICAgICAgKFdJLlRpbWVsaW5lT3ZlcnZpZXcucHJvdG90eXBlLl9yZWNvcmRTZWxlY3Rl
ZCk6CisgICAgICAgIFdoZW4gc2VsZWN0aW5nIGEgQ1BVIHJlY29yZCwgbWFrZSBhIHNlbGVjdGlv
biByYW5nZSBvZiAyIG5laWdoYm9yaW5nCisgICAgICAgIGNvbHVtbnMgaW4gZWFjaCBkaXJlY3Rp
b24uCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1RpbWVsaW5lT3ZlcnZpZXdHcmFw
aC5qczoKKyAgICAgICAgKFdJLlRpbWVsaW5lT3ZlcnZpZXdHcmFwaC5wcm90b3R5cGUuZ2V0IHNl
bGVjdGVkKToKKyAgICAgICAgRHJpdmUtYnkgc3R5bGUgZml4LgorCiAyMDE5LTAzLTA1ICBKb3Nl
cGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogVGltZWxpbmVPdmVydmlldyBjbGlja3MgZG8gbm90IGFsd2F5cyBiZWhhdmUgYXMgZXhwZWN0
ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9UaW1lbGluZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9UaW1lbGluZS5qcwppbmRleCA1NGMzZjZhOTY0YS4uY2I5MDk0MmNkOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9UaW1lbGluZS5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvVGltZWxpbmUu
anMKQEAgLTkzLDYgKzkzLDI2IEBAIFdJLlRpbWVsaW5lID0gY2xhc3MgVGltZWxpbmUgZXh0ZW5k
cyBXSS5PYmplY3QKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuVGlt
ZWxpbmUuRXZlbnQuUmVmcmVzaGVkKTsKICAgICB9CiAKKyAgICBjbG9zZXN0UmVjb3JkVG8odGlt
ZXN0YW1wKQorICAgIHsKKyAgICAgICAgbGV0IGxvd2VySW5kZXggPSB0aGlzLl9yZWNvcmRzLmxv
d2VyQm91bmQodGltZXN0YW1wLCAodGltZSwgcmVjb3JkKSA9PiB0aW1lIC0gcmVjb3JkLmVuZFRp
bWUpOworCisgICAgICAgIGxldCByZWNvcmRCZWZvcmUgPSB0aGlzLl9yZWNvcmRzW2xvd2VySW5k
ZXggLSAxXTsKKyAgICAgICAgbGV0IHJlY29yZEFmdGVyID0gdGhpcy5fcmVjb3Jkc1tsb3dlcklu
ZGV4XTsKKyAgICAgICAgaWYgKCFyZWNvcmRCZWZvcmUgJiYgIXJlY29yZEFmdGVyKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIGlmICghcmVjb3JkQmVmb3JlICYmIHJlY29yZEFm
dGVyKQorICAgICAgICAgICAgcmV0dXJuIHJlY29yZEFmdGVyOworICAgICAgICBpZiAoIXJlY29y
ZEFmdGVyICYmIHJlY29yZEJlZm9yZSkKKyAgICAgICAgICAgIHJldHVybiByZWNvcmRCZWZvcmU7
CisKKyAgICAgICAgbGV0IGJlZm9yZSA9IE1hdGguYWJzKHJlY29yZEJlZm9yZS5lbmRUaW1lIC0g
dGltZXN0YW1wKTsKKyAgICAgICAgbGV0IGFmdGVyID0gTWF0aC5hYnMocmVjb3JkQWZ0ZXIuc3Rh
cnRUaW1lIC0gdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKGJlZm9yZSA8IGFmdGVyKQorICAgICAg
ICAgICAgcmV0dXJuIHJlY29yZEJlZm9yZTsKKyAgICAgICAgcmV0dXJuIHJlY29yZEFmdGVyOwor
ICAgIH0KKwogICAgIHJlY29yZHNPdmVybGFwcGluZ1RpbWVSYW5nZShzdGFydFRpbWUsIGVuZFRp
bWUpCiAgICAgewogICAgICAgICBsZXQgbG93ZXJJbmRleCA9IHRoaXMuX3JlY29yZHMubG93ZXJC
b3VuZChzdGFydFRpbWUsICh0aW1lLCByZWNvcmQpID0+IHRpbWUgLSByZWNvcmQuZW5kVGltZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9D
UFVUaW1lbGluZU92ZXJ2aWV3R3JhcGguY3NzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvQ1BVVGltZWxpbmVPdmVydmlld0dyYXBoLmNzcwppbmRleCBlNTA0ODBk
MDBhOS4uZDI2MDdlYjFhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0NQVVRpbWVsaW5lT3ZlcnZpZXdHcmFwaC5jc3MKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ1BVVGltZWxpbmVPdmVydmlld0dy
YXBoLmNzcwpAQCAtNTcsNiArNTcsMTAgQEAgYm9keVtkaXI9cnRsXSAudGltZWxpbmUtb3ZlcnZp
ZXctZ3JhcGguY3B1ID4gLmxlZ2VuZCB7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGlt
ZWxpbmUtZXZlbi1iYWNrZ3JvdW5kLWNvbG9yKTsKIH0KIAorLnRpbWVsaW5lLW92ZXJ2aWV3LWdy
YXBoLmNwdSA+IC5zdGFja2VkLWNvbHVtbi1jaGFydCB7CisgICAgei1pbmRleDogdmFyKC0tdGlt
ZWxpbmUtcmVjb3JkLXotaW5kZXgpOworfQorCiBib2R5W2Rpcj1ydGxdIC50aW1lbGluZS1vdmVy
dmlldy1ncmFwaC5jcHUgPiAuc3RhY2tlZC1jb2x1bW4tY2hhcnQgewogICAgIHRyYW5zZm9ybTog
c2NhbGVYKC0xKTsKIH0KQEAgLTc2LDYgKzgwLDEzIEBAIGJvZHlbZGlyPXJ0bF0gLnRpbWVsaW5l
LW92ZXJ2aWV3LWdyYXBoLmNwdSA+IC5zdGFja2VkLWNvbHVtbi1jaGFydCB7CiAgICAgc3Ryb2tl
OiB2YXIoLS1jcHUtd29ya2VyLXRocmVhZC1zdHJva2UtY29sb3IpOwogfQogCisudGltZWxpbmUt
b3ZlcnZpZXctZ3JhcGguY3B1ID4gLnN0YWNrZWQtY29sdW1uLWNoYXJ0ID4gc3ZnID4gcmVjdC5z
ZWxlY3RlZCB7CisgICAgZmlsbDogdmFyKC0tc2VsZWN0ZWQtYmFja2dyb3VuZC1jb2xvcikgIWlt
cG9ydGFudDsKKyAgICBzdHJva2U6IHZhcigtLXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3ItYWN0
aXZlKSAhaW1wb3J0YW50OworICAgIGZpbGwtb3BhY2l0eTogMC41OworICAgIHN0cm9rZS1vcGFj
aXR5OiAwLjg7Cit9CisKIC8qIExlZ2FjeUNQVVRpbWVsaW5lICovCiAudGltZWxpbmUtb3ZlcnZp
ZXctZ3JhcGguY3B1ID4gLmNvbHVtbi1jaGFydCA+IHN2ZyA+IHJlY3QgewogICAgIHN0cm9rZTog
dmFyKC0tY3B1LXN0cm9rZS1jb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9DUFVUaW1lbGluZU92ZXJ2aWV3R3JhcGguanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DUFVUaW1lbGluZU92ZXJ2aWV3
R3JhcGguanMKaW5kZXggMmIyZGQ3ODYwMTcuLmI4ZTNlZDk2M2U1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DUFVUaW1lbGluZU92ZXJ2aWV3
R3JhcGguanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
Q1BVVGltZWxpbmVPdmVydmlld0dyYXBoLmpzCkBAIC00NiwxMiArNDYsMjQgQEAgV0kuQ1BVVGlt
ZWxpbmVPdmVydmlld0dyYXBoID0gY2xhc3MgQ1BVVGltZWxpbmVPdmVydmlld0dyYXBoIGV4dGVu
ZHMgV0kuVGltZWxpbmUKICAgICAgICAgdGhpcy5hZGRTdWJ2aWV3KHRoaXMuX2NoYXJ0KTsKICAg
ICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2NoYXJ0LmVsZW1lbnQpOwogCisg
ICAgICAgIHRoaXMuX2NoYXJ0LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlz
Ll9oYW5kbGVHcmFwaE1vdXNlQ2xpY2suYmluZCh0aGlzKSk7CisKICAgICAgICAgdGhpcy5fbGVn
ZW5kRWxlbWVudCA9IHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKSk7CiAgICAgICAgIHRoaXMuX2xlZ2VuZEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgi
bGVnZW5kIik7CiAKKyAgICAgICAgdGhpcy5fbGFzdFNlbGVjdGVkUmVjb3JkTGF5b3V0ID0gbnVs
bDsKKwogICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgfQogCisgICAgLy8gU3RhdGljCisKKyAg
ICBzdGF0aWMgZ2V0IHNhbXBsaW5nUmF0ZVBlclNlY29uZCgpCisgICAgeworICAgICAgICAvLyA1
MDBtcy4gVGhpcyBtYXRjaGVzIHRoZSBSZXNvdXJjZVVzYWdlVGhyZWFkIHNhbXBsaW5nIGZyZXF1
ZW5jeSBpbiB0aGUgYmFja2VuZC4KKyAgICAgICAgcmV0dXJuIDAuNTsKKyAgICB9CisKICAgICAv
LyBQcm90ZWN0ZWQKIAogICAgIGdldCBoZWlnaHQoKQpAQCAtNjUsNiArNzcsNyBAQCBXSS5DUFVU
aW1lbGluZU92ZXJ2aWV3R3JhcGggPSBjbGFzcyBDUFVUaW1lbGluZU92ZXJ2aWV3R3JhcGggZXh0
ZW5kcyBXSS5UaW1lbGluZQogCiAgICAgICAgIHRoaXMuX21heFVzYWdlID0gMDsKICAgICAgICAg
dGhpcy5fY2FjaGVkTWF4VXNhZ2UgPSB1bmRlZmluZWQ7CisgICAgICAgIHRoaXMuX2xhc3RTZWxl
Y3RlZFJlY29yZExheW91dCA9IG51bGw7CiAKICAgICAgICAgdGhpcy5fdXBkYXRlTGVnZW5kKCk7
CiAgICAgICAgIHRoaXMuX2NoYXJ0LmNsZWFyKCk7CkBAIC04Myw2ICs5Niw4IEBAIFdJLkNQVVRp
bWVsaW5lT3ZlcnZpZXdHcmFwaCA9IGNsYXNzIENQVVRpbWVsaW5lT3ZlcnZpZXdHcmFwaCBleHRl
bmRzIFdJLlRpbWVsaW5lCiAgICAgICAgIGlmIChpc05hTihncmFwaFdpZHRoKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAorICAgICAgICB0aGlzLl9sYXN0U2VsZWN0ZWRSZWNvcmRMYXlvdXQgPSB0
aGlzLnNlbGVjdGVkUmVjb3JkOworCiAgICAgICAgIGlmICh0aGlzLl9jaGFydC5zaXplLndpZHRo
ICE9PSBncmFwaFdpZHRoIHx8IHRoaXMuX2NoYXJ0LnNpemUuaGVpZ2h0ICE9PSB0aGlzLmhlaWdo
dCkKICAgICAgICAgICAgIHRoaXMuX2NoYXJ0LnNpemUgPSBuZXcgV0kuU2l6ZShncmFwaFdpZHRo
LCB0aGlzLmhlaWdodCk7CiAKQEAgLTkxLDkgKzEwNiw2IEBAIFdJLkNQVVRpbWVsaW5lT3ZlcnZp
ZXdHcmFwaCA9IGNsYXNzIENQVVRpbWVsaW5lT3ZlcnZpZXdHcmFwaCBleHRlbmRzIFdJLlRpbWVs
aW5lCiAgICAgICAgIGxldCBzZWNvbmRzUGVyUGl4ZWwgPSB0aGlzLnRpbWVsaW5lT3ZlcnZpZXcu
c2Vjb25kc1BlclBpeGVsOwogICAgICAgICBsZXQgbWF4Q2FwYWNpdHkgPSBNYXRoLm1heCgyMCwg
dGhpcy5fbWF4VXNhZ2UgKiAxLjA1KTsgLy8gQWRkIDUlIGZvciBwYWRkaW5nLgogCi0gICAgICAg
IC8vIDUwMG1zLiBUaGlzIG1hdGNoZXMgdGhlIFJlc291cmNlVXNhZ2VUaHJlYWQgc2FtcGxpbmcg
ZnJlcXVlbmN5IGluIHRoZSBiYWNrZW5kLgotICAgICAgICBjb25zdCBzYW1wbGluZ1JhdGVQZXJT
ZWNvbmQgPSAwLjU7Ci0KICAgICAgICAgZnVuY3Rpb24geFNjYWxlKHRpbWUpIHsKICAgICAgICAg
ICAgIHJldHVybiAodGltZSAtIGdyYXBoU3RhcnRUaW1lKSAvIHNlY29uZHNQZXJQaXhlbDsKICAg
ICAgICAgfQpAQCAtMTA0LDcgKzExNiw3IEBAIFdJLkNQVVRpbWVsaW5lT3ZlcnZpZXdHcmFwaCA9
IGNsYXNzIENQVVRpbWVsaW5lT3ZlcnZpZXdHcmFwaCBleHRlbmRzIFdJLlRpbWVsaW5lCiAgICAg
ICAgIH0KIAogICAgICAgICBjb25zdCBpbmNsdWRlUmVjb3JkQmVmb3JlU3RhcnQgPSB0cnVlOwot
ICAgICAgICBsZXQgdmlzaWJsZVJlY29yZHMgPSB0aGlzLl9jcHVUaW1lbGluZS5yZWNvcmRzSW5U
aW1lUmFuZ2UoZ3JhcGhTdGFydFRpbWUsIHZpc2libGVFbmRUaW1lICsgKHNhbXBsaW5nUmF0ZVBl
clNlY29uZCAvIDIpLCBpbmNsdWRlUmVjb3JkQmVmb3JlU3RhcnQpOworICAgICAgICBsZXQgdmlz
aWJsZVJlY29yZHMgPSB0aGlzLl9jcHVUaW1lbGluZS5yZWNvcmRzSW5UaW1lUmFuZ2UoZ3JhcGhT
dGFydFRpbWUsIHZpc2libGVFbmRUaW1lICsgKFdJLkNQVVRpbWVsaW5lT3ZlcnZpZXdHcmFwaC5z
YW1wbGluZ1JhdGVQZXJTZWNvbmQgLyAyKSwgaW5jbHVkZVJlY29yZEJlZm9yZVN0YXJ0KTsKICAg
ICAgICAgaWYgKCF2aXNpYmxlUmVjb3Jkcy5sZW5ndGgpCiAgICAgICAgICAgICByZXR1cm47CiAK
QEAgLTExMiwyMyArMTI0LDMyIEBAIFdJLkNQVVRpbWVsaW5lT3ZlcnZpZXdHcmFwaCA9IGNsYXNz
IENQVVRpbWVsaW5lT3ZlcnZpZXdHcmFwaCBleHRlbmRzIFdJLlRpbWVsaW5lCiAgICAgICAgICAg
ICByZXR1cm4geVNjYWxlKHJlY29yZC51c2FnZSk7CiAgICAgICAgIH0KIAotICAgICAgICBsZXQg
aW50ZXJ2YWxXaWR0aCA9IChzYW1wbGluZ1JhdGVQZXJTZWNvbmQgLyBzZWNvbmRzUGVyUGl4ZWwp
OworICAgICAgICBsZXQgaW50ZXJ2YWxXaWR0aCA9IChXSS5DUFVUaW1lbGluZU92ZXJ2aWV3R3Jh
cGguc2FtcGxpbmdSYXRlUGVyU2Vjb25kIC8gc2Vjb25kc1BlclBpeGVsKTsKICAgICAgICAgY29u
c3QgbWluaW11bURpc3BsYXlIZWlnaHQgPSA0OwogCiAgICAgICAgIC8vIEJhcnMgZm9yIGVhY2gg
cmVjb3JkLgogICAgICAgICBmb3IgKGxldCByZWNvcmQgb2YgdmlzaWJsZVJlY29yZHMpIHsKICAg
ICAgICAgICAgIGxldCB3ID0gaW50ZXJ2YWxXaWR0aDsKICAgICAgICAgICAgIGxldCBoMyA9IE1h
dGgubWF4KG1pbmltdW1EaXNwbGF5SGVpZ2h0LCB5U2NhbGUocmVjb3JkLnVzYWdlKSk7Ci0gICAg
ICAgICAgICBsZXQgeCA9IHhTY2FsZShyZWNvcmQuc3RhcnRUaW1lIC0gKHNhbXBsaW5nUmF0ZVBl
clNlY29uZCAvIDIpKTsKKyAgICAgICAgICAgIGxldCB4ID0geFNjYWxlKHJlY29yZC5zdGFydFRp
bWUgLSAoV0kuQ1BVVGltZWxpbmVPdmVydmlld0dyYXBoLnNhbXBsaW5nUmF0ZVBlclNlY29uZCAv
IDIpKTsKICAgICAgICAgICAgIGlmIChXSS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVDUFVV
c2FnZUVuaGFuY2VtZW50cy52YWx1ZSkgeworICAgICAgICAgICAgICAgIGxldCBhZGRpdGlvbmFs
Q2xhc3MgPSByZWNvcmQgPT09IHRoaXMuc2VsZWN0ZWRSZWNvcmQgPyAic2VsZWN0ZWQiIDogdW5k
ZWZpbmVkOwogICAgICAgICAgICAgICAgIGxldCBoMSA9IE1hdGgubWF4KG1pbmltdW1EaXNwbGF5
SGVpZ2h0LCB5U2NhbGUocmVjb3JkLm1haW5UaHJlYWRVc2FnZSkpOwogICAgICAgICAgICAgICAg
IGxldCBoMiA9IE1hdGgubWF4KG1pbmltdW1EaXNwbGF5SGVpZ2h0LCB5U2NhbGUocmVjb3JkLm1h
aW5UaHJlYWRVc2FnZSArIHJlY29yZC53b3JrZXJUaHJlYWRVc2FnZSkpOwotICAgICAgICAgICAg
ICAgIHRoaXMuX2NoYXJ0LmFkZENvbHVtblNldCh4LCBoZWlnaHQsIHcsIFtoMSwgaDIsIGgzXSk7
CisgICAgICAgICAgICAgICAgdGhpcy5fY2hhcnQuYWRkQ29sdW1uU2V0KHgsIGhlaWdodCwgdywg
W2gxLCBoMiwgaDNdLCBhZGRpdGlvbmFsQ2xhc3MpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgdGhpcy5fY2hhcnQuYWRkQ29sdW1uKHgsIGhlaWdodCAtIGgzLCB3LCBoMyk7
CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB1cGRhdGVTZWxlY3RlZFJlY29yZCgpCisgICAgewor
ICAgICAgICBzdXBlci51cGRhdGVTZWxlY3RlZFJlY29yZCgpOworCisgICAgICAgIGlmICh0aGlz
Ll9sYXN0U2VsZWN0ZWRSZWNvcmRMYXlvdXQgIT09IHRoaXMuc2VsZWN0ZWRSZWNvcmQpCisgICAg
ICAgICAgICB0aGlzLm5lZWRzTGF5b3V0KCk7CisgICAgfQorCiAgICAgLy8gUHJpdmF0ZQogCiAg
ICAgX3VwZGF0ZUxlZ2VuZCgpCkBAIC0xNDcsNiArMTY4LDU1IEBAIFdJLkNQVVRpbWVsaW5lT3Zl
cnZpZXdHcmFwaCA9IGNsYXNzIENQVVRpbWVsaW5lT3ZlcnZpZXdHcmFwaCBleHRlbmRzIFdJLlRp
bWVsaW5lCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBfZ3JhcGhQb3NpdGlvbkZvck1vdXNlRXZl
bnQoZXZlbnQpCisgICAgeworICAgICAgICAvLyBPbmx5IHRyaWdnZXIgaWYgY2xpY2tpbmcgb24g
YSByZWN0LCBub3QgYW55d2hlcmUgaW4gdGhlIGdyYXBoLgorICAgICAgICBsZXQgZWxlbWVudHMg
PSBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludChldmVudC5wYWdlWCwgZXZlbnQucGFnZVkpOwor
ICAgICAgICBsZXQgcmVjdEVsZW1lbnQgPSBlbGVtZW50cy5maW5kKCh4KSA9PiB4LmxvY2FsTmFt
ZSA9PT0gInJlY3QiKTsKKyAgICAgICAgaWYgKCFyZWN0RWxlbWVudCkgeworICAgICAgICAgICAg
Ly8gVHJ5IGFnYWluIGxvd2VyLCBzaW5jZSB0aGUgc2Nyb2xsIGJhciBwcmV2ZW50cyBsb3cgY2xp
Y2tzLgorICAgICAgICAgICAgY29uc3QgdHJ5TG93ZXJPZmZzZXQgPSA1OworICAgICAgICAgICAg
ZWxlbWVudHMgPSBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludChldmVudC5wYWdlWCwgZXZlbnQu
cGFnZVkgKyB0cnlMb3dlck9mZnNldCk7CisgICAgICAgICAgICByZWN0RWxlbWVudCA9IGVsZW1l
bnRzLmZpbmQoKHgpID0+IHgubG9jYWxOYW1lID09PSAicmVjdCIpOworICAgICAgICAgICAgaWYg
KCFyZWN0RWxlbWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICB9CisK
KyAgICAgICAgbGV0IGNoYXJ0RWxlbWVudCA9IHJlY3RFbGVtZW50LmNsb3Nlc3QoIi5zdGFja2Vk
LWNvbHVtbi1jaGFydCIpOworICAgICAgICBpZiAoIWNoYXJ0RWxlbWVudCkKKyAgICAgICAgICAg
IHJldHVybiBOYU47CisKKyAgICAgICAgbGV0IHJlY3QgPSBjaGFydEVsZW1lbnQuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCk7CisgICAgICAgIGxldCBwb3NpdGlvbiA9IGV2ZW50LnBhZ2VYIC0gcmVj
dC5sZWZ0OworCisgICAgICAgIGlmIChXSS5yZXNvbHZlZExheW91dERpcmVjdGlvbigpID09PSBX
SS5MYXlvdXREaXJlY3Rpb24uUlRMKQorICAgICAgICAgICAgcmV0dXJuIHJlY3Qud2lkdGggLSBw
b3NpdGlvbjsKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgIH0KKworICAgIF9oYW5kbGVH
cmFwaE1vdXNlQ2xpY2soZXZlbnQpCisgICAgeworICAgICAgICBsZXQgY2xpY2tQb3NpdGlvbiA9
IHRoaXMuX2dyYXBoUG9zaXRpb25Gb3JNb3VzZUV2ZW50KGV2ZW50KTsKKyAgICAgICAgaWYgKGlz
TmFOKGNsaWNrUG9zaXRpb24pKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBz
ZWNvbmRzUGVyUGl4ZWwgPSB0aGlzLnRpbWVsaW5lT3ZlcnZpZXcuc2Vjb25kc1BlclBpeGVsOwor
ICAgICAgICBsZXQgZ3JhcGhDbGlja1RpbWUgPSBjbGlja1Bvc2l0aW9uICogc2Vjb25kc1BlclBp
eGVsOworICAgICAgICBsZXQgZ3JhcGhTdGFydFRpbWUgPSB0aGlzLnN0YXJ0VGltZTsKKworICAg
ICAgICBsZXQgY2xpY2tUaW1lID0gZ3JhcGhTdGFydFRpbWUgKyBncmFwaENsaWNrVGltZTsKKyAg
ICAgICAgbGV0IHJlY29yZCA9IHRoaXMuX2NwdVRpbWVsaW5lLmNsb3Nlc3RSZWNvcmRUbyhjbGlj
a1RpbWUpOworICAgICAgICBjb25zb2xlLmxvZygiY2xpY2siLCByZWNvcmQpOworICAgICAgICBp
ZiAoIXJlY29yZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBFbnN1cmUgdGhh
dCB0aGUgY29udGFpbmVyICJjbGljayIgbGlzdGVuZXIgYWRkZWQgYnkgYFdJLlRpbWVsaW5lT3Zl
cnZpZXdgIGlzbid0IGNhbGxlZC4KKyAgICAgICAgZXZlbnQuX190aW1lbGluZVJlY29yZEJhckNs
aWNrID0gdHJ1ZTsKKworICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gcmVjb3JkOworICAg
ICAgICB0aGlzLm5lZWRzTGF5b3V0KCk7CisgICAgfQorCiAgICAgX2NwdVRpbWVsaW5lUmVjb3Jk
QWRkZWQoZXZlbnQpCiAgICAgewogICAgICAgICBsZXQgY3B1VGltZWxpbmVSZWNvcmQgPSBldmVu
dC5kYXRhLnJlY29yZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1N0YWNrZWRDb2x1bW5DaGFydC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1N0YWNrZWRDb2x1bW5DaGFydC5qcwppbmRleCAzYThlZGIx
ODViYi4uMzhjNjE3Y2JiZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1N0YWNrZWRDb2x1bW5DaGFydC5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TdGFja2VkQ29sdW1uQ2hhcnQuanMKQEAgLTg0
LDExICs4NCwxMSBAQCBXSS5TdGFja2VkQ29sdW1uQ2hhcnQgPSBjbGFzcyBTdGFja2VkQ29sdW1u
Q2hhcnQgZXh0ZW5kcyBXSS5WaWV3CiAgICAgICAgIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbkNs
YXNzTmFtZXM7CiAgICAgfQogCi0gICAgYWRkQ29sdW1uU2V0KHgsIHRvdGFsSGVpZ2h0LCB3aWR0
aCwgaGVpZ2h0cykKKyAgICBhZGRDb2x1bW5TZXQoeCwgdG90YWxIZWlnaHQsIHdpZHRoLCBoZWln
aHRzLCBhZGRpdGlvbmFsQ2xhc3MpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChoZWln
aHRzLmxlbmd0aCA9PT0gdGhpcy5fc2VjdGlvbnMubGVuZ3RoLCAiV3JvbmcgbnVtYmVyIG9mIHNl
Y3Rpb25zIGluIGNvbHVtbnMgc2V0IiwgaGVpZ2h0cy5sZW5ndGgsIHRoaXMuX3NlY3Rpb25zLmxl
bmd0aCk7CiAKLSAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKHt4LCB0b3RhbEhlaWdodCwgd2lk
dGgsIGhlaWdodHN9KTsKKyAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKHt4LCB0b3RhbEhlaWdo
dCwgd2lkdGgsIGhlaWdodHMsIGFkZGl0aW9uYWxDbGFzc30pOwogICAgIH0KIAogICAgIGNsZWFy
KCkKQEAgLTEwNyw3ICsxMDcsNyBAQCBXSS5TdGFja2VkQ29sdW1uQ2hhcnQgPSBjbGFzcyBTdGFj
a2VkQ29sdW1uQ2hhcnQgZXh0ZW5kcyBXSS5WaWV3CiAKICAgICAgICAgdGhpcy5fc3ZnRWxlbWVu
dC5yZW1vdmVDaGlsZHJlbigpOwogCi0gICAgICAgIGZvciAobGV0IHt4LCB0b3RhbEhlaWdodCwg
d2lkdGgsIGhlaWdodHN9IG9mIHRoaXMuX2NvbHVtbnMpIHsKKyAgICAgICAgZm9yIChsZXQge3gs
IHRvdGFsSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0cywgYWRkaXRpb25hbENsYXNzfSBvZiB0aGlzLl9j
b2x1bW5zKSB7CiAgICAgICAgICAgICBmb3IgKGxldCBpID0gaGVpZ2h0cy5sZW5ndGggLSAxOyBp
ID49IDA7IC0taSkgewogICAgICAgICAgICAgICAgIGxldCBoZWlnaHQgPSBoZWlnaHRzW2ldOwog
ICAgICAgICAgICAgICAgIC8vIE5leHQgcmVjdCB3aWxsIGJlIGlkZW50aWNhbCwgc2tpcCB0aGlz
IG9uZS4KQEAgLTExNiw2ICsxMTYsOCBAQCBXSS5TdGFja2VkQ29sdW1uQ2hhcnQgPSBjbGFzcyBT
dGFja2VkQ29sdW1uQ2hhcnQgZXh0ZW5kcyBXSS5WaWV3CiAgICAgICAgICAgICAgICAgbGV0IHkg
PSB0b3RhbEhlaWdodCAtIGhlaWdodDsKICAgICAgICAgICAgICAgICBsZXQgcmVjdCA9IHRoaXMu
X3N2Z0VsZW1lbnQuYXBwZW5kQ2hpbGQoY3JlYXRlU1ZHRWxlbWVudCgicmVjdCIpKTsKICAgICAg
ICAgICAgICAgICByZWN0LmNsYXNzTGlzdC5hZGQodGhpcy5fc2VjdGlvbnNbaV0pOworICAgICAg
ICAgICAgICAgIGlmIChhZGRpdGlvbmFsQ2xhc3MpCisgICAgICAgICAgICAgICAgICAgIHJlY3Qu
Y2xhc3NMaXN0LmFkZChhZGRpdGlvbmFsQ2xhc3MpOwogICAgICAgICAgICAgICAgIHJlY3Quc2V0
QXR0cmlidXRlKCJ3aWR0aCIsIHdpZHRoKTsKICAgICAgICAgICAgICAgICByZWN0LnNldEF0dHJp
YnV0ZSgiaGVpZ2h0IiwgaGVpZ2h0KTsKICAgICAgICAgICAgICAgICByZWN0LnNldEF0dHJpYnV0
ZSgidHJhbnNmb3JtIiwgYHRyYW5zbGF0ZSgke3h9LCAke3l9KWApOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGltZWxpbmVPdmVydmlldy5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RpbWVsaW5lT3Zl
cnZpZXcuanMKaW5kZXggMzNiMGFlYTMwZjEuLmY0YmQ3NWE3ZDYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UaW1lbGluZU92ZXJ2aWV3Lmpz
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RpbWVsaW5l
T3ZlcnZpZXcuanMKQEAgLTc2Niw3ICs3NjYsMTEgQEAgV0kuVGltZWxpbmVPdmVydmlldyA9IGNs
YXNzIFRpbWVsaW5lT3ZlcnZpZXcgZXh0ZW5kcyBXSS5WaWV3CiAgICAgICAgICAgICBsZXQgc3Rh
cnRUaW1lID0gZmlyc3RSZWNvcmQgaW5zdGFuY2VvZiBXSS5SZW5kZXJpbmdGcmFtZVRpbWVsaW5l
UmVjb3JkID8gZmlyc3RSZWNvcmQuZnJhbWVJbmRleCA6IGZpcnN0UmVjb3JkLnN0YXJ0VGltZTsK
ICAgICAgICAgICAgIGxldCBlbmRUaW1lID0gbGFzdFJlY29yZCBpbnN0YW5jZW9mIFdJLlJlbmRl
cmluZ0ZyYW1lVGltZWxpbmVSZWNvcmQgPyBsYXN0UmVjb3JkLmZyYW1lSW5kZXggOiBsYXN0UmVj
b3JkLmVuZFRpbWU7CiAKLSAgICAgICAgICAgIGlmIChzdGFydFRpbWUgPCB0aGlzLnNlbGVjdGlv
blN0YXJ0VGltZSB8fCBlbmRUaW1lID4gdGhpcy5zZWxlY3Rpb25TdGFydFRpbWUgKyB0aGlzLnNl
bGVjdGlvbkR1cmF0aW9uKSB7CisgICAgICAgICAgICBpZiAoZmlyc3RSZWNvcmQgaW5zdGFuY2Vv
ZiBXSS5DUFVUaW1lbGluZVJlY29yZCkgeworICAgICAgICAgICAgICAgIGxldCBzZWxlY3Rpb25Q
YWRkaW5nID0gMi4yNSAqIFdJLkNQVVRpbWVsaW5lT3ZlcnZpZXdHcmFwaC5zYW1wbGluZ1JhdGVQ
ZXJTZWNvbmQ7CisgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGFydFRpbWUgPSBzdGFy
dFRpbWUgLSBzZWxlY3Rpb25QYWRkaW5nOworICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9u
RHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lICsgKHNlbGVjdGlvblBhZGRpbmcgKiAyKTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRUaW1lIDwgdGhpcy5zZWxlY3Rpb25TdGFydFRp
bWUgfHwgZW5kVGltZSA+IHRoaXMuc2VsZWN0aW9uU3RhcnRUaW1lICsgdGhpcy5zZWxlY3Rpb25E
dXJhdGlvbikgewogICAgICAgICAgICAgICAgIGxldCBzZWxlY3Rpb25QYWRkaW5nID0gdGhpcy5z
ZWNvbmRzUGVyUGl4ZWwgKiAxMDsKICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0
VGltZSA9IHN0YXJ0VGltZSAtIHNlbGVjdGlvblBhZGRpbmc7CiAgICAgICAgICAgICAgICAgdGhp
cy5zZWxlY3Rpb25EdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRpbWUgKyAoc2VsZWN0aW9uUGFk
ZGluZyAqIDIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvVGltZWxpbmVPdmVydmlld0dyYXBoLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvVGltZWxpbmVPdmVydmlld0dyYXBoLmpzCmluZGV4IDMxNzM1
M2FkYmYwLi5hOTRmNDdmZGNhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvVGltZWxpbmVPdmVydmlld0dyYXBoLmpzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RpbWVsaW5lT3ZlcnZpZXdHcmFwaC5q
cwpAQCAtMjA0LDcgKzIwNCwxMCBAQCBXSS5UaW1lbGluZU92ZXJ2aWV3R3JhcGggPSBjbGFzcyBU
aW1lbGluZU92ZXJ2aWV3R3JhcGggZXh0ZW5kcyBXSS5WaWV3CiAgICAgICAgIHJldHVybiAzNjsK
ICAgICB9CiAKLSAgICBnZXQgc2VsZWN0ZWQoKSB7IHJldHVybiB0aGlzLl9zZWxlY3RlZDsgfQor
ICAgIGdldCBzZWxlY3RlZCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7
CisgICAgfQogCiAgICAgc2V0IHNlbGVjdGVkKHgpCiAgICAgewo=
</data>
<flag name="review"
          id="380218"
          type_id="1"
          status="+"
          setter="hi"
    />
          </attachment>
      

    </bug>

</bugzilla>