<?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>199051</bug_id>
          
          <creation_ts>2019-06-19 18:31:55 -0700</creation_ts>
          <short_desc>[perf.webkit.org] Add &apos;back in time&apos; feature for Summary pages</short_desc>
          <delta_ts>2022-07-02 15:08:25 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Johnson">dean_johnson</reporter>
          <assigned_to name="Dean Johnson">dean_johnson</assigned_to>
          <cc>dean_johnson</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1546356</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-06-19 18:31:55 -0700</bug_when>
    <thetext>I would like to be able to look at the historical data for summary pages on perf.webkit.org. This becomes very useful when trying to understand decisions made based on previous performance statuses, and how performance changes over time.

Ideally, this would have an interface that looks similar to what&apos;s used on Charts pages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546357</commentid>
    <comment_count>1</comment_count>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-06-19 18:32:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/51761726&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546442</commentid>
    <comment_count>2</comment_count>
      <attachid>372540</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-06-19 23:11:08 -0700</bug_when>
    <thetext>Created attachment 372540
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546729</commentid>
    <comment_count>3</comment_count>
      <attachid>372600</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-06-20 16:21:41 -0700</bug_when>
    <thetext>Created attachment 372600
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546730</commentid>
    <comment_count>4</comment_count>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-06-20 16:22:21 -0700</bug_when>
    <thetext>New patch uses `const` instead of `var` in new code on public/v3/pages/summary-page.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547580</commentid>
    <comment_count>5</comment_count>
      <attachid>372600</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-06-24 16:20:35 -0700</bug_when>
    <thetext>Comment on attachment 372600
Patch

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

&gt; Websites/perf.webkit.org/public/v3/pages/charts-toolbar.js:2
&gt; -class ChartsToolbar extends DomainControlToolbar {
&gt; +class ChartsToolbar extends SliderToolbar {

SliderToolbar is a presentational name, not semantic; i.e. it doesn&apos;t tell us what it&apos;s sliding.
How about ContinuousDomainControlToolbar or ContinuousDomainToolbar?

&gt; Websites/perf.webkit.org/public/v3/pages/charts-toolbar.js:-54
&gt; -    setStartTime(startTime)

This function needs to be updated to force startTime to be at least one day.

&gt; Websites/perf.webkit.org/public/v3/pages/charts-toolbar.js:75
&gt; +                ${ super.htmlTemplate() }

I don&apos;t think this super call is needed. There is no template defined in DomainControlToolbar.

&gt; Websites/perf.webkit.org/public/v3/pages/domain-control-toolbar.js:31
&gt; -        if (!numberOfDays)
&gt; +        if (!numberOfDays &amp;&amp; numberOfDays !== 0)

A better way to check this is typeof(numberOfDays) != &apos;number&apos;.

&gt; Websites/perf.webkit.org/public/v3/pages/slider-toolbar.js:22
&gt; +        this._labelSpan = this.content().querySelector(&apos;.day-count&apos;);

_labelSpan is a terrible variable name. We should rename it to something more descriptive like _dayCount.
We also use id content attribute to refer to it instead of a class.

&gt; Websites/perf.webkit.org/public/v3/pages/slider-toolbar.js:38
&gt; +    setStartTime(startTime)

Use the default argument: startTime = this._defaultNumberOfDays

&gt; Websites/perf.webkit.org/public/v3/pages/slider-toolbar.js:59
&gt; +        this._editor.style.opacity = 1;

Ugh... this is pretty bad. We should be simply enqueuing this element to be re-rendered instead.
I guess we can leave it as is for now.

&gt; Websites/perf.webkit.org/public/v3/pages/slider-toolbar.js:102
&gt; +                &lt;ul class=&quot;buttoned-toolbar&quot;&gt;

Nit: We should outdent these markups by 4 space since this line should appear
exactly 4 spaces to the right of the beginning of &quot;return&quot; above.

In WebKit style guideline, each indentation is done by exactly 4 spaces,
and it should never be aligned to anything else.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:16
&gt; +        this._labelSpan.style.width = &apos;1.25rem&apos;;
&gt; +        this._dayCountDescription.style.width = &apos;4.5rem&apos;;

In general, these kinds of style updates are best done via setting class names.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:27
&gt; +    {

A better design is to replace the content of &lt;span id=&quot;label&quot;&gt; in SliderToolbar.
Here, you can do something like:

super.render();
const shouldShowCurrent = !this._numberOfDays &amp;&amp; !this._inTextMode;
if (shouldShowCurrent)
    this.content(&apos;label&apos;).classList.add(&apos;current&apos;);
else
    this.content(&apos;label&apos;).classList.remove(&apos;current&apos;);

Then you&apos;d hide day-count by setting `display: none` when the span matches `.current`

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:29
&gt; +        if (this._numberOfDays === 0 &amp;&amp; !this._inTextMode) {

Nit: No curly braces around single statements.
Nit: No comparison against 0.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:32
&gt; +            this._removeSliderTextFormattingForZeroDays();

Ditto.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:36
&gt; +    _enterTextMode(event)

We should make _enterTextMode &amp; _exitTextMode simply invoke this.enqueueToRender() instead.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:39
&gt; +        this._inTextMode = true;

We should make the super class provide this functionality instead.
But really, we should be setting `text-mode` class or something to avoid manually managing this state in JS.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:54
&gt; +        return `&lt;label id=&quot;day-count-description&quot; class=&quot;label&quot;&gt;&lt;/label&gt;`;

This would generate incorrect markup. We should be having a label element inside another label element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547754</commentid>
    <comment_count>6</comment_count>
      <attachid>372600</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-06-25 11:46:05 -0700</bug_when>
    <thetext>Comment on attachment 372600
Patch

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

Thank you for the review comments! Applied most comments, and uploading a new patch now. Let&apos;s chat in-person to discuss CSS / styling on the editor and label text as I was having some trouble getting a coherent implementation together.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/charts-toolbar.js:2
&gt;&gt; +class ChartsToolbar extends SliderToolbar {
&gt; 
&gt; SliderToolbar is a presentational name, not semantic; i.e. it doesn&apos;t tell us what it&apos;s sliding.
&gt; How about ContinuousDomainControlToolbar or ContinuousDomainToolbar?

Sure, will update to ContinuousDomainToolbar.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/charts-toolbar.js:-54
&gt;&gt; -    setStartTime(startTime)
&gt; 
&gt; This function needs to be updated to force startTime to be at least one day.

Updated patch adds a check for &lt; 1, and forces to 1 if true. Please let me know if there&apos;s a cleaner way to do this for ChartsToolbar, given the new dependence on ContinousDomainToolbar.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/charts-toolbar.js:75
&gt;&gt; +                ${ super.htmlTemplate() }
&gt; 
&gt; I don&apos;t think this super call is needed. There is no template defined in DomainControlToolbar.

Due to how the inheritence structure changed, this is now calling to DomainControlToolbar (previously: SliderToolbar). And we do need the htmlTemplate from there, unless I&apos;m misunderstanding something.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/domain-control-toolbar.js:31
&gt;&gt; +        if (!numberOfDays &amp;&amp; numberOfDays !== 0)
&gt; 
&gt; A better way to check this is typeof(numberOfDays) != &apos;number&apos;.

Updated.
Note: Removed !numberOfDays check since it seemed redundant with the new one.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/slider-toolbar.js:22
&gt;&gt; +        this._labelSpan = this.content().querySelector(&apos;.day-count&apos;);
&gt; 
&gt; _labelSpan is a terrible variable name. We should rename it to something more descriptive like _dayCount.
&gt; We also use id content attribute to refer to it instead of a class.

For what it&apos;s worth, this was just a migration from ChartsToolbar. I will make both requested changes.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/slider-toolbar.js:38
&gt;&gt; +    setStartTime(startTime)
&gt; 
&gt; Use the default argument: startTime = this._defaultNumberOfDays

Done.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/slider-toolbar.js:102
&gt;&gt; +                &lt;ul class=&quot;buttoned-toolbar&quot;&gt;
&gt; 
&gt; Nit: We should outdent these markups by 4 space since this line should appear
&gt; exactly 4 spaces to the right of the beginning of &quot;return&quot; above.
&gt; 
&gt; In WebKit style guideline, each indentation is done by exactly 4 spaces,
&gt; and it should never be aligned to anything else.

Understood, thank you.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:27
&gt;&gt; +    {
&gt; 
&gt; A better design is to replace the content of &lt;span id=&quot;label&quot;&gt; in SliderToolbar.
&gt; Here, you can do something like:
&gt; 
&gt; super.render();
&gt; const shouldShowCurrent = !this._numberOfDays &amp;&amp; !this._inTextMode;
&gt; if (shouldShowCurrent)
&gt;     this.content(&apos;label&apos;).classList.add(&apos;current&apos;);
&gt; else
&gt;     this.content(&apos;label&apos;).classList.remove(&apos;current&apos;);
&gt; 
&gt; Then you&apos;d hide day-count by setting `display: none` when the span matches `.current`

Let&apos;s chat in-person about this - my attempts at addressing your comments are coming out looking pretty bad compared to the current proposed implementation (readability / implementation-wise).

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:36
&gt;&gt; +    _enterTextMode(event)
&gt; 
&gt; We should make _enterTextMode &amp; _exitTextMode simply invoke this.enqueueToRender() instead.

Ah, great call. It doesn&apos;t seem like ContinuousDomainToolbar needs to use this.enqueueToRender(), so for now I&apos;ll do it in SummaryToolbar. Please let me know if you think it should be in ContinuousDomainToolbar instead.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:39
&gt;&gt; +        this._inTextMode = true;
&gt; 
&gt; We should make the super class provide this functionality instead.
&gt; But really, we should be setting `text-mode` class or something to avoid manually managing this state in JS.

Moved _inTextMode to ContinuousDomainToolbar. I can take a stab at a &apos;text-mode&apos; class if you&apos;d like, but would like to discuss more of exactly how that should look first if I do.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:54
&gt;&gt; +        return `&lt;label id=&quot;day-count-description&quot; class=&quot;label&quot;&gt;&lt;/label&gt;`;
&gt; 
&gt; This would generate incorrect markup. We should be having a label element inside another label element.

Thanks for the note. Will use span instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547830</commentid>
    <comment_count>7</comment_count>
      <attachid>372867</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-06-25 14:55:03 -0700</bug_when>
    <thetext>Created attachment 372867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547859</commentid>
    <comment_count>8</comment_count>
      <attachid>372867</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-06-25 16:13:41 -0700</bug_when>
    <thetext>Comment on attachment 372867
Patch

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

&gt; Websites/perf.webkit.org/public/v3/pages/charts-toolbar.js:34
&gt; +        if (startTime &lt; 1)
&gt; +            startTime = 1;
&gt; +        super.setStartTime(startTime);

It&apos;s more succinct to just say: super.setStartTime(Math.max(1, startTime));

&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:12
&gt; +        this._slider = this.content().querySelector(&apos;.slider&apos;);

I know you&apos;re just moving the code around but can we use the ID for slider?

&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:17
&gt; +        this._editor = this.content().querySelector(&apos;.editor&apos;);

Ditto.

&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:80
&gt; +        var numberOfDays = Math.round(Math.pow(parseFloat(this._slider.value), 3));

Use const?

&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:87
&gt; +        var rawNumber = Math.round(parseFloat(this._editor.value));
&gt; +        var numberOfDays = Math.max(this._minDayCount, Math.min(this._maxDayCount, rawNumber));

Ditto.

&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:95
&gt; +        var shouldUpdateState = event.type == &apos;change&apos;;

Ditto.

&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:96
&gt; +        if ((this.numberOfDays() != numberOfDays || shouldUpdateState) &amp;&amp; this._numberOfDaysCallback)

This code is so old... No use of LazilyEvaluatedFunction...

&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:100
&gt; +    static daysCountLabelText() { return ` days`; }

No need for a space before &quot;days&quot;.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:34
&gt; +        this.toolbar().setNumberOfDays(0, true);

In general, toolbar state shouldn&apos;t change from a page to page.
If the user had selected 5 days ago, then we don&apos;t want to move that to &quot;Current&quot; just because the user navigated to a new summary page.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:35
&gt; +        this.toolbar().enqueueToRender();

This isn&apos;t right. Toolbar should be enqueing itself to render on its own upon state transition.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:36
&gt; +        this.toolbar().setNumberOfDaysCallback(this.setNumberOfDaysFromToolbar.bind(this))

Ugh... this is bad. We shouldn&apos;t have to do this but we&apos;d have to for now.
Also, the toolbar isn&apos;t set until super.open is called so this code isn&apos;t right.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:42
&gt; +    updateAndRenderForRange(days)
&gt; +    {

We should be getting the number of days out of the toolbar instead.
Also, this function never render anything.
A better name would be _fetchForNumberOfDays

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:45
&gt; +        var oneDay = 24 * 3600 * 1000;
&gt; +        var timeRange = [current - oneDay - (days * oneDay), current - (days * oneDay)];

Use const?

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:7
&gt; +        this._minDayCount = 0;
&gt; +        this._maxDayCount = 366;

We don&apos;t want to be reaching into super class&apos; instance variable like this.
Probably better to add an explicit setter like _setAllowedDayCountRange or something.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:13
&gt; +    _addSliderTextFormattingForZeroDays() {
&gt; +        this._dayCountSpan.textContent = &apos;&apos;;

Let&apos;s discuss this in person.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547893</commentid>
    <comment_count>9</comment_count>
      <attachid>372867</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-06-25 17:02:45 -0700</bug_when>
    <thetext>Comment on attachment 372867
Patch

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

Addressed most comments. Will chat in-person about styling, potential query params on Summary pages, and preserving slider state between Charts &lt;-&gt; Summary toolbars.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/charts-toolbar.js:34
&gt;&gt; +        super.setStartTime(startTime);
&gt; 
&gt; It&apos;s more succinct to just say: super.setStartTime(Math.max(1, startTime));

Good catch. Fixed.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:12
&gt;&gt; +        this._slider = this.content().querySelector(&apos;.slider&apos;);
&gt; 
&gt; I know you&apos;re just moving the code around but can we use the ID for slider?

Sure. Done.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:17
&gt;&gt; +        this._editor = this.content().querySelector(&apos;.editor&apos;);
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:80
&gt;&gt; +        var numberOfDays = Math.round(Math.pow(parseFloat(this._slider.value), 3));
&gt; 
&gt; Use const?

Fixed.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:87
&gt;&gt; +        var numberOfDays = Math.max(this._minDayCount, Math.min(this._maxDayCount, rawNumber));
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:95
&gt;&gt; +        var shouldUpdateState = event.type == &apos;change&apos;;
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:100
&gt;&gt; +    static daysCountLabelText() { return ` days`; }
&gt; 
&gt; No need for a space before &quot;days&quot;.

Fixed.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:34
&gt;&gt; +        this.toolbar().setNumberOfDays(0, true);
&gt; 
&gt; In general, toolbar state shouldn&apos;t change from a page to page.
&gt; If the user had selected 5 days ago, then we don&apos;t want to move that to &quot;Current&quot; just because the user navigated to a new summary page.

I don&apos;t quite agree with this. The fundamental information being displayed is different between Charts and Summary - Charts is using &apos;days&apos; to represent the # of days that should be shown in the view when looking at a list of charts. Summary is using &apos;days ago&apos; to represent the state at a given # of days ago, and will always be evaluating only a 24 hour period.

While both implementations share the same slider component, they represent fundamentally different sets of information.

This does make me realize I forgot something though! Should modifying &apos;days ago&apos; on the Summary page also modify the URL such that it can be sent to someone else? Similar to how we use the &apos;since&apos; and &apos;zoom&apos; query params for Charts as you modify the view?

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:35
&gt;&gt; +        this.toolbar().enqueueToRender();
&gt; 
&gt; This isn&apos;t right. Toolbar should be enqueing itself to render on its own upon state transition.

Thank you. Fixed.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:36
&gt;&gt; +        this.toolbar().setNumberOfDaysCallback(this.setNumberOfDaysFromToolbar.bind(this))
&gt; 
&gt; Ugh... this is bad. We shouldn&apos;t have to do this but we&apos;d have to for now.
&gt; Also, the toolbar isn&apos;t set until super.open is called so this code isn&apos;t right.

Addressed the second comment.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:42
&gt;&gt; +    {
&gt; 
&gt; We should be getting the number of days out of the toolbar instead.
&gt; Also, this function never render anything.
&gt; A better name would be _fetchForNumberOfDays

Good points, thank you. Updated.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:45
&gt;&gt; +        var timeRange = [current - oneDay - (days * oneDay), current - (days * oneDay)];
&gt; 
&gt; Use const?

Fixed.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:7
&gt;&gt; +        this._maxDayCount = 366;
&gt; 
&gt; We don&apos;t want to be reaching into super class&apos; instance variable like this.
&gt; Probably better to add an explicit setter like _setAllowedDayCountRange or something.

For my own understanding, what&apos;s the reason behind this?

Made an attempt at this, let me know if you would like it done differently.

&gt;&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:13
&gt;&gt; +        this._dayCountSpan.textContent = &apos;&apos;;
&gt; 
&gt; Let&apos;s discuss this in person.

Yes, thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547894</commentid>
    <comment_count>10</comment_count>
      <attachid>372879</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-06-25 17:03:11 -0700</bug_when>
    <thetext>Created attachment 372879
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547898</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-06-25 17:06:42 -0700</bug_when>
    <thetext>(In reply to Dean Johnson from comment #9)
&gt; Comment on attachment 372867 [details]
&gt; Patch
&gt;
&gt; &gt;&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:34
&gt; &gt;&gt; +        this.toolbar().setNumberOfDays(0, true);
&gt; &gt; 
&gt; &gt; In general, toolbar state shouldn&apos;t change from a page to page.
&gt; &gt; If the user had selected 5 days ago, then we don&apos;t want to move that to &quot;Current&quot; just because the user navigated to a new summary page.
&gt; 
&gt; I don&apos;t quite agree with this. The fundamental information being displayed
&gt; is different between Charts and Summary - Charts is using &apos;days&apos; to
&gt; represent the # of days that should be shown in the view when looking at a
&gt; list of charts. Summary is using &apos;days ago&apos; to represent the state at a
&gt; given # of days ago, and will always be evaluating only a 24 hour period.

?? This number of days is specific to summary pages because your toolbar is only used by summary pages. It would mean that multiple summary pages would share the same number of days ago, not between summary pages and charts page.

&gt; This does make me realize I forgot something though! Should modifying &apos;days
&gt; ago&apos; on the Summary page also modify the URL such that it can be sent to
&gt; someone else? Similar to how we use the &apos;since&apos; and &apos;zoom&apos; query params for
&gt; Charts as you modify the view?

Yes, we should totally do that. See Charts page call this.scheduleUrlStateUpdate(). You&apos;d need to modify serializeState and updateFromSerializedState.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547899</commentid>
    <comment_count>12</comment_count>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-06-25 17:09:12 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #11)
&gt; (In reply to Dean Johnson from comment #9)
&gt; &gt; Comment on attachment 372867 [details]
&gt; &gt; Patch
&gt; &gt;
&gt; &gt; &gt;&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:34
&gt; &gt; &gt;&gt; +        this.toolbar().setNumberOfDays(0, true);
&gt; &gt; &gt; 
&gt; &gt; &gt; In general, toolbar state shouldn&apos;t change from a page to page.
&gt; &gt; &gt; If the user had selected 5 days ago, then we don&apos;t want to move that to &quot;Current&quot; just because the user navigated to a new summary page.
&gt; &gt; 
&gt; &gt; I don&apos;t quite agree with this. The fundamental information being displayed
&gt; &gt; is different between Charts and Summary - Charts is using &apos;days&apos; to
&gt; &gt; represent the # of days that should be shown in the view when looking at a
&gt; &gt; list of charts. Summary is using &apos;days ago&apos; to represent the state at a
&gt; &gt; given # of days ago, and will always be evaluating only a 24 hour period.
&gt; 
&gt; ?? This number of days is specific to summary pages because your toolbar is
&gt; only used by summary pages. It would mean that multiple summary pages would
&gt; share the same number of days ago, not between summary pages and charts page.
Oh! I misunderstood your comment. Will fix.
&gt; 
&gt; &gt; This does make me realize I forgot something though! Should modifying &apos;days
&gt; &gt; ago&apos; on the Summary page also modify the URL such that it can be sent to
&gt; &gt; someone else? Similar to how we use the &apos;since&apos; and &apos;zoom&apos; query params for
&gt; &gt; Charts as you modify the view?
&gt; 
&gt; Yes, we should totally do that. See Charts page call
&gt; this.scheduleUrlStateUpdate(). You&apos;d need to modify serializeState and
&gt; updateFromSerializedState.
Will upload a new patch with this added, but not today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630952</commentid>
    <comment_count>13</comment_count>
      <attachid>393802</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2020-03-17 16:41:11 -0700</bug_when>
    <thetext>Created attachment 393802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630956</commentid>
    <comment_count>14</comment_count>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2020-03-17 16:50:16 -0700</bug_when>
    <thetext>Added support for &apos;since&apos; query parameter using Ryosuke&apos;s suggestions. The URL should now allow links pointing to specific windows in time to be shared, and re-accessed.

There is some support for the since keyword propagating between summary pages, but it doesn&apos;t completely work. For instance, if you&apos;ve loaded a URL with a &apos;since&apos; query parameter, when loading other Summary pages it will correctly use that parameter.

However, if the toolbar is changed, then you try to visit another summary page, it resets back to the state it was on the first page&apos;s load. As far as I can tell this is caused by href&apos;s for each summary page embedding the initial load&apos;s &apos;since&apos; query parameter.

I spent a couple hours trying to diagnose and better understand how it *should* work, but couldn&apos;t come up with anything I felt confident wouldn&apos;t break. It should be noted that the request for the toolbar state to propagate across different pages of the same type (in this case, Summary) doesn&apos;t appear to be supported for existing &apos;Charts&apos; views.

This can be confirmed by:
1. Visiting https://perf.webkit.org/v3/#/dashboard/DOM?numberOfDays=7
2. Clicking &quot;3M&quot; in the toolbar to set the view window to 3 months.
3. Clicking on the &quot;DOM&quot; charts heading.
4. Observe the &quot;3M&quot; toolbar has been reset to &quot;1W&quot;.

Since most of the functionality for this feature is here, and we had many times this cycle where it would have been valuable, I&apos;d like to work through any remaining code quality issues and land it without support for toolbar state propagating between intra-page navigations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631061</commentid>
    <comment_count>15</comment_count>
      <attachid>393802</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-03-18 01:12:28 -0700</bug_when>
    <thetext>Comment on attachment 393802
Patch

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

&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:24
&gt; +        this._dayCountSpan = this.content(&apos;day-count&apos;);

Please don&apos;t creep element names into variable names like this.
Just call it this._dayCountContainer or something.

&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:55
&gt; +    _setInputElementValue(value)

This function name is misleading. It updates the slider as well as the input element.
Maybe rename it to _updateSliderWithNumberOfDays?

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:37
&gt; +        var exactTime = null;
&gt; +        if (state.since)
&gt; +            exactTime = parseFloat(state.since);

exactTime is a very confusing variable name. Why not just since or parsedSince?
Also, just do: const since = state.since ? parseFloat(state.since) : null;

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:39
&gt; +        if (exactTime !== null)

This isn&apos;t right. parseFloat can return NaN when state.since isn&apos;t a number.
Check isNaN(since) instead.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:49
&gt; +        const oneDay = 24 * 3600 * 1000;

There is no need to re-compute all of this. this.toolbar().startTime() and this.toolbar().endTime() has this info.
I think what you wanna do instead is to override endTime in SummaryToolbar.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:60
&gt; +        if (this.toolbar()._defaultNumberOfDays == this.toolbar()._numberOfDays) {

Nit: No curly braces for a single line statement.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:61
&gt; +            return {}

Missing a semicolon. There should be a space between { and }.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:69
&gt; +        var startTime = Date.now() - (numberOfDays * oneDay);

Use const?

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:15
&gt; +        this._dayCountDescription.textContent = &apos;Current&apos;;

I&apos;d use &quot;Present&quot; or &quot;Now&quot; instead.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:30
&gt; +        if (!this._numberOfDays &amp;&amp; !this._inTextMode)
&gt; +            this._addSliderTextFormattingForZeroDays();
&gt; +        else
&gt; +            this._removeSliderTextFormattingForZeroDays();

We don&apos;t want to split functions like this in render functions.
Instead, we want to have a single function which gets lazily evaluated based on arguments like this:
this._lazilyRenderUpdateDayCountAndDescription(this._numberOfDays, this._inTextMode);
See other examples of LazilyEvaluatedFunction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631062</commentid>
    <comment_count>16</comment_count>
      <attachid>393802</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-03-18 01:12:59 -0700</bug_when>
    <thetext>Comment on attachment 393802
Patch

Can we also add some tests to browser-tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631065</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-03-18 01:16:49 -0700</bug_when>
    <thetext>(In reply to Dean Johnson from comment #14)
&gt;
&gt; However, if the toolbar is changed, then you try to visit another summary
&gt; page, it resets back to the state it was on the first page&apos;s load. As far as
&gt; I can tell this is caused by href&apos;s for each summary page embedding the
&gt; initial load&apos;s &apos;since&apos; query parameter.
&gt; 
&gt; I spent a couple hours trying to diagnose and better understand how it
&gt; *should* work, but couldn&apos;t come up with anything I felt confident wouldn&apos;t
&gt; break. It should be noted that the request for the toolbar state to
&gt; propagate across different pages of the same type (in this case, Summary)
&gt; doesn&apos;t appear to be supported for existing &apos;Charts&apos; views.

You&apos;d have to implement updateFromSerializedState on SummaryPage for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631339</commentid>
    <comment_count>18</comment_count>
      <attachid>393896</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2020-03-18 13:42:18 -0700</bug_when>
    <thetext>Created attachment 393896
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631344</commentid>
    <comment_count>19</comment_count>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2020-03-18 13:47:08 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #15)
&gt; Comment on attachment 393802 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=393802&amp;action=review
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:24
&gt; &gt; +        this._dayCountSpan = this.content(&apos;day-count&apos;);
&gt; 
&gt; Please don&apos;t creep element names into variable names like this.
&gt; Just call it this._dayCountContainer or something.
Updated.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:55
&gt; &gt; +    _setInputElementValue(value)
Updated.
&gt; 
&gt; This function name is misleading. It updates the slider as well as the input
&gt; element.
&gt; Maybe rename it to _updateSliderWithNumberOfDays?

&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:37
&gt; &gt; +        var exactTime = null;
&gt; &gt; +        if (state.since)
&gt; &gt; +            exactTime = parseFloat(state.since);
&gt; 
&gt; exactTime is a very confusing variable name. Why not just since or
&gt; parsedSince?
&gt; Also, just do: const since = state.since ? parseFloat(state.since) : null;
Thanks, updated.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:39
&gt; &gt; +        if (exactTime !== null)
&gt; 
&gt; This isn&apos;t right. parseFloat can return NaN when state.since isn&apos;t a number.
&gt; Check isNaN(since) instead.
Thanks, updated.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:49
&gt; &gt; +        const oneDay = 24 * 3600 * 1000;
&gt; 
&gt; There is no need to re-compute all of this. this.toolbar().startTime() and
&gt; this.toolbar().endTime() has this info.
&gt; I think what you wanna do instead is to override endTime in SummaryToolbar.
I don&apos;t think I understand the suggestion. Do you mean I should use this.toolbar()._present (in place of computing Date.now()) and this.toolbar()._millisecondsPerDay (in place of computing oneDay)?

Updated patch with those, but please let me know if you meant something else.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:60
&gt; &gt; +        if (this.toolbar()._defaultNumberOfDays == this.toolbar()._numberOfDays) {
Thanks, fixed.
&gt; 
&gt; Nit: No curly braces for a single line statement.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:61
&gt; &gt; +            return {}
&gt; 
&gt; Missing a semicolon. There should be a space between { and }.
Fixed.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:69
&gt; &gt; +        var startTime = Date.now() - (numberOfDays * oneDay);
&gt; 
&gt; Use const?
Fixed. Also re-used this.toolbar()._present and this.toolbar()._millisecondsPerDay.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:15
&gt; &gt; +        this._dayCountDescription.textContent = &apos;Current&apos;;
&gt; 
&gt; I&apos;d use &quot;Present&quot; or &quot;Now&quot; instead.
Fixed.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:30
&gt; &gt; +        if (!this._numberOfDays &amp;&amp; !this._inTextMode)
&gt; &gt; +            this._addSliderTextFormattingForZeroDays();
&gt; &gt; +        else
&gt; &gt; +            this._removeSliderTextFormattingForZeroDays();
&gt; 
&gt; We don&apos;t want to split functions like this in render functions.
&gt; Instead, we want to have a single function which gets lazily evaluated based
&gt; on arguments like this:
&gt; this._lazilyRenderUpdateDayCountAndDescription(this._numberOfDays,
&gt; this._inTextMode);
&gt; See other examples of LazilyEvaluatedFunction.
Updated. Thanks for pointing this out, I like the reduction in work from the new implementation much more!
(In reply to Ryosuke Niwa from comment #17)
&gt; (In reply to Dean Johnson from comment #14)
&gt; &gt;
&gt; &gt; However, if the toolbar is changed, then you try to visit another summary
&gt; &gt; page, it resets back to the state it was on the first page&apos;s load. As far as
&gt; &gt; I can tell this is caused by href&apos;s for each summary page embedding the
&gt; &gt; initial load&apos;s &apos;since&apos; query parameter.
&gt; &gt; 
&gt; &gt; I spent a couple hours trying to diagnose and better understand how it
&gt; &gt; *should* work, but couldn&apos;t come up with anything I felt confident wouldn&apos;t
&gt; &gt; break. It should be noted that the request for the toolbar state to
&gt; &gt; propagate across different pages of the same type (in this case, Summary)
&gt; &gt; doesn&apos;t appear to be supported for existing &apos;Charts&apos; views.
&gt; 
&gt; You&apos;d have to implement updateFromSerializedState on SummaryPage for that.
I don&apos;t think updateFromSerializedState would fix this, since the state of the current page doesn&apos;t seem to be propagated correctly. I implemented this another way, but am pretty sure it won&apos;t pass review. I&apos;m happy to refactor my fix to better fit how other matches are working in PageRouter if you can give more explicit pointers in the right direction (examples of how it works between two pages with different routeNames would be very helpful!).

I&apos;m still working on writing new tests, but figured I&apos;d put up the patch with all requested functionality since it&apos;s completed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631432</commentid>
    <comment_count>20</comment_count>
      <attachid>393896</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2020-03-18 17:07:53 -0700</bug_when>
    <thetext>Comment on attachment 393896
Patch

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

&gt; Websites/perf.webkit.org/ChangeLog:71
&gt; +

I don&apos;t see a change log for `Websites/perf.webkit.org/public/v3/pages/page-router.js`, it may happen if you didn&apos;t change it in your first patch.
I think it worthwhile to explain the change you made in `PageRouter.prototype.route` here.

&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:40
&gt; +    setStartTime(startTime=this._defaultNumberOfDays)

I don&apos;t think we can set default value to an instance variable.
class A {
    constructor(foo)
    {
        this._foo = 1;
    }
    print_foo(value=this._foo)
    {
        console.log(value)
    }
};
a = new A(3);
a.print_foo(); // &lt;= showed &quot;undefined&quot;

&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:49
&gt; +    _setAllowedDayCountRange(minDayCount=this._defaultMinDayCount, maxDayCount=this._defaultMaxDayCount)

ditto here

&gt; Websites/perf.webkit.org/public/v3/pages/page-router.js:64
&gt; +        if (this._currentPage &amp;&amp; typeof(this._currentPage.fuzzyMatchesRouteName) === &apos;function&apos; &amp;&amp;
&gt; +            this._currentPage.fuzzyMatchesRouteName(destinationPage.routeName()) &amp;&amp;
&gt; +            this._currentPage != destinationPage) {
&gt; +            const currentPageState = this._currentPage.serializeState();
&gt; +            this._currentPage = destinationPage;
&gt; +            destinationPage.open(currentPageState);
&gt; +        }

Could you explain a little bit more about this change? I think you mentioned in person that the state does not carry over between summary page navigations.
I think there should be a better way to share state between summary pages. For example, all SummaryPages share same `SummaryToolbar` instance, may we can refer the state on SummaryPage.open from SummaryToolbar?

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:39
&gt; +

Nit: extra blank line?

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:44
&gt; +        this._fetchForNumberOfDaysAgo(this.toolbar().numberOfDays(), since);

`_fetchForNumberOfDaysAgo` takes no argument per line 48.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:12
&gt; +    endTime() {

Make this one liner?

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:16
&gt; +    _renderUpdateDayCountAndDescription(numberOfDaysIsZero, inTextMode) {

Nit: move &apos;{&apos; to separate line per https://webkit.org/code-style-guidelines/#braces

&gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:23
&gt; +        }
&gt; +        else {

Use &apos;} else {&apos; instead per https://webkit.org/code-style-guidelines/#line-breaking</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631558</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-03-19 00:07:14 -0700</bug_when>
    <thetext>(In reply to dewei_zhu from comment #20)
&gt; Comment on attachment 393896 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=393896&amp;action=review
&gt;
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:40
&gt; &gt; +    setStartTime(startTime=this._defaultNumberOfDays)
&gt; 
&gt; I don&apos;t think we can set default value to an instance variable.
&gt; class A {
&gt;     constructor(foo)
&gt;     {
&gt;         this._foo = 1;
&gt;     }
&gt;     print_foo(value=this._foo)
&gt;     {
&gt;         console.log(value)
&gt;     }
&gt; };
&gt; a = new A(3);
&gt; a.print_foo(); // &lt;= showed &quot;undefined&quot;

I&apos;m pretty sure that should work. Maybe someone broke that feature on trunk if you&apos;re seeing a failure on trunk? But there should be spaces around &quot;=&quot; here. This is not Python.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631576</commentid>
    <comment_count>22</comment_count>
      <attachid>393896</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2020-03-19 02:11:55 -0700</bug_when>
    <thetext>Comment on attachment 393896
Patch

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

&gt;&gt;&gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:40
&gt;&gt;&gt; +    setStartTime(startTime=this._defaultNumberOfDays)
&gt;&gt; 
&gt;&gt; I don&apos;t think we can set default value to an instance variable.
&gt;&gt; class A {
&gt;&gt;     constructor(foo)
&gt;&gt;     {
&gt;&gt;         this._foo = 1;
&gt;&gt;     }
&gt;&gt;     print_foo(value=this._foo)
&gt;&gt;     {
&gt;&gt;         console.log(value)
&gt;&gt;     }
&gt;&gt; };
&gt;&gt; a = new A(3);
&gt;&gt; a.print_foo(); // &lt;= showed &quot;undefined&quot;
&gt; 
&gt; I&apos;m pretty sure that should work. Maybe someone broke that feature on trunk if you&apos;re seeing a failure on trunk? But there should be spaces around &quot;=&quot; here. This is not Python.

You are right, I didn&apos;t turn on &quot;All&quot; In console tab of Web Inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632272</commentid>
    <comment_count>23</comment_count>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2020-03-20 14:15:15 -0700</bug_when>
    <thetext>(In reply to dewei_zhu from comment #20)
&gt; Comment on attachment 393896 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=393896&amp;action=review
&gt; 
&gt; &gt; Websites/perf.webkit.org/ChangeLog:71
&gt; &gt; +
&gt; 
&gt; I don&apos;t see a change log for
&gt; `Websites/perf.webkit.org/public/v3/pages/page-router.js`, it may happen if
&gt; you didn&apos;t change it in your first patch.
&gt; I think it worthwhile to explain the change you made in
&gt; `PageRouter.prototype.route` here.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:40
&gt; &gt; +    setStartTime(startTime=this._defaultNumberOfDays)
&gt; 
&gt; I don&apos;t think we can set default value to an instance variable.
&gt; class A {
&gt;     constructor(foo)
&gt;     {
&gt;         this._foo = 1;
&gt;     }
&gt;     print_foo(value=this._foo)
&gt;     {
&gt;         console.log(value)
&gt;     }
&gt; };
&gt; a = new A(3);
&gt; a.print_foo(); // &lt;= showed &quot;undefined&quot;
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:49
&gt; &gt; +    _setAllowedDayCountRange(minDayCount=this._defaultMinDayCount, maxDayCount=this._defaultMaxDayCount)
&gt; 
&gt; ditto here
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/page-router.js:64
&gt; &gt; +        if (this._currentPage &amp;&amp; typeof(this._currentPage.fuzzyMatchesRouteName) === &apos;function&apos; &amp;&amp;
&gt; &gt; +            this._currentPage.fuzzyMatchesRouteName(destinationPage.routeName()) &amp;&amp;
&gt; &gt; +            this._currentPage != destinationPage) {
&gt; &gt; +            const currentPageState = this._currentPage.serializeState();
&gt; &gt; +            this._currentPage = destinationPage;
&gt; &gt; +            destinationPage.open(currentPageState);
&gt; &gt; +        }
&gt; 
&gt; Could you explain a little bit more about this change? I think you mentioned
&gt; in person that the state does not carry over between summary page
&gt; navigations.
&gt; I think there should be a better way to share state between summary pages.
&gt; For example, all SummaryPages share same `SummaryToolbar` instance, may we
&gt; can refer the state on SummaryPage.open from SummaryToolbar?
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:39
&gt; &gt; +
&gt; 
&gt; Nit: extra blank line?
&gt; 
Fixed.
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:44
&gt; &gt; +        this._fetchForNumberOfDaysAgo(this.toolbar().numberOfDays(), since);
&gt; 
&gt; `_fetchForNumberOfDaysAgo` takes no argument per line 48.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:12
&gt; &gt; +    endTime() {
&gt; 
&gt; Make this one liner?
Fixed.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:16
&gt; &gt; +    _renderUpdateDayCountAndDescription(numberOfDaysIsZero, inTextMode) {
&gt; 
&gt; Nit: move &apos;{&apos; to separate line per
&gt; https://webkit.org/code-style-guidelines/#braces
Fixed. Thank you.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:23
&gt; &gt; +        }
&gt; &gt; +        else {
&gt; 
&gt; Use &apos;} else {&apos; instead per
&gt; https://webkit.org/code-style-guidelines/#line-breaking
Fixed. Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632278</commentid>
    <comment_count>24</comment_count>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2020-03-20 14:21:56 -0700</bug_when>
    <thetext>(In reply to dewei_zhu from comment #20)
&gt; Comment on attachment 393896 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=393896&amp;action=review
&gt; 
&gt; &gt; Websites/perf.webkit.org/ChangeLog:71
&gt; &gt; +
&gt; 
&gt; I don&apos;t see a change log for
&gt; `Websites/perf.webkit.org/public/v3/pages/page-router.js`, it may happen if
&gt; you didn&apos;t change it in your first patch.
&gt; I think it worthwhile to explain the change you made in
&gt; `PageRouter.prototype.route` here.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:40
&gt; &gt; +    setStartTime(startTime=this._defaultNumberOfDays)
&gt; 
&gt; I don&apos;t think we can set default value to an instance variable.
&gt; class A {
&gt;     constructor(foo)
&gt;     {
&gt;         this._foo = 1;
&gt;     }
&gt;     print_foo(value=this._foo)
&gt;     {
&gt;         console.log(value)
&gt;     }
&gt; };
&gt; a = new A(3);
&gt; a.print_foo(); // &lt;= showed &quot;undefined&quot;
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/continuous-domain-toolbar.js:49
&gt; &gt; +    _setAllowedDayCountRange(minDayCount=this._defaultMinDayCount, maxDayCount=this._defaultMaxDayCount)
&gt; 
&gt; ditto here
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/page-router.js:64
&gt; &gt; +        if (this._currentPage &amp;&amp; typeof(this._currentPage.fuzzyMatchesRouteName) === &apos;function&apos; &amp;&amp;
&gt; &gt; +            this._currentPage.fuzzyMatchesRouteName(destinationPage.routeName()) &amp;&amp;
&gt; &gt; +            this._currentPage != destinationPage) {
&gt; &gt; +            const currentPageState = this._currentPage.serializeState();
&gt; &gt; +            this._currentPage = destinationPage;
&gt; &gt; +            destinationPage.open(currentPageState);
&gt; &gt; +        }
&gt; 
&gt; Could you explain a little bit more about this change? I think you mentioned
&gt; in person that the state does not carry over between summary page
&gt; navigations.
&gt; I think there should be a better way to share state between summary pages.
&gt; For example, all SummaryPages share same `SummaryToolbar` instance, may we
&gt; can refer the state on SummaryPage.open from SummaryToolbar?
Sorry, I updated the commit message but not the ChangeLog. New patch has ChangeLog updated too.

From ChangeLog:
(PageRouter.prototype.route): Moving from one summary page to another summary does not currently propagate state, since routeName() between two summary pages is different (e.g. /summary/trunk, /summary/system). To get around this, we now check for a function called &apos;fuzzyMatchesRouteName&apos; on _currentPage between navigations and use it to determine if the destinationPage should have its state propagated from _currentPage. Each &apos;Page&apos; may implement their own fuzzyMatchesRouteName.

I&apos;m open to other ways of handling this if there are suggestions.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:39
&gt; &gt; +
&gt; 
&gt; Nit: extra blank line?
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:44
&gt; &gt; +        this._fetchForNumberOfDaysAgo(this.toolbar().numberOfDays(), since);
&gt; 
&gt; `_fetchForNumberOfDaysAgo` takes no argument per line 48.
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:12
&gt; &gt; +    endTime() {
&gt; 
&gt; Make this one liner?
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:16
&gt; &gt; +    _renderUpdateDayCountAndDescription(numberOfDaysIsZero, inTextMode) {
&gt; 
&gt; Nit: move &apos;{&apos; to separate line per
&gt; https://webkit.org/code-style-guidelines/#braces
&gt; 
&gt; &gt; Websites/perf.webkit.org/public/v3/pages/summary-toolbar.js:23
&gt; &gt; +        }
&gt; &gt; +        else {
&gt; 
&gt; Use &apos;} else {&apos; instead per
&gt; https://webkit.org/code-style-guidelines/#line-breaking</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632282</commentid>
    <comment_count>25</comment_count>
      <attachid>394128</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2020-03-20 14:25:29 -0700</bug_when>
    <thetext>Created attachment 394128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633181</commentid>
    <comment_count>26</comment_count>
      <attachid>394128</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2020-03-23 18:42:48 -0700</bug_when>
    <thetext>Comment on attachment 394128
Patch

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

&gt; Websites/perf.webkit.org/public/v3/pages/page-router.js:63
&gt; +        if (this._currentPage &amp;&amp; typeof(this._currentPage.fuzzyMatchesRouteName) === &apos;function&apos; &amp;&amp;
&gt; +            this._currentPage.fuzzyMatchesRouteName(destinationPage.routeName()) &amp;&amp;
&gt; +            this._currentPage != destinationPage) {
&gt; +            const currentPageState = this._currentPage.serializeState();
&gt; +            this._currentPage = destinationPage;
&gt; +            destinationPage.open(currentPageState);

I didn&apos;t go into detail, but I think if all summary pages share the same instance of toolbar, (which does in this case per your change in main.js), then we should favor the startTime in toolbar. Detailed code in the comment of summary-page.js.
Ryosuke, would you prefer the one I mentioned above or what Dean is proposing, or you think there is a better way to achieve this.

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:34
&gt;          super.open(state);

Here, we can do `
if (this.toolbar())
    state.since = this.toolbar().startTime();
super.open(state);
....
``

&gt; Websites/perf.webkit.org/public/v3/pages/summary-page.js:35
&gt; +        var since = state.since ? parseFloat(state.since) : null;

Use `const`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1880386</commentid>
    <comment_count>27</comment_count>
      <attachid>394128</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-07-02 15:08:25 -0700</bug_when>
    <thetext>Comment on attachment 394128
Patch

Clearing r? flag since this patch has been sitting over two years without a progress.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372540</attachid>
            <date>2019-06-19 23:11:08 -0700</date>
            <delta_ts>2019-06-20 16:21:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199051-20190619231108.patch</filename>
            <type>text/plain</type>
            <size>24682</size>
            <attacher name="Dean Johnson">dean_johnson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NjEyCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBhMDhjMGNjYTllZjU1YzlmOTQzMGY2NjQ1MWEzZDFlNTVmOTc5MzhhLi4xYTQyYWIxOTlh
MGNmNGRkMzM5ZjlkMmZhZjUwMTNjYzJjYzM1MWY0IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw2OSBAQAorMjAxOS0wNi0xOSAgRGVhbiBKb2huc29uICA8ZGVhbl9q
b2huc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbcGVyZi53ZWJraXQub3JnXSBBZGQgJ2JhY2sg
aW4gdGltZScgZmVhdHVyZSBmb3IgU3VtbWFyeSBwYWdlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MDUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgIkJhY2sgaW4gdGltZSIgZmVh
dHVyZSBmb3IgYWxsIFN1bW1hcnkgcGFnZXMgb24gdGhlIFdlYktpdCBQZXJmIGRhc2hib2FyZC4g
VGhlcmUgaXMgYSBuZXcKKyAgICAgICAgc2xpZGVyIGluIHRoZSB0b3AgcmlnaHQgY29ybmVyIHdo
aWNoIGNhbiBiZSBkcmFnZ2VkIHRvIHZpZXcgdGhlIHN1bW1hcnkgcGFnZSAnTiBkYXlzIGFnbycu
IFRoZSBkZWZhdWx0IHZpZXcKKyAgICAgICAgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgorCisgICAg
ICAgICogcHVibGljL3YzL2luZGV4Lmh0bWw6IEFkZCBuZXcgcmVzb3VyY2VzOiBzbGlkZXItdG9v
bGJhci5qcywgc3VtbWFyeS10b29sYmFyLmpzLgorICAgICAgICAqIHB1YmxpYy92My9tYWluLmpz
OiBBZGQgbmV3IHN1bW1hcnlUb29sYmFyLCBhbmQgaW5pdGlhbGl6ZSBzdW1tYXJ5IHBhZ2VzIHdp
dGggaXQuCisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvY2hhcnRz
LXRvb2xiYXIuanM6IEFic3RyYWN0IHRoZSBzbGlkZXIgdG9vbGJhciBpbnRvIGEgbmV3IGNsYXNz
LCBhbmQgaW5oZXJpdCBmcm9tIGl0LgorICAgICAgICAoQ2hhcnRzVG9vbGJhcik6IE5vdywgQ2hh
cnRzVG9vbGJhciBpcyBhIG1vc3RseSB0aGluIHdyYXBwZXIgcm91bmQgU2xpZGVyVG9vbGJhciBh
bmQgaW1wbGVtZW50cyB0aGUgJ0FkZCBQYW5lJworICAgICAgICBidXR0b24gKyBmdW5jdGlvbmFs
aXR5LgorICAgICAgICAoQ2hhcnRzVG9vbGJhci5wcm90b3R5cGUucmVuZGVyKToKKyAgICAgICAg
KENoYXJ0c1Rvb2xiYXIuY3NzVGVtcGxhdGUpOgorICAgICAgICAoQ2hhcnRzVG9vbGJhci5wcm90
b3R5cGUuc2V0TnVtYmVyT2ZEYXlzQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoQ2hhcnRz
VG9vbGJhci5wcm90b3R5cGUuc2V0U3RhcnRUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKENoYXJ0
c1Rvb2xiYXIucHJvdG90eXBlLl9zZXRJbnB1dEVsZW1lbnRWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChDaGFydHNUb29sYmFyLnByb3RvdHlwZS5fZW50ZXJUZXh0TW9kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChDaGFydHNUb29sYmFyLnByb3RvdHlwZS5fZXhpdFRleHRNb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLl9zbGlkZXJWYWx1ZU1heUhhdmVDaGFu
Z2VkKTogRGVsZXRlZC4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLl9lZGl0b3JW
YWx1ZU1heUhhdmVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJv
dG90eXBlLl9jYWxsTnVtYmVyT2ZEYXlzQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoQ2hh
cnRzVG9vbGJhci5odG1sVGVtcGxhdGUpOiBXcmFwIFNpbGRlclRvb2xiYXIncyBodG1sVGVtcGxh
dGUgd2l0aCBhIG5hdiBhbmQgZW1iZWQgdGhlICdBZGQgUGFuZScgYnV0dG9uLgorICAgICAgICAq
IHB1YmxpYy92My9wYWdlcy9kb21haW4tY29udHJvbC10b29sYmFyLmpzOgorICAgICAgICAoRG9t
YWluQ29udHJvbFRvb2xiYXIucHJvdG90eXBlLnNldFN0YXJ0VGltZSk6IFVwZGF0ZWQgdG8gc3Vw
cG9ydCBhIHZhbHVlIG9mIDAgZm9yIG51bWJlck9mRGF5cy4KKyAgICAgICAgKERvbWFpbkNvbnRy
b2xUb29sYmFyLnByb3RvdHlwZS5zZXROdW1iZXJPZkRheXMpOiBEaXR0by4KKyAgICAgICAgKERv
bWFpbkNvbnRyb2xUb29sYmFyKToKKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvc2xpZGVyLXRv
b2xiYXIuanM6IENvcGllZCBmcm9tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
cGFnZXMvY2hhcnRzLXRvb2xiYXIuanMuCisgICAgICAgIChTbGlkZXJUb29sYmFyKTogQ29waWVk
IGZyb20gY2hhcnRzLXRvb2xiYXIuanM7IEFkZGVkIF9kZWZhdWx0TnVtYmVyT2ZEYXlzIHdoZW4g
aW52b2tpbmcgY29uc3RydWN0b3IgYW5kCisgICAgICAgIHJlbW92ZWQgJ0FkZCBQYW5lJyBsb2dp
Yy4KKyAgICAgICAgKFNsaWRlclRvb2xiYXIucHJvdG90eXBlLnJlbmRlcik6IE1vdmVkIGZyb20g
Y2hhcnRzLXRvb2xiYXIuanMuCisgICAgICAgIChTbGlkZXJUb29sYmFyLnByb3RvdHlwZS5zZXRO
dW1iZXJPZkRheXNDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAoU2xpZGVyVG9vbGJhci5wcm90
b3R5cGUuc2V0U3RhcnRUaW1lKTogRGl0dG8sIGJ1dCB1cGRhdGVkIHRvIHVzZSBfZGVmYXVsdE51
bWJlck9mRGF5cy4KKyAgICAgICAgKFNsaWRlclRvb2xiYXIucHJvdG90eXBlLl9zZXRJbnB1dEVs
ZW1lbnRWYWx1ZSk6IERpdHRvLgorICAgICAgICAoU2xpZGVyVG9vbGJhci5wcm90b3R5cGUuX2Vu
dGVyVGV4dE1vZGUpOiBEaXR0by4KKyAgICAgICAgKFNsaWRlclRvb2xiYXIucHJvdG90eXBlLl9l
eGl0VGV4dE1vZGUpOiBEaXR0by4KKyAgICAgICAgKFNsaWRlclRvb2xiYXIucHJvdG90eXBlLl9z
bGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChTbGlkZXJUb29sYmFy
LnByb3RvdHlwZS5fZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAo
U2xpZGVyVG9vbGJhci5wcm90b3R5cGUuX2NhbGxOdW1iZXJPZkRheXNDYWxsYmFjayk6IERpdHRv
LgorICAgICAgICAoU2xpZGVyVG9vbGJhci5kYXlzQ291bnRMYWJlbFRleHQpOiBSZXR1cm4gYSBj
dXN0b20gZWxlbWVudCBmb3IgbW9kaWZ5aW5nIHRoZSB0ZXh0IC8gc3R5bGluZyB1c2VkIGZvciAn
ZGF5cyBhZ28nLgorICAgICAgICAoU2xpZGVyVG9vbGJhci5odG1sVGVtcGxhdGUpOiBSZW1vdmVk
IHVubmVjZXNzYXJ5IG5hdiBhbmQgcmVzdHJ1Y3R1cmUgdG8gdXNlIHN0YXRpYyB2YWx1ZXMgZm9y
IGRheXNDb3VudExhYmVsVGV4dC4KKyAgICAgICAgKFNsaWRlclRvb2xiYXIuY3NzVGVtcGxhdGUp
OiBNb3ZlZCBmcm9tIGNoYXJ0cy10b29sYmFyLmpzLCB3aXRob3V0IHRoZSAnQWRkIFBhbmUnIHN0
eWxpbmcuCisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL3N1bW1hcnktcGFnZS5qczoKKyAgICAg
ICAgKFN1bW1hcnlQYWdlKTogQ2hhbmdlIGNvbnN0cnVjdG9yIHRvIGFjY2VwdCBhIHRvb2xiYXIg
YXJndW1lbnQuCisgICAgICAgIChTdW1tYXJ5UGFnZS5wcm90b3R5cGUub3Blbik6IFJlZmFjdG9y
ZWQgc3VtbWFyeSByZW5kZXJpbmcgaW50byB1cGRhdGVBbmRSZW5kZXJGb3JSYW5nZSwgc28gaXQg
Y2FuIGJlIGNhbGxlZAorICAgICAgICB3aGVuIHRoZSBuZXcgc2xpZGVyIGlzIG1vdmVkLgorICAg
ICAgICAoU3VtbWFyeVBhZ2UucHJvdG90eXBlLnVwZGF0ZUFuZFJlbmRlckZvclJhbmdlKTogVXBk
YXRlcyBzdW1tYXJ5IHBhZ2UgdG8gc2hvdyByZXN1bHRzIGZvciBOIGRheXMgYWdvLgorICAgICAg
ICAoU3VtbWFyeVBhZ2UucHJvdG90eXBlLnNldE51bWJlck9mRGF5c0Zyb21Ub29sYmFyKTogQ2Fs
bGJhY2sgZm9yIHJlLXJlbmRlcmluZyBzdW1tYXJ5IHBhZ2Ugd2l0aCBuZXcgcmVzdWx0cyBhcwor
ICAgICAgICB0aGUgdmFsdWUgb24gdGhlIHNsaWRlciBjaGFuZ2VzLgorICAgICAgICAqIHB1Ymxp
Yy92My9wYWdlcy9zdW1tYXJ5LXRvb2xiYXIuanM6IEFkZGVkLgorICAgICAgICAoU3VtbWFyeVRv
b2xiYXIpOiBCYXNlZCBvbiBTbGlkZXJUb29sYmFyLiBQcmltYXJ5IGNoYW5nZXMgYXJlIHRvIGFs
bG93ICIwIGRheXMgYWdvIiB0byBpbnN0ZWFkIHNob3cgIkN1cnJlbnQiCisgICAgICAgIHdoZW4g
Y2hhbmdpbmcgdmFsdWVzIG9uIHRoZSBzbGlkZXIgYW5kIG5vdCBpbiBUZXh0TW9kZS4KKyAgICAg
ICAgKFN1bW1hcnlUb29sYmFyLnByb3RvdHlwZS5fYWRkU2xpZGVyVGV4dEZvcm1hdHRpbmdGb3Ja
ZXJvRGF5cyk6IEFkZHMgZm9ybWF0dGluZyB0byB1c2UgIkN1cnJlbnQiIGluc3RlYWQgb2YKKyAg
ICAgICAgIjAgZGF5cyBhZ28iIGFuZCBub3Qgc2hpZnQgdGhlIHNsaWRlciB0b29sYmFyLgorICAg
ICAgICAoU3VtbWFyeVRvb2xiYXIucHJvdG90eXBlLl9yZW1vdmVTbGlkZXJUZXh0Rm9ybWF0dGlu
Z0Zvclplcm9EYXlzKTogUmVtb3ZlcyBmb3JtdHRpbmcgdG8gcmV2ZXJ0IHRvIGEgZGVmYXVsdC4K
KyAgICAgICAgKFN1bW1hcnlUb29sYmFyLnByb3RvdHlwZS5yZW5kZXIpOiBTZXQgdGhlIHNwZWNp
YWwgZm9ybWF0dGluZyB3aGVuIG51bWJlck9mRGF5cyA9PSAwLCBvdGhlcndpc2UgdXNlIHRoZSBk
ZWZhdWx0LgorICAgICAgICAoU3VtbWFyeVRvb2xiYXIucHJvdG90eXBlLl9lbnRlclRleHRNb2Rl
KTogUmVtb3ZlIGFsbCBzcGVjaWFsIGZvcm1hdHRpbmcgc2luY2UgJzAgZGF5cyBhZ28nIHJlYWRz
IGJldHRlciB0aGFuCisgICAgICAgICcwIEN1cnJlbnQnLiBBbHNvIHNldCBhIG5ldyBib29sZWFu
ICh0aGlzLl9pblRleHRNb2RlKSB0aGF0IGNhbiBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIHRvIGtl
ZXAgZnJvbSByZXZlcnRpbmcKKyAgICAgICAgZnJvbSAnMCBkYXlzIGFnbycgdG8gJzAgQ3VycmVu
dCcuCisgICAgICAgIChTdW1tYXJ5VG9vbGJhci5wcm90b3R5cGUuX2V4aXRUZXh0TW9kZSk6IFNl
dHMgdGhlIHRleHQgbW9kZSBiYWNrIHRvIEN1cnJlbnQgaWYgbnVtYmVyT2ZEYXlzID09IDAuCisK
IDIwMTktMDYtMTkgIERlYW4gSm9obnNvbiAgPGRlYW5fam9obnNvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgW3BlcmYud2Via2l0Lm9yZ10gVXBkYXRlIHN1bW1hcnkgcGFnZSBjYWxjdWxhdGlvbnMg
dG8gdXNlIG1lYW4gaW5zdGVhZCBvZiBtZWRpYW4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRtbCBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjMvaW5kZXguaHRtbAppbmRleCBlNzMxMDc3ZjZlYmUwMDQwN2FkYjA2OGM3ZmZj
YmY2MWVhNjZjZGNjLi5jYmM4ZWUxNmJhYjRjYzdjZDhhNWE3YTZkNzQzZjQ5ZmJhOTdlNzQxIDEw
MDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwK
KysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sCkBAIC0x
MTMsNiArMTEzLDcgQEAgUnVuIHRvb2xzL2J1bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRo
ZSBsb2FkIHRpbWUgZm9yIHByb2R1Y3Rpb24uYCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdl
cy9kb21haW4tY29udHJvbC10b29sYmFyLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBz
cmM9InBhZ2VzL2Rhc2hib2FyZC10b29sYmFyLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlw
dCBzcmM9InBhZ2VzL2Rhc2hib2FyZC1wYWdlLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlw
dCBzcmM9InBhZ2VzL3NsaWRlci10b29sYmFyLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlw
dCBzcmM9InBhZ2VzL2NoYXJ0LXBhbmUtc3RhdHVzLXZpZXcuanMiPjwvc2NyaXB0PgogICAgICAg
ICA8c2NyaXB0IHNyYz0icGFnZXMvY2hhcnQtcGFuZS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxz
Y3JpcHQgc3JjPSJwYWdlcy9jaGFydHMtdG9vbGJhci5qcyI+PC9zY3JpcHQ+CkBAIC0xMjMsNiAr
MTI0LDcgQEAgUnVuIHRvb2xzL2J1bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2Fk
IHRpbWUgZm9yIHByb2R1Y3Rpb24uYCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9jcmVh
dGUtYW5hbHlzaXMtdGFzay1wYWdlLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9
InBhZ2VzL2J1aWxkLXJlcXVlc3QtcXVldWUtcGFnZS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxz
Y3JpcHQgc3JjPSJwYWdlcy9zdW1tYXJ5LXBhZ2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2Ny
aXB0IHNyYz0icGFnZXMvc3VtbWFyeS10b29sYmFyLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNj
cmlwdCBzcmM9InBhZ2VzL3Rlc3QtZnJlc2huZXNzLXBhZ2UuanMiPjwvc2NyaXB0PgogCiAgICAg
ICAgIDxzY3JpcHQgc3JjPSJtYWluLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbWFpbi5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvbWFpbi5qcwppbmRleCAwZWJjMmYwMWM3YmM0ZTY4M2U5Njg2OWI1ZjEy
ZTZjZGMyZjgwYWUzLi42MjE3YjNjZmJhY2YwYWU0NTE5ZDI0ZTg3Y2E5YmM4NjE4NWMzOTk4IDEw
MDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21haW4uanMKKysr
IGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tYWluLmpzCkBAIC0yNiwxMSAr
MjYsMTIgQEAgZnVuY3Rpb24gbWFpbigpIHsKICAgICAgICAgICAgICAgICBkYXNoYm9hcmRQYWdl
cy5wdXNoKG5ldyBEYXNoYm9hcmRQYWdlKG5hbWUsIG1hbmlmZXN0LmRhc2hib2FyZHNbbmFtZV0s
IGRhc2hib2FyZFRvb2xiYXIpKTsKICAgICAgICAgfQogCisgICAgICAgIGNvbnN0IHN1bW1hcnlU
b29sYmFyID0gbmV3IFN1bW1hcnlUb29sYmFyOwogICAgICAgICBjb25zdCBzdW1tYXJ5UGFnZXMg
PSBbXTsKICAgICAgICAgbGV0IHRlc3RGcmVzaG5lc3NQYWdlID0gbnVsbDsKICAgICAgICAgaWYg
KG1hbmlmZXN0LnN1bW1hcnlQYWdlcykgewogICAgICAgICAgICAgZm9yIChjb25zdCBzdW1tYXJ5
UGFnZSBvZiBtYW5pZmVzdC5zdW1tYXJ5UGFnZXMpCi0gICAgICAgICAgICAgICAgc3VtbWFyeVBh
Z2VzLnB1c2gobmV3IFN1bW1hcnlQYWdlKHN1bW1hcnlQYWdlKSk7CisgICAgICAgICAgICAgICAg
c3VtbWFyeVBhZ2VzLnB1c2gobmV3IFN1bW1hcnlQYWdlKHN1bW1hcnlQYWdlLCBzdW1tYXJ5VG9v
bGJhcikpOwogICAgICAgICAgICAgdGVzdEZyZXNobmVzc1BhZ2UgPSBuZXcgVGVzdEZyZXNobmVz
c1BhZ2UobWFuaWZlc3Quc3VtbWFyeVBhZ2VzLCBtYW5pZmVzdC50ZXN0QWdlVG9sZXJhbmNlSW5I
b3Vycyk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9wYWdlcy9jaGFydHMtdG9vbGJhci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnRzLXRvb2xiYXIuanMKaW5kZXggYTA5N2UzNDhlODdm
OTdiYzFiOTFiOTc5OThmYWUyNDdhNjc2ODFmYi4uMjhlYzliMzUyYzNmODQyMGVlZjE5ZjlhOGFk
YWE0MjlmNjEyNmM3NyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9wYWdlcy9jaGFydHMtdG9vbGJhci5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL3BhZ2VzL2NoYXJ0cy10b29sYmFyLmpzCkBAIC0xLDI0ICsxLDggQEAKIAot
Y2xhc3MgQ2hhcnRzVG9vbGJhciBleHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsKK2NsYXNz
IENoYXJ0c1Rvb2xiYXIgZXh0ZW5kcyBTbGlkZXJUb29sYmFyIHsKICAgICBjb25zdHJ1Y3Rvcigp
CiAgICAgewotICAgICAgICBzdXBlcignY2hhcnMtdG9vbGJhcicsIDcpOwotCi0gICAgICAgIHRo
aXMuX21pbkRheUNvdW50ID0gMTsKLSAgICAgICAgdGhpcy5fbWF4RGF5Q291bnQgPSAzNjY7Ci0K
LSAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJhY2sgPSBudWxsOwotICAgICAgICB0aGlz
Ll9zbGlkZXIgPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuc2xpZGVyJyk7Ci0gICAg
ICAgIHRoaXMuX3NsaWRlci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9zbGlkZXJW
YWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOwotICAgICAgICB0aGlzLl9zbGlkZXIuYWRk
RXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fc2xpZGVyVmFsdWVNYXlIYXZlQ2hhbmdl
ZC5iaW5kKHRoaXMpKTsKLQotICAgICAgICB0aGlzLl9lZGl0b3IgPSB0aGlzLmNvbnRlbnQoKS5x
dWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5hZGRFdmVudExp
c3RlbmVyKCdmb2N1cycsIHRoaXMuX2VudGVyVGV4dE1vZGUuYmluZCh0aGlzKSk7Ci0gICAgICAg
IHRoaXMuX2VkaXRvci5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fZXhpdFRleHRNb2Rl
LmJpbmQodGhpcykpOwotICAgICAgICB0aGlzLl9lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignaW5w
dXQnLCB0aGlzLl9lZGl0b3JWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOwotICAgICAg
ICB0aGlzLl9lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fZWRpdG9yVmFs
dWVNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMpKTsKLQotICAgICAgICB0aGlzLl9sYWJlbFNwYW4g
PSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuZGF5LWNvdW50Jyk7CisgICAgICAgIHN1
cGVyKCdjaGFydHMtdG9vbGJhcicsIDcpOwogCiAgICAgICAgIHRoaXMuX2FkZFBhbmVDYWxsYmFj
ayA9IG51bGw7CiAgICAgICAgIHRoaXMuX3BhbmVTZWxlY3RvciA9IHRoaXMuY29udGVudCgpLnF1
ZXJ5U2VsZWN0b3IoJ3BhbmUtc2VsZWN0b3InKS5jb21wb25lbnQoKTsKQEAgLTM1LDE0ICsxOSw2
IEBAIGNsYXNzIENoYXJ0c1Rvb2xiYXIgZXh0ZW5kcyBEb21haW5Db250cm9sVG9vbGJhciB7CiAg
ICAgewogICAgICAgICBzdXBlci5yZW5kZXIoKTsKICAgICAgICAgdGhpcy5fcGFuZVNlbGVjdG9y
LmVucXVldWVUb1JlbmRlcigpOwotICAgICAgICB0aGlzLl9sYWJlbFNwYW4udGV4dENvbnRlbnQg
PSB0aGlzLl9udW1iZXJPZkRheXM7Ci0gICAgICAgIHRoaXMuX3NldElucHV0RWxlbWVudFZhbHVl
KHRoaXMuX251bWJlck9mRGF5cyk7Ci0gICAgfQotCi0gICAgc2V0TnVtYmVyT2ZEYXlzQ2FsbGJh
Y2soY2FsbGJhY2spCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCghY2FsbGJhY2sgfHwg
Y2FsbGJhY2sgaW5zdGFuY2VvZiBGdW5jdGlvbik7Ci0gICAgICAgIHRoaXMuX251bWJlck9mRGF5
c0NhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgfQogCiAgICAgc2V0QWRkUGFuZUNhbGxiYWNrKGNh
bGxiYWNrKQpAQCAtNTEsNjUgKzI3LDYgQEAgY2xhc3MgQ2hhcnRzVG9vbGJhciBleHRlbmRzIERv
bWFpbkNvbnRyb2xUb29sYmFyIHsKICAgICAgICAgdGhpcy5fYWRkUGFuZUNhbGxiYWNrID0gY2Fs
bGJhY2s7CiAgICAgfQogCi0gICAgc2V0U3RhcnRUaW1lKHN0YXJ0VGltZSkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX2V4aXRUZXh0TW9kZSgpOwotICAgICAgICBpZiAoc3RhcnRUaW1lKQotICAgICAg
ICAgICAgc3VwZXIuc2V0U3RhcnRUaW1lKHN0YXJ0VGltZSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHN1cGVyLnNldE51bWJlck9mRGF5cyg3KTsKLSAgICB9Ci0KLSAgICBfc2V0SW5wdXRF
bGVtZW50VmFsdWUodmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLl9zbGlkZXIudmFsdWUgPSBN
YXRoLnBvdyh2YWx1ZSwgMS8zKTsKLSAgICAgICAgdGhpcy5fc2xpZGVyLm1pbiA9IE1hdGgucG93
KHRoaXMuX21pbkRheUNvdW50LCAxLzMpOwotICAgICAgICB0aGlzLl9zbGlkZXIubWF4ID0gTWF0
aC5wb3codGhpcy5fbWF4RGF5Q291bnQsIDEvMyk7Ci0gICAgICAgIHRoaXMuX3NsaWRlci5zdGVw
ID0gJ2FueSc7Ci0gICAgICAgIHRoaXMuX2VkaXRvci52YWx1ZSA9IHZhbHVlOwotICAgIH0KLQot
ICAgIF9lbnRlclRleHRNb2RlKGV2ZW50KQotICAgIHsKLSAgICAgICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTsKLSAgICAgICAgdGhpcy5fZWRpdG9yLnN0eWxlLm9wYWNpdHkgPSAxOwotICAgICAg
ICB0aGlzLl9lZGl0b3Iuc3R5bGUubWFyZ2luTGVmdCA9ICctMi41cmVtJzsKLSAgICAgICAgdGhp
cy5fbGFiZWxTcGFuLnN0eWxlLm9wYWNpdHkgPSAwOwotICAgICAgICB0aGlzLl9zbGlkZXIuc3R5
bGUub3BhY2l0eSA9IDA7Ci0gICAgfQotCi0gICAgX2V4aXRUZXh0TW9kZShldmVudCkKLSAgICB7
Ci0gICAgICAgIGlmIChldmVudCkKLSAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7
Ci0gICAgICAgIHRoaXMuX2VkaXRvci5zdHlsZS5vcGFjaXR5ID0gMDsKLSAgICAgICAgdGhpcy5f
ZWRpdG9yLnN0eWxlLm1hcmdpbkxlZnQgPSBudWxsOwotICAgICAgICB0aGlzLl9sYWJlbFNwYW4u
c3R5bGUub3BhY2l0eSA9IDE7Ci0gICAgICAgIHRoaXMuX3NsaWRlci5zdHlsZS5vcGFjaXR5ID0g
MTsKLSAgICB9Ci0KLSAgICBfc2xpZGVyVmFsdWVNYXlIYXZlQ2hhbmdlZChldmVudCkKLSAgICB7
Ci0gICAgICAgIHZhciBudW1iZXJPZkRheXMgPSBNYXRoLnJvdW5kKE1hdGgucG93KHBhcnNlRmxv
YXQodGhpcy5fc2xpZGVyLnZhbHVlKSwgMykpOwotICAgICAgICB0aGlzLl9jYWxsTnVtYmVyT2ZE
YXlzQ2FsbGJhY2soZXZlbnQsIG51bWJlck9mRGF5cyk7Ci0gICAgfQotCi0gICAgX2VkaXRvclZh
bHVlTWF5SGF2ZUNoYW5nZWQoZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgcmF3TnVtYmVyID0g
TWF0aC5yb3VuZChwYXJzZUZsb2F0KHRoaXMuX2VkaXRvci52YWx1ZSkpOwotICAgICAgICB2YXIg
bnVtYmVyT2ZEYXlzID0gTWF0aC5tYXgodGhpcy5fbWluRGF5Q291bnQsIE1hdGgubWluKHRoaXMu
X21heERheUNvdW50LCByYXdOdW1iZXIpKTsKLSAgICAgICAgaWYgKHRoaXMuX2VkaXRvci52YWx1
ZSAhPSBudW1iZXJPZkRheXMpCi0gICAgICAgICAgICB0aGlzLl9lZGl0b3IudmFsdWUgPSBudW1i
ZXJPZkRheXM7Ci0gICAgICAgIHRoaXMuX2NhbGxOdW1iZXJPZkRheXNDYWxsYmFjayhldmVudCwg
bnVtYmVyT2ZEYXlzKTsKLSAgICB9Ci0KLSAgICBfY2FsbE51bWJlck9mRGF5c0NhbGxiYWNrKGV2
ZW50LCBudW1iZXJPZkRheXMpCi0gICAgewotICAgICAgICB2YXIgc2hvdWxkVXBkYXRlU3RhdGUg
PSBldmVudC50eXBlID09ICdjaGFuZ2UnOwotICAgICAgICBpZiAoKHRoaXMubnVtYmVyT2ZEYXlz
KCkgIT0gbnVtYmVyT2ZEYXlzIHx8IHNob3VsZFVwZGF0ZVN0YXRlKSAmJiB0aGlzLl9udW1iZXJP
ZkRheXNDYWxsYmFjaykKLSAgICAgICAgICAgIHRoaXMuX251bWJlck9mRGF5c0NhbGxiYWNrKG51
bWJlck9mRGF5cywgc2hvdWxkVXBkYXRlU3RhdGUpOwotICAgIH0KLQogICAgIF90b2dnbGVQYW5l
U2VsZWN0b3IoZXZlbnQpCiAgICAgewogICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwpA
QCAtMTQ1LDM0ICs2MiwyNSBAQCBjbGFzcyBDaGFydHNUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29u
dHJvbFRvb2xiYXIgewogICAgICAgICAgICAgdGhpcy5fYWRkUGFuZUNhbGxiYWNrKHBsYXRmb3Jt
LCBtZXRyaWMpOwogICAgIH0KIAotCiAgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgpCiAgICAgewog
ICAgICAgICByZXR1cm4gYAotICAgICAgICAgICAgPG5hdiBjbGFzcz0iY2hhcnRzLXRvb2xiYXIi
PgorICAgICAgICAgICAgPG5hdj4KICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImJ1dHRvbmVk
LXRvb2xiYXIiPgogICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iIyIgY2xhc3M9InBh
bmUtc2VsZWN0b3Itb3BlbmVyIj5BZGQgcGFuZTwvYT48L2xpPgogICAgICAgICAgICAgICAgIDwv
dWw+Ci0gICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJidXR0b25lZC10b29sYmFyIj4KLSAgICAg
ICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJzdGFydC10aW1lLXNsaWRlciI+Ci0gICAgICAgICAg
ICAgICAgICAgICAgICA8bGFiZWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0
IGNsYXNzPSJzbGlkZXIiIHR5cGU9InJhbmdlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8aW5wdXQgY2xhc3M9ImVkaXRvciIgdHlwZT0ibnVtYmVyIj4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPjxzcGFuIGNsYXNzPSJkYXktY291bnQiIHRh
YmluZGV4PSIwIj4/PC9zcGFuPiBkYXlzPC9zcGFuPgotICAgICAgICAgICAgICAgICAgICAgICAg
PC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAgICAgICA8L3Vs
PgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmUtc2VsZWN0b3ItY29udGFpbmVyIj4K
ICAgICAgICAgICAgICAgICAgICAgPHBhbmUtc2VsZWN0b3I+PC9wYW5lLXNlbGVjdG9yPgogICAg
ICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9uYXY+YDsKKyAgICAgICAgICAgICAg
ICAkeyBzdXBlci5odG1sVGVtcGxhdGUoKSB9CisgICAgICAgICAgICA8L25hdj4KKyAgICAgICAg
YDsKICAgICB9CiAKICAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIFRvb2xiYXIuY3NzVGVtcGxhdGUoKSArIGAKLQotICAgICAgICAgICAgLmNoYXJ0cy10b29s
YmFyID4gLmJ1dHRvbmVkLXRvb2xiYXI6Zmlyc3QtY2hpbGQgeworICAgICAgICByZXR1cm4gc3Vw
ZXIuY3NzVGVtcGxhdGUoKSArIGAKKyAgICAgICAgICAgIG5hdiA+IC5idXR0b25lZC10b29sYmFy
OmZpcnN0LWNoaWxkIHsKICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTsKICAg
ICAgICAgICAgIH0KIApAQCAtMTgwLDcgKzg4LDcgQEAgY2xhc3MgQ2hhcnRzVG9vbGJhciBleHRl
bmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsKICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBy
Z2JhKDIwNCwgMTUzLCA1MSwgMC4xKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLmNo
YXJ0cy10b29sYmFyID4gLnBhbmUtc2VsZWN0b3ItY29udGFpbmVyIHsKKyAgICAgICAgICAgIG5h
diA+IC5wYW5lLXNlbGVjdG9yLWNvbnRhaW5lciB7CiAgICAgICAgICAgICAgICAgcG9zaXRpb246
IGFic29sdXRlOwogICAgICAgICAgICAgICAgIHJpZ2h0OiAxcmVtOwogICAgICAgICAgICAgICAg
IG1hcmdpbjogMDsKQEAgLTE5MiwzOSArMTAwLDggQEAgY2xhc3MgQ2hhcnRzVG9vbGJhciBleHRl
bmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsKICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBy
Z2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgICAgICAgICAgICAgLXdlYmtpdC1iYWNrZHJv
cC1maWx0ZXI6IGJsdXIoMC41cmVtKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLmJ1
dHRvbmVkLXRvb2xiYXIgLnN0YXJ0LXRpbWUtc2xpZGVyIHsKLSAgICAgICAgICAgICAgICBtYXJn
aW4tbGVmdDogMnJlbTsKLSAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMWVtOwotICAgICAg
ICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAuc3RhcnQtdGltZS1zbGlkZXIgbGFiZWwgewotICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlu
bGluZS1ibG9jazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLnN0YXJ0LXRpbWUtc2xp
ZGVyIC5zbGlkZXIgewotICAgICAgICAgICAgICAgIGhlaWdodDogMC44cmVtOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIgLmVkaXRvciB7Ci0gICAgICAg
ICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwotICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7
Ci0gICAgICAgICAgICAgICAgd2lkdGg6IDRyZW07Ci0gICAgICAgICAgICAgICAgZm9udC13ZWln
aHQ6IGluaGVyaXQ7Ci0gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07Ci0gICAgICAg
ICAgICAgICAgaGVpZ2h0OiAwLjlyZW07Ci0gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTsK
LSAgICAgICAgICAgICAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOwotICAgICAgICAgICAgICAg
IHotaW5kZXg6IDU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC5zdGFydC10aW1lLXNs
aWRlciAuZGF5LWNvdW50IHsKLSAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
Ci0gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgICAgICAgICAgICAgd2lk
dGg6IDJyZW07Ci0gICAgICAgICAgICB9CiAgICAgICAgIGA7CiAgICAgfQotCiB9CisKK0NvbXBv
bmVudEJhc2UuZGVmaW5lRWxlbWVudCgnY2hhcnRzLXRvb2xiYXInLCBDaGFydHNUb29sYmFyKTsK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvZG9t
YWluLWNvbnRyb2wtdG9vbGJhci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvcGFnZXMvZG9tYWluLWNvbnRyb2wtdG9vbGJhci5qcwppbmRleCBjNmJmNjE0ZTM2MDgyYzk4
OTRkNGFiM2I5MzlkM2Y2MDc5NzU1ZGUyLi43MGViNzcwNDA1ZWRhMmUyYTU5ZjZhYWM5MDViNTAw
M2U2MzE2ZjIzIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L3BhZ2VzL2RvbWFpbi1jb250cm9sLXRvb2xiYXIuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9wYWdlcy9kb21haW4tY29udHJvbC10b29sYmFyLmpzCkBAIC0xNyw3
ICsxNyw3IEBAIGNsYXNzIERvbWFpbkNvbnRyb2xUb29sYmFyIGV4dGVuZHMgVG9vbGJhciB7CiAK
ICAgICBzZXRTdGFydFRpbWUoc3RhcnRUaW1lKQogICAgIHsKLSAgICAgICAgdGhpcy5zZXROdW1i
ZXJPZkRheXMoTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCgodGhpcy5fcHJlc2VudCAtIHN0YXJ0VGlt
ZSkgLyB0aGlzLl9taWxsaXNlY29uZHNQZXJEYXkpKSk7CisgICAgICAgIHRoaXMuc2V0TnVtYmVy
T2ZEYXlzKE1hdGgubWF4KDAsIE1hdGgucm91bmQoKHRoaXMuX3ByZXNlbnQgLSBzdGFydFRpbWUp
IC8gdGhpcy5fbWlsbGlzZWNvbmRzUGVyRGF5KSkpOwogICAgICAgICB0aGlzLl9zdGFydFRpbWUg
PSBzdGFydFRpbWU7CiAgICAgfQogCkBAIC0yOCw3ICsyOCw3IEBAIGNsYXNzIERvbWFpbkNvbnRy
b2xUb29sYmFyIGV4dGVuZHMgVG9vbGJhciB7CiAKICAgICBzZXROdW1iZXJPZkRheXMobnVtYmVy
T2ZEYXlzLCBzZXRCeVVzZXIpCiAgICAgewotICAgICAgICBpZiAoIW51bWJlck9mRGF5cykKKyAg
ICAgICAgaWYgKCFudW1iZXJPZkRheXMgJiYgbnVtYmVyT2ZEYXlzICE9PSAwKQogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IG51bGw7CmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3NsaWRlci10b29sYmFy
LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zbGlkZXItdG9v
bGJhci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kNGNiOGQwYzczMTdlZjU1NjkzNjU3MDllZmQ4YzhmNDZhMjI2
NjYzCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9wYWdlcy9zbGlkZXItdG9vbGJhci5qcwpAQCAtMCwwICsxLDE1NCBAQAorCitjbGFzcyBTbGlk
ZXJUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRvb2xiYXIgeworICAgIGNvbnN0cnVjdG9y
KG5hbWUsIGRlZmF1bHROdW1iZXJPZkRheXMpCisgICAgeworICAgICAgICBzdXBlcihuYW1lLCBk
ZWZhdWx0TnVtYmVyT2ZEYXlzKTsKKworICAgICAgICB0aGlzLl9taW5EYXlDb3VudCA9IDE7Cisg
ICAgICAgIHRoaXMuX21heERheUNvdW50ID0gMzY2OworICAgICAgICB0aGlzLl9kZWZhdWx0TnVt
YmVyT2ZEYXlzID0gZGVmYXVsdE51bWJlck9mRGF5czsKKworICAgICAgICB0aGlzLl9udW1iZXJP
ZkRheXNDYWxsYmFjayA9IG51bGw7CisgICAgICAgIHRoaXMuX3NsaWRlciA9IHRoaXMuY29udGVu
dCgpLnF1ZXJ5U2VsZWN0b3IoJy5zbGlkZXInKTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLmFkZEV2
ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX3NsaWRlclZhbHVlTWF5SGF2ZUNoYW5nZWQuYmlu
ZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX3NsaWRlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1v
dmUnLCB0aGlzLl9zbGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOworCisgICAg
ICAgIHRoaXMuX2VkaXRvciA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3In
KTsKKyAgICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5f
ZW50ZXJUZXh0TW9kZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50
TGlzdGVuZXIoJ2JsdXInLCB0aGlzLl9leGl0VGV4dE1vZGUuYmluZCh0aGlzKSk7CisgICAgICAg
IHRoaXMuX2VkaXRvci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX2VkaXRvclZhbHVl
TWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2VkaXRvci5hZGRFdmVu
dExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9lZGl0b3JWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQo
dGhpcykpOworCisgICAgICAgIHRoaXMuX2xhYmVsU3BhbiA9IHRoaXMuY29udGVudCgpLnF1ZXJ5
U2VsZWN0b3IoJy5kYXktY291bnQnKTsKKyAgICB9CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAg
ICAgICAgc3VwZXIucmVuZGVyKCk7CisgICAgICAgIHRoaXMuX2xhYmVsU3Bhbi50ZXh0Q29udGVu
dCA9IHRoaXMuX251bWJlck9mRGF5czsKKyAgICAgICAgdGhpcy5fc2V0SW5wdXRFbGVtZW50VmFs
dWUodGhpcy5fbnVtYmVyT2ZEYXlzKTsKKyAgICB9CisKKyAgICBzZXROdW1iZXJPZkRheXNDYWxs
YmFjayhjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFjYWxsYmFjayB8
fCBjYWxsYmFjayBpbnN0YW5jZW9mIEZ1bmN0aW9uKTsKKyAgICAgICAgdGhpcy5fbnVtYmVyT2ZE
YXlzQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICB9CisKKyAgICBzZXRTdGFydFRpbWUoc3RhcnRU
aW1lKQorICAgIHsKKyAgICAgICAgdGhpcy5fZXhpdFRleHRNb2RlKCk7CisgICAgICAgIGlmIChz
dGFydFRpbWUpCisgICAgICAgICAgICBzdXBlci5zZXRTdGFydFRpbWUoc3RhcnRUaW1lKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc3VwZXIuc2V0TnVtYmVyT2ZEYXlzKHRoaXMuX2RlZmF1
bHROdW1iZXJPZkRheXMpOworICAgIH0KKworICAgIF9zZXRJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1
ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3NsaWRlci52YWx1ZSA9IE1hdGgucG93KHZhbHVlLCAx
LzMpOworICAgICAgICB0aGlzLl9zbGlkZXIubWluID0gTWF0aC5wb3codGhpcy5fbWluRGF5Q291
bnQsIDEvMyk7CisgICAgICAgIHRoaXMuX3NsaWRlci5tYXggPSBNYXRoLnBvdyh0aGlzLl9tYXhE
YXlDb3VudCwgMS8zKTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLnN0ZXAgPSAnYW55JzsKKyAgICAg
ICAgdGhpcy5fZWRpdG9yLnZhbHVlID0gdmFsdWU7CisgICAgfQorCisgICAgX2VudGVyVGV4dE1v
ZGUoZXZlbnQpCisgICAgeworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAg
ICB0aGlzLl9lZGl0b3Iuc3R5bGUub3BhY2l0eSA9IDE7CisgICAgICAgIHRoaXMuX2VkaXRvci5z
dHlsZS5tYXJnaW5MZWZ0ID0gJy0yLjVyZW0nOworICAgICAgICB0aGlzLl9sYWJlbFNwYW4uc3R5
bGUub3BhY2l0eSA9IDA7CisgICAgICAgIHRoaXMuX3NsaWRlci5zdHlsZS5vcGFjaXR5ID0gMDsK
KyAgICB9CisKKyAgICBfZXhpdFRleHRNb2RlKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGV2
ZW50KQorICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgdGhpcy5f
ZWRpdG9yLnN0eWxlLm9wYWNpdHkgPSAwOworICAgICAgICB0aGlzLl9lZGl0b3Iuc3R5bGUubWFy
Z2luTGVmdCA9IG51bGw7CisgICAgICAgIHRoaXMuX2xhYmVsU3Bhbi5zdHlsZS5vcGFjaXR5ID0g
MTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLnN0eWxlLm9wYWNpdHkgPSAxOworICAgIH0KKworICAg
IF9zbGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2VkKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIG51
bWJlck9mRGF5cyA9IE1hdGgucm91bmQoTWF0aC5wb3cocGFyc2VGbG9hdCh0aGlzLl9zbGlkZXIu
dmFsdWUpLCAzKSk7CisgICAgICAgIHRoaXMuX2NhbGxOdW1iZXJPZkRheXNDYWxsYmFjayhldmVu
dCwgbnVtYmVyT2ZEYXlzKTsKKyAgICB9CisKKyAgICBfZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdl
ZChldmVudCkKKyAgICB7CisgICAgICAgIHZhciByYXdOdW1iZXIgPSBNYXRoLnJvdW5kKHBhcnNl
RmxvYXQodGhpcy5fZWRpdG9yLnZhbHVlKSk7CisgICAgICAgIHZhciBudW1iZXJPZkRheXMgPSBN
YXRoLm1heCh0aGlzLl9taW5EYXlDb3VudCwgTWF0aC5taW4odGhpcy5fbWF4RGF5Q291bnQsIHJh
d051bWJlcikpOworICAgICAgICBpZiAodGhpcy5fZWRpdG9yLnZhbHVlICE9IG51bWJlck9mRGF5
cykKKyAgICAgICAgICAgIHRoaXMuX2VkaXRvci52YWx1ZSA9IG51bWJlck9mRGF5czsKKyAgICAg
ICAgdGhpcy5fY2FsbE51bWJlck9mRGF5c0NhbGxiYWNrKGV2ZW50LCBudW1iZXJPZkRheXMpOwor
ICAgIH0KKworICAgIF9jYWxsTnVtYmVyT2ZEYXlzQ2FsbGJhY2soZXZlbnQsIG51bWJlck9mRGF5
cykKKyAgICB7CisgICAgICAgIHZhciBzaG91bGRVcGRhdGVTdGF0ZSA9IGV2ZW50LnR5cGUgPT0g
J2NoYW5nZSc7CisgICAgICAgIGlmICgodGhpcy5udW1iZXJPZkRheXMoKSAhPSBudW1iZXJPZkRh
eXMgfHwgc2hvdWxkVXBkYXRlU3RhdGUpICYmIHRoaXMuX251bWJlck9mRGF5c0NhbGxiYWNrKQor
ICAgICAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJhY2sobnVtYmVyT2ZEYXlzLCBzaG91
bGRVcGRhdGVTdGF0ZSk7CisgICAgfQorCisgICAgc3RhdGljIGRheXNDb3VudExhYmVsVGV4dCgp
IHsgcmV0dXJuIGAgZGF5c2A7IH0KKworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImJ1dHRvbmVkLXRv
b2xiYXIiPgorICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InN0YXJ0LXRpbWUtc2xpZGVy
Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8aW5wdXQgY2xhc3M9InNsaWRlciIgdHlwZT0icmFuZ2UiPgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZWRpdG9yIiB0eXBlPSJudW1iZXIiPgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkYXktY291bnQiIHRhYmluZGV4PSIw
Ij48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7IHRoaXMuZGF5c0Nv
dW50TGFiZWxUZXh0KCkgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+
CisgICAgICAgICAgICAgICAgPC91bD5gOworICAgIH0KKworICAgIHN0YXRpYyBjc3NUZW1wbGF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gVG9vbGJhci5jc3NUZW1wbGF0ZSgpICsgYAorICAg
ICAgICAgICAgLmJ1dHRvbmVkLXRvb2xiYXIgLnN0YXJ0LXRpbWUtc2xpZGVyIHsKKyAgICAgICAg
ICAgICAgICBtYXJnaW4tbGVmdDogMnJlbTsKKyAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDog
MWVtOworICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIgLmxhYmVsIHsKKyAgICAgICAgICAgICAg
ICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5z
dGFydC10aW1lLXNsaWRlciAuc2xpZGVyIHsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDAuOHJl
bTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLnN0YXJ0LXRpbWUtc2xpZGVyIC5lZGl0
b3IgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICAgICAg
ICBvcGFjaXR5OiAwOworICAgICAgICAgICAgICAgIHdpZHRoOiA0cmVtOworICAgICAgICAgICAg
ICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44
cmVtOworICAgICAgICAgICAgICAgIGhlaWdodDogMC45cmVtOworICAgICAgICAgICAgICAgIG91
dGxpbmU6IG5vbmU7CisgICAgICAgICAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAg
ICAgICAgICAgICAgICB6LWluZGV4OiA1OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAu
c3RhcnQtdGltZS1zbGlkZXIgLmRheS1jb3VudCB7CisgICAgICAgICAgICAgICAgZGlzcGxheTog
aW5saW5lLWJsb2NrOworICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAg
ICAgICAgICAgIHdpZHRoOiAycmVtOworICAgICAgICAgICAgfQorICAgICAgICBgOworICAgIH0K
K30KKworQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdzbGlkZXItdG9vbGJhcicsIFNsaWRl
clRvb2xiYXIpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL3BhZ2VzL3N1bW1hcnktcGFnZS5qcwppbmRleCAwODllZDk4MmQ3YjA3NGU0NWZlMWI2MGMy
ZWI1YzE1NDY5YzM3YjMxLi45ODNlMjk3NDRhMzc5NTU1YTRlNGMxOGMxNjhmYWU2ODIwZWNkZGFi
IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3N1
bW1hcnktcGFnZS5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3Bh
Z2VzL3N1bW1hcnktcGFnZS5qcwpAQCAtMSw5ICsxLDkgQEAKIAogY2xhc3MgU3VtbWFyeVBhZ2Ug
ZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogCi0gICAgY29uc3RydWN0b3Ioc3VtbWFyeVNldHRp
bmdzKQorICAgIGNvbnN0cnVjdG9yKHN1bW1hcnlTZXR0aW5ncywgdG9vbGJhcikKICAgICB7Ci0g
ICAgICAgIHN1cGVyKHN1bW1hcnlTZXR0aW5ncy5uYW1lLCBudWxsKTsKKyAgICAgICAgc3VwZXIo
c3VtbWFyeVNldHRpbmdzLm5hbWUsIHRvb2xiYXIpOwogCiAgICAgICAgIHRoaXMuX3JvdXRlID0g
c3VtbWFyeVNldHRpbmdzLnJvdXRlOwogICAgICAgICB0aGlzLl90YWJsZSA9IHsKQEAgLTMxLDE0
ICszMSwyOSBAQCBjbGFzcyBTdW1tYXJ5UGFnZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAK
ICAgICBvcGVuKHN0YXRlKQogICAgIHsKKyAgICAgICAgdGhpcy50b29sYmFyKCkuc2V0TnVtYmVy
T2ZEYXlzKDAsIHRydWUpOworICAgICAgICB0aGlzLnRvb2xiYXIoKS5lbnF1ZXVlVG9SZW5kZXIo
KTsKKyAgICAgICAgdGhpcy50b29sYmFyKCkuc2V0TnVtYmVyT2ZEYXlzQ2FsbGJhY2sodGhpcy5z
ZXROdW1iZXJPZkRheXNGcm9tVG9vbGJhci5iaW5kKHRoaXMpKQogICAgICAgICBzdXBlci5vcGVu
KHN0YXRlKTsKKyAgICAgICAgdGhpcy51cGRhdGVBbmRSZW5kZXJGb3JSYW5nZSgwKQorICAgIH0K
IAorICAgIHVwZGF0ZUFuZFJlbmRlckZvclJhbmdlKGRheXMpCisgICAgewogICAgICAgICB2YXIg
Y3VycmVudCA9IERhdGUubm93KCk7Ci0gICAgICAgIHZhciB0aW1lUmFuZ2UgPSBbY3VycmVudCAt
IDI0ICogMzYwMCAqIDEwMDAsIGN1cnJlbnRdOworICAgICAgICB2YXIgb25lRGF5ID0gMjQgKiAz
NjAwICogMTAwMDsKKyAgICAgICAgdmFyIHRpbWVSYW5nZSA9IFtjdXJyZW50IC0gb25lRGF5IC0g
KGRheXMgKiBvbmVEYXkpLCBjdXJyZW50IC0gKGRheXMgKiBvbmVEYXkpXTsKICAgICAgICAgZm9y
ICh2YXIgZ3JvdXAgb2YgdGhpcy5fY29uZmlnR3JvdXBzKQogICAgICAgICAgICAgZ3JvdXAuZmV0
Y2hBbmRDb21wdXRlU3VtbWFyeSh0aW1lUmFuZ2UpLnRoZW4oKCkgPT4geyB0aGlzLmVucXVldWVU
b1JlbmRlcigpOyB9KTsKICAgICB9CiAKKyAgICBzZXROdW1iZXJPZkRheXNGcm9tVG9vbGJhcihu
dW1iZXJPZkRheXMsIHNob3VsZFVwZGF0ZVN0YXRlKQorICAgIHsKKyAgICAgICAgdGhpcy50b29s
YmFyKCkuc2V0TnVtYmVyT2ZEYXlzKG51bWJlck9mRGF5cywgdHJ1ZSk7CisgICAgICAgIHRoaXMu
dG9vbGJhcigpLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICB0aGlzLnVwZGF0ZUFuZFJlbmRl
ckZvclJhbmdlKG51bWJlck9mRGF5cyk7CisgICAgfQorCiAgICAgcmVuZGVyKCkKICAgICB7CiAg
ICAgICAgIEluc3RydW1lbnRhdGlvbi5zdGFydE1lYXN1cmluZ1RpbWUoJ1N1bW1hcnlQYWdlJywg
J3JlbmRlcicpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9wYWdlcy9zdW1tYXJ5LXRvb2xiYXIuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL3BhZ2VzL3N1bW1hcnktdG9vbGJhci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MGIyYmQ5YTMzYzY3
ODFiN2M2ZGEzZGU1MWVkNDk4MGQyYmI1NjdlCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXRvb2xiYXIuanMKQEAgLTAs
MCArMSw1OCBAQAorY2xhc3MgU3VtbWFyeVRvb2xiYXIgZXh0ZW5kcyBTbGlkZXJUb29sYmFyIHsK
KyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcignc3VtbWFyeS10b29sYmFy
JywgMCk7CisKKyAgICAgICAgdGhpcy5fbWluRGF5Q291bnQgPSAwOworICAgICAgICB0aGlzLl9t
YXhEYXlDb3VudCA9IDM2NjsKKyAgICAgICAgdGhpcy5faW5UZXh0TW9kZSA9IGZhbHNlOworCisg
ICAgICAgIHRoaXMuX2RheUNvdW50RGVzY3JpcHRpb24gPSB0aGlzLmNvbnRlbnQoJ2RheS1jb3Vu
dC1kZXNjcmlwdGlvbicpOworICAgIH0KKworICAgIF9hZGRTbGlkZXJUZXh0Rm9ybWF0dGluZ0Zv
clplcm9EYXlzKCkgeworICAgICAgICB0aGlzLl9sYWJlbFNwYW4udGV4dENvbnRlbnQgPSAnJzsK
KyAgICAgICAgdGhpcy5fbGFiZWxTcGFuLnN0eWxlLndpZHRoID0gJzEuMjVyZW0nOworICAgICAg
ICB0aGlzLl9kYXlDb3VudERlc2NyaXB0aW9uLnN0eWxlLndpZHRoID0gJzQuNXJlbSc7CisgICAg
ICAgIHRoaXMuX2RheUNvdW50RGVzY3JpcHRpb24udGV4dENvbnRlbnQgPSAnIEN1cnJlbnQnOwor
ICAgIH0KKworICAgIF9yZW1vdmVTbGlkZXJUZXh0Rm9ybWF0dGluZ0Zvclplcm9EYXlzKCkgewor
ICAgICAgICB0aGlzLl9sYWJlbFNwYW4uc3R5bGUud2lkdGggPSAnMnJlbSc7CisgICAgICAgIHRo
aXMuX2RheUNvdW50RGVzY3JpcHRpb24uc3R5bGUud2lkdGggPSAnMy43NXJlbSc7CisgICAgICAg
IHRoaXMuX2RheUNvdW50RGVzY3JpcHRpb24udGV4dENvbnRlbnQgPSAnIGRheXMgYWdvJzsKKyAg
ICB9CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7CisgICAg
ICAgIGlmICh0aGlzLl9udW1iZXJPZkRheXMgPT09IDAgJiYgIXRoaXMuX2luVGV4dE1vZGUpIHsK
KyAgICAgICAgICAgIHRoaXMuX2FkZFNsaWRlclRleHRGb3JtYXR0aW5nRm9yWmVyb0RheXMoKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3JlbW92ZVNsaWRlclRleHRGb3Jt
YXR0aW5nRm9yWmVyb0RheXMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9lbnRlclRleHRN
b2RlKGV2ZW50KQorICAgIHsKKyAgICAgICAgc3VwZXIuX2VudGVyVGV4dE1vZGUoZXZlbnQpOwor
ICAgICAgICB0aGlzLl9pblRleHRNb2RlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fcmVtb3ZlU2xp
ZGVyVGV4dEZvcm1hdHRpbmdGb3JaZXJvRGF5cygpOworICAgIH0KKworICAgIF9leGl0VGV4dE1v
ZGUoZXZlbnQpCisgICAgeworICAgICAgICBzdXBlci5fZXhpdFRleHRNb2RlKGV2ZW50KTsKKyAg
ICAgICAgdGhpcy5faW5UZXh0TW9kZSA9IGZhbHNlOworICAgICAgICBpZiAodGhpcy5fbnVtYmVy
T2ZEYXlzID09PSAwKSB7CisgICAgICAgICAgICB0aGlzLl9hZGRTbGlkZXJUZXh0Rm9ybWF0dGlu
Z0Zvclplcm9EYXlzKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgZGF5c0NvdW50
TGFiZWxUZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBgPGxhYmVsIGlkPSJkYXktY291bnQt
ZGVzY3JpcHRpb24iIGNsYXNzPSJsYWJlbCI+PC9sYWJlbD5gOworICAgIH0KK30KKworQ29tcG9u
ZW50QmFzZS5kZWZpbmVFbGVtZW50KCdzdW1tYXJ5LXRvb2xiYXInLCBTdW1tYXJ5VG9vbGJhcik7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372600</attachid>
            <date>2019-06-20 16:21:41 -0700</date>
            <delta_ts>2019-06-25 14:55:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199051-20190620162140.patch</filename>
            <type>text/plain</type>
            <size>24753</size>
            <attacher name="Dean Johnson">dean_johnson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NjU3CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCA4NWVmNDExNDJlZWY2NjY3OWJlZmUyMzZiODVmZGFkNDU1OTg3MTEzLi4xOTc5YzA5NGYz
NDFkN2U1MWQyMzFiYjllOWMzNzgwNDliZTI5MTRjIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw2OSBAQAorMjAxOS0wNi0yMCAgRGVhbiBKb2huc29uICA8ZGVhbl9q
b2huc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbcGVyZi53ZWJraXQub3JnXSBBZGQgJ2JhY2sg
aW4gdGltZScgZmVhdHVyZSBmb3IgU3VtbWFyeSBwYWdlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MDUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgIkJhY2sgaW4gdGltZSIgZmVh
dHVyZSBmb3IgYWxsIFN1bW1hcnkgcGFnZXMgb24gdGhlIFdlYktpdCBQZXJmIGRhc2hib2FyZC4g
VGhlcmUgaXMgYSBuZXcKKyAgICAgICAgc2xpZGVyIGluIHRoZSB0b3AgcmlnaHQgY29ybmVyIHdo
aWNoIGNhbiBiZSBkcmFnZ2VkIHRvIHZpZXcgdGhlIHN1bW1hcnkgcGFnZSAnTiBkYXlzIGFnbycu
IFRoZSBkZWZhdWx0IHZpZXcKKyAgICAgICAgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgorCisgICAg
ICAgICogcHVibGljL3YzL2luZGV4Lmh0bWw6IEFkZCBuZXcgcmVzb3VyY2VzOiBzbGlkZXItdG9v
bGJhci5qcywgc3VtbWFyeS10b29sYmFyLmpzLgorICAgICAgICAqIHB1YmxpYy92My9tYWluLmpz
OiBBZGQgbmV3IHN1bW1hcnlUb29sYmFyLCBhbmQgaW5pdGlhbGl6ZSBzdW1tYXJ5IHBhZ2VzIHdp
dGggaXQuCisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvY2hhcnRz
LXRvb2xiYXIuanM6IEFic3RyYWN0IHRoZSBzbGlkZXIgdG9vbGJhciBpbnRvIGEgbmV3IGNsYXNz
LCBhbmQgaW5oZXJpdCBmcm9tIGl0LgorICAgICAgICAoQ2hhcnRzVG9vbGJhcik6IE5vdywgQ2hh
cnRzVG9vbGJhciBpcyBhIG1vc3RseSB0aGluIHdyYXBwZXIgcm91bmQgU2xpZGVyVG9vbGJhciBh
bmQgaW1wbGVtZW50cyB0aGUgJ0FkZCBQYW5lJworICAgICAgICBidXR0b24gKyBmdW5jdGlvbmFs
aXR5LgorICAgICAgICAoQ2hhcnRzVG9vbGJhci5wcm90b3R5cGUucmVuZGVyKToKKyAgICAgICAg
KENoYXJ0c1Rvb2xiYXIuY3NzVGVtcGxhdGUpOgorICAgICAgICAoQ2hhcnRzVG9vbGJhci5wcm90
b3R5cGUuc2V0TnVtYmVyT2ZEYXlzQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoQ2hhcnRz
VG9vbGJhci5wcm90b3R5cGUuc2V0U3RhcnRUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKENoYXJ0
c1Rvb2xiYXIucHJvdG90eXBlLl9zZXRJbnB1dEVsZW1lbnRWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChDaGFydHNUb29sYmFyLnByb3RvdHlwZS5fZW50ZXJUZXh0TW9kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChDaGFydHNUb29sYmFyLnByb3RvdHlwZS5fZXhpdFRleHRNb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLl9zbGlkZXJWYWx1ZU1heUhhdmVDaGFu
Z2VkKTogRGVsZXRlZC4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLl9lZGl0b3JW
YWx1ZU1heUhhdmVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJv
dG90eXBlLl9jYWxsTnVtYmVyT2ZEYXlzQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoQ2hh
cnRzVG9vbGJhci5odG1sVGVtcGxhdGUpOiBXcmFwIFNpbGRlclRvb2xiYXIncyBodG1sVGVtcGxh
dGUgd2l0aCBhIG5hdiBhbmQgZW1iZWQgdGhlICdBZGQgUGFuZScgYnV0dG9uLgorICAgICAgICAq
IHB1YmxpYy92My9wYWdlcy9kb21haW4tY29udHJvbC10b29sYmFyLmpzOgorICAgICAgICAoRG9t
YWluQ29udHJvbFRvb2xiYXIucHJvdG90eXBlLnNldFN0YXJ0VGltZSk6IFVwZGF0ZWQgdG8gc3Vw
cG9ydCBhIHZhbHVlIG9mIDAgZm9yIG51bWJlck9mRGF5cy4KKyAgICAgICAgKERvbWFpbkNvbnRy
b2xUb29sYmFyLnByb3RvdHlwZS5zZXROdW1iZXJPZkRheXMpOiBEaXR0by4KKyAgICAgICAgKERv
bWFpbkNvbnRyb2xUb29sYmFyKToKKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvc2xpZGVyLXRv
b2xiYXIuanM6IENvcGllZCBmcm9tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
cGFnZXMvY2hhcnRzLXRvb2xiYXIuanMuCisgICAgICAgIChTbGlkZXJUb29sYmFyKTogQ29waWVk
IGZyb20gY2hhcnRzLXRvb2xiYXIuanM7IEFkZGVkIF9kZWZhdWx0TnVtYmVyT2ZEYXlzIHdoZW4g
aW52b2tpbmcgY29uc3RydWN0b3IgYW5kCisgICAgICAgIHJlbW92ZWQgJ0FkZCBQYW5lJyBsb2dp
Yy4KKyAgICAgICAgKFNsaWRlclRvb2xiYXIucHJvdG90eXBlLnJlbmRlcik6IE1vdmVkIGZyb20g
Y2hhcnRzLXRvb2xiYXIuanMuCisgICAgICAgIChTbGlkZXJUb29sYmFyLnByb3RvdHlwZS5zZXRO
dW1iZXJPZkRheXNDYWxsYmFjayk6IERpdHRvLgorICAgICAgICAoU2xpZGVyVG9vbGJhci5wcm90
b3R5cGUuc2V0U3RhcnRUaW1lKTogRGl0dG8sIGJ1dCB1cGRhdGVkIHRvIHVzZSBfZGVmYXVsdE51
bWJlck9mRGF5cy4KKyAgICAgICAgKFNsaWRlclRvb2xiYXIucHJvdG90eXBlLl9zZXRJbnB1dEVs
ZW1lbnRWYWx1ZSk6IERpdHRvLgorICAgICAgICAoU2xpZGVyVG9vbGJhci5wcm90b3R5cGUuX2Vu
dGVyVGV4dE1vZGUpOiBEaXR0by4KKyAgICAgICAgKFNsaWRlclRvb2xiYXIucHJvdG90eXBlLl9l
eGl0VGV4dE1vZGUpOiBEaXR0by4KKyAgICAgICAgKFNsaWRlclRvb2xiYXIucHJvdG90eXBlLl9z
bGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2VkKTogRGl0dG8uCisgICAgICAgIChTbGlkZXJUb29sYmFy
LnByb3RvdHlwZS5fZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAo
U2xpZGVyVG9vbGJhci5wcm90b3R5cGUuX2NhbGxOdW1iZXJPZkRheXNDYWxsYmFjayk6IERpdHRv
LgorICAgICAgICAoU2xpZGVyVG9vbGJhci5kYXlzQ291bnRMYWJlbFRleHQpOiBSZXR1cm4gYSBj
dXN0b20gZWxlbWVudCBmb3IgbW9kaWZ5aW5nIHRoZSB0ZXh0IC8gc3R5bGluZyB1c2VkIGZvciAn
ZGF5cyBhZ28nLgorICAgICAgICAoU2xpZGVyVG9vbGJhci5odG1sVGVtcGxhdGUpOiBSZW1vdmVk
IHVubmVjZXNzYXJ5IG5hdiBhbmQgcmVzdHJ1Y3R1cmUgdG8gdXNlIHN0YXRpYyB2YWx1ZXMgZm9y
IGRheXNDb3VudExhYmVsVGV4dC4KKyAgICAgICAgKFNsaWRlclRvb2xiYXIuY3NzVGVtcGxhdGUp
OiBNb3ZlZCBmcm9tIGNoYXJ0cy10b29sYmFyLmpzLCB3aXRob3V0IHRoZSAnQWRkIFBhbmUnIHN0
eWxpbmcuCisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL3N1bW1hcnktcGFnZS5qczoKKyAgICAg
ICAgKFN1bW1hcnlQYWdlKTogQ2hhbmdlIGNvbnN0cnVjdG9yIHRvIGFjY2VwdCBhIHRvb2xiYXIg
YXJndW1lbnQuCisgICAgICAgIChTdW1tYXJ5UGFnZS5wcm90b3R5cGUub3Blbik6IFJlZmFjdG9y
ZWQgc3VtbWFyeSByZW5kZXJpbmcgaW50byB1cGRhdGVBbmRSZW5kZXJGb3JSYW5nZSwgc28gaXQg
Y2FuIGJlIGNhbGxlZAorICAgICAgICB3aGVuIHRoZSBuZXcgc2xpZGVyIGlzIG1vdmVkLgorICAg
ICAgICAoU3VtbWFyeVBhZ2UucHJvdG90eXBlLnVwZGF0ZUFuZFJlbmRlckZvclJhbmdlKTogVXBk
YXRlcyBzdW1tYXJ5IHBhZ2UgdG8gc2hvdyByZXN1bHRzIGZvciBOIGRheXMgYWdvLgorICAgICAg
ICAoU3VtbWFyeVBhZ2UucHJvdG90eXBlLnNldE51bWJlck9mRGF5c0Zyb21Ub29sYmFyKTogQ2Fs
bGJhY2sgZm9yIHJlLXJlbmRlcmluZyBzdW1tYXJ5IHBhZ2Ugd2l0aCBuZXcgcmVzdWx0cyBhcwor
ICAgICAgICB0aGUgdmFsdWUgb24gdGhlIHNsaWRlciBjaGFuZ2VzLgorICAgICAgICAqIHB1Ymxp
Yy92My9wYWdlcy9zdW1tYXJ5LXRvb2xiYXIuanM6IEFkZGVkLgorICAgICAgICAoU3VtbWFyeVRv
b2xiYXIpOiBCYXNlZCBvbiBTbGlkZXJUb29sYmFyLiBQcmltYXJ5IGNoYW5nZXMgYXJlIHRvIGFs
bG93ICIwIGRheXMgYWdvIiB0byBpbnN0ZWFkIHNob3cgIkN1cnJlbnQiCisgICAgICAgIHdoZW4g
Y2hhbmdpbmcgdmFsdWVzIG9uIHRoZSBzbGlkZXIgYW5kIG5vdCBpbiBUZXh0TW9kZS4KKyAgICAg
ICAgKFN1bW1hcnlUb29sYmFyLnByb3RvdHlwZS5fYWRkU2xpZGVyVGV4dEZvcm1hdHRpbmdGb3Ja
ZXJvRGF5cyk6IEFkZHMgZm9ybWF0dGluZyB0byB1c2UgIkN1cnJlbnQiIGluc3RlYWQgb2YKKyAg
ICAgICAgIjAgZGF5cyBhZ28iIGFuZCBub3Qgc2hpZnQgdGhlIHNsaWRlciB0b29sYmFyLgorICAg
ICAgICAoU3VtbWFyeVRvb2xiYXIucHJvdG90eXBlLl9yZW1vdmVTbGlkZXJUZXh0Rm9ybWF0dGlu
Z0Zvclplcm9EYXlzKTogUmVtb3ZlcyBmb3JtdHRpbmcgdG8gcmV2ZXJ0IHRvIGEgZGVmYXVsdC4K
KyAgICAgICAgKFN1bW1hcnlUb29sYmFyLnByb3RvdHlwZS5yZW5kZXIpOiBTZXQgdGhlIHNwZWNp
YWwgZm9ybWF0dGluZyB3aGVuIG51bWJlck9mRGF5cyA9PSAwLCBvdGhlcndpc2UgdXNlIHRoZSBk
ZWZhdWx0LgorICAgICAgICAoU3VtbWFyeVRvb2xiYXIucHJvdG90eXBlLl9lbnRlclRleHRNb2Rl
KTogUmVtb3ZlIGFsbCBzcGVjaWFsIGZvcm1hdHRpbmcgc2luY2UgJzAgZGF5cyBhZ28nIHJlYWRz
IGJldHRlciB0aGFuCisgICAgICAgICcwIEN1cnJlbnQnLiBBbHNvIHNldCBhIG5ldyBib29sZWFu
ICh0aGlzLl9pblRleHRNb2RlKSB0aGF0IGNhbiBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIHRvIGtl
ZXAgZnJvbSByZXZlcnRpbmcKKyAgICAgICAgZnJvbSAnMCBkYXlzIGFnbycgdG8gJzAgQ3VycmVu
dCcuCisgICAgICAgIChTdW1tYXJ5VG9vbGJhci5wcm90b3R5cGUuX2V4aXRUZXh0TW9kZSk6IFNl
dHMgdGhlIHRleHQgbW9kZSBiYWNrIHRvIEN1cnJlbnQgaWYgbnVtYmVyT2ZEYXlzID09IDAuCisK
IDIwMTktMDYtMTcgIERld2VpIFpodSAgPGRld2VpX3podUBhcHBsZS5jb20+CiAKICAgICAgICAg
Q3VzdG9taXphYmxlIHRlc3QgZ3JvdXAgZm9ybSBzaG91bGQgYWxsb3cgdXNlciB0byBzdXBwbHkg
YSByZXZpc2lvbiBwcmVmaXggb2YgYSBjb21taXQgYW5kIHJldmlzaW9uIHN0YXJ0cyB3aXRoICdy
Jy4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXgu
aHRtbCBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRtbAppbmRl
eCBlNzMxMDc3ZjZlYmUwMDQwN2FkYjA2OGM3ZmZjYmY2MWVhNjZjZGNjLi5jYmM4ZWUxNmJhYjRj
YzdjZDhhNWE3YTZkNzQzZjQ5ZmJhOTdlNzQxIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9pbmRleC5odG1sCkBAIC0xMTMsNiArMTEzLDcgQEAgUnVuIHRvb2xzL2J1
bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2FkIHRpbWUgZm9yIHByb2R1Y3Rpb24u
YCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9kb21haW4tY29udHJvbC10b29sYmFyLmpz
Ij48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL2Rhc2hib2FyZC10b29sYmFy
LmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL2Rhc2hib2FyZC1wYWdl
LmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3NsaWRlci10b29sYmFy
LmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL2NoYXJ0LXBhbmUtc3Rh
dHVzLXZpZXcuanMiPjwvc2NyaXB0PgogICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvY2hhcnQt
cGFuZS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9jaGFydHMtdG9v
bGJhci5qcyI+PC9zY3JpcHQ+CkBAIC0xMjMsNiArMTI0LDcgQEAgUnVuIHRvb2xzL2J1bmRsZS12
My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2FkIHRpbWUgZm9yIHByb2R1Y3Rpb24uYCk7CiAg
ICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9jcmVhdGUtYW5hbHlzaXMtdGFzay1wYWdlLmpzIj48
L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL2J1aWxkLXJlcXVlc3QtcXVldWUt
cGFnZS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9zdW1tYXJ5LXBh
Z2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvc3VtbWFyeS10b29s
YmFyLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3Rlc3QtZnJlc2hu
ZXNzLXBhZ2UuanMiPjwvc2NyaXB0PgogCiAgICAgICAgIDxzY3JpcHQgc3JjPSJtYWluLmpzIj48
L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
bWFpbi5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbWFpbi5qcwppbmRl
eCAwZWJjMmYwMWM3YmM0ZTY4M2U5Njg2OWI1ZjEyZTZjZGMyZjgwYWUzLi42MjE3YjNjZmJhY2Yw
YWU0NTE5ZDI0ZTg3Y2E5YmM4NjE4NWMzOTk4IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL21haW4uanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9tYWluLmpzCkBAIC0yNiwxMSArMjYsMTIgQEAgZnVuY3Rpb24gbWFpbigpIHsK
ICAgICAgICAgICAgICAgICBkYXNoYm9hcmRQYWdlcy5wdXNoKG5ldyBEYXNoYm9hcmRQYWdlKG5h
bWUsIG1hbmlmZXN0LmRhc2hib2FyZHNbbmFtZV0sIGRhc2hib2FyZFRvb2xiYXIpKTsKICAgICAg
ICAgfQogCisgICAgICAgIGNvbnN0IHN1bW1hcnlUb29sYmFyID0gbmV3IFN1bW1hcnlUb29sYmFy
OwogICAgICAgICBjb25zdCBzdW1tYXJ5UGFnZXMgPSBbXTsKICAgICAgICAgbGV0IHRlc3RGcmVz
aG5lc3NQYWdlID0gbnVsbDsKICAgICAgICAgaWYgKG1hbmlmZXN0LnN1bW1hcnlQYWdlcykgewog
ICAgICAgICAgICAgZm9yIChjb25zdCBzdW1tYXJ5UGFnZSBvZiBtYW5pZmVzdC5zdW1tYXJ5UGFn
ZXMpCi0gICAgICAgICAgICAgICAgc3VtbWFyeVBhZ2VzLnB1c2gobmV3IFN1bW1hcnlQYWdlKHN1
bW1hcnlQYWdlKSk7CisgICAgICAgICAgICAgICAgc3VtbWFyeVBhZ2VzLnB1c2gobmV3IFN1bW1h
cnlQYWdlKHN1bW1hcnlQYWdlLCBzdW1tYXJ5VG9vbGJhcikpOwogICAgICAgICAgICAgdGVzdEZy
ZXNobmVzc1BhZ2UgPSBuZXcgVGVzdEZyZXNobmVzc1BhZ2UobWFuaWZlc3Quc3VtbWFyeVBhZ2Vz
LCBtYW5pZmVzdC50ZXN0QWdlVG9sZXJhbmNlSW5Ib3Vycyk7CiAgICAgICAgIH0KIApkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jaGFydHMtdG9v
bGJhci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnRz
LXRvb2xiYXIuanMKaW5kZXggYTA5N2UzNDhlODdmOTdiYzFiOTFiOTc5OThmYWUyNDdhNjc2ODFm
Yi4uMjhlYzliMzUyYzNmODQyMGVlZjE5ZjlhOGFkYWE0MjlmNjEyNmM3NyAxMDA2NDQKLS0tIGEv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jaGFydHMtdG9vbGJhci5q
cworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2NoYXJ0cy10
b29sYmFyLmpzCkBAIC0xLDI0ICsxLDggQEAKIAotY2xhc3MgQ2hhcnRzVG9vbGJhciBleHRlbmRz
IERvbWFpbkNvbnRyb2xUb29sYmFyIHsKK2NsYXNzIENoYXJ0c1Rvb2xiYXIgZXh0ZW5kcyBTbGlk
ZXJUb29sYmFyIHsKICAgICBjb25zdHJ1Y3RvcigpCiAgICAgewotICAgICAgICBzdXBlcignY2hh
cnMtdG9vbGJhcicsIDcpOwotCi0gICAgICAgIHRoaXMuX21pbkRheUNvdW50ID0gMTsKLSAgICAg
ICAgdGhpcy5fbWF4RGF5Q291bnQgPSAzNjY7Ci0KLSAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlz
Q2FsbGJhY2sgPSBudWxsOwotICAgICAgICB0aGlzLl9zbGlkZXIgPSB0aGlzLmNvbnRlbnQoKS5x
dWVyeVNlbGVjdG9yKCcuc2xpZGVyJyk7Ci0gICAgICAgIHRoaXMuX3NsaWRlci5hZGRFdmVudExp
c3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9zbGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhp
cykpOwotICAgICAgICB0aGlzLl9zbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywg
dGhpcy5fc2xpZGVyVmFsdWVNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMpKTsKLQotICAgICAgICB0
aGlzLl9lZGl0b3IgPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7Ci0g
ICAgICAgIHRoaXMuX2VkaXRvci5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX2VudGVy
VGV4dE1vZGUuYmluZCh0aGlzKSk7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5hZGRFdmVudExpc3Rl
bmVyKCdibHVyJywgdGhpcy5fZXhpdFRleHRNb2RlLmJpbmQodGhpcykpOwotICAgICAgICB0aGlz
Ll9lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLl9lZGl0b3JWYWx1ZU1heUhh
dmVDaGFuZ2VkLmJpbmQodGhpcykpOwotICAgICAgICB0aGlzLl9lZGl0b3IuYWRkRXZlbnRMaXN0
ZW5lcignY2hhbmdlJywgdGhpcy5fZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMp
KTsKLQotICAgICAgICB0aGlzLl9sYWJlbFNwYW4gPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVj
dG9yKCcuZGF5LWNvdW50Jyk7CisgICAgICAgIHN1cGVyKCdjaGFydHMtdG9vbGJhcicsIDcpOwog
CiAgICAgICAgIHRoaXMuX2FkZFBhbmVDYWxsYmFjayA9IG51bGw7CiAgICAgICAgIHRoaXMuX3Bh
bmVTZWxlY3RvciA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ3BhbmUtc2VsZWN0b3In
KS5jb21wb25lbnQoKTsKQEAgLTM1LDE0ICsxOSw2IEBAIGNsYXNzIENoYXJ0c1Rvb2xiYXIgZXh0
ZW5kcyBEb21haW5Db250cm9sVG9vbGJhciB7CiAgICAgewogICAgICAgICBzdXBlci5yZW5kZXIo
KTsKICAgICAgICAgdGhpcy5fcGFuZVNlbGVjdG9yLmVucXVldWVUb1JlbmRlcigpOwotICAgICAg
ICB0aGlzLl9sYWJlbFNwYW4udGV4dENvbnRlbnQgPSB0aGlzLl9udW1iZXJPZkRheXM7Ci0gICAg
ICAgIHRoaXMuX3NldElucHV0RWxlbWVudFZhbHVlKHRoaXMuX251bWJlck9mRGF5cyk7Ci0gICAg
fQotCi0gICAgc2V0TnVtYmVyT2ZEYXlzQ2FsbGJhY2soY2FsbGJhY2spCi0gICAgewotICAgICAg
ICBjb25zb2xlLmFzc2VydCghY2FsbGJhY2sgfHwgY2FsbGJhY2sgaW5zdGFuY2VvZiBGdW5jdGlv
bik7Ci0gICAgICAgIHRoaXMuX251bWJlck9mRGF5c0NhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAg
fQogCiAgICAgc2V0QWRkUGFuZUNhbGxiYWNrKGNhbGxiYWNrKQpAQCAtNTEsNjUgKzI3LDYgQEAg
Y2xhc3MgQ2hhcnRzVG9vbGJhciBleHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsKICAgICAg
ICAgdGhpcy5fYWRkUGFuZUNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgfQogCi0gICAgc2V0U3Rh
cnRUaW1lKHN0YXJ0VGltZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2V4aXRUZXh0TW9kZSgpOwot
ICAgICAgICBpZiAoc3RhcnRUaW1lKQotICAgICAgICAgICAgc3VwZXIuc2V0U3RhcnRUaW1lKHN0
YXJ0VGltZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN1cGVyLnNldE51bWJlck9mRGF5
cyg3KTsKLSAgICB9Ci0KLSAgICBfc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWUpCi0gICAgewot
ICAgICAgICB0aGlzLl9zbGlkZXIudmFsdWUgPSBNYXRoLnBvdyh2YWx1ZSwgMS8zKTsKLSAgICAg
ICAgdGhpcy5fc2xpZGVyLm1pbiA9IE1hdGgucG93KHRoaXMuX21pbkRheUNvdW50LCAxLzMpOwot
ICAgICAgICB0aGlzLl9zbGlkZXIubWF4ID0gTWF0aC5wb3codGhpcy5fbWF4RGF5Q291bnQsIDEv
Myk7Ci0gICAgICAgIHRoaXMuX3NsaWRlci5zdGVwID0gJ2FueSc7Ci0gICAgICAgIHRoaXMuX2Vk
aXRvci52YWx1ZSA9IHZhbHVlOwotICAgIH0KLQotICAgIF9lbnRlclRleHRNb2RlKGV2ZW50KQot
ICAgIHsKLSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgdGhpcy5fZWRp
dG9yLnN0eWxlLm9wYWNpdHkgPSAxOwotICAgICAgICB0aGlzLl9lZGl0b3Iuc3R5bGUubWFyZ2lu
TGVmdCA9ICctMi41cmVtJzsKLSAgICAgICAgdGhpcy5fbGFiZWxTcGFuLnN0eWxlLm9wYWNpdHkg
PSAwOwotICAgICAgICB0aGlzLl9zbGlkZXIuc3R5bGUub3BhY2l0eSA9IDA7Ci0gICAgfQotCi0g
ICAgX2V4aXRUZXh0TW9kZShldmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChldmVudCkKLSAgICAg
ICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5zdHls
ZS5vcGFjaXR5ID0gMDsKLSAgICAgICAgdGhpcy5fZWRpdG9yLnN0eWxlLm1hcmdpbkxlZnQgPSBu
dWxsOwotICAgICAgICB0aGlzLl9sYWJlbFNwYW4uc3R5bGUub3BhY2l0eSA9IDE7Ci0gICAgICAg
IHRoaXMuX3NsaWRlci5zdHlsZS5vcGFjaXR5ID0gMTsKLSAgICB9Ci0KLSAgICBfc2xpZGVyVmFs
dWVNYXlIYXZlQ2hhbmdlZChldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBudW1iZXJPZkRheXMg
PSBNYXRoLnJvdW5kKE1hdGgucG93KHBhcnNlRmxvYXQodGhpcy5fc2xpZGVyLnZhbHVlKSwgMykp
OwotICAgICAgICB0aGlzLl9jYWxsTnVtYmVyT2ZEYXlzQ2FsbGJhY2soZXZlbnQsIG51bWJlck9m
RGF5cyk7Ci0gICAgfQotCi0gICAgX2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQoZXZlbnQpCi0g
ICAgewotICAgICAgICB2YXIgcmF3TnVtYmVyID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KHRoaXMu
X2VkaXRvci52YWx1ZSkpOwotICAgICAgICB2YXIgbnVtYmVyT2ZEYXlzID0gTWF0aC5tYXgodGhp
cy5fbWluRGF5Q291bnQsIE1hdGgubWluKHRoaXMuX21heERheUNvdW50LCByYXdOdW1iZXIpKTsK
LSAgICAgICAgaWYgKHRoaXMuX2VkaXRvci52YWx1ZSAhPSBudW1iZXJPZkRheXMpCi0gICAgICAg
ICAgICB0aGlzLl9lZGl0b3IudmFsdWUgPSBudW1iZXJPZkRheXM7Ci0gICAgICAgIHRoaXMuX2Nh
bGxOdW1iZXJPZkRheXNDYWxsYmFjayhldmVudCwgbnVtYmVyT2ZEYXlzKTsKLSAgICB9Ci0KLSAg
ICBfY2FsbE51bWJlck9mRGF5c0NhbGxiYWNrKGV2ZW50LCBudW1iZXJPZkRheXMpCi0gICAgewot
ICAgICAgICB2YXIgc2hvdWxkVXBkYXRlU3RhdGUgPSBldmVudC50eXBlID09ICdjaGFuZ2UnOwot
ICAgICAgICBpZiAoKHRoaXMubnVtYmVyT2ZEYXlzKCkgIT0gbnVtYmVyT2ZEYXlzIHx8IHNob3Vs
ZFVwZGF0ZVN0YXRlKSAmJiB0aGlzLl9udW1iZXJPZkRheXNDYWxsYmFjaykKLSAgICAgICAgICAg
IHRoaXMuX251bWJlck9mRGF5c0NhbGxiYWNrKG51bWJlck9mRGF5cywgc2hvdWxkVXBkYXRlU3Rh
dGUpOwotICAgIH0KLQogICAgIF90b2dnbGVQYW5lU2VsZWN0b3IoZXZlbnQpCiAgICAgewogICAg
ICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwpAQCAtMTQ1LDM0ICs2MiwyNSBAQCBjbGFzcyBD
aGFydHNUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRvb2xiYXIgewogICAgICAgICAgICAg
dGhpcy5fYWRkUGFuZUNhbGxiYWNrKHBsYXRmb3JtLCBtZXRyaWMpOwogICAgIH0KIAotCiAgICAg
c3RhdGljIGh0bWxUZW1wbGF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gYAotICAgICAgICAg
ICAgPG5hdiBjbGFzcz0iY2hhcnRzLXRvb2xiYXIiPgorICAgICAgICAgICAgPG5hdj4KICAgICAg
ICAgICAgICAgICA8dWwgY2xhc3M9ImJ1dHRvbmVkLXRvb2xiYXIiPgogICAgICAgICAgICAgICAg
ICAgICA8bGk+PGEgaHJlZj0iIyIgY2xhc3M9InBhbmUtc2VsZWN0b3Itb3BlbmVyIj5BZGQgcGFu
ZTwvYT48L2xpPgogICAgICAgICAgICAgICAgIDwvdWw+Ci0gICAgICAgICAgICAgICAgPHVsIGNs
YXNzPSJidXR0b25lZC10b29sYmFyIj4KLSAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJz
dGFydC10aW1lLXNsaWRlciI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJzbGlkZXIiIHR5cGU9InJhbmdl
Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImVkaXRvciIgdHlw
ZT0ibnVtYmVyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFi
ZWwiPjxzcGFuIGNsYXNzPSJkYXktY291bnQiIHRhYmluZGV4PSIwIj4/PC9zcGFuPiBkYXlzPC9z
cGFuPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KLSAgICAgICAgICAgICAgICAg
ICAgPC9saT4KLSAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgIDxkaXYgY2xh
c3M9InBhbmUtc2VsZWN0b3ItY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgPHBhbmUt
c2VsZWN0b3I+PC9wYW5lLXNlbGVjdG9yPgogICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAg
ICAgICAgPC9uYXY+YDsKKyAgICAgICAgICAgICAgICAkeyBzdXBlci5odG1sVGVtcGxhdGUoKSB9
CisgICAgICAgICAgICA8L25hdj4KKyAgICAgICAgYDsKICAgICB9CiAKICAgICBzdGF0aWMgY3Nz
VGVtcGxhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFRvb2xiYXIuY3NzVGVtcGxhdGUoKSAr
IGAKLQotICAgICAgICAgICAgLmNoYXJ0cy10b29sYmFyID4gLmJ1dHRvbmVkLXRvb2xiYXI6Zmly
c3QtY2hpbGQgeworICAgICAgICByZXR1cm4gc3VwZXIuY3NzVGVtcGxhdGUoKSArIGAKKyAgICAg
ICAgICAgIG5hdiA+IC5idXR0b25lZC10b29sYmFyOmZpcnN0LWNoaWxkIHsKICAgICAgICAgICAg
ICAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTsKICAgICAgICAgICAgIH0KIApAQCAtMTgwLDcgKzg4
LDcgQEAgY2xhc3MgQ2hhcnRzVG9vbGJhciBleHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsK
ICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIwNCwgMTUzLCA1MSwgMC4xKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgLmNoYXJ0cy10b29sYmFyID4gLnBhbmUtc2VsZWN0
b3ItY29udGFpbmVyIHsKKyAgICAgICAgICAgIG5hdiA+IC5wYW5lLXNlbGVjdG9yLWNvbnRhaW5l
ciB7CiAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgICAgICAg
IHJpZ2h0OiAxcmVtOwogICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKQEAgLTE5MiwzOSArMTAw
LDggQEAgY2xhc3MgQ2hhcnRzVG9vbGJhciBleHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsK
ICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAg
ICAgICAgICAgICAgICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMC41cmVtKTsKICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLmJ1dHRvbmVkLXRvb2xiYXIgLnN0YXJ0LXRpbWUt
c2xpZGVyIHsKLSAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMnJlbTsKLSAgICAgICAgICAg
ICAgICBsaW5lLWhlaWdodDogMWVtOwotICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVt
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIgbGFiZWwg
ewotICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLnN0YXJ0LXRpbWUtc2xpZGVyIC5zbGlkZXIgewotICAgICAgICAgICAg
ICAgIGhlaWdodDogMC44cmVtOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAuc3RhcnQt
dGltZS1zbGlkZXIgLmVkaXRvciB7Ci0gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRl
OwotICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7Ci0gICAgICAgICAgICAgICAgd2lkdGg6IDRy
ZW07Ci0gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7Ci0gICAgICAgICAgICAg
ICAgZm9udC1zaXplOiAwLjhyZW07Ci0gICAgICAgICAgICAgICAgaGVpZ2h0OiAwLjlyZW07Ci0g
ICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKLSAgICAgICAgICAgICAgICBib3JkZXI6IHNv
bGlkIDFweCAjY2NjOwotICAgICAgICAgICAgICAgIHotaW5kZXg6IDU7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC5zdGFydC10aW1lLXNsaWRlciAuZGF5LWNvdW50IHsKLSAgICAgICAg
ICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgICAgICAgICAgICAgdGV4dC1hbGln
bjogcmlnaHQ7Ci0gICAgICAgICAgICAgICAgd2lkdGg6IDJyZW07Ci0gICAgICAgICAgICB9CiAg
ICAgICAgIGA7CiAgICAgfQotCiB9CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgnY2hh
cnRzLXRvb2xiYXInLCBDaGFydHNUb29sYmFyKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvZG9tYWluLWNvbnRyb2wtdG9vbGJhci5qcyBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvZG9tYWluLWNvbnRyb2wtdG9v
bGJhci5qcwppbmRleCBjNmJmNjE0ZTM2MDgyYzk4OTRkNGFiM2I5MzlkM2Y2MDc5NzU1ZGUyLi43
MGViNzcwNDA1ZWRhMmUyYTU5ZjZhYWM5MDViNTAwM2U2MzE2ZjIzIDEwMDY0NAotLS0gYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2RvbWFpbi1jb250cm9sLXRvb2xi
YXIuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9kb21h
aW4tY29udHJvbC10b29sYmFyLmpzCkBAIC0xNyw3ICsxNyw3IEBAIGNsYXNzIERvbWFpbkNvbnRy
b2xUb29sYmFyIGV4dGVuZHMgVG9vbGJhciB7CiAKICAgICBzZXRTdGFydFRpbWUoc3RhcnRUaW1l
KQogICAgIHsKLSAgICAgICAgdGhpcy5zZXROdW1iZXJPZkRheXMoTWF0aC5tYXgoMSwgTWF0aC5y
b3VuZCgodGhpcy5fcHJlc2VudCAtIHN0YXJ0VGltZSkgLyB0aGlzLl9taWxsaXNlY29uZHNQZXJE
YXkpKSk7CisgICAgICAgIHRoaXMuc2V0TnVtYmVyT2ZEYXlzKE1hdGgubWF4KDAsIE1hdGgucm91
bmQoKHRoaXMuX3ByZXNlbnQgLSBzdGFydFRpbWUpIC8gdGhpcy5fbWlsbGlzZWNvbmRzUGVyRGF5
KSkpOwogICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBzdGFydFRpbWU7CiAgICAgfQogCkBAIC0y
OCw3ICsyOCw3IEBAIGNsYXNzIERvbWFpbkNvbnRyb2xUb29sYmFyIGV4dGVuZHMgVG9vbGJhciB7
CiAKICAgICBzZXROdW1iZXJPZkRheXMobnVtYmVyT2ZEYXlzLCBzZXRCeVVzZXIpCiAgICAgewot
ICAgICAgICBpZiAoIW51bWJlck9mRGF5cykKKyAgICAgICAgaWYgKCFudW1iZXJPZkRheXMgJiYg
bnVtYmVyT2ZEYXlzICE9PSAwKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMu
X3N0YXJ0VGltZSA9IG51bGw7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL3BhZ2VzL3NsaWRlci10b29sYmFyLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9wYWdlcy9zbGlkZXItdG9vbGJhci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNGNiOGQw
YzczMTdlZjU1NjkzNjU3MDllZmQ4YzhmNDZhMjI2NjYzCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zbGlkZXItdG9vbGJhci5qcwpA
QCAtMCwwICsxLDE1NCBAQAorCitjbGFzcyBTbGlkZXJUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29u
dHJvbFRvb2xiYXIgeworICAgIGNvbnN0cnVjdG9yKG5hbWUsIGRlZmF1bHROdW1iZXJPZkRheXMp
CisgICAgeworICAgICAgICBzdXBlcihuYW1lLCBkZWZhdWx0TnVtYmVyT2ZEYXlzKTsKKworICAg
ICAgICB0aGlzLl9taW5EYXlDb3VudCA9IDE7CisgICAgICAgIHRoaXMuX21heERheUNvdW50ID0g
MzY2OworICAgICAgICB0aGlzLl9kZWZhdWx0TnVtYmVyT2ZEYXlzID0gZGVmYXVsdE51bWJlck9m
RGF5czsKKworICAgICAgICB0aGlzLl9udW1iZXJPZkRheXNDYWxsYmFjayA9IG51bGw7CisgICAg
ICAgIHRoaXMuX3NsaWRlciA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5zbGlkZXIn
KTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMu
X3NsaWRlclZhbHVlTWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX3Ns
aWRlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9zbGlkZXJWYWx1ZU1heUhh
dmVDaGFuZ2VkLmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMuX2VkaXRvciA9IHRoaXMuY29u
dGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKTsKKyAgICAgICAgdGhpcy5fZWRpdG9yLmFk
ZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fZW50ZXJUZXh0TW9kZS5iaW5kKHRoaXMpKTsK
KyAgICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLl9leGl0
VGV4dE1vZGUuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2VkaXRvci5hZGRFdmVudExpc3Rl
bmVyKCdpbnB1dCcsIHRoaXMuX2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlzKSk7
CisgICAgICAgIHRoaXMuX2VkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9l
ZGl0b3JWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMuX2xh
YmVsU3BhbiA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5kYXktY291bnQnKTsKKyAg
ICB9CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7CisgICAg
ICAgIHRoaXMuX2xhYmVsU3Bhbi50ZXh0Q29udGVudCA9IHRoaXMuX251bWJlck9mRGF5czsKKyAg
ICAgICAgdGhpcy5fc2V0SW5wdXRFbGVtZW50VmFsdWUodGhpcy5fbnVtYmVyT2ZEYXlzKTsKKyAg
ICB9CisKKyAgICBzZXROdW1iZXJPZkRheXNDYWxsYmFjayhjYWxsYmFjaykKKyAgICB7CisgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KCFjYWxsYmFjayB8fCBjYWxsYmFjayBpbnN0YW5jZW9mIEZ1bmN0
aW9uKTsKKyAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAg
ICB9CisKKyAgICBzZXRTdGFydFRpbWUoc3RhcnRUaW1lKQorICAgIHsKKyAgICAgICAgdGhpcy5f
ZXhpdFRleHRNb2RlKCk7CisgICAgICAgIGlmIChzdGFydFRpbWUpCisgICAgICAgICAgICBzdXBl
ci5zZXRTdGFydFRpbWUoc3RhcnRUaW1lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3Vw
ZXIuc2V0TnVtYmVyT2ZEYXlzKHRoaXMuX2RlZmF1bHROdW1iZXJPZkRheXMpOworICAgIH0KKwor
ICAgIF9zZXRJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Ns
aWRlci52YWx1ZSA9IE1hdGgucG93KHZhbHVlLCAxLzMpOworICAgICAgICB0aGlzLl9zbGlkZXIu
bWluID0gTWF0aC5wb3codGhpcy5fbWluRGF5Q291bnQsIDEvMyk7CisgICAgICAgIHRoaXMuX3Ns
aWRlci5tYXggPSBNYXRoLnBvdyh0aGlzLl9tYXhEYXlDb3VudCwgMS8zKTsKKyAgICAgICAgdGhp
cy5fc2xpZGVyLnN0ZXAgPSAnYW55JzsKKyAgICAgICAgdGhpcy5fZWRpdG9yLnZhbHVlID0gdmFs
dWU7CisgICAgfQorCisgICAgX2VudGVyVGV4dE1vZGUoZXZlbnQpCisgICAgeworICAgICAgICBl
dmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB0aGlzLl9lZGl0b3Iuc3R5bGUub3BhY2l0
eSA9IDE7CisgICAgICAgIHRoaXMuX2VkaXRvci5zdHlsZS5tYXJnaW5MZWZ0ID0gJy0yLjVyZW0n
OworICAgICAgICB0aGlzLl9sYWJlbFNwYW4uc3R5bGUub3BhY2l0eSA9IDA7CisgICAgICAgIHRo
aXMuX3NsaWRlci5zdHlsZS5vcGFjaXR5ID0gMDsKKyAgICB9CisKKyAgICBfZXhpdFRleHRNb2Rl
KGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50KQorICAgICAgICAgICAgZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKKyAgICAgICAgdGhpcy5fZWRpdG9yLnN0eWxlLm9wYWNpdHkgPSAwOwor
ICAgICAgICB0aGlzLl9lZGl0b3Iuc3R5bGUubWFyZ2luTGVmdCA9IG51bGw7CisgICAgICAgIHRo
aXMuX2xhYmVsU3Bhbi5zdHlsZS5vcGFjaXR5ID0gMTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLnN0
eWxlLm9wYWNpdHkgPSAxOworICAgIH0KKworICAgIF9zbGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2Vk
KGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIG51bWJlck9mRGF5cyA9IE1hdGgucm91bmQoTWF0
aC5wb3cocGFyc2VGbG9hdCh0aGlzLl9zbGlkZXIudmFsdWUpLCAzKSk7CisgICAgICAgIHRoaXMu
X2NhbGxOdW1iZXJPZkRheXNDYWxsYmFjayhldmVudCwgbnVtYmVyT2ZEYXlzKTsKKyAgICB9CisK
KyAgICBfZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdlZChldmVudCkKKyAgICB7CisgICAgICAgIHZh
ciByYXdOdW1iZXIgPSBNYXRoLnJvdW5kKHBhcnNlRmxvYXQodGhpcy5fZWRpdG9yLnZhbHVlKSk7
CisgICAgICAgIHZhciBudW1iZXJPZkRheXMgPSBNYXRoLm1heCh0aGlzLl9taW5EYXlDb3VudCwg
TWF0aC5taW4odGhpcy5fbWF4RGF5Q291bnQsIHJhd051bWJlcikpOworICAgICAgICBpZiAodGhp
cy5fZWRpdG9yLnZhbHVlICE9IG51bWJlck9mRGF5cykKKyAgICAgICAgICAgIHRoaXMuX2VkaXRv
ci52YWx1ZSA9IG51bWJlck9mRGF5czsKKyAgICAgICAgdGhpcy5fY2FsbE51bWJlck9mRGF5c0Nh
bGxiYWNrKGV2ZW50LCBudW1iZXJPZkRheXMpOworICAgIH0KKworICAgIF9jYWxsTnVtYmVyT2ZE
YXlzQ2FsbGJhY2soZXZlbnQsIG51bWJlck9mRGF5cykKKyAgICB7CisgICAgICAgIHZhciBzaG91
bGRVcGRhdGVTdGF0ZSA9IGV2ZW50LnR5cGUgPT0gJ2NoYW5nZSc7CisgICAgICAgIGlmICgodGhp
cy5udW1iZXJPZkRheXMoKSAhPSBudW1iZXJPZkRheXMgfHwgc2hvdWxkVXBkYXRlU3RhdGUpICYm
IHRoaXMuX251bWJlck9mRGF5c0NhbGxiYWNrKQorICAgICAgICAgICAgdGhpcy5fbnVtYmVyT2ZE
YXlzQ2FsbGJhY2sobnVtYmVyT2ZEYXlzLCBzaG91bGRVcGRhdGVTdGF0ZSk7CisgICAgfQorCisg
ICAgc3RhdGljIGRheXNDb3VudExhYmVsVGV4dCgpIHsgcmV0dXJuIGAgZGF5c2A7IH0KKworICAg
IHN0YXRpYyBodG1sVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGAKKyAgICAgICAg
ICAgICAgICA8dWwgY2xhc3M9ImJ1dHRvbmVkLXRvb2xiYXIiPgorICAgICAgICAgICAgICAgICAg
ICA8bGkgY2xhc3M9InN0YXJ0LXRpbWUtc2xpZGVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAg
IDxsYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9InNsaWRl
ciIgdHlwZT0icmFuZ2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFz
cz0iZWRpdG9yIiB0eXBlPSJudW1iZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxz
cGFuIGNsYXNzPSJsYWJlbCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFu
IGNsYXNzPSJkYXktY291bnQiIHRhYmluZGV4PSIwIj48L3NwYW4+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICR7IHRoaXMuZGF5c0NvdW50TGFiZWxUZXh0KCkgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFi
ZWw+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPC91bD5gOwor
ICAgIH0KKworICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
VG9vbGJhci5jc3NUZW1wbGF0ZSgpICsgYAorICAgICAgICAgICAgLmJ1dHRvbmVkLXRvb2xiYXIg
LnN0YXJ0LXRpbWUtc2xpZGVyIHsKKyAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMnJlbTsK
KyAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMWVtOworICAgICAgICAgICAgICAgIGZvbnQt
c2l6ZTogMC45cmVtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuc3RhcnQtdGltZS1z
bGlkZXIgLmxhYmVsIHsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC5zdGFydC10aW1lLXNsaWRlciAuc2xpZGVyIHsK
KyAgICAgICAgICAgICAgICBoZWlnaHQ6IDAuOHJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLnN0YXJ0LXRpbWUtc2xpZGVyIC5lZGl0b3IgeworICAgICAgICAgICAgICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICAgICAgICBvcGFjaXR5OiAwOworICAgICAgICAgICAg
ICAgIHdpZHRoOiA0cmVtOworICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0Owor
ICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtOworICAgICAgICAgICAgICAgIGhlaWdo
dDogMC45cmVtOworICAgICAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CisgICAgICAgICAgICAg
ICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgICAgICB6LWluZGV4OiA1Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIgLmRheS1jb3Vu
dCB7CisgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgICAgICAg
ICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgIHdpZHRoOiAycmVtOworICAg
ICAgICAgICAgfQorICAgICAgICBgOworICAgIH0KK30KKworQ29tcG9uZW50QmFzZS5kZWZpbmVF
bGVtZW50KCdzbGlkZXItdG9vbGJhcicsIFNsaWRlclRvb2xiYXIpOwpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanMgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3N1bW1hcnktcGFnZS5qcwpp
bmRleCAwNWM2MDEzMTRlMWRlNTdiZmMwN2E2Mzk1YzYyOTA5ZDEwMzE0OGFjLi4wNGJmNDc3OTBh
NDFiZDJkZTI4ZWJjYjA0YzgxMzkyMjYwYjkzNTMzIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3N1bW1hcnktcGFnZS5qcworKysgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3N1bW1hcnktcGFnZS5qcwpAQCAtMSw5
ICsxLDkgQEAKIAogY2xhc3MgU3VtbWFyeVBhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewog
Ci0gICAgY29uc3RydWN0b3Ioc3VtbWFyeVNldHRpbmdzKQorICAgIGNvbnN0cnVjdG9yKHN1bW1h
cnlTZXR0aW5ncywgdG9vbGJhcikKICAgICB7Ci0gICAgICAgIHN1cGVyKHN1bW1hcnlTZXR0aW5n
cy5uYW1lLCBudWxsKTsKKyAgICAgICAgc3VwZXIoc3VtbWFyeVNldHRpbmdzLm5hbWUsIHRvb2xi
YXIpOwogCiAgICAgICAgIHRoaXMuX3JvdXRlID0gc3VtbWFyeVNldHRpbmdzLnJvdXRlOwogICAg
ICAgICB0aGlzLl90YWJsZSA9IHsKQEAgLTMxLDE0ICszMSwyOSBAQCBjbGFzcyBTdW1tYXJ5UGFn
ZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAKICAgICBvcGVuKHN0YXRlKQogICAgIHsKKyAg
ICAgICAgdGhpcy50b29sYmFyKCkuc2V0TnVtYmVyT2ZEYXlzKDAsIHRydWUpOworICAgICAgICB0
aGlzLnRvb2xiYXIoKS5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgdGhpcy50b29sYmFyKCku
c2V0TnVtYmVyT2ZEYXlzQ2FsbGJhY2sodGhpcy5zZXROdW1iZXJPZkRheXNGcm9tVG9vbGJhci5i
aW5kKHRoaXMpKQogICAgICAgICBzdXBlci5vcGVuKHN0YXRlKTsKKyAgICAgICAgdGhpcy51cGRh
dGVBbmRSZW5kZXJGb3JSYW5nZSgwKQorICAgIH0KIAotICAgICAgICB2YXIgY3VycmVudCA9IERh
dGUubm93KCk7Ci0gICAgICAgIHZhciB0aW1lUmFuZ2UgPSBbY3VycmVudCAtIDI0ICogMzYwMCAq
IDEwMDAsIGN1cnJlbnRdOworICAgIHVwZGF0ZUFuZFJlbmRlckZvclJhbmdlKGRheXMpCisgICAg
eworICAgICAgICBjb25zdCBjdXJyZW50ID0gRGF0ZS5ub3coKTsKKyAgICAgICAgY29uc3Qgb25l
RGF5ID0gMjQgKiAzNjAwICogMTAwMDsKKyAgICAgICAgY29uc3QgdGltZVJhbmdlID0gW2N1cnJl
bnQgLSBvbmVEYXkgLSAoZGF5cyAqIG9uZURheSksIGN1cnJlbnQgLSAoZGF5cyAqIG9uZURheSld
OwogICAgICAgICBmb3IgKHZhciBncm91cCBvZiB0aGlzLl9jb25maWdHcm91cHMpCiAgICAgICAg
ICAgICBncm91cC5mZXRjaEFuZENvbXB1dGVTdW1tYXJ5KHRpbWVSYW5nZSkudGhlbigoKSA9PiB7
IHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7IH0pOwogICAgIH0KIAorICAgIHNldE51bWJlck9mRGF5
c0Zyb21Ub29sYmFyKG51bWJlck9mRGF5cywgc2hvdWxkVXBkYXRlU3RhdGUpCisgICAgeworICAg
ICAgICB0aGlzLnRvb2xiYXIoKS5zZXROdW1iZXJPZkRheXMobnVtYmVyT2ZEYXlzLCB0cnVlKTsK
KyAgICAgICAgdGhpcy50b29sYmFyKCkuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgICAgIHRoaXMu
dXBkYXRlQW5kUmVuZGVyRm9yUmFuZ2UobnVtYmVyT2ZEYXlzKTsKKyAgICB9CisKICAgICByZW5k
ZXIoKQogICAgIHsKICAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgn
U3VtbWFyeVBhZ2UnLCAncmVuZGVyJyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL3BhZ2VzL3N1bW1hcnktdG9vbGJhci5qcyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvc3VtbWFyeS10b29sYmFyLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjYwYjJiZDlhMzNjNjc4MWI3YzZkYTNkZTUxZWQ0OTgwZDJiYjU2N2UKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3N1bW1hcnktdG9v
bGJhci5qcwpAQCAtMCwwICsxLDU4IEBACitjbGFzcyBTdW1tYXJ5VG9vbGJhciBleHRlbmRzIFNs
aWRlclRvb2xiYXIgeworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCdz
dW1tYXJ5LXRvb2xiYXInLCAwKTsKKworICAgICAgICB0aGlzLl9taW5EYXlDb3VudCA9IDA7Cisg
ICAgICAgIHRoaXMuX21heERheUNvdW50ID0gMzY2OworICAgICAgICB0aGlzLl9pblRleHRNb2Rl
ID0gZmFsc2U7CisKKyAgICAgICAgdGhpcy5fZGF5Q291bnREZXNjcmlwdGlvbiA9IHRoaXMuY29u
dGVudCgnZGF5LWNvdW50LWRlc2NyaXB0aW9uJyk7CisgICAgfQorCisgICAgX2FkZFNsaWRlclRl
eHRGb3JtYXR0aW5nRm9yWmVyb0RheXMoKSB7CisgICAgICAgIHRoaXMuX2xhYmVsU3Bhbi50ZXh0
Q29udGVudCA9ICcnOworICAgICAgICB0aGlzLl9sYWJlbFNwYW4uc3R5bGUud2lkdGggPSAnMS4y
NXJlbSc7CisgICAgICAgIHRoaXMuX2RheUNvdW50RGVzY3JpcHRpb24uc3R5bGUud2lkdGggPSAn
NC41cmVtJzsKKyAgICAgICAgdGhpcy5fZGF5Q291bnREZXNjcmlwdGlvbi50ZXh0Q29udGVudCA9
ICcgQ3VycmVudCc7CisgICAgfQorCisgICAgX3JlbW92ZVNsaWRlclRleHRGb3JtYXR0aW5nRm9y
WmVyb0RheXMoKSB7CisgICAgICAgIHRoaXMuX2xhYmVsU3Bhbi5zdHlsZS53aWR0aCA9ICcycmVt
JzsKKyAgICAgICAgdGhpcy5fZGF5Q291bnREZXNjcmlwdGlvbi5zdHlsZS53aWR0aCA9ICczLjc1
cmVtJzsKKyAgICAgICAgdGhpcy5fZGF5Q291bnREZXNjcmlwdGlvbi50ZXh0Q29udGVudCA9ICcg
ZGF5cyBhZ28nOworICAgIH0KKworICAgIHJlbmRlcigpCisgICAgeworICAgICAgICBzdXBlci5y
ZW5kZXIoKTsKKyAgICAgICAgaWYgKHRoaXMuX251bWJlck9mRGF5cyA9PT0gMCAmJiAhdGhpcy5f
aW5UZXh0TW9kZSkgeworICAgICAgICAgICAgdGhpcy5fYWRkU2xpZGVyVGV4dEZvcm1hdHRpbmdG
b3JaZXJvRGF5cygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5fcmVtb3Zl
U2xpZGVyVGV4dEZvcm1hdHRpbmdGb3JaZXJvRGF5cygpOworICAgICAgICB9CisgICAgfQorCisg
ICAgX2VudGVyVGV4dE1vZGUoZXZlbnQpCisgICAgeworICAgICAgICBzdXBlci5fZW50ZXJUZXh0
TW9kZShldmVudCk7CisgICAgICAgIHRoaXMuX2luVGV4dE1vZGUgPSB0cnVlOworICAgICAgICB0
aGlzLl9yZW1vdmVTbGlkZXJUZXh0Rm9ybWF0dGluZ0Zvclplcm9EYXlzKCk7CisgICAgfQorCisg
ICAgX2V4aXRUZXh0TW9kZShldmVudCkKKyAgICB7CisgICAgICAgIHN1cGVyLl9leGl0VGV4dE1v
ZGUoZXZlbnQpOworICAgICAgICB0aGlzLl9pblRleHRNb2RlID0gZmFsc2U7CisgICAgICAgIGlm
ICh0aGlzLl9udW1iZXJPZkRheXMgPT09IDApIHsKKyAgICAgICAgICAgIHRoaXMuX2FkZFNsaWRl
clRleHRGb3JtYXR0aW5nRm9yWmVyb0RheXMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0
YXRpYyBkYXlzQ291bnRMYWJlbFRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGA8bGFiZWwg
aWQ9ImRheS1jb3VudC1kZXNjcmlwdGlvbiIgY2xhc3M9ImxhYmVsIj48L2xhYmVsPmA7CisgICAg
fQorfQorCitDb21wb25lbnRCYXNlLmRlZmluZUVsZW1lbnQoJ3N1bW1hcnktdG9vbGJhcicsIFN1
bW1hcnlUb29sYmFyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372867</attachid>
            <date>2019-06-25 14:55:03 -0700</date>
            <delta_ts>2019-06-25 17:03:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199051-20190625145503.patch</filename>
            <type>text/plain</type>
            <size>24624</size>
            <attacher name="Dean Johnson">dean_johnson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NzkzCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBhY2U4OWYyMjVlNDYzNjFkYzA2NTg2YzAzNzEzMTc3NDg3YzIxN2I2Li5kZjNmMWY3M2M1
MTkxNjYyZWVjYzU0MDg5ZGRkYzdjZDRjZmM1MzFmIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MSBAQAorMjAxOS0wNi0yNSAgRGVhbiBKb2huc29uICA8ZGVhbl9q
b2huc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbcGVyZi53ZWJraXQub3JnXSBBZGQgJ2JhY2sg
aW4gdGltZScgZmVhdHVyZSBmb3IgU3VtbWFyeSBwYWdlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MDUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgIkJhY2sgaW4gdGltZSIgZmVh
dHVyZSBmb3IgYWxsIFN1bW1hcnkgcGFnZXMgb24gdGhlIFdlYktpdCBQZXJmIGRhc2hib2FyZC4g
VGhlcmUgaXMgYSBuZXcKKyAgICAgICAgc2xpZGVyIGluIHRoZSB0b3AgcmlnaHQgY29ybmVyIHdo
aWNoIGNhbiBiZSBkcmFnZ2VkIHRvIHZpZXcgdGhlIHN1bW1hcnkgcGFnZSAnTiBkYXlzIGFnbycu
IFRoZSBkZWZhdWx0CisgICAgICAgIHZpZXcgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgorCisgICAg
ICAgICogcHVibGljL3YzL2luZGV4Lmh0bWw6IEFkZCBuZXcgcmVzb3VyY2VzOiBjb250aW51b3Vz
LWRvbWFpbi10b29sYmFyLmpzLCBzdW1tYXJ5LXRvb2xiYXIuanMKKyAgICAgICAgKiBwdWJsaWMv
djMvbWFpbi5qczogQWRkIG5ldyBzdW1tYXJ5VG9vbGJhciwgYW5kIGluaXRpYWxpemUgc3VtbWFy
eSBwYWdlcyB3aXRoIGl0LgorICAgICAgICAobWFpbik6CisgICAgICAgICogcHVibGljL3YzL3Bh
Z2VzL2NoYXJ0cy10b29sYmFyLmpzOiBBYnN0cmFjdCB0aGUgc2xpZGVyIHRvb2xiYXIgaW50byBh
IG5ldyBjbGFzcywgYW5kIGluaGVyaXQgZnJvbSBpdC4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIp
OiBOb3csIENoYXJ0c1Rvb2xiYXIgaXMgYSBtb3N0bHkgdGhpbiB3cmFwcGVyIHJvdW5kIFNsaWRl
clRvb2xiYXIgYW5kIGltcGxlbWVudHMgdGhlCisgICAgICAgICdBZGQgUGFuZScgYnV0dG9uICsg
ZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLnJlbmRlcik6
CisgICAgICAgIChDaGFydHNUb29sYmFyLnByb3RvdHlwZS5zZXRTdGFydFRpbWUpOiBFbnN1cmUg
c3RhcnRUaW1lIGlzIG5ldmVyIGxlc3MgdGhhbiAxLgorICAgICAgICAoQ2hhcnRzVG9vbGJhci5o
dG1sVGVtcGxhdGUpOiBNb3ZlZCAnQWRkIFBhbmUnIGJ1dHRvbnMgZnJvbSBDb250aW51b3VzRG9t
YWluVG9vbGJhci4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIuY3NzVGVtcGxhdGUpOiBNb3ZlZCAn
QWRkIFBhbmUnIHN0eWxpbmcgZnJvbSBDb250aW51b3VzRG9tYWluVG9vbGJhci4KKyAgICAgICAg
KENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLnNldE51bWJlck9mRGF5c0NhbGxiYWNrKTogTW92ZWQg
dG8gQ29udGludW91c0RvbWFpblRvb2xiYXIuCisgICAgICAgIChDaGFydHNUb29sYmFyLnByb3Rv
dHlwZS5fc2V0SW5wdXRFbGVtZW50VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKENoYXJ0c1Rvb2xi
YXIucHJvdG90eXBlLl9lbnRlclRleHRNb2RlKTogRGl0dG8uCisgICAgICAgIChDaGFydHNUb29s
YmFyLnByb3RvdHlwZS5fZXhpdFRleHRNb2RlKTogRGl0dG8uCisgICAgICAgIChDaGFydHNUb29s
YmFyLnByb3RvdHlwZS5fc2xpZGVyVmFsdWVNYXlIYXZlQ2hhbmdlZCk6IERpdHRvLgorICAgICAg
ICAoQ2hhcnRzVG9vbGJhci5wcm90b3R5cGUuX2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQpOiBE
aXR0by4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLl9jYWxsTnVtYmVyT2ZEYXlz
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvY29udGludW91cy1k
b21haW4tdG9vbGJhci5qczogQ29waWVkIGluaXRpYWxseSBmcm9tCisgICAgICAgIFdlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnRzLXRvb2xiYXIuanMuCisgICAg
ICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhcik6IE5ldy4gQmFzZWQgb24gQ2hhcnRzVG9vbGJh
ciBhbmQgY29udGFpbnMgcHJpbWFyeSBsb2dpYyBmb3IKKyAgICAgICAgYSAnc2xpZGVyJyB0aGF0
IGFkanVzdHMgdGltZS4gVXNlZCBieSBib3RoIENoYXJ0c1Rvb2xiYXIgYW5kIFN1bW1hcnlUb29s
YmFyLiBDb25zdHJ1Y3RvciBhZGRzCisgICAgICAgIGEgdGhpcy5faW5UZXh0TW9kZSA9IGZhbHNl
IGRlZmF1bHQsIHRvIGZpZ3VyZSBvdXQgaWYgdGV4dCBtb2RlIGlzIGN1cnJlbnRseSBpbiB1c2Ug
aW4gU3VtbWFyeVRvb2xiYXIuCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90
b3R5cGUucmVuZGVyKTogTW92ZWQgZnJvbSBDaGFydHNUb29sYmFyLgorICAgICAgICAoQ29udGlu
dW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBlLnNldE51bWJlck9mRGF5c0NhbGxiYWNrKTogRGl0
dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90b3R5cGUuc2V0U3RhcnRU
aW1lKTogRGl0dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90b3R5cGUu
X3NldElucHV0RWxlbWVudFZhbHVlKTogRGl0dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWlu
VG9vbGJhci5wcm90b3R5cGUuX2VudGVyVGV4dE1vZGUpOiBEaXR0bywgYnV0IGV4cGFuZGVkIHRv
IHVwZGF0ZSB0aGlzLl9pblRleHRNb2RlLgorICAgICAgICAoQ29udGludW91c0RvbWFpblRvb2xi
YXIucHJvdG90eXBlLl9leGl0VGV4dE1vZGUpOiBEaXR0byB0byBfZW50ZXJUZXh0TW9kZS4KKyAg
ICAgICAgKENvbnRpbnVvdXNEb21haW5Ub29sYmFyLnByb3RvdHlwZS5fc2xpZGVyVmFsdWVNYXlI
YXZlQ2hhbmdlZCk6IE1vdmVkIGZyb20gQ2hhcnRzVG9vbGJhci4KKyAgICAgICAgKENvbnRpbnVv
dXNEb21haW5Ub29sYmFyLnByb3RvdHlwZS5fZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdlZCk6IERp
dHRvLgorICAgICAgICAoQ29udGludW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBlLl9jYWxsTnVt
YmVyT2ZEYXlzQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKENvbnRpbnVvdXNEb21haW5Ub29s
YmFyLmRheXNDb3VudExhYmVsVGV4dCk6IEFkZGVkIHNvIGNvbnRlbnQgb2YgZGF5c0NvdW50TGFi
ZWwgY2FuIGJlIG1vZGlmaWVkLgorICAgICAgICAoQ29udGludW91c0RvbWFpblRvb2xiYXIuaHRt
bFRlbXBsYXRlKTogTW92ZWQgZnJvbSBDaGFydHNUb29sYmFyLCBidXQgcmVtb3ZlcyAnQWRkIFBh
bmUnIGJ1dHRvbiBhbmQKKyAgICAgICAgYWxsb3dzIGN1c3RvbWl6YXRpb24gb2YgZGF5c0NvdW50
IGxhYmVsIHRleHQuCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5jc3NUZW1wbGF0
ZSk6IE1vdmVkIGZyb20gQ2hhcnRzVG9vbGJhciwgZXhjZXB0IGZvciAnQWRkIFBhbmUnIHN0eWxp
bmcuCisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL2RvbWFpbi1jb250cm9sLXRvb2xiYXIuanM6
CisgICAgICAgIChEb21haW5Db250cm9sVG9vbGJhci5wcm90b3R5cGUuc2V0U3RhcnRUaW1lKTog
QWRqdXN0IGxvZ2ljIHRvIGFjY291bnQgZm9yIDAgZGF5IHZhbHVlLgorICAgICAgICAoRG9tYWlu
Q29udHJvbFRvb2xiYXIucHJvdG90eXBlLnNldE51bWJlck9mRGF5cyk6IERpdHRvLgorICAgICAg
ICAoRG9tYWluQ29udHJvbFRvb2xiYXIpOgorICAgICAgICAqIHB1YmxpYy92My9wYWdlcy9zdW1t
YXJ5LXBhZ2UuanM6CisgICAgICAgIChTdW1tYXJ5UGFnZSk6IEFkZCBhIGNvbnRydWN0b3IgYXJn
dW1lbnQgZm9yIGEgdG9vbGJhci4KKyAgICAgICAgKFN1bW1hcnlQYWdlLnByb3RvdHlwZS5vcGVu
KTogU3BsaXQgcHJpbWFyeSBsb2dpYyBpbnRvIHVwZGF0ZUFuZFJlbmRlckZvclJhbmdlLgorICAg
ICAgICAoU3VtbWFyeVBhZ2UucHJvdG90eXBlLnVwZGF0ZUFuZFJlbmRlckZvclJhbmdlKTogTmV3
LiBVc2VkIHRvIGNoYW5nZSAjIGRheXMgYWdvIGF0IHdoaWNoIHN1bW1hcnkKKyAgICAgICAgY2Fs
Y3VsYXRpb25zIHdlcmUgYXBwbGllZC4KKyAgICAgICAgKFN1bW1hcnlQYWdlLnByb3RvdHlwZS5z
ZXROdW1iZXJPZkRheXNGcm9tVG9vbGJhcik6IENhbGxiYWNrIGZvciB3aGVuIHNsaWRlciBvciB0
ZXh0TW9kZSAnZGF5cycgdmFsdWUKKyAgICAgICAgY2hhbmdlcy4KKyAgICAgICAgKiBwdWJsaWMv
djMvcGFnZXMvc3VtbWFyeS10b29sYmFyLmpzOiBOZXcuIEFkZHMgYSBzbGlkZXIgZm9yIHRoZSBz
dW1tYXJ5IHBhZ2UgdG8gcmUtZXZhbHVhdGUgYXQgc29tZQorICAgICAgICAjIG9mIGRheXMgYWdv
LgorICAgICAgICAoU3VtbWFyeVRvb2xiYXIpOiBOZXcuCisgICAgICAgIChTdW1tYXJ5VG9vbGJh
ci5wcm90b3R5cGUuX2FkZFNsaWRlclRleHRGb3JtYXR0aW5nRm9yWmVyb0RheXMpOiBDaGFuZ2Vz
IHN0eWxpbmcgd2hlbiBkYXkgY291bnQgZ29lcyB0bworICAgICAgICAnMCcuCisgICAgICAgIChT
dW1tYXJ5VG9vbGJhci5wcm90b3R5cGUuX3JlbW92ZVNsaWRlclRleHRGb3JtYXR0aW5nRm9yWmVy
b0RheXMpOiBDaGFuZ2VzIHN0eWxpbmcgd2hlbiBkYXkgY291bnQgZ29lcworICAgICAgICBhYm92
ZSAwLCBvciB3aGVuIGluIHRleHRNb2RlLgorICAgICAgICAoU3VtbWFyeVRvb2xiYXIucHJvdG90
eXBlLnJlbmRlcik6IER5bmFtaWNhbGx5IGFkanVzdCBzdHlsaW5nIGJhc2VkIG9uIHRoaXMuX251
bWJlck9mRGF5cyB2YWx1ZS4KKyAgICAgICAgKFN1bW1hcnlUb29sYmFyLnByb3RvdHlwZS5fZW50
ZXJUZXh0TW9kZSk6IFVzZSB0aGlzLmVucXVldWVUb1JlbmRlciB0byByZW5kZXIgYXMtbmVlZGVk
LgorICAgICAgICAoU3VtbWFyeVRvb2xiYXIucHJvdG90eXBlLl9leGl0VGV4dE1vZGUpOiBEaXR0
by4KKwogMjAxOS0wNi0yNCAgRGVhbiBKb2huc29uICA8ZGVhbl9qb2huc29uQGFwcGxlLmNvbT4K
IAogICAgICAgICBbcGVyZi53ZWJraXQub3JnXSBVcGRhdGUgc3VtbWFyeSBwYWdlIGNhbGN1bGF0
aW9ucyB0byB1c2UgbWVhbiBpbnN0ZWFkIG9mIG1lZGlhbgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sCmluZGV4IGU3MzEwNzdmNmViZTAwNDA3YWRiMDY4
YzdmZmNiZjYxZWE2NmNkY2MuLmRmNzZkN2QwZWJjM2EwMTdhMzIzODcwZGE0ZmJmYTEwNWVhYjJh
MzQgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXgu
aHRtbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwK
QEAgLTExMyw2ICsxMTMsNyBAQCBSdW4gdG9vbHMvYnVuZGxlLXYzLXNjcmlwdHMgdG8gc3BlZWQg
dXAgdGhlIGxvYWQgdGltZSBmb3IgcHJvZHVjdGlvbi5gKTsKICAgICAgICAgPHNjcmlwdCBzcmM9
InBhZ2VzL2RvbWFpbi1jb250cm9sLXRvb2xiYXIuanMiPjwvc2NyaXB0PgogICAgICAgICA8c2Ny
aXB0IHNyYz0icGFnZXMvZGFzaGJvYXJkLXRvb2xiYXIuanMiPjwvc2NyaXB0PgogICAgICAgICA8
c2NyaXB0IHNyYz0icGFnZXMvZGFzaGJvYXJkLXBhZ2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8
c2NyaXB0IHNyYz0icGFnZXMvY29udGludW91cy1kb21haW4tdG9vbGJhci5qcyI+PC9zY3JpcHQ+
CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9jaGFydC1wYW5lLXN0YXR1cy12aWV3LmpzIj48
L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL2NoYXJ0LXBhbmUuanMiPjwvc2Ny
aXB0PgogICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvY2hhcnRzLXRvb2xiYXIuanMiPjwvc2Ny
aXB0PgpAQCAtMTIzLDYgKzEyNCw3IEBAIFJ1biB0b29scy9idW5kbGUtdjMtc2NyaXB0cyB0byBz
cGVlZCB1cCB0aGUgbG9hZCB0aW1lIGZvciBwcm9kdWN0aW9uLmApOwogICAgICAgICA8c2NyaXB0
IHNyYz0icGFnZXMvY3JlYXRlLWFuYWx5c2lzLXRhc2stcGFnZS5qcyI+PC9zY3JpcHQ+CiAgICAg
ICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9idWlsZC1yZXF1ZXN0LXF1ZXVlLXBhZ2UuanMiPjwvc2Ny
aXB0PgogICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvc3VtbWFyeS1wYWdlLmpzIj48L3Njcmlw
dD4KKyAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3N1bW1hcnktdG9vbGJhci5qcyI+PC9zY3Jp
cHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy90ZXN0LWZyZXNobmVzcy1wYWdlLmpzIj48
L3NjcmlwdD4KIAogICAgICAgICA8c2NyaXB0IHNyYz0ibWFpbi5qcyI+PC9zY3JpcHQ+CmRpZmYg
LS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21haW4uanMgYi9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21haW4uanMKaW5kZXggMGViYzJmMDFjN2Jj
NGU2ODNlOTY4NjliNWYxMmU2Y2RjMmY4MGFlMy4uNjIxN2IzY2ZiYWNmMGFlNDUxOWQyNGU4N2Nh
OWJjODYxODVjMzk5OCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9tYWluLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbWFp
bi5qcwpAQCAtMjYsMTEgKzI2LDEyIEBAIGZ1bmN0aW9uIG1haW4oKSB7CiAgICAgICAgICAgICAg
ICAgZGFzaGJvYXJkUGFnZXMucHVzaChuZXcgRGFzaGJvYXJkUGFnZShuYW1lLCBtYW5pZmVzdC5k
YXNoYm9hcmRzW25hbWVdLCBkYXNoYm9hcmRUb29sYmFyKSk7CiAgICAgICAgIH0KIAorICAgICAg
ICBjb25zdCBzdW1tYXJ5VG9vbGJhciA9IG5ldyBTdW1tYXJ5VG9vbGJhcjsKICAgICAgICAgY29u
c3Qgc3VtbWFyeVBhZ2VzID0gW107CiAgICAgICAgIGxldCB0ZXN0RnJlc2huZXNzUGFnZSA9IG51
bGw7CiAgICAgICAgIGlmIChtYW5pZmVzdC5zdW1tYXJ5UGFnZXMpIHsKICAgICAgICAgICAgIGZv
ciAoY29uc3Qgc3VtbWFyeVBhZ2Ugb2YgbWFuaWZlc3Quc3VtbWFyeVBhZ2VzKQotICAgICAgICAg
ICAgICAgIHN1bW1hcnlQYWdlcy5wdXNoKG5ldyBTdW1tYXJ5UGFnZShzdW1tYXJ5UGFnZSkpOwor
ICAgICAgICAgICAgICAgIHN1bW1hcnlQYWdlcy5wdXNoKG5ldyBTdW1tYXJ5UGFnZShzdW1tYXJ5
UGFnZSwgc3VtbWFyeVRvb2xiYXIpKTsKICAgICAgICAgICAgIHRlc3RGcmVzaG5lc3NQYWdlID0g
bmV3IFRlc3RGcmVzaG5lc3NQYWdlKG1hbmlmZXN0LnN1bW1hcnlQYWdlcywgbWFuaWZlc3QudGVz
dEFnZVRvbGVyYW5jZUluSG91cnMpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnRzLXRvb2xiYXIuanMgYi9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2NoYXJ0cy10b29sYmFyLmpzCmlu
ZGV4IGEwOTdlMzQ4ZTg3Zjk3YmMxYjkxYjk3OTk4ZmFlMjQ3YTY3NjgxZmIuLjA5ZjE2NDgyNzJm
NzE0ZGY4YWZhMDE1ZDEyZTQwZjA3N2Q2NWViOGMgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnRzLXRvb2xiYXIuanMKKysrIGIvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jaGFydHMtdG9vbGJhci5qcwpAQCAt
MSwyNCArMSw4IEBACiAKLWNsYXNzIENoYXJ0c1Rvb2xiYXIgZXh0ZW5kcyBEb21haW5Db250cm9s
VG9vbGJhciB7CitjbGFzcyBDaGFydHNUb29sYmFyIGV4dGVuZHMgQ29udGludW91c0RvbWFpblRv
b2xiYXIgewogICAgIGNvbnN0cnVjdG9yKCkKICAgICB7Ci0gICAgICAgIHN1cGVyKCdjaGFycy10
b29sYmFyJywgNyk7Ci0KLSAgICAgICAgdGhpcy5fbWluRGF5Q291bnQgPSAxOwotICAgICAgICB0
aGlzLl9tYXhEYXlDb3VudCA9IDM2NjsKLQotICAgICAgICB0aGlzLl9udW1iZXJPZkRheXNDYWxs
YmFjayA9IG51bGw7Ci0gICAgICAgIHRoaXMuX3NsaWRlciA9IHRoaXMuY29udGVudCgpLnF1ZXJ5
U2VsZWN0b3IoJy5zbGlkZXInKTsKLSAgICAgICAgdGhpcy5fc2xpZGVyLmFkZEV2ZW50TGlzdGVu
ZXIoJ2NoYW5nZScsIHRoaXMuX3NsaWRlclZhbHVlTWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlzKSk7
Ci0gICAgICAgIHRoaXMuX3NsaWRlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlz
Ll9zbGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOwotCi0gICAgICAgIHRoaXMu
X2VkaXRvciA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKTsKLSAgICAg
ICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fZW50ZXJUZXh0
TW9kZS5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIo
J2JsdXInLCB0aGlzLl9leGl0VGV4dE1vZGUuYmluZCh0aGlzKSk7Ci0gICAgICAgIHRoaXMuX2Vk
aXRvci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX2VkaXRvclZhbHVlTWF5SGF2ZUNo
YW5nZWQuYmluZCh0aGlzKSk7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5hZGRFdmVudExpc3RlbmVy
KCdjaGFuZ2UnLCB0aGlzLl9lZGl0b3JWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOwot
Ci0gICAgICAgIHRoaXMuX2xhYmVsU3BhbiA9IHRoaXMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3Io
Jy5kYXktY291bnQnKTsKKyAgICAgICAgc3VwZXIoJ2NoYXJ0cy10b29sYmFyJywgNyk7CiAKICAg
ICAgICAgdGhpcy5fYWRkUGFuZUNhbGxiYWNrID0gbnVsbDsKICAgICAgICAgdGhpcy5fcGFuZVNl
bGVjdG9yID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcigncGFuZS1zZWxlY3RvcicpLmNv
bXBvbmVudCgpOwpAQCAtMzUsMTQgKzE5LDYgQEAgY2xhc3MgQ2hhcnRzVG9vbGJhciBleHRlbmRz
IERvbWFpbkNvbnRyb2xUb29sYmFyIHsKICAgICB7CiAgICAgICAgIHN1cGVyLnJlbmRlcigpOwog
ICAgICAgICB0aGlzLl9wYW5lU2VsZWN0b3IuZW5xdWV1ZVRvUmVuZGVyKCk7Ci0gICAgICAgIHRo
aXMuX2xhYmVsU3Bhbi50ZXh0Q29udGVudCA9IHRoaXMuX251bWJlck9mRGF5czsKLSAgICAgICAg
dGhpcy5fc2V0SW5wdXRFbGVtZW50VmFsdWUodGhpcy5fbnVtYmVyT2ZEYXlzKTsKLSAgICB9Ci0K
LSAgICBzZXROdW1iZXJPZkRheXNDYWxsYmFjayhjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGNv
bnNvbGUuYXNzZXJ0KCFjYWxsYmFjayB8fCBjYWxsYmFjayBpbnN0YW5jZW9mIEZ1bmN0aW9uKTsK
LSAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJhY2sgPSBjYWxsYmFjazsKICAgICB9CiAK
ICAgICBzZXRBZGRQYW5lQ2FsbGJhY2soY2FsbGJhY2spCkBAIC01Myw2MSArMjksOSBAQCBjbGFz
cyBDaGFydHNUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRvb2xiYXIgewogCiAgICAgc2V0
U3RhcnRUaW1lKHN0YXJ0VGltZSkKICAgICB7Ci0gICAgICAgIHRoaXMuX2V4aXRUZXh0TW9kZSgp
OwotICAgICAgICBpZiAoc3RhcnRUaW1lKQotICAgICAgICAgICAgc3VwZXIuc2V0U3RhcnRUaW1l
KHN0YXJ0VGltZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN1cGVyLnNldE51bWJlck9m
RGF5cyg3KTsKLSAgICB9Ci0KLSAgICBfc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWUpCi0gICAg
ewotICAgICAgICB0aGlzLl9zbGlkZXIudmFsdWUgPSBNYXRoLnBvdyh2YWx1ZSwgMS8zKTsKLSAg
ICAgICAgdGhpcy5fc2xpZGVyLm1pbiA9IE1hdGgucG93KHRoaXMuX21pbkRheUNvdW50LCAxLzMp
OwotICAgICAgICB0aGlzLl9zbGlkZXIubWF4ID0gTWF0aC5wb3codGhpcy5fbWF4RGF5Q291bnQs
IDEvMyk7Ci0gICAgICAgIHRoaXMuX3NsaWRlci5zdGVwID0gJ2FueSc7Ci0gICAgICAgIHRoaXMu
X2VkaXRvci52YWx1ZSA9IHZhbHVlOwotICAgIH0KLQotICAgIF9lbnRlclRleHRNb2RlKGV2ZW50
KQotICAgIHsKLSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgdGhpcy5f
ZWRpdG9yLnN0eWxlLm9wYWNpdHkgPSAxOwotICAgICAgICB0aGlzLl9lZGl0b3Iuc3R5bGUubWFy
Z2luTGVmdCA9ICctMi41cmVtJzsKLSAgICAgICAgdGhpcy5fbGFiZWxTcGFuLnN0eWxlLm9wYWNp
dHkgPSAwOwotICAgICAgICB0aGlzLl9zbGlkZXIuc3R5bGUub3BhY2l0eSA9IDA7Ci0gICAgfQot
Ci0gICAgX2V4aXRUZXh0TW9kZShldmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChldmVudCkKLSAg
ICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5z
dHlsZS5vcGFjaXR5ID0gMDsKLSAgICAgICAgdGhpcy5fZWRpdG9yLnN0eWxlLm1hcmdpbkxlZnQg
PSBudWxsOwotICAgICAgICB0aGlzLl9sYWJlbFNwYW4uc3R5bGUub3BhY2l0eSA9IDE7Ci0gICAg
ICAgIHRoaXMuX3NsaWRlci5zdHlsZS5vcGFjaXR5ID0gMTsKLSAgICB9Ci0KLSAgICBfc2xpZGVy
VmFsdWVNYXlIYXZlQ2hhbmdlZChldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBudW1iZXJPZkRh
eXMgPSBNYXRoLnJvdW5kKE1hdGgucG93KHBhcnNlRmxvYXQodGhpcy5fc2xpZGVyLnZhbHVlKSwg
MykpOwotICAgICAgICB0aGlzLl9jYWxsTnVtYmVyT2ZEYXlzQ2FsbGJhY2soZXZlbnQsIG51bWJl
ck9mRGF5cyk7Ci0gICAgfQotCi0gICAgX2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQoZXZlbnQp
Ci0gICAgewotICAgICAgICB2YXIgcmF3TnVtYmVyID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KHRo
aXMuX2VkaXRvci52YWx1ZSkpOwotICAgICAgICB2YXIgbnVtYmVyT2ZEYXlzID0gTWF0aC5tYXgo
dGhpcy5fbWluRGF5Q291bnQsIE1hdGgubWluKHRoaXMuX21heERheUNvdW50LCByYXdOdW1iZXIp
KTsKLSAgICAgICAgaWYgKHRoaXMuX2VkaXRvci52YWx1ZSAhPSBudW1iZXJPZkRheXMpCi0gICAg
ICAgICAgICB0aGlzLl9lZGl0b3IudmFsdWUgPSBudW1iZXJPZkRheXM7Ci0gICAgICAgIHRoaXMu
X2NhbGxOdW1iZXJPZkRheXNDYWxsYmFjayhldmVudCwgbnVtYmVyT2ZEYXlzKTsKLSAgICB9Ci0K
LSAgICBfY2FsbE51bWJlck9mRGF5c0NhbGxiYWNrKGV2ZW50LCBudW1iZXJPZkRheXMpCi0gICAg
ewotICAgICAgICB2YXIgc2hvdWxkVXBkYXRlU3RhdGUgPSBldmVudC50eXBlID09ICdjaGFuZ2Un
OwotICAgICAgICBpZiAoKHRoaXMubnVtYmVyT2ZEYXlzKCkgIT0gbnVtYmVyT2ZEYXlzIHx8IHNo
b3VsZFVwZGF0ZVN0YXRlKSAmJiB0aGlzLl9udW1iZXJPZkRheXNDYWxsYmFjaykKLSAgICAgICAg
ICAgIHRoaXMuX251bWJlck9mRGF5c0NhbGxiYWNrKG51bWJlck9mRGF5cywgc2hvdWxkVXBkYXRl
U3RhdGUpOworICAgICAgICBpZiAoc3RhcnRUaW1lIDwgMSkKKyAgICAgICAgICAgIHN0YXJ0VGlt
ZSA9IDE7CisgICAgICAgIHN1cGVyLnNldFN0YXJ0VGltZShzdGFydFRpbWUpOwogICAgIH0KIAog
ICAgIF90b2dnbGVQYW5lU2VsZWN0b3IoZXZlbnQpCkBAIC0xNDUsMzQgKzY5LDI1IEBAIGNsYXNz
IENoYXJ0c1Rvb2xiYXIgZXh0ZW5kcyBEb21haW5Db250cm9sVG9vbGJhciB7CiAgICAgICAgICAg
ICB0aGlzLl9hZGRQYW5lQ2FsbGJhY2socGxhdGZvcm0sIG1ldHJpYyk7CiAgICAgfQogCi0KICAg
ICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBgCi0gICAgICAg
ICAgICA8bmF2IGNsYXNzPSJjaGFydHMtdG9vbGJhciI+CisgICAgICAgICAgICA8bmF2PgogICAg
ICAgICAgICAgICAgIDx1bCBjbGFzcz0iYnV0dG9uZWQtdG9vbGJhciI+CiAgICAgICAgICAgICAg
ICAgICAgIDxsaT48YSBocmVmPSIjIiBjbGFzcz0icGFuZS1zZWxlY3Rvci1vcGVuZXIiPkFkZCBw
YW5lPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgPC91bD4KLSAgICAgICAgICAgICAgICA8dWwg
Y2xhc3M9ImJ1dHRvbmVkLXRvb2xiYXIiPgotICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9
InN0YXJ0LXRpbWUtc2xpZGVyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9InNsaWRlciIgdHlwZT0icmFu
Z2UiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZWRpdG9yIiB0
eXBlPSJudW1iZXIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJs
YWJlbCI+PHNwYW4gY2xhc3M9ImRheS1jb3VudCIgdGFiaW5kZXg9IjAiPj88L3NwYW4+IGRheXM8
L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgotICAgICAgICAgICAgICAg
ICAgICA8L2xpPgotICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgPGRpdiBj
bGFzcz0icGFuZS1zZWxlY3Rvci1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICA8cGFu
ZS1zZWxlY3Rvcj48L3BhbmUtc2VsZWN0b3I+CiAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAg
ICAgICAgICA8L25hdj5gOworICAgICAgICAgICAgICAgICR7IHN1cGVyLmh0bWxUZW1wbGF0ZSgp
IH0KKyAgICAgICAgICAgIDwvbmF2PgorICAgICAgICBgOwogICAgIH0KIAogICAgIHN0YXRpYyBj
c3NUZW1wbGF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gVG9vbGJhci5jc3NUZW1wbGF0ZSgp
ICsgYAotCi0gICAgICAgICAgICAuY2hhcnRzLXRvb2xiYXIgPiAuYnV0dG9uZWQtdG9vbGJhcjpm
aXJzdC1jaGlsZCB7CisgICAgICAgIHJldHVybiBzdXBlci5jc3NUZW1wbGF0ZSgpICsgYAorICAg
ICAgICAgICAgbmF2ID4gLmJ1dHRvbmVkLXRvb2xiYXI6Zmlyc3QtY2hpbGQgewogICAgICAgICAg
ICAgICAgIG1hcmdpbi1yaWdodDogMC41cmVtOwogICAgICAgICAgICAgfQogCkBAIC0xODAsNyAr
OTUsNyBAQCBjbGFzcyBDaGFydHNUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRvb2xiYXIg
ewogICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjA0LCAxNTMsIDUxLCAwLjEpOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAuY2hhcnRzLXRvb2xiYXIgPiAucGFuZS1zZWxl
Y3Rvci1jb250YWluZXIgeworICAgICAgICAgICAgbmF2ID4gLnBhbmUtc2VsZWN0b3ItY29udGFp
bmVyIHsKICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgICAg
ICAgcmlnaHQ6IDFyZW07CiAgICAgICAgICAgICAgICAgbWFyZ2luOiAwOwpAQCAtMTkyLDM5ICsx
MDcsOCBAQCBjbGFzcyBDaGFydHNUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRvb2xiYXIg
ewogICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsK
ICAgICAgICAgICAgICAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigwLjVyZW0pOwog
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAuYnV0dG9uZWQtdG9vbGJhciAuc3RhcnQtdGlt
ZS1zbGlkZXIgewotICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAycmVtOwotICAgICAgICAg
ICAgICAgIGxpbmUtaGVpZ2h0OiAxZW07Ci0gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjly
ZW07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC5zdGFydC10aW1lLXNsaWRlciBsYWJl
bCB7Ci0gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIgLnNsaWRlciB7Ci0gICAgICAgICAg
ICAgICAgaGVpZ2h0OiAwLjhyZW07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC5zdGFy
dC10aW1lLXNsaWRlciAuZWRpdG9yIHsKLSAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1
dGU7Ci0gICAgICAgICAgICAgICAgb3BhY2l0eTogMDsKLSAgICAgICAgICAgICAgICB3aWR0aDog
NHJlbTsKLSAgICAgICAgICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKLSAgICAgICAgICAg
ICAgICBmb250LXNpemU6IDAuOHJlbTsKLSAgICAgICAgICAgICAgICBoZWlnaHQ6IDAuOXJlbTsK
LSAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lOwotICAgICAgICAgICAgICAgIGJvcmRlcjog
c29saWQgMXB4ICNjY2M7Ci0gICAgICAgICAgICAgICAgei1pbmRleDogNTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLnN0YXJ0LXRpbWUtc2xpZGVyIC5kYXktY291bnQgewotICAgICAg
ICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICAgICAgICAgICAgICB0ZXh0LWFs
aWduOiByaWdodDsKLSAgICAgICAgICAgICAgICB3aWR0aDogMnJlbTsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgYDsKICAgICB9Ci0KIH0KKworQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdj
aGFydHMtdG9vbGJhcicsIENoYXJ0c1Rvb2xiYXIpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jb250aW51b3VzLWRvbWFpbi10b29sYmFyLmpz
IGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jb250aW51b3VzLWRv
bWFpbi10b29sYmFyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhZTA1NzY0YmYzZjg4YzgwMTI5ZWUzYjYyZWM0
ZDM4NzAxNWFiYTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL3BhZ2VzL2NvbnRpbnVvdXMtZG9tYWluLXRvb2xiYXIuanMKQEAgLTAsMCArMSwx
NTcgQEAKKworY2xhc3MgQ29udGludW91c0RvbWFpblRvb2xiYXIgZXh0ZW5kcyBEb21haW5Db250
cm9sVG9vbGJhciB7CisgICAgY29uc3RydWN0b3IobmFtZSwgZGVmYXVsdE51bWJlck9mRGF5cykK
KyAgICB7CisgICAgICAgIHN1cGVyKG5hbWUsIGRlZmF1bHROdW1iZXJPZkRheXMpOworCisgICAg
ICAgIHRoaXMuX21pbkRheUNvdW50ID0gMTsKKyAgICAgICAgdGhpcy5fbWF4RGF5Q291bnQgPSAz
NjY7CisgICAgICAgIHRoaXMuX2RlZmF1bHROdW1iZXJPZkRheXMgPSBkZWZhdWx0TnVtYmVyT2ZE
YXlzOworCisgICAgICAgIHRoaXMuX251bWJlck9mRGF5c0NhbGxiYWNrID0gbnVsbDsKKyAgICAg
ICAgdGhpcy5fc2xpZGVyID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnNsaWRlcicp
OworICAgICAgICB0aGlzLl9zbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5f
c2xpZGVyVmFsdWVNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fc2xp
ZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX3NsaWRlclZhbHVlTWF5SGF2
ZUNoYW5nZWQuYmluZCh0aGlzKSk7CisKKyAgICAgICAgdGhpcy5faW5UZXh0TW9kZSA9IGZhbHNl
OworICAgICAgICB0aGlzLl9lZGl0b3IgPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcu
ZWRpdG9yJyk7CisgICAgICAgIHRoaXMuX2VkaXRvci5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycs
IHRoaXMuX2VudGVyVGV4dE1vZGUuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2VkaXRvci5h
ZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fZXhpdFRleHRNb2RlLmJpbmQodGhpcykpOwor
ICAgICAgICB0aGlzLl9lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB0aGlzLl9lZGl0
b3JWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9lZGl0b3Iu
YWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdl
ZC5iaW5kKHRoaXMpKTsKKworICAgICAgICB0aGlzLl9kYXlDb3VudFNwYW4gPSB0aGlzLmNvbnRl
bnQoJ2RheS1jb3VudCcpOworICAgIH0KKworICAgIHJlbmRlcigpCisgICAgeworICAgICAgICBz
dXBlci5yZW5kZXIoKTsKKyAgICAgICAgdGhpcy5fZGF5Q291bnRTcGFuLnRleHRDb250ZW50ID0g
dGhpcy5fbnVtYmVyT2ZEYXlzOworICAgICAgICB0aGlzLl9zZXRJbnB1dEVsZW1lbnRWYWx1ZSh0
aGlzLl9udW1iZXJPZkRheXMpOworICAgIH0KKworICAgIHNldE51bWJlck9mRGF5c0NhbGxiYWNr
KGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoIWNhbGxiYWNrIHx8IGNh
bGxiYWNrIGluc3RhbmNlb2YgRnVuY3Rpb24pOworICAgICAgICB0aGlzLl9udW1iZXJPZkRheXND
YWxsYmFjayA9IGNhbGxiYWNrOworICAgIH0KKworICAgIHNldFN0YXJ0VGltZShzdGFydFRpbWU9
dGhpcy5fZGVmYXVsdE51bWJlck9mRGF5cykKKyAgICB7CisgICAgICAgIHRoaXMuX2V4aXRUZXh0
TW9kZSgpOworICAgICAgICBpZiAoc3RhcnRUaW1lKQorICAgICAgICAgICAgc3VwZXIuc2V0U3Rh
cnRUaW1lKHN0YXJ0VGltZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1cGVyLnNldE51
bWJlck9mRGF5cyh0aGlzLl9kZWZhdWx0TnVtYmVyT2ZEYXlzKTsKKyAgICB9CisKKyAgICBfc2V0
SW5wdXRFbGVtZW50VmFsdWUodmFsdWUpCisgICAgeworICAgICAgICB0aGlzLl9zbGlkZXIudmFs
dWUgPSBNYXRoLnBvdyh2YWx1ZSwgMS8zKTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLm1pbiA9IE1h
dGgucG93KHRoaXMuX21pbkRheUNvdW50LCAxLzMpOworICAgICAgICB0aGlzLl9zbGlkZXIubWF4
ID0gTWF0aC5wb3codGhpcy5fbWF4RGF5Q291bnQsIDEvMyk7CisgICAgICAgIHRoaXMuX3NsaWRl
ci5zdGVwID0gJ2FueSc7CisgICAgICAgIHRoaXMuX2VkaXRvci52YWx1ZSA9IHZhbHVlOworICAg
IH0KKworICAgIF9lbnRlclRleHRNb2RlKGV2ZW50KQorICAgIHsKKyAgICAgICAgZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKKyAgICAgICAgdGhpcy5faW5UZXh0TW9kZSA9IHRydWU7CisgICAgICAg
IHRoaXMuX2VkaXRvci5zdHlsZS5vcGFjaXR5ID0gMTsKKyAgICAgICAgdGhpcy5fZWRpdG9yLnN0
eWxlLm1hcmdpbkxlZnQgPSAnLTIuNXJlbSc7CisgICAgICAgIHRoaXMuX2RheUNvdW50U3Bhbi5z
dHlsZS5vcGFjaXR5ID0gMDsKKyAgICAgICAgdGhpcy5fc2xpZGVyLnN0eWxlLm9wYWNpdHkgPSAw
OworICAgIH0KKworICAgIF9leGl0VGV4dE1vZGUoZXZlbnQpCisgICAgeworICAgICAgICBpZiAo
ZXZlbnQpCisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB0aGlz
Ll9pblRleHRNb2RlID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2VkaXRvci5zdHlsZS5vcGFjaXR5
ID0gMDsKKyAgICAgICAgdGhpcy5fZWRpdG9yLnN0eWxlLm1hcmdpbkxlZnQgPSBudWxsOworICAg
ICAgICB0aGlzLl9kYXlDb3VudFNwYW4uc3R5bGUub3BhY2l0eSA9IDE7CisgICAgICAgIHRoaXMu
X3NsaWRlci5zdHlsZS5vcGFjaXR5ID0gMTsKKyAgICB9CisKKyAgICBfc2xpZGVyVmFsdWVNYXlI
YXZlQ2hhbmdlZChldmVudCkKKyAgICB7CisgICAgICAgIHZhciBudW1iZXJPZkRheXMgPSBNYXRo
LnJvdW5kKE1hdGgucG93KHBhcnNlRmxvYXQodGhpcy5fc2xpZGVyLnZhbHVlKSwgMykpOworICAg
ICAgICB0aGlzLl9jYWxsTnVtYmVyT2ZEYXlzQ2FsbGJhY2soZXZlbnQsIG51bWJlck9mRGF5cyk7
CisgICAgfQorCisgICAgX2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQoZXZlbnQpCisgICAgewor
ICAgICAgICB2YXIgcmF3TnVtYmVyID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KHRoaXMuX2VkaXRv
ci52YWx1ZSkpOworICAgICAgICB2YXIgbnVtYmVyT2ZEYXlzID0gTWF0aC5tYXgodGhpcy5fbWlu
RGF5Q291bnQsIE1hdGgubWluKHRoaXMuX21heERheUNvdW50LCByYXdOdW1iZXIpKTsKKyAgICAg
ICAgaWYgKHRoaXMuX2VkaXRvci52YWx1ZSAhPSBudW1iZXJPZkRheXMpCisgICAgICAgICAgICB0
aGlzLl9lZGl0b3IudmFsdWUgPSBudW1iZXJPZkRheXM7CisgICAgICAgIHRoaXMuX2NhbGxOdW1i
ZXJPZkRheXNDYWxsYmFjayhldmVudCwgbnVtYmVyT2ZEYXlzKTsKKyAgICB9CisKKyAgICBfY2Fs
bE51bWJlck9mRGF5c0NhbGxiYWNrKGV2ZW50LCBudW1iZXJPZkRheXMpCisgICAgeworICAgICAg
ICB2YXIgc2hvdWxkVXBkYXRlU3RhdGUgPSBldmVudC50eXBlID09ICdjaGFuZ2UnOworICAgICAg
ICBpZiAoKHRoaXMubnVtYmVyT2ZEYXlzKCkgIT0gbnVtYmVyT2ZEYXlzIHx8IHNob3VsZFVwZGF0
ZVN0YXRlKSAmJiB0aGlzLl9udW1iZXJPZkRheXNDYWxsYmFjaykKKyAgICAgICAgICAgIHRoaXMu
X251bWJlck9mRGF5c0NhbGxiYWNrKG51bWJlck9mRGF5cywgc2hvdWxkVXBkYXRlU3RhdGUpOwor
ICAgIH0KKworICAgIHN0YXRpYyBkYXlzQ291bnRMYWJlbFRleHQoKSB7IHJldHVybiBgIGRheXNg
OyB9CisKKyAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBg
CisgICAgICAgICAgICA8dWwgY2xhc3M9ImJ1dHRvbmVkLXRvb2xiYXIiPgorICAgICAgICAgICAg
ICAgIDxsaSBjbGFzcz0ic3RhcnQtdGltZS1zbGlkZXIiPgorICAgICAgICAgICAgICAgICAgICA8
bGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9InNsaWRlciIgdHlw
ZT0icmFuZ2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJlZGl0b3Ii
IHR5cGU9Im51bWJlciI+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFi
ZWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJkYXktY291bnQiIHRh
YmluZGV4PSIwIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHsgdGhpcy5k
YXlzQ291bnRMYWJlbFRleHQoKSB9CisgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Cisg
ICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgPC9saT4KKyAgICAg
ICAgICAgIDwvdWw+YDsKKyAgICB9CisKKyAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFRvb2xiYXIuY3NzVGVtcGxhdGUoKSArIGAKKyAgICAgICAgICAgIC5i
dXR0b25lZC10b29sYmFyIC5zdGFydC10aW1lLXNsaWRlciB7CisgICAgICAgICAgICAgICAgbWFy
Z2luLWxlZnQ6IDJyZW07CisgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDFlbTsKKyAgICAg
ICAgICAgICAgICBmb250LXNpemU6IDAuOXJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLnN0YXJ0LXRpbWUtc2xpZGVyIC5sYWJlbCB7CisgICAgICAgICAgICAgICAgZGlzcGxheTog
aW5saW5lLWJsb2NrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuc3RhcnQtdGltZS1z
bGlkZXIgLnNsaWRlciB7CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLjhyZW07CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC5zdGFydC10aW1lLXNsaWRlciAuZWRpdG9yIHsKKyAgICAg
ICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICAgICAgICAgb3BhY2l0eTog
MDsKKyAgICAgICAgICAgICAgICB3aWR0aDogNHJlbTsKKyAgICAgICAgICAgICAgICBmb250LXdl
aWdodDogaW5oZXJpdDsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTsKKyAgICAg
ICAgICAgICAgICBoZWlnaHQ6IDAuOXJlbTsKKyAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25l
OworICAgICAgICAgICAgICAgIGJvcmRlcjogc29saWQgMXB4ICNjY2M7CisgICAgICAgICAgICAg
ICAgei1pbmRleDogNTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgI2RheS1jb3VudCB7
CisgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgICAgICAgICAg
IHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgIHdpZHRoOiAycmVtOworICAgICAg
ICAgICAgfQorICAgICAgICBgOworICAgIH0KK30KKworQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVt
ZW50KCdjb250aW51b3VzLWRvbWFpbi10b29sYmFyJywgQ29udGludW91c0RvbWFpblRvb2xiYXIp
OwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9k
b21haW4tY29udHJvbC10b29sYmFyLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9wYWdlcy9kb21haW4tY29udHJvbC10b29sYmFyLmpzCmluZGV4IGM2YmY2MTRlMzYwODJj
OTg5NGQ0YWIzYjkzOWQzZjYwNzk3NTVkZTIuLjJkOTlhZTk4YzQ1NTBmY2MwNzNkOWM3NGFmNGU4
NTA5MGRiNTVhYWUgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvcGFnZXMvZG9tYWluLWNvbnRyb2wtdG9vbGJhci5qcworKysgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2RvbWFpbi1jb250cm9sLXRvb2xiYXIuanMKQEAgLTE3
LDcgKzE3LDcgQEAgY2xhc3MgRG9tYWluQ29udHJvbFRvb2xiYXIgZXh0ZW5kcyBUb29sYmFyIHsK
IAogICAgIHNldFN0YXJ0VGltZShzdGFydFRpbWUpCiAgICAgewotICAgICAgICB0aGlzLnNldE51
bWJlck9mRGF5cyhNYXRoLm1heCgxLCBNYXRoLnJvdW5kKCh0aGlzLl9wcmVzZW50IC0gc3RhcnRU
aW1lKSAvIHRoaXMuX21pbGxpc2Vjb25kc1BlckRheSkpKTsKKyAgICAgICAgdGhpcy5zZXROdW1i
ZXJPZkRheXMoTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgodGhpcy5fcHJlc2VudCAtIHN0YXJ0VGlt
ZSkgLyB0aGlzLl9taWxsaXNlY29uZHNQZXJEYXkpKSk7CiAgICAgICAgIHRoaXMuX3N0YXJ0VGlt
ZSA9IHN0YXJ0VGltZTsKICAgICB9CiAKQEAgLTI4LDcgKzI4LDcgQEAgY2xhc3MgRG9tYWluQ29u
dHJvbFRvb2xiYXIgZXh0ZW5kcyBUb29sYmFyIHsKIAogICAgIHNldE51bWJlck9mRGF5cyhudW1i
ZXJPZkRheXMsIHNldEJ5VXNlcikKICAgICB7Ci0gICAgICAgIGlmICghbnVtYmVyT2ZEYXlzKQor
ICAgICAgICBpZiAodHlwZW9mKG51bWJlck9mRGF5cykgIT0gJ251bWJlcicpCiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gbnVsbDsKZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvc3VtbWFyeS1wYWdlLmpz
IGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXBhZ2Uu
anMKaW5kZXggZTQ2MTliMTk3NDg3Y2U5NzJjMThjODBhZmU4OWJmZGIyY2VhODg3Zi4uZWU0YzM5
NzY4MDg0MzhlNjFkZjMwY2FkNGYwZTNlZjI5YjA4MThiNCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanMKKysrIGIvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanMKQEAg
LTEsOSArMSw5IEBACiAKIGNsYXNzIFN1bW1hcnlQYWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFkaW5n
IHsKIAotICAgIGNvbnN0cnVjdG9yKHN1bW1hcnlTZXR0aW5ncykKKyAgICBjb25zdHJ1Y3Rvcihz
dW1tYXJ5U2V0dGluZ3MsIHRvb2xiYXIpCiAgICAgewotICAgICAgICBzdXBlcihzdW1tYXJ5U2V0
dGluZ3MubmFtZSwgbnVsbCk7CisgICAgICAgIHN1cGVyKHN1bW1hcnlTZXR0aW5ncy5uYW1lLCB0
b29sYmFyKTsKIAogICAgICAgICB0aGlzLl9yb3V0ZSA9IHN1bW1hcnlTZXR0aW5ncy5yb3V0ZTsK
ICAgICAgICAgdGhpcy5fdGFibGUgPSB7CkBAIC0zMSwxNCArMzEsMjkgQEAgY2xhc3MgU3VtbWFy
eVBhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogCiAgICAgb3BlbihzdGF0ZSkKICAgICB7
CisgICAgICAgIHRoaXMudG9vbGJhcigpLnNldE51bWJlck9mRGF5cygwLCB0cnVlKTsKKyAgICAg
ICAgdGhpcy50b29sYmFyKCkuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgICAgIHRoaXMudG9vbGJh
cigpLnNldE51bWJlck9mRGF5c0NhbGxiYWNrKHRoaXMuc2V0TnVtYmVyT2ZEYXlzRnJvbVRvb2xi
YXIuYmluZCh0aGlzKSkKICAgICAgICAgc3VwZXIub3BlbihzdGF0ZSk7CisgICAgICAgIHRoaXMu
dXBkYXRlQW5kUmVuZGVyRm9yUmFuZ2UoMCkKKyAgICB9CiAKKyAgICB1cGRhdGVBbmRSZW5kZXJG
b3JSYW5nZShkYXlzKQorICAgIHsKICAgICAgICAgdmFyIGN1cnJlbnQgPSBEYXRlLm5vdygpOwot
ICAgICAgICB2YXIgdGltZVJhbmdlID0gW2N1cnJlbnQgLSAyNCAqIDM2MDAgKiAxMDAwLCBjdXJy
ZW50XTsKKyAgICAgICAgdmFyIG9uZURheSA9IDI0ICogMzYwMCAqIDEwMDA7CisgICAgICAgIHZh
ciB0aW1lUmFuZ2UgPSBbY3VycmVudCAtIG9uZURheSAtIChkYXlzICogb25lRGF5KSwgY3VycmVu
dCAtIChkYXlzICogb25lRGF5KV07CiAgICAgICAgIGZvciAodmFyIGdyb3VwIG9mIHRoaXMuX2Nv
bmZpZ0dyb3VwcykKICAgICAgICAgICAgIGdyb3VwLmZldGNoQW5kQ29tcHV0ZVN1bW1hcnkodGlt
ZVJhbmdlKS50aGVuKCgpID0+IHsgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsgfSk7CiAgICAgfQog
CisgICAgc2V0TnVtYmVyT2ZEYXlzRnJvbVRvb2xiYXIobnVtYmVyT2ZEYXlzLCBzaG91bGRVcGRh
dGVTdGF0ZSkKKyAgICB7CisgICAgICAgIHRoaXMudG9vbGJhcigpLnNldE51bWJlck9mRGF5cyhu
dW1iZXJPZkRheXMsIHRydWUpOworICAgICAgICB0aGlzLnRvb2xiYXIoKS5lbnF1ZXVlVG9SZW5k
ZXIoKTsKKyAgICAgICAgdGhpcy51cGRhdGVBbmRSZW5kZXJGb3JSYW5nZShudW1iZXJPZkRheXMp
OworICAgIH0KKwogICAgIHJlbmRlcigpCiAgICAgewogICAgICAgICBJbnN0cnVtZW50YXRpb24u
c3RhcnRNZWFzdXJpbmdUaW1lKCdTdW1tYXJ5UGFnZScsICdyZW5kZXInKTsKZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvc3VtbWFyeS10b29sYmFy
LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXRv
b2xiYXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGMzM2NmNjg5N2I3ZjNkZGM3NTgzZjI3YjMyYTIwMmI2ZTkx
ZmY1NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvcGFnZXMvc3VtbWFyeS10b29sYmFyLmpzCkBAIC0wLDAgKzEsNTIgQEAKK2NsYXNzIFN1bW1h
cnlUb29sYmFyIGV4dGVuZHMgQ29udGludW91c0RvbWFpblRvb2xiYXIgeworICAgIGNvbnN0cnVj
dG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCdzdW1tYXJ5LXRvb2xiYXInLCAwKTsKKworICAg
ICAgICB0aGlzLl9taW5EYXlDb3VudCA9IDA7CisgICAgICAgIHRoaXMuX21heERheUNvdW50ID0g
MzY2OworCisgICAgICAgIHRoaXMuX2RheUNvdW50RGVzY3JpcHRpb24gPSB0aGlzLmNvbnRlbnQo
J2RheS1jb3VudC1kZXNjcmlwdGlvbicpOworICAgIH0KKworICAgIF9hZGRTbGlkZXJUZXh0Rm9y
bWF0dGluZ0Zvclplcm9EYXlzKCkgeworICAgICAgICB0aGlzLl9kYXlDb3VudFNwYW4udGV4dENv
bnRlbnQgPSAnJzsKKyAgICAgICAgdGhpcy5fZGF5Q291bnRTcGFuLnN0eWxlLndpZHRoID0gJzEu
MjVyZW0nOworICAgICAgICB0aGlzLl9kYXlDb3VudERlc2NyaXB0aW9uLnN0eWxlLndpZHRoID0g
JzQuNXJlbSc7CisgICAgICAgIHRoaXMuX2RheUNvdW50RGVzY3JpcHRpb24udGV4dENvbnRlbnQg
PSAnIEN1cnJlbnQnOworICAgIH0KKworICAgIF9yZW1vdmVTbGlkZXJUZXh0Rm9ybWF0dGluZ0Zv
clplcm9EYXlzKCkgeworICAgICAgICB0aGlzLl9kYXlDb3VudFNwYW4uc3R5bGUud2lkdGggPSAn
MnJlbSc7CisgICAgICAgIHRoaXMuX2RheUNvdW50RGVzY3JpcHRpb24uc3R5bGUud2lkdGggPSAn
My43NXJlbSc7CisgICAgICAgIHRoaXMuX2RheUNvdW50RGVzY3JpcHRpb24udGV4dENvbnRlbnQg
PSAnIGRheXMgYWdvJzsKKyAgICB9CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgc3Vw
ZXIucmVuZGVyKCk7CisgICAgICAgIGlmICghdGhpcy5fbnVtYmVyT2ZEYXlzICYmICF0aGlzLl9p
blRleHRNb2RlKQorICAgICAgICAgICAgdGhpcy5fYWRkU2xpZGVyVGV4dEZvcm1hdHRpbmdGb3Ja
ZXJvRGF5cygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLl9yZW1vdmVTbGlkZXJU
ZXh0Rm9ybWF0dGluZ0Zvclplcm9EYXlzKCk7CisgICAgfQorCisgICAgX2VudGVyVGV4dE1vZGUo
ZXZlbnQpCisgICAgeworICAgICAgICBzdXBlci5fZW50ZXJUZXh0TW9kZShldmVudCk7CisgICAg
ICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgfQorCisgICAgX2V4aXRUZXh0TW9kZShl
dmVudCkKKyAgICB7CisgICAgICAgIHN1cGVyLl9leGl0VGV4dE1vZGUoZXZlbnQpOworICAgICAg
ICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgIH0KKworICAgIHN0YXRpYyBkYXlzQ291bnRM
YWJlbFRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGA8bGFiZWwgaWQ9ImRheS1jb3VudC1k
ZXNjcmlwdGlvbiIgY2xhc3M9ImxhYmVsIj48L2xhYmVsPmA7CisgICAgfQorfQorCitDb21wb25l
bnRCYXNlLmRlZmluZUVsZW1lbnQoJ3N1bW1hcnktdG9vbGJhcicsIFN1bW1hcnlUb29sYmFyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372879</attachid>
            <date>2019-06-25 17:03:11 -0700</date>
            <delta_ts>2020-03-17 16:41:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199051-20190625170310.patch</filename>
            <type>text/plain</type>
            <size>24926</size>
            <attacher name="Dean Johnson">dean_johnson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NzkzCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBhY2U4OWYyMjVlNDYzNjFkYzA2NTg2YzAzNzEzMTc3NDg3YzIxN2I2Li45MjRiNjY3ZDRh
YmIyNWE1NTgxOTgwZjI3ZDI0NWZiNmU1MTA3Yzg2IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MiBAQAorMjAxOS0wNi0yNSAgRGVhbiBKb2huc29uICA8ZGVhbl9q
b2huc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbcGVyZi53ZWJraXQub3JnXSBBZGQgJ2JhY2sg
aW4gdGltZScgZmVhdHVyZSBmb3IgU3VtbWFyeSBwYWdlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MDUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgIkJhY2sgaW4gdGltZSIgZmVh
dHVyZSBmb3IgYWxsIFN1bW1hcnkgcGFnZXMgb24gdGhlIFdlYktpdCBQZXJmIGRhc2hib2FyZC4g
VGhlcmUgaXMgYSBuZXcKKyAgICAgICAgc2xpZGVyIGluIHRoZSB0b3AgcmlnaHQgY29ybmVyIHdo
aWNoIGNhbiBiZSBkcmFnZ2VkIHRvIHZpZXcgdGhlIHN1bW1hcnkgcGFnZSAnTiBkYXlzIGFnbycu
IFRoZSBkZWZhdWx0CisgICAgICAgIHZpZXcgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgorCisgICAg
ICAgICogcHVibGljL3YzL2luZGV4Lmh0bWw6IEFkZCBuZXcgcmVzb3VyY2VzOiBjb250aW51b3Vz
LWRvbWFpbi10b29sYmFyLmpzLCBzdW1tYXJ5LXRvb2xiYXIuanMKKyAgICAgICAgKiBwdWJsaWMv
djMvbWFpbi5qczogQWRkIG5ldyBzdW1tYXJ5VG9vbGJhciwgYW5kIGluaXRpYWxpemUgc3VtbWFy
eSBwYWdlcyB3aXRoIGl0LgorICAgICAgICAobWFpbik6CisgICAgICAgICogcHVibGljL3YzL3Bh
Z2VzL2NoYXJ0cy10b29sYmFyLmpzOiBBYnN0cmFjdCB0aGUgc2xpZGVyIHRvb2xiYXIgaW50byBh
IG5ldyBjbGFzcywgYW5kIGluaGVyaXQgZnJvbSBpdC4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIp
OiBOb3csIENoYXJ0c1Rvb2xiYXIgaXMgYSBtb3N0bHkgdGhpbiB3cmFwcGVyIHJvdW5kIFNsaWRl
clRvb2xiYXIgYW5kIGltcGxlbWVudHMgdGhlCisgICAgICAgICdBZGQgUGFuZScgYnV0dG9uICsg
ZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLnJlbmRlcik6
CisgICAgICAgIChDaGFydHNUb29sYmFyLnByb3RvdHlwZS5zZXRTdGFydFRpbWUpOiBFbnN1cmUg
c3RhcnRUaW1lIGlzIG5ldmVyIGxlc3MgdGhhbiAxLgorICAgICAgICAoQ2hhcnRzVG9vbGJhci5o
dG1sVGVtcGxhdGUpOiBNb3ZlZCAnQWRkIFBhbmUnIGJ1dHRvbnMgZnJvbSBDb250aW51b3VzRG9t
YWluVG9vbGJhci4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIuY3NzVGVtcGxhdGUpOiBNb3ZlZCAn
QWRkIFBhbmUnIHN0eWxpbmcgZnJvbSBDb250aW51b3VzRG9tYWluVG9vbGJhci4KKyAgICAgICAg
KENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLnNldE51bWJlck9mRGF5c0NhbGxiYWNrKTogTW92ZWQg
dG8gQ29udGludW91c0RvbWFpblRvb2xiYXIuCisgICAgICAgIChDaGFydHNUb29sYmFyLnByb3Rv
dHlwZS5fc2V0SW5wdXRFbGVtZW50VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKENoYXJ0c1Rvb2xi
YXIucHJvdG90eXBlLl9lbnRlclRleHRNb2RlKTogRGl0dG8uCisgICAgICAgIChDaGFydHNUb29s
YmFyLnByb3RvdHlwZS5fZXhpdFRleHRNb2RlKTogRGl0dG8uCisgICAgICAgIChDaGFydHNUb29s
YmFyLnByb3RvdHlwZS5fc2xpZGVyVmFsdWVNYXlIYXZlQ2hhbmdlZCk6IERpdHRvLgorICAgICAg
ICAoQ2hhcnRzVG9vbGJhci5wcm90b3R5cGUuX2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQpOiBE
aXR0by4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLl9jYWxsTnVtYmVyT2ZEYXlz
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvY29udGludW91cy1k
b21haW4tdG9vbGJhci5qczogQ29waWVkIGluaXRpYWxseSBmcm9tCisgICAgICAgIFdlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnRzLXRvb2xiYXIuanMuCisgICAg
ICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhcik6IE5ldy4gQmFzZWQgb24gQ2hhcnRzVG9vbGJh
ciBhbmQgY29udGFpbnMgcHJpbWFyeSBsb2dpYyBmb3IKKyAgICAgICAgYSAnc2xpZGVyJyB0aGF0
IGFkanVzdHMgdGltZS4gVXNlZCBieSBib3RoIENoYXJ0c1Rvb2xiYXIgYW5kIFN1bW1hcnlUb29s
YmFyLiBDb25zdHJ1Y3RvciBhZGRzCisgICAgICAgIGEgdGhpcy5faW5UZXh0TW9kZSA9IGZhbHNl
IGRlZmF1bHQsIHRvIGZpZ3VyZSBvdXQgaWYgdGV4dCBtb2RlIGlzIGN1cnJlbnRseSBpbiB1c2Ug
aW4gU3VtbWFyeVRvb2xiYXIuCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90
b3R5cGUucmVuZGVyKTogTW92ZWQgZnJvbSBDaGFydHNUb29sYmFyLgorICAgICAgICAoQ29udGlu
dW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBlLnNldE51bWJlck9mRGF5c0NhbGxiYWNrKTogRGl0
dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90b3R5cGUuc2V0U3RhcnRU
aW1lKTogRGl0dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90b3R5cGUu
X3NldEFsbG93ZWREYXlDb3VudFJhbmdlKTogU2V0cyByYW5nZSBmb3IgZGF5IGNvdW50LgorICAg
ICAgICAoQ29udGludW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBlLl9zZXRJbnB1dEVsZW1lbnRW
YWx1ZSk6IERpdHRvLgorICAgICAgICAoQ29udGludW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBl
Ll9lbnRlclRleHRNb2RlKTogRGl0dG8sIGJ1dCBleHBhbmRlZCB0byB1cGRhdGUgdGhpcy5faW5U
ZXh0TW9kZS4KKyAgICAgICAgKENvbnRpbnVvdXNEb21haW5Ub29sYmFyLnByb3RvdHlwZS5fZXhp
dFRleHRNb2RlKTogRGl0dG8gdG8gX2VudGVyVGV4dE1vZGUuCisgICAgICAgIChDb250aW51b3Vz
RG9tYWluVG9vbGJhci5wcm90b3R5cGUuX3NsaWRlclZhbHVlTWF5SGF2ZUNoYW5nZWQpOiBNb3Zl
ZCBmcm9tIENoYXJ0c1Rvb2xiYXIuCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5w
cm90b3R5cGUuX2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKENv
bnRpbnVvdXNEb21haW5Ub29sYmFyLnByb3RvdHlwZS5fY2FsbE51bWJlck9mRGF5c0NhbGxiYWNr
KTogRGl0dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5kYXlzQ291bnRMYWJl
bFRleHQpOiBBZGRlZCBzbyBjb250ZW50IG9mIGRheXNDb3VudExhYmVsIGNhbiBiZSBtb2RpZmll
ZC4KKyAgICAgICAgKENvbnRpbnVvdXNEb21haW5Ub29sYmFyLmh0bWxUZW1wbGF0ZSk6IE1vdmVk
IGZyb20gQ2hhcnRzVG9vbGJhciwgYnV0IHJlbW92ZXMgJ0FkZCBQYW5lJyBidXR0b24gYW5kCisg
ICAgICAgIGFsbG93cyBjdXN0b21pemF0aW9uIG9mIGRheXNDb3VudCBsYWJlbCB0ZXh0LgorICAg
ICAgICAoQ29udGludW91c0RvbWFpblRvb2xiYXIuY3NzVGVtcGxhdGUpOiBNb3ZlZCBmcm9tIENo
YXJ0c1Rvb2xiYXIsIGV4Y2VwdCBmb3IgJ0FkZCBQYW5lJyBzdHlsaW5nLgorICAgICAgICAqIHB1
YmxpYy92My9wYWdlcy9kb21haW4tY29udHJvbC10b29sYmFyLmpzOgorICAgICAgICAoRG9tYWlu
Q29udHJvbFRvb2xiYXIucHJvdG90eXBlLnNldFN0YXJ0VGltZSk6IEFkanVzdCBsb2dpYyB0byBh
Y2NvdW50IGZvciAwIGRheSB2YWx1ZS4KKyAgICAgICAgKERvbWFpbkNvbnRyb2xUb29sYmFyLnBy
b3RvdHlwZS5zZXROdW1iZXJPZkRheXMpOiBEaXR0by4KKyAgICAgICAgKERvbWFpbkNvbnRyb2xU
b29sYmFyKToKKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvc3VtbWFyeS1wYWdlLmpzOgorICAg
ICAgICAoU3VtbWFyeVBhZ2UpOiBBZGQgYSBjb250cnVjdG9yIGFyZ3VtZW50IGZvciBhIHRvb2xi
YXIuCisgICAgICAgIChTdW1tYXJ5UGFnZS5wcm90b3R5cGUub3Blbik6IFNwbGl0IHByaW1hcnkg
bG9naWMgaW50byB1cGRhdGVBbmRSZW5kZXJGb3JSYW5nZS4KKyAgICAgICAgKFN1bW1hcnlQYWdl
LnByb3RvdHlwZS51cGRhdGVBbmRSZW5kZXJGb3JSYW5nZSk6IE5ldy4gVXNlZCB0byBjaGFuZ2Ug
IyBkYXlzIGFnbyBhdCB3aGljaCBzdW1tYXJ5CisgICAgICAgIGNhbGN1bGF0aW9ucyB3ZXJlIGFw
cGxpZWQuCisgICAgICAgIChTdW1tYXJ5UGFnZS5wcm90b3R5cGUuc2V0TnVtYmVyT2ZEYXlzRnJv
bVRvb2xiYXIpOiBDYWxsYmFjayBmb3Igd2hlbiBzbGlkZXIgb3IgdGV4dE1vZGUgJ2RheXMnIHZh
bHVlCisgICAgICAgIGNoYW5nZXMuCisgICAgICAgICogcHVibGljL3YzL3BhZ2VzL3N1bW1hcnkt
dG9vbGJhci5qczogTmV3LiBBZGRzIGEgc2xpZGVyIGZvciB0aGUgc3VtbWFyeSBwYWdlIHRvIHJl
LWV2YWx1YXRlIGF0IHNvbWUKKyAgICAgICAgIyBvZiBkYXlzIGFnby4KKyAgICAgICAgKFN1bW1h
cnlUb29sYmFyKTogTmV3LgorICAgICAgICAoU3VtbWFyeVRvb2xiYXIucHJvdG90eXBlLl9hZGRT
bGlkZXJUZXh0Rm9ybWF0dGluZ0Zvclplcm9EYXlzKTogQ2hhbmdlcyBzdHlsaW5nIHdoZW4gZGF5
IGNvdW50IGdvZXMgdG8KKyAgICAgICAgJzAnLgorICAgICAgICAoU3VtbWFyeVRvb2xiYXIucHJv
dG90eXBlLl9yZW1vdmVTbGlkZXJUZXh0Rm9ybWF0dGluZ0Zvclplcm9EYXlzKTogQ2hhbmdlcyBz
dHlsaW5nIHdoZW4gZGF5IGNvdW50IGdvZXMKKyAgICAgICAgYWJvdmUgMCwgb3Igd2hlbiBpbiB0
ZXh0TW9kZS4KKyAgICAgICAgKFN1bW1hcnlUb29sYmFyLnByb3RvdHlwZS5yZW5kZXIpOiBEeW5h
bWljYWxseSBhZGp1c3Qgc3R5bGluZyBiYXNlZCBvbiB0aGlzLl9udW1iZXJPZkRheXMgdmFsdWUu
CisgICAgICAgIChTdW1tYXJ5VG9vbGJhci5wcm90b3R5cGUuX2VudGVyVGV4dE1vZGUpOiBVc2Ug
dGhpcy5lbnF1ZXVlVG9SZW5kZXIgdG8gcmVuZGVyIGFzLW5lZWRlZC4KKyAgICAgICAgKFN1bW1h
cnlUb29sYmFyLnByb3RvdHlwZS5fZXhpdFRleHRNb2RlKTogRGl0dG8uCisKIDIwMTktMDYtMjQg
IERlYW4gSm9obnNvbiAgPGRlYW5fam9obnNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW3BlcmYu
d2Via2l0Lm9yZ10gVXBkYXRlIHN1bW1hcnkgcGFnZSBjYWxjdWxhdGlvbnMgdG8gdXNlIG1lYW4g
aW5zdGVhZCBvZiBtZWRpYW4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvaW5kZXguaHRtbCBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
aW5kZXguaHRtbAppbmRleCBlNzMxMDc3ZjZlYmUwMDQwN2FkYjA2OGM3ZmZjYmY2MWVhNjZjZGNj
Li5kZjc2ZDdkMGViYzNhMDE3YTMyMzg3MGRhNGZiZmExMDVlYWIyYTM0IDEwMDY0NAotLS0gYS9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKKysrIGIvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sCkBAIC0xMTMsNiArMTEzLDcg
QEAgUnVuIHRvb2xzL2J1bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2FkIHRpbWUg
Zm9yIHByb2R1Y3Rpb24uYCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9kb21haW4tY29u
dHJvbC10b29sYmFyLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL2Rh
c2hib2FyZC10b29sYmFyLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2Vz
L2Rhc2hib2FyZC1wYWdlLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2Vz
L2NvbnRpbnVvdXMtZG9tYWluLXRvb2xiYXIuanMiPjwvc2NyaXB0PgogICAgICAgICA8c2NyaXB0
IHNyYz0icGFnZXMvY2hhcnQtcGFuZS1zdGF0dXMtdmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgICAg
IDxzY3JpcHQgc3JjPSJwYWdlcy9jaGFydC1wYW5lLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNj
cmlwdCBzcmM9InBhZ2VzL2NoYXJ0cy10b29sYmFyLmpzIj48L3NjcmlwdD4KQEAgLTEyMyw2ICsx
MjQsNyBAQCBSdW4gdG9vbHMvYnVuZGxlLXYzLXNjcmlwdHMgdG8gc3BlZWQgdXAgdGhlIGxvYWQg
dGltZSBmb3IgcHJvZHVjdGlvbi5gKTsKICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL2NyZWF0
ZS1hbmFseXNpcy10YXNrLXBhZ2UuanMiPjwvc2NyaXB0PgogICAgICAgICA8c2NyaXB0IHNyYz0i
cGFnZXMvYnVpbGQtcmVxdWVzdC1xdWV1ZS1wYWdlLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNj
cmlwdCBzcmM9InBhZ2VzL3N1bW1hcnktcGFnZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3Jp
cHQgc3JjPSJwYWdlcy9zdW1tYXJ5LXRvb2xiYXIuanMiPjwvc2NyaXB0PgogICAgICAgICA8c2Ny
aXB0IHNyYz0icGFnZXMvdGVzdC1mcmVzaG5lc3MtcGFnZS5qcyI+PC9zY3JpcHQ+CiAKICAgICAg
ICAgPHNjcmlwdCBzcmM9Im1haW4uanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tYWluLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9tYWluLmpzCmluZGV4IDBlYmMyZjAxYzdiYzRlNjgzZTk2ODY5YjVmMTJl
NmNkYzJmODBhZTMuLjYyMTdiM2NmYmFjZjBhZTQ1MTlkMjRlODdjYTliYzg2MTg1YzM5OTggMTAw
NjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbWFpbi5qcworKysg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21haW4uanMKQEAgLTI2LDExICsy
NiwxMiBAQCBmdW5jdGlvbiBtYWluKCkgewogICAgICAgICAgICAgICAgIGRhc2hib2FyZFBhZ2Vz
LnB1c2gobmV3IERhc2hib2FyZFBhZ2UobmFtZSwgbWFuaWZlc3QuZGFzaGJvYXJkc1tuYW1lXSwg
ZGFzaGJvYXJkVG9vbGJhcikpOwogICAgICAgICB9CiAKKyAgICAgICAgY29uc3Qgc3VtbWFyeVRv
b2xiYXIgPSBuZXcgU3VtbWFyeVRvb2xiYXI7CiAgICAgICAgIGNvbnN0IHN1bW1hcnlQYWdlcyA9
IFtdOwogICAgICAgICBsZXQgdGVzdEZyZXNobmVzc1BhZ2UgPSBudWxsOwogICAgICAgICBpZiAo
bWFuaWZlc3Quc3VtbWFyeVBhZ2VzKSB7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IHN1bW1hcnlQ
YWdlIG9mIG1hbmlmZXN0LnN1bW1hcnlQYWdlcykKLSAgICAgICAgICAgICAgICBzdW1tYXJ5UGFn
ZXMucHVzaChuZXcgU3VtbWFyeVBhZ2Uoc3VtbWFyeVBhZ2UpKTsKKyAgICAgICAgICAgICAgICBz
dW1tYXJ5UGFnZXMucHVzaChuZXcgU3VtbWFyeVBhZ2Uoc3VtbWFyeVBhZ2UsIHN1bW1hcnlUb29s
YmFyKSk7CiAgICAgICAgICAgICB0ZXN0RnJlc2huZXNzUGFnZSA9IG5ldyBUZXN0RnJlc2huZXNz
UGFnZShtYW5pZmVzdC5zdW1tYXJ5UGFnZXMsIG1hbmlmZXN0LnRlc3RBZ2VUb2xlcmFuY2VJbkhv
dXJzKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL3BhZ2VzL2NoYXJ0cy10b29sYmFyLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9wYWdlcy9jaGFydHMtdG9vbGJhci5qcwppbmRleCBhMDk3ZTM0OGU4N2Y5
N2JjMWI5MWI5Nzk5OGZhZTI0N2E2NzY4MWZiLi45ZTYzOTkyZmY1N2Y0N2Y2MzA4ZGQyMzI5YjA3
Yjk0NTc4MDk0ZTQwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL3BhZ2VzL2NoYXJ0cy10b29sYmFyLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjMvcGFnZXMvY2hhcnRzLXRvb2xiYXIuanMKQEAgLTEsMjQgKzEsOCBAQAogCi1j
bGFzcyBDaGFydHNUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRvb2xiYXIgeworY2xhc3Mg
Q2hhcnRzVG9vbGJhciBleHRlbmRzIENvbnRpbnVvdXNEb21haW5Ub29sYmFyIHsKICAgICBjb25z
dHJ1Y3RvcigpCiAgICAgewotICAgICAgICBzdXBlcignY2hhcnMtdG9vbGJhcicsIDcpOwotCi0g
ICAgICAgIHRoaXMuX21pbkRheUNvdW50ID0gMTsKLSAgICAgICAgdGhpcy5fbWF4RGF5Q291bnQg
PSAzNjY7Ci0KLSAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJhY2sgPSBudWxsOwotICAg
ICAgICB0aGlzLl9zbGlkZXIgPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuc2xpZGVy
Jyk7Ci0gICAgICAgIHRoaXMuX3NsaWRlci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlz
Ll9zbGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOwotICAgICAgICB0aGlzLl9z
bGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fc2xpZGVyVmFsdWVNYXlI
YXZlQ2hhbmdlZC5iaW5kKHRoaXMpKTsKLQotICAgICAgICB0aGlzLl9lZGl0b3IgPSB0aGlzLmNv
bnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5h
ZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX2VudGVyVGV4dE1vZGUuYmluZCh0aGlzKSk7
Ci0gICAgICAgIHRoaXMuX2VkaXRvci5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5fZXhp
dFRleHRNb2RlLmJpbmQodGhpcykpOwotICAgICAgICB0aGlzLl9lZGl0b3IuYWRkRXZlbnRMaXN0
ZW5lcignaW5wdXQnLCB0aGlzLl9lZGl0b3JWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykp
OwotICAgICAgICB0aGlzLl9lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5f
ZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMpKTsKLQotICAgICAgICB0aGlzLl9s
YWJlbFNwYW4gPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCcuZGF5LWNvdW50Jyk7Cisg
ICAgICAgIHN1cGVyKCdjaGFydHMtdG9vbGJhcicsIDcpOwogCiAgICAgICAgIHRoaXMuX2FkZFBh
bmVDYWxsYmFjayA9IG51bGw7CiAgICAgICAgIHRoaXMuX3BhbmVTZWxlY3RvciA9IHRoaXMuY29u
dGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ3BhbmUtc2VsZWN0b3InKS5jb21wb25lbnQoKTsKQEAgLTM1
LDE0ICsxOSw2IEBAIGNsYXNzIENoYXJ0c1Rvb2xiYXIgZXh0ZW5kcyBEb21haW5Db250cm9sVG9v
bGJhciB7CiAgICAgewogICAgICAgICBzdXBlci5yZW5kZXIoKTsKICAgICAgICAgdGhpcy5fcGFu
ZVNlbGVjdG9yLmVucXVldWVUb1JlbmRlcigpOwotICAgICAgICB0aGlzLl9sYWJlbFNwYW4udGV4
dENvbnRlbnQgPSB0aGlzLl9udW1iZXJPZkRheXM7Ci0gICAgICAgIHRoaXMuX3NldElucHV0RWxl
bWVudFZhbHVlKHRoaXMuX251bWJlck9mRGF5cyk7Ci0gICAgfQotCi0gICAgc2V0TnVtYmVyT2ZE
YXlzQ2FsbGJhY2soY2FsbGJhY2spCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCghY2Fs
bGJhY2sgfHwgY2FsbGJhY2sgaW5zdGFuY2VvZiBGdW5jdGlvbik7Ci0gICAgICAgIHRoaXMuX251
bWJlck9mRGF5c0NhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgfQogCiAgICAgc2V0QWRkUGFuZUNh
bGxiYWNrKGNhbGxiYWNrKQpAQCAtNTMsNjEgKzI5LDcgQEAgY2xhc3MgQ2hhcnRzVG9vbGJhciBl
eHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsKIAogICAgIHNldFN0YXJ0VGltZShzdGFydFRp
bWUpCiAgICAgewotICAgICAgICB0aGlzLl9leGl0VGV4dE1vZGUoKTsKLSAgICAgICAgaWYgKHN0
YXJ0VGltZSkKLSAgICAgICAgICAgIHN1cGVyLnNldFN0YXJ0VGltZShzdGFydFRpbWUpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzdXBlci5zZXROdW1iZXJPZkRheXMoNyk7Ci0gICAgfQot
Ci0gICAgX3NldElucHV0RWxlbWVudFZhbHVlKHZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy5f
c2xpZGVyLnZhbHVlID0gTWF0aC5wb3codmFsdWUsIDEvMyk7Ci0gICAgICAgIHRoaXMuX3NsaWRl
ci5taW4gPSBNYXRoLnBvdyh0aGlzLl9taW5EYXlDb3VudCwgMS8zKTsKLSAgICAgICAgdGhpcy5f
c2xpZGVyLm1heCA9IE1hdGgucG93KHRoaXMuX21heERheUNvdW50LCAxLzMpOwotICAgICAgICB0
aGlzLl9zbGlkZXIuc3RlcCA9ICdhbnknOwotICAgICAgICB0aGlzLl9lZGl0b3IudmFsdWUgPSB2
YWx1ZTsKLSAgICB9Ci0KLSAgICBfZW50ZXJUZXh0TW9kZShldmVudCkKLSAgICB7Ci0gICAgICAg
IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5zdHlsZS5vcGFj
aXR5ID0gMTsKLSAgICAgICAgdGhpcy5fZWRpdG9yLnN0eWxlLm1hcmdpbkxlZnQgPSAnLTIuNXJl
bSc7Ci0gICAgICAgIHRoaXMuX2xhYmVsU3Bhbi5zdHlsZS5vcGFjaXR5ID0gMDsKLSAgICAgICAg
dGhpcy5fc2xpZGVyLnN0eWxlLm9wYWNpdHkgPSAwOwotICAgIH0KLQotICAgIF9leGl0VGV4dE1v
ZGUoZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoZXZlbnQpCi0gICAgICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOwotICAgICAgICB0aGlzLl9lZGl0b3Iuc3R5bGUub3BhY2l0eSA9IDA7
Ci0gICAgICAgIHRoaXMuX2VkaXRvci5zdHlsZS5tYXJnaW5MZWZ0ID0gbnVsbDsKLSAgICAgICAg
dGhpcy5fbGFiZWxTcGFuLnN0eWxlLm9wYWNpdHkgPSAxOwotICAgICAgICB0aGlzLl9zbGlkZXIu
c3R5bGUub3BhY2l0eSA9IDE7Ci0gICAgfQotCi0gICAgX3NsaWRlclZhbHVlTWF5SGF2ZUNoYW5n
ZWQoZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgbnVtYmVyT2ZEYXlzID0gTWF0aC5yb3VuZChN
YXRoLnBvdyhwYXJzZUZsb2F0KHRoaXMuX3NsaWRlci52YWx1ZSksIDMpKTsKLSAgICAgICAgdGhp
cy5fY2FsbE51bWJlck9mRGF5c0NhbGxiYWNrKGV2ZW50LCBudW1iZXJPZkRheXMpOwotICAgIH0K
LQotICAgIF9lZGl0b3JWYWx1ZU1heUhhdmVDaGFuZ2VkKGV2ZW50KQotICAgIHsKLSAgICAgICAg
dmFyIHJhd051bWJlciA9IE1hdGgucm91bmQocGFyc2VGbG9hdCh0aGlzLl9lZGl0b3IudmFsdWUp
KTsKLSAgICAgICAgdmFyIG51bWJlck9mRGF5cyA9IE1hdGgubWF4KHRoaXMuX21pbkRheUNvdW50
LCBNYXRoLm1pbih0aGlzLl9tYXhEYXlDb3VudCwgcmF3TnVtYmVyKSk7Ci0gICAgICAgIGlmICh0
aGlzLl9lZGl0b3IudmFsdWUgIT0gbnVtYmVyT2ZEYXlzKQotICAgICAgICAgICAgdGhpcy5fZWRp
dG9yLnZhbHVlID0gbnVtYmVyT2ZEYXlzOwotICAgICAgICB0aGlzLl9jYWxsTnVtYmVyT2ZEYXlz
Q2FsbGJhY2soZXZlbnQsIG51bWJlck9mRGF5cyk7Ci0gICAgfQotCi0gICAgX2NhbGxOdW1iZXJP
ZkRheXNDYWxsYmFjayhldmVudCwgbnVtYmVyT2ZEYXlzKQotICAgIHsKLSAgICAgICAgdmFyIHNo
b3VsZFVwZGF0ZVN0YXRlID0gZXZlbnQudHlwZSA9PSAnY2hhbmdlJzsKLSAgICAgICAgaWYgKCh0
aGlzLm51bWJlck9mRGF5cygpICE9IG51bWJlck9mRGF5cyB8fCBzaG91bGRVcGRhdGVTdGF0ZSkg
JiYgdGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJhY2spCi0gICAgICAgICAgICB0aGlzLl9udW1iZXJP
ZkRheXNDYWxsYmFjayhudW1iZXJPZkRheXMsIHNob3VsZFVwZGF0ZVN0YXRlKTsKKyAgICAgICAg
c3VwZXIuc2V0U3RhcnRUaW1lKE1hdGgubWF4KDEsIHN0YXJ0VGltZSkpOwogICAgIH0KIAogICAg
IF90b2dnbGVQYW5lU2VsZWN0b3IoZXZlbnQpCkBAIC0xNDUsMzQgKzY3LDI1IEBAIGNsYXNzIENo
YXJ0c1Rvb2xiYXIgZXh0ZW5kcyBEb21haW5Db250cm9sVG9vbGJhciB7CiAgICAgICAgICAgICB0
aGlzLl9hZGRQYW5lQ2FsbGJhY2socGxhdGZvcm0sIG1ldHJpYyk7CiAgICAgfQogCi0KICAgICBz
dGF0aWMgaHRtbFRlbXBsYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBgCi0gICAgICAgICAg
ICA8bmF2IGNsYXNzPSJjaGFydHMtdG9vbGJhciI+CisgICAgICAgICAgICA8bmF2PgogICAgICAg
ICAgICAgICAgIDx1bCBjbGFzcz0iYnV0dG9uZWQtdG9vbGJhciI+CiAgICAgICAgICAgICAgICAg
ICAgIDxsaT48YSBocmVmPSIjIiBjbGFzcz0icGFuZS1zZWxlY3Rvci1vcGVuZXIiPkFkZCBwYW5l
PC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgPC91bD4KLSAgICAgICAgICAgICAgICA8dWwgY2xh
c3M9ImJ1dHRvbmVkLXRvb2xiYXIiPgotICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InN0
YXJ0LXRpbWUtc2xpZGVyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9InNsaWRlciIgdHlwZT0icmFuZ2Ui
PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZWRpdG9yIiB0eXBl
PSJudW1iZXIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJl
bCI+PHNwYW4gY2xhc3M9ImRheS1jb3VudCIgdGFiaW5kZXg9IjAiPj88L3NwYW4+IGRheXM8L3Nw
YW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgotICAgICAgICAgICAgICAgICAg
ICA8L2xpPgotICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgPGRpdiBjbGFz
cz0icGFuZS1zZWxlY3Rvci1jb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICA8cGFuZS1z
ZWxlY3Rvcj48L3BhbmUtc2VsZWN0b3I+CiAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAg
ICAgICA8L25hdj5gOworICAgICAgICAgICAgICAgICR7IHN1cGVyLmh0bWxUZW1wbGF0ZSgpIH0K
KyAgICAgICAgICAgIDwvbmF2PgorICAgICAgICBgOwogICAgIH0KIAogICAgIHN0YXRpYyBjc3NU
ZW1wbGF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gVG9vbGJhci5jc3NUZW1wbGF0ZSgpICsg
YAotCi0gICAgICAgICAgICAuY2hhcnRzLXRvb2xiYXIgPiAuYnV0dG9uZWQtdG9vbGJhcjpmaXJz
dC1jaGlsZCB7CisgICAgICAgIHJldHVybiBzdXBlci5jc3NUZW1wbGF0ZSgpICsgYAorICAgICAg
ICAgICAgbmF2ID4gLmJ1dHRvbmVkLXRvb2xiYXI6Zmlyc3QtY2hpbGQgewogICAgICAgICAgICAg
ICAgIG1hcmdpbi1yaWdodDogMC41cmVtOwogICAgICAgICAgICAgfQogCkBAIC0xODAsNyArOTMs
NyBAQCBjbGFzcyBDaGFydHNUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRvb2xiYXIgewog
ICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjA0LCAxNTMsIDUxLCAwLjEpOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAuY2hhcnRzLXRvb2xiYXIgPiAucGFuZS1zZWxlY3Rv
ci1jb250YWluZXIgeworICAgICAgICAgICAgbmF2ID4gLnBhbmUtc2VsZWN0b3ItY29udGFpbmVy
IHsKICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgICAgICAg
cmlnaHQ6IDFyZW07CiAgICAgICAgICAgICAgICAgbWFyZ2luOiAwOwpAQCAtMTkyLDM5ICsxMDUs
OCBAQCBjbGFzcyBDaGFydHNUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRvb2xiYXIgewog
ICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAg
ICAgICAgICAgICAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigwLjVyZW0pOwogICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAuYnV0dG9uZWQtdG9vbGJhciAuc3RhcnQtdGltZS1z
bGlkZXIgewotICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAycmVtOwotICAgICAgICAgICAg
ICAgIGxpbmUtaGVpZ2h0OiAxZW07Ci0gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC5zdGFydC10aW1lLXNsaWRlciBsYWJlbCB7
Ci0gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIgLnNsaWRlciB7Ci0gICAgICAgICAgICAg
ICAgaGVpZ2h0OiAwLjhyZW07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC5zdGFydC10
aW1lLXNsaWRlciAuZWRpdG9yIHsKLSAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7
Ci0gICAgICAgICAgICAgICAgb3BhY2l0eTogMDsKLSAgICAgICAgICAgICAgICB3aWR0aDogNHJl
bTsKLSAgICAgICAgICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKLSAgICAgICAgICAgICAg
ICBmb250LXNpemU6IDAuOHJlbTsKLSAgICAgICAgICAgICAgICBoZWlnaHQ6IDAuOXJlbTsKLSAg
ICAgICAgICAgICAgICBvdXRsaW5lOiBub25lOwotICAgICAgICAgICAgICAgIGJvcmRlcjogc29s
aWQgMXB4ICNjY2M7Ci0gICAgICAgICAgICAgICAgei1pbmRleDogNTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLnN0YXJ0LXRpbWUtc2xpZGVyIC5kYXktY291bnQgewotICAgICAgICAg
ICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICAgICAgICAgICAgICB0ZXh0LWFsaWdu
OiByaWdodDsKLSAgICAgICAgICAgICAgICB3aWR0aDogMnJlbTsKLSAgICAgICAgICAgIH0KICAg
ICAgICAgYDsKICAgICB9Ci0KIH0KKworQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdjaGFy
dHMtdG9vbGJhcicsIENoYXJ0c1Rvb2xiYXIpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jb250aW51b3VzLWRvbWFpbi10b29sYmFyLmpzIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jb250aW51b3VzLWRvbWFp
bi10b29sYmFyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczNzc4MWI2ZTE0YjVmYTgyM2U5ZDdjM2RiZjRhZTdh
ODhhODM0MTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL3BhZ2VzL2NvbnRpbnVvdXMtZG9tYWluLXRvb2xiYXIuanMKQEAgLTAsMCArMSwxNjQg
QEAKKworY2xhc3MgQ29udGludW91c0RvbWFpblRvb2xiYXIgZXh0ZW5kcyBEb21haW5Db250cm9s
VG9vbGJhciB7CisgICAgY29uc3RydWN0b3IobmFtZSwgZGVmYXVsdE51bWJlck9mRGF5cykKKyAg
ICB7CisgICAgICAgIHN1cGVyKG5hbWUsIGRlZmF1bHROdW1iZXJPZkRheXMpOworCisgICAgICAg
IHRoaXMuX2RlZmF1bHRNaW5EYXlDb3VudCA9IDE7CisgICAgICAgIHRoaXMuX2RlZmF1bHRNYXhE
YXlDb3VudCA9IDM2NjsKKyAgICAgICAgdGhpcy5fZGVmYXVsdE51bWJlck9mRGF5cyA9IGRlZmF1
bHROdW1iZXJPZkRheXM7CisgICAgICAgIHRoaXMuX3NldEFsbG93ZWREYXlDb3VudFJhbmdlKCk7
CisKKyAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJhY2sgPSBudWxsOworICAgICAgICB0
aGlzLl9zbGlkZXIgPSB0aGlzLmNvbnRlbnQoJ3NsaWRlcicpOworICAgICAgICB0aGlzLl9zbGlk
ZXIuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fc2xpZGVyVmFsdWVNYXlIYXZlQ2hh
bmdlZC5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIo
J21vdXNlbW92ZScsIHRoaXMuX3NsaWRlclZhbHVlTWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlzKSk7
CisKKyAgICAgICAgdGhpcy5faW5UZXh0TW9kZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9lZGl0
b3IgPSB0aGlzLmNvbnRlbnQoJ2VkaXRvcicpOworICAgICAgICB0aGlzLl9lZGl0b3IuYWRkRXZl
bnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9lbnRlclRleHRNb2RlLmJpbmQodGhpcykpOworICAg
ICAgICB0aGlzLl9lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX2V4aXRUZXh0
TW9kZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIo
J2lucHV0JywgdGhpcy5fZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMpKTsKKyAg
ICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX2VkaXRv
clZhbHVlTWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlzKSk7CisKKyAgICAgICAgdGhpcy5fZGF5Q291
bnRTcGFuID0gdGhpcy5jb250ZW50KCdkYXktY291bnQnKTsKKyAgICB9CisKKyAgICByZW5kZXIo
KQorICAgIHsKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7CisgICAgICAgIHRoaXMuX2RheUNvdW50
U3Bhbi50ZXh0Q29udGVudCA9IHRoaXMuX251bWJlck9mRGF5czsKKyAgICAgICAgdGhpcy5fc2V0
SW5wdXRFbGVtZW50VmFsdWUodGhpcy5fbnVtYmVyT2ZEYXlzKTsKKyAgICB9CisKKyAgICBzZXRO
dW1iZXJPZkRheXNDYWxsYmFjayhjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KCFjYWxsYmFjayB8fCBjYWxsYmFjayBpbnN0YW5jZW9mIEZ1bmN0aW9uKTsKKyAgICAgICAg
dGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICB9CisKKyAgICBzZXRT
dGFydFRpbWUoc3RhcnRUaW1lPXRoaXMuX2RlZmF1bHROdW1iZXJPZkRheXMpCisgICAgeworICAg
ICAgICB0aGlzLl9leGl0VGV4dE1vZGUoKTsKKyAgICAgICAgaWYgKHN0YXJ0VGltZSkKKyAgICAg
ICAgICAgIHN1cGVyLnNldFN0YXJ0VGltZShzdGFydFRpbWUpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzdXBlci5zZXROdW1iZXJPZkRheXModGhpcy5fZGVmYXVsdE51bWJlck9mRGF5cyk7
CisgICAgfQorCisgICAgX3NldEFsbG93ZWREYXlDb3VudFJhbmdlKG1pbkRheUNvdW50PXRoaXMu
X2RlZmF1bHRNaW5EYXlDb3VudCwgbWF4RGF5Q291bnQ9dGhpcy5fZGVmYXVsdE1heERheUNvdW50
KQorICAgIHsKKyAgICAgICAgdGhpcy5fbWluRGF5Q291bnQgPSBtaW5EYXlDb3VudDsKKyAgICAg
ICAgdGhpcy5fbWF4RGF5Q291bnQgPSBtYXhEYXlDb3VudDsKKyAgICB9CisKKyAgICBfc2V0SW5w
dXRFbGVtZW50VmFsdWUodmFsdWUpCisgICAgeworICAgICAgICB0aGlzLl9zbGlkZXIudmFsdWUg
PSBNYXRoLnBvdyh2YWx1ZSwgMS8zKTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLm1pbiA9IE1hdGgu
cG93KHRoaXMuX21pbkRheUNvdW50LCAxLzMpOworICAgICAgICB0aGlzLl9zbGlkZXIubWF4ID0g
TWF0aC5wb3codGhpcy5fbWF4RGF5Q291bnQsIDEvMyk7CisgICAgICAgIHRoaXMuX3NsaWRlci5z
dGVwID0gJ2FueSc7CisgICAgICAgIHRoaXMuX2VkaXRvci52YWx1ZSA9IHZhbHVlOworICAgIH0K
KworICAgIF9lbnRlclRleHRNb2RlKGV2ZW50KQorICAgIHsKKyAgICAgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKKyAgICAgICAgdGhpcy5faW5UZXh0TW9kZSA9IHRydWU7CisgICAgICAgIHRo
aXMuX2VkaXRvci5zdHlsZS5vcGFjaXR5ID0gMTsKKyAgICAgICAgdGhpcy5fZWRpdG9yLnN0eWxl
Lm1hcmdpbkxlZnQgPSAnLTIuNXJlbSc7CisgICAgICAgIHRoaXMuX2RheUNvdW50U3Bhbi5zdHls
ZS5vcGFjaXR5ID0gMDsKKyAgICAgICAgdGhpcy5fc2xpZGVyLnN0eWxlLm9wYWNpdHkgPSAwOwor
ICAgIH0KKworICAgIF9leGl0VGV4dE1vZGUoZXZlbnQpCisgICAgeworICAgICAgICBpZiAoZXZl
bnQpCisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB0aGlzLl9p
blRleHRNb2RlID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2VkaXRvci5zdHlsZS5vcGFjaXR5ID0g
MDsKKyAgICAgICAgdGhpcy5fZWRpdG9yLnN0eWxlLm1hcmdpbkxlZnQgPSBudWxsOworICAgICAg
ICB0aGlzLl9kYXlDb3VudFNwYW4uc3R5bGUub3BhY2l0eSA9IDE7CisgICAgICAgIHRoaXMuX3Ns
aWRlci5zdHlsZS5vcGFjaXR5ID0gMTsKKyAgICB9CisKKyAgICBfc2xpZGVyVmFsdWVNYXlIYXZl
Q2hhbmdlZChldmVudCkKKyAgICB7CisgICAgICAgIGNvbnN0IG51bWJlck9mRGF5cyA9IE1hdGgu
cm91bmQoTWF0aC5wb3cocGFyc2VGbG9hdCh0aGlzLl9zbGlkZXIudmFsdWUpLCAzKSk7CisgICAg
ICAgIHRoaXMuX2NhbGxOdW1iZXJPZkRheXNDYWxsYmFjayhldmVudCwgbnVtYmVyT2ZEYXlzKTsK
KyAgICB9CisKKyAgICBfZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdlZChldmVudCkKKyAgICB7Cisg
ICAgICAgIGNvbnN0IHJhd051bWJlciA9IE1hdGgucm91bmQocGFyc2VGbG9hdCh0aGlzLl9lZGl0
b3IudmFsdWUpKTsKKyAgICAgICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gTWF0aC5tYXgodGhpcy5f
bWluRGF5Q291bnQsIE1hdGgubWluKHRoaXMuX21heERheUNvdW50LCByYXdOdW1iZXIpKTsKKyAg
ICAgICAgaWYgKHRoaXMuX2VkaXRvci52YWx1ZSAhPSBudW1iZXJPZkRheXMpCisgICAgICAgICAg
ICB0aGlzLl9lZGl0b3IudmFsdWUgPSBudW1iZXJPZkRheXM7CisgICAgICAgIHRoaXMuX2NhbGxO
dW1iZXJPZkRheXNDYWxsYmFjayhldmVudCwgbnVtYmVyT2ZEYXlzKTsKKyAgICB9CisKKyAgICBf
Y2FsbE51bWJlck9mRGF5c0NhbGxiYWNrKGV2ZW50LCBudW1iZXJPZkRheXMpCisgICAgeworICAg
ICAgICBjb25zdCBzaG91bGRVcGRhdGVTdGF0ZSA9IGV2ZW50LnR5cGUgPT0gJ2NoYW5nZSc7Cisg
ICAgICAgIGlmICgodGhpcy5udW1iZXJPZkRheXMoKSAhPSBudW1iZXJPZkRheXMgfHwgc2hvdWxk
VXBkYXRlU3RhdGUpICYmIHRoaXMuX251bWJlck9mRGF5c0NhbGxiYWNrKQorICAgICAgICAgICAg
dGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJhY2sobnVtYmVyT2ZEYXlzLCBzaG91bGRVcGRhdGVTdGF0
ZSk7CisgICAgfQorCisgICAgc3RhdGljIGRheXNDb3VudExhYmVsVGV4dCgpIHsgcmV0dXJuIGBk
YXlzYDsgfQorCisgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gYAorICAgICAgICAgICAgPHVsIGNsYXNzPSJidXR0b25lZC10b29sYmFyIj4KKyAgICAgICAg
ICAgICAgICA8bGkgY2xhc3M9InN0YXJ0LXRpbWUtc2xpZGVyIj4KKyAgICAgICAgICAgICAgICAg
ICAgPGxhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJzbGlkZXIiIHR5
cGU9InJhbmdlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iZWRpdG9yIiB0
eXBlPSJudW1iZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVs
Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iZGF5LWNvdW50IiB0YWJp
bmRleD0iMCI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7IHRoaXMuZGF5
c0NvdW50TGFiZWxUZXh0KCkgfQorICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgorICAg
ICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAg
ICAgICA8L3VsPmA7CisgICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBUb29sYmFyLmNzc1RlbXBsYXRlKCkgKyBgCisgICAgICAgICAgICAuYnV0
dG9uZWQtdG9vbGJhciAuc3RhcnQtdGltZS1zbGlkZXIgeworICAgICAgICAgICAgICAgIG1hcmdp
bi1sZWZ0OiAycmVtOworICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxZW07CisgICAgICAg
ICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC5zdGFydC10aW1lLXNsaWRlciAubGFiZWwgeworICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlu
bGluZS1ibG9jazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgI3NsaWRlciB7CisgICAg
ICAgICAgICAgICAgaGVpZ2h0OiAwLjhyZW07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICNlZGl0b3IgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAg
ICAgICAgICBvcGFjaXR5OiAwOworICAgICAgICAgICAgICAgIHdpZHRoOiA0cmVtOworICAgICAg
ICAgICAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgICAgICAgICAgICAgIGZvbnQtc2l6
ZTogMC44cmVtOworICAgICAgICAgICAgICAgIGhlaWdodDogMC45cmVtOworICAgICAgICAgICAg
ICAgIG91dGxpbmU6IG5vbmU7CisgICAgICAgICAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggI2Nj
YzsKKyAgICAgICAgICAgICAgICB6LWluZGV4OiA1OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAjZGF5LWNvdW50IHsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
CisgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICAgICAgd2lk
dGg6IDJyZW07CisgICAgICAgICAgICB9CisgICAgICAgIGA7CisgICAgfQorfQorCitDb21wb25l
bnRCYXNlLmRlZmluZUVsZW1lbnQoJ2NvbnRpbnVvdXMtZG9tYWluLXRvb2xiYXInLCBDb250aW51
b3VzRG9tYWluVG9vbGJhcik7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL3BhZ2VzL2RvbWFpbi1jb250cm9sLXRvb2xiYXIuanMgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2RvbWFpbi1jb250cm9sLXRvb2xiYXIuanMKaW5k
ZXggYzZiZjYxNGUzNjA4MmM5ODk0ZDRhYjNiOTM5ZDNmNjA3OTc1NWRlMi4uMmQ5OWFlOThjNDU1
MGZjYzA3M2Q5Yzc0YWY0ZTg1MDkwZGI1NWFhZSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9kb21haW4tY29udHJvbC10b29sYmFyLmpzCisrKyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvZG9tYWluLWNvbnRyb2wt
dG9vbGJhci5qcwpAQCAtMTcsNyArMTcsNyBAQCBjbGFzcyBEb21haW5Db250cm9sVG9vbGJhciBl
eHRlbmRzIFRvb2xiYXIgewogCiAgICAgc2V0U3RhcnRUaW1lKHN0YXJ0VGltZSkKICAgICB7Ci0g
ICAgICAgIHRoaXMuc2V0TnVtYmVyT2ZEYXlzKE1hdGgubWF4KDEsIE1hdGgucm91bmQoKHRoaXMu
X3ByZXNlbnQgLSBzdGFydFRpbWUpIC8gdGhpcy5fbWlsbGlzZWNvbmRzUGVyRGF5KSkpOworICAg
ICAgICB0aGlzLnNldE51bWJlck9mRGF5cyhNYXRoLm1heCgwLCBNYXRoLnJvdW5kKCh0aGlzLl9w
cmVzZW50IC0gc3RhcnRUaW1lKSAvIHRoaXMuX21pbGxpc2Vjb25kc1BlckRheSkpKTsKICAgICAg
ICAgdGhpcy5fc3RhcnRUaW1lID0gc3RhcnRUaW1lOwogICAgIH0KIApAQCAtMjgsNyArMjgsNyBA
QCBjbGFzcyBEb21haW5Db250cm9sVG9vbGJhciBleHRlbmRzIFRvb2xiYXIgewogCiAgICAgc2V0
TnVtYmVyT2ZEYXlzKG51bWJlck9mRGF5cywgc2V0QnlVc2VyKQogICAgIHsKLSAgICAgICAgaWYg
KCFudW1iZXJPZkRheXMpCisgICAgICAgIGlmICh0eXBlb2YobnVtYmVyT2ZEYXlzKSAhPSAnbnVt
YmVyJykKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBu
dWxsOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdl
cy9zdW1tYXJ5LXBhZ2UuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3Bh
Z2VzL3N1bW1hcnktcGFnZS5qcwppbmRleCBlNDYxOWIxOTc0ODdjZTk3MmMxOGM4MGFmZTg5YmZk
YjJjZWE4ODdmLi41NWJlNzE0YWNjMGQ3YmViZDA3ZWEzZDhmOTI4YTRjYmRiZWNiNjhiIDEwMDY0
NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3N1bW1hcnkt
cGFnZS5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3N1
bW1hcnktcGFnZS5qcwpAQCAtMSw5ICsxLDkgQEAKIAogY2xhc3MgU3VtbWFyeVBhZ2UgZXh0ZW5k
cyBQYWdlV2l0aEhlYWRpbmcgewogCi0gICAgY29uc3RydWN0b3Ioc3VtbWFyeVNldHRpbmdzKQor
ICAgIGNvbnN0cnVjdG9yKHN1bW1hcnlTZXR0aW5ncywgdG9vbGJhcikKICAgICB7Ci0gICAgICAg
IHN1cGVyKHN1bW1hcnlTZXR0aW5ncy5uYW1lLCBudWxsKTsKKyAgICAgICAgc3VwZXIoc3VtbWFy
eVNldHRpbmdzLm5hbWUsIHRvb2xiYXIpOwogCiAgICAgICAgIHRoaXMuX3JvdXRlID0gc3VtbWFy
eVNldHRpbmdzLnJvdXRlOwogICAgICAgICB0aGlzLl90YWJsZSA9IHsKQEAgLTMyLDEzICszMiwy
NyBAQCBjbGFzcyBTdW1tYXJ5UGFnZSBleHRlbmRzIFBhZ2VXaXRoSGVhZGluZyB7CiAgICAgb3Bl
bihzdGF0ZSkKICAgICB7CiAgICAgICAgIHN1cGVyLm9wZW4oc3RhdGUpOworICAgICAgICB0aGlz
LnRvb2xiYXIoKS5zZXROdW1iZXJPZkRheXModGhpcy50b29sYmFyKCkuX2RlZmF1bHROdW1iZXJP
ZkRheXMsIHRydWUpOworICAgICAgICB0aGlzLnRvb2xiYXIoKS5zZXROdW1iZXJPZkRheXNDYWxs
YmFjayh0aGlzLnNldE51bWJlck9mRGF5c0Zyb21Ub29sYmFyLmJpbmQodGhpcykpCisgICAgICAg
IHRoaXMuX2ZldGNoRm9yTnVtYmVyT2ZEYXlzQWdvKHRoaXMudG9vbGJhcigpLl9kZWZhdWx0TnVt
YmVyT2ZEYXlzKQorICAgIH0KIAotICAgICAgICB2YXIgY3VycmVudCA9IERhdGUubm93KCk7Ci0g
ICAgICAgIHZhciB0aW1lUmFuZ2UgPSBbY3VycmVudCAtIDI0ICogMzYwMCAqIDEwMDAsIGN1cnJl
bnRdOworICAgIF9mZXRjaEZvck51bWJlck9mRGF5c0FnbyhkYXlzKQorICAgIHsKKyAgICAgICAg
Y29uc3QgY3VycmVudCA9IERhdGUubm93KCk7CisgICAgICAgIGNvbnN0IG9uZURheSA9IDI0ICog
MzYwMCAqIDEwMDA7CisgICAgICAgIGNvbnN0IHRpbWVSYW5nZSA9IFtjdXJyZW50IC0gb25lRGF5
IC0gKGRheXMgKiBvbmVEYXkpLCBjdXJyZW50IC0gKGRheXMgKiBvbmVEYXkpXTsKICAgICAgICAg
Zm9yICh2YXIgZ3JvdXAgb2YgdGhpcy5fY29uZmlnR3JvdXBzKQogICAgICAgICAgICAgZ3JvdXAu
ZmV0Y2hBbmRDb21wdXRlU3VtbWFyeSh0aW1lUmFuZ2UpLnRoZW4oKCkgPT4geyB0aGlzLmVucXVl
dWVUb1JlbmRlcigpOyB9KTsKICAgICB9CiAKKyAgICBzZXROdW1iZXJPZkRheXNGcm9tVG9vbGJh
cihudW1iZXJPZkRheXMsIHNob3VsZFVwZGF0ZVN0YXRlKQorICAgIHsKKyAgICAgICAgdGhpcy50
b29sYmFyKCkuc2V0TnVtYmVyT2ZEYXlzKG51bWJlck9mRGF5cywgdHJ1ZSk7CisgICAgICAgIHRo
aXMuX2ZldGNoRm9yTnVtYmVyT2ZEYXlzQWdvKG51bWJlck9mRGF5cyk7CisgICAgICAgIHRoaXMu
dG9vbGJhcigpLmVucXVldWVUb1JlbmRlcigpOworICAgIH0KKwogICAgIHJlbmRlcigpCiAgICAg
ewogICAgICAgICBJbnN0cnVtZW50YXRpb24uc3RhcnRNZWFzdXJpbmdUaW1lKCdTdW1tYXJ5UGFn
ZScsICdyZW5kZXInKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvcGFnZXMvc3VtbWFyeS10b29sYmFyLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXRvb2xiYXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE5OGVjZGJj
N2VlMjM4MjQyZDYyMjIxYjc2ZmI4YzMwZmQxMDVkOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvc3VtbWFyeS10b29sYmFyLmpzCkBA
IC0wLDAgKzEsNTEgQEAKK2NsYXNzIFN1bW1hcnlUb29sYmFyIGV4dGVuZHMgQ29udGludW91c0Rv
bWFpblRvb2xiYXIgeworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCdz
dW1tYXJ5LXRvb2xiYXInLCAwKTsKKworICAgICAgICB0aGlzLl9zZXRBbGxvd2VkRGF5Q291bnRS
YW5nZSh7bWluRGF5Q291bnQ6IDB9KTsKKworICAgICAgICB0aGlzLl9kYXlDb3VudERlc2NyaXB0
aW9uID0gdGhpcy5jb250ZW50KCdkYXktY291bnQtZGVzY3JpcHRpb24nKTsKKyAgICB9CisKKyAg
ICBfYWRkU2xpZGVyVGV4dEZvcm1hdHRpbmdGb3JaZXJvRGF5cygpIHsKKyAgICAgICAgdGhpcy5f
ZGF5Q291bnRTcGFuLnRleHRDb250ZW50ID0gJyc7CisgICAgICAgIHRoaXMuX2RheUNvdW50U3Bh
bi5zdHlsZS53aWR0aCA9ICcxLjI1cmVtJzsKKyAgICAgICAgdGhpcy5fZGF5Q291bnREZXNjcmlw
dGlvbi5zdHlsZS53aWR0aCA9ICc0LjVyZW0nOworICAgICAgICB0aGlzLl9kYXlDb3VudERlc2Ny
aXB0aW9uLnRleHRDb250ZW50ID0gJ0N1cnJlbnQnOworICAgIH0KKworICAgIF9yZW1vdmVTbGlk
ZXJUZXh0Rm9ybWF0dGluZ0Zvclplcm9EYXlzKCkgeworICAgICAgICB0aGlzLl9kYXlDb3VudFNw
YW4uc3R5bGUud2lkdGggPSAnMnJlbSc7CisgICAgICAgIHRoaXMuX2RheUNvdW50RGVzY3JpcHRp
b24uc3R5bGUud2lkdGggPSAnMy43NXJlbSc7CisgICAgICAgIHRoaXMuX2RheUNvdW50RGVzY3Jp
cHRpb24udGV4dENvbnRlbnQgPSAnZGF5cyBhZ28nOworICAgIH0KKworICAgIHJlbmRlcigpCisg
ICAgeworICAgICAgICBzdXBlci5yZW5kZXIoKTsKKyAgICAgICAgaWYgKCF0aGlzLl9udW1iZXJP
ZkRheXMgJiYgIXRoaXMuX2luVGV4dE1vZGUpCisgICAgICAgICAgICB0aGlzLl9hZGRTbGlkZXJU
ZXh0Rm9ybWF0dGluZ0Zvclplcm9EYXlzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRo
aXMuX3JlbW92ZVNsaWRlclRleHRGb3JtYXR0aW5nRm9yWmVyb0RheXMoKTsKKyAgICB9CisKKyAg
ICBfZW50ZXJUZXh0TW9kZShldmVudCkKKyAgICB7CisgICAgICAgIHN1cGVyLl9lbnRlclRleHRN
b2RlKGV2ZW50KTsKKyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICB9CisKKyAg
ICBfZXhpdFRleHRNb2RlKGV2ZW50KQorICAgIHsKKyAgICAgICAgc3VwZXIuX2V4aXRUZXh0TW9k
ZShldmVudCk7CisgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgfQorCisgICAg
c3RhdGljIGRheXNDb3VudExhYmVsVGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4gYDxsYWJl
bCBpZD0iZGF5LWNvdW50LWRlc2NyaXB0aW9uIiBjbGFzcz0ibGFiZWwiPjwvbGFiZWw+YDsKKyAg
ICB9Cit9CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgnc3VtbWFyeS10b29sYmFyJywg
U3VtbWFyeVRvb2xiYXIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393802</attachid>
            <date>2020-03-17 16:41:11 -0700</date>
            <delta_ts>2020-03-18 13:42:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199051-20200317164110.patch</filename>
            <type>text/plain</type>
            <size>25606</size>
            <attacher name="Dean Johnson">dean_johnson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2OTQxCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCA5ODYyZDRkZDNiN2E3NjJkM2NlZDc0ODhjZjJmMWIxZWYyMTg1Njk1Li40YTg3N2QyMGQ3
YzEzOGViMmZiNTM1NzkwZjBkYjhiMzE2MDViZmY5IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3NCBAQAorMjAxOS0wNi0yNSAgRGVhbiBKb2huc29uICA8ZGVhbl9q
b2huc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbcGVyZi53ZWJraXQub3JnXSBBZGQgJ2JhY2sg
aW4gdGltZScgZmVhdHVyZSBmb3IgU3VtbWFyeSBwYWdlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MDUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgIkJhY2sgaW4gdGltZSIgZmVh
dHVyZSBmb3IgYWxsIFN1bW1hcnkgcGFnZXMgb24gdGhlIFdlYktpdCBQZXJmIGRhc2hib2FyZC4g
VGhlcmUgaXMgYSBuZXcKKyAgICAgICAgc2xpZGVyIGluIHRoZSB0b3AgcmlnaHQgY29ybmVyIHdo
aWNoIGNhbiBiZSBkcmFnZ2VkIHRvIHZpZXcgdGhlIHN1bW1hcnkgcGFnZSAnTiBkYXlzIGFnbycu
IFRoZSBkZWZhdWx0CisgICAgICAgIHZpZXcgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgorCisgICAg
ICAgICogcHVibGljL3YzL2luZGV4Lmh0bWw6IEFkZCBuZXcgcmVzb3VyY2VzOiBjb250aW51b3Vz
LWRvbWFpbi10b29sYmFyLmpzLCBzdW1tYXJ5LXRvb2xiYXIuanMKKyAgICAgICAgKiBwdWJsaWMv
djMvbWFpbi5qczogQWRkIG5ldyBzdW1tYXJ5VG9vbGJhciwgYW5kIGluaXRpYWxpemUgc3VtbWFy
eSBwYWdlcyB3aXRoIGl0LgorICAgICAgICAobWFpbik6CisgICAgICAgICogcHVibGljL3YzL3Bh
Z2VzL2NoYXJ0cy10b29sYmFyLmpzOiBBYnN0cmFjdCB0aGUgc2xpZGVyIHRvb2xiYXIgaW50byBh
IG5ldyBjbGFzcywgYW5kIGluaGVyaXQgZnJvbSBpdC4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIp
OiBOb3csIENoYXJ0c1Rvb2xiYXIgaXMgYSBtb3N0bHkgdGhpbiB3cmFwcGVyIHJvdW5kIFNsaWRl
clRvb2xiYXIgYW5kIGltcGxlbWVudHMgdGhlCisgICAgICAgICdBZGQgUGFuZScgYnV0dG9uICsg
ZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLnJlbmRlcik6
CisgICAgICAgIChDaGFydHNUb29sYmFyLnByb3RvdHlwZS5zZXRTdGFydFRpbWUpOiBFbnN1cmUg
c3RhcnRUaW1lIGlzIG5ldmVyIGxlc3MgdGhhbiAxLgorICAgICAgICAoQ2hhcnRzVG9vbGJhci5o
dG1sVGVtcGxhdGUpOiBNb3ZlZCAnQWRkIFBhbmUnIGJ1dHRvbnMgZnJvbSBDb250aW51b3VzRG9t
YWluVG9vbGJhci4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIuY3NzVGVtcGxhdGUpOiBNb3ZlZCAn
QWRkIFBhbmUnIHN0eWxpbmcgZnJvbSBDb250aW51b3VzRG9tYWluVG9vbGJhci4KKyAgICAgICAg
KENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLnNldE51bWJlck9mRGF5c0NhbGxiYWNrKTogTW92ZWQg
dG8gQ29udGludW91c0RvbWFpblRvb2xiYXIuCisgICAgICAgIChDaGFydHNUb29sYmFyLnByb3Rv
dHlwZS5fc2V0SW5wdXRFbGVtZW50VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKENoYXJ0c1Rvb2xi
YXIucHJvdG90eXBlLl9lbnRlclRleHRNb2RlKTogRGl0dG8uCisgICAgICAgIChDaGFydHNUb29s
YmFyLnByb3RvdHlwZS5fZXhpdFRleHRNb2RlKTogRGl0dG8uCisgICAgICAgIChDaGFydHNUb29s
YmFyLnByb3RvdHlwZS5fc2xpZGVyVmFsdWVNYXlIYXZlQ2hhbmdlZCk6IERpdHRvLgorICAgICAg
ICAoQ2hhcnRzVG9vbGJhci5wcm90b3R5cGUuX2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQpOiBE
aXR0by4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLl9jYWxsTnVtYmVyT2ZEYXlz
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvY29udGludW91cy1k
b21haW4tdG9vbGJhci5qczogQ29waWVkIGluaXRpYWxseSBmcm9tCisgICAgICAgIFdlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnRzLXRvb2xiYXIuanMuCisgICAg
ICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhcik6IE5ldy4gQmFzZWQgb24gQ2hhcnRzVG9vbGJh
ciBhbmQgY29udGFpbnMgcHJpbWFyeSBsb2dpYyBmb3IKKyAgICAgICAgYSAnc2xpZGVyJyB0aGF0
IGFkanVzdHMgdGltZS4gVXNlZCBieSBib3RoIENoYXJ0c1Rvb2xiYXIgYW5kIFN1bW1hcnlUb29s
YmFyLiBDb25zdHJ1Y3RvciBhZGRzCisgICAgICAgIGEgdGhpcy5faW5UZXh0TW9kZSA9IGZhbHNl
IGRlZmF1bHQsIHRvIGZpZ3VyZSBvdXQgaWYgdGV4dCBtb2RlIGlzIGN1cnJlbnRseSBpbiB1c2Ug
aW4gU3VtbWFyeVRvb2xiYXIuCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90
b3R5cGUucmVuZGVyKTogTW92ZWQgZnJvbSBDaGFydHNUb29sYmFyLgorICAgICAgICAoQ29udGlu
dW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBlLnNldE51bWJlck9mRGF5c0NhbGxiYWNrKTogRGl0
dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90b3R5cGUuc2V0U3RhcnRU
aW1lKTogRGl0dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90b3R5cGUu
X3NldEFsbG93ZWREYXlDb3VudFJhbmdlKTogU2V0cyByYW5nZSBmb3IgZGF5IGNvdW50LgorICAg
ICAgICAoQ29udGludW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBlLl9zZXRJbnB1dEVsZW1lbnRW
YWx1ZSk6IERpdHRvLgorICAgICAgICAoQ29udGludW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBl
Ll9lbnRlclRleHRNb2RlKTogRGl0dG8sIGJ1dCBleHBhbmRlZCB0byB1cGRhdGUgdGhpcy5faW5U
ZXh0TW9kZS4KKyAgICAgICAgKENvbnRpbnVvdXNEb21haW5Ub29sYmFyLnByb3RvdHlwZS5fZXhp
dFRleHRNb2RlKTogRGl0dG8gdG8gX2VudGVyVGV4dE1vZGUuCisgICAgICAgIChDb250aW51b3Vz
RG9tYWluVG9vbGJhci5wcm90b3R5cGUuX3NsaWRlclZhbHVlTWF5SGF2ZUNoYW5nZWQpOiBNb3Zl
ZCBmcm9tIENoYXJ0c1Rvb2xiYXIuCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5w
cm90b3R5cGUuX2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKENv
bnRpbnVvdXNEb21haW5Ub29sYmFyLnByb3RvdHlwZS5fY2FsbE51bWJlck9mRGF5c0NhbGxiYWNr
KTogRGl0dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5kYXlzQ291bnRMYWJl
bFRleHQpOiBBZGRlZCBzbyBjb250ZW50IG9mIGRheXNDb3VudExhYmVsIGNhbiBiZSBtb2RpZmll
ZC4KKyAgICAgICAgKENvbnRpbnVvdXNEb21haW5Ub29sYmFyLmh0bWxUZW1wbGF0ZSk6IE1vdmVk
IGZyb20gQ2hhcnRzVG9vbGJhciwgYnV0IHJlbW92ZXMgJ0FkZCBQYW5lJyBidXR0b24gYW5kCisg
ICAgICAgIGFsbG93cyBjdXN0b21pemF0aW9uIG9mIGRheXNDb3VudCBsYWJlbCB0ZXh0LgorICAg
ICAgICAoQ29udGludW91c0RvbWFpblRvb2xiYXIuY3NzVGVtcGxhdGUpOiBNb3ZlZCBmcm9tIENo
YXJ0c1Rvb2xiYXIsIGV4Y2VwdCBmb3IgJ0FkZCBQYW5lJyBzdHlsaW5nLgorICAgICAgICAqIHB1
YmxpYy92My9wYWdlcy9kb21haW4tY29udHJvbC10b29sYmFyLmpzOgorICAgICAgICAoRG9tYWlu
Q29udHJvbFRvb2xiYXIucHJvdG90eXBlLnNldFN0YXJ0VGltZSk6IEFkanVzdCBsb2dpYyB0byBh
Y2NvdW50IGZvciAwIGRheSB2YWx1ZS4KKyAgICAgICAgKERvbWFpbkNvbnRyb2xUb29sYmFyLnBy
b3RvdHlwZS5zZXROdW1iZXJPZkRheXMpOiBEaXR0by4KKyAgICAgICAgKERvbWFpbkNvbnRyb2xU
b29sYmFyKToKKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvc3VtbWFyeS1wYWdlLmpzOgorICAg
ICAgICAoU3VtbWFyeVBhZ2UpOiBBZGQgYSBjb250cnVjdG9yIGFyZ3VtZW50IGZvciBhIHRvb2xi
YXIuCisgICAgICAgIChTdW1tYXJ5UGFnZS5wcm90b3R5cGUub3Blbik6IFNwbGl0IHByaW1hcnkg
bG9naWMgaW50byB1cGRhdGVBbmRSZW5kZXJGb3JSYW5nZS4KKyAgICAgICAgKFN1bW1hcnlQYWdl
LnByb3RvdHlwZS51cGRhdGVBbmRSZW5kZXJGb3JSYW5nZSk6IE5ldy4gVXNlZCB0byBjaGFuZ2Ug
IyBkYXlzIGFnbyBhdCB3aGljaCBzdW1tYXJ5CisgICAgICAgIGNhbGN1bGF0aW9ucyB3ZXJlIGFw
cGxpZWQuCisgICAgICAgIChTdW1tYXJ5UGFnZS5wcm90b3R5cGUuc2VyaWFsaXplU3RhdGUpOiBO
ZXcuIFNlcmlhbGl6ZSB0b29sYmFyIHN0YXRlIHNvIGxpbmtzIGNhbiBiZSBjcmVhdGVkIGFuZCBz
aGFyZWQgd2l0aAorICAgICAgICBzaW5jZT08ZXBvY2g+LgorICAgICAgICAoU3VtbWFyeVBhZ2Uu
cHJvdG90eXBlLnNldE51bWJlck9mRGF5c0Zyb21Ub29sYmFyKTogQ2FsbGJhY2sgZm9yIHdoZW4g
c2xpZGVyIG9yIHRleHRNb2RlICdkYXlzJyB2YWx1ZQorICAgICAgICBjaGFuZ2VzLgorICAgICAg
ICAqIHB1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXRvb2xiYXIuanM6IE5ldy4gQWRkcyBhIHNsaWRl
ciBmb3IgdGhlIHN1bW1hcnkgcGFnZSB0byByZS1ldmFsdWF0ZSBhdCBzb21lCisgICAgICAgICMg
b2YgZGF5cyBhZ28uCisgICAgICAgIChTdW1tYXJ5VG9vbGJhcik6IE5ldy4KKyAgICAgICAgKFN1
bW1hcnlUb29sYmFyLnByb3RvdHlwZS5fYWRkU2xpZGVyVGV4dEZvcm1hdHRpbmdGb3JaZXJvRGF5
cyk6IENoYW5nZXMgc3R5bGluZyB3aGVuIGRheSBjb3VudCBnb2VzIHRvCisgICAgICAgICcwJy4K
KyAgICAgICAgKFN1bW1hcnlUb29sYmFyLnByb3RvdHlwZS5fcmVtb3ZlU2xpZGVyVGV4dEZvcm1h
dHRpbmdGb3JaZXJvRGF5cyk6IENoYW5nZXMgc3R5bGluZyB3aGVuIGRheSBjb3VudCBnb2VzCisg
ICAgICAgIGFib3ZlIDAsIG9yIHdoZW4gaW4gdGV4dE1vZGUuCisgICAgICAgIChTdW1tYXJ5VG9v
bGJhci5wcm90b3R5cGUucmVuZGVyKTogRHluYW1pY2FsbHkgYWRqdXN0IHN0eWxpbmcgYmFzZWQg
b24gdGhpcy5fbnVtYmVyT2ZEYXlzIHZhbHVlLgorICAgICAgICAoU3VtbWFyeVRvb2xiYXIucHJv
dG90eXBlLl9lbnRlclRleHRNb2RlKTogVXNlIHRoaXMuZW5xdWV1ZVRvUmVuZGVyIHRvIHJlbmRl
ciBhcy1uZWVkZWQuCisgICAgICAgIChTdW1tYXJ5VG9vbGJhci5wcm90b3R5cGUuX2V4aXRUZXh0
TW9kZSk6IERpdHRvLgorCiAyMDE5LTEyLTE1ICBaaGlmZWkgRmFuZyAgPHpoaWZlaV9mYW5nQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgcG93ZXIgbWV0cmljIHRvIHBlcmYgZGFzaGJvYXJkCmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKaW5kZXggZTcz
MTA3N2Y2ZWJlMDA0MDdhZGIwNjhjN2ZmY2JmNjFlYTY2Y2RjYy4uZGY3NmQ3ZDBlYmMzYTAxN2Ez
MjM4NzBkYTRmYmZhMTA1ZWFiMmEzNCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9pbmRleC5odG1sCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvaW5kZXguaHRtbApAQCAtMTEzLDYgKzExMyw3IEBAIFJ1biB0b29scy9idW5kbGUt
djMtc2NyaXB0cyB0byBzcGVlZCB1cCB0aGUgbG9hZCB0aW1lIGZvciBwcm9kdWN0aW9uLmApOwog
ICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvZG9tYWluLWNvbnRyb2wtdG9vbGJhci5qcyI+PC9z
Y3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9kYXNoYm9hcmQtdG9vbGJhci5qcyI+
PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9kYXNoYm9hcmQtcGFnZS5qcyI+
PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9jb250aW51b3VzLWRvbWFpbi10
b29sYmFyLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL2NoYXJ0LXBh
bmUtc3RhdHVzLXZpZXcuanMiPjwvc2NyaXB0PgogICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMv
Y2hhcnQtcGFuZS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9jaGFy
dHMtdG9vbGJhci5qcyI+PC9zY3JpcHQ+CkBAIC0xMjMsNiArMTI0LDcgQEAgUnVuIHRvb2xzL2J1
bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2FkIHRpbWUgZm9yIHByb2R1Y3Rpb24u
YCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9jcmVhdGUtYW5hbHlzaXMtdGFzay1wYWdl
LmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL2J1aWxkLXJlcXVlc3Qt
cXVldWUtcGFnZS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9zdW1t
YXJ5LXBhZ2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvc3VtbWFy
eS10b29sYmFyLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3Rlc3Qt
ZnJlc2huZXNzLXBhZ2UuanMiPjwvc2NyaXB0PgogCiAgICAgICAgIDxzY3JpcHQgc3JjPSJtYWlu
LmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvbWFpbi5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbWFpbi5q
cwppbmRleCA1N2EwNmMzNmMxOGExYmQzYTVjZGQ5NmFhZjhiOTllNWM2NzZhODcxLi5hYjk3ZGM4
ZTEwZmU3MGQwYWVhMWMwMGEyMmJkZjY4MGRiNjBmNjY0IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21haW4uanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9tYWluLmpzCkBAIC0yNiwxMSArMjYsMTIgQEAgZnVuY3Rpb24gbWFp
bigpIHsKICAgICAgICAgICAgICAgICBkYXNoYm9hcmRQYWdlcy5wdXNoKG5ldyBEYXNoYm9hcmRQ
YWdlKG5hbWUsIG1hbmlmZXN0LmRhc2hib2FyZHNbbmFtZV0sIGRhc2hib2FyZFRvb2xiYXIpKTsK
ICAgICAgICAgfQogCisgICAgICAgIGNvbnN0IHN1bW1hcnlUb29sYmFyID0gbmV3IFN1bW1hcnlU
b29sYmFyOwogICAgICAgICBjb25zdCBzdW1tYXJ5UGFnZXMgPSBbXTsKICAgICAgICAgbGV0IHRl
c3RGcmVzaG5lc3NQYWdlID0gbnVsbDsKICAgICAgICAgaWYgKG1hbmlmZXN0LnN1bW1hcnlQYWdl
cykgewogICAgICAgICAgICAgZm9yIChjb25zdCBzdW1tYXJ5UGFnZSBvZiBtYW5pZmVzdC5zdW1t
YXJ5UGFnZXMpCi0gICAgICAgICAgICAgICAgc3VtbWFyeVBhZ2VzLnB1c2gobmV3IFN1bW1hcnlQ
YWdlKHN1bW1hcnlQYWdlKSk7CisgICAgICAgICAgICAgICAgc3VtbWFyeVBhZ2VzLnB1c2gobmV3
IFN1bW1hcnlQYWdlKHN1bW1hcnlQYWdlLCBzdW1tYXJ5VG9vbGJhcikpOwogICAgICAgICAgICAg
dGVzdEZyZXNobmVzc1BhZ2UgPSBuZXcgVGVzdEZyZXNobmVzc1BhZ2UobWFuaWZlc3Quc3VtbWFy
eVBhZ2VzLCBtYW5pZmVzdC50ZXN0QWdlVG9sZXJhbmNlSW5Ib3Vycyk7CiAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jaGFy
dHMtdG9vbGJhci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMv
Y2hhcnRzLXRvb2xiYXIuanMKaW5kZXggYTA5N2UzNDhlODdmOTdiYzFiOTFiOTc5OThmYWUyNDdh
Njc2ODFmYi4uOWU2Mzk5MmZmNTdmNDdmNjMwOGRkMjMyOWIwN2I5NDU3ODA5NGU0MCAxMDA2NDQK
LS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jaGFydHMtdG9v
bGJhci5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2No
YXJ0cy10b29sYmFyLmpzCkBAIC0xLDI0ICsxLDggQEAKIAotY2xhc3MgQ2hhcnRzVG9vbGJhciBl
eHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsKK2NsYXNzIENoYXJ0c1Rvb2xiYXIgZXh0ZW5k
cyBDb250aW51b3VzRG9tYWluVG9vbGJhciB7CiAgICAgY29uc3RydWN0b3IoKQogICAgIHsKLSAg
ICAgICAgc3VwZXIoJ2NoYXJzLXRvb2xiYXInLCA3KTsKLQotICAgICAgICB0aGlzLl9taW5EYXlD
b3VudCA9IDE7Ci0gICAgICAgIHRoaXMuX21heERheUNvdW50ID0gMzY2OwotCi0gICAgICAgIHRo
aXMuX251bWJlck9mRGF5c0NhbGxiYWNrID0gbnVsbDsKLSAgICAgICAgdGhpcy5fc2xpZGVyID0g
dGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnNsaWRlcicpOwotICAgICAgICB0aGlzLl9z
bGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fc2xpZGVyVmFsdWVNYXlIYXZl
Q2hhbmdlZC5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhpcy5fc2xpZGVyLmFkZEV2ZW50TGlzdGVu
ZXIoJ21vdXNlbW92ZScsIHRoaXMuX3NsaWRlclZhbHVlTWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlz
KSk7Ci0KLSAgICAgICAgdGhpcy5fZWRpdG9yID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3Rv
cignLmVkaXRvcicpOwotICAgICAgICB0aGlzLl9lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignZm9j
dXMnLCB0aGlzLl9lbnRlclRleHRNb2RlLmJpbmQodGhpcykpOwotICAgICAgICB0aGlzLl9lZGl0
b3IuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX2V4aXRUZXh0TW9kZS5iaW5kKHRoaXMp
KTsKLSAgICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5f
ZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhpcy5fZWRp
dG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX2VkaXRvclZhbHVlTWF5SGF2ZUNo
YW5nZWQuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgdGhpcy5fbGFiZWxTcGFuID0gdGhpcy5jb250
ZW50KCkucXVlcnlTZWxlY3RvcignLmRheS1jb3VudCcpOworICAgICAgICBzdXBlcignY2hhcnRz
LXRvb2xiYXInLCA3KTsKIAogICAgICAgICB0aGlzLl9hZGRQYW5lQ2FsbGJhY2sgPSBudWxsOwog
ICAgICAgICB0aGlzLl9wYW5lU2VsZWN0b3IgPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9y
KCdwYW5lLXNlbGVjdG9yJykuY29tcG9uZW50KCk7CkBAIC0zNSwxNCArMTksNiBAQCBjbGFzcyBD
aGFydHNUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRvb2xiYXIgewogICAgIHsKICAgICAg
ICAgc3VwZXIucmVuZGVyKCk7CiAgICAgICAgIHRoaXMuX3BhbmVTZWxlY3Rvci5lbnF1ZXVlVG9S
ZW5kZXIoKTsKLSAgICAgICAgdGhpcy5fbGFiZWxTcGFuLnRleHRDb250ZW50ID0gdGhpcy5fbnVt
YmVyT2ZEYXlzOwotICAgICAgICB0aGlzLl9zZXRJbnB1dEVsZW1lbnRWYWx1ZSh0aGlzLl9udW1i
ZXJPZkRheXMpOwotICAgIH0KLQotICAgIHNldE51bWJlck9mRGF5c0NhbGxiYWNrKGNhbGxiYWNr
KQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoIWNhbGxiYWNrIHx8IGNhbGxiYWNrIGlu
c3RhbmNlb2YgRnVuY3Rpb24pOwotICAgICAgICB0aGlzLl9udW1iZXJPZkRheXNDYWxsYmFjayA9
IGNhbGxiYWNrOwogICAgIH0KIAogICAgIHNldEFkZFBhbmVDYWxsYmFjayhjYWxsYmFjaykKQEAg
LTUzLDYxICsyOSw3IEBAIGNsYXNzIENoYXJ0c1Rvb2xiYXIgZXh0ZW5kcyBEb21haW5Db250cm9s
VG9vbGJhciB7CiAKICAgICBzZXRTdGFydFRpbWUoc3RhcnRUaW1lKQogICAgIHsKLSAgICAgICAg
dGhpcy5fZXhpdFRleHRNb2RlKCk7Ci0gICAgICAgIGlmIChzdGFydFRpbWUpCi0gICAgICAgICAg
ICBzdXBlci5zZXRTdGFydFRpbWUoc3RhcnRUaW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc3VwZXIuc2V0TnVtYmVyT2ZEYXlzKDcpOwotICAgIH0KLQotICAgIF9zZXRJbnB1dEVsZW1l
bnRWYWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NsaWRlci52YWx1ZSA9IE1hdGgu
cG93KHZhbHVlLCAxLzMpOwotICAgICAgICB0aGlzLl9zbGlkZXIubWluID0gTWF0aC5wb3codGhp
cy5fbWluRGF5Q291bnQsIDEvMyk7Ci0gICAgICAgIHRoaXMuX3NsaWRlci5tYXggPSBNYXRoLnBv
dyh0aGlzLl9tYXhEYXlDb3VudCwgMS8zKTsKLSAgICAgICAgdGhpcy5fc2xpZGVyLnN0ZXAgPSAn
YW55JzsKLSAgICAgICAgdGhpcy5fZWRpdG9yLnZhbHVlID0gdmFsdWU7Ci0gICAgfQotCi0gICAg
X2VudGVyVGV4dE1vZGUoZXZlbnQpCi0gICAgewotICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOwotICAgICAgICB0aGlzLl9lZGl0b3Iuc3R5bGUub3BhY2l0eSA9IDE7Ci0gICAgICAgIHRo
aXMuX2VkaXRvci5zdHlsZS5tYXJnaW5MZWZ0ID0gJy0yLjVyZW0nOwotICAgICAgICB0aGlzLl9s
YWJlbFNwYW4uc3R5bGUub3BhY2l0eSA9IDA7Ci0gICAgICAgIHRoaXMuX3NsaWRlci5zdHlsZS5v
cGFjaXR5ID0gMDsKLSAgICB9Ci0KLSAgICBfZXhpdFRleHRNb2RlKGV2ZW50KQotICAgIHsKLSAg
ICAgICAgaWYgKGV2ZW50KQotICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAg
ICAgICAgdGhpcy5fZWRpdG9yLnN0eWxlLm9wYWNpdHkgPSAwOwotICAgICAgICB0aGlzLl9lZGl0
b3Iuc3R5bGUubWFyZ2luTGVmdCA9IG51bGw7Ci0gICAgICAgIHRoaXMuX2xhYmVsU3Bhbi5zdHls
ZS5vcGFjaXR5ID0gMTsKLSAgICAgICAgdGhpcy5fc2xpZGVyLnN0eWxlLm9wYWNpdHkgPSAxOwot
ICAgIH0KLQotICAgIF9zbGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2VkKGV2ZW50KQotICAgIHsKLSAg
ICAgICAgdmFyIG51bWJlck9mRGF5cyA9IE1hdGgucm91bmQoTWF0aC5wb3cocGFyc2VGbG9hdCh0
aGlzLl9zbGlkZXIudmFsdWUpLCAzKSk7Ci0gICAgICAgIHRoaXMuX2NhbGxOdW1iZXJPZkRheXND
YWxsYmFjayhldmVudCwgbnVtYmVyT2ZEYXlzKTsKLSAgICB9Ci0KLSAgICBfZWRpdG9yVmFsdWVN
YXlIYXZlQ2hhbmdlZChldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciByYXdOdW1iZXIgPSBNYXRo
LnJvdW5kKHBhcnNlRmxvYXQodGhpcy5fZWRpdG9yLnZhbHVlKSk7Ci0gICAgICAgIHZhciBudW1i
ZXJPZkRheXMgPSBNYXRoLm1heCh0aGlzLl9taW5EYXlDb3VudCwgTWF0aC5taW4odGhpcy5fbWF4
RGF5Q291bnQsIHJhd051bWJlcikpOwotICAgICAgICBpZiAodGhpcy5fZWRpdG9yLnZhbHVlICE9
IG51bWJlck9mRGF5cykKLSAgICAgICAgICAgIHRoaXMuX2VkaXRvci52YWx1ZSA9IG51bWJlck9m
RGF5czsKLSAgICAgICAgdGhpcy5fY2FsbE51bWJlck9mRGF5c0NhbGxiYWNrKGV2ZW50LCBudW1i
ZXJPZkRheXMpOwotICAgIH0KLQotICAgIF9jYWxsTnVtYmVyT2ZEYXlzQ2FsbGJhY2soZXZlbnQs
IG51bWJlck9mRGF5cykKLSAgICB7Ci0gICAgICAgIHZhciBzaG91bGRVcGRhdGVTdGF0ZSA9IGV2
ZW50LnR5cGUgPT0gJ2NoYW5nZSc7Ci0gICAgICAgIGlmICgodGhpcy5udW1iZXJPZkRheXMoKSAh
PSBudW1iZXJPZkRheXMgfHwgc2hvdWxkVXBkYXRlU3RhdGUpICYmIHRoaXMuX251bWJlck9mRGF5
c0NhbGxiYWNrKQotICAgICAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJhY2sobnVtYmVy
T2ZEYXlzLCBzaG91bGRVcGRhdGVTdGF0ZSk7CisgICAgICAgIHN1cGVyLnNldFN0YXJ0VGltZShN
YXRoLm1heCgxLCBzdGFydFRpbWUpKTsKICAgICB9CiAKICAgICBfdG9nZ2xlUGFuZVNlbGVjdG9y
KGV2ZW50KQpAQCAtMTQ1LDM0ICs2NywyNSBAQCBjbGFzcyBDaGFydHNUb29sYmFyIGV4dGVuZHMg
RG9tYWluQ29udHJvbFRvb2xiYXIgewogICAgICAgICAgICAgdGhpcy5fYWRkUGFuZUNhbGxiYWNr
KHBsYXRmb3JtLCBtZXRyaWMpOwogICAgIH0KIAotCiAgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgp
CiAgICAgewogICAgICAgICByZXR1cm4gYAotICAgICAgICAgICAgPG5hdiBjbGFzcz0iY2hhcnRz
LXRvb2xiYXIiPgorICAgICAgICAgICAgPG5hdj4KICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9
ImJ1dHRvbmVkLXRvb2xiYXIiPgogICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iIyIg
Y2xhc3M9InBhbmUtc2VsZWN0b3Itb3BlbmVyIj5BZGQgcGFuZTwvYT48L2xpPgogICAgICAgICAg
ICAgICAgIDwvdWw+Ci0gICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJidXR0b25lZC10b29sYmFy
Ij4KLSAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJzdGFydC10aW1lLXNsaWRlciI+Ci0g
ICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGlucHV0IGNsYXNzPSJzbGlkZXIiIHR5cGU9InJhbmdlIj4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImVkaXRvciIgdHlwZT0ibnVtYmVyIj4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPjxzcGFuIGNsYXNzPSJkYXkt
Y291bnQiIHRhYmluZGV4PSIwIj4/PC9zcGFuPiBkYXlzPC9zcGFuPgotICAgICAgICAgICAgICAg
ICAgICAgICAgPC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAg
ICAgICA8L3VsPgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmUtc2VsZWN0b3ItY29u
dGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgPHBhbmUtc2VsZWN0b3I+PC9wYW5lLXNlbGVj
dG9yPgogICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9uYXY+YDsKKyAgICAg
ICAgICAgICAgICAkeyBzdXBlci5odG1sVGVtcGxhdGUoKSB9CisgICAgICAgICAgICA8L25hdj4K
KyAgICAgICAgYDsKICAgICB9CiAKICAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIFRvb2xiYXIuY3NzVGVtcGxhdGUoKSArIGAKLQotICAgICAgICAgICAgLmNo
YXJ0cy10b29sYmFyID4gLmJ1dHRvbmVkLXRvb2xiYXI6Zmlyc3QtY2hpbGQgeworICAgICAgICBy
ZXR1cm4gc3VwZXIuY3NzVGVtcGxhdGUoKSArIGAKKyAgICAgICAgICAgIG5hdiA+IC5idXR0b25l
ZC10b29sYmFyOmZpcnN0LWNoaWxkIHsKICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDAu
NXJlbTsKICAgICAgICAgICAgIH0KIApAQCAtMTgwLDcgKzkzLDcgQEAgY2xhc3MgQ2hhcnRzVG9v
bGJhciBleHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsKICAgICAgICAgICAgICAgICBiYWNr
Z3JvdW5kOiByZ2JhKDIwNCwgMTUzLCA1MSwgMC4xKTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgLmNoYXJ0cy10b29sYmFyID4gLnBhbmUtc2VsZWN0b3ItY29udGFpbmVyIHsKKyAgICAg
ICAgICAgIG5hdiA+IC5wYW5lLXNlbGVjdG9yLWNvbnRhaW5lciB7CiAgICAgICAgICAgICAgICAg
cG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgICAgICAgIHJpZ2h0OiAxcmVtOwogICAgICAg
ICAgICAgICAgIG1hcmdpbjogMDsKQEAgLTE5MiwzOSArMTA1LDggQEAgY2xhc3MgQ2hhcnRzVG9v
bGJhciBleHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsKICAgICAgICAgICAgICAgICBiYWNr
Z3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgICAgICAgICAgICAgLXdlYmtp
dC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMC41cmVtKTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLmJ1dHRvbmVkLXRvb2xiYXIgLnN0YXJ0LXRpbWUtc2xpZGVyIHsKLSAgICAgICAgICAg
ICAgICBtYXJnaW4tbGVmdDogMnJlbTsKLSAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMWVt
OwotICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIgbGFiZWwgewotICAgICAgICAgICAgICAgIGRp
c3BsYXk6IGlubGluZS1ibG9jazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLnN0YXJ0
LXRpbWUtc2xpZGVyIC5zbGlkZXIgewotICAgICAgICAgICAgICAgIGhlaWdodDogMC44cmVtOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIgLmVkaXRvciB7
Ci0gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwotICAgICAgICAgICAgICAgIG9w
YWNpdHk6IDA7Ci0gICAgICAgICAgICAgICAgd2lkdGg6IDRyZW07Ci0gICAgICAgICAgICAgICAg
Zm9udC13ZWlnaHQ6IGluaGVyaXQ7Ci0gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07
Ci0gICAgICAgICAgICAgICAgaGVpZ2h0OiAwLjlyZW07Ci0gICAgICAgICAgICAgICAgb3V0bGlu
ZTogbm9uZTsKLSAgICAgICAgICAgICAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOwotICAgICAg
ICAgICAgICAgIHotaW5kZXg6IDU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC5zdGFy
dC10aW1lLXNsaWRlciAuZGF5LWNvdW50IHsKLSAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxp
bmUtYmxvY2s7Ci0gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgICAgICAg
ICAgICAgd2lkdGg6IDJyZW07Ci0gICAgICAgICAgICB9CiAgICAgICAgIGA7CiAgICAgfQotCiB9
CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgnY2hhcnRzLXRvb2xiYXInLCBDaGFydHNU
b29sYmFyKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
cGFnZXMvY29udGludW91cy1kb21haW4tdG9vbGJhci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY29udGludW91cy1kb21haW4tdG9vbGJhci5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43Mzc3ODFiNmUxNGI1ZmE4MjNlOWQ3YzNkYmY0YWU3YTg4YTgzNDE4Ci0tLSAvZGV2L251
bGwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jb250aW51
b3VzLWRvbWFpbi10b29sYmFyLmpzCkBAIC0wLDAgKzEsMTY0IEBACisKK2NsYXNzIENvbnRpbnVv
dXNEb21haW5Ub29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRvb2xiYXIgeworICAgIGNvbnN0
cnVjdG9yKG5hbWUsIGRlZmF1bHROdW1iZXJPZkRheXMpCisgICAgeworICAgICAgICBzdXBlcihu
YW1lLCBkZWZhdWx0TnVtYmVyT2ZEYXlzKTsKKworICAgICAgICB0aGlzLl9kZWZhdWx0TWluRGF5
Q291bnQgPSAxOworICAgICAgICB0aGlzLl9kZWZhdWx0TWF4RGF5Q291bnQgPSAzNjY7CisgICAg
ICAgIHRoaXMuX2RlZmF1bHROdW1iZXJPZkRheXMgPSBkZWZhdWx0TnVtYmVyT2ZEYXlzOworICAg
ICAgICB0aGlzLl9zZXRBbGxvd2VkRGF5Q291bnRSYW5nZSgpOworCisgICAgICAgIHRoaXMuX251
bWJlck9mRGF5c0NhbGxiYWNrID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2xpZGVyID0gdGhpcy5j
b250ZW50KCdzbGlkZXInKTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIo
J2NoYW5nZScsIHRoaXMuX3NsaWRlclZhbHVlTWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlzKSk7Cisg
ICAgICAgIHRoaXMuX3NsaWRlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9z
bGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMuX2lu
VGV4dE1vZGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZWRpdG9yID0gdGhpcy5jb250ZW50KCdl
ZGl0b3InKTsKKyAgICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywg
dGhpcy5fZW50ZXJUZXh0TW9kZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fZWRpdG9yLmFk
ZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLl9leGl0VGV4dE1vZGUuYmluZCh0aGlzKSk7Cisg
ICAgICAgIHRoaXMuX2VkaXRvci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX2VkaXRv
clZhbHVlTWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2VkaXRvci5h
ZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9lZGl0b3JWYWx1ZU1heUhhdmVDaGFuZ2Vk
LmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMuX2RheUNvdW50U3BhbiA9IHRoaXMuY29udGVu
dCgnZGF5LWNvdW50Jyk7CisgICAgfQorCisgICAgcmVuZGVyKCkKKyAgICB7CisgICAgICAgIHN1
cGVyLnJlbmRlcigpOworICAgICAgICB0aGlzLl9kYXlDb3VudFNwYW4udGV4dENvbnRlbnQgPSB0
aGlzLl9udW1iZXJPZkRheXM7CisgICAgICAgIHRoaXMuX3NldElucHV0RWxlbWVudFZhbHVlKHRo
aXMuX251bWJlck9mRGF5cyk7CisgICAgfQorCisgICAgc2V0TnVtYmVyT2ZEYXlzQ2FsbGJhY2so
Y2FsbGJhY2spCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCghY2FsbGJhY2sgfHwgY2Fs
bGJhY2sgaW5zdGFuY2VvZiBGdW5jdGlvbik7CisgICAgICAgIHRoaXMuX251bWJlck9mRGF5c0Nh
bGxiYWNrID0gY2FsbGJhY2s7CisgICAgfQorCisgICAgc2V0U3RhcnRUaW1lKHN0YXJ0VGltZT10
aGlzLl9kZWZhdWx0TnVtYmVyT2ZEYXlzKQorICAgIHsKKyAgICAgICAgdGhpcy5fZXhpdFRleHRN
b2RlKCk7CisgICAgICAgIGlmIChzdGFydFRpbWUpCisgICAgICAgICAgICBzdXBlci5zZXRTdGFy
dFRpbWUoc3RhcnRUaW1lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3VwZXIuc2V0TnVt
YmVyT2ZEYXlzKHRoaXMuX2RlZmF1bHROdW1iZXJPZkRheXMpOworICAgIH0KKworICAgIF9zZXRB
bGxvd2VkRGF5Q291bnRSYW5nZShtaW5EYXlDb3VudD10aGlzLl9kZWZhdWx0TWluRGF5Q291bnQs
IG1heERheUNvdW50PXRoaXMuX2RlZmF1bHRNYXhEYXlDb3VudCkKKyAgICB7CisgICAgICAgIHRo
aXMuX21pbkRheUNvdW50ID0gbWluRGF5Q291bnQ7CisgICAgICAgIHRoaXMuX21heERheUNvdW50
ID0gbWF4RGF5Q291bnQ7CisgICAgfQorCisgICAgX3NldElucHV0RWxlbWVudFZhbHVlKHZhbHVl
KQorICAgIHsKKyAgICAgICAgdGhpcy5fc2xpZGVyLnZhbHVlID0gTWF0aC5wb3codmFsdWUsIDEv
Myk7CisgICAgICAgIHRoaXMuX3NsaWRlci5taW4gPSBNYXRoLnBvdyh0aGlzLl9taW5EYXlDb3Vu
dCwgMS8zKTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLm1heCA9IE1hdGgucG93KHRoaXMuX21heERh
eUNvdW50LCAxLzMpOworICAgICAgICB0aGlzLl9zbGlkZXIuc3RlcCA9ICdhbnknOworICAgICAg
ICB0aGlzLl9lZGl0b3IudmFsdWUgPSB2YWx1ZTsKKyAgICB9CisKKyAgICBfZW50ZXJUZXh0TW9k
ZShldmVudCkKKyAgICB7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAg
IHRoaXMuX2luVGV4dE1vZGUgPSB0cnVlOworICAgICAgICB0aGlzLl9lZGl0b3Iuc3R5bGUub3Bh
Y2l0eSA9IDE7CisgICAgICAgIHRoaXMuX2VkaXRvci5zdHlsZS5tYXJnaW5MZWZ0ID0gJy0yLjVy
ZW0nOworICAgICAgICB0aGlzLl9kYXlDb3VudFNwYW4uc3R5bGUub3BhY2l0eSA9IDA7CisgICAg
ICAgIHRoaXMuX3NsaWRlci5zdHlsZS5vcGFjaXR5ID0gMDsKKyAgICB9CisKKyAgICBfZXhpdFRl
eHRNb2RlKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50KQorICAgICAgICAgICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgdGhpcy5faW5UZXh0TW9kZSA9IGZhbHNlOwor
ICAgICAgICB0aGlzLl9lZGl0b3Iuc3R5bGUub3BhY2l0eSA9IDA7CisgICAgICAgIHRoaXMuX2Vk
aXRvci5zdHlsZS5tYXJnaW5MZWZ0ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZGF5Q291bnRTcGFu
LnN0eWxlLm9wYWNpdHkgPSAxOworICAgICAgICB0aGlzLl9zbGlkZXIuc3R5bGUub3BhY2l0eSA9
IDE7CisgICAgfQorCisgICAgX3NsaWRlclZhbHVlTWF5SGF2ZUNoYW5nZWQoZXZlbnQpCisgICAg
eworICAgICAgICBjb25zdCBudW1iZXJPZkRheXMgPSBNYXRoLnJvdW5kKE1hdGgucG93KHBhcnNl
RmxvYXQodGhpcy5fc2xpZGVyLnZhbHVlKSwgMykpOworICAgICAgICB0aGlzLl9jYWxsTnVtYmVy
T2ZEYXlzQ2FsbGJhY2soZXZlbnQsIG51bWJlck9mRGF5cyk7CisgICAgfQorCisgICAgX2VkaXRv
clZhbHVlTWF5SGF2ZUNoYW5nZWQoZXZlbnQpCisgICAgeworICAgICAgICBjb25zdCByYXdOdW1i
ZXIgPSBNYXRoLnJvdW5kKHBhcnNlRmxvYXQodGhpcy5fZWRpdG9yLnZhbHVlKSk7CisgICAgICAg
IGNvbnN0IG51bWJlck9mRGF5cyA9IE1hdGgubWF4KHRoaXMuX21pbkRheUNvdW50LCBNYXRoLm1p
bih0aGlzLl9tYXhEYXlDb3VudCwgcmF3TnVtYmVyKSk7CisgICAgICAgIGlmICh0aGlzLl9lZGl0
b3IudmFsdWUgIT0gbnVtYmVyT2ZEYXlzKQorICAgICAgICAgICAgdGhpcy5fZWRpdG9yLnZhbHVl
ID0gbnVtYmVyT2ZEYXlzOworICAgICAgICB0aGlzLl9jYWxsTnVtYmVyT2ZEYXlzQ2FsbGJhY2so
ZXZlbnQsIG51bWJlck9mRGF5cyk7CisgICAgfQorCisgICAgX2NhbGxOdW1iZXJPZkRheXNDYWxs
YmFjayhldmVudCwgbnVtYmVyT2ZEYXlzKQorICAgIHsKKyAgICAgICAgY29uc3Qgc2hvdWxkVXBk
YXRlU3RhdGUgPSBldmVudC50eXBlID09ICdjaGFuZ2UnOworICAgICAgICBpZiAoKHRoaXMubnVt
YmVyT2ZEYXlzKCkgIT0gbnVtYmVyT2ZEYXlzIHx8IHNob3VsZFVwZGF0ZVN0YXRlKSAmJiB0aGlz
Ll9udW1iZXJPZkRheXNDYWxsYmFjaykKKyAgICAgICAgICAgIHRoaXMuX251bWJlck9mRGF5c0Nh
bGxiYWNrKG51bWJlck9mRGF5cywgc2hvdWxkVXBkYXRlU3RhdGUpOworICAgIH0KKworICAgIHN0
YXRpYyBkYXlzQ291bnRMYWJlbFRleHQoKSB7IHJldHVybiBgZGF5c2A7IH0KKworICAgIHN0YXRp
YyBodG1sVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgICAgIDx1
bCBjbGFzcz0iYnV0dG9uZWQtdG9vbGJhciI+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJz
dGFydC10aW1lLXNsaWRlciI+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0ic2xpZGVyIiB0eXBlPSJyYW5nZSI+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImVkaXRvciIgdHlwZT0ibnVtYmVyIj4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPHNwYW4gaWQ9ImRheS1jb3VudCIgdGFiaW5kZXg9IjAiPjwvc3Bhbj4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAkeyB0aGlzLmRheXNDb3VudExhYmVsVGV4dCgpIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9s
YWJlbD4KKyAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPC91bD5gOworICAgIH0K
KworICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gVG9vbGJh
ci5jc3NUZW1wbGF0ZSgpICsgYAorICAgICAgICAgICAgLmJ1dHRvbmVkLXRvb2xiYXIgLnN0YXJ0
LXRpbWUtc2xpZGVyIHsKKyAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMnJlbTsKKyAgICAg
ICAgICAgICAgICBsaW5lLWhlaWdodDogMWVtOworICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTog
MC45cmVtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIg
LmxhYmVsIHsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICNzbGlkZXIgeworICAgICAgICAgICAgICAgIGhlaWdodDog
MC44cmVtOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjZWRpdG9yIHsKKyAgICAgICAg
ICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICAgICAgICAgb3BhY2l0eTogMDsK
KyAgICAgICAgICAgICAgICB3aWR0aDogNHJlbTsKKyAgICAgICAgICAgICAgICBmb250LXdlaWdo
dDogaW5oZXJpdDsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTsKKyAgICAgICAg
ICAgICAgICBoZWlnaHQ6IDAuOXJlbTsKKyAgICAgICAgICAgICAgICBvdXRsaW5lOiBub25lOwor
ICAgICAgICAgICAgICAgIGJvcmRlcjogc29saWQgMXB4ICNjY2M7CisgICAgICAgICAgICAgICAg
ei1pbmRleDogNTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgI2RheS1jb3VudCB7Cisg
ICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgICAgICAgICAgIHRl
eHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgICAgIHdpZHRoOiAycmVtOworICAgICAgICAg
ICAgfQorICAgICAgICBgOworICAgIH0KK30KKworQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50
KCdjb250aW51b3VzLWRvbWFpbi10b29sYmFyJywgQ29udGludW91c0RvbWFpblRvb2xiYXIpOwpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9kb21h
aW4tY29udHJvbC10b29sYmFyLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9wYWdlcy9kb21haW4tY29udHJvbC10b29sYmFyLmpzCmluZGV4IGM2YmY2MTRlMzYwODJjOTg5
NGQ0YWIzYjkzOWQzZjYwNzk3NTVkZTIuLjJkOTlhZTk4YzQ1NTBmY2MwNzNkOWM3NGFmNGU4NTA5
MGRiNTVhYWUgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
cGFnZXMvZG9tYWluLWNvbnRyb2wtdG9vbGJhci5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL3BhZ2VzL2RvbWFpbi1jb250cm9sLXRvb2xiYXIuanMKQEAgLTE3LDcg
KzE3LDcgQEAgY2xhc3MgRG9tYWluQ29udHJvbFRvb2xiYXIgZXh0ZW5kcyBUb29sYmFyIHsKIAog
ICAgIHNldFN0YXJ0VGltZShzdGFydFRpbWUpCiAgICAgewotICAgICAgICB0aGlzLnNldE51bWJl
ck9mRGF5cyhNYXRoLm1heCgxLCBNYXRoLnJvdW5kKCh0aGlzLl9wcmVzZW50IC0gc3RhcnRUaW1l
KSAvIHRoaXMuX21pbGxpc2Vjb25kc1BlckRheSkpKTsKKyAgICAgICAgdGhpcy5zZXROdW1iZXJP
ZkRheXMoTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgodGhpcy5fcHJlc2VudCAtIHN0YXJ0VGltZSkg
LyB0aGlzLl9taWxsaXNlY29uZHNQZXJEYXkpKSk7CiAgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9
IHN0YXJ0VGltZTsKICAgICB9CiAKQEAgLTI4LDcgKzI4LDcgQEAgY2xhc3MgRG9tYWluQ29udHJv
bFRvb2xiYXIgZXh0ZW5kcyBUb29sYmFyIHsKIAogICAgIHNldE51bWJlck9mRGF5cyhudW1iZXJP
ZkRheXMsIHNldEJ5VXNlcikKICAgICB7Ci0gICAgICAgIGlmICghbnVtYmVyT2ZEYXlzKQorICAg
ICAgICBpZiAodHlwZW9mKG51bWJlck9mRGF5cykgIT0gJ251bWJlcicpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gbnVsbDsKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvc3VtbWFyeS1wYWdlLmpzIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanMK
aW5kZXggZTQ2MTliMTk3NDg3Y2U5NzJjMThjODBhZmU4OWJmZGIyY2VhODg3Zi4uOWZjYzJlMmMw
Mjk3NTNlNDZmMDZmMmZhZmQ2YTlhZGVlYjhmOGIwMiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanMKKysrIGIvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanMKQEAgLTEs
OSArMSw5IEBACiAKIGNsYXNzIFN1bW1hcnlQYWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFkaW5nIHsK
IAotICAgIGNvbnN0cnVjdG9yKHN1bW1hcnlTZXR0aW5ncykKKyAgICBjb25zdHJ1Y3RvcihzdW1t
YXJ5U2V0dGluZ3MsIHRvb2xiYXIpCiAgICAgewotICAgICAgICBzdXBlcihzdW1tYXJ5U2V0dGlu
Z3MubmFtZSwgbnVsbCk7CisgICAgICAgIHN1cGVyKHN1bW1hcnlTZXR0aW5ncy5uYW1lLCB0b29s
YmFyKTsKIAogICAgICAgICB0aGlzLl9yb3V0ZSA9IHN1bW1hcnlTZXR0aW5ncy5yb3V0ZTsKICAg
ICAgICAgdGhpcy5fdGFibGUgPSB7CkBAIC0zMiwxMyArMzIsNDcgQEAgY2xhc3MgU3VtbWFyeVBh
Z2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogICAgIG9wZW4oc3RhdGUpCiAgICAgewogICAg
ICAgICBzdXBlci5vcGVuKHN0YXRlKTsKKyAgICAgICAgdmFyIGV4YWN0VGltZSA9IG51bGw7Cisg
ICAgICAgIGlmIChzdGF0ZS5zaW5jZSkKKyAgICAgICAgICAgIGV4YWN0VGltZSA9IHBhcnNlRmxv
YXQoc3RhdGUuc2luY2UpOworCisgICAgICAgIGlmIChleGFjdFRpbWUgIT09IG51bGwpCisgICAg
ICAgICAgICB0aGlzLnRvb2xiYXIoKS5zZXRTdGFydFRpbWUoZXhhY3RUaW1lKTsKKworICAgICAg
ICB0aGlzLnRvb2xiYXIoKS5zZXROdW1iZXJPZkRheXNDYWxsYmFjayh0aGlzLnNldE51bWJlck9m
RGF5c0Zyb21Ub29sYmFyLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9mZXRjaEZvck51bWJl
ck9mRGF5c0Fnbyh0aGlzLnRvb2xiYXIoKS5udW1iZXJPZkRheXMoKSwgZXhhY3RUaW1lKTsKKyAg
ICB9CisKKyAgICBfZmV0Y2hGb3JOdW1iZXJPZkRheXNBZ28oZGF5cywgZXhhY3RUaW1lPW51bGwp
CisgICAgeworICAgICAgICBjb25zdCBjdXJyZW50ID0gRGF0ZS5ub3coKTsKKyAgICAgICAgY29u
c3Qgb25lRGF5ID0gMjQgKiAzNjAwICogMTAwMDsKKyAgICAgICAgdmFyIHRpbWVSYW5nZSA9IFtj
dXJyZW50IC0gb25lRGF5IC0gKGRheXMgKiBvbmVEYXkpLCBjdXJyZW50IC0gKGRheXMgKiBvbmVE
YXkpXTsKKyAgICAgICAgaWYgKGV4YWN0VGltZSAhPT0gbnVsbCkKKyAgICAgICAgICAgIHRpbWVS
YW5nZSA9IFtleGFjdFRpbWUgLSBvbmVEYXksIGV4YWN0VGltZV07CiAKLSAgICAgICAgdmFyIGN1
cnJlbnQgPSBEYXRlLm5vdygpOwotICAgICAgICB2YXIgdGltZVJhbmdlID0gW2N1cnJlbnQgLSAy
NCAqIDM2MDAgKiAxMDAwLCBjdXJyZW50XTsKICAgICAgICAgZm9yICh2YXIgZ3JvdXAgb2YgdGhp
cy5fY29uZmlnR3JvdXBzKQogICAgICAgICAgICAgZ3JvdXAuZmV0Y2hBbmRDb21wdXRlU3VtbWFy
eSh0aW1lUmFuZ2UpLnRoZW4oKCkgPT4geyB0aGlzLmVucXVldWVUb1JlbmRlcigpOyB9KTsKICAg
ICB9CiAKKyAgICBzZXJpYWxpemVTdGF0ZSgpCisgICAgeworICAgICAgICBpZiAodGhpcy50b29s
YmFyKCkuX2RlZmF1bHROdW1iZXJPZkRheXMgPT0gdGhpcy50b29sYmFyKCkuX251bWJlck9mRGF5
cykgeworICAgICAgICAgICAgcmV0dXJuIHt9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHtz
aW5jZTogdGhpcy50b29sYmFyKCkuc3RhcnRUaW1lKCl9OworICAgIH0KKworICAgIHNldE51bWJl
ck9mRGF5c0Zyb21Ub29sYmFyKG51bWJlck9mRGF5cywgc2hvdWxkVXBkYXRlU3RhdGUpCisgICAg
eworICAgICAgICBjb25zdCBvbmVEYXkgPSAyNCAqIDM2MDAgKiAxMDAwOworICAgICAgICB2YXIg
c3RhcnRUaW1lID0gRGF0ZS5ub3coKSAtIChudW1iZXJPZkRheXMgKiBvbmVEYXkpOworICAgICAg
ICB0aGlzLnRvb2xiYXIoKS5zZXRTdGFydFRpbWUoc3RhcnRUaW1lKTsKKyAgICAgICAgdGhpcy5f
ZmV0Y2hGb3JOdW1iZXJPZkRheXNBZ28odGhpcy50b29sYmFyKCkubnVtYmVyT2ZEYXlzKCkpOwor
ICAgICAgICB0aGlzLnRvb2xiYXIoKS5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgdGhpcy5z
Y2hlZHVsZVVybFN0YXRlVXBkYXRlKCk7CisgICAgfQorCiAgICAgcmVuZGVyKCkKICAgICB7CiAg
ICAgICAgIEluc3RydW1lbnRhdGlvbi5zdGFydE1lYXN1cmluZ1RpbWUoJ1N1bW1hcnlQYWdlJywg
J3JlbmRlcicpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9wYWdlcy9zdW1tYXJ5LXRvb2xiYXIuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL3BhZ2VzL3N1bW1hcnktdG9vbGJhci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTk4ZWNkYmM3ZWUy
MzgyNDJkNjIyMjFiNzZmYjhjMzBmZDEwNWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXRvb2xiYXIuanMKQEAgLTAs
MCArMSw1MSBAQAorY2xhc3MgU3VtbWFyeVRvb2xiYXIgZXh0ZW5kcyBDb250aW51b3VzRG9tYWlu
VG9vbGJhciB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoJ3N1bW1h
cnktdG9vbGJhcicsIDApOworCisgICAgICAgIHRoaXMuX3NldEFsbG93ZWREYXlDb3VudFJhbmdl
KHttaW5EYXlDb3VudDogMH0pOworCisgICAgICAgIHRoaXMuX2RheUNvdW50RGVzY3JpcHRpb24g
PSB0aGlzLmNvbnRlbnQoJ2RheS1jb3VudC1kZXNjcmlwdGlvbicpOworICAgIH0KKworICAgIF9h
ZGRTbGlkZXJUZXh0Rm9ybWF0dGluZ0Zvclplcm9EYXlzKCkgeworICAgICAgICB0aGlzLl9kYXlD
b3VudFNwYW4udGV4dENvbnRlbnQgPSAnJzsKKyAgICAgICAgdGhpcy5fZGF5Q291bnRTcGFuLnN0
eWxlLndpZHRoID0gJzEuMjVyZW0nOworICAgICAgICB0aGlzLl9kYXlDb3VudERlc2NyaXB0aW9u
LnN0eWxlLndpZHRoID0gJzQuNXJlbSc7CisgICAgICAgIHRoaXMuX2RheUNvdW50RGVzY3JpcHRp
b24udGV4dENvbnRlbnQgPSAnQ3VycmVudCc7CisgICAgfQorCisgICAgX3JlbW92ZVNsaWRlclRl
eHRGb3JtYXR0aW5nRm9yWmVyb0RheXMoKSB7CisgICAgICAgIHRoaXMuX2RheUNvdW50U3Bhbi5z
dHlsZS53aWR0aCA9ICcycmVtJzsKKyAgICAgICAgdGhpcy5fZGF5Q291bnREZXNjcmlwdGlvbi5z
dHlsZS53aWR0aCA9ICczLjc1cmVtJzsKKyAgICAgICAgdGhpcy5fZGF5Q291bnREZXNjcmlwdGlv
bi50ZXh0Q29udGVudCA9ICdkYXlzIGFnbyc7CisgICAgfQorCisgICAgcmVuZGVyKCkKKyAgICB7
CisgICAgICAgIHN1cGVyLnJlbmRlcigpOworICAgICAgICBpZiAoIXRoaXMuX251bWJlck9mRGF5
cyAmJiAhdGhpcy5faW5UZXh0TW9kZSkKKyAgICAgICAgICAgIHRoaXMuX2FkZFNsaWRlclRleHRG
b3JtYXR0aW5nRm9yWmVyb0RheXMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5f
cmVtb3ZlU2xpZGVyVGV4dEZvcm1hdHRpbmdGb3JaZXJvRGF5cygpOworICAgIH0KKworICAgIF9l
bnRlclRleHRNb2RlKGV2ZW50KQorICAgIHsKKyAgICAgICAgc3VwZXIuX2VudGVyVGV4dE1vZGUo
ZXZlbnQpOworICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgIH0KKworICAgIF9l
eGl0VGV4dE1vZGUoZXZlbnQpCisgICAgeworICAgICAgICBzdXBlci5fZXhpdFRleHRNb2RlKGV2
ZW50KTsKKyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgZGF5c0NvdW50TGFiZWxUZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBgPGxhYmVsIGlk
PSJkYXktY291bnQtZGVzY3JpcHRpb24iIGNsYXNzPSJsYWJlbCI+PC9sYWJlbD5gOworICAgIH0K
K30KKworQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdzdW1tYXJ5LXRvb2xiYXInLCBTdW1t
YXJ5VG9vbGJhcik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393896</attachid>
            <date>2020-03-18 13:42:18 -0700</date>
            <delta_ts>2020-03-20 14:25:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199051-20200318134217.patch</filename>
            <type>text/plain</type>
            <size>27013</size>
            <attacher name="Dean Johnson">dean_johnson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2OTQxCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCA5ODYyZDRkZDNiN2E3NjJkM2NlZDc0ODhjZjJmMWIxZWYyMTg1Njk1Li40YTg3N2QyMGQ3
YzEzOGViMmZiNTM1NzkwZjBkYjhiMzE2MDViZmY5IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3NCBAQAorMjAxOS0wNi0yNSAgRGVhbiBKb2huc29uICA8ZGVhbl9q
b2huc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbcGVyZi53ZWJraXQub3JnXSBBZGQgJ2JhY2sg
aW4gdGltZScgZmVhdHVyZSBmb3IgU3VtbWFyeSBwYWdlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MDUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgIkJhY2sgaW4gdGltZSIgZmVh
dHVyZSBmb3IgYWxsIFN1bW1hcnkgcGFnZXMgb24gdGhlIFdlYktpdCBQZXJmIGRhc2hib2FyZC4g
VGhlcmUgaXMgYSBuZXcKKyAgICAgICAgc2xpZGVyIGluIHRoZSB0b3AgcmlnaHQgY29ybmVyIHdo
aWNoIGNhbiBiZSBkcmFnZ2VkIHRvIHZpZXcgdGhlIHN1bW1hcnkgcGFnZSAnTiBkYXlzIGFnbycu
IFRoZSBkZWZhdWx0CisgICAgICAgIHZpZXcgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgorCisgICAg
ICAgICogcHVibGljL3YzL2luZGV4Lmh0bWw6IEFkZCBuZXcgcmVzb3VyY2VzOiBjb250aW51b3Vz
LWRvbWFpbi10b29sYmFyLmpzLCBzdW1tYXJ5LXRvb2xiYXIuanMKKyAgICAgICAgKiBwdWJsaWMv
djMvbWFpbi5qczogQWRkIG5ldyBzdW1tYXJ5VG9vbGJhciwgYW5kIGluaXRpYWxpemUgc3VtbWFy
eSBwYWdlcyB3aXRoIGl0LgorICAgICAgICAobWFpbik6CisgICAgICAgICogcHVibGljL3YzL3Bh
Z2VzL2NoYXJ0cy10b29sYmFyLmpzOiBBYnN0cmFjdCB0aGUgc2xpZGVyIHRvb2xiYXIgaW50byBh
IG5ldyBjbGFzcywgYW5kIGluaGVyaXQgZnJvbSBpdC4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIp
OiBOb3csIENoYXJ0c1Rvb2xiYXIgaXMgYSBtb3N0bHkgdGhpbiB3cmFwcGVyIHJvdW5kIFNsaWRl
clRvb2xiYXIgYW5kIGltcGxlbWVudHMgdGhlCisgICAgICAgICdBZGQgUGFuZScgYnV0dG9uICsg
ZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLnJlbmRlcik6
CisgICAgICAgIChDaGFydHNUb29sYmFyLnByb3RvdHlwZS5zZXRTdGFydFRpbWUpOiBFbnN1cmUg
c3RhcnRUaW1lIGlzIG5ldmVyIGxlc3MgdGhhbiAxLgorICAgICAgICAoQ2hhcnRzVG9vbGJhci5o
dG1sVGVtcGxhdGUpOiBNb3ZlZCAnQWRkIFBhbmUnIGJ1dHRvbnMgZnJvbSBDb250aW51b3VzRG9t
YWluVG9vbGJhci4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIuY3NzVGVtcGxhdGUpOiBNb3ZlZCAn
QWRkIFBhbmUnIHN0eWxpbmcgZnJvbSBDb250aW51b3VzRG9tYWluVG9vbGJhci4KKyAgICAgICAg
KENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLnNldE51bWJlck9mRGF5c0NhbGxiYWNrKTogTW92ZWQg
dG8gQ29udGludW91c0RvbWFpblRvb2xiYXIuCisgICAgICAgIChDaGFydHNUb29sYmFyLnByb3Rv
dHlwZS5fc2V0SW5wdXRFbGVtZW50VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKENoYXJ0c1Rvb2xi
YXIucHJvdG90eXBlLl9lbnRlclRleHRNb2RlKTogRGl0dG8uCisgICAgICAgIChDaGFydHNUb29s
YmFyLnByb3RvdHlwZS5fZXhpdFRleHRNb2RlKTogRGl0dG8uCisgICAgICAgIChDaGFydHNUb29s
YmFyLnByb3RvdHlwZS5fc2xpZGVyVmFsdWVNYXlIYXZlQ2hhbmdlZCk6IERpdHRvLgorICAgICAg
ICAoQ2hhcnRzVG9vbGJhci5wcm90b3R5cGUuX2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQpOiBE
aXR0by4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLl9jYWxsTnVtYmVyT2ZEYXlz
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvY29udGludW91cy1k
b21haW4tdG9vbGJhci5qczogQ29waWVkIGluaXRpYWxseSBmcm9tCisgICAgICAgIFdlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnRzLXRvb2xiYXIuanMuCisgICAg
ICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhcik6IE5ldy4gQmFzZWQgb24gQ2hhcnRzVG9vbGJh
ciBhbmQgY29udGFpbnMgcHJpbWFyeSBsb2dpYyBmb3IKKyAgICAgICAgYSAnc2xpZGVyJyB0aGF0
IGFkanVzdHMgdGltZS4gVXNlZCBieSBib3RoIENoYXJ0c1Rvb2xiYXIgYW5kIFN1bW1hcnlUb29s
YmFyLiBDb25zdHJ1Y3RvciBhZGRzCisgICAgICAgIGEgdGhpcy5faW5UZXh0TW9kZSA9IGZhbHNl
IGRlZmF1bHQsIHRvIGZpZ3VyZSBvdXQgaWYgdGV4dCBtb2RlIGlzIGN1cnJlbnRseSBpbiB1c2Ug
aW4gU3VtbWFyeVRvb2xiYXIuCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90
b3R5cGUucmVuZGVyKTogTW92ZWQgZnJvbSBDaGFydHNUb29sYmFyLgorICAgICAgICAoQ29udGlu
dW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBlLnNldE51bWJlck9mRGF5c0NhbGxiYWNrKTogRGl0
dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90b3R5cGUuc2V0U3RhcnRU
aW1lKTogRGl0dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90b3R5cGUu
X3NldEFsbG93ZWREYXlDb3VudFJhbmdlKTogU2V0cyByYW5nZSBmb3IgZGF5IGNvdW50LgorICAg
ICAgICAoQ29udGludW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBlLl9zZXRJbnB1dEVsZW1lbnRW
YWx1ZSk6IERpdHRvLgorICAgICAgICAoQ29udGludW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBl
Ll9lbnRlclRleHRNb2RlKTogRGl0dG8sIGJ1dCBleHBhbmRlZCB0byB1cGRhdGUgdGhpcy5faW5U
ZXh0TW9kZS4KKyAgICAgICAgKENvbnRpbnVvdXNEb21haW5Ub29sYmFyLnByb3RvdHlwZS5fZXhp
dFRleHRNb2RlKTogRGl0dG8gdG8gX2VudGVyVGV4dE1vZGUuCisgICAgICAgIChDb250aW51b3Vz
RG9tYWluVG9vbGJhci5wcm90b3R5cGUuX3NsaWRlclZhbHVlTWF5SGF2ZUNoYW5nZWQpOiBNb3Zl
ZCBmcm9tIENoYXJ0c1Rvb2xiYXIuCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5w
cm90b3R5cGUuX2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQpOiBEaXR0by4KKyAgICAgICAgKENv
bnRpbnVvdXNEb21haW5Ub29sYmFyLnByb3RvdHlwZS5fY2FsbE51bWJlck9mRGF5c0NhbGxiYWNr
KTogRGl0dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5kYXlzQ291bnRMYWJl
bFRleHQpOiBBZGRlZCBzbyBjb250ZW50IG9mIGRheXNDb3VudExhYmVsIGNhbiBiZSBtb2RpZmll
ZC4KKyAgICAgICAgKENvbnRpbnVvdXNEb21haW5Ub29sYmFyLmh0bWxUZW1wbGF0ZSk6IE1vdmVk
IGZyb20gQ2hhcnRzVG9vbGJhciwgYnV0IHJlbW92ZXMgJ0FkZCBQYW5lJyBidXR0b24gYW5kCisg
ICAgICAgIGFsbG93cyBjdXN0b21pemF0aW9uIG9mIGRheXNDb3VudCBsYWJlbCB0ZXh0LgorICAg
ICAgICAoQ29udGludW91c0RvbWFpblRvb2xiYXIuY3NzVGVtcGxhdGUpOiBNb3ZlZCBmcm9tIENo
YXJ0c1Rvb2xiYXIsIGV4Y2VwdCBmb3IgJ0FkZCBQYW5lJyBzdHlsaW5nLgorICAgICAgICAqIHB1
YmxpYy92My9wYWdlcy9kb21haW4tY29udHJvbC10b29sYmFyLmpzOgorICAgICAgICAoRG9tYWlu
Q29udHJvbFRvb2xiYXIucHJvdG90eXBlLnNldFN0YXJ0VGltZSk6IEFkanVzdCBsb2dpYyB0byBh
Y2NvdW50IGZvciAwIGRheSB2YWx1ZS4KKyAgICAgICAgKERvbWFpbkNvbnRyb2xUb29sYmFyLnBy
b3RvdHlwZS5zZXROdW1iZXJPZkRheXMpOiBEaXR0by4KKyAgICAgICAgKERvbWFpbkNvbnRyb2xU
b29sYmFyKToKKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvc3VtbWFyeS1wYWdlLmpzOgorICAg
ICAgICAoU3VtbWFyeVBhZ2UpOiBBZGQgYSBjb250cnVjdG9yIGFyZ3VtZW50IGZvciBhIHRvb2xi
YXIuCisgICAgICAgIChTdW1tYXJ5UGFnZS5wcm90b3R5cGUub3Blbik6IFNwbGl0IHByaW1hcnkg
bG9naWMgaW50byB1cGRhdGVBbmRSZW5kZXJGb3JSYW5nZS4KKyAgICAgICAgKFN1bW1hcnlQYWdl
LnByb3RvdHlwZS51cGRhdGVBbmRSZW5kZXJGb3JSYW5nZSk6IE5ldy4gVXNlZCB0byBjaGFuZ2Ug
IyBkYXlzIGFnbyBhdCB3aGljaCBzdW1tYXJ5CisgICAgICAgIGNhbGN1bGF0aW9ucyB3ZXJlIGFw
cGxpZWQuCisgICAgICAgIChTdW1tYXJ5UGFnZS5wcm90b3R5cGUuc2VyaWFsaXplU3RhdGUpOiBO
ZXcuIFNlcmlhbGl6ZSB0b29sYmFyIHN0YXRlIHNvIGxpbmtzIGNhbiBiZSBjcmVhdGVkIGFuZCBz
aGFyZWQgd2l0aAorICAgICAgICBzaW5jZT08ZXBvY2g+LgorICAgICAgICAoU3VtbWFyeVBhZ2Uu
cHJvdG90eXBlLnNldE51bWJlck9mRGF5c0Zyb21Ub29sYmFyKTogQ2FsbGJhY2sgZm9yIHdoZW4g
c2xpZGVyIG9yIHRleHRNb2RlICdkYXlzJyB2YWx1ZQorICAgICAgICBjaGFuZ2VzLgorICAgICAg
ICAqIHB1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXRvb2xiYXIuanM6IE5ldy4gQWRkcyBhIHNsaWRl
ciBmb3IgdGhlIHN1bW1hcnkgcGFnZSB0byByZS1ldmFsdWF0ZSBhdCBzb21lCisgICAgICAgICMg
b2YgZGF5cyBhZ28uCisgICAgICAgIChTdW1tYXJ5VG9vbGJhcik6IE5ldy4KKyAgICAgICAgKFN1
bW1hcnlUb29sYmFyLnByb3RvdHlwZS5fYWRkU2xpZGVyVGV4dEZvcm1hdHRpbmdGb3JaZXJvRGF5
cyk6IENoYW5nZXMgc3R5bGluZyB3aGVuIGRheSBjb3VudCBnb2VzIHRvCisgICAgICAgICcwJy4K
KyAgICAgICAgKFN1bW1hcnlUb29sYmFyLnByb3RvdHlwZS5fcmVtb3ZlU2xpZGVyVGV4dEZvcm1h
dHRpbmdGb3JaZXJvRGF5cyk6IENoYW5nZXMgc3R5bGluZyB3aGVuIGRheSBjb3VudCBnb2VzCisg
ICAgICAgIGFib3ZlIDAsIG9yIHdoZW4gaW4gdGV4dE1vZGUuCisgICAgICAgIChTdW1tYXJ5VG9v
bGJhci5wcm90b3R5cGUucmVuZGVyKTogRHluYW1pY2FsbHkgYWRqdXN0IHN0eWxpbmcgYmFzZWQg
b24gdGhpcy5fbnVtYmVyT2ZEYXlzIHZhbHVlLgorICAgICAgICAoU3VtbWFyeVRvb2xiYXIucHJv
dG90eXBlLl9lbnRlclRleHRNb2RlKTogVXNlIHRoaXMuZW5xdWV1ZVRvUmVuZGVyIHRvIHJlbmRl
ciBhcy1uZWVkZWQuCisgICAgICAgIChTdW1tYXJ5VG9vbGJhci5wcm90b3R5cGUuX2V4aXRUZXh0
TW9kZSk6IERpdHRvLgorCiAyMDE5LTEyLTE1ICBaaGlmZWkgRmFuZyAgPHpoaWZlaV9mYW5nQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgcG93ZXIgbWV0cmljIHRvIHBlcmYgZGFzaGJvYXJkCmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKaW5kZXggZTcz
MTA3N2Y2ZWJlMDA0MDdhZGIwNjhjN2ZmY2JmNjFlYTY2Y2RjYy4uZGY3NmQ3ZDBlYmMzYTAxN2Ez
MjM4NzBkYTRmYmZhMTA1ZWFiMmEzNCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9pbmRleC5odG1sCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvaW5kZXguaHRtbApAQCAtMTEzLDYgKzExMyw3IEBAIFJ1biB0b29scy9idW5kbGUt
djMtc2NyaXB0cyB0byBzcGVlZCB1cCB0aGUgbG9hZCB0aW1lIGZvciBwcm9kdWN0aW9uLmApOwog
ICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvZG9tYWluLWNvbnRyb2wtdG9vbGJhci5qcyI+PC9z
Y3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9kYXNoYm9hcmQtdG9vbGJhci5qcyI+
PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9kYXNoYm9hcmQtcGFnZS5qcyI+
PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9jb250aW51b3VzLWRvbWFpbi10
b29sYmFyLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL2NoYXJ0LXBh
bmUtc3RhdHVzLXZpZXcuanMiPjwvc2NyaXB0PgogICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMv
Y2hhcnQtcGFuZS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9jaGFy
dHMtdG9vbGJhci5qcyI+PC9zY3JpcHQ+CkBAIC0xMjMsNiArMTI0LDcgQEAgUnVuIHRvb2xzL2J1
bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2FkIHRpbWUgZm9yIHByb2R1Y3Rpb24u
YCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9jcmVhdGUtYW5hbHlzaXMtdGFzay1wYWdl
LmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL2J1aWxkLXJlcXVlc3Qt
cXVldWUtcGFnZS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9zdW1t
YXJ5LXBhZ2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvc3VtbWFy
eS10b29sYmFyLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3Rlc3Qt
ZnJlc2huZXNzLXBhZ2UuanMiPjwvc2NyaXB0PgogCiAgICAgICAgIDxzY3JpcHQgc3JjPSJtYWlu
LmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvbWFpbi5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbWFpbi5q
cwppbmRleCA1N2EwNmMzNmMxOGExYmQzYTVjZGQ5NmFhZjhiOTllNWM2NzZhODcxLi5hYjk3ZGM4
ZTEwZmU3MGQwYWVhMWMwMGEyMmJkZjY4MGRiNjBmNjY0IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21haW4uanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9tYWluLmpzCkBAIC0yNiwxMSArMjYsMTIgQEAgZnVuY3Rpb24gbWFp
bigpIHsKICAgICAgICAgICAgICAgICBkYXNoYm9hcmRQYWdlcy5wdXNoKG5ldyBEYXNoYm9hcmRQ
YWdlKG5hbWUsIG1hbmlmZXN0LmRhc2hib2FyZHNbbmFtZV0sIGRhc2hib2FyZFRvb2xiYXIpKTsK
ICAgICAgICAgfQogCisgICAgICAgIGNvbnN0IHN1bW1hcnlUb29sYmFyID0gbmV3IFN1bW1hcnlU
b29sYmFyOwogICAgICAgICBjb25zdCBzdW1tYXJ5UGFnZXMgPSBbXTsKICAgICAgICAgbGV0IHRl
c3RGcmVzaG5lc3NQYWdlID0gbnVsbDsKICAgICAgICAgaWYgKG1hbmlmZXN0LnN1bW1hcnlQYWdl
cykgewogICAgICAgICAgICAgZm9yIChjb25zdCBzdW1tYXJ5UGFnZSBvZiBtYW5pZmVzdC5zdW1t
YXJ5UGFnZXMpCi0gICAgICAgICAgICAgICAgc3VtbWFyeVBhZ2VzLnB1c2gobmV3IFN1bW1hcnlQ
YWdlKHN1bW1hcnlQYWdlKSk7CisgICAgICAgICAgICAgICAgc3VtbWFyeVBhZ2VzLnB1c2gobmV3
IFN1bW1hcnlQYWdlKHN1bW1hcnlQYWdlLCBzdW1tYXJ5VG9vbGJhcikpOwogICAgICAgICAgICAg
dGVzdEZyZXNobmVzc1BhZ2UgPSBuZXcgVGVzdEZyZXNobmVzc1BhZ2UobWFuaWZlc3Quc3VtbWFy
eVBhZ2VzLCBtYW5pZmVzdC50ZXN0QWdlVG9sZXJhbmNlSW5Ib3Vycyk7CiAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jaGFy
dHMtdG9vbGJhci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMv
Y2hhcnRzLXRvb2xiYXIuanMKaW5kZXggYTA5N2UzNDhlODdmOTdiYzFiOTFiOTc5OThmYWUyNDdh
Njc2ODFmYi4uOWU2Mzk5MmZmNTdmNDdmNjMwOGRkMjMyOWIwN2I5NDU3ODA5NGU0MCAxMDA2NDQK
LS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jaGFydHMtdG9v
bGJhci5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2No
YXJ0cy10b29sYmFyLmpzCkBAIC0xLDI0ICsxLDggQEAKIAotY2xhc3MgQ2hhcnRzVG9vbGJhciBl
eHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsKK2NsYXNzIENoYXJ0c1Rvb2xiYXIgZXh0ZW5k
cyBDb250aW51b3VzRG9tYWluVG9vbGJhciB7CiAgICAgY29uc3RydWN0b3IoKQogICAgIHsKLSAg
ICAgICAgc3VwZXIoJ2NoYXJzLXRvb2xiYXInLCA3KTsKLQotICAgICAgICB0aGlzLl9taW5EYXlD
b3VudCA9IDE7Ci0gICAgICAgIHRoaXMuX21heERheUNvdW50ID0gMzY2OwotCi0gICAgICAgIHRo
aXMuX251bWJlck9mRGF5c0NhbGxiYWNrID0gbnVsbDsKLSAgICAgICAgdGhpcy5fc2xpZGVyID0g
dGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnNsaWRlcicpOwotICAgICAgICB0aGlzLl9z
bGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fc2xpZGVyVmFsdWVNYXlIYXZl
Q2hhbmdlZC5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhpcy5fc2xpZGVyLmFkZEV2ZW50TGlzdGVu
ZXIoJ21vdXNlbW92ZScsIHRoaXMuX3NsaWRlclZhbHVlTWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlz
KSk7Ci0KLSAgICAgICAgdGhpcy5fZWRpdG9yID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3Rv
cignLmVkaXRvcicpOwotICAgICAgICB0aGlzLl9lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignZm9j
dXMnLCB0aGlzLl9lbnRlclRleHRNb2RlLmJpbmQodGhpcykpOwotICAgICAgICB0aGlzLl9lZGl0
b3IuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX2V4aXRUZXh0TW9kZS5iaW5kKHRoaXMp
KTsKLSAgICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5f
ZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhpcy5fZWRp
dG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX2VkaXRvclZhbHVlTWF5SGF2ZUNo
YW5nZWQuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgdGhpcy5fbGFiZWxTcGFuID0gdGhpcy5jb250
ZW50KCkucXVlcnlTZWxlY3RvcignLmRheS1jb3VudCcpOworICAgICAgICBzdXBlcignY2hhcnRz
LXRvb2xiYXInLCA3KTsKIAogICAgICAgICB0aGlzLl9hZGRQYW5lQ2FsbGJhY2sgPSBudWxsOwog
ICAgICAgICB0aGlzLl9wYW5lU2VsZWN0b3IgPSB0aGlzLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9y
KCdwYW5lLXNlbGVjdG9yJykuY29tcG9uZW50KCk7CkBAIC0zNSwxNCArMTksNiBAQCBjbGFzcyBD
aGFydHNUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRvb2xiYXIgewogICAgIHsKICAgICAg
ICAgc3VwZXIucmVuZGVyKCk7CiAgICAgICAgIHRoaXMuX3BhbmVTZWxlY3Rvci5lbnF1ZXVlVG9S
ZW5kZXIoKTsKLSAgICAgICAgdGhpcy5fbGFiZWxTcGFuLnRleHRDb250ZW50ID0gdGhpcy5fbnVt
YmVyT2ZEYXlzOwotICAgICAgICB0aGlzLl9zZXRJbnB1dEVsZW1lbnRWYWx1ZSh0aGlzLl9udW1i
ZXJPZkRheXMpOwotICAgIH0KLQotICAgIHNldE51bWJlck9mRGF5c0NhbGxiYWNrKGNhbGxiYWNr
KQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoIWNhbGxiYWNrIHx8IGNhbGxiYWNrIGlu
c3RhbmNlb2YgRnVuY3Rpb24pOwotICAgICAgICB0aGlzLl9udW1iZXJPZkRheXNDYWxsYmFjayA9
IGNhbGxiYWNrOwogICAgIH0KIAogICAgIHNldEFkZFBhbmVDYWxsYmFjayhjYWxsYmFjaykKQEAg
LTUzLDYxICsyOSw3IEBAIGNsYXNzIENoYXJ0c1Rvb2xiYXIgZXh0ZW5kcyBEb21haW5Db250cm9s
VG9vbGJhciB7CiAKICAgICBzZXRTdGFydFRpbWUoc3RhcnRUaW1lKQogICAgIHsKLSAgICAgICAg
dGhpcy5fZXhpdFRleHRNb2RlKCk7Ci0gICAgICAgIGlmIChzdGFydFRpbWUpCi0gICAgICAgICAg
ICBzdXBlci5zZXRTdGFydFRpbWUoc3RhcnRUaW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc3VwZXIuc2V0TnVtYmVyT2ZEYXlzKDcpOwotICAgIH0KLQotICAgIF9zZXRJbnB1dEVsZW1l
bnRWYWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NsaWRlci52YWx1ZSA9IE1hdGgu
cG93KHZhbHVlLCAxLzMpOwotICAgICAgICB0aGlzLl9zbGlkZXIubWluID0gTWF0aC5wb3codGhp
cy5fbWluRGF5Q291bnQsIDEvMyk7Ci0gICAgICAgIHRoaXMuX3NsaWRlci5tYXggPSBNYXRoLnBv
dyh0aGlzLl9tYXhEYXlDb3VudCwgMS8zKTsKLSAgICAgICAgdGhpcy5fc2xpZGVyLnN0ZXAgPSAn
YW55JzsKLSAgICAgICAgdGhpcy5fZWRpdG9yLnZhbHVlID0gdmFsdWU7Ci0gICAgfQotCi0gICAg
X2VudGVyVGV4dE1vZGUoZXZlbnQpCi0gICAgewotICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOwotICAgICAgICB0aGlzLl9lZGl0b3Iuc3R5bGUub3BhY2l0eSA9IDE7Ci0gICAgICAgIHRo
aXMuX2VkaXRvci5zdHlsZS5tYXJnaW5MZWZ0ID0gJy0yLjVyZW0nOwotICAgICAgICB0aGlzLl9s
YWJlbFNwYW4uc3R5bGUub3BhY2l0eSA9IDA7Ci0gICAgICAgIHRoaXMuX3NsaWRlci5zdHlsZS5v
cGFjaXR5ID0gMDsKLSAgICB9Ci0KLSAgICBfZXhpdFRleHRNb2RlKGV2ZW50KQotICAgIHsKLSAg
ICAgICAgaWYgKGV2ZW50KQotICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAg
ICAgICAgdGhpcy5fZWRpdG9yLnN0eWxlLm9wYWNpdHkgPSAwOwotICAgICAgICB0aGlzLl9lZGl0
b3Iuc3R5bGUubWFyZ2luTGVmdCA9IG51bGw7Ci0gICAgICAgIHRoaXMuX2xhYmVsU3Bhbi5zdHls
ZS5vcGFjaXR5ID0gMTsKLSAgICAgICAgdGhpcy5fc2xpZGVyLnN0eWxlLm9wYWNpdHkgPSAxOwot
ICAgIH0KLQotICAgIF9zbGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2VkKGV2ZW50KQotICAgIHsKLSAg
ICAgICAgdmFyIG51bWJlck9mRGF5cyA9IE1hdGgucm91bmQoTWF0aC5wb3cocGFyc2VGbG9hdCh0
aGlzLl9zbGlkZXIudmFsdWUpLCAzKSk7Ci0gICAgICAgIHRoaXMuX2NhbGxOdW1iZXJPZkRheXND
YWxsYmFjayhldmVudCwgbnVtYmVyT2ZEYXlzKTsKLSAgICB9Ci0KLSAgICBfZWRpdG9yVmFsdWVN
YXlIYXZlQ2hhbmdlZChldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciByYXdOdW1iZXIgPSBNYXRo
LnJvdW5kKHBhcnNlRmxvYXQodGhpcy5fZWRpdG9yLnZhbHVlKSk7Ci0gICAgICAgIHZhciBudW1i
ZXJPZkRheXMgPSBNYXRoLm1heCh0aGlzLl9taW5EYXlDb3VudCwgTWF0aC5taW4odGhpcy5fbWF4
RGF5Q291bnQsIHJhd051bWJlcikpOwotICAgICAgICBpZiAodGhpcy5fZWRpdG9yLnZhbHVlICE9
IG51bWJlck9mRGF5cykKLSAgICAgICAgICAgIHRoaXMuX2VkaXRvci52YWx1ZSA9IG51bWJlck9m
RGF5czsKLSAgICAgICAgdGhpcy5fY2FsbE51bWJlck9mRGF5c0NhbGxiYWNrKGV2ZW50LCBudW1i
ZXJPZkRheXMpOwotICAgIH0KLQotICAgIF9jYWxsTnVtYmVyT2ZEYXlzQ2FsbGJhY2soZXZlbnQs
IG51bWJlck9mRGF5cykKLSAgICB7Ci0gICAgICAgIHZhciBzaG91bGRVcGRhdGVTdGF0ZSA9IGV2
ZW50LnR5cGUgPT0gJ2NoYW5nZSc7Ci0gICAgICAgIGlmICgodGhpcy5udW1iZXJPZkRheXMoKSAh
PSBudW1iZXJPZkRheXMgfHwgc2hvdWxkVXBkYXRlU3RhdGUpICYmIHRoaXMuX251bWJlck9mRGF5
c0NhbGxiYWNrKQotICAgICAgICAgICAgdGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJhY2sobnVtYmVy
T2ZEYXlzLCBzaG91bGRVcGRhdGVTdGF0ZSk7CisgICAgICAgIHN1cGVyLnNldFN0YXJ0VGltZShN
YXRoLm1heCgxLCBzdGFydFRpbWUpKTsKICAgICB9CiAKICAgICBfdG9nZ2xlUGFuZVNlbGVjdG9y
KGV2ZW50KQpAQCAtMTQ1LDM0ICs2NywyNSBAQCBjbGFzcyBDaGFydHNUb29sYmFyIGV4dGVuZHMg
RG9tYWluQ29udHJvbFRvb2xiYXIgewogICAgICAgICAgICAgdGhpcy5fYWRkUGFuZUNhbGxiYWNr
KHBsYXRmb3JtLCBtZXRyaWMpOwogICAgIH0KIAotCiAgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgp
CiAgICAgewogICAgICAgICByZXR1cm4gYAotICAgICAgICAgICAgPG5hdiBjbGFzcz0iY2hhcnRz
LXRvb2xiYXIiPgorICAgICAgICAgICAgPG5hdj4KICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9
ImJ1dHRvbmVkLXRvb2xiYXIiPgogICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iIyIg
Y2xhc3M9InBhbmUtc2VsZWN0b3Itb3BlbmVyIj5BZGQgcGFuZTwvYT48L2xpPgogICAgICAgICAg
ICAgICAgIDwvdWw+Ci0gICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJidXR0b25lZC10b29sYmFy
Ij4KLSAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJzdGFydC10aW1lLXNsaWRlciI+Ci0g
ICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGlucHV0IGNsYXNzPSJzbGlkZXIiIHR5cGU9InJhbmdlIj4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImVkaXRvciIgdHlwZT0ibnVtYmVyIj4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPjxzcGFuIGNsYXNzPSJkYXkt
Y291bnQiIHRhYmluZGV4PSIwIj4/PC9zcGFuPiBkYXlzPC9zcGFuPgotICAgICAgICAgICAgICAg
ICAgICAgICAgPC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAg
ICAgICA8L3VsPgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmUtc2VsZWN0b3ItY29u
dGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgPHBhbmUtc2VsZWN0b3I+PC9wYW5lLXNlbGVj
dG9yPgogICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9uYXY+YDsKKyAgICAg
ICAgICAgICAgICAkeyBzdXBlci5odG1sVGVtcGxhdGUoKSB9CisgICAgICAgICAgICA8L25hdj4K
KyAgICAgICAgYDsKICAgICB9CiAKICAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIFRvb2xiYXIuY3NzVGVtcGxhdGUoKSArIGAKLQotICAgICAgICAgICAgLmNo
YXJ0cy10b29sYmFyID4gLmJ1dHRvbmVkLXRvb2xiYXI6Zmlyc3QtY2hpbGQgeworICAgICAgICBy
ZXR1cm4gc3VwZXIuY3NzVGVtcGxhdGUoKSArIGAKKyAgICAgICAgICAgIG5hdiA+IC5idXR0b25l
ZC10b29sYmFyOmZpcnN0LWNoaWxkIHsKICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDAu
NXJlbTsKICAgICAgICAgICAgIH0KIApAQCAtMTgwLDcgKzkzLDcgQEAgY2xhc3MgQ2hhcnRzVG9v
bGJhciBleHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsKICAgICAgICAgICAgICAgICBiYWNr
Z3JvdW5kOiByZ2JhKDIwNCwgMTUzLCA1MSwgMC4xKTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgLmNoYXJ0cy10b29sYmFyID4gLnBhbmUtc2VsZWN0b3ItY29udGFpbmVyIHsKKyAgICAg
ICAgICAgIG5hdiA+IC5wYW5lLXNlbGVjdG9yLWNvbnRhaW5lciB7CiAgICAgICAgICAgICAgICAg
cG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgICAgICAgIHJpZ2h0OiAxcmVtOwogICAgICAg
ICAgICAgICAgIG1hcmdpbjogMDsKQEAgLTE5MiwzOSArMTA1LDggQEAgY2xhc3MgQ2hhcnRzVG9v
bGJhciBleHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsKICAgICAgICAgICAgICAgICBiYWNr
Z3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgICAgICAgICAgICAgLXdlYmtp
dC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMC41cmVtKTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLmJ1dHRvbmVkLXRvb2xiYXIgLnN0YXJ0LXRpbWUtc2xpZGVyIHsKLSAgICAgICAgICAg
ICAgICBtYXJnaW4tbGVmdDogMnJlbTsKLSAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMWVt
OwotICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIgbGFiZWwgewotICAgICAgICAgICAgICAgIGRp
c3BsYXk6IGlubGluZS1ibG9jazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLnN0YXJ0
LXRpbWUtc2xpZGVyIC5zbGlkZXIgewotICAgICAgICAgICAgICAgIGhlaWdodDogMC44cmVtOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIgLmVkaXRvciB7
Ci0gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwotICAgICAgICAgICAgICAgIG9w
YWNpdHk6IDA7Ci0gICAgICAgICAgICAgICAgd2lkdGg6IDRyZW07Ci0gICAgICAgICAgICAgICAg
Zm9udC13ZWlnaHQ6IGluaGVyaXQ7Ci0gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07
Ci0gICAgICAgICAgICAgICAgaGVpZ2h0OiAwLjlyZW07Ci0gICAgICAgICAgICAgICAgb3V0bGlu
ZTogbm9uZTsKLSAgICAgICAgICAgICAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOwotICAgICAg
ICAgICAgICAgIHotaW5kZXg6IDU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC5zdGFy
dC10aW1lLXNsaWRlciAuZGF5LWNvdW50IHsKLSAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxp
bmUtYmxvY2s7Ci0gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgICAgICAg
ICAgICAgd2lkdGg6IDJyZW07Ci0gICAgICAgICAgICB9CiAgICAgICAgIGA7CiAgICAgfQotCiB9
CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgnY2hhcnRzLXRvb2xiYXInLCBDaGFydHNU
b29sYmFyKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
cGFnZXMvY29udGludW91cy1kb21haW4tdG9vbGJhci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY29udGludW91cy1kb21haW4tdG9vbGJhci5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xZGUwMThlMWRkNDUxODUyNTNkMTVjMWRkNWQ3YTYwZWFmMzRiMjQ4Ci0tLSAvZGV2L251
bGwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9jb250aW51
b3VzLWRvbWFpbi10b29sYmFyLmpzCkBAIC0wLDAgKzEsMTY0IEBACisKK2NsYXNzIENvbnRpbnVv
dXNEb21haW5Ub29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRvb2xiYXIgeworICAgIGNvbnN0
cnVjdG9yKG5hbWUsIGRlZmF1bHROdW1iZXJPZkRheXMpCisgICAgeworICAgICAgICBzdXBlcihu
YW1lLCBkZWZhdWx0TnVtYmVyT2ZEYXlzKTsKKworICAgICAgICB0aGlzLl9kZWZhdWx0TWluRGF5
Q291bnQgPSAxOworICAgICAgICB0aGlzLl9kZWZhdWx0TWF4RGF5Q291bnQgPSAzNjY7CisgICAg
ICAgIHRoaXMuX2RlZmF1bHROdW1iZXJPZkRheXMgPSBkZWZhdWx0TnVtYmVyT2ZEYXlzOworICAg
ICAgICB0aGlzLl9zZXRBbGxvd2VkRGF5Q291bnRSYW5nZSgpOworCisgICAgICAgIHRoaXMuX251
bWJlck9mRGF5c0NhbGxiYWNrID0gbnVsbDsKKyAgICAgICAgdGhpcy5fc2xpZGVyID0gdGhpcy5j
b250ZW50KCdzbGlkZXInKTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIo
J2NoYW5nZScsIHRoaXMuX3NsaWRlclZhbHVlTWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlzKSk7Cisg
ICAgICAgIHRoaXMuX3NsaWRlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9z
bGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMuX2lu
VGV4dE1vZGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZWRpdG9yID0gdGhpcy5jb250ZW50KCdl
ZGl0b3InKTsKKyAgICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywg
dGhpcy5fZW50ZXJUZXh0TW9kZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fZWRpdG9yLmFk
ZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLl9leGl0VGV4dE1vZGUuYmluZCh0aGlzKSk7Cisg
ICAgICAgIHRoaXMuX2VkaXRvci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX2VkaXRv
clZhbHVlTWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2VkaXRvci5h
ZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9lZGl0b3JWYWx1ZU1heUhhdmVDaGFuZ2Vk
LmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMuX2RheUNvdW50Q29udGFpbmVyID0gdGhpcy5j
b250ZW50KCdkYXktY291bnQnKTsKKyAgICB9CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAg
ICAgc3VwZXIucmVuZGVyKCk7CisgICAgICAgIHRoaXMuX2RheUNvdW50Q29udGFpbmVyLnRleHRD
b250ZW50ID0gdGhpcy5fbnVtYmVyT2ZEYXlzID09IDAgPyAnJyA6IHRoaXMuX251bWJlck9mRGF5
czsKKyAgICAgICAgdGhpcy5fdXBkYXRlU2xpZGVyV2l0aE51bWJlck9mRGF5cyh0aGlzLl9udW1i
ZXJPZkRheXMpOworICAgIH0KKworICAgIHNldE51bWJlck9mRGF5c0NhbGxiYWNrKGNhbGxiYWNr
KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoIWNhbGxiYWNrIHx8IGNhbGxiYWNrIGlu
c3RhbmNlb2YgRnVuY3Rpb24pOworICAgICAgICB0aGlzLl9udW1iZXJPZkRheXNDYWxsYmFjayA9
IGNhbGxiYWNrOworICAgIH0KKworICAgIHNldFN0YXJ0VGltZShzdGFydFRpbWU9dGhpcy5fZGVm
YXVsdE51bWJlck9mRGF5cykKKyAgICB7CisgICAgICAgIHRoaXMuX2V4aXRUZXh0TW9kZSgpOwor
ICAgICAgICBpZiAoc3RhcnRUaW1lKQorICAgICAgICAgICAgc3VwZXIuc2V0U3RhcnRUaW1lKHN0
YXJ0VGltZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1cGVyLnNldE51bWJlck9mRGF5
cyh0aGlzLl9kZWZhdWx0TnVtYmVyT2ZEYXlzKTsKKyAgICB9CisKKyAgICBfc2V0QWxsb3dlZERh
eUNvdW50UmFuZ2UobWluRGF5Q291bnQ9dGhpcy5fZGVmYXVsdE1pbkRheUNvdW50LCBtYXhEYXlD
b3VudD10aGlzLl9kZWZhdWx0TWF4RGF5Q291bnQpCisgICAgeworICAgICAgICB0aGlzLl9taW5E
YXlDb3VudCA9IG1pbkRheUNvdW50OworICAgICAgICB0aGlzLl9tYXhEYXlDb3VudCA9IG1heERh
eUNvdW50OworICAgIH0KKworICAgIF91cGRhdGVTbGlkZXJXaXRoTnVtYmVyT2ZEYXlzKHZhbHVl
KQorICAgIHsKKyAgICAgICAgdGhpcy5fc2xpZGVyLnZhbHVlID0gTWF0aC5wb3codmFsdWUsIDEv
Myk7CisgICAgICAgIHRoaXMuX3NsaWRlci5taW4gPSBNYXRoLnBvdyh0aGlzLl9taW5EYXlDb3Vu
dCwgMS8zKTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLm1heCA9IE1hdGgucG93KHRoaXMuX21heERh
eUNvdW50LCAxLzMpOworICAgICAgICB0aGlzLl9zbGlkZXIuc3RlcCA9ICdhbnknOworICAgICAg
ICB0aGlzLl9lZGl0b3IudmFsdWUgPSB2YWx1ZTsKKyAgICB9CisKKyAgICBfZW50ZXJUZXh0TW9k
ZShldmVudCkKKyAgICB7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAg
IHRoaXMuX2luVGV4dE1vZGUgPSB0cnVlOworICAgICAgICB0aGlzLl9lZGl0b3Iuc3R5bGUub3Bh
Y2l0eSA9IDE7CisgICAgICAgIHRoaXMuX2VkaXRvci5zdHlsZS5tYXJnaW5MZWZ0ID0gJy0yLjVy
ZW0nOworICAgICAgICB0aGlzLl9kYXlDb3VudENvbnRhaW5lci5zdHlsZS5vcGFjaXR5ID0gMDsK
KyAgICAgICAgdGhpcy5fc2xpZGVyLnN0eWxlLm9wYWNpdHkgPSAwOworICAgIH0KKworICAgIF9l
eGl0VGV4dE1vZGUoZXZlbnQpCisgICAgeworICAgICAgICBpZiAoZXZlbnQpCisgICAgICAgICAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB0aGlzLl9pblRleHRNb2RlID0gZmFs
c2U7CisgICAgICAgIHRoaXMuX2VkaXRvci5zdHlsZS5vcGFjaXR5ID0gMDsKKyAgICAgICAgdGhp
cy5fZWRpdG9yLnN0eWxlLm1hcmdpbkxlZnQgPSBudWxsOworICAgICAgICB0aGlzLl9kYXlDb3Vu
dENvbnRhaW5lci5zdHlsZS5vcGFjaXR5ID0gMTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLnN0eWxl
Lm9wYWNpdHkgPSAxOworICAgIH0KKworICAgIF9zbGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2VkKGV2
ZW50KQorICAgIHsKKyAgICAgICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gTWF0aC5yb3VuZChNYXRo
LnBvdyhwYXJzZUZsb2F0KHRoaXMuX3NsaWRlci52YWx1ZSksIDMpKTsKKyAgICAgICAgdGhpcy5f
Y2FsbE51bWJlck9mRGF5c0NhbGxiYWNrKGV2ZW50LCBudW1iZXJPZkRheXMpOworICAgIH0KKwor
ICAgIF9lZGl0b3JWYWx1ZU1heUhhdmVDaGFuZ2VkKGV2ZW50KQorICAgIHsKKyAgICAgICAgY29u
c3QgcmF3TnVtYmVyID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KHRoaXMuX2VkaXRvci52YWx1ZSkp
OworICAgICAgICBjb25zdCBudW1iZXJPZkRheXMgPSBNYXRoLm1heCh0aGlzLl9taW5EYXlDb3Vu
dCwgTWF0aC5taW4odGhpcy5fbWF4RGF5Q291bnQsIHJhd051bWJlcikpOworICAgICAgICBpZiAo
dGhpcy5fZWRpdG9yLnZhbHVlICE9IG51bWJlck9mRGF5cykKKyAgICAgICAgICAgIHRoaXMuX2Vk
aXRvci52YWx1ZSA9IG51bWJlck9mRGF5czsKKyAgICAgICAgdGhpcy5fY2FsbE51bWJlck9mRGF5
c0NhbGxiYWNrKGV2ZW50LCBudW1iZXJPZkRheXMpOworICAgIH0KKworICAgIF9jYWxsTnVtYmVy
T2ZEYXlzQ2FsbGJhY2soZXZlbnQsIG51bWJlck9mRGF5cykKKyAgICB7CisgICAgICAgIGNvbnN0
IHNob3VsZFVwZGF0ZVN0YXRlID0gZXZlbnQudHlwZSA9PSAnY2hhbmdlJzsKKyAgICAgICAgaWYg
KCh0aGlzLm51bWJlck9mRGF5cygpICE9IG51bWJlck9mRGF5cyB8fCBzaG91bGRVcGRhdGVTdGF0
ZSkgJiYgdGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJhY2spCisgICAgICAgICAgICB0aGlzLl9udW1i
ZXJPZkRheXNDYWxsYmFjayhudW1iZXJPZkRheXMsIHNob3VsZFVwZGF0ZVN0YXRlKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgZGF5c0NvdW50TGFiZWxUZXh0KCkgeyByZXR1cm4gYGRheXNgOyB9CisK
KyAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBgCisgICAg
ICAgICAgICA8dWwgY2xhc3M9ImJ1dHRvbmVkLXRvb2xiYXIiPgorICAgICAgICAgICAgICAgIDxs
aSBjbGFzcz0ic3RhcnQtdGltZS1zbGlkZXIiPgorICAgICAgICAgICAgICAgICAgICA8bGFiZWw+
CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9InNsaWRlciIgdHlwZT0icmFuZ2Ui
PgorICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJlZGl0b3IiIHR5cGU9Im51bWJl
ciI+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJkYXktY291bnQiIHRhYmluZGV4PSIwIj48
L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHsgdGhpcy5kYXlzQ291bnRMYWJl
bFRleHQoKSB9CisgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAg
ICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDwvdWw+
YDsKKyAgICB9CisKKyAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFRvb2xiYXIuY3NzVGVtcGxhdGUoKSArIGAKKyAgICAgICAgICAgIC5idXR0b25lZC10b29s
YmFyIC5zdGFydC10aW1lLXNsaWRlciB7CisgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDJy
ZW07CisgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDFlbTsKKyAgICAgICAgICAgICAgICBm
b250LXNpemU6IDAuOXJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLnN0YXJ0LXRp
bWUtc2xpZGVyIC5sYWJlbCB7CisgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2Nr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjc2xpZGVyIHsKKyAgICAgICAgICAgICAg
ICBoZWlnaHQ6IDAuOHJlbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgI2VkaXRvciB7
CisgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICAgICAgICAgIG9w
YWNpdHk6IDA7CisgICAgICAgICAgICAgICAgd2lkdGg6IDRyZW07CisgICAgICAgICAgICAgICAg
Zm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07
CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLjlyZW07CisgICAgICAgICAgICAgICAgb3V0bGlu
ZTogbm9uZTsKKyAgICAgICAgICAgICAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOworICAgICAg
ICAgICAgICAgIHotaW5kZXg6IDU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICNkYXkt
Y291bnQgeworICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICAgICAg
ICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgICAgICB3aWR0aDogMnJlbTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgYDsKKyAgICB9Cit9CisKK0NvbXBvbmVudEJhc2UuZGVm
aW5lRWxlbWVudCgnY29udGludW91cy1kb21haW4tdG9vbGJhcicsIENvbnRpbnVvdXNEb21haW5U
b29sYmFyKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
cGFnZXMvZG9tYWluLWNvbnRyb2wtdG9vbGJhci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjMvcGFnZXMvZG9tYWluLWNvbnRyb2wtdG9vbGJhci5qcwppbmRleCBjNmJmNjE0
ZTM2MDgyYzk4OTRkNGFiM2I5MzlkM2Y2MDc5NzU1ZGUyLi4yZDk5YWU5OGM0NTUwZmNjMDczZDlj
NzRhZjRlODUwOTBkYjU1YWFlIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL3BhZ2VzL2RvbWFpbi1jb250cm9sLXRvb2xiYXIuanMKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9kb21haW4tY29udHJvbC10b29sYmFyLmpz
CkBAIC0xNyw3ICsxNyw3IEBAIGNsYXNzIERvbWFpbkNvbnRyb2xUb29sYmFyIGV4dGVuZHMgVG9v
bGJhciB7CiAKICAgICBzZXRTdGFydFRpbWUoc3RhcnRUaW1lKQogICAgIHsKLSAgICAgICAgdGhp
cy5zZXROdW1iZXJPZkRheXMoTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCgodGhpcy5fcHJlc2VudCAt
IHN0YXJ0VGltZSkgLyB0aGlzLl9taWxsaXNlY29uZHNQZXJEYXkpKSk7CisgICAgICAgIHRoaXMu
c2V0TnVtYmVyT2ZEYXlzKE1hdGgubWF4KDAsIE1hdGgucm91bmQoKHRoaXMuX3ByZXNlbnQgLSBz
dGFydFRpbWUpIC8gdGhpcy5fbWlsbGlzZWNvbmRzUGVyRGF5KSkpOwogICAgICAgICB0aGlzLl9z
dGFydFRpbWUgPSBzdGFydFRpbWU7CiAgICAgfQogCkBAIC0yOCw3ICsyOCw3IEBAIGNsYXNzIERv
bWFpbkNvbnRyb2xUb29sYmFyIGV4dGVuZHMgVG9vbGJhciB7CiAKICAgICBzZXROdW1iZXJPZkRh
eXMobnVtYmVyT2ZEYXlzLCBzZXRCeVVzZXIpCiAgICAgewotICAgICAgICBpZiAoIW51bWJlck9m
RGF5cykKKyAgICAgICAgaWYgKHR5cGVvZihudW1iZXJPZkRheXMpICE9ICdudW1iZXInKQogICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IG51bGw7CmRpZmYg
LS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3BhZ2Utcm91
dGVyLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9wYWdlLXJv
dXRlci5qcwppbmRleCBjM2Y3NDNiYjdiMzQ5ZjUwODVlNmZmZWIxN2NjYjlmMDJkMGRlN2E5Li5l
ZjIwYjQ1Y2UyMTY0NjA2YzZjYzYzYmM4YjRiNTE2OWQzOGY4MDkwIDEwMDY0NAotLS0gYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3BhZ2Utcm91dGVyLmpzCisrKyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvcGFnZS1yb3V0ZXIuanMK
QEAgLTU1LDcgKzU1LDE0IEBAIGNsYXNzIFBhZ2VSb3V0ZXIgewogICAgICAgICBpZiAoIWRlc3Rp
bmF0aW9uUGFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAodGhp
cy5fY3VycmVudFBhZ2UgIT0gZGVzdGluYXRpb25QYWdlKSB7CisgICAgICAgIGlmICh0aGlzLl9j
dXJyZW50UGFnZSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFBhZ2UuZnV6enlNYXRjaGVzUm91dGVO
YW1lKSA9PT0gJ2Z1bmN0aW9uJyAmJgorICAgICAgICAgICAgdGhpcy5fY3VycmVudFBhZ2UuZnV6
enlNYXRjaGVzUm91dGVOYW1lKGRlc3RpbmF0aW9uUGFnZS5yb3V0ZU5hbWUoKSkgJiYKKyAgICAg
ICAgICAgIHRoaXMuX2N1cnJlbnRQYWdlICE9IGRlc3RpbmF0aW9uUGFnZSkgeworICAgICAgICAg
ICAgY29uc3QgY3VycmVudFBhZ2VTdGF0ZSA9IHRoaXMuX2N1cnJlbnRQYWdlLnNlcmlhbGl6ZVN0
YXRlKCk7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50UGFnZSA9IGRlc3RpbmF0aW9uUGFnZTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uUGFnZS5vcGVuKGN1cnJlbnRQYWdlU3RhdGUpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRQYWdlICE9IGRlc3RpbmF0aW9u
UGFnZSkgewogICAgICAgICAgICAgdGhpcy5fY3VycmVudFBhZ2UgPSBkZXN0aW5hdGlvblBhZ2U7
CiAgICAgICAgICAgICBkZXN0aW5hdGlvblBhZ2Uub3BlbihwYXJzZWQuc3RhdGUpOwogICAgICAg
ICB9IGVsc2UKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
cGFnZXMvc3VtbWFyeS1wYWdlLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanMKaW5kZXggZTQ2MTliMTk3NDg3Y2U5NzJjMThjODBhZmU4
OWJmZGIyY2VhODg3Zi4uZTE4YWY3OGFiM2RmMWRlNmRhNDAxMDg3ZTQ2OGQ3MGU2NzI2NWM0YiAx
MDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1t
YXJ5LXBhZ2UuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdl
cy9zdW1tYXJ5LXBhZ2UuanMKQEAgLTEsOSArMSw5IEBACiAKIGNsYXNzIFN1bW1hcnlQYWdlIGV4
dGVuZHMgUGFnZVdpdGhIZWFkaW5nIHsKIAotICAgIGNvbnN0cnVjdG9yKHN1bW1hcnlTZXR0aW5n
cykKKyAgICBjb25zdHJ1Y3RvcihzdW1tYXJ5U2V0dGluZ3MsIHRvb2xiYXIpCiAgICAgewotICAg
ICAgICBzdXBlcihzdW1tYXJ5U2V0dGluZ3MubmFtZSwgbnVsbCk7CisgICAgICAgIHN1cGVyKHN1
bW1hcnlTZXR0aW5ncy5uYW1lLCB0b29sYmFyKTsKIAogICAgICAgICB0aGlzLl9yb3V0ZSA9IHN1
bW1hcnlTZXR0aW5ncy5yb3V0ZTsKICAgICAgICAgdGhpcy5fdGFibGUgPSB7CkBAIC0zMiwxMyAr
MzIsNDggQEAgY2xhc3MgU3VtbWFyeVBhZ2UgZXh0ZW5kcyBQYWdlV2l0aEhlYWRpbmcgewogICAg
IG9wZW4oc3RhdGUpCiAgICAgewogICAgICAgICBzdXBlci5vcGVuKHN0YXRlKTsKKyAgICAgICAg
dmFyIHNpbmNlID0gc3RhdGUuc2luY2UgPyBwYXJzZUZsb2F0KHN0YXRlLnNpbmNlKSA6IG51bGw7
CiAKLSAgICAgICAgdmFyIGN1cnJlbnQgPSBEYXRlLm5vdygpOwotICAgICAgICB2YXIgdGltZVJh
bmdlID0gW2N1cnJlbnQgLSAyNCAqIDM2MDAgKiAxMDAwLCBjdXJyZW50XTsKKyAgICAgICAgaWYg
KGlzTmFOKHNpbmNlKSkKKyAgICAgICAgICAgIHRoaXMudG9vbGJhcigpLnNldFN0YXJ0VGltZSgp
OworCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMudG9vbGJhcigpLnNldFN0YXJ0VGlt
ZShzaW5jZSk7CisKKyAgICAgICAgdGhpcy50b29sYmFyKCkuc2V0TnVtYmVyT2ZEYXlzQ2FsbGJh
Y2sodGhpcy5zZXROdW1iZXJPZkRheXNGcm9tVG9vbGJhci5iaW5kKHRoaXMpKTsKKyAgICAgICAg
dGhpcy5fZmV0Y2hGb3JOdW1iZXJPZkRheXNBZ28odGhpcy50b29sYmFyKCkubnVtYmVyT2ZEYXlz
KCksIHNpbmNlKTsKKyAgICAgICAgdGhpcy5zY2hlZHVsZVVybFN0YXRlVXBkYXRlKCk7CisgICAg
fQorCisgICAgX2ZldGNoRm9yTnVtYmVyT2ZEYXlzQWdvKCkKKyAgICB7CisgICAgICAgIGNvbnN0
IHRpbWVSYW5nZSA9IFt0aGlzLnRvb2xiYXIoKS5lbmRUaW1lKCksIHRoaXMudG9vbGJhcigpLnN0
YXJ0VGltZSgpXTsKICAgICAgICAgZm9yICh2YXIgZ3JvdXAgb2YgdGhpcy5fY29uZmlnR3JvdXBz
KQogICAgICAgICAgICAgZ3JvdXAuZmV0Y2hBbmRDb21wdXRlU3VtbWFyeSh0aW1lUmFuZ2UpLnRo
ZW4oKCkgPT4geyB0aGlzLmVucXVldWVUb1JlbmRlcigpOyB9KTsKICAgICB9CiAKKyAgICBzZXJp
YWxpemVTdGF0ZSgpCisgICAgeworICAgICAgICBpZiAodGhpcy50b29sYmFyKCkuX2RlZmF1bHRO
dW1iZXJPZkRheXMgPT0gdGhpcy50b29sYmFyKCkubnVtYmVyT2ZEYXlzKCkpCisgICAgICAgICAg
ICByZXR1cm4geyB9OworCisgICAgICAgIHJldHVybiB7c2luY2U6IHRoaXMudG9vbGJhcigpLnN0
YXJ0VGltZSgpfTsKKyAgICB9CisKKyAgICBmdXp6eU1hdGNoZXNSb3V0ZU5hbWUocm91dGVOYW1l
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJvdXRlTmFtZS5zdGFydHNXaXRoKCJzdW1tYXJ5LyIp
OyAgICAKKyAgICB9CisKKyAgICBzZXROdW1iZXJPZkRheXNGcm9tVG9vbGJhcihudW1iZXJPZkRh
eXMsIHNob3VsZFVwZGF0ZVN0YXRlKQorICAgIHsKKyAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0g
RGF0ZS5ub3coKSAtIChudW1iZXJPZkRheXMgKiB0aGlzLnRvb2xiYXIoKS5fbWlsbGlzZWNvbmRz
UGVyRGF5KTsKKyAgICAgICAgdGhpcy50b29sYmFyKCkuc2V0U3RhcnRUaW1lKHN0YXJ0VGltZSk7
CisgICAgICAgIHRoaXMuX2ZldGNoRm9yTnVtYmVyT2ZEYXlzQWdvKHRoaXMudG9vbGJhcigpLm51
bWJlck9mRGF5cygpKTsKKyAgICAgICAgdGhpcy50b29sYmFyKCkuZW5xdWV1ZVRvUmVuZGVyKCk7
CisgICAgICAgIHRoaXMuc2NoZWR1bGVVcmxTdGF0ZVVwZGF0ZSgpOworICAgIH0KKwogICAgIHJl
bmRlcigpCiAgICAgewogICAgICAgICBJbnN0cnVtZW50YXRpb24uc3RhcnRNZWFzdXJpbmdUaW1l
KCdTdW1tYXJ5UGFnZScsICdyZW5kZXInKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvc3VtbWFyeS10b29sYmFyLmpzIGIvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXRvb2xiYXIuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2JkNzU4YjgxODE0NzFlOGE1ZDNlYzAzNTk1MzJkZDJkNWExMzBhYwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvc3VtbWFyeS10
b29sYmFyLmpzCkBAIC0wLDAgKzEsNTUgQEAKK2NsYXNzIFN1bW1hcnlUb29sYmFyIGV4dGVuZHMg
Q29udGludW91c0RvbWFpblRvb2xiYXIgeworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAg
ICAgIHN1cGVyKCdzdW1tYXJ5LXRvb2xiYXInLCAwKTsKKworICAgICAgICB0aGlzLl9zZXRBbGxv
d2VkRGF5Q291bnRSYW5nZSh7bWluRGF5Q291bnQ6IDB9KTsKKyAgICAgICAgdGhpcy5fZGF5Q291
bnREZXNjcmlwdGlvbiA9IHRoaXMuY29udGVudCgnZGF5LWNvdW50LWRlc2NyaXB0aW9uJyk7Cisg
ICAgICAgIAorICAgICAgICB0aGlzLl9yZW5kZXJVcGRhdGVEYXlDb3VudEFuZERlc2NyaXB0aW9u
TGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX3JlbmRlclVwZGF0ZURh
eUNvdW50QW5kRGVzY3JpcHRpb24uYmluZCh0aGlzKSk7CisgICAgfQorCisgICAgZW5kVGltZSgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRUaW1lKCkgLSB0aGlzLl9taWxsaXNlY29uZHNQ
ZXJEYXk7CisgICAgfQorCisgICAgX3JlbmRlclVwZGF0ZURheUNvdW50QW5kRGVzY3JpcHRpb24o
bnVtYmVyT2ZEYXlzSXNaZXJvLCBpblRleHRNb2RlKSB7CisgICAgICAgIGlmIChudW1iZXJPZkRh
eXNJc1plcm8gJiYgIWluVGV4dE1vZGUpIHsKKyAgICAgICAgICAgIHRoaXMuX2RheUNvdW50Q29u
dGFpbmVyLm9wYWNpdHkgPSAwOworICAgICAgICAgICAgdGhpcy5fZGF5Q291bnRDb250YWluZXIu
c3R5bGUud2lkdGggPSAnMC4yNXJlbSc7CisgICAgICAgICAgICB0aGlzLl9kYXlDb3VudERlc2Ny
aXB0aW9uLnN0eWxlLndpZHRoID0gJzUuMjVyZW0nOworICAgICAgICAgICAgdGhpcy5fZGF5Q291
bnREZXNjcmlwdGlvbi50ZXh0Q29udGVudCA9ICdOb3cnOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgdGhpcy5fZGF5Q291bnRDb250YWluZXIub3BhY2l0eSA9IDE7Cisg
ICAgICAgICAgICB0aGlzLl9kYXlDb3VudENvbnRhaW5lci5zdHlsZS53aWR0aCA9ICcxLjc1cmVt
JzsKKyAgICAgICAgICAgIHRoaXMuX2RheUNvdW50RGVzY3JpcHRpb24uc3R5bGUud2lkdGggPSAn
My43NXJlbSc7CisgICAgICAgICAgICB0aGlzLl9kYXlDb3VudERlc2NyaXB0aW9uLnRleHRDb250
ZW50ID0gJ2RheXMgYWdvJzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlbmRlcigpCisgICAg
eworICAgICAgICBzdXBlci5yZW5kZXIoKTsKKyAgICAgICAgdGhpcy5fcmVuZGVyVXBkYXRlRGF5
Q291bnRBbmREZXNjcmlwdGlvbkxhemlseS5ldmFsdWF0ZSh0aGlzLl9udW1iZXJPZkRheXMgPT09
IDAsIHRoaXMuX2luVGV4dE1vZGUpOworICAgIH0KKworICAgIF9lbnRlclRleHRNb2RlKGV2ZW50
KQorICAgIHsKKyAgICAgICAgc3VwZXIuX2VudGVyVGV4dE1vZGUoZXZlbnQpOworICAgICAgICB0
aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgIH0KKworICAgIF9leGl0VGV4dE1vZGUoZXZlbnQp
CisgICAgeworICAgICAgICBzdXBlci5fZXhpdFRleHRNb2RlKGV2ZW50KTsKKyAgICAgICAgdGhp
cy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZGF5c0NvdW50TGFiZWxU
ZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBgPGxhYmVsIGlkPSJkYXktY291bnQtZGVzY3Jp
cHRpb24iIGNsYXNzPSJsYWJlbCI+PC9sYWJlbD5gOworICAgIH0KK30KKworQ29tcG9uZW50QmFz
ZS5kZWZpbmVFbGVtZW50KCdzdW1tYXJ5LXRvb2xiYXInLCBTdW1tYXJ5VG9vbGJhcik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394128</attachid>
            <date>2020-03-20 14:25:29 -0700</date>
            <delta_ts>2022-07-02 15:08:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199051-20200320142528.patch</filename>
            <type>text/plain</type>
            <size>27434</size>
            <attacher name="Dean Johnson">dean_johnson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2OTQxCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCA5ODYyZDRkZDNiN2E3NjJkM2NlZDc0ODhjZjJmMWIxZWYyMTg1Njk1Li40NDVkZWU3ZDRh
NzkwNTkxOTIwYTliNjM1YzVjNTgwOTJhZDI3ZGQ0IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3NCBAQAorMjAxOS0wNi0yNSAgRGVhbiBKb2huc29uICA8ZGVhbl9q
b2huc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbcGVyZi53ZWJraXQub3JnXSBBZGQgJ2JhY2sg
aW4gdGltZScgZmVhdHVyZSBmb3IgU3VtbWFyeSBwYWdlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MDUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgIkJhY2sgaW4gdGltZSIgZmVh
dHVyZSBmb3IgYWxsIFN1bW1hcnkgcGFnZXMgb24gdGhlIFdlYktpdCBQZXJmIGRhc2hib2FyZC4g
VGhlcmUgaXMgYSBuZXcKKyAgICAgICAgc2xpZGVyIGluIHRoZSB0b3AgcmlnaHQgY29ybmVyIHdo
aWNoIGNhbiBiZSBkcmFnZ2VkIHRvIHZpZXcgdGhlIHN1bW1hcnkgcGFnZSAnTiBkYXlzIGFnbycu
IFRoZSBkZWZhdWx0CisgICAgICAgIHZpZXcgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgorCisgICAg
ICAgICogcHVibGljL3YzL2luZGV4Lmh0bWw6IEFkZCBuZXcgcmVzb3VyY2VzOiBjb250aW51b3Vz
LWRvbWFpbi10b29sYmFyLmpzLCBzdW1tYXJ5LXRvb2xiYXIuanMKKyAgICAgICAgKiBwdWJsaWMv
djMvbWFpbi5qczogQWRkIG5ldyBzdW1tYXJ5VG9vbGJhciwgYW5kIGluaXRpYWxpemUgc3VtbWFy
eSBwYWdlcyB3aXRoIGl0LgorICAgICAgICAobWFpbik6CisgICAgICAgICogcHVibGljL3YzL3Bh
Z2VzL2NoYXJ0cy10b29sYmFyLmpzOiBBYnN0cmFjdCB0aGUgc2xpZGVyIHRvb2xiYXIgaW50byBh
IG5ldyBjbGFzcywgYW5kIGluaGVyaXQgZnJvbSBpdC4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIp
OiBOb3csIENoYXJ0c1Rvb2xiYXIgaXMgYSBtb3N0bHkgdGhpbiB3cmFwcGVyIHJvdW5kIFNsaWRl
clRvb2xiYXIgYW5kIGltcGxlbWVudHMgdGhlCisgICAgICAgICdBZGQgUGFuZScgYnV0dG9uICsg
ZnVuY3Rpb25hbGl0eS4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLnJlbmRlcik6
CisgICAgICAgIChDaGFydHNUb29sYmFyLnByb3RvdHlwZS5zZXRTdGFydFRpbWUpOiBFbnN1cmUg
c3RhcnRUaW1lIGlzIG5ldmVyIGxlc3MgdGhhbiAxLgorICAgICAgICAoQ2hhcnRzVG9vbGJhci5o
dG1sVGVtcGxhdGUpOiBNb3ZlZCAnQWRkIFBhbmUnIGJ1dHRvbnMgZnJvbSBDb250aW51b3VzRG9t
YWluVG9vbGJhci4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIuY3NzVGVtcGxhdGUpOiBNb3ZlZCAn
QWRkIFBhbmUnIHN0eWxpbmcgZnJvbSBDb250aW51b3VzRG9tYWluVG9vbGJhci4KKyAgICAgICAg
KENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLnNldE51bWJlck9mRGF5c0NhbGxiYWNrKTogTW92ZWQg
dG8gQ29udGludW91c0RvbWFpblRvb2xiYXIuCisgICAgICAgIChDaGFydHNUb29sYmFyLnByb3Rv
dHlwZS5fc2V0SW5wdXRFbGVtZW50VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKENoYXJ0c1Rvb2xi
YXIucHJvdG90eXBlLl9lbnRlclRleHRNb2RlKTogRGl0dG8uCisgICAgICAgIChDaGFydHNUb29s
YmFyLnByb3RvdHlwZS5fZXhpdFRleHRNb2RlKTogRGl0dG8uCisgICAgICAgIChDaGFydHNUb29s
YmFyLnByb3RvdHlwZS5fc2xpZGVyVmFsdWVNYXlIYXZlQ2hhbmdlZCk6IERpdHRvLgorICAgICAg
ICAoQ2hhcnRzVG9vbGJhci5wcm90b3R5cGUuX2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQpOiBE
aXR0by4KKyAgICAgICAgKENoYXJ0c1Rvb2xiYXIucHJvdG90eXBlLl9jYWxsTnVtYmVyT2ZEYXlz
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKiBwdWJsaWMvdjMvcGFnZXMvY29udGludW91cy1k
b21haW4tdG9vbGJhci5qczogQ29waWVkIGluaXRpYWxseSBmcm9tCisgICAgICAgIFdlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnRzLXRvb2xiYXIuanMuCisgICAg
ICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhcik6IE5ldy4gQmFzZWQgb24gQ2hhcnRzVG9vbGJh
ciBhbmQgY29udGFpbnMgcHJpbWFyeSBsb2dpYyBmb3IKKyAgICAgICAgYSAnc2xpZGVyJyB0aGF0
IGFkanVzdHMgdGltZS4gVXNlZCBieSBib3RoIENoYXJ0c1Rvb2xiYXIgYW5kIFN1bW1hcnlUb29s
YmFyLiBDb25zdHJ1Y3RvciBhZGRzCisgICAgICAgIGEgdGhpcy5faW5UZXh0TW9kZSA9IGZhbHNl
IGRlZmF1bHQsIHRvIGZpZ3VyZSBvdXQgaWYgdGV4dCBtb2RlIGlzIGN1cnJlbnRseSBpbiB1c2Ug
aW4gU3VtbWFyeVRvb2xiYXIuCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90
b3R5cGUucmVuZGVyKTogTW92ZWQgZnJvbSBDaGFydHNUb29sYmFyLgorICAgICAgICAoQ29udGlu
dW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBlLnNldE51bWJlck9mRGF5c0NhbGxiYWNrKTogRGl0
dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90b3R5cGUuc2V0U3RhcnRU
aW1lKTogRGl0dG8uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90b3R5cGUu
X191cGRhdGVTbGlkZXJXaXRoTnVtYmVyT2ZEYXlzKTogUmVuYW1lZCBmcm9tIF9zZXRJbnB1dEVs
ZW1lbnRWYWx1ZS4uCisgICAgICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5wcm90b3R5cGUu
X2VudGVyVGV4dE1vZGUpOiBEaXR0bywgYnV0IGV4cGFuZGVkIHRvIHVwZGF0ZSB0aGlzLl9pblRl
eHRNb2RlLgorICAgICAgICAoQ29udGludW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBlLl9leGl0
VGV4dE1vZGUpOiBEaXR0byB0byBfZW50ZXJUZXh0TW9kZS4KKyAgICAgICAgKENvbnRpbnVvdXNE
b21haW5Ub29sYmFyLnByb3RvdHlwZS5fc2xpZGVyVmFsdWVNYXlIYXZlQ2hhbmdlZCk6IE1vdmVk
IGZyb20gQ2hhcnRzVG9vbGJhci4KKyAgICAgICAgKENvbnRpbnVvdXNEb21haW5Ub29sYmFyLnBy
b3RvdHlwZS5fZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoQ29u
dGludW91c0RvbWFpblRvb2xiYXIucHJvdG90eXBlLl9jYWxsTnVtYmVyT2ZEYXlzQ2FsbGJhY2sp
OiBEaXR0by4KKyAgICAgICAgKENvbnRpbnVvdXNEb21haW5Ub29sYmFyLmRheXNDb3VudExhYmVs
VGV4dCk6IEFkZGVkIHNvIGNvbnRlbnQgb2YgZGF5c0NvdW50TGFiZWwgY2FuIGJlIG1vZGlmaWVk
LgorICAgICAgICAoQ29udGludW91c0RvbWFpblRvb2xiYXIuaHRtbFRlbXBsYXRlKTogTW92ZWQg
ZnJvbSBDaGFydHNUb29sYmFyLCBidXQgcmVtb3ZlcyAnQWRkIFBhbmUnIGJ1dHRvbiBhbmQKKyAg
ICAgICAgYWxsb3dzIGN1c3RvbWl6YXRpb24gb2YgZGF5c0NvdW50IGxhYmVsIHRleHQuCisgICAg
ICAgIChDb250aW51b3VzRG9tYWluVG9vbGJhci5jc3NUZW1wbGF0ZSk6IE1vdmVkIGZyb20gQ2hh
cnRzVG9vbGJhciwgZXhjZXB0IGZvciAnQWRkIFBhbmUnIHN0eWxpbmcuCisgICAgICAgICogcHVi
bGljL3YzL3BhZ2VzL2RvbWFpbi1jb250cm9sLXRvb2xiYXIuanM6CisgICAgICAgIChEb21haW5D
b250cm9sVG9vbGJhci5wcm90b3R5cGUuc2V0U3RhcnRUaW1lKTogQWRqdXN0IGxvZ2ljIHRvIGFj
Y291bnQgZm9yIDAgZGF5IHZhbHVlLgorICAgICAgICAoRG9tYWluQ29udHJvbFRvb2xiYXIucHJv
dG90eXBlLnNldE51bWJlck9mRGF5cyk6IERpdHRvLgorICAgICAgICAoRG9tYWluQ29udHJvbFRv
b2xiYXIpOgorICAgICAgICAqIHB1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanM6CisgICAg
ICAgIChTdW1tYXJ5UGFnZSk6IEFkZCBhIGNvbnRydWN0b3IgYXJndW1lbnQgZm9yIGEgdG9vbGJh
ci4KKyAgICAgICAgKFN1bW1hcnlQYWdlLnByb3RvdHlwZS5vcGVuKTogU3BsaXQgcHJpbWFyeSBs
b2dpYyBpbnRvIHVwZGF0ZUFuZFJlbmRlckZvclJhbmdlLgorICAgICAgICAoU3VtbWFyeVBhZ2Uu
cHJvdG90eXBlLmZ1enp5TWF0Y2hlc1JvdXRlTmFtZSk6IEFkZGVkLiBVc2VkIHRvIG1hdGNoIHNp
bWlsYXIgc3VtbWFyeSBwYWdlcyBieSBjaGVja2luZyByb3V0ZU5hbWUuCisgICAgICAgIChTdW1t
YXJ5UGFnZS5wcm90b3R5cGUudXBkYXRlQW5kUmVuZGVyRm9yUmFuZ2UpOiBOZXcuIFVzZWQgdG8g
Y2hhbmdlICMgZGF5cyBhZ28gYXQgd2hpY2ggc3VtbWFyeQorICAgICAgICBjYWxjdWxhdGlvbnMg
d2VyZSBhcHBsaWVkLgorICAgICAgICAoU3VtbWFyeVBhZ2UucHJvdG90eXBlLnNldE51bWJlck9m
RGF5c0Zyb21Ub29sYmFyKTogQ2FsbGJhY2sgZm9yIHdoZW4gc2xpZGVyIG9yIHRleHRNb2RlICdk
YXlzJyB2YWx1ZSBjaGFuZ2VzLgorICAgICAgICAoU3VtbWFyeVRvb2xiYXIucHJvdG90eXBlLl9y
ZW5kZXJVcGRhdGVEYXlDb3VudEFuZERlc2NyaXB0aW9uKTogVXBkYXRlIHNsaWRlciB0ZXh0IHdo
ZW4gZ29pbmcgYmV0d2VlbiAwIGFuZCA+IDAgZGF5IHJhbmdlLgorICAgICAgICAqIHB1YmxpYy92
My9wYWdlcy9zdW1tYXJ5LXRvb2xiYXIuanM6IE5ldy4gQWRkcyBhIHNsaWRlciBmb3IgdGhlIHN1
bW1hcnkgcGFnZSB0byByZS1ldmFsdWF0ZSBhdCBzb21lICMgb2YgZGF5cyBhZ28uCisgICAgICAg
IChTdW1tYXJ5VG9vbGJhcik6IE5ldy4KKyAgICAgICAgKFN1bW1hcnlUb29sYmFyLnByb3RvdHlw
ZS5lbmRUaW1lKTogTmV3LiBBbHdheXMgdXNlIGEgMSBkYXkgd2luZG93IGJ5IHN1YnRyYWN0aW5n
IDEgZGF5IGZyb20gc3RhcnRUaW1lKCkuCisgICAgICAgIGFib3ZlIDAsIG9yIHdoZW4gaW4gdGV4
dE1vZGUuCisgICAgICAgIChTdW1tYXJ5VG9vbGJhci5wcm90b3R5cGUucmVuZGVyKTogRHluYW1p
Y2FsbHkgYWRqdXN0IHN0eWxpbmcgYmFzZWQgb24gdGhpcy5fbnVtYmVyT2ZEYXlzIHZhbHVlLgor
ICAgICAgICAoU3VtbWFyeVRvb2xiYXIucHJvdG90eXBlLl9lbnRlclRleHRNb2RlKTogVXNlIHRo
aXMuZW5xdWV1ZVRvUmVuZGVyIHRvIHJlbmRlciBhcy1uZWVkZWQuCisgICAgICAgIChTdW1tYXJ5
VG9vbGJhci5wcm90b3R5cGUuX2V4aXRUZXh0TW9kZSk6IERpdHRvLgorICAgICAgICAqIHB1Ymxp
Yy92My9wYWdlcy9wYWdlLXJvdXRlci5qczoKKyAgICAgICAgKFBhZ2VSb3V0ZXIucHJvdG90eXBl
LnJvdXRlKTogIE1vdmluZyBmcm9tIG9uZSBzdW1tYXJ5IHBhZ2UgdG8gYW5vdGhlciBzdW1tYXJ5
IGRvZXMgbm90IGN1cnJlbnRseSBwcm9wYWdhdGUgc3RhdGUsCisgICAgICAgIHNpbmNlIHJvdXRl
TmFtZSgpIGJldHdlZW4gdHdvIHN1bW1hcnkgcGFnZXMgaXMgZGlmZmVyZW50IChlLmcuIC9zdW1t
YXJ5L3RydW5rLCAvc3VtbWFyeS9zeXN0ZW0pLiBUbyBnZXQgYXJvdW5kIHRoaXMsIHdlCisgICAg
ICAgIG5vdyBjaGVjayBmb3IgYSBmdW5jdGlvbiBjYWxsZWQgJ2Z1enp5TWF0Y2hlc1JvdXRlTmFt
ZScgb24gX2N1cnJlbnRQYWdlIGJldHdlZW4gbmF2aWdhdGlvbnMgYW5kIHVzZSBpdCB0byBkZXRl
cm1pbmUgaWYgdGhlCisgICAgICAgIGRlc3RpbmF0aW9uUGFnZSBzaG91bGQgaGF2ZSBpdHMgc3Rh
dGUgcHJvcGFnYXRlZCBmcm9tIF9jdXJyZW50UGFnZS4gRWFjaCAnUGFnZScgbWF5IGltcGxlbWVu
dCB0aGVpciBvd24gZnV6enlNYXRjaGVzUm91dGVOYW1lLgorCiAyMDE5LTEyLTE1ICBaaGlmZWkg
RmFuZyAgPHpoaWZlaV9mYW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgcG93ZXIgbWV0cmlj
IHRvIHBlcmYgZGFzaGJvYXJkCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2luZGV4Lmh0bWwKaW5kZXggZTczMTA3N2Y2ZWJlMDA0MDdhZGIwNjhjN2ZmY2JmNjFlYTY2Y2Rj
Yy4uZGY3NmQ3ZDBlYmMzYTAxN2EzMjM4NzBkYTRmYmZhMTA1ZWFiMmEzNCAxMDA2NDQKLS0tIGEv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sCisrKyBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRtbApAQCAtMTEzLDYgKzExMyw3
IEBAIFJ1biB0b29scy9idW5kbGUtdjMtc2NyaXB0cyB0byBzcGVlZCB1cCB0aGUgbG9hZCB0aW1l
IGZvciBwcm9kdWN0aW9uLmApOwogICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvZG9tYWluLWNv
bnRyb2wtdG9vbGJhci5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9k
YXNoYm9hcmQtdG9vbGJhci5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdl
cy9kYXNoYm9hcmQtcGFnZS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdl
cy9jb250aW51b3VzLWRvbWFpbi10b29sYmFyLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlw
dCBzcmM9InBhZ2VzL2NoYXJ0LXBhbmUtc3RhdHVzLXZpZXcuanMiPjwvc2NyaXB0PgogICAgICAg
ICA8c2NyaXB0IHNyYz0icGFnZXMvY2hhcnQtcGFuZS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxz
Y3JpcHQgc3JjPSJwYWdlcy9jaGFydHMtdG9vbGJhci5qcyI+PC9zY3JpcHQ+CkBAIC0xMjMsNiAr
MTI0LDcgQEAgUnVuIHRvb2xzL2J1bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2Fk
IHRpbWUgZm9yIHByb2R1Y3Rpb24uYCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9jcmVh
dGUtYW5hbHlzaXMtdGFzay1wYWdlLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9
InBhZ2VzL2J1aWxkLXJlcXVlc3QtcXVldWUtcGFnZS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxz
Y3JpcHQgc3JjPSJwYWdlcy9zdW1tYXJ5LXBhZ2UuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2Ny
aXB0IHNyYz0icGFnZXMvc3VtbWFyeS10b29sYmFyLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNj
cmlwdCBzcmM9InBhZ2VzL3Rlc3QtZnJlc2huZXNzLXBhZ2UuanMiPjwvc2NyaXB0PgogCiAgICAg
ICAgIDxzY3JpcHQgc3JjPSJtYWluLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbWFpbi5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvbWFpbi5qcwppbmRleCA1N2EwNmMzNmMxOGExYmQzYTVjZGQ5NmFhZjhi
OTllNWM2NzZhODcxLi5hYjk3ZGM4ZTEwZmU3MGQwYWVhMWMwMGEyMmJkZjY4MGRiNjBmNjY0IDEw
MDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21haW4uanMKKysr
IGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tYWluLmpzCkBAIC0yNiwxMSAr
MjYsMTIgQEAgZnVuY3Rpb24gbWFpbigpIHsKICAgICAgICAgICAgICAgICBkYXNoYm9hcmRQYWdl
cy5wdXNoKG5ldyBEYXNoYm9hcmRQYWdlKG5hbWUsIG1hbmlmZXN0LmRhc2hib2FyZHNbbmFtZV0s
IGRhc2hib2FyZFRvb2xiYXIpKTsKICAgICAgICAgfQogCisgICAgICAgIGNvbnN0IHN1bW1hcnlU
b29sYmFyID0gbmV3IFN1bW1hcnlUb29sYmFyOwogICAgICAgICBjb25zdCBzdW1tYXJ5UGFnZXMg
PSBbXTsKICAgICAgICAgbGV0IHRlc3RGcmVzaG5lc3NQYWdlID0gbnVsbDsKICAgICAgICAgaWYg
KG1hbmlmZXN0LnN1bW1hcnlQYWdlcykgewogICAgICAgICAgICAgZm9yIChjb25zdCBzdW1tYXJ5
UGFnZSBvZiBtYW5pZmVzdC5zdW1tYXJ5UGFnZXMpCi0gICAgICAgICAgICAgICAgc3VtbWFyeVBh
Z2VzLnB1c2gobmV3IFN1bW1hcnlQYWdlKHN1bW1hcnlQYWdlKSk7CisgICAgICAgICAgICAgICAg
c3VtbWFyeVBhZ2VzLnB1c2gobmV3IFN1bW1hcnlQYWdlKHN1bW1hcnlQYWdlLCBzdW1tYXJ5VG9v
bGJhcikpOwogICAgICAgICAgICAgdGVzdEZyZXNobmVzc1BhZ2UgPSBuZXcgVGVzdEZyZXNobmVz
c1BhZ2UobWFuaWZlc3Quc3VtbWFyeVBhZ2VzLCBtYW5pZmVzdC50ZXN0QWdlVG9sZXJhbmNlSW5I
b3Vycyk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9wYWdlcy9jaGFydHMtdG9vbGJhci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY2hhcnRzLXRvb2xiYXIuanMKaW5kZXggYTA5N2UzNDhlODdm
OTdiYzFiOTFiOTc5OThmYWUyNDdhNjc2ODFmYi4uOWU2Mzk5MmZmNTdmNDdmNjMwOGRkMjMyOWIw
N2I5NDU3ODA5NGU0MCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9wYWdlcy9jaGFydHMtdG9vbGJhci5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL3BhZ2VzL2NoYXJ0cy10b29sYmFyLmpzCkBAIC0xLDI0ICsxLDggQEAKIAot
Y2xhc3MgQ2hhcnRzVG9vbGJhciBleHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsKK2NsYXNz
IENoYXJ0c1Rvb2xiYXIgZXh0ZW5kcyBDb250aW51b3VzRG9tYWluVG9vbGJhciB7CiAgICAgY29u
c3RydWN0b3IoKQogICAgIHsKLSAgICAgICAgc3VwZXIoJ2NoYXJzLXRvb2xiYXInLCA3KTsKLQot
ICAgICAgICB0aGlzLl9taW5EYXlDb3VudCA9IDE7Ci0gICAgICAgIHRoaXMuX21heERheUNvdW50
ID0gMzY2OwotCi0gICAgICAgIHRoaXMuX251bWJlck9mRGF5c0NhbGxiYWNrID0gbnVsbDsKLSAg
ICAgICAgdGhpcy5fc2xpZGVyID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLnNsaWRl
cicpOwotICAgICAgICB0aGlzLl9zbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhp
cy5fc2xpZGVyVmFsdWVNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhpcy5f
c2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX3NsaWRlclZhbHVlTWF5
SGF2ZUNoYW5nZWQuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgdGhpcy5fZWRpdG9yID0gdGhpcy5j
b250ZW50KCkucXVlcnlTZWxlY3RvcignLmVkaXRvcicpOwotICAgICAgICB0aGlzLl9lZGl0b3Iu
YWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLl9lbnRlclRleHRNb2RlLmJpbmQodGhpcykp
OwotICAgICAgICB0aGlzLl9lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuX2V4
aXRUZXh0TW9kZS5iaW5kKHRoaXMpKTsKLSAgICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50TGlz
dGVuZXIoJ2lucHV0JywgdGhpcy5fZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdlZC5iaW5kKHRoaXMp
KTsKLSAgICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMu
X2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgdGhpcy5f
bGFiZWxTcGFuID0gdGhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignLmRheS1jb3VudCcpOwor
ICAgICAgICBzdXBlcignY2hhcnRzLXRvb2xiYXInLCA3KTsKIAogICAgICAgICB0aGlzLl9hZGRQ
YW5lQ2FsbGJhY2sgPSBudWxsOwogICAgICAgICB0aGlzLl9wYW5lU2VsZWN0b3IgPSB0aGlzLmNv
bnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdwYW5lLXNlbGVjdG9yJykuY29tcG9uZW50KCk7CkBAIC0z
NSwxNCArMTksNiBAQCBjbGFzcyBDaGFydHNUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRv
b2xiYXIgewogICAgIHsKICAgICAgICAgc3VwZXIucmVuZGVyKCk7CiAgICAgICAgIHRoaXMuX3Bh
bmVTZWxlY3Rvci5lbnF1ZXVlVG9SZW5kZXIoKTsKLSAgICAgICAgdGhpcy5fbGFiZWxTcGFuLnRl
eHRDb250ZW50ID0gdGhpcy5fbnVtYmVyT2ZEYXlzOwotICAgICAgICB0aGlzLl9zZXRJbnB1dEVs
ZW1lbnRWYWx1ZSh0aGlzLl9udW1iZXJPZkRheXMpOwotICAgIH0KLQotICAgIHNldE51bWJlck9m
RGF5c0NhbGxiYWNrKGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoIWNh
bGxiYWNrIHx8IGNhbGxiYWNrIGluc3RhbmNlb2YgRnVuY3Rpb24pOwotICAgICAgICB0aGlzLl9u
dW1iZXJPZkRheXNDYWxsYmFjayA9IGNhbGxiYWNrOwogICAgIH0KIAogICAgIHNldEFkZFBhbmVD
YWxsYmFjayhjYWxsYmFjaykKQEAgLTUzLDYxICsyOSw3IEBAIGNsYXNzIENoYXJ0c1Rvb2xiYXIg
ZXh0ZW5kcyBEb21haW5Db250cm9sVG9vbGJhciB7CiAKICAgICBzZXRTdGFydFRpbWUoc3RhcnRU
aW1lKQogICAgIHsKLSAgICAgICAgdGhpcy5fZXhpdFRleHRNb2RlKCk7Ci0gICAgICAgIGlmIChz
dGFydFRpbWUpCi0gICAgICAgICAgICBzdXBlci5zZXRTdGFydFRpbWUoc3RhcnRUaW1lKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3VwZXIuc2V0TnVtYmVyT2ZEYXlzKDcpOwotICAgIH0K
LQotICAgIF9zZXRJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X3NsaWRlci52YWx1ZSA9IE1hdGgucG93KHZhbHVlLCAxLzMpOwotICAgICAgICB0aGlzLl9zbGlk
ZXIubWluID0gTWF0aC5wb3codGhpcy5fbWluRGF5Q291bnQsIDEvMyk7Ci0gICAgICAgIHRoaXMu
X3NsaWRlci5tYXggPSBNYXRoLnBvdyh0aGlzLl9tYXhEYXlDb3VudCwgMS8zKTsKLSAgICAgICAg
dGhpcy5fc2xpZGVyLnN0ZXAgPSAnYW55JzsKLSAgICAgICAgdGhpcy5fZWRpdG9yLnZhbHVlID0g
dmFsdWU7Ci0gICAgfQotCi0gICAgX2VudGVyVGV4dE1vZGUoZXZlbnQpCi0gICAgewotICAgICAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICB0aGlzLl9lZGl0b3Iuc3R5bGUub3Bh
Y2l0eSA9IDE7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5zdHlsZS5tYXJnaW5MZWZ0ID0gJy0yLjVy
ZW0nOwotICAgICAgICB0aGlzLl9sYWJlbFNwYW4uc3R5bGUub3BhY2l0eSA9IDA7Ci0gICAgICAg
IHRoaXMuX3NsaWRlci5zdHlsZS5vcGFjaXR5ID0gMDsKLSAgICB9Ci0KLSAgICBfZXhpdFRleHRN
b2RlKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50KQotICAgICAgICAgICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgdGhpcy5fZWRpdG9yLnN0eWxlLm9wYWNpdHkgPSAw
OwotICAgICAgICB0aGlzLl9lZGl0b3Iuc3R5bGUubWFyZ2luTGVmdCA9IG51bGw7Ci0gICAgICAg
IHRoaXMuX2xhYmVsU3Bhbi5zdHlsZS5vcGFjaXR5ID0gMTsKLSAgICAgICAgdGhpcy5fc2xpZGVy
LnN0eWxlLm9wYWNpdHkgPSAxOwotICAgIH0KLQotICAgIF9zbGlkZXJWYWx1ZU1heUhhdmVDaGFu
Z2VkKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIG51bWJlck9mRGF5cyA9IE1hdGgucm91bmQo
TWF0aC5wb3cocGFyc2VGbG9hdCh0aGlzLl9zbGlkZXIudmFsdWUpLCAzKSk7Ci0gICAgICAgIHRo
aXMuX2NhbGxOdW1iZXJPZkRheXNDYWxsYmFjayhldmVudCwgbnVtYmVyT2ZEYXlzKTsKLSAgICB9
Ci0KLSAgICBfZWRpdG9yVmFsdWVNYXlIYXZlQ2hhbmdlZChldmVudCkKLSAgICB7Ci0gICAgICAg
IHZhciByYXdOdW1iZXIgPSBNYXRoLnJvdW5kKHBhcnNlRmxvYXQodGhpcy5fZWRpdG9yLnZhbHVl
KSk7Ci0gICAgICAgIHZhciBudW1iZXJPZkRheXMgPSBNYXRoLm1heCh0aGlzLl9taW5EYXlDb3Vu
dCwgTWF0aC5taW4odGhpcy5fbWF4RGF5Q291bnQsIHJhd051bWJlcikpOwotICAgICAgICBpZiAo
dGhpcy5fZWRpdG9yLnZhbHVlICE9IG51bWJlck9mRGF5cykKLSAgICAgICAgICAgIHRoaXMuX2Vk
aXRvci52YWx1ZSA9IG51bWJlck9mRGF5czsKLSAgICAgICAgdGhpcy5fY2FsbE51bWJlck9mRGF5
c0NhbGxiYWNrKGV2ZW50LCBudW1iZXJPZkRheXMpOwotICAgIH0KLQotICAgIF9jYWxsTnVtYmVy
T2ZEYXlzQ2FsbGJhY2soZXZlbnQsIG51bWJlck9mRGF5cykKLSAgICB7Ci0gICAgICAgIHZhciBz
aG91bGRVcGRhdGVTdGF0ZSA9IGV2ZW50LnR5cGUgPT0gJ2NoYW5nZSc7Ci0gICAgICAgIGlmICgo
dGhpcy5udW1iZXJPZkRheXMoKSAhPSBudW1iZXJPZkRheXMgfHwgc2hvdWxkVXBkYXRlU3RhdGUp
ICYmIHRoaXMuX251bWJlck9mRGF5c0NhbGxiYWNrKQotICAgICAgICAgICAgdGhpcy5fbnVtYmVy
T2ZEYXlzQ2FsbGJhY2sobnVtYmVyT2ZEYXlzLCBzaG91bGRVcGRhdGVTdGF0ZSk7CisgICAgICAg
IHN1cGVyLnNldFN0YXJ0VGltZShNYXRoLm1heCgxLCBzdGFydFRpbWUpKTsKICAgICB9CiAKICAg
ICBfdG9nZ2xlUGFuZVNlbGVjdG9yKGV2ZW50KQpAQCAtMTQ1LDM0ICs2NywyNSBAQCBjbGFzcyBD
aGFydHNUb29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJvbFRvb2xiYXIgewogICAgICAgICAgICAg
dGhpcy5fYWRkUGFuZUNhbGxiYWNrKHBsYXRmb3JtLCBtZXRyaWMpOwogICAgIH0KIAotCiAgICAg
c3RhdGljIGh0bWxUZW1wbGF0ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gYAotICAgICAgICAg
ICAgPG5hdiBjbGFzcz0iY2hhcnRzLXRvb2xiYXIiPgorICAgICAgICAgICAgPG5hdj4KICAgICAg
ICAgICAgICAgICA8dWwgY2xhc3M9ImJ1dHRvbmVkLXRvb2xiYXIiPgogICAgICAgICAgICAgICAg
ICAgICA8bGk+PGEgaHJlZj0iIyIgY2xhc3M9InBhbmUtc2VsZWN0b3Itb3BlbmVyIj5BZGQgcGFu
ZTwvYT48L2xpPgogICAgICAgICAgICAgICAgIDwvdWw+Ci0gICAgICAgICAgICAgICAgPHVsIGNs
YXNzPSJidXR0b25lZC10b29sYmFyIj4KLSAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJz
dGFydC10aW1lLXNsaWRlciI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJzbGlkZXIiIHR5cGU9InJhbmdl
Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImVkaXRvciIgdHlw
ZT0ibnVtYmVyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFi
ZWwiPjxzcGFuIGNsYXNzPSJkYXktY291bnQiIHRhYmluZGV4PSIwIj4/PC9zcGFuPiBkYXlzPC9z
cGFuPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KLSAgICAgICAgICAgICAgICAg
ICAgPC9saT4KLSAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgIDxkaXYgY2xh
c3M9InBhbmUtc2VsZWN0b3ItY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgPHBhbmUt
c2VsZWN0b3I+PC9wYW5lLXNlbGVjdG9yPgogICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAg
ICAgICAgPC9uYXY+YDsKKyAgICAgICAgICAgICAgICAkeyBzdXBlci5odG1sVGVtcGxhdGUoKSB9
CisgICAgICAgICAgICA8L25hdj4KKyAgICAgICAgYDsKICAgICB9CiAKICAgICBzdGF0aWMgY3Nz
VGVtcGxhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFRvb2xiYXIuY3NzVGVtcGxhdGUoKSAr
IGAKLQotICAgICAgICAgICAgLmNoYXJ0cy10b29sYmFyID4gLmJ1dHRvbmVkLXRvb2xiYXI6Zmly
c3QtY2hpbGQgeworICAgICAgICByZXR1cm4gc3VwZXIuY3NzVGVtcGxhdGUoKSArIGAKKyAgICAg
ICAgICAgIG5hdiA+IC5idXR0b25lZC10b29sYmFyOmZpcnN0LWNoaWxkIHsKICAgICAgICAgICAg
ICAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTsKICAgICAgICAgICAgIH0KIApAQCAtMTgwLDcgKzkz
LDcgQEAgY2xhc3MgQ2hhcnRzVG9vbGJhciBleHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsK
ICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIwNCwgMTUzLCA1MSwgMC4xKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgLmNoYXJ0cy10b29sYmFyID4gLnBhbmUtc2VsZWN0
b3ItY29udGFpbmVyIHsKKyAgICAgICAgICAgIG5hdiA+IC5wYW5lLXNlbGVjdG9yLWNvbnRhaW5l
ciB7CiAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgICAgICAg
IHJpZ2h0OiAxcmVtOwogICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKQEAgLTE5MiwzOSArMTA1
LDggQEAgY2xhc3MgQ2hhcnRzVG9vbGJhciBleHRlbmRzIERvbWFpbkNvbnRyb2xUb29sYmFyIHsK
ICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAg
ICAgICAgICAgICAgICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMC41cmVtKTsKICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLmJ1dHRvbmVkLXRvb2xiYXIgLnN0YXJ0LXRpbWUt
c2xpZGVyIHsKLSAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMnJlbTsKLSAgICAgICAgICAg
ICAgICBsaW5lLWhlaWdodDogMWVtOwotICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVt
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAuc3RhcnQtdGltZS1zbGlkZXIgbGFiZWwg
ewotICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLnN0YXJ0LXRpbWUtc2xpZGVyIC5zbGlkZXIgewotICAgICAgICAgICAg
ICAgIGhlaWdodDogMC44cmVtOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAuc3RhcnQt
dGltZS1zbGlkZXIgLmVkaXRvciB7Ci0gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRl
OwotICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7Ci0gICAgICAgICAgICAgICAgd2lkdGg6IDRy
ZW07Ci0gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7Ci0gICAgICAgICAgICAg
ICAgZm9udC1zaXplOiAwLjhyZW07Ci0gICAgICAgICAgICAgICAgaGVpZ2h0OiAwLjlyZW07Ci0g
ICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKLSAgICAgICAgICAgICAgICBib3JkZXI6IHNv
bGlkIDFweCAjY2NjOwotICAgICAgICAgICAgICAgIHotaW5kZXg6IDU7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC5zdGFydC10aW1lLXNsaWRlciAuZGF5LWNvdW50IHsKLSAgICAgICAg
ICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgICAgICAgICAgICAgdGV4dC1hbGln
bjogcmlnaHQ7Ci0gICAgICAgICAgICAgICAgd2lkdGg6IDJyZW07Ci0gICAgICAgICAgICB9CiAg
ICAgICAgIGA7CiAgICAgfQotCiB9CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgnY2hh
cnRzLXRvb2xiYXInLCBDaGFydHNUb29sYmFyKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY29udGludW91cy1kb21haW4tdG9vbGJhci5qcyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvY29udGludW91cy1kb21h
aW4tdG9vbGJhci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZGUwMThlMWRkNDUxODUyNTNkMTVjMWRkNWQ3YTYw
ZWFmMzRiMjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9wYWdlcy9jb250aW51b3VzLWRvbWFpbi10b29sYmFyLmpzCkBAIC0wLDAgKzEsMTY0
IEBACisKK2NsYXNzIENvbnRpbnVvdXNEb21haW5Ub29sYmFyIGV4dGVuZHMgRG9tYWluQ29udHJv
bFRvb2xiYXIgeworICAgIGNvbnN0cnVjdG9yKG5hbWUsIGRlZmF1bHROdW1iZXJPZkRheXMpCisg
ICAgeworICAgICAgICBzdXBlcihuYW1lLCBkZWZhdWx0TnVtYmVyT2ZEYXlzKTsKKworICAgICAg
ICB0aGlzLl9kZWZhdWx0TWluRGF5Q291bnQgPSAxOworICAgICAgICB0aGlzLl9kZWZhdWx0TWF4
RGF5Q291bnQgPSAzNjY7CisgICAgICAgIHRoaXMuX2RlZmF1bHROdW1iZXJPZkRheXMgPSBkZWZh
dWx0TnVtYmVyT2ZEYXlzOworICAgICAgICB0aGlzLl9zZXRBbGxvd2VkRGF5Q291bnRSYW5nZSgp
OworCisgICAgICAgIHRoaXMuX251bWJlck9mRGF5c0NhbGxiYWNrID0gbnVsbDsKKyAgICAgICAg
dGhpcy5fc2xpZGVyID0gdGhpcy5jb250ZW50KCdzbGlkZXInKTsKKyAgICAgICAgdGhpcy5fc2xp
ZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX3NsaWRlclZhbHVlTWF5SGF2ZUNo
YW5nZWQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX3NsaWRlci5hZGRFdmVudExpc3RlbmVy
KCdtb3VzZW1vdmUnLCB0aGlzLl9zbGlkZXJWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykp
OworCisgICAgICAgIHRoaXMuX2luVGV4dE1vZGUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZWRp
dG9yID0gdGhpcy5jb250ZW50KCdlZGl0b3InKTsKKyAgICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2
ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5fZW50ZXJUZXh0TW9kZS5iaW5kKHRoaXMpKTsKKyAg
ICAgICAgdGhpcy5fZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLl9leGl0VGV4
dE1vZGUuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2VkaXRvci5hZGRFdmVudExpc3RlbmVy
KCdpbnB1dCcsIHRoaXMuX2VkaXRvclZhbHVlTWF5SGF2ZUNoYW5nZWQuYmluZCh0aGlzKSk7Cisg
ICAgICAgIHRoaXMuX2VkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9lZGl0
b3JWYWx1ZU1heUhhdmVDaGFuZ2VkLmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMuX2RheUNv
dW50Q29udGFpbmVyID0gdGhpcy5jb250ZW50KCdkYXktY291bnQnKTsKKyAgICB9CisKKyAgICBy
ZW5kZXIoKQorICAgIHsKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7CisgICAgICAgIHRoaXMuX2Rh
eUNvdW50Q29udGFpbmVyLnRleHRDb250ZW50ID0gdGhpcy5fbnVtYmVyT2ZEYXlzID09IDAgPyAn
JyA6IHRoaXMuX251bWJlck9mRGF5czsKKyAgICAgICAgdGhpcy5fdXBkYXRlU2xpZGVyV2l0aE51
bWJlck9mRGF5cyh0aGlzLl9udW1iZXJPZkRheXMpOworICAgIH0KKworICAgIHNldE51bWJlck9m
RGF5c0NhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoIWNh
bGxiYWNrIHx8IGNhbGxiYWNrIGluc3RhbmNlb2YgRnVuY3Rpb24pOworICAgICAgICB0aGlzLl9u
dW1iZXJPZkRheXNDYWxsYmFjayA9IGNhbGxiYWNrOworICAgIH0KKworICAgIHNldFN0YXJ0VGlt
ZShzdGFydFRpbWU9dGhpcy5fZGVmYXVsdE51bWJlck9mRGF5cykKKyAgICB7CisgICAgICAgIHRo
aXMuX2V4aXRUZXh0TW9kZSgpOworICAgICAgICBpZiAoc3RhcnRUaW1lKQorICAgICAgICAgICAg
c3VwZXIuc2V0U3RhcnRUaW1lKHN0YXJ0VGltZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHN1cGVyLnNldE51bWJlck9mRGF5cyh0aGlzLl9kZWZhdWx0TnVtYmVyT2ZEYXlzKTsKKyAgICB9
CisKKyAgICBfc2V0QWxsb3dlZERheUNvdW50UmFuZ2UobWluRGF5Q291bnQ9dGhpcy5fZGVmYXVs
dE1pbkRheUNvdW50LCBtYXhEYXlDb3VudD10aGlzLl9kZWZhdWx0TWF4RGF5Q291bnQpCisgICAg
eworICAgICAgICB0aGlzLl9taW5EYXlDb3VudCA9IG1pbkRheUNvdW50OworICAgICAgICB0aGlz
Ll9tYXhEYXlDb3VudCA9IG1heERheUNvdW50OworICAgIH0KKworICAgIF91cGRhdGVTbGlkZXJX
aXRoTnVtYmVyT2ZEYXlzKHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy5fc2xpZGVyLnZhbHVl
ID0gTWF0aC5wb3codmFsdWUsIDEvMyk7CisgICAgICAgIHRoaXMuX3NsaWRlci5taW4gPSBNYXRo
LnBvdyh0aGlzLl9taW5EYXlDb3VudCwgMS8zKTsKKyAgICAgICAgdGhpcy5fc2xpZGVyLm1heCA9
IE1hdGgucG93KHRoaXMuX21heERheUNvdW50LCAxLzMpOworICAgICAgICB0aGlzLl9zbGlkZXIu
c3RlcCA9ICdhbnknOworICAgICAgICB0aGlzLl9lZGl0b3IudmFsdWUgPSB2YWx1ZTsKKyAgICB9
CisKKyAgICBfZW50ZXJUZXh0TW9kZShldmVudCkKKyAgICB7CisgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7CisgICAgICAgIHRoaXMuX2luVGV4dE1vZGUgPSB0cnVlOworICAgICAgICB0
aGlzLl9lZGl0b3Iuc3R5bGUub3BhY2l0eSA9IDE7CisgICAgICAgIHRoaXMuX2VkaXRvci5zdHls
ZS5tYXJnaW5MZWZ0ID0gJy0yLjVyZW0nOworICAgICAgICB0aGlzLl9kYXlDb3VudENvbnRhaW5l
ci5zdHlsZS5vcGFjaXR5ID0gMDsKKyAgICAgICAgdGhpcy5fc2xpZGVyLnN0eWxlLm9wYWNpdHkg
PSAwOworICAgIH0KKworICAgIF9leGl0VGV4dE1vZGUoZXZlbnQpCisgICAgeworICAgICAgICBp
ZiAoZXZlbnQpCisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB0
aGlzLl9pblRleHRNb2RlID0gZmFsc2U7CisgICAgICAgIHRoaXMuX2VkaXRvci5zdHlsZS5vcGFj
aXR5ID0gMDsKKyAgICAgICAgdGhpcy5fZWRpdG9yLnN0eWxlLm1hcmdpbkxlZnQgPSBudWxsOwor
ICAgICAgICB0aGlzLl9kYXlDb3VudENvbnRhaW5lci5zdHlsZS5vcGFjaXR5ID0gMTsKKyAgICAg
ICAgdGhpcy5fc2xpZGVyLnN0eWxlLm9wYWNpdHkgPSAxOworICAgIH0KKworICAgIF9zbGlkZXJW
YWx1ZU1heUhhdmVDaGFuZ2VkKGV2ZW50KQorICAgIHsKKyAgICAgICAgY29uc3QgbnVtYmVyT2ZE
YXlzID0gTWF0aC5yb3VuZChNYXRoLnBvdyhwYXJzZUZsb2F0KHRoaXMuX3NsaWRlci52YWx1ZSks
IDMpKTsKKyAgICAgICAgdGhpcy5fY2FsbE51bWJlck9mRGF5c0NhbGxiYWNrKGV2ZW50LCBudW1i
ZXJPZkRheXMpOworICAgIH0KKworICAgIF9lZGl0b3JWYWx1ZU1heUhhdmVDaGFuZ2VkKGV2ZW50
KQorICAgIHsKKyAgICAgICAgY29uc3QgcmF3TnVtYmVyID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0
KHRoaXMuX2VkaXRvci52YWx1ZSkpOworICAgICAgICBjb25zdCBudW1iZXJPZkRheXMgPSBNYXRo
Lm1heCh0aGlzLl9taW5EYXlDb3VudCwgTWF0aC5taW4odGhpcy5fbWF4RGF5Q291bnQsIHJhd051
bWJlcikpOworICAgICAgICBpZiAodGhpcy5fZWRpdG9yLnZhbHVlICE9IG51bWJlck9mRGF5cykK
KyAgICAgICAgICAgIHRoaXMuX2VkaXRvci52YWx1ZSA9IG51bWJlck9mRGF5czsKKyAgICAgICAg
dGhpcy5fY2FsbE51bWJlck9mRGF5c0NhbGxiYWNrKGV2ZW50LCBudW1iZXJPZkRheXMpOworICAg
IH0KKworICAgIF9jYWxsTnVtYmVyT2ZEYXlzQ2FsbGJhY2soZXZlbnQsIG51bWJlck9mRGF5cykK
KyAgICB7CisgICAgICAgIGNvbnN0IHNob3VsZFVwZGF0ZVN0YXRlID0gZXZlbnQudHlwZSA9PSAn
Y2hhbmdlJzsKKyAgICAgICAgaWYgKCh0aGlzLm51bWJlck9mRGF5cygpICE9IG51bWJlck9mRGF5
cyB8fCBzaG91bGRVcGRhdGVTdGF0ZSkgJiYgdGhpcy5fbnVtYmVyT2ZEYXlzQ2FsbGJhY2spCisg
ICAgICAgICAgICB0aGlzLl9udW1iZXJPZkRheXNDYWxsYmFjayhudW1iZXJPZkRheXMsIHNob3Vs
ZFVwZGF0ZVN0YXRlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZGF5c0NvdW50TGFiZWxUZXh0KCkg
eyByZXR1cm4gYGRheXNgOyB9CisKKyAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBgCisgICAgICAgICAgICA8dWwgY2xhc3M9ImJ1dHRvbmVkLXRvb2xiYXIi
PgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ic3RhcnQtdGltZS1zbGlkZXIiPgorICAgICAg
ICAgICAgICAgICAgICA8bGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9
InNsaWRlciIgdHlwZT0icmFuZ2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlk
PSJlZGl0b3IiIHR5cGU9Im51bWJlciI+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBj
bGFzcz0ibGFiZWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJkYXkt
Y291bnQiIHRhYmluZGV4PSIwIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JHsgdGhpcy5kYXlzQ291bnRMYWJlbFRleHQoKSB9CisgICAgICAgICAgICAgICAgICAgICAgICA8
L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgPC9s
aT4KKyAgICAgICAgICAgIDwvdWw+YDsKKyAgICB9CisKKyAgICBzdGF0aWMgY3NzVGVtcGxhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRvb2xiYXIuY3NzVGVtcGxhdGUoKSArIGAKKyAgICAg
ICAgICAgIC5idXR0b25lZC10b29sYmFyIC5zdGFydC10aW1lLXNsaWRlciB7CisgICAgICAgICAg
ICAgICAgbWFyZ2luLWxlZnQ6IDJyZW07CisgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDFl
bTsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuOXJlbTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLnN0YXJ0LXRpbWUtc2xpZGVyIC5sYWJlbCB7CisgICAgICAgICAgICAgICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjc2xp
ZGVyIHsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDAuOHJlbTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgI2VkaXRvciB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7CisgICAgICAgICAgICAgICAgd2lkdGg6IDRy
ZW07CisgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgICAgICAgICAg
ICAgZm9udC1zaXplOiAwLjhyZW07CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLjlyZW07Cisg
ICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKKyAgICAgICAgICAgICAgICBib3JkZXI6IHNv
bGlkIDFweCAjY2NjOworICAgICAgICAgICAgICAgIHotaW5kZXg6IDU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICNkYXktY291bnQgeworICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlu
bGluZS1ibG9jazsKKyAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAg
ICAgICAgICB3aWR0aDogMnJlbTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYDsKKyAgICB9Cit9
CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgnY29udGludW91cy1kb21haW4tdG9vbGJh
cicsIENvbnRpbnVvdXNEb21haW5Ub29sYmFyKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvZG9tYWluLWNvbnRyb2wtdG9vbGJhci5qcyBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvZG9tYWluLWNvbnRyb2wtdG9v
bGJhci5qcwppbmRleCBjNmJmNjE0ZTM2MDgyYzk4OTRkNGFiM2I5MzlkM2Y2MDc5NzU1ZGUyLi4y
ZDk5YWU5OGM0NTUwZmNjMDczZDljNzRhZjRlODUwOTBkYjU1YWFlIDEwMDY0NAotLS0gYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL2RvbWFpbi1jb250cm9sLXRvb2xi
YXIuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9kb21h
aW4tY29udHJvbC10b29sYmFyLmpzCkBAIC0xNyw3ICsxNyw3IEBAIGNsYXNzIERvbWFpbkNvbnRy
b2xUb29sYmFyIGV4dGVuZHMgVG9vbGJhciB7CiAKICAgICBzZXRTdGFydFRpbWUoc3RhcnRUaW1l
KQogICAgIHsKLSAgICAgICAgdGhpcy5zZXROdW1iZXJPZkRheXMoTWF0aC5tYXgoMSwgTWF0aC5y
b3VuZCgodGhpcy5fcHJlc2VudCAtIHN0YXJ0VGltZSkgLyB0aGlzLl9taWxsaXNlY29uZHNQZXJE
YXkpKSk7CisgICAgICAgIHRoaXMuc2V0TnVtYmVyT2ZEYXlzKE1hdGgubWF4KDAsIE1hdGgucm91
bmQoKHRoaXMuX3ByZXNlbnQgLSBzdGFydFRpbWUpIC8gdGhpcy5fbWlsbGlzZWNvbmRzUGVyRGF5
KSkpOwogICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBzdGFydFRpbWU7CiAgICAgfQogCkBAIC0y
OCw3ICsyOCw3IEBAIGNsYXNzIERvbWFpbkNvbnRyb2xUb29sYmFyIGV4dGVuZHMgVG9vbGJhciB7
CiAKICAgICBzZXROdW1iZXJPZkRheXMobnVtYmVyT2ZEYXlzLCBzZXRCeVVzZXIpCiAgICAgewot
ICAgICAgICBpZiAoIW51bWJlck9mRGF5cykKKyAgICAgICAgaWYgKHR5cGVvZihudW1iZXJPZkRh
eXMpICE9ICdudW1iZXInKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMuX3N0
YXJ0VGltZSA9IG51bGw7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL3BhZ2VzL3BhZ2Utcm91dGVyLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9wYWdlcy9wYWdlLXJvdXRlci5qcwppbmRleCBjM2Y3NDNiYjdiMzQ5ZjUwODVlNmZm
ZWIxN2NjYjlmMDJkMGRlN2E5Li5lZjIwYjQ1Y2UyMTY0NjA2YzZjYzYzYmM4YjRiNTE2OWQzOGY4
MDkwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2Vz
L3BhZ2Utcm91dGVyLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
cGFnZXMvcGFnZS1yb3V0ZXIuanMKQEAgLTU1LDcgKzU1LDE0IEBAIGNsYXNzIFBhZ2VSb3V0ZXIg
ewogICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBpZiAodGhpcy5fY3VycmVudFBhZ2UgIT0gZGVzdGluYXRpb25QYWdlKSB7
CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50UGFnZSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFBh
Z2UuZnV6enlNYXRjaGVzUm91dGVOYW1lKSA9PT0gJ2Z1bmN0aW9uJyAmJgorICAgICAgICAgICAg
dGhpcy5fY3VycmVudFBhZ2UuZnV6enlNYXRjaGVzUm91dGVOYW1lKGRlc3RpbmF0aW9uUGFnZS5y
b3V0ZU5hbWUoKSkgJiYKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQYWdlICE9IGRlc3RpbmF0
aW9uUGFnZSkgeworICAgICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VTdGF0ZSA9IHRoaXMuX2N1
cnJlbnRQYWdlLnNlcmlhbGl6ZVN0YXRlKCk7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50UGFn
ZSA9IGRlc3RpbmF0aW9uUGFnZTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uUGFnZS5vcGVuKGN1
cnJlbnRQYWdlU3RhdGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJl
bnRQYWdlICE9IGRlc3RpbmF0aW9uUGFnZSkgewogICAgICAgICAgICAgdGhpcy5fY3VycmVudFBh
Z2UgPSBkZXN0aW5hdGlvblBhZ2U7CiAgICAgICAgICAgICBkZXN0aW5hdGlvblBhZ2Uub3Blbihw
YXJzZWQuc3RhdGUpOwogICAgICAgICB9IGVsc2UKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvcGFnZXMvc3VtbWFyeS1wYWdlLmpzIGIvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanMKaW5kZXggZTQ2MTli
MTk3NDg3Y2U5NzJjMThjODBhZmU4OWJmZGIyY2VhODg3Zi4uNGY4OTgzY2MwZTBmNzYzZjk2ZTJj
N2NjMWJmYmNhM2E0MDU2NjFkMyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9wYWdlcy9zdW1tYXJ5LXBhZ2UuanMKQEAgLTEsOSArMSw5IEBACiAK
IGNsYXNzIFN1bW1hcnlQYWdlIGV4dGVuZHMgUGFnZVdpdGhIZWFkaW5nIHsKIAotICAgIGNvbnN0
cnVjdG9yKHN1bW1hcnlTZXR0aW5ncykKKyAgICBjb25zdHJ1Y3RvcihzdW1tYXJ5U2V0dGluZ3Ms
IHRvb2xiYXIpCiAgICAgewotICAgICAgICBzdXBlcihzdW1tYXJ5U2V0dGluZ3MubmFtZSwgbnVs
bCk7CisgICAgICAgIHN1cGVyKHN1bW1hcnlTZXR0aW5ncy5uYW1lLCB0b29sYmFyKTsKIAogICAg
ICAgICB0aGlzLl9yb3V0ZSA9IHN1bW1hcnlTZXR0aW5ncy5yb3V0ZTsKICAgICAgICAgdGhpcy5f
dGFibGUgPSB7CkBAIC0zMiwxMyArMzIsNDcgQEAgY2xhc3MgU3VtbWFyeVBhZ2UgZXh0ZW5kcyBQ
YWdlV2l0aEhlYWRpbmcgewogICAgIG9wZW4oc3RhdGUpCiAgICAgewogICAgICAgICBzdXBlci5v
cGVuKHN0YXRlKTsKKyAgICAgICAgdmFyIHNpbmNlID0gc3RhdGUuc2luY2UgPyBwYXJzZUZsb2F0
KHN0YXRlLnNpbmNlKSA6IG51bGw7CiAKLSAgICAgICAgdmFyIGN1cnJlbnQgPSBEYXRlLm5vdygp
OwotICAgICAgICB2YXIgdGltZVJhbmdlID0gW2N1cnJlbnQgLSAyNCAqIDM2MDAgKiAxMDAwLCBj
dXJyZW50XTsKKyAgICAgICAgaWYgKGlzTmFOKHNpbmNlKSkKKyAgICAgICAgICAgIHRoaXMudG9v
bGJhcigpLnNldFN0YXJ0VGltZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLnRv
b2xiYXIoKS5zZXRTdGFydFRpbWUoc2luY2UpOworCisgICAgICAgIHRoaXMudG9vbGJhcigpLnNl
dE51bWJlck9mRGF5c0NhbGxiYWNrKHRoaXMuc2V0TnVtYmVyT2ZEYXlzRnJvbVRvb2xiYXIuYmlu
ZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2ZldGNoRm9yTnVtYmVyT2ZEYXlzQWdvKCk7CisgICAg
ICAgIHRoaXMuc2NoZWR1bGVVcmxTdGF0ZVVwZGF0ZSgpOworICAgIH0KKworICAgIF9mZXRjaEZv
ck51bWJlck9mRGF5c0FnbygpCisgICAgeworICAgICAgICBjb25zdCB0aW1lUmFuZ2UgPSBbdGhp
cy50b29sYmFyKCkuZW5kVGltZSgpLCB0aGlzLnRvb2xiYXIoKS5zdGFydFRpbWUoKV07CiAgICAg
ICAgIGZvciAodmFyIGdyb3VwIG9mIHRoaXMuX2NvbmZpZ0dyb3VwcykKICAgICAgICAgICAgIGdy
b3VwLmZldGNoQW5kQ29tcHV0ZVN1bW1hcnkodGltZVJhbmdlKS50aGVuKCgpID0+IHsgdGhpcy5l
bnF1ZXVlVG9SZW5kZXIoKTsgfSk7CiAgICAgfQogCisgICAgc2VyaWFsaXplU3RhdGUoKQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMudG9vbGJhcigpLl9kZWZhdWx0TnVtYmVyT2ZEYXlzID09IHRo
aXMudG9vbGJhcigpLm51bWJlck9mRGF5cygpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgICAgICByZXR1cm4ge3NpbmNlOiB0aGlzLnRvb2xiYXIoKS5zdGFydFRpbWUoKX07CisgICAg
fQorCisgICAgZnV6enlNYXRjaGVzUm91dGVOYW1lKHJvdXRlTmFtZSkKKyAgICB7CisgICAgICAg
IHJldHVybiByb3V0ZU5hbWUuc3RhcnRzV2l0aCgic3VtbWFyeS8iKTsgICAgCisgICAgfQorCisg
ICAgc2V0TnVtYmVyT2ZEYXlzRnJvbVRvb2xiYXIobnVtYmVyT2ZEYXlzLCBzaG91bGRVcGRhdGVT
dGF0ZSkKKyAgICB7CisgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCkgLSAobnVt
YmVyT2ZEYXlzICogdGhpcy50b29sYmFyKCkuX21pbGxpc2Vjb25kc1BlckRheSk7CisgICAgICAg
IHRoaXMudG9vbGJhcigpLnNldFN0YXJ0VGltZShzdGFydFRpbWUpOworICAgICAgICB0aGlzLl9m
ZXRjaEZvck51bWJlck9mRGF5c0Fnbyh0aGlzLnRvb2xiYXIoKS5udW1iZXJPZkRheXMoKSk7Cisg
ICAgICAgIHRoaXMudG9vbGJhcigpLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICB0aGlzLnNj
aGVkdWxlVXJsU3RhdGVVcGRhdGUoKTsKKyAgICB9CisKICAgICByZW5kZXIoKQogICAgIHsKICAg
ICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgnU3VtbWFyeVBhZ2UnLCAn
cmVuZGVyJyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L3BhZ2VzL3N1bW1hcnktdG9vbGJhci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvcGFnZXMvc3VtbWFyeS10b29sYmFyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2MzE1Y2Y5MjJlNWRk
OTlhMGQ4OTk1MWI2MzBkY2EwZGQyZjYyZmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL3BhZ2VzL3N1bW1hcnktdG9vbGJhci5qcwpAQCAtMCww
ICsxLDUzIEBACitjbGFzcyBTdW1tYXJ5VG9vbGJhciBleHRlbmRzIENvbnRpbnVvdXNEb21haW5U
b29sYmFyIHsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcignc3VtbWFy
eS10b29sYmFyJywgMCk7CisKKyAgICAgICAgdGhpcy5fc2V0QWxsb3dlZERheUNvdW50UmFuZ2Uo
e21pbkRheUNvdW50OiAwfSk7CisgICAgICAgIHRoaXMuX2RheUNvdW50RGVzY3JpcHRpb24gPSB0
aGlzLmNvbnRlbnQoJ2RheS1jb3VudC1kZXNjcmlwdGlvbicpOworICAgICAgICAKKyAgICAgICAg
dGhpcy5fcmVuZGVyVXBkYXRlRGF5Q291bnRBbmREZXNjcmlwdGlvbkxhemlseSA9IG5ldyBMYXpp
bHlFdmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9yZW5kZXJVcGRhdGVEYXlDb3VudEFuZERlc2NyaXB0
aW9uLmJpbmQodGhpcykpOworICAgIH0KKworICAgIGVuZFRpbWUoKSB7IHJldHVybiB0aGlzLnN0
YXJ0VGltZSgpIC0gdGhpcy5fbWlsbGlzZWNvbmRzUGVyRGF5OyB9CisKKyAgICByZW5kZXIoKQor
ICAgIHsKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7CisgICAgICAgIHRoaXMuX3JlbmRlclVwZGF0
ZURheUNvdW50QW5kRGVzY3JpcHRpb25MYXppbHkuZXZhbHVhdGUodGhpcy5fbnVtYmVyT2ZEYXlz
ID09PSAwLCB0aGlzLl9pblRleHRNb2RlKTsKKyAgICB9CisKKyAgICBfZW50ZXJUZXh0TW9kZShl
dmVudCkKKyAgICB7CisgICAgICAgIHN1cGVyLl9lbnRlclRleHRNb2RlKGV2ZW50KTsKKyAgICAg
ICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICB9CisKKyAgICBfZXhpdFRleHRNb2RlKGV2
ZW50KQorICAgIHsKKyAgICAgICAgc3VwZXIuX2V4aXRUZXh0TW9kZShldmVudCk7CisgICAgICAg
IHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgfQorCisgICAgX3JlbmRlclVwZGF0ZURheUNv
dW50QW5kRGVzY3JpcHRpb24obnVtYmVyT2ZEYXlzSXNaZXJvLCBpblRleHRNb2RlKQorICAgIHsK
KyAgICAgICAgaWYgKG51bWJlck9mRGF5c0lzWmVybyAmJiAhaW5UZXh0TW9kZSkgeworICAgICAg
ICAgICAgdGhpcy5fZGF5Q291bnRDb250YWluZXIub3BhY2l0eSA9IDA7CisgICAgICAgICAgICB0
aGlzLl9kYXlDb3VudENvbnRhaW5lci5zdHlsZS53aWR0aCA9ICcwLjI1cmVtJzsKKyAgICAgICAg
ICAgIHRoaXMuX2RheUNvdW50RGVzY3JpcHRpb24uc3R5bGUud2lkdGggPSAnNS4yNXJlbSc7Cisg
ICAgICAgICAgICB0aGlzLl9kYXlDb3VudERlc2NyaXB0aW9uLnRleHRDb250ZW50ID0gJ05vdyc7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9kYXlDb3VudENvbnRhaW5lci5v
cGFjaXR5ID0gMTsKKyAgICAgICAgICAgIHRoaXMuX2RheUNvdW50Q29udGFpbmVyLnN0eWxlLndp
ZHRoID0gJzEuNzVyZW0nOworICAgICAgICAgICAgdGhpcy5fZGF5Q291bnREZXNjcmlwdGlvbi5z
dHlsZS53aWR0aCA9ICczLjc1cmVtJzsKKyAgICAgICAgICAgIHRoaXMuX2RheUNvdW50RGVzY3Jp
cHRpb24udGV4dENvbnRlbnQgPSAnZGF5cyBhZ28nOworICAgICAgICB9CisgICAgfQorCisgICAg
c3RhdGljIGRheXNDb3VudExhYmVsVGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4gYDxsYWJl
bCBpZD0iZGF5LWNvdW50LWRlc2NyaXB0aW9uIiBjbGFzcz0ibGFiZWwiPjwvbGFiZWw+YDsKKyAg
ICB9Cit9CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgnc3VtbWFyeS10b29sYmFyJywg
U3VtbWFyeVRvb2xiYXIpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>