<?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>127117</bug_id>
          
          <creation_ts>2014-01-16 10:09:45 -0800</creation_ts>
          <short_desc>Web Inspector: add probe manager and model objects to the frontend</short_desc>
          <delta_ts>2014-02-05 14:16:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>127508</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>968803</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-01-16 10:09:45 -0800</bug_when>
    <thetext>Splitting this from the actual views so that those can be reviewed in parallel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968804</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-01-16 10:11:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/15836243&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974955</commentid>
    <comment_count>2</comment_count>
      <attachid>222967</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-02-03 00:43:03 -0800</bug_when>
    <thetext>Created attachment 222967
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>975877</commentid>
    <comment_count>3</comment_count>
      <attachid>222967</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-02-03 08:55:44 -0800</bug_when>
    <thetext>Comment on attachment 222967
patch

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

I&apos;ll look at this more later today.

&gt; Source/JavaScriptCore/inspector/protocol/Debugger.json:41
&gt; +                { &quot;name&quot;: &quot;identifier&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;A frontend-assigned identifier for this breakpoint action.&quot; }

Lets us &quot;id&quot; here too.

&gt; Source/WebInspectorUI/UserInterface/BreakpointAction.js:69
&gt; +    get identifier()
&gt; +    {
&gt; +        return this._identifier;
&gt; +    },

&quot;id&quot; is fine. I usually only spell out identifier when the &quot;I&quot; is capitalized cause &quot;Id&quot; looks weird to me.

But we can standardize on &quot;identifier&quot;, I&apos;m cool with that.

&gt; Source/WebInspectorUI/UserInterface/DebuggerManager.js:448
&gt; +    getNextBreakpointActionIdentifier: function()
&gt; +    {
&gt; +        return this._nextBreakpointActionIdentifier++;
&gt; +    },

I&apos;d like this better as a normal getter.

&gt; Source/WebInspectorUI/UserInterface/ProbeManager.js:118
&gt; +        var knownProbeIds = this._knownProbeIdsForBreakpoint.get(breakpoint);

This is a case where I would use &quot;knownProbeIdentifiers&quot;.

&gt; Source/WebInspectorUI/UserInterface/ProbeManager.js:119
&gt; +        var seenProbeIds = new Set;

Ditto.

&gt; Source/WebInspectorUI/UserInterface/ProbeManager.js:122
&gt; +            var probeId = probeAction.identifier;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976124</commentid>
    <comment_count>4</comment_count>
      <attachid>222967</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-02-03 17:13:26 -0800</bug_when>
    <thetext>Comment on attachment 222967
patch

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

&gt; Source/WebInspectorUI/ChangeLog:36
&gt; +        be able to recieved breakpoint added events.

Typo: recieved

&gt; Source/JavaScriptCore/inspector/ScriptDebugListener.h:72
&gt; +    virtual void didSampleProbe(JSC::ExecState*, const ScriptBreakpointAction&amp;, int hitCount, const Deprecated::ScriptValue&amp; result) = 0;

I wonder if we should rename this breakpointActionProbe, to match breakpointActionLog and breakpointActionSound. I&apos;m ambivalent though. Did sample probe is good.

&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:231
&gt; +        object-&gt;getNumber(&quot;identifier&quot;, &amp;identifier);

Nit: ASCIILiteral(&quot;identifier&quot;)

&gt;&gt; Source/JavaScriptCore/inspector/protocol/Debugger.json:41
&gt;&gt; +                { &quot;name&quot;: &quot;identifier&quot;, &quot;type&quot;: &quot;integer&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;A frontend-assigned identifier for this breakpoint action.&quot; }
&gt; 
&gt; Lets us &quot;id&quot; here too.

This should also be an $ref to BreakpointActionIdentifier.

&gt; Source/WebInspectorUI/UserInterface/DebuggerManager.js:73
&gt; +        var breakpoints = this._breakpointsSetting.value.map(function(breakpointCookie) {
&gt; +            return new WebInspector.Breakpoint(breakpointCookie);
&gt; +        });
&gt; +        breakpoints.forEach(this.addBreakpoint, this);

I liked this better as a single for loop. Is there an advantage to using map/forEach over a for..of loop here?

&gt; Source/WebInspectorUI/UserInterface/ProbeManager.js:42
&gt; +    // N.B. saved breakpoints should not be restored on the first event loop turn, because

N.B.?

&gt; Source/WebInspectorUI/UserInterface/ProbeManager.js:61
&gt; +        this._probeSetsByBreakpoint.forEach(sets.push.bind(this));

Hmm, I don&apos;t think this actually works:

    &gt; var map = new Map;
    &lt; undefined
    
    &gt; map.set(1,1); map.set(2,2);
    &lt; Map
    
    &gt; arr = []; map.forEach(arr.push.bind(this)); arr
    &lt; []
    
    &gt; arr = []; map.forEach(arr.push.bind(arr)); arr
    &lt; [1, 1, 2, 2]

Just do the easy route:

    &gt; arr = []; for (var x of map.values()) arr.push(x); arr
    &lt; [1, 2]

&gt; Source/WebInspectorUI/UserInterface/ProbeManager.js:140
&gt; +        }.bind(this));

Nit: No need for .bind(this) here. Just use the optional thisObject parameter to forEach.

    &quot;}.bind(this));&quot; =&gt; &quot;}, this);&quot;

&gt; Source/WebInspectorUI/UserInterface/ProbeManager.js:160
&gt; +        }.bind(this));

Ditto

&gt; Source/WebInspectorUI/UserInterface/ProbeManager.js:163
&gt; +    // This function will create a probe set for the specified breakpoint if it does not exist.

Not sure if this comment adds value. We have this idiom in a lot of places. There was even a discussion on giving them a consistent naming but nothing came out of it. Also, we don&apos;t normally prefix methods with &quot;set&quot; or &quot;get&quot;.

&gt; Source/WebInspectorUI/UserInterface/ProbeObject.js:35
&gt; +WebInspector.ProbeObject = function(probeId, breakpoint, expression)

How about just WebInspector.Probe?

&gt; Source/WebInspectorUI/UserInterface/ProbeObject.js:37
&gt; +    WebInspector.Object.call(this);

We often assert in constructors to catch possible issues in advance.

    console.assert(probeId);
    console.assert(breakpoint);

&gt; Source/WebInspectorUI/UserInterface/ProbeObject.js:97
&gt; +    // Protected (Called by ProbeManager)
&gt; +
&gt; +    addSample: function(sample)

Sounds like this is public to me.

&gt; Source/WebInspectorUI/UserInterface/ProbeSetDataFrame.js:42
&gt; +Object.defineProperty(WebInspector.ProbeSetDataFrame, &quot;compare&quot;,
&gt; +{
&gt; +    value: function(a, b) {
&gt; +        console.assert(a instanceof WebInspector.ProbeSetDataFrame, a);
&gt; +        console.assert(b instanceof WebInspector.ProbeSetDataFrame, b);
&gt; +
&gt; +        return a.index - b.index;
&gt; +    }
&gt; +});

Is there an advantage to this over just WebInspector.ProbeSetDataFrame.compare = function() { ... }? Property descriptor differences?

&gt; Source/WebInspectorUI/UserInterface/ProbeSetDataFrame.js:53
&gt; +        return &quot;%d&quot;.format(this._index);

Seems overkill. How about String(this._index) or (&quot;&quot; + this._index).

&gt; Source/WebInspectorUI/UserInterface/ProbeSetDataFrame.js:74
&gt; +    set isSeparator(value)
&gt; +    {
&gt; +        this._separator = !!value;
&gt; +    },

A setter named &quot;isSeparator&quot; is weird. How about not giving this a setter and just making it an argument of the constructor (or a separate constructor).

&gt; Source/WebInspectorUI/UserInterface/ProbeSetDataFrame.js:86
&gt; +        return probeSet.probes.filter(function(probe) {
&gt; +            return !this.hasOwnProperty(probe.identifier);
&gt; +        }.bind(this));

Same thing with unnecessary bind. Array.prototype.filter takes an optional thisObject:
&lt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter&gt;

&gt; Source/WebInspectorUI/UserInterface/ProbeSetDataFrame.js:97
&gt; +        for (var i = 0; i &lt; keys.length; ++i)

for..of!

&gt; Source/WebInspectorUI/UserInterface/ProbeSetDataTable.js:41
&gt; +    FrameInserted: &quot;probe-set-frame-inserted&quot;,
&gt; +    FrameReplaced: &quot;probe-set-frame-replaced&quot;,
&gt; +    SeparatorInserted: &quot;probe-set-separator-inserted&quot;,
&gt; +    SeparatorReplaced: &quot;probe-set-separator-replaced&quot;,
&gt; +    WillRemove: &quot;probe-set-data-table-will-remove&quot;

One is prefixed with &quot;probe-set-data-table&quot;, the rest aren&apos;t. For consistency they should all have it.

Also, some of these events are unused (each of the replaced ones). Are there plans to add them or are they stale?

&gt; Source/WebInspectorUI/UserInterface/ProbeSetDataTable.js:99
&gt; +        for (var i = 0; i &lt; frames.length; ++i)

for..of!

&gt; Source/WebInspectorUI/UserInterface/ProbeSetDataTable.js:107
&gt; +        for (var i = 0; i &lt; frames.length; ++i)

for..of!

&gt; Source/WebInspectorUI/UserInterface/ProbeSetDataTable.js:109
&gt; +            if (frames[i][probe.identifier])
&gt; +                delete frames[i][probe.identifier];

No need for the if check here. Just call &quot;delete frame[probe.identifier]&quot;.

&gt; Source/WebInspectorUI/UserInterface/ProbeSetObject.js:29
&gt; +WebInspector.ProbeSetObject = function(breakpoint)

How about just calling this ProbeSet or ProbeObjectSet? &quot;ProbeSetObject&quot; sounds weird to me.

&gt; Source/WebInspectorUI/UserInterface/ProbeSetObject.js:42
&gt; +    WebInspector.Frame.addEventListener(WebInspector.Frame.Event.MainResourceDidChange, this._mainResourceChanged, this);
&gt; +    WebInspector.ProbeObject.addEventListener(WebInspector.ProbeObject.Event.SampleAdded, this._sampleCollected, this);
&gt; +    WebInspector.Breakpoint.addEventListener(WebInspector.Breakpoint.Event.ResolvedStateDidChange, this._breakpointResolvedStateDidChange, this);

r- for this. It looks like it will cause leaks of all ProbeSetObjects. &quot;this&quot; should call removeEventListener somewhere for WebInspector.Frame and WebInspector.Breakpoint.

Otherwise this ProbeSetObject will forever live in those singleton event listener lists. The lists are not yet WeakMaps, and that is not possible with the current WebMap APIs.

&gt; Source/WebInspectorUI/UserInterface/ProbeSetObject.js:79
&gt; +        this._breakpoint.probeActions.forEach(this._breakpoint.removeAction.bind(this._breakpoint));

Sounds like the Breakpoint.prototype.clearActions method you just added would be more efficient.

&gt; Source/WebInspectorUI/UserInterface/ProbeSetObject.js:94
&gt; +        // This will fire ProbeManager.Event.ProbeAdded, then ProbeObject.Event.ExpressionChanged.
&gt; +        var newAction = this.breakpoint.createAction(WebInspector.BreakpointAction.Type.Probe);
&gt; +        newAction.data = expression;

I like the comment, but perhaps we can avoid the extra churn and just pass createAction the breakpoint action data!

Just pass something to replace the null inside createAction:

    var newAction = new WebInspector.BreakpointAction(this, type, null);

&gt; Source/WebInspectorUI/UserInterface/ProbeSetObject.js:97
&gt; +    // Protected (called by ProbeManager.js)

Again, this sounds public to me then.

&gt; LayoutTests/inspector-protocol/model/probe-manager-add-remove-actions.html:20
&gt; +    function incrementTick(event)
&gt; +    {
&gt; +        InspectorTest.log(&quot;Hit test checkpoint event #&quot; + currentTicks + &quot; with type: &quot; + event.type);
&gt; +        if (++currentTicks === expectedTicks)
&gt; +            InspectorTest.completeTest();
&gt; +    }

r- for this too. I don&apos;t see this log in the output. So, the samples are not triggering?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976468</commentid>
    <comment_count>5</comment_count>
      <attachid>222967</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-02-04 11:57:40 -0800</bug_when>
    <thetext>Comment on attachment 222967
patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/BreakpointAction.js:69
&gt;&gt; +    },
&gt; 
&gt; &quot;id&quot; is fine. I usually only spell out identifier when the &quot;I&quot; is capitalized cause &quot;Id&quot; looks weird to me.
&gt; 
&gt; But we can standardize on &quot;identifier&quot;, I&apos;m cool with that.

As long as that&apos;s the rule, I can follow it. Updated the style guide: https://trac.webkit.org/wiki/WebInspectorCodingStyleGuide

&gt;&gt; Source/WebInspectorUI/UserInterface/DebuggerManager.js:73
&gt;&gt; +        breakpoints.forEach(this.addBreakpoint, this);
&gt; 
&gt; I liked this better as a single for loop. Is there an advantage to using map/forEach over a for..of loop here?

nope, I think I wrote this when for..of didn&apos;t work yet

&gt;&gt; Source/WebInspectorUI/UserInterface/ProbeManager.js:61
&gt;&gt; +        this._probeSetsByBreakpoint.forEach(sets.push.bind(this));
&gt; 
&gt; Hmm, I don&apos;t think this actually works:
&gt; 
&gt;     &gt; var map = new Map;
&gt;     &lt; undefined
&gt; 
&gt;     &gt; map.set(1,1); map.set(2,2);
&gt;     &lt; Map
&gt; 
&gt;     &gt; arr = []; map.forEach(arr.push.bind(this)); arr
&gt;     &lt; []
&gt; 
&gt;     &gt; arr = []; map.forEach(arr.push.bind(arr)); arr
&gt;     &lt; [1, 1, 2, 2]
&gt; 
&gt; Just do the easy route:
&gt; 
&gt;     &gt; arr = []; for (var x of map.values()) arr.push(x); arr
&gt;     &lt; [1, 2]

i think it should be sets.push.bind(sets) but I agree that&apos;s ugly. What about just returning an iterator? i.e.,

get probeSets() { return this._probeSetsByBreakpoint.values(); }

The getter is only ever used to iterate over the sets.

&gt;&gt; Source/WebInspectorUI/UserInterface/ProbeManager.js:118
&gt;&gt; +        var knownProbeIds = this._knownProbeIdsForBreakpoint.get(breakpoint);
&gt; 
&gt; This is a case where I would use &quot;knownProbeIdentifiers&quot;.

OK

&gt;&gt; Source/WebInspectorUI/UserInterface/ProbeManager.js:140
&gt;&gt; +        }.bind(this));
&gt; 
&gt; Nit: No need for .bind(this) here. Just use the optional thisObject parameter to forEach.
&gt; 
&gt;     &quot;}.bind(this));&quot; =&gt; &quot;}, this);&quot;

I keep forgetting. I added it to the style guide.

&gt;&gt; Source/WebInspectorUI/UserInterface/ProbeManager.js:163
&gt;&gt; +    // This function will create a probe set for the specified breakpoint if it does not exist.
&gt; 
&gt; Not sure if this comment adds value. We have this idiom in a lot of places. There was even a discussion on giving them a consistent naming but nothing came out of it. Also, we don&apos;t normally prefix methods with &quot;set&quot; or &quot;get&quot;.

OK

&gt;&gt; Source/WebInspectorUI/UserInterface/ProbeSetDataFrame.js:42
&gt;&gt; +});
&gt; 
&gt; Is there an advantage to this over just WebInspector.ProbeSetDataFrame.compare = function() { ... }? Property descriptor differences?

No, just cribbing from some other file that did that. In that case it would be important (on Array or Date)

&gt;&gt; Source/WebInspectorUI/UserInterface/ProbeSetDataFrame.js:74
&gt;&gt; +    },
&gt; 
&gt; A setter named &quot;isSeparator&quot; is weird. How about not giving this a setter and just making it an argument of the constructor (or a separate constructor).

This should have been commented better. This is set on the last data frame collected before a main frame navigation. So you can&apos;t know at construction time whether it&apos;s a separator (i.e., last record) or not. I&apos;m trying to remember why it had to be at the end instead of beginning, but can&apos;t recall at the moment.

&gt;&gt; Source/WebInspectorUI/UserInterface/ProbeSetDataTable.js:41
&gt;&gt; +    WillRemove: &quot;probe-set-data-table-will-remove&quot;
&gt; 
&gt; One is prefixed with &quot;probe-set-data-table&quot;, the rest aren&apos;t. For consistency they should all have it.
&gt; 
&gt; Also, some of these events are unused (each of the replaced ones). Are there plans to add them or are they stale?

Oops, replaced events are only used with replay integration. I&apos;ll re-add them later.

&gt;&gt; Source/WebInspectorUI/UserInterface/ProbeSetObject.js:29
&gt;&gt; +WebInspector.ProbeSetObject = function(breakpoint)
&gt; 
&gt; How about just calling this ProbeSet or ProbeObjectSet? &quot;ProbeSetObject&quot; sounds weird to me.

OK

&gt;&gt; Source/WebInspectorUI/UserInterface/ProbeSetObject.js:42
&gt;&gt; +    WebInspector.Breakpoint.addEventListener(WebInspector.Breakpoint.Event.ResolvedStateDidChange, this._breakpointResolvedStateDidChange, this);
&gt; 
&gt; r- for this. It looks like it will cause leaks of all ProbeSetObjects. &quot;this&quot; should call removeEventListener somewhere for WebInspector.Frame and WebInspector.Breakpoint.
&gt; 
&gt; Otherwise this ProbeSetObject will forever live in those singleton event listener lists. The lists are not yet WeakMaps, and that is not possible with the current WebMap APIs.

Oops, missed it in willRemove. I used to use a helper class that would keep a single list of all listeners and bulk add/remove.

&gt;&gt; Source/WebInspectorUI/UserInterface/ProbeSetObject.js:79
&gt;&gt; +        this._breakpoint.probeActions.forEach(this._breakpoint.removeAction.bind(this._breakpoint));
&gt; 
&gt; Sounds like the Breakpoint.prototype.clearActions method you just added would be more efficient.

We only want to clear probe actions, not any other ones.

&gt;&gt; LayoutTests/inspector-protocol/model/probe-manager-add-remove-actions.html:20
&gt;&gt; +    }
&gt; 
&gt; r- for this too. I don&apos;t see this log in the output. So, the samples are not triggering?

Hmm, strange that it finishes but doesn&apos;t log. I&apos;ll look into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976502</commentid>
    <comment_count>6</comment_count>
      <attachid>222967</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-02-04 13:59:18 -0800</bug_when>
    <thetext>Comment on attachment 222967
patch

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/ProbeManager.js:61
&gt;&gt;&gt; +        this._probeSetsByBreakpoint.forEach(sets.push.bind(this));
&gt;&gt; 
&gt;&gt; Hmm, I don&apos;t think this actually works:
&gt;&gt; 
&gt;&gt;     &gt; var map = new Map;
&gt;&gt;     &lt; undefined
&gt;&gt; 
&gt;&gt;     &gt; map.set(1,1); map.set(2,2);
&gt;&gt;     &lt; Map
&gt;&gt; 
&gt;&gt;     &gt; arr = []; map.forEach(arr.push.bind(this)); arr
&gt;&gt;     &lt; []
&gt;&gt; 
&gt;&gt;     &gt; arr = []; map.forEach(arr.push.bind(arr)); arr
&gt;&gt;     &lt; [1, 1, 2, 2]
&gt;&gt; 
&gt;&gt; Just do the easy route:
&gt;&gt; 
&gt;&gt;     &gt; arr = []; for (var x of map.values()) arr.push(x); arr
&gt;&gt;     &lt; [1, 2]
&gt; 
&gt; i think it should be sets.push.bind(sets) but I agree that&apos;s ugly. What about just returning an iterator? i.e.,
&gt; 
&gt; get probeSets() { return this._probeSetsByBreakpoint.values(); }
&gt; 
&gt; The getter is only ever used to iterate over the sets.

Returning an iterator can work, but it can give wrong results if reused. Maybe call the getter probeSetsIterator?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976523</commentid>
    <comment_count>7</comment_count>
      <attachid>223166</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-02-04 15:16:10 -0800</bug_when>
    <thetext>Created attachment 223166
patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976781</commentid>
    <comment_count>8</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-02-05 09:49:09 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; i think it should be sets.push.bind(sets) but I agree that&apos;s ugly. What about just returning an iterator? i.e.,
&gt; &gt; 
&gt; &gt; get probeSets() { return this._probeSetsByBreakpoint.values(); }
&gt; &gt; 
&gt; &gt; The getter is only ever used to iterate over the sets.
&gt; 
&gt; Returning an iterator can work, but it can give wrong results if reused. Maybe call the getter probeSetsIterator?

I decided against returning an iterator after all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976913</commentid>
    <comment_count>9</comment_count>
      <attachid>223166</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-02-05 11:06:39 -0800</bug_when>
    <thetext>Comment on attachment 223166
patch2

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

&gt; Source/WebInspectorUI/UserInterface/DebuggerManager.js:514
&gt; -        console.assert(!breakpoint.id);
&gt; +        console.assert(!breakpoint.identifier);

Can you revert this?

&gt; Source/WebInspectorUI/UserInterface/DebuggerManager.js:517
&gt; -        if (breakpoint.id || breakpoint.disabled)
&gt; +        if (breakpoint.identifier || breakpoint.disabled)

Ditto.

&gt; Source/WebInspectorUI/UserInterface/DebuggerManager.js:527
&gt; -            breakpoint.id = breakpointIdentifier;
&gt; +            breakpoint.identifier = breakpointIdentifier;

Ditto.

&gt; Source/WebInspectorUI/UserInterface/DebuggerManager.js:571
&gt; -        if (!breakpoint.id)
&gt; +        if (!breakpoint.identifier)

Ditto.

&gt; Source/WebInspectorUI/UserInterface/DebuggerManager.js:579
&gt; -            delete this._breakpointIdMap[breakpoint.id];
&gt; +            delete this._breakpointIdMap[breakpoint.identifier];

Ditto.

&gt; Source/WebInspectorUI/UserInterface/DebuggerManager.js:581
&gt; -            breakpoint.id = null;
&gt; +            breakpoint.identifier = null;

Ditto.

&gt; Source/WebInspectorUI/UserInterface/DebuggerManager.js:590
&gt; -        DebuggerAgent.removeBreakpoint(breakpoint.id, didRemoveBreakpoint.bind(this));
&gt; +        DebuggerAgent.removeBreakpoint(breakpoint.identifier, didRemoveBreakpoint.bind(this));

Ditto.

&gt; Source/WebInspectorUI/UserInterface/DebuggerManager.js:599
&gt; -        if (!breakpoint.id || breakpoint.disabled)
&gt; +        if (!breakpoint.identifier || breakpoint.disabled)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977083</commentid>
    <comment_count>10</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-02-05 14:16:51 -0800</bug_when>
    <thetext>Committed r163477: &lt;http://trac.webkit.org/changeset/163477&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222967</attachid>
            <date>2014-02-03 00:43:03 -0800</date>
            <delta_ts>2014-02-04 15:16:08 -0800</delta_ts>
            <desc>patch</desc>
            <filename>bug-127117-20140203004301.patch</filename>
            <type>text/plain</type>
            <size>85403</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYzMjczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ZWU5YjI1NGMzZjZlYTExZDI1ODE4MzA2ZDIxZmY1ZDIyMzBkMWFmLi41ODNlNWYzYThhN2VhMzg2
M2JkYmNlYjY2MWI1NTNjY2FlZDY1NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMiBAQAorMjAxNC0wMi0wMyAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBhZGQgcHJvYmUgbWFuYWdlciBhbmQgbW9kZWwgb2JqZWN0
cyB0byB0aGUgZnJvbnRlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNzExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZSBpbnNwZWN0b3IgZnJvbnRlbmQgbm93IGFzc2lnbnMgYnJlYWtwb2ludCBh
Y3Rpb24gaWRlbnRpZmllcnMsCisgICAgICAgIHJhdGhlciB0aGFuIHRoZSBiYWNrZW5kLiBSZW1v
dmUgcmV0dXJuIHZhbHVlcyBjb250YWluaW5nIGJyZWFrcG9pbnQKKyAgICAgICAgaWRlbnRpZmll
cnMsIGFuZCByZW1vdmUgdHJhY2tpbmcgYW5kIGFzc2lnbm1lbnQgb2YgYWN0aW9uIGlkZW50aWZp
ZXJzLgorCisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9y
OjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaW50QWN0aW9uKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkU2FtcGxlUHJvYmUpOgor
ICAgICAgICBQYXNzIEJyZWFrcG9pbnRBY3Rpb24gYnkgcmVmZXJlbmNlIHJhdGhlciB0aGFuIGp1
c3QgdGhlIGFjdGlvbiBpZGVudGlmaWVyLgorCisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdERl
YnVnU2VydmVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6b2JqZWN0R3JvdXBGb3JCcmVha3BvaW50
QWN0aW9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25zRnJvbVByb3RvY29sKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludCk6Cisg
ICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9p
bnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRTYW1w
bGVQcm9iZSk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL0RlYnVnZ2VyLmpzb246IFJldmVy
dCBjaGFuZ2UgdG8gc2V0QnJlYWtwb2ludCByZXR1cm4gdmFsdWVzLiBBZGQgb3B0aW9uYWwgaWRl
bnRpZmllciB0byBicmVha3BvaW50IGFjdGlvbnMuCisKIDIwMTQtMDItMDEgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0MgcHJvZmlsZXIncyBzdHViIGluZm8g
cHJvZmlsaW5nIHN1cHBvcnQgc2hvdWxkIHdvcmsgYWdhaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9n
CmluZGV4IGUzMGYzYTA0NTExYjc2MjA0MTlkMzcwMzk3Njc2NWIwNmFkMjc3NWMuLmFlOTU2OTRi
YzI3MTFkNTJkMzM2ODA2NWMxNTk5ZjM2M2QwM2JkNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDExMSBAQAorMjAxNC0wMi0wMyAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxl
LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBhZGQgcHJvYmUgbWFuYWdlciBhbmQgbW9k
ZWwgb2JqZWN0cyB0byB0aGUgZnJvbnRlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNzExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCB0aGUgcHJvYmUgbWFuYWdlciwgYW5kIHRoZSBmb2xsb3dp
bmcgbW9kZWwgb2JqZWN0czoKKworICAgICAgICAtIFByb2JlT2JqZWN0IGNvcnJlc3BvbmRzIHRv
IGEgc2luZ2xlIHByb2JlIGJyZWFrcG9pbnQgYWN0aW9uLgorICAgICAgICAtIFByb2JlU2V0T2Jq
ZWN0IGNvbnRhaW5zIGFsbCBQcm9iZU9iamVjdHMgZm9yIG9uZSBCcmVha3BvaW50LgorICAgICAg
ICAtIFByb2JlU2V0RGF0YUZyYW1lIGhvbGRzIHByb2JlIHNhbXBsZXMgZnJvbSBtdWx0aXBsZQor
ICAgICAgICBwcm9iZXMgZmlyZWQgZnJvbSB0aGUgc2FtZSBicmVha3BvaW50IGhpdC9kZWJ1Z2dl
ciBwYXVzZS4KKyAgICAgICAgLSBQcm9iZVNldERhdGFUYWJsZSBrZWVwcyB0cmFjayBvZiBtdWx0
aXBsZSBzdWNoIGRhdGEgZnJhbWVzCisgICAgICAgIGFuZCBtYW5hZ2VzIHByb2JlIHNhbXBsZSBs
aWZldGltZXMgYWNyb3NzIHBhZ2UgbmF2aWdhdGlvbnMuCisKKyAgICAgICAgVGhlIHByb2JlIG1h
bmFnZXIgdXBkYXRlcyBwcm9iZSBtb2RlbCBvYmplY3RzIHdoZW5ldmVyIGJyZWFrcG9pbnRzCisg
ICAgICAgIGFyZSBhZGRlZCwgcmVtb3ZlZCwgb3IgbW9kaWZpZWQuCisKKyAgICAgICAgVGhlIGlu
c3BlY3RvciBmcm9udGVuZCBub3cgYXNzaWducyBicmVha3BvaW50IGFjdGlvbiBpZGVudGlmaWVy
cywKKyAgICAgICAgcmF0aGVyIHRoYW4gdGhlIGJhY2tlbmQuIFRoaXMgbGV0cyBQcm9iZU9iamVj
dHMga2VlcCBzdGFibGUKKyAgICAgICAgaWRlbnRpZmllcnMgdGhhdCBtYXRjaCB0aGUgcHJvYmUn
cyBzYW1wbGVzLCBldmVuIHdoZW4gdGhlIHVuZGVybHlpbmcKKyAgICAgICAgYnJlYWtwb2ludCBp
cyByZS1hZGRlZCB3aXRoIGEgZGlmZmVyZW50IGlkZW50aWZpZXIgKHN1Y2ggYXMgd2hlbgorICAg
ICAgICBlZGl0aW5nIHByb2JlIGV4cHJlc3Npb25zKS4KKworICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvQnJlYWtwb2ludC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3Rv
dHlwZS5nZXQgcHJvYmVBY3Rpb25zKTogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludC5wcm90b3R5cGUucmVtb3ZlQWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5C
cmVha3BvaW50LnByb3RvdHlwZS5jbGVhckFjdGlvbnMpOiBBZGRlZC4KKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL0JyZWFrcG9pbnRBY3Rpb24uanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludEFjdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEFjdGlvbi5w
cm90b3R5cGUuZ2V0IGlkZW50aWZpZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnRBY3Rpb24ucHJvdG90eXBlLmdldCBpbmZvKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Rl
YnVnZ2VyTWFuYWdlci5qczogUmVzdG9yZSBzYXZlZCBicmVha3BvaW50cworICAgICAgICBmcm9t
IGNvb2tpZXMgb24gdGhlIHNlY29uZCBydW4gbG9vcCwgc28gdGhhdCBhbGwgbWFuYWdlcnMgd2ls
bAorICAgICAgICBiZSBhYmxlIHRvIHJlY2lldmVkIGJyZWFrcG9pbnQgYWRkZWQgZXZlbnRzLgor
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVC
cmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90
eXBlLmJyZWFrcG9pbnRSZXNvbHZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJN
YW5hZ2VyLnByb3RvdHlwZS5nZXROZXh0QnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIpOiBUaGUg
ZGVidWdnZXIgbWFuYWdlciBhc3NpZ25zCisgICAgICAgIHVuaXF1ZSBicmVha3BvaW50IGFjdGlv
biBpZGVudGlmaWVycyB3aXRoIHRoaXMgaWQgZ2VuZXJhdG9yLgorCisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5fZGVidWdnZXJCcmVha3BvaW50QWN0aW9u
VHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5k
aWRTZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIu
cHJvdG90eXBlLl9zZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1hbmFnZXIucHJvdG90eXBlLmRpZFJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnQpOgorICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvRGVidWdnZXJPYnNlcnZlci5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyLnByb3RvdHlwZS5kaWRTYW1wbGVQcm9iZSk6IEFkZGVk
LgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW5zcGVjdG9ySlNCYWNrZW5kQ29tbWFuZHMuanM6
IFVwZGF0ZSBzZXRCcmVha3BvaW50LgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1s
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5sb2FkZWQpOiBBZGQgUHJvYmVNYW5hZ2VyIGluaXRpYWxpemF0aW9uLgorICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvUHJvYmVNYW5hZ2VyLmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Qcm9iZU1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlci5wcm90
b3R5cGUuZ2V0IHByb2JlU2V0cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2Vy
LnByb3RvdHlwZS5wcm9iZVNldEZvckJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlByb2JlTWFuYWdlci5wcm90b3R5cGUuX2JyZWFrcG9pbnRSZW1vdmVkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Qcm9iZU1hbmFnZXIucHJvdG90eXBlLl9icmVha3BvaW50QWN0aW9uc0NoYW5n
ZWQuZ2V0IHZhcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2VyLnByb3RvdHlw
ZS5fYnJlYWtwb2ludEFjdGlvbnNDaGFuZ2VkLnNldCBnZXQga25vd25Qcm9iZUlkcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2VyLnByb3RvdHlwZS5fYnJlYWtwb2ludEFjdGlv
bnNDaGFuZ2VkKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2JlT2JqZWN0LmpzOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZVNhbXBsZU9iamVjdCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuUHJvYmVPYmplY3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlT2Jq
ZWN0LnByb3RvdHlwZS5nZXQgaWRlbnRpZmllcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJv
YmVPYmplY3QucHJvdG90eXBlLmdldCBicmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Qcm9iZU9iamVjdC5wcm90b3R5cGUuZ2V0IGV4cHJlc3Npb24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlByb2JlT2JqZWN0LnByb3RvdHlwZS5zZXQgZXhwcmVzc2lvbik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuUHJvYmVPYmplY3QucHJvdG90eXBlLmdldCBzYW1wbGVzKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Qcm9iZU9iamVjdC5wcm90b3R5cGUuY2xlYXJTYW1wbGVzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Qcm9iZU9iamVjdC5wcm90b3R5cGUuYWRkU2FtcGxlKToKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL1Byb2JlU2V0RGF0YUZyYW1lLmpzOiBBZGRlZC4KKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFGcmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
UHJvYmVTZXREYXRhRnJhbWUucHJvdG90eXBlLmdldCBrZXkpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlByb2JlU2V0RGF0YUZyYW1lLnByb3RvdHlwZS5nZXQgY291bnQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlByb2JlU2V0RGF0YUZyYW1lLnByb3RvdHlwZS5nZXQgaW5kZXgpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YUZyYW1lLnByb3RvdHlwZS5nZXQgaXNTZXBhcmF0
b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YUZyYW1lLnByb3RvdHlwZS5z
ZXQgaXNTZXBhcmF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YUZyYW1l
LnByb3RvdHlwZS5hZGRTYW1wbGVGb3JQcm9iZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJv
YmVTZXREYXRhRnJhbWUucHJvdG90eXBlLm1pc3NpbmdLZXlzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Qcm9iZVNldERhdGFGcmFtZS5wcm90b3R5cGUuaXNDb21wbGV0ZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhRnJhbWUucHJvdG90eXBlLmZpbGxNaXNzaW5nVmFsdWVz
KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Byb2JlU2V0RGF0YVRhYmxlLmpzOiBBZGRlZC4K
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFUYWJsZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUHJvYmVTZXREYXRhVGFibGUucHJvdG90eXBlLmdldCBmcmFtZXMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YVRhYmxlLnByb3RvdHlwZS5nZXQgc2VwYXJhdG9y
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhVGFibGUucHJvdG90eXBlLndp
bGxSZW1vdmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YVRhYmxlLnByb3Rv
dHlwZS5tYWluUmVzb3VyY2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZVNl
dERhdGFUYWJsZS5wcm90b3R5cGUuYWRkU2FtcGxlRm9yUHJvYmUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlByb2JlU2V0RGF0YVRhYmxlLnByb3RvdHlwZS5hZGRQcm9iZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhVGFibGUucHJvdG90eXBlLnJlbW92ZVByb2JlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFUYWJsZS5wcm90b3R5cGUuY3JlYXRlRnJh
bWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YVRhYmxlLnByb3RvdHlwZS5h
ZGRGcmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhVGFibGUucHJvdG90
eXBlLmFkZFNlcGFyYXRvcik6CisgICAgICAgICogVXNlckludGVyZmFjZS9Qcm9iZVNldE9iamVj
dC5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXRPYmplY3QpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlByb2JlU2V0T2JqZWN0LnByb3RvdHlwZS5nZXQgYnJlYWtwb2lu
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXRPYmplY3QucHJvdG90eXBlLmdldCBw
cm9iZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlU2V0T2JqZWN0LnByb3RvdHlwZS5n
ZXQgZGF0YVRhYmxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZVNldE9iamVjdC5wcm90
b3R5cGUuY2xlYXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlU2V0T2JqZWN0LnByb3Rv
dHlwZS5jcmVhdGVQcm9iZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXRPYmplY3Qu
cHJvdG90eXBlLnJlbW92ZVByb2JlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZVNldE9i
amVjdC5wcm90b3R5cGUud2lsbFJlbW92ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVT
ZXRPYmplY3QucHJvdG90eXBlLl9tYWluUmVzb3VyY2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Qcm9iZVNldE9iamVjdC5wcm90b3R5cGUuX2NyZWF0ZURhdGFUYWJsZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXRPYmplY3QucHJvdG90eXBlLl9zYW1wbGVDb2xsZWN0
ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlU2V0T2JqZWN0LnByb3RvdHlwZS5fYnJl
YWtwb2ludFJlc29sdmVkU3RhdGVEaWRDaGFuZ2UpOgorCiAyMDE0LTAxLTMwICBUaW1vdGh5IEhh
dGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBTaG93IHByb2ZpbGUgZGF0YSBp
biB0aGUgZGlzY3JldGUgU2NyaXB0cyB0aW1lbGluZSB2aWV3LgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaAppbmRleCA1NjEx
MDVjOGM2ZTdmODI4MjE0ZmY5NjRlZDI4ZTAwNDAxNDRjNDY3Li5hYzg2NjZmMmM4OGFlNTgyMzQx
YzljZGEzMDc2NWNlNWRlZTIyYzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaApAQCAtNjksNyArNjksNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKEpTQzo6U291cmNlSUQsIGNvbnN0
IFNjcmlwdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJjZShjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJy
b3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRQYXVzZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBjYWxsRnJhbWVzLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgZXhjZXB0aW9uKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNhbXBsZVByb2JlKEpTQzo6RXhlY1N0YXRlKiwgaW50
IHByb2JlSWRlbnRpZmllciwgaW50IGhpdENvdW50LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgcmVzdWx0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFNhbXBsZVByb2JlKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYsIGludCBoaXRDb3VudCwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHJlc3VsdCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBkaWRDb250aW51ZSgpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBicmVha3BvaW50QWN0
aW9uTG9nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJikgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAppbmRl
eCA4MWU0NDMzN2MzNTk0MjUwYzk3ODM3MWE0ZmExNjMzMGJmZjJmZWI2Li4xMjNlOWU4YmY1MWRh
MTk2NjRhM2IwMjY3ZTdlYzdhOGI4MDRkMDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcApAQCAtMTEzLDcgKzExMyw3
IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmV2YWx1YXRlQnJlYWtwb2ludEFjdGlvbihjb25z
dCBTY3JpcHRCcmVha3BvaW50QWN0aW9uJiBiCiAgICAgICAgIAogICAgICAgICBKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUgPSBkZWJ1Z2dlckNhbGxGcmFtZS0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKICAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgd3JhcHBlZFJl
c3VsdCA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKHN0YXRlLT52bSgpLCBleGNlcHRpb24gPyBl
eGNlcHRpb24gOiByZXN1bHQpOwotICAgICAgICBkaXNwYXRjaERpZFNhbXBsZVByb2JlKHN0YXRl
LCBicmVha3BvaW50QWN0aW9uLmlkZW50aWZpZXIsIHdyYXBwZWRSZXN1bHQpOworICAgICAgICBk
aXNwYXRjaERpZFNhbXBsZVByb2JlKHN0YXRlLCBicmVha3BvaW50QWN0aW9uLCB3cmFwcGVkUmVz
dWx0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0xNzYsNyArMTc2
LDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hCcmVha3BvaW50QWN0aW9uU291
bmQoRXhlY1N0YXRlKiBleGVjLCBpbnQgYnJlYWsKICAgICAgICAgbGlzdGVuZXItPmJyZWFrcG9p
bnRBY3Rpb25Tb3VuZChicmVha3BvaW50QWN0aW9uSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgU2Ny
aXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkU2FtcGxlUHJvYmUoRXhlY1N0YXRlKiBleGVjLCBp
bnQgaWRlbnRpZmllciwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNhbXBsZSkKK3Zv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkU2FtcGxlUHJvYmUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uJiBhY3Rpb24sIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBzYW1wbGUpCiB7CiAgICAgaWYgKG1fY2FsbGluZ0xpc3RlbmVycykK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OmRpc3BhdGNoRGlkU2FtcGxlUHJvYmUoRXhlY1N0YXRlKiBleGVjLCBpbnQgaWRlbnRpZmll
ciwKICAgICBWZWN0b3I8U2NyaXB0RGVidWdMaXN0ZW5lcio+IGxpc3RlbmVyc0NvcHk7CiAgICAg
Y29weVRvVmVjdG9yKCpsaXN0ZW5lcnMsIGxpc3RlbmVyc0NvcHkpOwogICAgIGZvciAoYXV0byBs
aXN0ZW5lciA6IGxpc3RlbmVyc0NvcHkpCi0gICAgICAgIGxpc3RlbmVyLT5kaWRTYW1wbGVQcm9i
ZShleGVjLCBpZGVudGlmaWVyLCBtX2hpdENvdW50LCBzYW1wbGUpOworICAgICAgICBsaXN0ZW5l
ci0+ZGlkU2FtcGxlUHJvYmUoZXhlYywgYWN0aW9uLCBtX2hpdENvdW50LCBzYW1wbGUpOwogfQog
CiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZENvbnRpbnVlKFNjcmlwdERlYnVn
TGlzdGVuZXIqIGxpc3RlbmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5oCmluZGV4IDYyZjI3MDJhZjQyNzEwMWNmYzU4NGFmYWE2
ZmRkMGNjMzQyZTc4NjMuLjQ0MDZkNTM3NjEzZjljNDFhMWQ0ZTRlY2YyZGMxYzcyMmVkYTVlZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdT
ZXJ2ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVn
U2VydmVyLmgKQEAgLTkxLDcgKzkxLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGlzcGF0Y2hG
YWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IExpc3RlbmVyU2V0JiBsaXN0ZW5lcnMsIEpTQzo6U291
cmNlUHJvdmlkZXIqLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7
CiAgICAgdm9pZCBkaXNwYXRjaEJyZWFrcG9pbnRBY3Rpb25Mb2coSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGRpc3BhdGNoQnJlYWtwb2ludEFjdGlvblNvdW5kKEpT
Qzo6RXhlY1N0YXRlKiwgaW50IGJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVyKTsKLSAgICB2b2lk
IGRpc3BhdGNoRGlkU2FtcGxlUHJvYmUoSlNDOjpFeGVjU3RhdGUqLCBpbnQgcHJvYmVJZGVudGlm
aWVyLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2FtcGxlKTsKKyAgICB2b2lkIGRp
c3BhdGNoRGlkU2FtcGxlUHJvYmUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTY3JpcHRCcmVha3Bv
aW50QWN0aW9uJiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNhbXBsZSk7CiAKICAg
ICBib29sIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dlckV2ZW50czsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcAppbmRleCBjZTU4YzA4MjBkZTYxZWNmNDhkODllMzQ5NDdlMjdmOTNi
ZTkyY2Q1Li42MTRhOTg5YzNiMzQxNDA3N2JjNDQxOGZmNmQ5ZDNlMTg3NDg2ZmQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtNDYsMTAgKzQ2LDE0IEBAIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCiBjb25zdCBjaGFyKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNr
dHJhY2VPYmplY3RHcm91cCA9ICJiYWNrdHJhY2UiOwogCi1zdGF0aWMgU3RyaW5nIG9iamVjdEdy
b3VwRm9yQnJlYWtwb2ludEFjdGlvbihpbnQgaWRlbnRpZmllcikKKy8vIE9iamVjdHMgY3JlYXRl
ZCBhbmQgcmV0YWluZWQgYnkgZXZhbHVhdGluZyBicmVha3BvaW50IGFjdGlvbnMgYXJlIHB1dCBp
bnRvIG9iamVjdCBncm91cHMKKy8vIGFjY29yZGluZyB0byB0aGUgYnJlYWtwb2ludCBhY3Rpb24g
aWRlbnRpZmllciBhc3NpZ25lZCBieSB0aGUgZnJvbnRlbmQuIEEgYnJlYWtwb2ludCBtYXkKKy8v
IGhhdmUgc2V2ZXJhbCBvYmplY3QgZ3JvdXBzLCBhbmQgb2JqZWN0cyBmcm9tIHNldmVyYWwgYmFj
a2VuZCBicmVha3BvaW50IGFjdGlvbiBpbnN0YW5jZXMgbWF5CisvLyBjcmVhdGUgb2JqZWN0cyBp
biB0aGUgc2FtZSBncm91cC4KK3N0YXRpYyBTdHJpbmcgb2JqZWN0R3JvdXBGb3JCcmVha3BvaW50
QWN0aW9uKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlvbikKIHsKICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgb2JqZWN0R3JvdXAsICgiYnJlYWtw
b2ludC1hY3Rpb24tIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAg
IHJldHVybiBtYWtlU3RyaW5nKG9iamVjdEdyb3VwLCBTdHJpbmc6Om51bWJlcihpZGVudGlmaWVy
KSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcob2JqZWN0R3JvdXAsIFN0cmluZzo6bnVtYmVyKGFj
dGlvbi5pZGVudGlmaWVyKSk7CiB9CiAKIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFn
ZXIpCkBAIC02MSw3ICs2NSw2IEBAIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRl
YnVnZ2VyQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjCiAgICAgLCBtX2Vu
YWJsZWQoZmFsc2UpCiAgICAgLCBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZChmYWxzZSkKICAg
ICAsIG1fbmV4dFByb2JlU2FtcGxlSWQoMSkKLSAgICAsIG1fbmV4dEJyZWFrcG9pbnRBY3Rpb25J
ZGVudGlmaWVyKDEpCiB7CiAgICAgLy8gRklYTUU6IG1ha2UgYnJlYWtSZWFzb24gb3B0aW9uYWwg
c28gdGhhdCB0aGVyZSB3YXMgbm8gbmVlZCB0byBpbml0IGl0IHdpdGggIm90aGVyIi4KICAgICBj
bGVhckJyZWFrRGV0YWlscygpOwpAQCAtMjIyLDE2ICsyMjUsMjEgQEAgYm9vbCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbChFcnJvclN0cmluZyog
ZXJyb3JTdHIKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCisgICAgICAg
IC8vIFNwZWNpZnlpbmcgYW4gaWRlbnRpZmllciBpcyBvcHRpb25hbC4gVGhleSBhcmUgdXNlZCB0
byBjb3JyZWxhdGUgcHJvYmUgc2FtcGxlcworICAgICAgICAvLyBpbiB0aGUgZnJvbnRlbmQgYWNy
b3NzIG11bHRpcGxlIGJhY2tlbmQgcHJvYmUgYWN0aW9ucyBhbmQgc2VncmVnYXRlIG9iamVjdCBn
cm91cHMuCisgICAgICAgIGludCBpZGVudGlmaWVyID0gMDsKKyAgICAgICAgb2JqZWN0LT5nZXRO
dW1iZXIoImlkZW50aWZpZXIiLCAmaWRlbnRpZmllcik7CisKICAgICAgICAgU3RyaW5nIGRhdGE7
CiAgICAgICAgIG9iamVjdC0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZGF0YSIpLCAmZGF0YSk7
CiAKLSAgICAgICAgcmVzdWx0LT5hcHBlbmQoU2NyaXB0QnJlYWtwb2ludEFjdGlvbih0eXBlLCBt
X25leHRCcmVha3BvaW50QWN0aW9uSWRlbnRpZmllcisrLCBkYXRhKSk7CisgICAgICAgIHJlc3Vs
dC0+YXBwZW5kKFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24odHlwZSwgaWRlbnRpZmllciwgZGF0YSkp
OwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBs
aW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcq
IGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCogY29uc3Qgb3B0aW9uYWxDb2x1bW5O
dW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvcHRpb25zLCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWRlbnRp
ZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
QnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXI+PiYgYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXJz
KQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBjb25zdCBv
cHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBp
bnQqIGNvbnN0IG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0Piogb3B0aW9ucywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9p
bnRJZCogb3V0QnJlYWtwb2ludElkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYg
bG9jYXRpb25zKQogewogICAgIGxvY2F0aW9ucyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgp
OwogICAgIGlmICghb3B0aW9uYWxVUkwgPT0gIW9wdGlvbmFsVVJMUmVnZXgpIHsKQEAgLTI2Miwx
MCArMjcwLDYgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlV
cmwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbGkKICAgICBpZiAoIWJyZWFrcG9pbnRB
Y3Rpb25zRnJvbVByb3RvY29sKGVycm9yU3RyaW5nLCBhY3Rpb25zLCAmYnJlYWtwb2ludEFjdGlv
bnMpKQogICAgICAgICByZXR1cm47CiAKLSAgICBicmVha3BvaW50QWN0aW9uSWRlbnRpZmllcnMg
PSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpE
ZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXI+OjpjcmVhdGUoKTsKLSAgICBmb3Ig
KFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlvbiA6IGJyZWFrcG9pbnRBY3Rpb25zKQotICAg
ICAgICBicmVha3BvaW50QWN0aW9uSWRlbnRpZmllcnMtPmFkZEl0ZW0oYWN0aW9uLmlkZW50aWZp
ZXIpOwotCiAgICAgbV9qYXZhU2NyaXB0QnJlYWtwb2ludHMuc2V0KGJyZWFrcG9pbnRJZGVudGlm
aWVyLCBidWlsZE9iamVjdEZvckJyZWFrcG9pbnRDb29raWUodXJsLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsIGNvbmRpdGlvbiwgYWN0aW9ucywgaXNSZWdleCwgYXV0b0NvbnRpbnVlKSk7CiAK
ICAgICBTY3JpcHRCcmVha3BvaW50IGJyZWFrcG9pbnQobGluZU51bWJlciwgY29sdW1uTnVtYmVy
LCBjb25kaXRpb24sIGJyZWFrcG9pbnRBY3Rpb25zLCBhdXRvQ29udGludWUpOwpAQCAtMjk2LDcg
KzMwMCw3IEBAIHN0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBJbnNwZWN0b3JPYmplY3QqIGxvY2F0aW9uLCBKCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbiwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZGVudGlmaWVyLCBSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9j
YXRpb24sIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXI+PiYgYnJlYWtw
b2ludEFjdGlvbklkZW50aWZpZXJzKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRC
cmVha3BvaW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mIGxvY2F0aW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9u
cywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJl
YWtwb2ludElkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dl
cjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbikKIHsKICAgICBKU0M6OlNvdXJjZUlEIHNvdXJj
ZUlEOwogICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7CkBAIC0zMTcsMTAgKzMyMSw2IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIGNvbnN0IFJlZlB0CiAgICAgaWYgKCFicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2Nv
bChlcnJvclN0cmluZywgYWN0aW9ucywgJmJyZWFrcG9pbnRBY3Rpb25zKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXJzID0gSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9p
bnRBY3Rpb25JZGVudGlmaWVyPjo6Y3JlYXRlKCk7Ci0gICAgZm9yIChTY3JpcHRCcmVha3BvaW50
QWN0aW9uJiBhY3Rpb24gOiBicmVha3BvaW50QWN0aW9ucykKLSAgICAgICAgYnJlYWtwb2ludEFj
dGlvbklkZW50aWZpZXJzLT5hZGRJdGVtKGFjdGlvbi5pZGVudGlmaWVyKTsKLQogICAgIFN0cmlu
ZyBicmVha3BvaW50SWRlbnRpZmllciA9IFN0cmluZzo6bnVtYmVyKHNvdXJjZUlEKSArICc6JyAr
IFN0cmluZzo6bnVtYmVyKGxpbmVOdW1iZXIpICsgJzonICsgU3RyaW5nOjpudW1iZXIoY29sdW1u
TnVtYmVyKTsKICAgICBpZiAobV9icmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVh
a3BvaW50SURzLmZpbmQoYnJlYWtwb2ludElkZW50aWZpZXIpICE9IG1fYnJlYWtwb2ludElkZW50
aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEcy5lbmQoKSkgewogICAgICAgICAqZXJyb3JT
dHJpbmcgPSBBU0NJSUxpdGVyYWwoIkJyZWFrcG9pbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIGFs
cmVhZHkgZXhpc3RzLiIpOwpAQCAtMzQ1LDcgKzM0NSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgYnJl
YWtwCiAgICAgZm9yIChhdXRvIGJyZWFrcG9pbnRJRCA6IGJyZWFrcG9pbnRJRHMpIHsKICAgICAg
ICAgY29uc3QgVmVjdG9yPFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24+JiBicmVha3BvaW50QWN0aW9u
cyA9IHNjcmlwdERlYnVnU2VydmVyKCkuZ2V0QWN0aW9uc0ZvckJyZWFrcG9pbnQoYnJlYWtwb2lu
dElEKTsKICAgICAgICAgZm9yIChhdXRvJiBhY3Rpb24gOiBicmVha3BvaW50QWN0aW9ucykKLSAg
ICAgICAgICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5yZWxlYXNlT2JqZWN0R3JvdXAob2Jq
ZWN0R3JvdXBGb3JCcmVha3BvaW50QWN0aW9uKGFjdGlvbi5pZGVudGlmaWVyKSk7CisgICAgICAg
ICAgICBtX2luamVjdGVkU2NyaXB0TWFuYWdlci0+cmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdy
b3VwRm9yQnJlYWtwb2ludEFjdGlvbihhY3Rpb24pKTsKIAogICAgICAgICBzY3JpcHREZWJ1Z1Nl
cnZlcigpLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElEKTsKICAgICB9CkBAIC02NDksMTQg
KzY0OSwxNCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKEpTQzo6RXhl
Y1N0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgRGVwcmVjYQogICAgICAgICBtX2xpc3RlbmVyLT5k
aWRQYXVzZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFNhbXBsZVBy
b2JlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgaW50IHByb2JlSWRlbnRpZmllciwgaW50
IGhpdENvdW50LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2FtcGxlKQordm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRTYW1wbGVQcm9iZShKU0M6OkV4ZWNTdGF0ZSogc2Ny
aXB0U3RhdGUsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGFjdGlvbiwgaW50IGhpdENv
dW50LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2FtcGxlKQogewogICAgIGludCBz
YW1wbGVJZCA9IG1fbmV4dFByb2JlU2FtcGxlSWQrKzsKIAogICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmluamVjdGVkU2NyaXB0Rm9y
KHNjcmlwdFN0YXRlKTsKLSAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4gcGF5bG9hZCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qoc2FtcGxlLCBvYmplY3RH
cm91cEZvckJyZWFrcG9pbnRBY3Rpb24ocHJvYmVJZGVudGlmaWVyKSk7CisgICAgUmVmUHRyPFR5
cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHBheWxvYWQgPSBpbmplY3RlZFNjcmlw
dC53cmFwT2JqZWN0KHNhbXBsZSwgb2JqZWN0R3JvdXBGb3JCcmVha3BvaW50QWN0aW9uKGFjdGlv
bikpOwogICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OlByb2JlU2FtcGxlPiByZXN1
bHQgPSBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OlByb2JlU2FtcGxlOjpjcmVhdGUoKQotICAgICAg
ICAuc2V0UHJvYmVJZChwcm9iZUlkZW50aWZpZXIpCisgICAgICAgIC5zZXRQcm9iZUlkKGFjdGlv
bi5pZGVudGlmaWVyKQogICAgICAgICAuc2V0U2FtcGxlSWQoc2FtcGxlSWQpCiAgICAgICAgIC5z
ZXRCYXRjaElkKGhpdENvdW50KQogICAgICAgICAuc2V0VGltZXN0YW1wKG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IGYxNDUx
ZTAyMzA3ZWQzNWIxMTM1YjRlNjljZTFjYTFmODI4NmVjN2YuLjM5N2ExYmZhNmY2Yzg5YTFkMTlj
NWZmOWQxMjA5ZWM5NDA2ZjkzNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAg
LTcxLDggKzcxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJp
bmcqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2ZShFcnJvclN0cmlu
ZyosIGJvb2wgYWN0aXZlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2lu
dEJ5VXJsKEVycm9yU3RyaW5nKiwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9u
YWxVUkwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBvcHRpb25h
bENvbHVtbk51bWJlciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piog
b3B0aW9ucywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCos
IFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zLCBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFr
cG9pbnRBY3Rpb25JZGVudGlmaWVyPj4mIGJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVycykgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbiwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9ucywgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbiwgUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50QWN0aW9uSWRlbnRpZmllcj4+JiBicmVha3BvaW50QWN0aW9uSWRlbnRpZmll
cnMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JT
dHJpbmcqLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVy
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRpb25zLCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiwgUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2Vy
OjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRC
cmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4qIG9wdGlvbnMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpCcmVha3BvaW50
SWQqLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiYg
YWN0dWFsTG9jYXRpb24pIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVCcmVha3Bv
aW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRpZmllcikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyos
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbikgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIHNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
c2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNl
bnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6R2VuZXJpY1R5cGVzOjpT
ZWFyY2hNYXRjaD4+Jikgb3ZlcnJpZGU7CkBAIC0xMzMsNyArMTMzLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlELCBjb25zdCBTY3Jp
cHQmKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJj
ZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBp
bnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgb3ZlcnJpZGUgZmluYWw7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNhbXBsZVByb2JlKEpTQzo6RXhlY1N0YXRlKiwgaW50IHBy
b2JlSWRlbnRpZmllciwgaW50IGhpdENvdW50LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgc2FtcGxlKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2FtcGxlUHJv
YmUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uJiwgaW50IGhp
dENvdW50LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2FtcGxlKSBvdmVycmlkZSBm
aW5hbDsKIAogICAgIHZpcnR1YWwgdm9pZCBicmVha3BvaW50QWN0aW9uU291bmQoaW50IGJyZWFr
cG9pbnRBY3Rpb25JZGVudGlmaWVyKSBvdmVycmlkZTsKIApAQCAtMTYzLDcgKzE2Myw2IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2VuYWJsZWQ7CiAgICAgYm9vbCBtX2phdmFTY3JpcHRQYXVzZVNj
aGVkdWxlZDsKICAgICBpbnQgbV9uZXh0UHJvYmVTYW1wbGVJZDsKLSAgICBpbnQgbV9uZXh0QnJl
YWtwb2ludEFjdGlvbklkZW50aWZpZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRGVi
dWdnZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRGVi
dWdnZXIuanNvbgppbmRleCA2MmI4NTcwMTEzZWEwNjRhZTRiOTE5NTMyYTFhOGFjZDE0MmUzNjE2
Li5lMDk0NDhmOTVlZmQ5YjlhODRmZGViYjg0YTUxMThmZjRlZmVkYmQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RlYnVnZ2VyLmpzb24KKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9EZWJ1Z2dlci5qc29u
CkBAIC0zNyw3ICszNyw4IEBACiAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImxvZyIsICJldmFsdWF0ZSIsICJzb3VuZCIsICJw
cm9iZSJdLCAiZGVzY3JpcHRpb24iOiAiRGlmZmVyZW50IGtpbmRzIG9mIGJyZWFrcG9pbnQgYWN0
aW9ucy4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhIiwgInR5cGUiOiAic3Ry
aW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkRhdGEgYXNzb2NpYXRlZCB3
aXRoIHRoaXMgYnJlYWtwb2ludCB0eXBlIChlLmcuIGZvciB0eXBlIFwiZXZhbFwiIHRoaXMgaXMg
dGhlIEphdmFTY3JpcHQgc3RyaW5nIHRvIGV2YWx1bGF0ZSkuIiB9CisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkYXRhIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRl
c2NyaXB0aW9uIjogIkRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYnJlYWtwb2ludCB0eXBlIChl
LmcuIGZvciB0eXBlIFwiZXZhbFwiIHRoaXMgaXMgdGhlIEphdmFTY3JpcHQgc3RyaW5nIHRvIGV2
YWx1bGF0ZSkuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWRlbnRpZmllciIsICJ0
eXBlIjogImludGVnZXIiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQSBmcm9u
dGVuZC1hc3NpZ25lZCBpZGVudGlmaWVyIGZvciB0aGlzIGJyZWFrcG9pbnQgYWN0aW9uLiIgfQog
ICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBY3Rpb24gdG8gcGVy
Zm9ybSB3aGVuIGEgYnJlYWtwb2ludCBpcyB0cmlnZ2VyZWQuIgogICAgICAgICB9LApAQCAtMTI0
LDggKzEyNSw3IEBACiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgInJldHVybnMiOiBbCiAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJicmVha3BvaW50SWQiLCAiJHJlZiI6ICJCcmVha3Bv
aW50SWQiLCAiZGVzY3JpcHRpb24iOiAiSWQgb2YgdGhlIGNyZWF0ZWQgYnJlYWtwb2ludCBmb3Ig
ZnVydGhlciByZWZlcmVuY2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibG9jYXRp
b25zIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIkxvY2F0aW9uIn0sICJk
ZXNjcmlwdGlvbiI6ICJMaXN0IG9mIHRoZSBsb2NhdGlvbnMgdGhpcyBicmVha3BvaW50IHJlc29s
dmVkIGludG8gdXBvbiBhZGRpdGlvbi4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJi
cmVha3BvaW50QWN0aW9uSWRlbnRpZmllcnMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsg
IiRyZWYiOiAiQnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIiIH0sICJkZXNjcmlwdGlvbiI6ICJB
c3NpZ25lZCBicmVha3BvaW50IGFjdGlvbiBpZGVudGlmaWVycy4iIH0KKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImxvY2F0aW9ucyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJl
ZiI6ICJMb2NhdGlvbiJ9LCAiZGVzY3JpcHRpb24iOiAiTGlzdCBvZiB0aGUgbG9jYXRpb25zIHRo
aXMgYnJlYWtwb2ludCByZXNvbHZlZCBpbnRvIHVwb24gYWRkaXRpb24uIiB9CiAgICAgICAgICAg
ICBdLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlNldHMgSmF2YVNjcmlwdCBicmVha3Bv
aW50IGF0IGdpdmVuIGxvY2F0aW9uIHNwZWNpZmllZCBlaXRoZXIgYnkgVVJMIG9yIFVSTCByZWdl
eC4gT25jZSB0aGlzIGNvbW1hbmQgaXMgaXNzdWVkLCBhbGwgZXhpc3RpbmcgcGFyc2VkIHNjcmlw
dHMgd2lsbCBoYXZlIGJyZWFrcG9pbnRzIHJlc29sdmVkIGFuZCByZXR1cm5lZCBpbiA8Y29kZT5s
b2NhdGlvbnM8L2NvZGU+IHByb3BlcnR5LiBGdXJ0aGVyIG1hdGNoaW5nIHNjcmlwdCBwYXJzaW5n
IHdpbGwgcmVzdWx0IGluIHN1YnNlcXVlbnQgPGNvZGU+YnJlYWtwb2ludFJlc29sdmVkPC9jb2Rl
PiBldmVudHMgaXNzdWVkLiBUaGlzIGxvZ2ljYWwgYnJlYWtwb2ludCB3aWxsIHN1cnZpdmUgcGFn
ZSByZWxvYWRzLiIKICAgICAgICAgfSwKQEAgLTEzNyw4ICsxMzcsNyBAQAogICAgICAgICAgICAg
XSwKICAgICAgICAgICAgICJyZXR1cm5zIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
YnJlYWtwb2ludElkIiwgIiRyZWYiOiAiQnJlYWtwb2ludElkIiwgImRlc2NyaXB0aW9uIjogIklk
IG9mIHRoZSBjcmVhdGVkIGJyZWFrcG9pbnQgZm9yIGZ1cnRoZXIgcmVmZXJlbmNlLiIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFjdHVhbExvY2F0aW9uIiwgIiRyZWYiOiAiTG9jYXRp
b24iLCAiZGVzY3JpcHRpb24iOiAiTG9jYXRpb24gdGhpcyBicmVha3BvaW50IHJlc29sdmVkIGlu
dG8uIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnJlYWtwb2ludEFjdGlvbklkZW50
aWZpZXJzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIkJyZWFrcG9pbnRB
Y3Rpb25JZGVudGlmaWVyIiB9LCAiZGVzY3JpcHRpb24iOiAiQXNzaWduZWQgYnJlYWtwb2ludCBh
Y3Rpb24gaWRlbnRpZmllcnMuIiB9CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhY3R1YWxM
b2NhdGlvbiIsICIkcmVmIjogIkxvY2F0aW9uIiwgImRlc2NyaXB0aW9uIjogIkxvY2F0aW9uIHRo
aXMgYnJlYWtwb2ludCByZXNvbHZlZCBpbnRvLiIgfQogICAgICAgICAgICAgXSwKICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJTZXRzIEphdmFTY3JpcHQgYnJlYWtwb2ludCBhdCBhIGdpdmVu
IGxvY2F0aW9uLiIKICAgICAgICAgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0JyZWFrcG9pbnQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9CcmVha3BvaW50LmpzCmluZGV4IDI5MDczZDkxMWRkZTNhNTRiMzgwMzIxYjUz
YzA4NjFlNzhhNmQ2MGIuLjk0YTYzZjQ3M2UwYjVmZDE1YjQ4OWE5ZjQwYjRjZWVlMzJlZGNjNjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0JyZWFrcG9p
bnQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQnJlYWtwb2lu
dC5qcwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjAzLDYgKzIwMywxMyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIH07CiAgICAgfSwKIAorICAgIGdldCBwcm9iZUFjdGlvbnMoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGFjdGlvbikgewor
ICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dEFjdGlvbi5UeXBlLlByb2JlOworICAgICAgICB9KTsKKyAgICB9LAorCiAgICAgY3ljbGVUb05l
eHRNb2RlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewpA
QCAtMzMyLDYgKzMzOSwxMiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50LkV2ZW50LkFjdGlvbnNEaWRDaGFuZ2UpOwogICAgIH0sCiAKKyAgICBjbGVhckFjdGlv
bnM6IGZ1bmN0aW9uKGFjdGlvbikKKyAgICB7CisgICAgICAgIHRoaXMuX2FjdGlvbnMgPSBbXTsK
KyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnQuRXZlbnQuQWN0aW9uc0RpZENoYW5nZSk7CisgICAgfSwKKwogICAgIHNhdmVJZGVudGl0
eVRvQ29va2llOiBmdW5jdGlvbihjb29raWUpCiAgICAgewogICAgICAgICBjb29raWVbV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnQuVVJMQ29va2llS2V5XSA9IHRoaXMudXJsOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQnJlYWtwb2ludEFjdGlvbi5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0JyZWFrcG9pbnRBY3Rpb24uanMK
aW5kZXggYjlmZjFiMjMyNmEzYjM2NTEwMzAzOWE4NzVlNDM1NzA3ZWZlZDc3Ni4uNGZjNDQyZjcz
ZGVmNGI0ZTEzM2UwYjhhOGM4ZGYzZjUyMjg0NTYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQnJlYWtwb2ludEFjdGlvbi5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CcmVha3BvaW50QWN0aW9uLmpzCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw2ICs0
Miw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50QWN0aW9uID0gZnVuY3Rpb24oYnJlYWtwb2lu
dCwgdHlwZU9ySW5mbywgZGF0YSkKICAgICAgICAgY29uc29sZS5lcnJvcigiVW5leHBlY3RlZCB0
eXBlIHBhc3NlZCB0byBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEFjdGlvbiIpOwogCiAgICAgY29u
c29sZS5hc3NlcnQodHlwZW9mIHRoaXMuX3R5cGUgPT09ICJzdHJpbmciKTsKKyAgICB0aGlzLl9p
ZGVudGlmaWVyID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5nZXROZXh0QnJlYWtwb2lu
dEFjdGlvbklkZW50aWZpZXIoKTsKIH07CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50QWN0aW9u
LlR5cGUgPSB7CkBAIC01Myw2ICs1NCw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50QWN0aW9u
LlR5cGUgPSB7CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50QWN0aW9uLnByb3RvdHlwZSA9IHsK
ICAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRBY3Rpb24sCisgICAgX19w
cm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKIAogICAgIC8vIFB1YmxpYwog
CkBAIC02MSw2ICs2MywxMSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEFjdGlvbi5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50OwogICAgIH0sCiAKKyAgICBn
ZXQgaWRlbnRpZmllcigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5faWRlbnRpZmllcjsK
KyAgICB9LAorCiAgICAgZ2V0IHR5cGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3R5
cGU7CkBAIC04MywxMSArOTAsOSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEFjdGlvbi5wcm90
b3R5cGUgPSB7CiAKICAgICBnZXQgaW5mbygpCiAgICAgewotICAgICAgICB2YXIgb2JqID0ge3R5
cGU6IHRoaXMuX3R5cGV9OworICAgICAgICB2YXIgb2JqID0ge3R5cGU6IHRoaXMuX3R5cGUsIGlk
ZW50aWZpZXI6IHRoaXMuX2lkZW50aWZpZXJ9OwogICAgICAgICBpZiAodGhpcy5fZGF0YSkKICAg
ICAgICAgICAgIG9iai5kYXRhID0gdGhpcy5fZGF0YTsKICAgICAgICAgcmV0dXJuIG9iajsKICAg
ICB9CiB9OwotCi1XZWJJbnNwZWN0b3IuQnJlYWtwb2ludEFjdGlvbi5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9EZWJ1Z2dlck1hbmFnZXIuanMKaW5kZXggNTFk
MmM5MjQzNGQ2NGIyMzVjMGEzYjA5ZWIzNDE1ZGEwNjQ3NzljMC4uZmFkYzZmNzc5ZTMzZmEzNGU5
OTAwNzM3OTU5MWMyN2M1NDk3ZWFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvRGVidWdnZXJNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0RlYnVnZ2VyTWFuYWdlci5qcwpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNiArNTMsOCBAQCBXZWJJ
bnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX2JyZWFrcG9p
bnRTY3JpcHRJZGVudGlmaWVyTWFwID0ge307CiAgICAgdGhpcy5fYnJlYWtwb2ludElkTWFwID0g
e307CiAKKyAgICB0aGlzLl9uZXh0QnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIgPSAxOworCiAg
ICAgdGhpcy5fc2NyaXB0SWRNYXAgPSB7fTsKICAgICB0aGlzLl9zY3JpcHRVUkxNYXAgPSB7fTsK
IApAQCAtNjQsMTEgKzY2LDE2IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIgPSBmdW5j
dGlvbigpCiAKICAgICB0aGlzLl91cGRhdGVCcmVha09uRXhjZXB0aW9uc1N0YXRlKCk7CiAKLSAg
ICB2YXIgc2F2ZWRCcmVha3BvaW50cyA9IHRoaXMuX2JyZWFrcG9pbnRzU2V0dGluZy52YWx1ZTsK
LSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNhdmVkQnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQoc2F2
ZWRCcmVha3BvaW50c1tpXSk7Ci0gICAgICAgIHRoaXMuYWRkQnJlYWtwb2ludChicmVha3BvaW50
LCB0cnVlKTsKKyAgICBmdW5jdGlvbiByZXN0b3JlQnJlYWtwb2ludHNTb29uKCkgeworICAgICAg
ICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50c1NldHRpbmcudmFsdWUubWFwKGZ1
bmN0aW9uKGJyZWFrcG9pbnRDb29raWUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnQoYnJlYWtwb2ludENvb2tpZSk7CisgICAgICAgIH0pOworICAgICAg
ICBicmVha3BvaW50cy5mb3JFYWNoKHRoaXMuYWRkQnJlYWtwb2ludCwgdGhpcyk7CiAgICAgfQor
CisgICAgLy8gRW5zdXJlIHRoYXQgYWxsIG1hbmFnZXJzIGxlYXJuIGFib3V0IHJlc3RvcmVkIGJy
ZWFrcG9pbnRzLAorICAgIC8vIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgaW5pdGlhbGl6YXRpb24gb3Jk
ZXIuCisgICAgc2V0VGltZW91dChyZXN0b3JlQnJlYWtwb2ludHNTb29uLmJpbmQodGhpcyksIDAp
OwogfTsKIAogV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudCA9IHsKQEAgLTI2MCw3
ICsyNjcsNyBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAog
ICAgICAgICB0aGlzLl9icmVha3BvaW50cy5yZW1vdmUoYnJlYWtwb2ludCk7CiAKLSAgICAgICAg
aWYgKGJyZWFrcG9pbnQuaWQpCisgICAgICAgIGlmIChicmVha3BvaW50LmlkZW50aWZpZXIpCiAg
ICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpOwogCiAgICAgICAg
IGlmIChicmVha3BvaW50LnVybCkgewpAQCAtMjgxLDYgKzI4OCwxMCBAQCBXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
CisgICAgICAgIC8vIERpc2FibGUgdGhlIGJyZWFrcG9pbnQgZmlyc3QsIHNvIHJlbW92aW5nIGFj
dGlvbnMgZG9lc24ndCByZS1hZGQgdGhlIGJyZWFrcG9pbnQuCisgICAgICAgIGJyZWFrcG9pbnQu
ZGlzYWJsZWQgPSB0cnVlOworICAgICAgICBicmVha3BvaW50LmNsZWFyQWN0aW9ucygpOworCiAg
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1hbmFnZXIuRXZlbnQuQnJlYWtwb2ludFJlbW92ZWQsIHticmVha3BvaW50OiBicmVha3BvaW50
fSk7CiAgICAgfSwKIApAQCAtMjkzLDcgKzMwNCw3IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1h
bmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIWJyZWFrcG9pbnQpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgY29uc29sZS5hc3NlcnQoYnJlYWtwb2ludC5pZCA9PT0gYnJl
YWtwb2ludElkZW50aWZpZXIpOworICAgICAgICBjb25zb2xlLmFzc2VydChicmVha3BvaW50Lmlk
ZW50aWZpZXIgPT09IGJyZWFrcG9pbnRJZGVudGlmaWVyKTsKIAogICAgICAgICBicmVha3BvaW50
LnJlc29sdmVkID0gdHJ1ZTsKICAgICB9LApAQCAtNDMxLDYgKzQ0MiwxMSBAQCBXZWJJbnNwZWN0
b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuaXNC
cmVha3BvaW50UmVtb3ZhYmxlKGJyZWFrcG9pbnQpOwogICAgIH0sCiAKKyAgICBnZXROZXh0QnJl
YWtwb2ludEFjdGlvbklkZW50aWZpZXI6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9uZXh0QnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIrKzsKKyAgICB9LAorCiAgICAg
Ly8gUHJpdmF0ZQogCiAgICAgX3NvdXJjZUNvZGVMb2NhdGlvbkZyb21QYXlsb2FkOiBmdW5jdGlv
bihwYXlsb2FkKQpAQCAtNDg3LDYgKzUwMyw4IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIERlYnVnZ2VyQWdlbnQuQnJlYWtw
b2ludEFjdGlvblR5cGUuRXZhbHVhdGU7CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRBY3Rpb24uVHlwZS5Tb3VuZDoKICAgICAgICAgICAgIHJldHVybiBEZWJ1Z2dlckFnZW50
LkJyZWFrcG9pbnRBY3Rpb25UeXBlLlNvdW5kOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5C
cmVha3BvaW50QWN0aW9uLlR5cGUuUHJvYmU6CisgICAgICAgICAgICByZXR1cm4gRGVidWdnZXJB
Z2VudC5CcmVha3BvaW50QWN0aW9uVHlwZS5Qcm9iZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybiBEZWJ1Z2dl
ckFnZW50LkJyZWFrcG9pbnRBY3Rpb25UeXBlLkxvZzsKQEAgLTQ5NSwxMCArNTEzLDEwIEBAIFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgX3NldEJyZWFr
cG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgY29u
c29sZS5hc3NlcnQoIWJyZWFrcG9pbnQuaWQpOworICAgICAgICBjb25zb2xlLmFzc2VydCghYnJl
YWtwb2ludC5pZGVudGlmaWVyKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoIWJyZWFrcG9pbnQu
ZGlzYWJsZWQpOwogCi0gICAgICAgIGlmIChicmVha3BvaW50LmlkIHx8IGJyZWFrcG9pbnQuZGlz
YWJsZWQpCisgICAgICAgIGlmIChicmVha3BvaW50LmlkZW50aWZpZXIgfHwgYnJlYWtwb2ludC5k
aXNhYmxlZCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBmdW5jdGlvbiBkaWRTZXRC
cmVha3BvaW50KGVycm9yLCBicmVha3BvaW50SWRlbnRpZmllcikKQEAgLTUwOCw3ICs1MjYsNyBA
QCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAg
ICAgdGhpcy5fYnJlYWtwb2ludElkTWFwW2JyZWFrcG9pbnRJZGVudGlmaWVyXSA9IGJyZWFrcG9p
bnQ7CiAKLSAgICAgICAgICAgIGJyZWFrcG9pbnQuaWQgPSBicmVha3BvaW50SWRlbnRpZmllcjsK
KyAgICAgICAgICAgIGJyZWFrcG9pbnQuaWRlbnRpZmllciA9IGJyZWFrcG9pbnRJZGVudGlmaWVy
OwogICAgICAgICAgICAgYnJlYWtwb2ludC5yZXNvbHZlZCA9IHRydWU7CiAKICAgICAgICAgICAg
IGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpCkBAIC01NTIsOSArNTcwLDcgQEAg
V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICBfcmVtb3Zl
QnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCwgY2FsbGJhY2spCiAgICAgewotICAgICAg
ICBjb25zb2xlLmFzc2VydChicmVha3BvaW50LmlkKTsKLQotICAgICAgICBpZiAoIWJyZWFrcG9p
bnQuaWQpCisgICAgICAgIGlmICghYnJlYWtwb2ludC5pZGVudGlmaWVyKQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIGZ1bmN0aW9uIGRpZFJlbW92ZUJyZWFrcG9pbnQoZXJyb3IpCkBA
IC01NjIsOSArNTc4LDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJv
cihlcnJvcik7CiAKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50SWRNYXBbYnJl
YWtwb2ludC5pZF07CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludElkTWFwW2Jy
ZWFrcG9pbnQuaWRlbnRpZmllcl07CiAKLSAgICAgICAgICAgIGJyZWFrcG9pbnQuaWQgPSBudWxs
OworICAgICAgICAgICAgYnJlYWtwb2ludC5pZGVudGlmaWVyID0gbnVsbDsKIAogICAgICAgICAg
ICAgLy8gRG9uJ3QgcmVzZXQgcmVzb2x2ZWQgaGVyZSBzaW5jZSB3ZSB3YW50IHRvIGtlZXAgZGlz
YWJsZWQgYnJlYWtwb2ludHMgbG9va2luZyBsaWtlIHRoZXkKICAgICAgICAgICAgIC8vIGFyZSBy
ZXNvbHZlZCBpbiB0aGUgdXNlciBpbnRlcmZhY2UuIFRoZXkgd2lsbCBnZXQgbWFya2VkIGFzIHVu
cmVzb2x2ZWQgaW4gcmVzZXQuCkBAIC01NzMsNyArNTg5LDcgQEAgV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAg
ICAgICAgfQogCi0gICAgICAgIERlYnVnZ2VyQWdlbnQucmVtb3ZlQnJlYWtwb2ludChicmVha3Bv
aW50LmlkLCBkaWRSZW1vdmVCcmVha3BvaW50LmJpbmQodGhpcykpOworICAgICAgICBEZWJ1Z2dl
ckFnZW50LnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5pZGVudGlmaWVyLCBkaWRSZW1vdmVC
cmVha3BvaW50LmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBfYnJlYWtwb2ludERpc3BsYXlM
b2NhdGlvbkRpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCkBAIC01ODIsNyArNTk4LDcgQEAgV2Vi
SW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC50YXJnZXQ7Ci0gICAgICAgIGlm
ICghYnJlYWtwb2ludC5pZCB8fCBicmVha3BvaW50LmRpc2FibGVkKQorICAgICAgICBpZiAoIWJy
ZWFrcG9pbnQuaWRlbnRpZmllciB8fCBicmVha3BvaW50LmRpc2FibGVkKQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIC8vIFJlbW92ZSB0aGUgYnJlYWtwb2ludCB3aXRoIGl0cyBvbGQg
aWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9EZWJ1
Z2dlck9ic2VydmVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRGVi
dWdnZXJPYnNlcnZlci5qcwppbmRleCAyZGY0MmE1YmNhNmY4MGFlZGE5NGM3N2FkMGNmNDY2MDUz
ZjQ2NDcwLi4wYjIxYTEzYjM5NjY0NWY1YTFmZWVjYjdiNmFkMjc3MjlhNGEzYzBmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9EZWJ1Z2dlck9ic2VydmVy
LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0RlYnVnZ2VyT2Jz
ZXJ2ZXIuanMKQEAgLTY3LDYgKzY3LDExIEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVy
LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFn
ZXIucGxheUJyZWFrcG9pbnRBY3Rpb25Tb3VuZChicmVha3BvaW50QWN0aW9uSWRlbnRpZmllcik7
CiAgICAgfSwKKworICAgIGRpZFNhbXBsZVByb2JlOiBmdW5jdGlvbihzYW1wbGUpCisgICAgewor
ICAgICAgICBXZWJJbnNwZWN0b3IucHJvYmVNYW5hZ2VyLmRpZFNhbXBsZVByb2JlKHNhbXBsZSk7
CisgICAgfQogfTsKIAogV2ViSW5zcGVjdG9yLkRlYnVnZ2VyT2JzZXJ2ZXIucHJvdG90eXBlLl9f
cHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW5zcGVjdG9ySlNCYWNrZW5kQ29tbWFu
ZHMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbnNwZWN0b3JKU0Jh
Y2tlbmRDb21tYW5kcy5qcwppbmRleCAyMzRiZDY5OTlkZGE2ZjgyZGIxYWY1OGY2MmE0NWU4MDg3
MmUxZTg2Li45NDdlODFlMjcxZjIxOWUwMmY1OTU5MDllM2Y4M2NhZTM1ZDJjZDJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbnNwZWN0b3JKU0JhY2tl
bmRDb21tYW5kcy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9J
bnNwZWN0b3JKU0JhY2tlbmRDb21tYW5kcy5qcwpAQCAtMjEsOCArMjEsOCBAQCBJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRlYnVnZ2VyLnBsYXlCcmVha3BvaW50QWN0aW9uU291bmQi
LCBbImJyZWFrcG9pbgogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRlYnVnZ2Vy
LmVuYWJsZSIsIFtdLCBbXSk7CiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGVi
dWdnZXIuZGlzYWJsZSIsIFtdLCBbXSk7CiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUiLCBbeyJuYW1lIjogImFjdGl2ZSIsICJ0
eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbXSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGVidWdnZXIuc2V0QnJlYWtwb2ludEJ5VXJsIiwgW3sibmFt
ZSI6ICJsaW5lTnVtYmVyIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7
Im5hbWUiOiAidXJsIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFt
ZSI6ICJ1cmxSZWdleCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5h
bWUiOiAiY29sdW1uTnVtYmVyIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0s
IHsibmFtZSI6ICJvcHRpb25zIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX1d
LCBbImJyZWFrcG9pbnRJZCIsICJsb2NhdGlvbnMiLCAiYnJlYWtwb2ludEFjdGlvbklkZW50aWZp
ZXJzIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRlYnVnZ2VyLnNldEJy
ZWFrcG9pbnQiLCBbeyJuYW1lIjogImxvY2F0aW9uIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlv
bmFsIjogZmFsc2V9LCB7Im5hbWUiOiAib3B0aW9ucyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRp
b25hbCI6IHRydWV9XSwgWyJicmVha3BvaW50SWQiLCAiYWN0dWFsTG9jYXRpb24iLCAiYnJlYWtw
b2ludEFjdGlvbklkZW50aWZpZXJzIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIkRlYnVnZ2VyLnNldEJyZWFrcG9pbnRCeVVybCIsIFt7Im5hbWUiOiAibGluZU51bWJlciIs
ICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInVybCIsICJ0
eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidXJsUmVnZXgiLCAi
dHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImNvbHVtbk51bWJl
ciIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAib3B0aW9u
cyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJicmVha3BvaW50SWQi
LCAibG9jYXRpb25zIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRlYnVn
Z2VyLnNldEJyZWFrcG9pbnQiLCBbeyJuYW1lIjogImxvY2F0aW9uIiwgInR5cGUiOiAib2JqZWN0
IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAib3B0aW9ucyIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJicmVha3BvaW50SWQiLCAiYWN0dWFsTG9jYXRpb24i
XSk7CiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGVidWdnZXIucmVtb3ZlQnJl
YWtwb2ludCIsIFt7Im5hbWUiOiAiYnJlYWtwb2ludElkIiwgInR5cGUiOiAic3RyaW5nIiwgIm9w
dGlvbmFsIjogZmFsc2V9XSwgW10pOwogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
IkRlYnVnZ2VyLmNvbnRpbnVlVG9Mb2NhdGlvbiIsIFt7Im5hbWUiOiAibG9jYXRpb24iLCAidHlw
ZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbXSk7CiBJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyQ29tbWFuZCgiRGVidWdnZXIuc3RlcE92ZXIiLCBbXSwgW10pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IDJlOWQ3YzA2Nzdh
ZmMwNjMxMzA4MTQzYjVhYTQ2NWRiYTk0NThlYzQuLjU5ZDI2YmJhOWE5Y2JjN2ZjYjNjZGNiZDlj
NGY4YmM2Y2I5ZjFjODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9NYWluLmh0bWwKQEAgLTM5MCw2ICszOTAsMTEgQEAKICAgICA8c2NyaXB0IHNyYz0iQnJlYWtw
b2ludEFjdGlvblZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJCcmVha3BvaW50
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iRGVidWdnZXJNYW5hZ2VyLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHJvYmVNYW5hZ2VyLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iUHJvYmVPYmplY3QuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJQ
cm9iZVNldE9iamVjdC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlByb2JlU2V0RGF0
YUZyYW1lLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHJvYmVTZXREYXRhVGFibGUu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJTb3VyY2VNYXBNYW5hZ2VyLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iU2NyaXB0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0
IHNyYz0iU291cmNlTWFwLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9NYWluLmpzCmluZGV4IDY1MDlhM2RjYzUwMmE4MGFjNmM4YWVlZTZkYTk2YzQ4
ZjQ4ZDFkN2QuLjZhODUwM2I0OWJiMDlkZmRlYTgwY2ZiMzFiNjhhNjk2ZWVjMmNkYWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5qcwpAQCAtMTE0LDYgKzEx
NCw3IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5zb3VyY2VN
YXBNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyOwogICAgIHRoaXMu
bGF5ZXJUcmVlTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlTWFuYWdlcjsKICAg
ICB0aGlzLmRhc2hib2FyZE1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkRhc2hib2FyZE1hbmFn
ZXI7CisgICAgdGhpcy5wcm9iZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdl
cjsKIAogICAgIC8vIEVuYWJsZSB0aGUgQ29uc29sZSBBZ2VudCBhZnRlciBjcmVhdGluZyB0aGUg
c2luZ2xldG9uIG1hbmFnZXJzLgogICAgIGlmICh3aW5kb3cuQ29uc29sZUFnZW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvYmVNYW5hZ2VyLmpz
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvYmVNYW5hZ2VyLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFhMTQ1NzBkNTU5NjcyNzRhNWM4NDk0MDE4ZmYxOTQxZTJlZDJiMTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm9iZU1h
bmFnZXIuanMKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCitXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2VyID0gZnVuY3Rpb24oKQoreworICAgIFdl
Ykluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKKworICAgIC8vIFVzZWQgdG8gZGV0ZWN0IGRl
bGV0ZWQgcHJvYmUgYWN0aW9ucy4KKyAgICB0aGlzLl9rbm93blByb2JlSWRzRm9yQnJlYWtwb2lu
dCA9IG5ldyBNYXA7CisKKyAgICAvLyBNYWluIGxvb2t1cCB0YWJsZXMgZm9yIHByb2JlcyBhbmQg
cHJvYmUgc2V0cy4KKyAgICB0aGlzLl9wcm9iZXNCeUlkZW50aWZpZXIgPSBuZXcgTWFwOworICAg
IHRoaXMuX3Byb2JlU2V0c0J5QnJlYWtwb2ludCA9IG5ldyBNYXA7CisKKyAgICBXZWJJbnNwZWN0
b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2Vy
TWFuYWdlci5FdmVudC5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhp
cyk7CisgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMu
X2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkFjdGlvbnNEaWRD
aGFuZ2UsIHRoaXMuX2JyZWFrcG9pbnRBY3Rpb25zQ2hhbmdlZCwgdGhpcyk7CisKKyAgICAvLyBO
LkIuIHNhdmVkIGJyZWFrcG9pbnRzIHNob3VsZCBub3QgYmUgcmVzdG9yZWQgb24gdGhlIGZpcnN0
IGV2ZW50IGxvb3AgdHVybiwgYmVjYXVzZQorICAgIC8vIGl0IG1ha2VzIG1hbmFnZXIgaW5pdGlh
bGl6YXRpb24gb3JkZXIgdmVyeSBmcmFnaWxlLiBObyBicmVha3BvaW50cyBzaG91bGQgYmUgYXZh
aWxhYmxlLgorICAgIGNvbnNvbGUuYXNzZXJ0KCFXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2Vy
LmJyZWFrcG9pbnRzLmxlbmd0aCwgIk5vIGJyZWFrcG9pbnRzIHNob3VsZCBleGlzdCBiZWZvcmUg
YWxsIHRoZSBtYW5hZ2VycyBhcmUgY29uc3RydWN0ZWQuIik7Cit9CisKK1dlYkluc3BlY3Rvci5Q
cm9iZU1hbmFnZXIuRXZlbnQgPSB7CisgICAgUHJvYmVTZXRBZGRlZDogInByb2JlLW1hbmFnZXIt
cHJvYmUtc2V0LWFkZGVkIiwKKyAgICBQcm9iZVNldFJlbW92ZWQ6ICJwcm9iZS1tYW5hZ2VyLXBy
b2JlLXNldC1yZW1vdmVkIiwKK307CisKK1dlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXIucHJvdG90
eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2VyLAorICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisKKyAgICAvLyBQdWJs
aWMKKworICAgIGdldCBwcm9iZVNldHMoKQorICAgIHsKKyAgICAgICAgdmFyIHNldHMgPSBbXTsK
KyAgICAgICAgdGhpcy5fcHJvYmVTZXRzQnlCcmVha3BvaW50LmZvckVhY2goc2V0cy5wdXNoLmJp
bmQodGhpcykpOworICAgICAgICByZXR1cm4gc2V0czsKKyAgICB9LAorCisgICAgcHJvYmVTZXRG
b3JCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3Byb2JlU2V0c0J5QnJlYWtwb2ludC5nZXQoYnJlYWtwb2ludCk7CisgICAgfSwKKwor
ICAgIC8vIFByb3RlY3RlZCAoY2FsbGVkIGJ5IFdlYkluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVy
KQorCisgICAgZGlkU2FtcGxlUHJvYmU6IGZ1bmN0aW9uKHNhbXBsZSkKKyAgICB7CisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3Byb2Jlc0J5SWRlbnRpZmllci5oYXMoc2FtcGxlLnByb2Jl
SWQpLCAiVW5rbm93biBwcm9iZSBpZGVudGlmaWVyIHNwZWNpZmllZCBmb3Igc2FtcGxlOiAiLCBz
YW1wbGUpOworICAgICAgICB2YXIgcHJvYmUgPSB0aGlzLl9wcm9iZXNCeUlkZW50aWZpZXIuZ2V0
KHNhbXBsZS5wcm9iZUlkKTsKKyAgICAgICAgcHJvYmUuYWRkU2FtcGxlKG5ldyBXZWJJbnNwZWN0
b3IuUHJvYmVTYW1wbGVPYmplY3Qoc2FtcGxlLnNhbXBsZUlkLCBzYW1wbGUuYmF0Y2hJZCwgc2Ft
cGxlLnRpbWVzdGFtcCwgc2FtcGxlLnBheWxvYWQpKTsKKyAgICB9LAorCisgICAgLy8gUHJpdmF0
ZQorCisgICAgX2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24oYnJlYWtwb2ludE9yRXZlbnQpCisg
ICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludDsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnRPckV2
ZW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQpCisgICAgICAgICAgICBicmVh
a3BvaW50ID0gYnJlYWtwb2ludE9yRXZlbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJy
ZWFrcG9pbnQgPSBicmVha3BvaW50T3JFdmVudC5kYXRhLmJyZWFrcG9pbnQ7CisKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQoIXRoaXMuX2tub3duUHJvYmVJZHNGb3JCcmVha3BvaW50LmhhcyhicmVh
a3BvaW50KSk7CisKKyAgICAgICAgdGhpcy5fa25vd25Qcm9iZUlkc0ZvckJyZWFrcG9pbnQuc2V0
KGJyZWFrcG9pbnQsIG5ldyBTZXQpOworICAgICAgICB0aGlzLl9icmVha3BvaW50QWN0aW9uc0No
YW5nZWQoYnJlYWtwb2ludCk7CisgICAgfSwKKworICAgIF9icmVha3BvaW50UmVtb3ZlZDogZnVu
Y3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGEu
YnJlYWtwb2ludDsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fa25vd25Qcm9iZUlkc0Zv
ckJyZWFrcG9pbnQuaGFzKGJyZWFrcG9pbnQpKTsKKworICAgICAgICB0aGlzLl9icmVha3BvaW50
QWN0aW9uc0NoYW5nZWQoYnJlYWtwb2ludCk7CisgICAgICAgIHRoaXMuX2tub3duUHJvYmVJZHNG
b3JCcmVha3BvaW50LmRlbGV0ZShicmVha3BvaW50KTsKKyAgICB9LAorCisgICAgX2JyZWFrcG9p
bnRBY3Rpb25zQ2hhbmdlZDogZnVuY3Rpb24oYnJlYWtwb2ludE9yRXZlbnQpCisgICAgeworICAg
ICAgICB2YXIgYnJlYWtwb2ludDsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnRPckV2ZW50IGluc3Rh
bmNlb2YgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQpCisgICAgICAgICAgICBicmVha3BvaW50ID0g
YnJlYWtwb2ludE9yRXZlbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJyZWFrcG9pbnQg
PSBicmVha3BvaW50T3JFdmVudC50YXJnZXQ7CisKKyAgICAgICAgLy8gU29tZXRpbWVzIGFjdGlv
bnMgY2hhbmdlIGJlZm9yZSB0aGUgYWRkZWQgYnJlYWtwb2ludCBpcyBmdWxseSBkaXNwYXRjaGVk
LgorICAgICAgICBpZiAoIXRoaXMuX2tub3duUHJvYmVJZHNGb3JCcmVha3BvaW50LmhhcyhicmVh
a3BvaW50KSkgeworICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEFkZGVkKGJyZWFrcG9pbnQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGtub3duUHJv
YmVJZHMgPSB0aGlzLl9rbm93blByb2JlSWRzRm9yQnJlYWtwb2ludC5nZXQoYnJlYWtwb2ludCk7
CisgICAgICAgIHZhciBzZWVuUHJvYmVJZHMgPSBuZXcgU2V0OworCisgICAgICAgIGJyZWFrcG9p
bnQucHJvYmVBY3Rpb25zLmZvckVhY2goZnVuY3Rpb24ocHJvYmVBY3Rpb24pIHsKKyAgICAgICAg
ICAgIHZhciBwcm9iZUlkID0gcHJvYmVBY3Rpb24uaWRlbnRpZmllcjsKKyAgICAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KHByb2JlSWQsICJQcm9iZSBhZGRlZCB3aXRob3V0IGJyZWFrcG9pbnQgYWN0
aW9uIGlkZW50aWZpZXI6ICIsIGJyZWFrcG9pbnQpOworCisgICAgICAgICAgICBzZWVuUHJvYmVJ
ZHMuYWRkKHByb2JlSWQpOworICAgICAgICAgICAgaWYgKCFrbm93blByb2JlSWRzLmhhcyhwcm9i
ZUlkKSkgeworICAgICAgICAgICAgICAgIC8vIE5ldyBwcm9iZTsgZmluZCBvciBjcmVhdGUgcmVs
ZXZhbnQgcHJvYmUgc2V0LgorICAgICAgICAgICAgICAgIGtub3duUHJvYmVJZHMuYWRkKHByb2Jl
SWQpOworICAgICAgICAgICAgICAgIHZhciBwcm9iZVNldCA9IHRoaXMuX2dldFByb2JlU2V0Rm9y
QnJlYWtwb2ludChicmVha3BvaW50KTsKKyAgICAgICAgICAgICAgICB2YXIgbmV3UHJvYmUgPSBu
ZXcgV2ViSW5zcGVjdG9yLlByb2JlT2JqZWN0KHByb2JlSWQsIGJyZWFrcG9pbnQsIHByb2JlQWN0
aW9uLmRhdGEpOworICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Jlc0J5SWRlbnRpZmllci5zZXQo
cHJvYmVJZCwgbmV3UHJvYmUpOworICAgICAgICAgICAgICAgIHByb2JlU2V0LmFkZFByb2JlKG5l
d1Byb2JlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHZhciBwcm9iZSA9IHRoaXMuX3Byb2Jlc0J5SWRlbnRpZmllci5nZXQocHJvYmVJZCk7
CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChwcm9iZSwgIlByb2JlIGtub3duIGJ1dCBjb3Vs
ZG4ndCBiZSBmb3VuZCBieSBpZGVudGlmaWVyOiAiLCBwcm9iZUlkKTsKKyAgICAgICAgICAgIC8v
IFVwZGF0ZSBwcm9iZSBleHByZXNzaW9uOyBpZiBpdCBkaWZmZXJlZCwgY2hhbmdlIGV2ZW50cyB3
aWxsIGZpcmUuCisgICAgICAgICAgICBwcm9iZS5leHByZXNzaW9uID0gcHJvYmVBY3Rpb24uZGF0
YTsKKyAgICAgICAgfS5iaW5kKHRoaXMpKTsKKworICAgICAgICAvLyBMb29rIGZvciBtaXNzaW5n
IHByb2JlcyBiYXNlZCBvbiB3aGF0IHdlIHNhdyBsYXN0LgorICAgICAgICBrbm93blByb2JlSWRz
LmZvckVhY2goZnVuY3Rpb24ocHJvYmVJZCkgeworICAgICAgICAgICAgaWYgKHNlZW5Qcm9iZUlk
cy5oYXMocHJvYmVJZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAv
LyBUaGUgcHJvYmUgaGFzIGdvbmUgbWlzc2luZywgcmVtb3ZlIGl0LgorICAgICAgICAgICAgdmFy
IHByb2JlU2V0ID0gdGhpcy5fZ2V0UHJvYmVTZXRGb3JCcmVha3BvaW50KGJyZWFrcG9pbnQpOwor
ICAgICAgICAgICAgdmFyIHByb2JlID0gdGhpcy5fcHJvYmVzQnlJZGVudGlmaWVyLmdldChwcm9i
ZUlkKTsKKyAgICAgICAgICAgIHRoaXMuX3Byb2Jlc0J5SWRlbnRpZmllci5kZWxldGUocHJvYmVJ
ZCk7CisgICAgICAgICAgICBrbm93blByb2JlSWRzLmRlbGV0ZShwcm9iZUlkKTsKKyAgICAgICAg
ICAgIHByb2JlU2V0LnJlbW92ZVByb2JlKHByb2JlKTsKKworICAgICAgICAgICAgLy8gUmVtb3Zl
IHRoZSBwcm9iZSBzZXQgaWYgaXQgaGFzIGJlY29tZSBlbXB0eS4KKyAgICAgICAgICAgIGlmICgh
cHJvYmVTZXQucHJvYmVzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3Byb2JlU2V0
c0J5QnJlYWtwb2ludC5kZWxldGUocHJvYmVTZXQuYnJlYWtwb2ludCk7CisgICAgICAgICAgICAg
ICAgcHJvYmVTZXQud2lsbFJlbW92ZSgpOworICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXIuRXZlbnQuUHJvYmVTZXRS
ZW1vdmVkLCBwcm9iZVNldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0uYmluZCh0aGlzKSk7
CisgICAgfSwKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYSBwcm9iZSBzZXQg
Zm9yIHRoZSBzcGVjaWZpZWQgYnJlYWtwb2ludCBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAgICBf
Z2V0UHJvYmVTZXRGb3JCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMuX3Byb2JlU2V0c0J5QnJlYWtwb2ludC5oYXMoYnJlYWtwb2ludCkpCisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmVTZXRzQnlCcmVha3BvaW50LmdldChicmVha3Bv
aW50KTsKKworICAgICAgICB2YXIgbmV3UHJvYmVTZXQgPSBuZXcgV2ViSW5zcGVjdG9yLlByb2Jl
U2V0T2JqZWN0KGJyZWFrcG9pbnQpOworICAgICAgICB0aGlzLl9wcm9iZVNldHNCeUJyZWFrcG9p
bnQuc2V0KGJyZWFrcG9pbnQsIG5ld1Byb2JlU2V0KTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlci5FdmVudC5Qcm9iZVNldEFk
ZGVkLCBuZXdQcm9iZVNldCk7CisgICAgICAgIHJldHVybiBuZXdQcm9iZVNldDsKKyAgICB9Cit9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvYmVP
YmplY3QuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm9iZU9iamVj
dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jYmFlMGIzYjFmZTU3ZjdkMDQ0MDU4ODkxYWQyZGJmNGJkZjc4OTY0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
UHJvYmVPYmplY3QuanMKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuUHJvYmVTYW1wbGVPYmplY3QgPSBmdW5jdGlvbihz
YW1wbGVJZCwgYmF0Y2hJZCwgdGltZXN0YW1wLCBwYXlsb2FkKQoreworICAgIHRoaXMuc2FtcGxl
SWQgPSBzYW1wbGVJZDsKKyAgICB0aGlzLmJhdGNoSWQgPSBiYXRjaElkOworICAgIHRoaXMudGlt
ZXN0YW1wID0gdGltZXN0YW1wOworICAgIHRoaXMub2JqZWN0ID0gV2ViSW5zcGVjdG9yLlJlbW90
ZU9iamVjdC5mcm9tUGF5bG9hZChwYXlsb2FkKTsKK307CisKK1dlYkluc3BlY3Rvci5Qcm9iZU9i
amVjdCA9IGZ1bmN0aW9uKHByb2JlSWQsIGJyZWFrcG9pbnQsIGV4cHJlc3Npb24pCit7CisgICAg
V2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworICAgIHRoaXMuX3Byb2JlSWQgPSBwcm9i
ZUlkOworICAgIHRoaXMuX2JyZWFrcG9pbnQgPSBicmVha3BvaW50OworICAgIHRoaXMuX2V4cHJl
c3Npb24gPSBleHByZXNzaW9uOworICAgIHRoaXMuX3NhbXBsZXMgPSBbXTsKK307CisKK1dlYklu
c3BlY3Rvci5PYmplY3QuYWRkQ29uc3RydWN0b3JGdW5jdGlvbnMoV2ViSW5zcGVjdG9yLlByb2Jl
T2JqZWN0KTsKKworV2ViSW5zcGVjdG9yLlByb2JlT2JqZWN0LkV2ZW50ID0geworICAgIEV4cHJl
c3Npb25DaGFuZ2VkOiAicHJvYmUtb2JqZWN0LWV4cHJlc3Npb24tY2hhbmdlZCIsCisgICAgU2Ft
cGxlQWRkZWQ6ICJwcm9iZS1vYmplY3Qtc2FtcGxlLWFkZGVkIiwKKyAgICBTYW1wbGVzQ2xlYXJl
ZDogInByb2JlLW9iamVjdC1zYW1wbGVzLWNsZWFyZWQiCit9OworCitXZWJJbnNwZWN0b3IuUHJv
YmVPYmplY3QucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuUHJv
YmVPYmplY3QsCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwK
KworICAgIC8vIFB1YmxpYworCisgICAgZ2V0IGlkZW50aWZpZXIoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX3Byb2JlSWQ7CisgICAgfSwKKworICAgIGdldCBicmVha3BvaW50KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50OworICAgIH0sCisKKyAgICBnZXQg
ZXhwcmVzc2lvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZXhwcmVzc2lvbjsKKyAg
ICB9LAorCisgICAgc2V0IGV4cHJlc3Npb24odmFsdWUpCisgICAgeworICAgICAgICBpZiAodGhp
cy5fZXhwcmVzc2lvbiA9PT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dmFyIGRhdGEgPSB7b2xkVmFsdWU6IHRoaXMuX2V4cHJlc3Npb24sIG5ld1ZhbHVlOiB2YWx1ZX07
CisgICAgICAgIHRoaXMuX2V4cHJlc3Npb24gPSB2YWx1ZTsKKyAgICAgICAgdGhpcy5jbGVhclNh
bXBsZXMoKTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLlByb2JlT2JqZWN0LkV2ZW50LkV4cHJlc3Npb25DaGFuZ2VkLCBkYXRhKTsKKyAgICB9LAor
CisgICAgZ2V0IHNhbXBsZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NhbXBsZXMu
c2xpY2UoKTsKKyAgICB9LAorCisgICAgY2xlYXJTYW1wbGVzOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB0aGlzLl9zYW1wbGVzID0gW107CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Qcm9iZU9iamVjdC5FdmVudC5TYW1wbGVzQ2xlYXJlZCk7
CisgICAgfSwKKworICAgIC8vIFByb3RlY3RlZCAoQ2FsbGVkIGJ5IFByb2JlTWFuYWdlcikKKwor
ICAgIGFkZFNhbXBsZTogZnVuY3Rpb24oc2FtcGxlKQorICAgIHsKKyAgICAgICAgY29uc29sZS5h
c3NlcnQoc2FtcGxlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlU2FtcGxlT2JqZWN0LCAi
V3Jvbmcgb2JqZWN0IHR5cGUgcGFzc2VkIGFzIHByb2JlIHNhbXBsZTogIiwgc2FtcGxlKTsKKyAg
ICAgICAgdGhpcy5fc2FtcGxlcy5wdXNoKHNhbXBsZSk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Qcm9iZU9iamVjdC5FdmVudC5TYW1wbGVBZGRl
ZCwgc2FtcGxlKTsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvUHJvYmVTZXREYXRhRnJhbWUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Qcm9iZVNldERhdGFGcmFtZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmUzZjhk
NWVkN2U2NmNiNmUwODcwOWU2MzFkZjMzMzlmZjE2OThiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvYmVTZXREYXRhRnJhbWUuanMKQEAg
LTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
ICJBUworICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJ
bnNwZWN0b3IuUHJvYmVTZXREYXRhRnJhbWUgPSBmdW5jdGlvbihpbmRleCkKK3sKKyAgICB0aGlz
Ll9jb3VudCA9IDA7CisgICAgdGhpcy5faW5kZXggPSBpbmRleDsKKyAgICB0aGlzLl9zZXBhcmF0
b3IgPSBmYWxzZTsKK307CisKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShXZWJJbnNwZWN0b3IuUHJv
YmVTZXREYXRhRnJhbWUsICJjb21wYXJlIiwKK3sKKyAgICB2YWx1ZTogZnVuY3Rpb24oYSwgYikg
eworICAgICAgICBjb25zb2xlLmFzc2VydChhIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2Jl
U2V0RGF0YUZyYW1lLCBhKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoYiBpbnN0YW5jZW9mIFdl
Ykluc3BlY3Rvci5Qcm9iZVNldERhdGFGcmFtZSwgYik7CisKKyAgICAgICAgcmV0dXJuIGEuaW5k
ZXggLSBiLmluZGV4OworICAgIH0KK30pOworCitXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhRnJh
bWUuTWlzc2luZ1ZhbHVlID0gIj8iOworCitXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhRnJhbWUu
cHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRh
RnJhbWUsCisKKyAgICAvLyBQdWJsaWMKKworICAgIGdldCBrZXkoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICIlZCIuZm9ybWF0KHRoaXMuX2luZGV4KTsKKyAgICB9LAorCisgICAgZ2V0IGNvdW50
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb3VudDsKKyAgICB9LAorCisgICAgZ2V0
IGluZGV4KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9pbmRleDsKKyAgICB9LAorCisg
ICAgZ2V0IGlzU2VwYXJhdG9yKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zZXBhcmF0
b3I7CisgICAgfSwKKworICAgIHNldCBpc1NlcGFyYXRvcih2YWx1ZSkKKyAgICB7CisgICAgICAg
IHRoaXMuX3NlcGFyYXRvciA9ICEhdmFsdWU7CisgICAgfSwKKworICAgIGFkZFNhbXBsZUZvclBy
b2JlOiBmdW5jdGlvbihwcm9iZSwgc2FtcGxlKQorICAgIHsKKyAgICAgICAgdGhpc1twcm9iZS5p
ZGVudGlmaWVyXSA9IHNhbXBsZTsKKyAgICAgICAgdGhpcy5fY291bnQrKzsKKyAgICB9LAorCisg
ICAgbWlzc2luZ0tleXM6IGZ1bmN0aW9uKHByb2JlU2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHByb2JlU2V0LnByb2Jlcy5maWx0ZXIoZnVuY3Rpb24ocHJvYmUpIHsKKyAgICAgICAgICAgIHJl
dHVybiAhdGhpcy5oYXNPd25Qcm9wZXJ0eShwcm9iZS5pZGVudGlmaWVyKTsKKyAgICAgICAgfS5i
aW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgaXNDb21wbGV0ZTogZnVuY3Rpb24ocHJvYmVTZXQp
CisgICAgeworICAgICAgICByZXR1cm4gIXRoaXMubWlzc2luZ0tleXMocHJvYmVTZXQpLmxlbmd0
aDsKKyAgICB9LAorCisgICAgZmlsbE1pc3NpbmdWYWx1ZXM6IGZ1bmN0aW9uKHByb2JlU2V0KQor
ICAgIHsKKyAgICAgICAgdmFyIGtleXMgPSB0aGlzLm1pc3NpbmdLZXlzKHByb2JlU2V0KTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAg
dGhpc1trZXlzW2ldXSA9IFdlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFGcmFtZS5NaXNzaW5nVmFs
dWU7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1Byb2JlU2V0RGF0YVRhYmxlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvUHJvYmVTZXREYXRhVGFibGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDU1N2FiMzAwNjFjYmFm
NDU2NTJhNDU4YWFjZjZlZDcxMTI1YjMzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb2JlU2V0RGF0YVRhYmxlLmpzCkBAIC0wLDAgKzEs
MTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAq
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9y
LlByb2JlU2V0RGF0YVRhYmxlID0gZnVuY3Rpb24ocHJvYmVTZXQpCit7CisgICAgV2ViSW5zcGVj
dG9yLk9iamVjdC5jYWxsKHRoaXMpOworCisgICAgdGhpcy5fcHJvYmVTZXQgPSBwcm9iZVNldDsK
KyAgICB0aGlzLl9mcmFtZXMgPSBbXTsKKyAgICB0aGlzLl9wcmV2aW91c0JhdGNoSWQgPSBXZWJJ
bnNwZWN0b3IuUHJvYmVTZXREYXRhVGFibGUuU2VudGluZWxWYWx1ZTsKK307CisKK1dlYkluc3Bl
Y3Rvci5Qcm9iZVNldERhdGFUYWJsZS5FdmVudCA9IHsKKyAgICBGcmFtZUluc2VydGVkOiAicHJv
YmUtc2V0LWZyYW1lLWluc2VydGVkIiwKKyAgICBGcmFtZVJlcGxhY2VkOiAicHJvYmUtc2V0LWZy
YW1lLXJlcGxhY2VkIiwKKyAgICBTZXBhcmF0b3JJbnNlcnRlZDogInByb2JlLXNldC1zZXBhcmF0
b3ItaW5zZXJ0ZWQiLAorICAgIFNlcGFyYXRvclJlcGxhY2VkOiAicHJvYmUtc2V0LXNlcGFyYXRv
ci1yZXBsYWNlZCIsCisgICAgV2lsbFJlbW92ZTogInByb2JlLXNldC1kYXRhLXRhYmxlLXdpbGwt
cmVtb3ZlIgorfTsKKworV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YVRhYmxlLlNlbnRpbmVsVmFs
dWUgPSAtMTsKK1dlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFUYWJsZS5Vbmtub3duVmFsdWUgPSAi
PyI7CisKK1dlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFUYWJsZS5wcm90b3R5cGUgPSB7CisgICAg
Y29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFUYWJsZSwKKyAgICBfX3Byb3Rv
X186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVibGljCisKKyAg
ICBnZXQgZnJhbWVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZXMuc2xpY2Uo
KTsKKyAgICB9LAorCisgICAgZ2V0IHNlcGFyYXRvcnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2ZyYW1lcy5maWx0ZXIoZnVuY3Rpb24oZnJhbWUpIHsgcmV0dXJuIGZyYW1lLmlzU2Vw
YXJhdG9yOyB9KTsKKyAgICB9LAorCisgICAgd2lsbFJlbW92ZTogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlByb2Jl
U2V0RGF0YVRhYmxlLkV2ZW50LldpbGxSZW1vdmUpOworICAgICAgICB0aGlzLl9mcmFtZXMgPSBb
XTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX3Byb2JlU2V0OworICAgIH0sCisKKyAgICBtYWluUmVz
b3VyY2VDaGFuZ2VkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmFkZFNlcGFyYXRv
cigpOworICAgIH0sCisKKyAgICBhZGRTYW1wbGVGb3JQcm9iZTogZnVuY3Rpb24ocHJvYmUsIHNh
bXBsZSkKKyAgICB7CisgICAgICAgIC8vIEVhZ2VybHkgc2F2ZSB0aGUgZnJhbWUgaWYgdGhlIGJh
dGNoIGlkZW50aWZpZXIgZGlmZmVycywgb3Igd2Uga25vdyB0aGUgZnJhbWUgaXMgZnVsbC4KKyAg
ICAgICAgLy8gQ3JlYXRlIGEgbmV3IGZyYW1lIHdoZW4gdGhlIGJhdGNoIGlkZW50aWZpZXIgZGlm
ZmVycy4KKyAgICAgICAgaWYgKHNhbXBsZS5iYXRjaElkICE9IHRoaXMuX3ByZXZpb3VzQmF0Y2hJ
ZCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX29wZW5GcmFtZSkgeworICAgICAgICAgICAgICAg
IHRoaXMuX29wZW5GcmFtZS5maWxsTWlzc2luZ1ZhbHVlcyh0aGlzLl9wcm9iZVNldCk7CisgICAg
ICAgICAgICAgICAgdGhpcy5hZGRGcmFtZSh0aGlzLl9vcGVuRnJhbWUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5fb3BlbkZyYW1lID0gdGhpcy5jcmVhdGVGcmFtZSgpOworICAg
ICAgICAgICAgdGhpcy5fcHJldmlvdXNCYXRjaElkID0gc2FtcGxlLmJhdGNoSWQ7CisgICAgICAg
IH0KKworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9vcGVuRnJhbWUsICJTaG91bGQgYWx3
YXlzIGhhdmUgYW4gb3BlbiBmcmFtZSBiZWZvcmUgYWRkaW5nIHNhbXBsZS4iLCB0aGlzLCBwcm9i
ZSwgc2FtcGxlKTsKKyAgICAgICAgdGhpcy5fb3BlbkZyYW1lLmFkZFNhbXBsZUZvclByb2JlKHBy
b2JlLCBzYW1wbGUpOworICAgICAgICBpZiAodGhpcy5fb3BlbkZyYW1lLmNvdW50ID09IHRoaXMu
X3Byb2JlU2V0LnByb2Jlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuYWRkRnJhbWUodGhp
cy5fb3BlbkZyYW1lKTsKKyAgICAgICAgICAgIHRoaXMuX29wZW5GcmFtZSA9IG51bGw7CisgICAg
ICAgIH0KKyAgICB9LAorCisgICAgYWRkUHJvYmU6IGZ1bmN0aW9uKHByb2JlKQorICAgIHsKKyAg
ICAgICAgdmFyIGZyYW1lcyA9IHRoaXMuZnJhbWVzOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGZyYW1lcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGlmICghZnJhbWVzW2ldW3Byb2Jl
LmlkZW50aWZpZXJdKQorICAgICAgICAgICAgICAgIGZyYW1lc1tpXVtwcm9iZS5pZGVudGlmaWVy
XSA9IFdlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFUYWJsZS5Vbmtub3duVmFsdWU7CisgICAgfSwK
KworICAgIHJlbW92ZVByb2JlOiBmdW5jdGlvbihwcm9iZSkKKyAgICB7CisgICAgICAgIHZhciBm
cmFtZXMgPSB0aGlzLmZyYW1lczsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMu
bGVuZ3RoOyArK2kpCisgICAgICAgICAgICBpZiAoZnJhbWVzW2ldW3Byb2JlLmlkZW50aWZpZXJd
KQorICAgICAgICAgICAgICAgIGRlbGV0ZSBmcmFtZXNbaV1bcHJvYmUuaWRlbnRpZmllcl07Cisg
ICAgfSwKKworICAgIC8vIFByb3RlY3RlZCAtIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNz
ZXMuCisKKyAgICBjcmVhdGVGcmFtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhRnJhbWUodGhpcy5fZnJhbWVzLmxlbmd0aCk7
CisgICAgfSwKKworICAgIGFkZEZyYW1lOiBmdW5jdGlvbihmcmFtZSkKKyAgICB7CisgICAgICAg
IHRoaXMuX2ZyYW1lcy5wdXNoKGZyYW1lKTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YVRhYmxlLkV2ZW50LkZyYW1lSW5zZXJ0
ZWQsIGZyYW1lKTsKKyAgICB9LAorCisgICAgYWRkU2VwYXJhdG9yOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICAvLyBTZXBhcmF0b3JzIG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIGEgZnJhbWUu
CisgICAgICAgIGlmICghdGhpcy5fZnJhbWVzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB2YXIgcHJldmlvdXNGcmFtZSA9IHRoaXMuX2ZyYW1lcy5sYXN0VmFsdWU7Cisg
ICAgICAgIC8vIERvbid0IHNlbmQgb3V0IGR1cGxpY2F0ZSBldmVudHMgZm9yIGFkamFjZW50IHNl
cGFyYXRvcnMuCisgICAgICAgIGlmIChwcmV2aW91c0ZyYW1lLmlzU2VwYXJhdG9yKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHByZXZpb3VzRnJhbWUuaXNTZXBhcmF0b3IgPSB0cnVl
OworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUHJv
YmVTZXREYXRhVGFibGUuRXZlbnQuU2VwYXJhdG9ySW5zZXJ0ZWQsIHByZXZpb3VzRnJhbWUpOwor
ICAgIH0KK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Qcm9iZVNldE9iamVjdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1Byb2JlU2V0T2JqZWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzYjY1MmViYmQ3MTVkNDUxYzBlMjg2MjE1
ZDlkYTBmNmExZWE3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Qcm9iZVNldE9iamVjdC5qcwpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCisgKiBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQK
KyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIEEgUHJvYmVTZXRPYmplY3QgY2x1c3Rl
cnMgUHJvYmVPYmplY3RzIGZyb20gdGhlIHNhbWUgQnJlYWtwb2ludCBhbmQgdGhlaXIgc2FtcGxl
cy4KKworV2ViSW5zcGVjdG9yLlByb2JlU2V0T2JqZWN0ID0gZnVuY3Rpb24oYnJlYWtwb2ludCkK
K3sKKyAgICBjb25zb2xlLmFzc2VydChicmVha3BvaW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnQsICJVbmtub3duIGJyZWFrcG9pbnQgYXJndW1lbnQ6ICIsIGJyZWFrcG9pbnQp
OworCisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworICAgIHRoaXMuX2JyZWFr
cG9pbnQgPSBicmVha3BvaW50OworICAgIHRoaXMuX3Byb2JlcyA9IFtdOworICAgIHRoaXMuX3By
b2Jlc0J5SWRlbnRpZmllciA9IG5ldyBNYXA7CisKKyAgICB0aGlzLl9jcmVhdGVEYXRhVGFibGUo
KTsKKworICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21haW5SZXNvdXJjZUNo
YW5nZWQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5Qcm9iZU9iamVjdC5hZGRFdmVudExpc3Rl
bmVyKFdlYkluc3BlY3Rvci5Qcm9iZU9iamVjdC5FdmVudC5TYW1wbGVBZGRlZCwgdGhpcy5fc2Ft
cGxlQ29sbGVjdGVkLCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LlJlc29sdmVkU3RhdGVEaWRD
aGFuZ2UsIHRoaXMuX2JyZWFrcG9pbnRSZXNvbHZlZFN0YXRlRGlkQ2hhbmdlLCB0aGlzKTsKK30K
KworV2ViSW5zcGVjdG9yLk9iamVjdC5hZGRDb25zdHJ1Y3RvckZ1bmN0aW9ucyhXZWJJbnNwZWN0
b3IuUHJvYmVTZXRPYmplY3QpOworCitXZWJJbnNwZWN0b3IuUHJvYmVTZXRPYmplY3QuRXZlbnQg
PSB7CisgICAgUHJvYmVBZGRlZDogInByb2JlLXNldC1wcm9iZS1hZGRlZCIsCisgICAgUHJvYmVS
ZW1vdmVkOiAicHJvYmUtc2V0LXByb2JlLXJlbW92ZWQiLAorICAgIFJlc29sdmVkU3RhdGVEaWRD
aGFuZ2U6ICJwcm9iZS1zZXQtcmVzb2x2ZWQtc3RhdGUtZGlkLWNoYW5nZSIsCisgICAgU2FtcGxl
c0NsZWFyZWQ6ICJwcm9iZS1zZXQtc2FtcGxlcy1jbGVhcmVkIiwKK307CisKK1dlYkluc3BlY3Rv
ci5Qcm9iZVNldE9iamVjdC5TYW1wbGVPYmplY3RUaXRsZSA9ICJPYmplY3QiOworCitXZWJJbnNw
ZWN0b3IuUHJvYmVTZXRPYmplY3QucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJ
bnNwZWN0b3IuUHJvYmVTZXRPYmplY3QsCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2Jq
ZWN0LnByb3RvdHlwZSwKKworICAgIC8vIFB1YmxpYworCisgICBnZXQgYnJlYWtwb2ludCgpCisg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50OworICAgfSwKKworICAgIGdldCBw
cm9iZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Jlcy5zbGljZSgpOworICAg
IH0sCisKKyAgICBnZXQgZGF0YVRhYmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9k
YXRhVGFibGU7CisgICAgfSwKKworICAgIGNsZWFyOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB0aGlzLl9icmVha3BvaW50LnByb2JlQWN0aW9ucy5mb3JFYWNoKHRoaXMuX2JyZWFrcG9pbnQu
cmVtb3ZlQWN0aW9uLmJpbmQodGhpcy5fYnJlYWtwb2ludCkpOworICAgIH0sCisKKyAgICBjbGVh
clNhbXBsZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3Byb2Jlcy5mb3JFYWNo
KGZ1bmN0aW9uKHByb2JlKSB7IHByb2JlLmNsZWFyU2FtcGxlcygpOyB9KTsKKworICAgICAgICB0
aGlzLl9jcmVhdGVEYXRhVGFibGUoKTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoV2ViSW5zcGVjdG9yLlByb2JlU2V0T2JqZWN0LkV2ZW50LlNhbXBsZXNDbGVhcmVkLCB0
aGlzKTsKKyAgICB9LAorCisgICAgY3JlYXRlUHJvYmU6IGZ1bmN0aW9uKGV4cHJlc3Npb24pCisg
ICAgeworICAgICAgICAvLyBUaGlzIHdpbGwgZmlyZSBQcm9iZU1hbmFnZXIuRXZlbnQuUHJvYmVB
ZGRlZCwgdGhlbiBQcm9iZU9iamVjdC5FdmVudC5FeHByZXNzaW9uQ2hhbmdlZC4KKyAgICAgICAg
dmFyIG5ld0FjdGlvbiA9IHRoaXMuYnJlYWtwb2ludC5jcmVhdGVBY3Rpb24oV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRBY3Rpb24uVHlwZS5Qcm9iZSk7CisgICAgICAgIG5ld0FjdGlvbi5kYXRhID0g
ZXhwcmVzc2lvbjsKKyAgICB9LAorCisgICAgLy8gUHJvdGVjdGVkIChjYWxsZWQgYnkgUHJvYmVN
YW5hZ2VyLmpzKQorCisgICAgYWRkUHJvYmU6IGZ1bmN0aW9uKHByb2JlKQorICAgIHsKKyAgICAg
ICAgY29uc29sZS5hc3NlcnQocHJvYmUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUHJvYmVPYmpl
Y3QsICJUcmllZCB0byBhZGQgbm9uLXByb2JlICIsIHByb2JlLCAiIHRvIHByb2JlIGdyb3VwIiwg
dGhpcyk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHByb2JlLmJyZWFrcG9pbnQgPT09IHRoaXMu
YnJlYWtwb2ludCwgIlByb2JlIGFuZCBQcm9iZVNldCBtdXN0IGhhdmUgc2FtZSBicmVha3BvaW50
LiIsIHByb2JlLCB0aGlzKTsKKworICAgICAgICB0aGlzLl9wcm9iZXMucHVzaChwcm9iZSk7Cisg
ICAgICAgIHRoaXMuX3Byb2Jlc0J5SWRlbnRpZmllci5zZXQocHJvYmUuaWRlbnRpZmllciwgcHJv
YmUpOworCisgICAgICAgIHRoaXMuZGF0YVRhYmxlLmFkZFByb2JlKHByb2JlKTsKKyAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlByb2JlU2V0T2JqZWN0
LkV2ZW50LlByb2JlQWRkZWQsIHByb2JlKTsKKyAgICB9LAorCisgICAgcmVtb3ZlUHJvYmU6IGZ1
bmN0aW9uKHByb2JlKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmUgaW5zdGFu
Y2VvZiBXZWJJbnNwZWN0b3IuUHJvYmVPYmplY3QsICJUcmllZCB0byByZW1vdmUgbm9uLXByb2Jl
ICIsIHByb2JlLCAiIHRvIHByb2JlIGdyb3VwIiwgdGhpcyk7CisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHRoaXMuX3Byb2Jlcy5pbmRleE9mKHByb2JlKSAhPSAtMSwgIlRyaWVkIHRvIHJlbW92ZSBw
cm9iZSIsIHByb2JlLCAiIG5vdCBpbiBncm91cCAiLCB0aGlzKTsKKyAgICAgICAgY29uc29sZS5h
c3NlcnQodGhpcy5fcHJvYmVzQnlJZGVudGlmaWVyLmhhcyhwcm9iZS5pZGVudGlmaWVyKSwgIlRy
aWVkIHRvIHJlbW92ZSBwcm9iZSIsIHByb2JlLCAiIG5vdCBpbiBncm91cCAiLCB0aGlzKTsKKwor
ICAgICAgICB0aGlzLl9wcm9iZXMuc3BsaWNlKHRoaXMuX3Byb2Jlcy5pbmRleE9mKHByb2JlKSwg
MSk7CisgICAgICAgIHRoaXMuX3Byb2Jlc0J5SWRlbnRpZmllci5kZWxldGUocHJvYmUuaWRlbnRp
Zmllcik7CisgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJlbW92ZVByb2JlKHByb2JlKTsKKyAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlByb2JlU2V0T2Jq
ZWN0LkV2ZW50LlByb2JlUmVtb3ZlZCwgcHJvYmUpOworICAgIH0sCisKKyAgICB3aWxsUmVtb3Zl
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5fcHJvYmVz
Lmxlbmd0aCwgIlByb2JlU2V0T2JqZWN0LndpbGxSZW1vdmUgY2FsbGVkLCBidXQgcHJvYmVzIHN0
aWxsIGFzc29jaWF0ZWQgd2l0aCBncm91cDogIiwgdGhpcy5fcHJvYmVzKTsKKworICAgICAgICBX
ZWJJbnNwZWN0b3IuUHJvYmVPYmplY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
UHJvYmVPYmplY3QuRXZlbnQuU2FtcGxlQWRkZWQsIHRoaXMuX3NhbXBsZUNvbGxlY3RlZCwgdGhp
cyk7CisgICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIF9tYWluUmVzb3VyY2VDaGFuZ2Vk
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmRhdGFUYWJsZS5tYWluUmVzb3VyY2VD
aGFuZ2VkKCk7CisgICAgfSwKKworICAgIF9jcmVhdGVEYXRhVGFibGU6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkKKyAgICAgICAgICAgIHRoaXMuZGF0YVRh
YmxlLndpbGxSZW1vdmUoKTsKKworICAgICAgICB0aGlzLl9kYXRhVGFibGUgPSBuZXcgV2ViSW5z
cGVjdG9yLlByb2JlU2V0RGF0YVRhYmxlKHRoaXMpOworICAgIH0sCisKKyAgICBfc2FtcGxlQ29s
bGVjdGVkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBzYW1wbGUgPSBldmVu
dC5kYXRhOworICAgICAgICBjb25zb2xlLmFzc2VydChzYW1wbGUgaW5zdGFuY2VvZiBXZWJJbnNw
ZWN0b3IuUHJvYmVTYW1wbGVPYmplY3QsICJUcmllZCB0byBhZGQgbm9uLXNhbXBsZSB0byBwcm9i
ZSBncm91cDogIiwgc2FtcGxlKTsKKworICAgICAgICB2YXIgcHJvYmUgPSBldmVudC50YXJnZXQ7
CisgICAgICAgIGlmICghdGhpcy5fcHJvYmVzQnlJZGVudGlmaWVyLmhhcyhwcm9iZS5pZGVudGlm
aWVyKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlz
LmRhdGFUYWJsZSk7CisgICAgICAgIHRoaXMuZGF0YVRhYmxlLmFkZFNhbXBsZUZvclByb2JlKHBy
b2JlLCBzYW1wbGUpOworICAgIH0sCisKKyAgICBfYnJlYWtwb2ludFJlc29sdmVkU3RhdGVEaWRD
aGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlByb2JlU2V0T2JqZWN0LkV2ZW50LlJlc29sdmVkU3Rh
dGVEaWRDaGFuZ2UpOworICAgIH0KK307CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTc3Nzk5ZWM5ZDI0NjcyYzI5NDE5MTIy
MTdiMjUwYWJkMzQ5NmUwMy4uZmMxZmI0YjkwMGRlZDAwOTgxODFlZDM0MzFiOTRiYTQ2NDEzOWM2
ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE0LTAyLTAzICBCcmlhbiBCdXJnICA8YmJ1cmdA
YXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBwcm9iZSBtYW5hZ2VyIGFu
ZCBtb2RlbCBvYmplY3RzIHRvIHRoZSBmcm9udGVuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU2V0IHVwIHRoZSBkZWJ1Z2dlciBhbmQgcHJvYmUgbWFu
YWdlcnMgd2hlbiB0ZXN0aW5nIG1vZGVscy4KKworICAgICAgICBBZGQgYSB3b3JrYWxpa2UgZm9y
IEluc3BlY3RvckJhY2tlbmQuZHVtcEluc3BlY3RvclByb3RvY29sTWVzc2FnZXMgdG8KKyAgICAg
ICAgSW5zcGVjdG9yVGVzdC4KKworICAgICAgICBBZGQgbGlzdGVuZXJzIGZvciBicmVha3BvaW50
cyBhbmQgcHJvYmVzIHRoYXQgcHJvZHVjZQorICAgICAgICB1c2VmdWwsIGRldGVybWluaXN0aWMg
dHJhY2Ugb3V0cHV0LiBVc2UgdGhlIHRyYWNpbmcgaW4gYSBuZXcgdGVzdC4KKworICAgICAgICAq
IGh0dHAvdGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL3Jlc291cmNlcy9JbnNwZWN0b3JUZXN0Lmpz
OgorICAgICAgICAoSW5zcGVjdG9yVGVzdC5zZW5kQ29tbWFuZCk6CisgICAgICAgIChJbnNwZWN0
b3JUZXN0LmluaXRpYWxpemVJbnNwZWN0b3JNb2RlbHMpOgorICAgICAgICAqIGluc3BlY3Rvci1w
cm90b2NvbC9kZWJ1Z2dlci9kaWRTYW1wbGVQcm9iZS1tdWx0aXBsZS1wcm9iZXMtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGluc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9kaWRTYW1wbGVQcm9i
ZS1tdWx0aXBsZS1wcm9iZXMuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3ItcHJvdG9jb2wvbW9k
ZWwvcHJvYmUtbWFuYWdlci1hZGQtcmVtb3ZlLWFjdGlvbnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBpbnNwZWN0b3ItcHJvdG9jb2wvbW9kZWwvcHJvYmUtbWFuYWdlci1hZGQtcmVt
b3ZlLWFjdGlvbnMuaHRtbDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yLXByb3RvY29sL3Jl
c291cmNlcy9wcm9iZS1oZWxwZXIuanM6CisgICAgICAgIChQcm9iZUhlbHBlci5zdHJpbmdpZnlQ
cm9iZVNhbXBsZSk6CisgICAgICAgIChQcm9iZUhlbHBlci5pbnN0YWxsVHJhY2luZ0xpc3RlbmVy
cy5XZWJJbnNwZWN0b3IpOgorICAgICAgICAoUHJvYmVIZWxwZXIuaW5zdGFsbFRyYWNpbmdMaXN0
ZW5lcnMpOgorCiAyMDE0LTAyLTAyICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCBNYWMgZ2FyZGVyaW5nIGFmdGVyIHIxNjMyNjUuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9yZXNvdXJjZXMv
SW5zcGVjdG9yVGVzdC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yLXByb3Rv
Y29sL3Jlc291cmNlcy9JbnNwZWN0b3JUZXN0LmpzCmluZGV4IGI2MzJkYjYxZTZhNDVkZTdiZjg0
NzhjNWY1ZGE0OWYwYTI3NzAwODUuLjY1ZWMxMWNlNDQ3NmQ1NmE3MDAxMGI2YzUzY2E2MTM3YWU1
OGM3MDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yLXByb3Rv
Y29sL3Jlc291cmNlcy9JbnNwZWN0b3JUZXN0LmpzCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvaW5zcGVjdG9yLXByb3RvY29sL3Jlc291cmNlcy9JbnNwZWN0b3JUZXN0LmpzCkBAIC0yNiw2
ICsyNiw3IEBACiBJbnNwZWN0b3JGcm9udGVuZEFQSSA9IHt9OwogCiBJbnNwZWN0b3JUZXN0ID0g
e307CitJbnNwZWN0b3JUZXN0LmR1bXBJbnNwZWN0b3JQcm90b2NvbE1lc3NhZ2VzID0gZmFsc2U7
CiBJbnNwZWN0b3JUZXN0Ll9kaXNwYXRjaFRhYmxlID0gW107CiBJbnNwZWN0b3JUZXN0Ll9yZXF1
ZXN0SWQgPSAtMTsKIEluc3BlY3RvclRlc3QuZXZlbnRIYW5kbGVyID0ge307CkBAIC00Myw2ICs0
NCwxMSBAQCBJbnNwZWN0b3JUZXN0LnNlbmRDb21tYW5kID0gZnVuY3Rpb24obWV0aG9kLCBwYXJh
bXMsIGhhbmRsZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbXMiOiBwYXJhbXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZCI6IHRoaXMuX3JlcXVlc3RJZCB9OwogCisg
ICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBkZWJ1ZyBkdW1waW5nIGluIEluc3BlY3RvckJhY2tlbmQs
IHdoaWNoIGlzIGJ5cGFzc2VkCisgICAgLy8gYnkgSW5zcGVjdG9yVGVzdC4gUmV0dXJuIG1lc3Nh
Z2VzIHNob3VsZCBiZSBkdW1wZWQgYnkgSW5zcGVjdG9yQmFja2VuZC4KKyAgICBpZiAodGhpcy5k
dW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKKyAgICAgICAgY29uc29sZS5sb2coImZyb250
ZW5kOiAiICsgSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCkpOworCiAgICAgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LnNlbmRNZXNzYWdlVG9CYWNrZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VP
YmplY3QpKTsKIAogICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0SWQ7CkBAIC0xOTQsOCArMjAwLDEy
IEBAIEluc3BlY3RvclRlc3QuaW5pdGlhbGl6ZUluc3BlY3Rvck1vZGVscyA9IGZ1bmN0aW9uKCkK
ICAgICAgICAgIlJldmlzaW9uIiwKICAgICAgICAgIlNvdXJjZUNvZGVSZXZpc2lvbiIsCiAgICAg
ICAgICJTb3VyY2VDb2RlIiwKKyAgICAgICAgIlNvdXJjZUNvZGVMb2NhdGlvbiIsCisgICAgICAg
ICJTY3JpcHQiLAorICAgICAgICAiVGV4dFJhbmdlIiwKICAgICAgICAgIlJlc291cmNlIiwKICAg
ICAgICAgIlJlc291cmNlQ29sbGVjdGlvbiIsCisgICAgICAgICJTb3VyY2VNYXBSZXNvdXJjZSIs
CiAgICAgICAgICJET01UcmVlTWFuYWdlciIsCiAgICAgICAgICJET01Ob2RlIiwKICAgICAgICAg
IkNvbnRlbnRGbG93IiwKQEAgLTIwNiw3ICsyMTYsMTYgQEAgSW5zcGVjdG9yVGVzdC5pbml0aWFs
aXplSW5zcGVjdG9yTW9kZWxzID0gZnVuY3Rpb24oKQogICAgICAgICAiQ1NTU3R5bGVNYW5hZ2Vy
IiwKICAgICAgICAgIkNvbG9yIiwKICAgICAgICAgIlJ1bnRpbWVPYnNlcnZlciIsCi0gICAgICAg
ICJSdW50aW1lTWFuYWdlciIKKyAgICAgICAgIlJ1bnRpbWVNYW5hZ2VyIiwKKyAgICAgICAgIkRl
YnVnZ2VyT2JzZXJ2ZXIiLAorICAgICAgICAiRGVidWdnZXJNYW5hZ2VyIiwKKyAgICAgICAgIkJy
ZWFrcG9pbnRBY3Rpb24iLAorICAgICAgICAiQnJlYWtwb2ludCIsCisgICAgICAgICJQcm9iZU9i
amVjdCIsCisgICAgICAgICJQcm9iZVNldE9iamVjdCIsCisgICAgICAgICJQcm9iZU1hbmFnZXIi
LAorICAgICAgICAiUHJvYmVTZXREYXRhRnJhbWUiLAorICAgICAgICAiUHJvYmVTZXREYXRhVGFi
bGUiCiAgICAgXTsKIAogICAgIC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gbG9hZGluZyB0aGUgc2Ny
aXB0cyBpbiBNYWluLmhtbC4KQEAgLTIyNSw2ICsyNDQsNyBAQCBJbnNwZWN0b3JUZXN0LmluaXRp
YWxpemVJbnNwZWN0b3JNb2RlbHMgPSBmdW5jdGlvbigpCiAgICAgSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3Rlckluc3BlY3RvckRpc3BhdGNoZXIobmV3IFdlYkluc3BlY3Rvci5JbnNwZWN0b3JPYnNl
cnZlcik7CiAgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclBhZ2VEaXNwYXRjaGVyKG5ldyBX
ZWJJbnNwZWN0b3IuUGFnZU9ic2VydmVyKTsKICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RE9NRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLkRPTU9ic2VydmVyKTsKKyAgICBJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRGVidWdnZXJEaXNwYXRjaGVyKG5ldyBXZWJJbnNwZWN0b3IuRGVi
dWdnZXJPYnNlcnZlcik7CiAgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNTU0Rpc3BhdGNo
ZXIobmV3IFdlYkluc3BlY3Rvci5DU1NPYnNlcnZlcik7CiAgICAgaWYgKEluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJSdW50aW1lRGlzcGF0Y2hlcikKICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlclJ1bnRpbWVEaXNwYXRjaGVyKG5ldyBXZWJJbnNwZWN0b3IuUnVudGltZU9ic2VydmVy
KTsKQEAgLTIzMiw3ICsyNTIsOSBAQCBJbnNwZWN0b3JUZXN0LmluaXRpYWxpemVJbnNwZWN0b3JN
b2RlbHMgPSBmdW5jdGlvbigpCiAgICAgV2ViSW5zcGVjdG9yLmZyYW1lUmVzb3VyY2VNYW5hZ2Vy
ID0gbmV3IFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlcjsKICAgICBXZWJJbnNwZWN0
b3IuZG9tVHJlZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyOwogICAg
IFdlYkluc3BlY3Rvci5jc3NTdHlsZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxl
TWFuYWdlcjsKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyID0gbmV3IFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlck1hbmFnZXI7CiAgICAgV2ViSW5zcGVjdG9yLnJ1bnRpbWVNYW5hZ2VyID0g
bmV3IFdlYkluc3BlY3Rvci5SdW50aW1lTWFuYWdlcjsKKyAgICBXZWJJbnNwZWN0b3IucHJvYmVN
YW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXI7CiB9CiAKIApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL2RpZFNhbXBsZVByb2Jl
LW11bHRpcGxlLXByb2Jlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJv
dG9jb2wvZGVidWdnZXIvZGlkU2FtcGxlUHJvYmUtbXVsdGlwbGUtcHJvYmVzLWV4cGVjdGVkLnR4
dAppbmRleCBkOGI1YmE2N2QzNDMyNmE1YTczMWVmZDg3YmQ0Y2VlYjBmNzRlNTg5Li40MzhmZTY1
YjU3ZTg4NzU2ODM3NjI5Y2I4OWYzMDViNzljODQ1MDUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9pbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIvZGlkU2FtcGxlUHJvYmUtbXVsdGlwbGUtcHJv
YmVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvZGVi
dWdnZXIvZGlkU2FtcGxlUHJvYmUtbXVsdGlwbGUtcHJvYmVzLWV4cGVjdGVkLnR4dApAQCAtMSwx
MSArMSwxMCBAQAogRGVidWdnZXIuc2V0QnJlYWtwb2ludCB3aXRoIG11bHRpcGxlIHByb2JlIGFj
dGlvbnMgYXQgdGhlIHNhbWUgYnJlYWtwb2ludC4gVGVzdCBEZWJ1Z2dlci5kaWRTYW1wbGVQcm9i
ZSBldmVudHMgZm9yIHRoZSBwcm9iZSBzYW1wbGVzLgogCiBGb3VuZCBicmVha3BvaW50LmpzCi1Q
QVNTOiBTaG91bGQgcmVjZWl2ZSB0d28gYnJlYWtwb2ludCBhY3Rpb24gaWRlbnRpZmllcnMgb24g
RGVidWdnZXIuc2V0QnJlYWtwb2ludCBjYWxsYmFjay4KIFJ1bm5pbmcgYnJlYWtwb2ludEFjdGlv
bnMgdG8gdHJpZ2dlciBwcm9iZSBzYW1wbGVzLgogaW5zaWRlIGJyZWFrcG9pbnRBY3Rpb25zIGE6
KDEyKSBiOihbb2JqZWN0IE9iamVjdF0pCiBSZWNlaXZlZCBwcm9iZSBzYW1wbGUgcGF5bG9hZDog
eyJ0eXBlIjoibnVtYmVyIiwidmFsdWUiOjEyLCJkZXNjcmlwdGlvbiI6IjEyIn0KIFJlY2VpdmVk
IHByb2JlIHNhbXBsZSBwYXlsb2FkOiB7InR5cGUiOiJudW1iZXIiLCJ2YWx1ZSI6MTIsImRlc2Ny
aXB0aW9uIjoiMTIifQotUEFTUzogU2FtcGxlcyBmcm9tIHByb2JlIGFjdGlvbnMgb24gdGhlIHNh
bWUgYnJlYWtwb2ludCBzaG91bGQgaGF2ZSB1bmlxdWUgYWN0aW9uIGlkZW50aWZpZXJzLgorUEFT
UzogU2FtcGxlcyBmcm9tIGRpZmZlcmVudCBwcm9iZSBhY3Rpb25zIHNob3VsZCBoYXZlIHVuaXF1
ZSBhY3Rpb24gaWRlbnRpZmllcnMuCiBQQVNTOiBTYW1wbGVzIGZyb20gcHJvYmUgYWN0aW9ucyBv
biB0aGUgc2FtZSBicmVha3BvaW50IHNob3VsZCBoYXZlIHRoZSBzYW1lIGJhdGNoIGlkZW50aWZp
ZXJzLgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdn
ZXIvZGlkU2FtcGxlUHJvYmUtbXVsdGlwbGUtcHJvYmVzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIvZGlkU2FtcGxlUHJvYmUtbXVsdGlwbGUtcHJvYmVzLmh0
bWwKaW5kZXggMTY4MDZhYzE3YzI3MWI2OGU2ZTA1OWMzNTk2MzliOTdhNzhkOWQ5My4uY2E2ZWRh
ZjA3ODhlYTA2ZDVjZjFkNWI0ZmNkMDNiNGUyMzJjODUzZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL2RpZFNhbXBsZVByb2JlLW11bHRpcGxlLXBy
b2Jlcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9k
aWRTYW1wbGVQcm9iZS1tdWx0aXBsZS1wcm9iZXMuaHRtbApAQCAtMjQsNyArMjQsNyBAQCBmdW5j
dGlvbiB0ZXN0KCkKIAogICAgIHZhciB0ZXN0cyA9IFsKICAgICAgICAgewotICAgICAgICAgICAg
bWVzc2FnZTogIlNhbXBsZXMgZnJvbSBwcm9iZSBhY3Rpb25zIG9uIHRoZSBzYW1lIGJyZWFrcG9p
bnQgc2hvdWxkIGhhdmUgdW5pcXVlIGFjdGlvbiBpZGVudGlmaWVycy4iLAorICAgICAgICAgICAg
bWVzc2FnZTogIlNhbXBsZXMgZnJvbSBkaWZmZXJlbnQgcHJvYmUgYWN0aW9ucyBzaG91bGQgaGF2
ZSB1bmlxdWUgYWN0aW9uIGlkZW50aWZpZXJzLiIsCiAgICAgICAgICAgICBwcmVkaWNhdGU6IGZ1
bmN0aW9uIHNhbXBsZXNIYXZlVW5pcXVlQWN0aW9uSWRzKCkgewogICAgICAgICAgICAgICAgIHJl
dHVybiBzYW1wbGVzWzBdLnByb2JlSWQgIT09IHNhbXBsZXNbMV0ucHJvYmVJZDsKICAgICAgICAg
ICAgIH0sCkBAIC00OCwyMiArNDgsMTQgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICB2
YXIgb3B0aW9ucyA9IHsKICAgICAgICAgICAgICAgICBhdXRvQ29udGludWU6IHRydWUsCiAgICAg
ICAgICAgICAgICAgYWN0aW9uczogWwotICAgICAgICAgICAgICAgICAgICB7InR5cGUiOiAicHJv
YmUiLCAiZGF0YSI6ICJhIn0sCi0gICAgICAgICAgICAgICAgICAgIHsidHlwZSI6ICJwcm9iZSIs
ICJkYXRhIjogImEifQorICAgICAgICAgICAgICAgICAgICB7InR5cGUiOiAicHJvYmUiLCAiZGF0
YSI6ICJhIiwgImlkZW50aWZpZXIiOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgeyJ0eXBlIjog
InByb2JlIiwgImRhdGEiOiAiYSIsICJpZGVudGlmaWVyIjogMn0KICAgICAgICAgICAgICAgICBd
CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnNlbmRDb21tYW5k
KCJEZWJ1Z2dlci5zZXRCcmVha3BvaW50Iiwge2xvY2F0aW9uOiBsb2NhdGlvbiwgb3B0aW9uczog
b3B0aW9uc30sIGZ1bmN0aW9uKHJlc3BvbnNlT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5jaGVja0ZvckVycm9yKHJlc3BvbnNlT2JqZWN0KTsKLSAgICAgICAgICAgICAg
ICB2YXIgYWN0aW9uSWRlbnRpZmllcnMgPSByZXNwb25zZU9iamVjdC5yZXN1bHQuYnJlYWtwb2lu
dEFjdGlvbklkZW50aWZpZXJzOwotICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0
KGFjdGlvbklkZW50aWZpZXJzIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uSWRlbnRpZmllcnMu
bGVuZ3RoID09PSAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaG91
bGQgcmVjZWl2ZSB0d28gYnJlYWtwb2ludCBhY3Rpb24gaWRlbnRpZmllcnMgb24gRGVidWdnZXIu
c2V0QnJlYWtwb2ludCBjYWxsYmFjay4iKTsKIAotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBz
aG91bGQgd2UgdXNlIHRoZSBCcmVha3BvaW50L0JyZWFrcG9pbnRBY3Rpb24gbW9kZWwgb2JqZWN0
cyB0byBtYW5hZ2UgdGhpcz8KLSAgICAgICAgICAgICAgICBpZiAoYWN0aW9uSWRlbnRpZmllcnMu
bGVuZ3RoID09PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWN0aW9uc1swXS5p
ZGVudGlmaWVyID0gYWN0aW9uSWRlbnRpZmllcnNbMF07Ci0gICAgICAgICAgICAgICAgICAgIG9w
dGlvbnMuYWN0aW9uc1sxXS5pZGVudGlmaWVyID0gYWN0aW9uSWRlbnRpZmllcnNbMV07Ci0gICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJSdW5uaW5n
IGJyZWFrcG9pbnRBY3Rpb25zIHRvIHRyaWdnZXIgcHJvYmUgc2FtcGxlcy4iKTsKICAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LnNlbmRDb21tYW5kKCJSdW50aW1lLmV2YWx1YXRlIiwge2V4
cHJlc3Npb246ICJicmVha3BvaW50QWN0aW9ucygxMiwge3g6MSx5OjJ9KSJ9KTsKICAgICAgICAg
ICAgIH0pOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL21vZGVs
L3Byb2JlLW1hbmFnZXItYWRkLXJlbW92ZS1hY3Rpb25zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci1wcm90b2NvbC9tb2RlbC9wcm9iZS1tYW5hZ2VyLWFkZC1yZW1vdmUtYWN0
aW9ucy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTYzYWM1YWUxOGIwZWZkZDc4ZTY0M2U2NDQz
MDhkMTc4NTc4Yjg4OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1w
cm90b2NvbC9tb2RlbC9wcm9iZS1tYW5hZ2VyLWFkZC1yZW1vdmUtYWN0aW9ucy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxNyBAQAorVGVzdGluZyB0aGF0IHRoZSBwcm9iZSBtYW5hZ2VyIHByb3Bl
cmx5IGhhbmRsZXMgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgcmVsYXRlZCBwcm9iZXMuCisKK0Jy
ZWFrcG9pbnQgYXV0b2NvbnRpbnVlIHN0YXRlIGNoYW5nZWQ6IHRydWUKK1Byb2JlIHNldCB3YXMg
YWRkZWQuIE5ldyBjb3VudDogMAorUHJvYmUgd2l0aCBpZGVudGlmaWVyIDEgd2FzIGFkZGVkIHRv
IHByb2JlIHNldC4KK1Byb2JlIHNldCdzIHByb2JlIGNvdW50OiAxCitCcmVha3BvaW50IGFjdGlv
bnMgY2hhbmdlZC4gTmV3IGNvdW50OiAxCitQcm9iZSB3aXRoIGlkZW50aWZpZXIgMSBjbGVhcmVk
IGFsbCBzYW1wbGVzLgorUHJvYmUgd2l0aCBpZGVudGlmaWVyIDEgY2hhbmdlZCBleHByZXNzaW9u
OiBhCitCcmVha3BvaW50IGFjdGlvbnMgY2hhbmdlZC4gTmV3IGNvdW50OiAxCitQcm9iZSB3aXRo
IGlkZW50aWZpZXIgMiB3YXMgYWRkZWQgdG8gcHJvYmUgc2V0LgorUHJvYmUgc2V0J3MgcHJvYmUg
Y291bnQ6IDIKK0JyZWFrcG9pbnQgYWN0aW9ucyBjaGFuZ2VkLiBOZXcgY291bnQ6IDIKK1Byb2Jl
IHdpdGggaWRlbnRpZmllciAyIGNsZWFyZWQgYWxsIHNhbXBsZXMuCitQcm9iZSB3aXRoIGlkZW50
aWZpZXIgMiBjaGFuZ2VkIGV4cHJlc3Npb246IGEKK0JyZWFrcG9pbnQgYWN0aW9ucyBjaGFuZ2Vk
LiBOZXcgY291bnQ6IDIKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3Rv
Y29sL21vZGVsL3Byb2JlLW1hbmFnZXItYWRkLXJlbW92ZS1hY3Rpb25zLmh0bWwgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvbW9kZWwvcHJvYmUtbWFuYWdlci1hZGQtcmVtb3ZlLWFj
dGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZWQ2ZDFmOGU0N2IyNjg2NmUzMjdlODJmNDdhODhhODFk
MTA4MzAxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29s
L21vZGVsL3Byb2JlLW1hbmFnZXItYWRkLXJlbW92ZS1hY3Rpb25zLmh0bWwKQEAgLTAsMCArMSw1
NCBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvcmVz
b3VyY2VzL3Byb3RvY29sLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2RlYnVn
Z2VyL3Jlc291cmNlcy9icmVha3BvaW50LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlv
biB0ZXN0KCkKK3sKKyAgICBJbnNwZWN0b3JUZXN0LmltcG9ydFNjcmlwdCgiLi4vLi4vLi4vLi4v
aW5zcGVjdG9yLXByb3RvY29sL3Jlc291cmNlcy9wcm9iZS1oZWxwZXIuanMiKTsKKyAgICBJbnNw
ZWN0b3JUZXN0LmluaXRpYWxpemVJbnNwZWN0b3JNb2RlbHMoKTsKKworICAgIHZhciBjdXJyZW50
VGlja3MgPSAwOworICAgIGNvbnN0IGV4cGVjdGVkVGlja3MgPSAyOworCisgICAgZnVuY3Rpb24g
aW5jcmVtZW50VGljayhldmVudCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJI
aXQgdGVzdCBjaGVja3BvaW50IGV2ZW50ICMiICsgY3VycmVudFRpY2tzICsgIiB3aXRoIHR5cGU6
ICIgKyBldmVudC50eXBlKTsKKyAgICAgICAgaWYgKCsrY3VycmVudFRpY2tzID09PSBleHBlY3Rl
ZFRpY2tzKQorICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICB9
CisKKyAgICBXZWJJbnNwZWN0b3IuUHJvYmVPYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuUHJvYmVPYmplY3QuRXZlbnQuU2FtcGxlQWRkZWQsIGluY3JlbWVudFRpY2spOworCisg
ICAgUHJvYmVIZWxwZXIuaW5zdGFsbFRyYWNpbmdMaXN0ZW5lcnMoKTsKKworICAgIFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdn
ZXJNYW5hZ2VyLkV2ZW50LlNjcmlwdEFkZGVkLCBmdW5jdGlvbihldmVudCkgeworCisgICAgICAg
IHZhciBzY3JpcHRPYmplY3QgPSBldmVudC5kYXRhLnNjcmlwdDsKKworICAgICAgICBpZiAoIS9y
ZXNvdXJjZXNcL2JyZWFrcG9pbnRcLmpzJC8udGVzdChzY3JpcHRPYmplY3QudXJsKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgbG9jYXRpb24gPSBzY3JpcHRPYmplY3QuY3Jl
YXRlU291cmNlQ29kZUxvY2F0aW9uKDE4LCA0KTsKKyAgICAgICAgLy8gRm9yIHRoaXMgdGVzdCwg
Zmlyc3QgY3JlYXRlIHRoZSBicmVha3BvaW50IGFuZCBpdHMgYWN0aW9ucyBiZWZvcmUgc2VuZGlu
ZyBhbnl0aGluZyB0byB0aGUgYmFja2VuZC4KKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcg
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQobG9jYXRpb24pOworICAgICAgICBicmVha3BvaW50LmF1
dG9Db250aW51ZSA9IHRydWU7CisgICAgICAgIC8vIENyZWF0ZSB0d28gcmVsYXRlZCBhY3Rpb25z
LgorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI7ICsraSkgeworICAgICAgICAgICAgdmFy
IGFjdGlvbiA9IGJyZWFrcG9pbnQuY3JlYXRlQWN0aW9uKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
QWN0aW9uLlR5cGUuUHJvYmUpOworICAgICAgICAgICAgYWN0aW9uLmRhdGEgPSAiYSI7CisgICAg
ICAgIH0KKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRCcmVha3BvaW50
KGJyZWFrcG9pbnQpOworICAgICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnQuRXZlbnQuUmVzb2x2ZWRTdGF0ZURpZENoYW5nZSwgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChicmVha3BvaW50LnJlc29sdmVk
LCAiQnJlYWtwb2ludCBzaG91bGQgYmUgcmVzb2x2ZWQuIik7CisgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LnNlbmRDb21tYW5kKCJSdW50aW1lLmV2YWx1YXRlIiwge2V4cHJlc3Npb246ICJicmVh
a3BvaW50QWN0aW9ucygxMiwge3g6MSx5OjJ9KSJ9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9
Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8cD5U
ZXN0aW5nIHRoYXQgdGhlIHByb2JlIG1hbmFnZXIgcHJvcGVybHkgaGFuZGxlcyBhZGRpdGlvbiBh
bmQgcmVtb3ZhbCBvZiByZWxhdGVkIHByb2Jlcy48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvcmVzb3VyY2VzL3Byb2JlLWhl
bHBlci5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9yZXNvdXJjZXMvcHJvYmUt
aGVscGVyLmpzCmluZGV4IDAxNDc2ZmExYzU0MWVjMWJhM2Q5MzNlNzllYTM3NWYyNWViMzY5M2Uu
LmRmZTU5ZmRkYWU5M2JiZWU4OTJhZTdhOGM4Zjk1YjJiNGEwODJhNjggMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9yZXNvdXJjZXMvcHJvYmUtaGVscGVyLmpzCisr
KyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9yZXNvdXJjZXMvcHJvYmUtaGVscGVy
LmpzCkBAIC0xMCwzICsxMCwxMTggQEAgUHJvYmVIZWxwZXIuc2ltcGxpZmllZFByb2JlU2FtcGxl
ID0gZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKICAgICAgICAgcGF5bG9hZDogZGF0YS5wYXlsb2Fk
CiAgICAgfTsKIH0KKworUHJvYmVIZWxwZXIuc3RyaW5naWZ5UHJvYmVTYW1wbGUgPSBmdW5jdGlv
bihwcm9iZVNhbXBsZU9iamVjdCkKK3sKKyAgICBjb25zb2xlLmFzc2VydChwcm9iZVNhbXBsZU9i
amVjdCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9iZVNhbXBsZU9iamVjdCwgIlVuZXhwZWN0
ZWQgb2JqZWN0IHR5cGUhIik7CisgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsKKyAgICAgICAg
InNhbXBsZUlkIjogcHJvYmVTYW1wbGVPYmplY3Quc2FtcGxlSWQsCisgICAgICAgICJiYXRjaElk
IjogcHJvYmVTYW1wbGVPYmplY3QuYmF0Y2hJZCwKKyAgICB9KTsKK30KKworUHJvYmVIZWxwZXIu
aW5zdGFsbFRyYWNpbmdMaXN0ZW5lcnMgPSBmdW5jdGlvbigpCit7CisgICAgaWYgKCFXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNYW5hZ2VyIHx8ICFXZWJJbnNwZWN0b3IucHJvYmVNYW5hZ2VyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5CcmVha3BvaW50QWRk
ZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJCcmVha3Bv
aW50IHdhcyBhZGRlZC4iKTsKKyAgICB9KTsKKworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1h
bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50
LkJyZWFrcG9pbnRSZW1vdmVkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICBJbnNwZWN0b3JU
ZXN0LmxvZygiQnJlYWtwb2ludCB3YXMgcmVtb3ZlZC4iKTsKKyAgICB9KTsKKworICAgIFdlYklu
c3BlY3Rvci5CcmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnQuRXZlbnQuRGlzYWJsZWRTdGF0ZURpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC50YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCwgIlVuZXhwZWN0
ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkJyZWFrcG9p
bnQgZGlzYWJsZWQgc3RhdGUgY2hhbmdlZDogIiArIGJyZWFrcG9pbnQuZGlzYWJsZWQpOworICAg
IH0pOworCisgICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5SZXNvbHZlZFN0YXRlRGlkQ2hhbmdlLCBmdW5jdGlv
bihldmVudCkgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKKyAgICAg
ICAgY29uc29sZS5hc3NlcnQoYnJlYWtwb2ludCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50LCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKKworICAgICAgICBJbnNwZWN0b3JU
ZXN0LmxvZygiQnJlYWtwb2ludCByZXNvbHZlZCBzdGF0ZSBjaGFuZ2VkOiAiICsgYnJlYWtwb2lu
dC5yZXNvbHZlZCk7CisgICAgfSk7CisKKyAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkF1dG9Db250aW51ZURp
ZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVu
dC50YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludCwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAg
ICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkJyZWFrcG9pbnQgYXV0b2NvbnRpbnVlIHN0YXRlIGNo
YW5nZWQ6ICIgKyBicmVha3BvaW50LmF1dG9Db250aW51ZSk7CisgICAgfSk7CisKKyAgICBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50LkV2ZW50LkNvbmRpdGlvbkRpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAg
dmFyIGJyZWFrcG9pbnQgPSBldmVudC50YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJy
ZWFrcG9pbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCwgIlVuZXhwZWN0ZWQg
b2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkJyZWFrcG9pbnQg
Y29uZGl0aW9uIGNoYW5nZWQ6ICIgKyBicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgfSk7CisK
KyAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50LkV2ZW50LkFjdGlvbnNEaWRDaGFuZ2UsIGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OworICAgICAgICBjb25zb2xlLmFz
c2VydChicmVha3BvaW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQsICJVbmV4
cGVjdGVkIG9iamVjdCB0eXBlISIpOworCisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJCcmVh
a3BvaW50IGFjdGlvbnMgY2hhbmdlZC4gTmV3IGNvdW50OiAiICsgYnJlYWtwb2ludC5hY3Rpb25z
Lmxlbmd0aCk7CisgICAgfSk7CisKKyAgICBXZWJJbnNwZWN0b3IucHJvYmVNYW5hZ2VyLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlci5FdmVudC5Qcm9iZVNldEFkZGVk
LCBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgcHJvYmVTZXQgPSBldmVudC5kYXRhOwor
ICAgICAgICBjb25zb2xlLmFzc2VydChwcm9iZVNldCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Q
cm9iZVNldE9iamVjdCwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2coIlByb2JlIHNldCB3YXMgYWRkZWQuIE5ldyBjb3VudDogIiArIFdlYklu
c3BlY3Rvci5wcm9iZU1hbmFnZXIucHJvYmVTZXRzLmxlbmd0aCk7CisgICAgfSk7CisKKyAgICBX
ZWJJbnNwZWN0b3IucHJvYmVNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlBy
b2JlTWFuYWdlci5FdmVudC5Qcm9iZVNldFJlbW92ZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
ICAgIHZhciBwcm9iZVNldCA9IGV2ZW50LmRhdGE7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBy
b2JlU2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlU2V0T2JqZWN0LCAiVW5leHBlY3Rl
ZCBvYmplY3QgdHlwZSEiKTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUHJvYmUgc2V0
IHdhcyByZW1vdmVkLiBOZXcgY291bnQ6ICIgKyBXZWJJbnNwZWN0b3IucHJvYmVNYW5hZ2VyLnBy
b2JlU2V0cy5sZW5ndGgpOworICAgIH0pOworCisgICAgV2ViSW5zcGVjdG9yLlByb2JlT2JqZWN0
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlByb2JlT2JqZWN0LkV2ZW50LkV4cHJlc3Np
b25DaGFuZ2VkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgcHJvYmUgPSBldmVudC50
YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHByb2JlIGluc3RhbmNlb2YgV2ViSW5zcGVj
dG9yLlByb2JlT2JqZWN0LCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKKworICAgICAgICBJ
bnNwZWN0b3JUZXN0LmxvZygiUHJvYmUgd2l0aCBpZGVudGlmaWVyICIgKyBwcm9iZS5pZGVudGlm
aWVyICsgIiBjaGFuZ2VkIGV4cHJlc3Npb246ICIgKyBwcm9iZS5leHByZXNzaW9uKTsKKyAgICB9
KTsKKworICAgIFdlYkluc3BlY3Rvci5Qcm9iZU9iamVjdC5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5Qcm9iZU9iamVjdC5FdmVudC5TYW1wbGVBZGRlZCwgZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICAgICAgdmFyIHByb2JlID0gZXZlbnQudGFyZ2V0OworICAgICAgICB2YXIgc2FtcGxlID0g
ZXZlbnQuZGF0YTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmUgaW5zdGFuY2VvZiBXZWJJ
bnNwZWN0b3IuUHJvYmVPYmplY3QsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOworICAgICAg
ICBjb25zb2xlLmFzc2VydChzYW1wbGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUHJvYmVTYW1w
bGVPYmplY3QsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOworCisgICAgICAgIEluc3BlY3Rv
clRlc3QubG9nKCJQcm9iZSB3aXRoIGlkZW50aWZpZXIgIiArIHByb2JlLmlkZW50aWZpZXIgKyAi
IGFkZGVkIHNhbXBsZTogIiArIHNhbXBsZSk7CisgICAgfSk7CisKKyAgICBXZWJJbnNwZWN0b3Iu
UHJvYmVPYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUHJvYmVPYmplY3QuRXZl
bnQuU2FtcGxlc0NsZWFyZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBwcm9iZSA9
IGV2ZW50LnRhcmdldDsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmUgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuUHJvYmVPYmplY3QsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOworCisg
ICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQcm9iZSB3aXRoIGlkZW50aWZpZXIgIiArIHByb2Jl
LmlkZW50aWZpZXIgKyAiIGNsZWFyZWQgYWxsIHNhbXBsZXMuIik7CisgICAgfSk7CisKKyAgICBX
ZWJJbnNwZWN0b3IuUHJvYmVTZXRPYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
UHJvYmVTZXRPYmplY3QuRXZlbnQuUHJvYmVBZGRlZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgdmFyIHByb2JlID0gZXZlbnQuZGF0YTsKKyAgICAgICAgdmFyIHByb2JlU2V0ID0gZXZlbnQu
dGFyZ2V0OworICAgICAgICBjb25zb2xlLmFzc2VydChwcm9iZSBpbnN0YW5jZW9mIFdlYkluc3Bl
Y3Rvci5Qcm9iZU9iamVjdCwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KHByb2JlU2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlU2V0T2Jq
ZWN0LCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0
LmxvZygiUHJvYmUgd2l0aCBpZGVudGlmaWVyICIgKyBwcm9iZS5pZGVudGlmaWVyICsgIiB3YXMg
YWRkZWQgdG8gcHJvYmUgc2V0LiIpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUHJvYmUg
c2V0J3MgcHJvYmUgY291bnQ6ICIgKyBwcm9iZVNldC5wcm9iZXMubGVuZ3RoKTsKKyAgICB9KTsK
KworICAgIFdlYkluc3BlY3Rvci5Qcm9iZVNldE9iamVjdC5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5Qcm9iZVNldE9iamVjdC5FdmVudC5Qcm9iZVJlbW92ZWQsIGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgIHZhciBwcm9iZSA9IGV2ZW50LmRhdGE7CisgICAgICAgIHZhciBwcm9iZVNl
dCA9IGV2ZW50LnRhcmdldDsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmUgaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuUHJvYmVPYmplY3QsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwor
ICAgICAgICBjb25zb2xlLmFzc2VydChwcm9iZVNldCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Q
cm9iZVNldE9iamVjdCwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2coIlByb2JlIHdpdGggaWRlbnRpZmllciAiICsgcHJvYmUuaWRlbnRpZmll
ciArICIgd2FzIHJlbW92ZWQgZnJvbSBwcm9iZSBzZXQuIik7CisgICAgICAgIEluc3BlY3RvclRl
c3QubG9nKCJQcm9iZSBzZXQncyBwcm9iZSBjb3VudDogIiArIHByb2JlU2V0LnByb2Jlcy5sZW5n
dGgpOworICAgIH0pOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223166</attachid>
            <date>2014-02-04 15:16:10 -0800</date>
            <delta_ts>2014-02-05 11:06:39 -0800</delta_ts>
            <desc>patch2</desc>
            <filename>bug-127117-20140204151704.patch</filename>
            <type>text/plain</type>
            <size>87499</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYzMzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MzYzMTY1Mjc4YmM5M2MyN2Q3ZTFjOWIzNjA2M2YyYjIyMDNkNzY5Li4xNDRjZWEyMjA0OWJkZWM0
ODA1ODlkMWIwNWM2NDUyNzMwOGQ2OTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMiBAQAorMjAxNC0wMi0wNCAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBhZGQgcHJvYmUgbWFuYWdlciBhbmQgbW9kZWwgb2JqZWN0
cyB0byB0aGUgZnJvbnRlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNzExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoZSBpbnNwZWN0b3IgZnJvbnRlbmQgbm93IGFzc2lnbnMgYnJlYWtwb2ludCBh
Y3Rpb24gaWRlbnRpZmllcnMsCisgICAgICAgIHJhdGhlciB0aGFuIHRoZSBiYWNrZW5kLiBSZW1v
dmUgcmV0dXJuIHZhbHVlcyBjb250YWluaW5nIGJyZWFrcG9pbnQKKyAgICAgICAgaWRlbnRpZmll
cnMsIGFuZCByZW1vdmUgdHJhY2tpbmcgYW5kIGFzc2lnbm1lbnQgb2YgYWN0aW9uIGlkZW50aWZp
ZXJzLgorCisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdERlYnVnTGlzdGVuZXIuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9y
OjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaW50QWN0aW9uKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoQnJlYWtwb2ludEFjdGlvblBy
b2JlKToKKyAgICAgICAgUGFzcyBCcmVha3BvaW50QWN0aW9uIGJ5IHJlZmVyZW5jZSByYXRoZXIg
dGhhbiBqdXN0IHRoZSBhY3Rpb24gaWRlbnRpZmllci4KKworICAgICAgICAqIGluc3BlY3Rvci9T
Y3JpcHREZWJ1Z1NlcnZlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Om9iamVjdEdyb3VwRm9yQnJl
YWtwb2ludEFjdGlvbik6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbCk6CisgICAgICAg
IChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybCk6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9p
bnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVC
cmVha3BvaW50KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
YnJlYWtwb2ludEFjdGlvblByb2JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvRGVidWdn
ZXIuanNvbjogUmV2ZXJ0IGNoYW5nZSB0byBzZXRCcmVha3BvaW50IHJldHVybiB2YWx1ZXMuIEFk
ZCBvcHRpb25hbCBpZGVudGlmaWVyIHRvIGJyZWFrcG9pbnQgYWN0aW9ucy4KKwogMjAxNC0wMi0w
NCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIEdD
IHRpbWVyIHNob3VsZCBhbHdheXMgZG8gYSBGdWxsQ29sbGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFu
Z2VMb2cKaW5kZXggZTMwZjNhMDQ1MTFiNzYyMDQxOWQzNzAzOTc2NzY1YjA2YWQyNzc1Yy4uMmE4
Y2E1YjZlNzNjZmRkZDczYTk0NTcxZGZiZDA5Mjk0ODdiODcxYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTE0IEBACisyMDE0LTAyLTA0ICBCcmlhbiBCdXJnICA8YmJ1cmdA
YXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBwcm9iZSBtYW5hZ2VyIGFu
ZCBtb2RlbCBvYmplY3RzIHRvIHRoZSBmcm9udGVuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBwcm9iZSBtYW5hZ2VyLCBhbmQgdGhlIGZv
bGxvd2luZyBtb2RlbCBvYmplY3RzOgorCisgICAgICAgIC0gUHJvYmVPYmplY3QgY29ycmVzcG9u
ZHMgdG8gYSBzaW5nbGUgcHJvYmUgYnJlYWtwb2ludCBhY3Rpb24uCisgICAgICAgIC0gUHJvYmVT
ZXRPYmplY3QgY29udGFpbnMgYWxsIFByb2JlT2JqZWN0cyBmb3Igb25lIEJyZWFrcG9pbnQuCisg
ICAgICAgIC0gUHJvYmVTZXREYXRhRnJhbWUgaG9sZHMgcHJvYmUgc2FtcGxlcyBmcm9tIG11bHRp
cGxlCisgICAgICAgIHByb2JlcyBmaXJlZCBmcm9tIHRoZSBzYW1lIGJyZWFrcG9pbnQgaGl0L2Rl
YnVnZ2VyIHBhdXNlLgorICAgICAgICAtIFByb2JlU2V0RGF0YVRhYmxlIGtlZXBzIHRyYWNrIG9m
IG11bHRpcGxlIHN1Y2ggZGF0YSBmcmFtZXMKKyAgICAgICAgYW5kIG1hbmFnZXMgcHJvYmUgc2Ft
cGxlIGxpZmV0aW1lcyBhY3Jvc3MgcGFnZSBuYXZpZ2F0aW9ucy4KKworICAgICAgICBUaGUgcHJv
YmUgbWFuYWdlciB1cGRhdGVzIHByb2JlIG1vZGVsIG9iamVjdHMgd2hlbmV2ZXIgYnJlYWtwb2lu
dHMKKyAgICAgICAgYXJlIGFkZGVkLCByZW1vdmVkLCBvciBtb2RpZmllZC4KKworICAgICAgICBU
aGUgaW5zcGVjdG9yIGZyb250ZW5kIG5vdyBhc3NpZ25zIGJyZWFrcG9pbnQgYWN0aW9uIGlkZW50
aWZpZXJzLAorICAgICAgICByYXRoZXIgdGhhbiB0aGUgYmFja2VuZC4gVGhpcyBsZXRzIFByb2Jl
T2JqZWN0cyBrZWVwIHN0YWJsZQorICAgICAgICBpZGVudGlmaWVycyB0aGF0IG1hdGNoIHRoZSBw
cm9iZSdzIHNhbXBsZXMsIGV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZworICAgICAgICBicmVha3Bv
aW50IGlzIHJlLWFkZGVkIHdpdGggYSBkaWZmZXJlbnQgaWRlbnRpZmllciAoc3VjaCBhcyB3aGVu
CisgICAgICAgIGVkaXRpbmcgcHJvYmUgZXhwcmVzc2lvbnMpLgorCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9CcmVha3BvaW50LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQu
cHJvdG90eXBlLmdldCBwcm9iZUFjdGlvbnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50LnByb3RvdHlwZS5jcmVhdGVBY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLnJlbW92ZUFjdGlvbik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuY2xlYXJBY3Rpb25zKTogQWRkZWQuCisgICAgICAg
ICogVXNlckludGVyZmFjZS9CcmVha3BvaW50QWN0aW9uLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnRBY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRB
Y3Rpb24ucHJvdG90eXBlLmdldCBpZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dEFjdGlvbi5wcm90b3R5cGUuZ2V0IGluZm8pOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRGVi
dWdnZXJNYW5hZ2VyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5y
ZXN0b3JlQnJlYWtwb2ludHNTb29uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1h
bmFnZXIpOiBSZXN0b3JlIHNhdmVkIGJyZWFrcG9pbnRzCisgICAgICAgIGZyb20gY29va2llcyBv
biB0aGUgc2Vjb25kIHJ1biBsb29wLCBzbyB0aGF0IGFsbCBtYW5hZ2VycyB3aWxsCisgICAgICAg
IGJlIGFibGUgdG8gcmVjZWl2ZWQgYnJlYWtwb2ludCBhZGRlZCBldmVudHMuCisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5hZGRCcmVha3BvaW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUJyZWFr
cG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUu
Z2V0IG5leHRCcmVha3BvaW50QWN0aW9uSWRlbnRpZmllcik6CisgICAgICAgIFRoZSBkZWJ1Z2dl
ciBtYW5hZ2VyIGFzc2lnbnMgdW5pcXVlIGJyZWFrcG9pbnQgYWN0aW9uIGlkZW50aWZpZXJzIHdp
dGggdGhpcyBnZXR0ZXIuCisKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIu
cHJvdG90eXBlLl9kZWJ1Z2dlckJyZWFrcG9pbnRBY3Rpb25UeXBlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLmRpZFNldEJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuX3NldEJyZWFrcG9p
bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuZGlk
UmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2Vy
LnByb3RvdHlwZS5fcmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9E
ZWJ1Z2dlck9ic2VydmVyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyT2JzZXJ2
ZXIucHJvdG90eXBlLmRpZFNhbXBsZVByb2JlKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0lu
c3BlY3RvckpTQmFja2VuZENvbW1hbmRzLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFp
bi5odG1sOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5sb2FkZWQpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvYmUuanM6IEFkZGVk
LgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlU2FtcGxlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Qcm9iZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmUucHJvdG90eXBlLmdldCBp
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmUucHJvdG90eXBlLmdldCBicmVha3BvaW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZS5wcm90b3R5cGUuZ2V0IGV4cHJlc3Npb24p
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlLnByb3RvdHlwZS5zZXQgZXhwcmVzc2lvbik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmUucHJvdG90eXBlLmdldCBzYW1wbGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZS5wcm90b3R5cGUuY2xlYXJTYW1wbGVzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Qcm9iZS5wcm90b3R5cGUuYWRkU2FtcGxlKToKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL1Byb2JlTWFuYWdlci5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0
b3IuUHJvYmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXIucHJv
dG90eXBlLnByb2JlU2V0Rm9yQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJv
YmVNYW5hZ2VyLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlByb2JlTWFuYWdlci5wcm90b3R5cGUuX2JyZWFrcG9pbnRBY3Rpb25zQ2hhbmdlZC5n
ZXQgdmFyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXIucHJvdG90eXBlLl9i
cmVha3BvaW50QWN0aW9uc0NoYW5nZWQuc2V0IGdldCBrbm93blByb2JlSWRlbnRpZmllcnMpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlci5wcm90b3R5cGUuX2JyZWFrcG9pbnRB
Y3Rpb25zQ2hhbmdlZCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9Qcm9iZVNldC5qczogQWRk
ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlByb2JlU2V0LnByb3RvdHlwZS5nZXQgYnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUHJvYmVTZXQucHJvdG90eXBlLmdldCBwcm9iZXMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlByb2JlU2V0LnByb3RvdHlwZS5nZXQgZGF0YVRhYmxlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Qcm9iZVNldC5wcm90b3R5cGUuY2xlYXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBy
b2JlU2V0LnByb3RvdHlwZS5jbGVhclNhbXBsZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBy
b2JlU2V0LnByb3RvdHlwZS5jcmVhdGVQcm9iZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJv
YmVTZXQucHJvdG90eXBlLnJlbW92ZVByb2JlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9i
ZVNldC5wcm90b3R5cGUud2lsbFJlbW92ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVT
ZXQucHJvdG90eXBlLl9tYWluUmVzb3VyY2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Qcm9iZVNldC5wcm90b3R5cGUuX2NyZWF0ZURhdGFUYWJsZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUHJvYmVTZXQucHJvdG90eXBlLl9zYW1wbGVDb2xsZWN0ZWQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlByb2JlU2V0LnByb3RvdHlwZS5fYnJlYWtwb2ludFJlc29sdmVkU3RhdGVEaWRD
aGFuZ2UpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvYmVTZXREYXRhRnJhbWUuanM6IEFk
ZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YUZyYW1lKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFGcmFtZS5jb21wYXJlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Qcm9iZVNldERhdGFGcmFtZS5wcm90b3R5cGUuZ2V0IGtleSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhRnJhbWUucHJvdG90eXBlLmdldCBjb3VudCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhRnJhbWUucHJvdG90eXBlLmdldCBpbmRleCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhRnJhbWUucHJvdG90eXBlLmdldCBp
c1NlcGFyYXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhRnJhbWUucHJv
dG90eXBlLnNldCBpc1NlcGFyYXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXRE
YXRhRnJhbWUucHJvdG90eXBlLmFkZFNhbXBsZUZvclByb2JlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Qcm9iZVNldERhdGFGcmFtZS5wcm90b3R5cGUubWlzc2luZ0tleXMpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YUZyYW1lLnByb3RvdHlwZS5pc0NvbXBsZXRlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFGcmFtZS5wcm90b3R5cGUuZmlsbE1pc3Np
bmdWYWx1ZXMpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvUHJvYmVTZXREYXRhVGFibGUuanM6
IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YVRhYmxlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFUYWJsZS5wcm90b3R5cGUuZ2V0IGZyYW1lcyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhVGFibGUucHJvdG90eXBlLmdldCBz
ZXBhcmF0b3JzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFUYWJsZS5wcm90
b3R5cGUud2lsbFJlbW92ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhVGFi
bGUucHJvdG90eXBlLm1haW5SZXNvdXJjZUNoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlByb2JlU2V0RGF0YVRhYmxlLnByb3RvdHlwZS5hZGRTYW1wbGVGb3JQcm9iZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhVGFibGUucHJvdG90eXBlLmFkZFByb2JlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFUYWJsZS5wcm90b3R5cGUucmVtb3ZlUHJv
YmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YVRhYmxlLnByb3RvdHlwZS5j
cmVhdGVGcmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhVGFibGUucHJv
dG90eXBlLmFkZEZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9iZVNldERhdGFUYWJs
ZS5wcm90b3R5cGUuYWRkU2VwYXJhdG9yKToKKwogMjAxNC0wMS0zMCAgVGltb3RoeSBIYXRjaGVy
ICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAgU2hvdyBwcm9maWxlIGRhdGEgaW4gdGhl
IGRpc2NyZXRlIFNjcmlwdHMgdGltZWxpbmUgdmlldy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdMaXN0ZW5lci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgKaW5kZXggNTYxMTA1Yzhj
NmU3ZjgyODIxNGZmOTY0ZWQyOGUwMDQwMTQ0YzQ2Ny4uMjg5MTk5N2E1NzJiMmU4MzRmNWMwOThl
NjA5YjkyMGIzY2U2YzdiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9TY3JpcHREZWJ1Z0xpc3RlbmVyLmgKQEAgLTY5LDExICs2OSwxMSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRpZFBhcnNlU291cmNlKEpTQzo6U291cmNlSUQsIGNvbnN0IFNj
cmlwdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVkVG9QYXJzZVNvdXJjZShjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgZmlyc3RMaW5lLCBpbnQgZXJyb3JM
aW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRQYXVzZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBj
YWxsRnJhbWVzLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgZXhjZXB0aW9uKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNhbXBsZVByb2JlKEpTQzo6RXhlY1N0YXRlKiwgaW50IHBy
b2JlSWRlbnRpZmllciwgaW50IGhpdENvdW50LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgcmVzdWx0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbnRpbnVlKCkgPSAwOwogCiAg
ICAgdmlydHVhbCB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Mb2coSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBTdHJpbmcmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Tb3VuZChp
bnQgYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYnJl
YWtwb2ludEFjdGlvblByb2JlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU2NyaXB0QnJlYWtwb2lu
dEFjdGlvbiYsIGludCBoaXRDb3VudCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHJl
c3VsdCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4
IDgxZTQ0MzM3YzM1OTQyNTBjOTc4MzcxYTRmYTE2MzMwYmZmMmZlYjYuLjNiZGI0NTkzMmRlOWE3
N2Y1NDA2NzhiYTdlZDIzOWM4ODZjODA4MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC0xMTMsNyArMTEzLDcg
QEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZXZhbHVhdGVCcmVha3BvaW50QWN0aW9uKGNvbnN0
IFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24mIGIKICAgICAgICAgCiAgICAgICAgIEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSA9IGRlYnVnZ2VyQ2FsbEZyYW1lLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpOwogICAgICAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB3cmFwcGVkUmVz
dWx0ID0gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoc3RhdGUtPnZtKCksIGV4Y2VwdGlvbiA/IGV4
Y2VwdGlvbiA6IHJlc3VsdCk7Ci0gICAgICAgIGRpc3BhdGNoRGlkU2FtcGxlUHJvYmUoc3RhdGUs
IGJyZWFrcG9pbnRBY3Rpb24uaWRlbnRpZmllciwgd3JhcHBlZFJlc3VsdCk7CisgICAgICAgIGRp
c3BhdGNoQnJlYWtwb2ludEFjdGlvblByb2JlKHN0YXRlLCBicmVha3BvaW50QWN0aW9uLCB3cmFw
cGVkUmVzdWx0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0xNzYs
NyArMTc2LDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hCcmVha3BvaW50QWN0
aW9uU291bmQoRXhlY1N0YXRlKiBleGVjLCBpbnQgYnJlYWsKICAgICAgICAgbGlzdGVuZXItPmJy
ZWFrcG9pbnRBY3Rpb25Tb3VuZChicmVha3BvaW50QWN0aW9uSWRlbnRpZmllcik7CiB9CiAKLXZv
aWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkU2FtcGxlUHJvYmUoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgaWRlbnRpZmllciwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNhbXBs
ZSkKK3ZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoQnJlYWtwb2ludEFjdGlvblByb2Jl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYgYWN0aW9uLCBj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2FtcGxlKQogewogICAgIGlmIChtX2NhbGxp
bmdMaXN0ZW5lcnMpCiAgICAgICAgIHJldHVybjsKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIFNj
cmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFNhbXBsZVByb2JlKEV4ZWNTdGF0ZSogZXhlYywg
aW50IGlkZW50aWZpZXIsCiAgICAgVmVjdG9yPFNjcmlwdERlYnVnTGlzdGVuZXIqPiBsaXN0ZW5l
cnNDb3B5OwogICAgIGNvcHlUb1ZlY3RvcigqbGlzdGVuZXJzLCBsaXN0ZW5lcnNDb3B5KTsKICAg
ICBmb3IgKGF1dG8gbGlzdGVuZXIgOiBsaXN0ZW5lcnNDb3B5KQotICAgICAgICBsaXN0ZW5lci0+
ZGlkU2FtcGxlUHJvYmUoZXhlYywgaWRlbnRpZmllciwgbV9oaXRDb3VudCwgc2FtcGxlKTsKKyAg
ICAgICAgbGlzdGVuZXItPmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShleGVjLCBhY3Rpb24sIG1faGl0
Q291bnQsIHNhbXBsZSk7CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlk
Q29udGludWUoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmgKaW5kZXggNjJmMjcw
MmFmNDI3MTAxY2ZjNTg0YWZhYTZmZGQwY2MzNDJlNzg2My4uYWEwNmFlMjFiODViMGVmYmYxNTEy
MTBjOWU2NWM4NzhhNTZhNmFjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtOTEsNyArOTEsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBkaXNwYXRjaEZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgTGlzdGVuZXJTZXQm
IGxpc3RlbmVycywgSlNDOjpTb3VyY2VQcm92aWRlciosIGludCBlcnJvckxpbmUsIGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlKTsKICAgICB2b2lkIGRpc3BhdGNoQnJlYWtwb2ludEFjdGlvbkxv
ZyhKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgZGlzcGF0Y2hCcmVh
a3BvaW50QWN0aW9uU291bmQoSlNDOjpFeGVjU3RhdGUqLCBpbnQgYnJlYWtwb2ludEFjdGlvbklk
ZW50aWZpZXIpOwotICAgIHZvaWQgZGlzcGF0Y2hEaWRTYW1wbGVQcm9iZShKU0M6OkV4ZWNTdGF0
ZSosIGludCBwcm9iZUlkZW50aWZpZXIsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBz
YW1wbGUpOworICAgIHZvaWQgZGlzcGF0Y2hCcmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBTY3JpcHRCcmVha3BvaW50QWN0aW9uJiwgY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIHNhbXBsZSk7CiAKICAgICBib29sIG1fZG9uZVByb2Nlc3NpbmdEZWJ1Z2dl
ckV2ZW50czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCBjZTU4YzA4
MjBkZTYxZWNmNDhkODllMzQ5NDdlMjdmOTNiZTkyY2Q1Li40ZDBiYmNkMmZkMzYwYTA3NzlhZDdh
OTU1ODIxOWM0MmE5NDBkNThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApA
QCAtNDYsMTAgKzQ2LDE0IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjb25zdCBjaGFyKiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCA9ICJiYWNrdHJhY2Ui
OwogCi1zdGF0aWMgU3RyaW5nIG9iamVjdEdyb3VwRm9yQnJlYWtwb2ludEFjdGlvbihpbnQgaWRl
bnRpZmllcikKKy8vIE9iamVjdHMgY3JlYXRlZCBhbmQgcmV0YWluZWQgYnkgZXZhbHVhdGluZyBi
cmVha3BvaW50IGFjdGlvbnMgYXJlIHB1dCBpbnRvIG9iamVjdCBncm91cHMKKy8vIGFjY29yZGlu
ZyB0byB0aGUgYnJlYWtwb2ludCBhY3Rpb24gaWRlbnRpZmllciBhc3NpZ25lZCBieSB0aGUgZnJv
bnRlbmQuIEEgYnJlYWtwb2ludCBtYXkKKy8vIGhhdmUgc2V2ZXJhbCBvYmplY3QgZ3JvdXBzLCBh
bmQgb2JqZWN0cyBmcm9tIHNldmVyYWwgYmFja2VuZCBicmVha3BvaW50IGFjdGlvbiBpbnN0YW5j
ZXMgbWF5CisvLyBjcmVhdGUgb2JqZWN0cyBpbiB0aGUgc2FtZSBncm91cC4KK3N0YXRpYyBTdHJp
bmcgb2JqZWN0R3JvdXBGb3JCcmVha3BvaW50QWN0aW9uKGNvbnN0IFNjcmlwdEJyZWFrcG9pbnRB
Y3Rpb24mIGFjdGlvbikKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0
cmluZywgb2JqZWN0R3JvdXAsICgiYnJlYWtwb2ludC1hY3Rpb24tIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKG9iamVjdEdyb3Vw
LCBTdHJpbmc6Om51bWJlcihpZGVudGlmaWVyKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcob2Jq
ZWN0R3JvdXAsIFN0cmluZzo6bnVtYmVyKGFjdGlvbi5pZGVudGlmaWVyKSk7CiB9CiAKIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCkBAIC02MSw3ICs2NSw2IEBAIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKiBpbmplY3RlZFNjCiAgICAgLCBtX2VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2phdmFTY3Jp
cHRQYXVzZVNjaGVkdWxlZChmYWxzZSkKICAgICAsIG1fbmV4dFByb2JlU2FtcGxlSWQoMSkKLSAg
ICAsIG1fbmV4dEJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVyKDEpCiB7CiAgICAgLy8gRklYTUU6
IG1ha2UgYnJlYWtSZWFzb24gb3B0aW9uYWwgc28gdGhhdCB0aGVyZSB3YXMgbm8gbmVlZCB0byBp
bml0IGl0IHdpdGggIm90aGVyIi4KICAgICBjbGVhckJyZWFrRGV0YWlscygpOwpAQCAtMjIyLDE2
ICsyMjUsMjEgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9u
c0Zyb21Qcm90b2NvbChFcnJvclN0cmluZyogZXJyb3JTdHIKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogCisgICAgICAgIC8vIFNwZWNpZnlpbmcgYW4gaWRlbnRpZmllciBp
cyBvcHRpb25hbC4gVGhleSBhcmUgdXNlZCB0byBjb3JyZWxhdGUgcHJvYmUgc2FtcGxlcworICAg
ICAgICAvLyBpbiB0aGUgZnJvbnRlbmQgYWNyb3NzIG11bHRpcGxlIGJhY2tlbmQgcHJvYmUgYWN0
aW9ucyBhbmQgc2VncmVnYXRlIG9iamVjdCBncm91cHMuCisgICAgICAgIGludCBpZGVudGlmaWVy
ID0gMDsKKyAgICAgICAgb2JqZWN0LT5nZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCAmaWRl
bnRpZmllcik7CisKICAgICAgICAgU3RyaW5nIGRhdGE7CiAgICAgICAgIG9iamVjdC0+Z2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiZGF0YSIpLCAmZGF0YSk7CiAKLSAgICAgICAgcmVzdWx0LT5hcHBl
bmQoU2NyaXB0QnJlYWtwb2ludEFjdGlvbih0eXBlLCBtX25leHRCcmVha3BvaW50QWN0aW9uSWRl
bnRpZmllcisrLCBkYXRhKSk7CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKFNjcmlwdEJyZWFrcG9p
bnRBY3Rpb24odHlwZSwgaWRlbnRpZmllciwgZGF0YSkpOwogICAgIH0KIAogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVy
bChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcq
IGNvbnN0IG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdGlvbmFsVVJMUmVnZXgs
IGNvbnN0IGludCogY29uc3Qgb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiBvcHRpb25zLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2Nh
dGlvbj4+JiBsb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbklkZW50aWZp
ZXI+PiYgYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXJzKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5n
KiBjb25zdCBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIGNvbnN0IG9wdGlvbmFsQ29sdW1u
TnVtYmVyLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9ucywgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkZW50
aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKQogewogICAgIGxvY2F0
aW9ucyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwogICAgIGlmICghb3B0aW9uYWxVUkwg
PT0gIW9wdGlvbmFsVVJMUmVnZXgpIHsKQEAgLTI2MiwxMCArMjcwLDYgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBpbnQgbGkKICAgICBpZiAoIWJyZWFrcG9pbnRBY3Rpb25zRnJvbVByb3RvY29sKGVycm9y
U3RyaW5nLCBhY3Rpb25zLCAmYnJlYWtwb2ludEFjdGlvbnMpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBicmVha3BvaW50QWN0aW9uSWRlbnRpZmllcnMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlv
bklkZW50aWZpZXI+OjpjcmVhdGUoKTsKLSAgICBmb3IgKFNjcmlwdEJyZWFrcG9pbnRBY3Rpb24m
IGFjdGlvbiA6IGJyZWFrcG9pbnRBY3Rpb25zKQotICAgICAgICBicmVha3BvaW50QWN0aW9uSWRl
bnRpZmllcnMtPmFkZEl0ZW0oYWN0aW9uLmlkZW50aWZpZXIpOwotCiAgICAgbV9qYXZhU2NyaXB0
QnJlYWtwb2ludHMuc2V0KGJyZWFrcG9pbnRJZGVudGlmaWVyLCBidWlsZE9iamVjdEZvckJyZWFr
cG9pbnRDb29raWUodXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgYWN0
aW9ucywgaXNSZWdleCwgYXV0b0NvbnRpbnVlKSk7CiAKICAgICBTY3JpcHRCcmVha3BvaW50IGJy
ZWFrcG9pbnQobGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIGJyZWFrcG9pbnRB
Y3Rpb25zLCBhdXRvQ29udGludWUpOwpAQCAtMjk2LDcgKzMwMCw3IEBAIHN0YXRpYyBib29sIHBh
cnNlTG9jYXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBJbnNwZWN0b3JPYmplY3QqIGxv
Y2F0aW9uLCBKCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4qIG9wdGlvbnMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpCcmVha3BvaW50
SWQqIG91dEJyZWFrcG9pbnRJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRpb24sIFJlZlB0cjxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJl
YWtwb2ludEFjdGlvbklkZW50aWZpZXI+PiYgYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXJzKQor
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGxvY2F0aW9uLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9ucywgSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkZW50aWZpZXIsIFJlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2Nh
dGlvbikKIHsKICAgICBKU0M6OlNvdXJjZUlEIHNvdXJjZUlEOwogICAgIHVuc2lnbmVkIGxpbmVO
dW1iZXI7CkBAIC0zMTcsMTAgKzMyMSw2IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0CiAgICAg
aWYgKCFicmVha3BvaW50QWN0aW9uc0Zyb21Qcm90b2NvbChlcnJvclN0cmluZywgYWN0aW9ucywg
JmJyZWFrcG9pbnRBY3Rpb25zKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYnJlYWtwb2ludEFj
dGlvbklkZW50aWZpZXJzID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVyPjo6Y3Jl
YXRlKCk7Ci0gICAgZm9yIChTY3JpcHRCcmVha3BvaW50QWN0aW9uJiBhY3Rpb24gOiBicmVha3Bv
aW50QWN0aW9ucykKLSAgICAgICAgYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXJzLT5hZGRJdGVt
KGFjdGlvbi5pZGVudGlmaWVyKTsKLQogICAgIFN0cmluZyBicmVha3BvaW50SWRlbnRpZmllciA9
IFN0cmluZzo6bnVtYmVyKHNvdXJjZUlEKSArICc6JyArIFN0cmluZzo6bnVtYmVyKGxpbmVOdW1i
ZXIpICsgJzonICsgU3RyaW5nOjpudW1iZXIoY29sdW1uTnVtYmVyKTsKICAgICBpZiAobV9icmVh
a3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzLmZpbmQoYnJlYWtwb2lu
dElkZW50aWZpZXIpICE9IG1fYnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtw
b2ludElEcy5lbmQoKSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkJy
ZWFrcG9pbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzLiIpOwpAQCAtMzQ1
LDcgKzM0NSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2lu
dChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgYnJlYWtwCiAgICAgZm9yIChhdXRvIGJyZWFr
cG9pbnRJRCA6IGJyZWFrcG9pbnRJRHMpIHsKICAgICAgICAgY29uc3QgVmVjdG9yPFNjcmlwdEJy
ZWFrcG9pbnRBY3Rpb24+JiBicmVha3BvaW50QWN0aW9ucyA9IHNjcmlwdERlYnVnU2VydmVyKCku
Z2V0QWN0aW9uc0ZvckJyZWFrcG9pbnQoYnJlYWtwb2ludElEKTsKICAgICAgICAgZm9yIChhdXRv
JiBhY3Rpb24gOiBicmVha3BvaW50QWN0aW9ucykKLSAgICAgICAgICAgIG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLT5yZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0R3JvdXBGb3JCcmVha3BvaW50QWN0
aW9uKGFjdGlvbi5pZGVudGlmaWVyKSk7CisgICAgICAgICAgICBtX2luamVjdGVkU2NyaXB0TWFu
YWdlci0+cmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdyb3VwRm9yQnJlYWtwb2ludEFjdGlvbihh
Y3Rpb24pKTsKIAogICAgICAgICBzY3JpcHREZWJ1Z1NlcnZlcigpLnJlbW92ZUJyZWFrcG9pbnQo
YnJlYWtwb2ludElEKTsKICAgICB9CkBAIC02NDksMTQgKzY0OSwxOSBAQCB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSwgY29u
c3QgRGVwcmVjYQogICAgICAgICBtX2xpc3RlbmVyLT5kaWRQYXVzZSgpOwogfQogCi12b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFNhbXBsZVByb2JlKEpTQzo6RXhlY1N0YXRlKiBzY3Jp
cHRTdGF0ZSwgaW50IHByb2JlSWRlbnRpZmllciwgaW50IGhpdENvdW50LCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgc2FtcGxlKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpi
cmVha3BvaW50QWN0aW9uU291bmQoaW50IGJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVyKQorewor
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5wbGF5QnJlYWtwb2ludEFjdGlvblNvdW5kKGJyZWFr
cG9pbnRBY3Rpb25JZGVudGlmaWVyKTsKK30KKwordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBjb25z
dCBTY3JpcHRCcmVha3BvaW50QWN0aW9uJiBhY3Rpb24sIGludCBoaXRDb3VudCwgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNhbXBsZSkKIHsKICAgICBpbnQgc2FtcGxlSWQgPSBtX25l
eHRQcm9iZVNhbXBsZUlkKys7CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0ZSk7
Ci0gICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHBheWxvYWQg
PSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHNhbXBsZSwgb2JqZWN0R3JvdXBGb3JCcmVha3Bv
aW50QWN0aW9uKHByb2JlSWRlbnRpZmllcikpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiBwYXlsb2FkID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChz
YW1wbGUsIG9iamVjdEdyb3VwRm9yQnJlYWtwb2ludEFjdGlvbihhY3Rpb24pKTsKICAgICBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpQcm9iZVNhbXBsZT4gcmVzdWx0ID0gVHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpQcm9iZVNhbXBsZTo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFByb2JlSWQo
cHJvYmVJZGVudGlmaWVyKQorICAgICAgICAuc2V0UHJvYmVJZChhY3Rpb24uaWRlbnRpZmllcikK
ICAgICAgICAgLnNldFNhbXBsZUlkKHNhbXBsZUlkKQogICAgICAgICAuc2V0QmF0Y2hJZChoaXRD
b3VudCkKICAgICAgICAgLnNldFRpbWVzdGFtcChtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KSkKQEAgLTY2NSwxMSArNjcwLDYgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRT
YW1wbGVQcm9iZShKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGludCBwcm8KICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+ZGlkU2FtcGxlUHJvYmUocmVzdWx0LnJlbGVhc2UoKSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvblNvdW5kKGludCBi
cmVha3BvaW50QWN0aW9uSWRlbnRpZmllcikKLXsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
cGxheUJyZWFrcG9pbnRBY3Rpb25Tb3VuZChicmVha3BvaW50QWN0aW9uSWRlbnRpZmllcik7Ci19
Ci0KIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQogewogICAgIG1f
cGF1c2VkU2NyaXB0U3RhdGUgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5o
CmluZGV4IGYxNDUxZTAyMzA3ZWQzNWIxMTM1YjRlNjljZTFjYTFmODI4NmVjN2YuLjI0Y2UxNjZm
MGU4Y2QwNWU0NzkxMTgxOTQwNDQzM2U0MzI0ODVlMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmgKQEAgLTcxLDggKzcxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBlbmFi
bGUoRXJyb3JTdHJpbmcqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJv
clN0cmluZyopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2
ZShFcnJvclN0cmluZyosIGJvb2wgYWN0aXZlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nKiwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3Qg
aW50KiBvcHRpb25hbENvbHVtbk51bWJlciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0Piogb3B0aW9ucywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJy
ZWFrcG9pbnRJZCosIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zLCBSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVyPj4mIGJyZWFrcG9pbnRBY3Rpb25JZGVu
dGlmaWVycykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnQoRXJyb3JT
dHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlv
biwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0aW9ucywgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBhY3R1YWxMb2NhdGlvbiwg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uSWRlbnRpZmllcj4+JiBicmVha3BvaW50QWN0
aW9uSWRlbnRpZmllcnMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50
QnlVcmwoRXJyb3JTdHJpbmcqLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25h
bFVSTCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFs
Q29sdW1uTnVtYmVyLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBv
cHRpb25zLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiwg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBsb2NhdGlvbnMpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiYgbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4qIG9wdGlvbnMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50SWQqLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OkxvY2F0aW9uPiYgYWN0dWFsTG9jYXRpb24pIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWRl
bnRpZmllcikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihF
cnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBsb2NhdGlvbikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9w
dGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6R2Vu
ZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jikgb3ZlcnJpZGU7CkBAIC0xMzMsOSArMTMzLDkgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlE
LCBjb25zdCBTY3JpcHQmKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbGVk
VG9QYXJzZVNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQg
Zmlyc3RMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgb3Zl
cnJpZGUgZmluYWw7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNhbXBsZVByb2JlKEpTQzo6RXhlY1N0
YXRlKiwgaW50IHByb2JlSWRlbnRpZmllciwgaW50IGhpdENvdW50LCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYgc2FtcGxlKSBvdmVycmlkZSBmaW5hbDsKIAogICAgIHZpcnR1YWwgdm9p
ZCBicmVha3BvaW50QWN0aW9uU291bmQoaW50IGJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVyKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgU2NyaXB0QnJlYWtwb2ludEFjdGlvbiYsIGludCBoaXRDb3VudCwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNhbXBsZSkgb3ZlcnJpZGUgZmluYWw7CiAKICAg
ICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4g
cmVzb2x2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWRlbnRpZmllciwgSlND
OjpTb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYpOwogICAgIGJvb2wgYXNzZXJ0UGF1
c2VkKEVycm9yU3RyaW5nKik7CkBAIC0xNjMsNyArMTYzLDYgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fZW5hYmxlZDsKICAgICBib29sIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkOwogICAgIGlu
dCBtX25leHRQcm9iZVNhbXBsZUlkOwotICAgIGludCBtX25leHRCcmVha3BvaW50QWN0aW9uSWRl
bnRpZmllcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9EZWJ1Z2dlci5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9EZWJ1Z2dlci5qc29uCmluZGV4
IDYyYjg1NzAxMTNlYTA2NGFlNGI5MTk1MzJhMWE4YWNkMTQyZTM2MTYuLjNiN2M0YmQ0OTQ3OWRk
ZjFmMmVmNTQ2Nzc4MzJmMTExNTdjZDgxMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRGVidWdnZXIuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RlYnVnZ2VyLmpzb24KQEAgLTM3LDcgKzM3LDgg
QEAKICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAidHlwZSI6ICJzdHJpbmci
LCAiZW51bSI6IFsibG9nIiwgImV2YWx1YXRlIiwgInNvdW5kIiwgInByb2JlIl0sICJkZXNjcmlw
dGlvbiI6ICJEaWZmZXJlbnQga2luZHMgb2YgYnJlYWtwb2ludCBhY3Rpb25zLiIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImRhdGEiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiRGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBicmVha3Bv
aW50IHR5cGUgKGUuZy4gZm9yIHR5cGUgXCJldmFsXCIgdGhpcyBpcyB0aGUgSmF2YVNjcmlwdCBz
dHJpbmcgdG8gZXZhbHVsYXRlKS4iIH0KKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGEi
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiRGF0
YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBicmVha3BvaW50IHR5cGUgKGUuZy4gZm9yIHR5cGUgXCJl
dmFsXCIgdGhpcyBpcyB0aGUgSmF2YVNjcmlwdCBzdHJpbmcgdG8gZXZhbHVsYXRlKS4iIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICIkcmVmIjogIkJyZWFrcG9pbnRBY3Rpb25J
ZGVudGlmaWVyIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkEgZnJvbnRlbmQt
YXNzaWduZWQgaWRlbnRpZmllciBmb3IgdGhpcyBicmVha3BvaW50IGFjdGlvbi4iIH0KICAgICAg
ICAgICAgIF0sCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQWN0aW9uIHRvIHBlcmZvcm0g
d2hlbiBhIGJyZWFrcG9pbnQgaXMgdHJpZ2dlcmVkLiIKICAgICAgICAgfSwKQEAgLTEyNCw4ICsx
MjUsNyBAQAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJyZXR1cm5zIjogWwogICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiYnJlYWtwb2ludElkIiwgIiRyZWYiOiAiQnJlYWtwb2ludElk
IiwgImRlc2NyaXB0aW9uIjogIklkIG9mIHRoZSBjcmVhdGVkIGJyZWFrcG9pbnQgZm9yIGZ1cnRo
ZXIgcmVmZXJlbmNlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImxvY2F0aW9ucyIs
ICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJMb2NhdGlvbiJ9LCAiZGVzY3Jp
cHRpb24iOiAiTGlzdCBvZiB0aGUgbG9jYXRpb25zIHRoaXMgYnJlYWtwb2ludCByZXNvbHZlZCBp
bnRvIHVwb24gYWRkaXRpb24uIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYnJlYWtw
b2ludEFjdGlvbklkZW50aWZpZXJzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVm
IjogIkJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVyIiB9LCAiZGVzY3JpcHRpb24iOiAiQXNzaWdu
ZWQgYnJlYWtwb2ludCBhY3Rpb24gaWRlbnRpZmllcnMuIiB9CisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJsb2NhdGlvbnMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAi
TG9jYXRpb24ifSwgImRlc2NyaXB0aW9uIjogIkxpc3Qgb2YgdGhlIGxvY2F0aW9ucyB0aGlzIGJy
ZWFrcG9pbnQgcmVzb2x2ZWQgaW50byB1cG9uIGFkZGl0aW9uLiIgfQogICAgICAgICAgICAgXSwK
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTZXRzIEphdmFTY3JpcHQgYnJlYWtwb2ludCBh
dCBnaXZlbiBsb2NhdGlvbiBzcGVjaWZpZWQgZWl0aGVyIGJ5IFVSTCBvciBVUkwgcmVnZXguIE9u
Y2UgdGhpcyBjb21tYW5kIGlzIGlzc3VlZCwgYWxsIGV4aXN0aW5nIHBhcnNlZCBzY3JpcHRzIHdp
bGwgaGF2ZSBicmVha3BvaW50cyByZXNvbHZlZCBhbmQgcmV0dXJuZWQgaW4gPGNvZGU+bG9jYXRp
b25zPC9jb2RlPiBwcm9wZXJ0eS4gRnVydGhlciBtYXRjaGluZyBzY3JpcHQgcGFyc2luZyB3aWxs
IHJlc3VsdCBpbiBzdWJzZXF1ZW50IDxjb2RlPmJyZWFrcG9pbnRSZXNvbHZlZDwvY29kZT4gZXZl
bnRzIGlzc3VlZC4gVGhpcyBsb2dpY2FsIGJyZWFrcG9pbnQgd2lsbCBzdXJ2aXZlIHBhZ2UgcmVs
b2Fkcy4iCiAgICAgICAgIH0sCkBAIC0xMzcsOCArMTM3LDcgQEAKICAgICAgICAgICAgIF0sCiAg
ICAgICAgICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJyZWFr
cG9pbnRJZCIsICIkcmVmIjogIkJyZWFrcG9pbnRJZCIsICJkZXNjcmlwdGlvbiI6ICJJZCBvZiB0
aGUgY3JlYXRlZCBicmVha3BvaW50IGZvciBmdXJ0aGVyIHJlZmVyZW5jZS4iIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJhY3R1YWxMb2NhdGlvbiIsICIkcmVmIjogIkxvY2F0aW9uIiwg
ImRlc2NyaXB0aW9uIjogIkxvY2F0aW9uIHRoaXMgYnJlYWtwb2ludCByZXNvbHZlZCBpbnRvLiIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVy
cyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJCcmVha3BvaW50QWN0aW9u
SWRlbnRpZmllciIgfSwgImRlc2NyaXB0aW9uIjogIkFzc2lnbmVkIGJyZWFrcG9pbnQgYWN0aW9u
IGlkZW50aWZpZXJzLiIgfQorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWN0dWFsTG9jYXRp
b24iLCAiJHJlZiI6ICJMb2NhdGlvbiIsICJkZXNjcmlwdGlvbiI6ICJMb2NhdGlvbiB0aGlzIGJy
ZWFrcG9pbnQgcmVzb2x2ZWQgaW50by4iIH0KICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiU2V0cyBKYXZhU2NyaXB0IGJyZWFrcG9pbnQgYXQgYSBnaXZlbiBsb2Nh
dGlvbi4iCiAgICAgICAgIH0sCkBAIC0yOTUsNyArMjk0LDcgQEAKICAgICAgICAgfSwKICAgICAg
ICAgewogICAgICAgICAgICAgIm5hbWUiOiAiZGlkU2FtcGxlUHJvYmUiLAotICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkZpcmVzIHdoZW4gYSBuZXcgcHJvYmVuIHNhbXBsZSBpcyBjb2xsZWN0
ZWQuIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGaXJlcyB3aGVuIGEgbmV3IHByb2Jl
IHNhbXBsZSBpcyBjb2xsZWN0ZWQuIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic2FtcGxlIiwgIiRyZWYiOiAiUHJvYmVTYW1wbGUiLCAi
ZGVzY3JpcHRpb24iOiAiQSBjb2xsZWN0ZWQgcHJvYmUgc2FtcGxlLiIgfQogICAgICAgICAgICAg
XQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQnJlYWtw
b2ludC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0JyZWFrcG9pbnQu
anMKaW5kZXggMjkwNzNkOTExZGRlM2E1NGIzODAzMjFiNTNjMDg2MWU3OGE2ZDYwYi4uYzNjZmRm
ZGY5NGE5MWRiZTI5NDFhMTMxY2UwMGIwNTY4MzVhMjQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQnJlYWtwb2ludC5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CcmVha3BvaW50LmpzCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDMsNiArMjAzLDEzIEBA
IFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgfTsKICAgICB9
LAogCisgICAgZ2V0IHByb2JlQWN0aW9ucygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
YWN0aW9ucy5maWx0ZXIoZnVuY3Rpb24oYWN0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gYWN0
aW9uLnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50QWN0aW9uLlR5cGUuUHJvYmU7Cisg
ICAgICAgIH0pOworICAgIH0sCisKICAgICBjeWNsZVRvTmV4dE1vZGU6IGZ1bmN0aW9uKCkKICAg
ICB7CiAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CkBAIC0yODEsOSArMjg4LDkgQEAgV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAot
ICAgIGNyZWF0ZUFjdGlvbjogZnVuY3Rpb24odHlwZSwgcHJlY2VkaW5nQWN0aW9uKQorICAgIGNy
ZWF0ZUFjdGlvbjogZnVuY3Rpb24odHlwZSwgcHJlY2VkaW5nQWN0aW9uLCBkYXRhKQogICAgIHsK
LSAgICAgICAgdmFyIG5ld0FjdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEFjdGlv
bih0aGlzLCB0eXBlLCBudWxsKTsKKyAgICAgICAgdmFyIG5ld0FjdGlvbiA9IG5ldyBXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludEFjdGlvbih0aGlzLCB0eXBlLCBkYXRhIHx8IG51bGwpOwogCiAgICAg
ICAgIGlmICghcHJlY2VkaW5nQWN0aW9uKQogICAgICAgICAgICAgdGhpcy5fYWN0aW9ucy5wdXNo
KG5ld0FjdGlvbik7CkBAIC0zMzIsNiArMzM5LDE2IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnQuRXZlbnQuQWN0aW9uc0RpZENoYW5nZSk7CiAgICAgfSwKIAor
ICAgIGNsZWFyQWN0aW9uczogZnVuY3Rpb24odHlwZSkKKyAgICB7CisgICAgICAgIGlmICghdHlw
ZSkKKyAgICAgICAgICAgIHRoaXMuX2FjdGlvbnMgPSBbXTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgdGhpcy5fYWN0aW9ucyA9IHRoaXMuX2FjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGFjdGlv
bikgeyBhY3Rpb24udHlwZSAhPSB0eXBlOyB9KTsKKworICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5BY3Rpb25zRGlkQ2hh
bmdlKTsKKyAgICB9LAorCiAgICAgc2F2ZUlkZW50aXR5VG9Db29raWU6IGZ1bmN0aW9uKGNvb2tp
ZSkKICAgICB7CiAgICAgICAgIGNvb2tpZVtXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5VUkxDb29r
aWVLZXldID0gdGhpcy51cmw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9CcmVha3BvaW50QWN0aW9uLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQnJlYWtwb2ludEFjdGlvbi5qcwppbmRleCBiOWZmMWIyMzI2YTNiMzY1MTAz
MDM5YTg3NWU0MzU3MDdlZmVkNzc2Li5hNGU1NzcxYTE5MDRjZGI2YjJiMGViMTBjMzhmY2FlYmVi
ZWQ2YjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9C
cmVha3BvaW50QWN0aW9uLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0JyZWFrcG9pbnRBY3Rpb24uanMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDYgKzQyLDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRBY3Rpb24gPSBmdW5jdGlvbihicmVha3BvaW50LCB0eXBlT3JJbmZvLCBkYXRhKQogICAg
ICAgICBjb25zb2xlLmVycm9yKCJVbmV4cGVjdGVkIHR5cGUgcGFzc2VkIHRvIFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50QWN0aW9uIik7CiAKICAgICBjb25zb2xlLmFzc2VydCh0eXBlb2YgdGhpcy5f
dHlwZSA9PT0gInN0cmluZyIpOworICAgIHRoaXMuX2lkID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TWFuYWdlci5uZXh0QnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXI7CiB9OwogCiBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludEFjdGlvbi5UeXBlID0gewpAQCAtNTMsNiArNTQsNyBAQCBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludEFjdGlvbi5UeXBlID0gewogCiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEFj
dGlvbi5wcm90b3R5cGUgPSB7CiAgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50QWN0aW9uLAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUs
CiAKICAgICAvLyBQdWJsaWMKIApAQCAtNjEsNiArNjMsMTEgQEAgV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRBY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2lu
dDsKICAgICB9LAogCisgICAgZ2V0IGlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9p
ZDsKKyAgICB9LAorCiAgICAgZ2V0IHR5cGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMu
X3R5cGU7CkBAIC04MywxMSArOTAsOSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEFjdGlvbi5w
cm90b3R5cGUgPSB7CiAKICAgICBnZXQgaW5mbygpCiAgICAgewotICAgICAgICB2YXIgb2JqID0g
e3R5cGU6IHRoaXMuX3R5cGV9OworICAgICAgICB2YXIgb2JqID0ge3R5cGU6IHRoaXMuX3R5cGUs
IGlkOiB0aGlzLl9pZH07CiAgICAgICAgIGlmICh0aGlzLl9kYXRhKQogICAgICAgICAgICAgb2Jq
LmRhdGEgPSB0aGlzLl9kYXRhOwogICAgICAgICByZXR1cm4gb2JqOwogICAgIH0KIH07Ci0KLVdl
Ykluc3BlY3Rvci5CcmVha3BvaW50QWN0aW9uLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0RlYnVnZ2VyTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0RlYnVnZ2VyTWFuYWdlci5qcwppbmRleCA1MWQyYzkyNDM0ZDY0YjIz
NWMwYTNiMDllYjM0MTVkYTA2NDc3OWMwLi4yY2ZhNDdjNzIwNjliYTRjMzU3NDIwODI1ODI3NDgy
NWVkMmU4M2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9EZWJ1Z2dlck1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvRGVidWdnZXJNYW5hZ2VyLmpzCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw2ICs1Myw4IEBAIFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1hbmFnZXIgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5fYnJlYWtwb2ludFNjcmlwdElkZW50
aWZpZXJNYXAgPSB7fTsKICAgICB0aGlzLl9icmVha3BvaW50SWRNYXAgPSB7fTsKIAorICAgIHRo
aXMuX25leHRCcmVha3BvaW50QWN0aW9uSWRlbnRpZmllciA9IDE7CisKICAgICB0aGlzLl9zY3Jp
cHRJZE1hcCA9IHt9OwogICAgIHRoaXMuX3NjcmlwdFVSTE1hcCA9IHt9OwogCkBAIC02NCwxMSAr
NjYsMTQgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlciA9IGZ1bmN0aW9uKCkKIAogICAg
IHRoaXMuX3VwZGF0ZUJyZWFrT25FeGNlcHRpb25zU3RhdGUoKTsKIAotICAgIHZhciBzYXZlZEJy
ZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHNTZXR0aW5nLnZhbHVlOwotICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2F2ZWRCcmVha3BvaW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludChzYXZlZEJyZWFrcG9pbnRz
W2ldKTsKLSAgICAgICAgdGhpcy5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQsIHRydWUpOworICAg
IGZ1bmN0aW9uIHJlc3RvcmVCcmVha3BvaW50c1Nvb24oKSB7CisgICAgICAgIGZvciAoY29va2ll
IG9mIHRoaXMuX2JyZWFrcG9pbnRzU2V0dGluZy52YWx1ZSkKKyAgICAgICAgICAgIHRoaXMuYWRk
QnJlYWtwb2ludChuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQoY29va2llKSk7CiAgICAgfQor
CisgICAgLy8gRW5zdXJlIHRoYXQgYWxsIG1hbmFnZXJzIGxlYXJuIGFib3V0IHJlc3RvcmVkIGJy
ZWFrcG9pbnRzLAorICAgIC8vIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgaW5pdGlhbGl6YXRpb24gb3Jk
ZXIuCisgICAgc2V0VGltZW91dChyZXN0b3JlQnJlYWtwb2ludHNTb29uLmJpbmQodGhpcyksIDAp
OwogfTsKIAogV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudCA9IHsKQEAgLTIyMSw3
ICsyMjYsNyBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAog
ICAgIGFkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIHNraXBFdmVudERpc3BhdGNo
KQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoYnJlYWtwb2ludCk7CisgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dCwgIkJhZCBhcmd1bWVudCB0byBEZWJ1Z2dlck1hbmdlci5hZGRCcmVha3BvaW50OiAiLCBicmVh
a3BvaW50KTsKICAgICAgICAgaWYgKCFicmVha3BvaW50KQogICAgICAgICAgICAgcmV0dXJuOwog
CkBAIC0yNjAsNyArMjY1LDcgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5
cGUgPSB7CiAKICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMucmVtb3ZlKGJyZWFrcG9pbnQpOwog
Ci0gICAgICAgIGlmIChicmVha3BvaW50LmlkKQorICAgICAgICBpZiAoYnJlYWtwb2ludC5pZGVu
dGlmaWVyKQogICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50KTsK
IAogICAgICAgICBpZiAoYnJlYWtwb2ludC51cmwpIHsKQEAgLTI4MSw2ICsyODYsMTAgQEAgV2Vi
SW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAorICAgICAgICAvLyBEaXNhYmxlIHRoZSBicmVha3BvaW50IGZpcnN0LCBzbyBy
ZW1vdmluZyBhY3Rpb25zIGRvZXNuJ3QgcmUtYWRkIHRoZSBicmVha3BvaW50LgorICAgICAgICBi
cmVha3BvaW50LmRpc2FibGVkID0gdHJ1ZTsKKyAgICAgICAgYnJlYWtwb2ludC5jbGVhckFjdGlv
bnMoKTsKKwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0
b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkJyZWFrcG9pbnRSZW1vdmVkLCB7YnJlYWtwb2ludDog
YnJlYWtwb2ludH0pOwogICAgIH0sCiAKQEAgLTQzMSw2ICs0NDAsMTEgQEAgV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLmlzQnJl
YWtwb2ludFJlbW92YWJsZShicmVha3BvaW50KTsKICAgICB9LAogCisgICAgZ2V0IG5leHRCcmVh
a3BvaW50QWN0aW9uSWRlbnRpZmllcigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbmV4
dEJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVyKys7CisgICAgfSwKKwogICAgIC8vIFByaXZhdGUK
IAogICAgIF9zb3VyY2VDb2RlTG9jYXRpb25Gcm9tUGF5bG9hZDogZnVuY3Rpb24ocGF5bG9hZCkK
QEAgLTQ4Nyw2ICs1MDEsOCBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIHJldHVybiBEZWJ1Z2dlckFnZW50LkJyZWFrcG9pbnRBY3Rpb25U
eXBlLkV2YWx1YXRlOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5CcmVha3BvaW50QWN0aW9u
LlR5cGUuU291bmQ6CiAgICAgICAgICAgICByZXR1cm4gRGVidWdnZXJBZ2VudC5CcmVha3BvaW50
QWN0aW9uVHlwZS5Tb3VuZDsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEFj
dGlvbi5UeXBlLlByb2JlOgorICAgICAgICAgICAgcmV0dXJuIERlYnVnZ2VyQWdlbnQuQnJlYWtw
b2ludEFjdGlvblR5cGUuUHJvYmU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBjb25z
b2xlLmFzc2VydChmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm4gRGVidWdnZXJBZ2VudC5CcmVh
a3BvaW50QWN0aW9uVHlwZS5Mb2c7CkBAIC00OTUsMTAgKzUxMSwxMCBAQCBXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgIF9zZXRCcmVha3BvaW50OiBmdW5j
dGlvbihicmVha3BvaW50LCBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0
KCFicmVha3BvaW50LmlkKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoIWJyZWFrcG9pbnQuaWRl
bnRpZmllcik7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFicmVha3BvaW50LmRpc2FibGVkKTsK
IAotICAgICAgICBpZiAoYnJlYWtwb2ludC5pZCB8fCBicmVha3BvaW50LmRpc2FibGVkKQorICAg
ICAgICBpZiAoYnJlYWtwb2ludC5pZGVudGlmaWVyIHx8IGJyZWFrcG9pbnQuZGlzYWJsZWQpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgZnVuY3Rpb24gZGlkU2V0QnJlYWtwb2ludChl
cnJvciwgYnJlYWtwb2ludElkZW50aWZpZXIpCkBAIC01MDgsNyArNTI0LDcgQEAgV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIHRoaXMuX2Jy
ZWFrcG9pbnRJZE1hcFticmVha3BvaW50SWRlbnRpZmllcl0gPSBicmVha3BvaW50OwogCi0gICAg
ICAgICAgICBicmVha3BvaW50LmlkID0gYnJlYWtwb2ludElkZW50aWZpZXI7CisgICAgICAgICAg
ICBicmVha3BvaW50LmlkZW50aWZpZXIgPSBicmVha3BvaW50SWRlbnRpZmllcjsKICAgICAgICAg
ICAgIGJyZWFrcG9pbnQucmVzb2x2ZWQgPSB0cnVlOwogCiAgICAgICAgICAgICBpZiAodHlwZW9m
IGNhbGxiYWNrID09PSAiZnVuY3Rpb24iKQpAQCAtNTUyLDkgKzU2OCw3IEBAIFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgX3JlbW92ZUJyZWFrcG9pbnQ6
IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgY29uc29sZS5h
c3NlcnQoYnJlYWtwb2ludC5pZCk7Ci0KLSAgICAgICAgaWYgKCFicmVha3BvaW50LmlkKQorICAg
ICAgICBpZiAoIWJyZWFrcG9pbnQuaWRlbnRpZmllcikKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBmdW5jdGlvbiBkaWRSZW1vdmVCcmVha3BvaW50KGVycm9yKQpAQCAtNTYyLDkgKzU3
Niw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgaWYgKGVycm9yKQogICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwog
Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludElkTWFwW2JyZWFrcG9pbnQuaWRd
OworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRJZE1hcFticmVha3BvaW50Lmlk
ZW50aWZpZXJdOwogCi0gICAgICAgICAgICBicmVha3BvaW50LmlkID0gbnVsbDsKKyAgICAgICAg
ICAgIGJyZWFrcG9pbnQuaWRlbnRpZmllciA9IG51bGw7CiAKICAgICAgICAgICAgIC8vIERvbid0
IHJlc2V0IHJlc29sdmVkIGhlcmUgc2luY2Ugd2Ugd2FudCB0byBrZWVwIGRpc2FibGVkIGJyZWFr
cG9pbnRzIGxvb2tpbmcgbGlrZSB0aGV5CiAgICAgICAgICAgICAvLyBhcmUgcmVzb2x2ZWQgaW4g
dGhlIHVzZXIgaW50ZXJmYWNlLiBUaGV5IHdpbGwgZ2V0IG1hcmtlZCBhcyB1bnJlc29sdmVkIGlu
IHJlc2V0LgpAQCAtNTczLDcgKzU4Nyw3IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBEZWJ1Z2dlckFnZW50LnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5pZCwgZGlk
UmVtb3ZlQnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKKyAgICAgICAgRGVidWdnZXJBZ2VudC5yZW1v
dmVCcmVha3BvaW50KGJyZWFrcG9pbnQuaWRlbnRpZmllciwgZGlkUmVtb3ZlQnJlYWtwb2ludC5i
aW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgX2JyZWFrcG9pbnREaXNwbGF5TG9jYXRpb25EaWRD
aGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtNTgyLDcgKzU5Niw3IEBAIFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OwotICAgICAgICBpZiAoIWJyZWFrcG9p
bnQuaWQgfHwgYnJlYWtwb2ludC5kaXNhYmxlZCkKKyAgICAgICAgaWYgKCFicmVha3BvaW50Lmlk
ZW50aWZpZXIgfHwgYnJlYWtwb2ludC5kaXNhYmxlZCkKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICAvLyBSZW1vdmUgdGhlIGJyZWFrcG9pbnQgd2l0aCBpdHMgb2xkIGlkLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRGVidWdnZXJPYnNlcnZl
ci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0RlYnVnZ2VyT2JzZXJ2
ZXIuanMKaW5kZXggMmRmNDJhNWJjYTZmODBhZWRhOTRjNzdhZDBjZjQ2NjA1M2Y0NjQ3MC4uMGIy
MWExM2IzOTY2NDVmNWExZmVlY2I3YjZhZDI3NzI5YTRhM2MwZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRGVidWdnZXJPYnNlcnZlci5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9EZWJ1Z2dlck9ic2VydmVyLmpzCkBA
IC02Nyw2ICs2NywxMSBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJPYnNlcnZlci5wcm90b3R5cGUg
PSB7CiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnBsYXlCcmVh
a3BvaW50QWN0aW9uU291bmQoYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIpOwogICAgIH0sCisK
KyAgICBkaWRTYW1wbGVQcm9iZTogZnVuY3Rpb24oc2FtcGxlKQorICAgIHsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLnByb2JlTWFuYWdlci5kaWRTYW1wbGVQcm9iZShzYW1wbGUpOworICAgIH0KIH07
CiAKIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0luc3BlY3RvckpTQmFja2VuZENvbW1hbmRzLmpzIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW5zcGVjdG9ySlNCYWNrZW5kQ29tbWFu
ZHMuanMKaW5kZXggMjM0YmQ2OTk5ZGRhNmY4MmRiMWFmNThmNjJhNDVlODA4NzJlMWU4Ni4uOTQ3
ZTgxZTI3MWYyMTllMDJmNTk1OTA5ZTNmODNjYWUzNWQyY2QyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW5zcGVjdG9ySlNCYWNrZW5kQ29tbWFuZHMu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW5zcGVjdG9ySlNC
YWNrZW5kQ29tbWFuZHMuanMKQEAgLTIxLDggKzIxLDggQEAgSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckV2ZW50KCJEZWJ1Z2dlci5wbGF5QnJlYWtwb2ludEFjdGlvblNvdW5kIiwgWyJicmVha3Bv
aW4KIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEZWJ1Z2dlci5lbmFibGUiLCBb
XSwgW10pOwogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRlYnVnZ2VyLmRpc2Fi
bGUiLCBbXSwgW10pOwogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRlYnVnZ2Vy
LnNldEJyZWFrcG9pbnRzQWN0aXZlIiwgW3sibmFtZSI6ICJhY3RpdmUiLCAidHlwZSI6ICJib29s
ZWFuIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckNvbW1hbmQoIkRlYnVnZ2VyLnNldEJyZWFrcG9pbnRCeVVybCIsIFt7Im5hbWUiOiAibGluZU51
bWJlciIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInVy
bCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidXJsUmVn
ZXgiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImNvbHVt
bk51bWJlciIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAi
b3B0aW9ucyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJicmVha3Bv
aW50SWQiLCAibG9jYXRpb25zIiwgImJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVycyJdKTsKLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEZWJ1Z2dlci5zZXRCcmVha3BvaW50Iiwg
W3sibmFtZSI6ICJsb2NhdGlvbiIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IGZhbHNl
fSwgeyJuYW1lIjogIm9wdGlvbnMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVl
fV0sIFsiYnJlYWtwb2ludElkIiwgImFjdHVhbExvY2F0aW9uIiwgImJyZWFrcG9pbnRBY3Rpb25J
ZGVudGlmaWVycyJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEZWJ1Z2dl
ci5zZXRCcmVha3BvaW50QnlVcmwiLCBbeyJuYW1lIjogImxpbmVOdW1iZXIiLCAidHlwZSI6ICJu
dW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJp
bmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInVybFJlZ2V4IiwgInR5cGUiOiAic3Ry
aW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJjb2x1bW5OdW1iZXIiLCAidHlwZSI6
ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogIm9wdGlvbnMiLCAidHlwZSI6
ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfV0sIFsiYnJlYWtwb2ludElkIiwgImxvY2F0aW9u
cyJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEZWJ1Z2dlci5zZXRCcmVh
a3BvaW50IiwgW3sibmFtZSI6ICJsb2NhdGlvbiIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25h
bCI6IGZhbHNlfSwgeyJuYW1lIjogIm9wdGlvbnMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9u
YWwiOiB0cnVlfV0sIFsiYnJlYWtwb2ludElkIiwgImFjdHVhbExvY2F0aW9uIl0pOwogSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRlYnVnZ2VyLnJlbW92ZUJyZWFrcG9pbnQiLCBb
eyJuYW1lIjogImJyZWFrcG9pbnRJZCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZh
bHNlfV0sIFtdKTsKIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEZWJ1Z2dlci5j
b250aW51ZVRvTG9jYXRpb24iLCBbeyJuYW1lIjogImxvY2F0aW9uIiwgInR5cGUiOiAib2JqZWN0
IiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgW10pOwogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIkRlYnVnZ2VyLnN0ZXBPdmVyIiwgW10sIFtdKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAppbmRleCAyZTlkN2MwNjc3YWZjMDYzMTMwODE0
M2I1YWE0NjVkYmE5NDU4ZWM0Li43MmQ4ZDk4NzRkNzAzYmQ4NzcxZWQ3NDcxNDYyZWU0N2I4N2Q5
NDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWlu
Lmh0bWwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1s
CkBAIC0zOTAsNiArMzkwLDExIEBACiAgICAgPHNjcmlwdCBzcmM9IkJyZWFrcG9pbnRBY3Rpb25W
aWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQnJlYWtwb2ludC5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9IkRlYnVnZ2VyTWFuYWdlci5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IlByb2JlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
IlByb2JlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHJvYmVTZXQuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJQcm9iZVNldERhdGFGcmFtZS5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IlByb2JlU2V0RGF0YVRhYmxlLmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHNyYz0iU291cmNlTWFwTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9
IlNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlNvdXJjZU1hcC5qcyI+PC9z
Y3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9N
YWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5qcwppbmRl
eCA2NTA5YTNkY2M1MDJhODBhYzZjOGFlZWU2ZGE5NmM0OGY0OGQxZDdkLi42YTg1MDNiNDliYjA5
ZGZkZWE4MGNmYjMxYjY4YTY5NmVlYzJjZGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9NYWluLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01haW4uanMKQEAgLTExNCw2ICsxMTQsNyBAQCBXZWJJbnNwZWN0b3IubG9h
ZGVkID0gZnVuY3Rpb24oKQogICAgIHRoaXMuc291cmNlTWFwTWFuYWdlciA9IG5ldyBXZWJJbnNw
ZWN0b3IuU291cmNlTWFwTWFuYWdlcjsKICAgICB0aGlzLmxheWVyVHJlZU1hbmFnZXIgPSBuZXcg
V2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXI7CiAgICAgdGhpcy5kYXNoYm9hcmRNYW5hZ2Vy
ID0gbmV3IFdlYkluc3BlY3Rvci5EYXNoYm9hcmRNYW5hZ2VyOworICAgIHRoaXMucHJvYmVNYW5h
Z2VyID0gbmV3IFdlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXI7CiAKICAgICAvLyBFbmFibGUgdGhl
IENvbnNvbGUgQWdlbnQgYWZ0ZXIgY3JlYXRpbmcgdGhlIHNpbmdsZXRvbiBtYW5hZ2Vycy4KICAg
ICBpZiAod2luZG93LkNvbnNvbGVBZ2VudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1Byb2JlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvUHJvYmUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjdiMDliMDY4OTk3M2I1M2Q0MDcxYWEyODIz
MWIzNTAxOGEzMjMyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1Byb2JlLmpzCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
CisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlByb2JlU2FtcGxlID0gZnVuY3Rpb24o
c2FtcGxlSWQsIGJhdGNoSWQsIHRpbWVzdGFtcCwgcGF5bG9hZCkKK3sKKyAgICB0aGlzLnNhbXBs
ZUlkID0gc2FtcGxlSWQ7CisgICAgdGhpcy5iYXRjaElkID0gYmF0Y2hJZDsKKyAgICB0aGlzLnRp
bWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICB0aGlzLm9iamVjdCA9IFdlYkluc3BlY3Rvci5SZW1v
dGVPYmplY3QuZnJvbVBheWxvYWQocGF5bG9hZCk7Cit9OworCitXZWJJbnNwZWN0b3IuUHJvYmUg
PSBmdW5jdGlvbihpZCwgYnJlYWtwb2ludCwgZXhwcmVzc2lvbikKK3sKKyAgICBXZWJJbnNwZWN0
b3IuT2JqZWN0LmNhbGwodGhpcyk7CisKKyAgICBjb25zb2xlLmFzc2VydChpZCk7CisgICAgY29u
c29sZS5hc3NlcnQoYnJlYWtwb2ludCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5CcmVha3BvaW50
KTsKKworICAgIHRoaXMuX2lkID0gaWQ7CisgICAgdGhpcy5fYnJlYWtwb2ludCA9IGJyZWFrcG9p
bnQ7CisgICAgdGhpcy5fZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247CisgICAgdGhpcy5fc2FtcGxl
cyA9IFtdOworfTsKKworV2ViSW5zcGVjdG9yLk9iamVjdC5hZGRDb25zdHJ1Y3RvckZ1bmN0aW9u
cyhXZWJJbnNwZWN0b3IuUHJvYmUpOworCitXZWJJbnNwZWN0b3IuUHJvYmUuRXZlbnQgPSB7Cisg
ICAgRXhwcmVzc2lvbkNoYW5nZWQ6ICJwcm9iZS1vYmplY3QtZXhwcmVzc2lvbi1jaGFuZ2VkIiwK
KyAgICBTYW1wbGVBZGRlZDogInByb2JlLW9iamVjdC1zYW1wbGUtYWRkZWQiLAorICAgIFNhbXBs
ZXNDbGVhcmVkOiAicHJvYmUtb2JqZWN0LXNhbXBsZXMtY2xlYXJlZCIKK307CisKK1dlYkluc3Bl
Y3Rvci5Qcm9iZS5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Q
cm9iZSwKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisg
ICAgLy8gUHVibGljCisKKyAgICBnZXQgaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2lkOworICAgIH0sCisKKyAgICBnZXQgYnJlYWtwb2ludCgpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fYnJlYWtwb2ludDsKKyAgICB9LAorCisgICAgZ2V0IGV4cHJlc3Npb24oKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2V4cHJlc3Npb247CisgICAgfSwKKworICAgIHNldCBl
eHByZXNzaW9uKHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb24gPT09
IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBkYXRhID0ge29sZFZh
bHVlOiB0aGlzLl9leHByZXNzaW9uLCBuZXdWYWx1ZTogdmFsdWV9OworICAgICAgICB0aGlzLl9l
eHByZXNzaW9uID0gdmFsdWU7CisgICAgICAgIHRoaXMuY2xlYXJTYW1wbGVzKCk7CisgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Qcm9iZS5FdmVudC5F
eHByZXNzaW9uQ2hhbmdlZCwgZGF0YSk7CisgICAgfSwKKworICAgIGdldCBzYW1wbGVzKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zYW1wbGVzLnNsaWNlKCk7CisgICAgfSwKKworICAg
IGNsZWFyU2FtcGxlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fc2FtcGxlcyA9
IFtdOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
UHJvYmUuRXZlbnQuU2FtcGxlc0NsZWFyZWQpOworICAgIH0sCisKKyAgICBhZGRTYW1wbGU6IGZ1
bmN0aW9uKHNhbXBsZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNhbXBsZSBpbnN0
YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9iZVNhbXBsZSwgIldyb25nIG9iamVjdCB0eXBlIHBhc3Nl
ZCBhcyBwcm9iZSBzYW1wbGU6ICIsIHNhbXBsZSk7CisgICAgICAgIHRoaXMuX3NhbXBsZXMucHVz
aChzYW1wbGUpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNw
ZWN0b3IuUHJvYmUuRXZlbnQuU2FtcGxlQWRkZWQsIHNhbXBsZSk7CisgICAgfQorfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb2JlTWFuYWdlci5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb2JlTWFuYWdlci5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jM2M1N2Y5NWYzZWFkOTEwOTczZDMwNDA4ZDk1OGQ4ZWJiNTFlZjk1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvYmVN
YW5hZ2VyLmpzCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlciA9IGZ1bmN0aW9uKCkKK3sKKyAgICBX
ZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisKKyAgICAvLyBVc2VkIHRvIGRldGVjdCBk
ZWxldGVkIHByb2JlIGFjdGlvbnMuCisgICAgdGhpcy5fa25vd25Qcm9iZUlkZW50aWZpZXJzRm9y
QnJlYWtwb2ludCA9IG5ldyBNYXA7CisKKyAgICAvLyBNYWluIGxvb2t1cCB0YWJsZXMgZm9yIHBy
b2JlcyBhbmQgcHJvYmUgc2V0cy4KKyAgICB0aGlzLl9wcm9iZXNCeUlkZW50aWZpZXIgPSBuZXcg
TWFwOworICAgIHRoaXMuX3Byb2JlU2V0c0J5QnJlYWtwb2ludCA9IG5ldyBNYXA7CisKKyAgICBX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTWFuYWdlci5FdmVudC5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRB
ZGRlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQnJlYWtwb2ludFJlbW92
ZWQsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkFj
dGlvbnNEaWRDaGFuZ2UsIHRoaXMuX2JyZWFrcG9pbnRBY3Rpb25zQ2hhbmdlZCwgdGhpcyk7CisK
KyAgICAvLyBTYXZlZCBicmVha3BvaW50cyBzaG91bGQgbm90IGJlIHJlc3RvcmVkIG9uIHRoZSBm
aXJzdCBldmVudCBsb29wIHR1cm4sIGJlY2F1c2UgaXQKKyAgICAvLyBtYWtlcyBtYW5hZ2VyIGlu
aXRpYWxpemF0aW9uIG9yZGVyIHZlcnkgZnJhZ2lsZS4gTm8gYnJlYWtwb2ludHMgc2hvdWxkIGJl
IGF2YWlsYWJsZS4KKyAgICBjb25zb2xlLmFzc2VydCghV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFu
YWdlci5icmVha3BvaW50cy5sZW5ndGgsICJObyBicmVha3BvaW50cyBzaG91bGQgZXhpc3QgYmVm
b3JlIGFsbCB0aGUgbWFuYWdlcnMgYXJlIGNvbnN0cnVjdGVkLiIpOworfQorCitXZWJJbnNwZWN0
b3IuUHJvYmVNYW5hZ2VyLkV2ZW50ID0geworICAgIFByb2JlU2V0QWRkZWQ6ICJwcm9iZS1tYW5h
Z2VyLXByb2JlLXNldC1hZGRlZCIsCisgICAgUHJvYmVTZXRSZW1vdmVkOiAicHJvYmUtbWFuYWdl
ci1wcm9iZS1zZXQtcmVtb3ZlZCIsCit9OworCitXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlciwK
KyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8g
UHVibGljCisKKyAgICBnZXQgcHJvYmVTZXRzKCkKKyAgICB7CisgICAgICAgIHZhciBzZXRzID0g
W107CisgICAgICAgIGZvciAodmFyIHNldCBvZiB0aGlzLl9wcm9iZVNldHNCeUJyZWFrcG9pbnQu
dmFsdWVzKCkpCisgICAgICAgICAgICBzZXRzLnB1c2goc2V0KTsKKworICAgICAgICByZXR1cm4g
c2V0czsKKyAgICB9LAorCisgICAgcHJvYmVTZXRGb3JCcmVha3BvaW50OiBmdW5jdGlvbihicmVh
a3BvaW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2JlU2V0c0J5QnJlYWtwb2lu
dC5nZXQoYnJlYWtwb2ludCk7CisgICAgfSwKKworICAgIC8vIFByb3RlY3RlZCAoY2FsbGVkIGJ5
IFdlYkluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyKQorCisgICAgZGlkU2FtcGxlUHJvYmU6IGZ1
bmN0aW9uKHNhbXBsZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3Byb2Jl
c0J5SWRlbnRpZmllci5oYXMoc2FtcGxlLnByb2JlSWQpLCAiVW5rbm93biBwcm9iZSBpZGVudGlm
aWVyIHNwZWNpZmllZCBmb3Igc2FtcGxlOiAiLCBzYW1wbGUpOworICAgICAgICB2YXIgcHJvYmUg
PSB0aGlzLl9wcm9iZXNCeUlkZW50aWZpZXIuZ2V0KHNhbXBsZS5wcm9iZUlkKTsKKyAgICAgICAg
cHJvYmUuYWRkU2FtcGxlKG5ldyBXZWJJbnNwZWN0b3IuUHJvYmVTYW1wbGUoc2FtcGxlLnNhbXBs
ZUlkLCBzYW1wbGUuYmF0Y2hJZCwgc2FtcGxlLnRpbWVzdGFtcCwgc2FtcGxlLnBheWxvYWQpKTsK
KyAgICB9LAorCisgICAgLy8gUHJpdmF0ZQorCisgICAgX2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rp
b24oYnJlYWtwb2ludE9yRXZlbnQpCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludDsKKyAg
ICAgICAgaWYgKGJyZWFrcG9pbnRPckV2ZW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnQpCisgICAgICAgICAgICBicmVha3BvaW50ID0gYnJlYWtwb2ludE9yRXZlbnQ7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGJyZWFrcG9pbnQgPSBicmVha3BvaW50T3JFdmVudC5kYXRh
LmJyZWFrcG9pbnQ7CisKKyAgICAgICAgY29uc29sZS5hc3NlcnQoYnJlYWtwb2ludCBpbnN0YW5j
ZW9mIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LCAiVW5rbm93biBvYmplY3QgcGFzc2VkIGFzIGJy
ZWFrcG9pbnQ6ICIsIGJyZWFrcG9pbnQpOworCisgICAgICAgIGlmICh0aGlzLl9rbm93blByb2Jl
SWRlbnRpZmllcnNGb3JCcmVha3BvaW50LmhhcyhicmVha3BvaW50KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB0aGlzLl9rbm93blByb2JlSWRlbnRpZmllcnNGb3JCcmVha3BvaW50
LnNldChicmVha3BvaW50LCBuZXcgU2V0KTsKKworICAgICAgICB0aGlzLl9icmVha3BvaW50QWN0
aW9uc0NoYW5nZWQoYnJlYWtwb2ludCk7CisgICAgfSwKKworICAgIF9icmVha3BvaW50UmVtb3Zl
ZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50
LmRhdGEuYnJlYWtwb2ludDsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fa25vd25Qcm9i
ZUlkZW50aWZpZXJzRm9yQnJlYWtwb2ludC5oYXMoYnJlYWtwb2ludCkpOworCisgICAgICAgIHRo
aXMuX2JyZWFrcG9pbnRBY3Rpb25zQ2hhbmdlZChicmVha3BvaW50KTsKKyAgICAgICAgdGhpcy5f
a25vd25Qcm9iZUlkZW50aWZpZXJzRm9yQnJlYWtwb2ludC5kZWxldGUoYnJlYWtwb2ludCk7Cisg
ICAgfSwKKworICAgIF9icmVha3BvaW50QWN0aW9uc0NoYW5nZWQ6IGZ1bmN0aW9uKGJyZWFrcG9p
bnRPckV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQ7CisgICAgICAgIGlmIChi
cmVha3BvaW50T3JFdmVudCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5CcmVha3BvaW50KQorICAg
ICAgICAgICAgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRPckV2ZW50OworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBicmVha3BvaW50ID0gYnJlYWtwb2ludE9yRXZlbnQudGFyZ2V0OworCisgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludCwgIlVua25vd24gb2JqZWN0IHBhc3NlZCBhcyBicmVha3BvaW50OiAiLCBicmVha3Bv
aW50KTsKKworICAgICAgICAvLyBTb21ldGltZXMgYWN0aW9ucyBjaGFuZ2UgYmVmb3JlIHRoZSBh
ZGRlZCBicmVha3BvaW50IGlzIGZ1bGx5IGRpc3BhdGNoZWQuCisgICAgICAgIGlmICghdGhpcy5f
a25vd25Qcm9iZUlkZW50aWZpZXJzRm9yQnJlYWtwb2ludC5oYXMoYnJlYWtwb2ludCkpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRBZGRlZChicmVha3BvaW50KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBrbm93blByb2JlSWRlbnRpZmllcnMg
PSB0aGlzLl9rbm93blByb2JlSWRlbnRpZmllcnNGb3JCcmVha3BvaW50LmdldChicmVha3BvaW50
KTsKKyAgICAgICAgdmFyIHNlZW5Qcm9iZUlkZW50aWZpZXJzID0gbmV3IFNldDsKKworICAgICAg
ICBicmVha3BvaW50LnByb2JlQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHByb2JlQWN0aW9uKSB7
CisgICAgICAgICAgICB2YXIgcHJvYmVJZGVudGlmaWVyID0gcHJvYmVBY3Rpb24uaWQ7CisgICAg
ICAgICAgICBjb25zb2xlLmFzc2VydChwcm9iZUlkZW50aWZpZXIsICJQcm9iZSBhZGRlZCB3aXRo
b3V0IGJyZWFrcG9pbnQgYWN0aW9uIGlkZW50aWZpZXI6ICIsIGJyZWFrcG9pbnQpOworCisgICAg
ICAgICAgICBzZWVuUHJvYmVJZGVudGlmaWVycy5hZGQocHJvYmVJZGVudGlmaWVyKTsKKyAgICAg
ICAgICAgIGlmICgha25vd25Qcm9iZUlkZW50aWZpZXJzLmhhcyhwcm9iZUlkZW50aWZpZXIpKSB7
CisgICAgICAgICAgICAgICAgLy8gTmV3IHByb2JlOyBmaW5kIG9yIGNyZWF0ZSByZWxldmFudCBw
cm9iZSBzZXQuCisgICAgICAgICAgICAgICAga25vd25Qcm9iZUlkZW50aWZpZXJzLmFkZChwcm9i
ZUlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgIHZhciBwcm9iZVNldCA9IHRoaXMuX3Byb2Jl
U2V0Rm9yQnJlYWtwb2ludChicmVha3BvaW50KTsKKyAgICAgICAgICAgICAgICB2YXIgbmV3UHJv
YmUgPSBuZXcgV2ViSW5zcGVjdG9yLlByb2JlKHByb2JlSWRlbnRpZmllciwgYnJlYWtwb2ludCwg
cHJvYmVBY3Rpb24uZGF0YSk7CisgICAgICAgICAgICAgICAgdGhpcy5fcHJvYmVzQnlJZGVudGlm
aWVyLnNldChwcm9iZUlkZW50aWZpZXIsIG5ld1Byb2JlKTsKKyAgICAgICAgICAgICAgICBwcm9i
ZVNldC5hZGRQcm9iZShuZXdQcm9iZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB2YXIgcHJvYmUgPSB0aGlzLl9wcm9iZXNCeUlkZW50aWZp
ZXIuZ2V0KHByb2JlSWRlbnRpZmllcik7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChwcm9i
ZSwgIlByb2JlIGtub3duIGJ1dCBjb3VsZG4ndCBiZSBmb3VuZCBieSBpZGVudGlmaWVyOiAiLCBw
cm9iZUlkZW50aWZpZXIpOworICAgICAgICAgICAgLy8gVXBkYXRlIHByb2JlIGV4cHJlc3Npb247
IGlmIGl0IGRpZmZlcmVkLCBjaGFuZ2UgZXZlbnRzIHdpbGwgZmlyZS4KKyAgICAgICAgICAgIHBy
b2JlLmV4cHJlc3Npb24gPSBwcm9iZUFjdGlvbi5kYXRhOworICAgICAgICB9LCB0aGlzKTsKKwor
ICAgICAgICAvLyBMb29rIGZvciBtaXNzaW5nIHByb2JlcyBiYXNlZCBvbiB3aGF0IHdlIHNhdyBs
YXN0LgorICAgICAgICBrbm93blByb2JlSWRlbnRpZmllcnMuZm9yRWFjaChmdW5jdGlvbihwcm9i
ZUlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGlmIChzZWVuUHJvYmVJZGVudGlmaWVycy5oYXMo
cHJvYmVJZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IC8vIFRoZSBwcm9iZSBoYXMgZ29uZSBtaXNzaW5nLCByZW1vdmUgaXQuCisgICAgICAgICAgICB2
YXIgcHJvYmVTZXQgPSB0aGlzLl9wcm9iZVNldEZvckJyZWFrcG9pbnQoYnJlYWtwb2ludCk7Cisg
ICAgICAgICAgICB2YXIgcHJvYmUgPSB0aGlzLl9wcm9iZXNCeUlkZW50aWZpZXIuZ2V0KHByb2Jl
SWRlbnRpZmllcik7CisgICAgICAgICAgICB0aGlzLl9wcm9iZXNCeUlkZW50aWZpZXIuZGVsZXRl
KHByb2JlSWRlbnRpZmllcik7CisgICAgICAgICAgICBrbm93blByb2JlSWRlbnRpZmllcnMuZGVs
ZXRlKHByb2JlSWRlbnRpZmllcik7CisgICAgICAgICAgICBwcm9iZVNldC5yZW1vdmVQcm9iZShw
cm9iZSk7CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgcHJvYmUgc2V0IGlmIGl0IGhhcyBi
ZWNvbWUgZW1wdHkuCisgICAgICAgICAgICBpZiAoIXByb2JlU2V0LnByb2Jlcy5sZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl9wcm9iZVNldHNCeUJyZWFrcG9pbnQuZGVsZXRlKHByb2Jl
U2V0LmJyZWFrcG9pbnQpOworICAgICAgICAgICAgICAgIHByb2JlU2V0LndpbGxSZW1vdmUoKTsK
KyAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0
b3IuUHJvYmVNYW5hZ2VyLkV2ZW50LlByb2JlU2V0UmVtb3ZlZCwgcHJvYmVTZXQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9LCB0aGlzKTsKKyAgICB9LAorCisgICAgX3Byb2JlU2V0Rm9yQnJl
YWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9w
cm9iZVNldHNCeUJyZWFrcG9pbnQuaGFzKGJyZWFrcG9pbnQpKQorICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3Byb2JlU2V0c0J5QnJlYWtwb2ludC5nZXQoYnJlYWtwb2ludCk7CisKKyAgICAgICAg
dmFyIG5ld1Byb2JlU2V0ID0gbmV3IFdlYkluc3BlY3Rvci5Qcm9iZVNldChicmVha3BvaW50KTsK
KyAgICAgICAgdGhpcy5fcHJvYmVTZXRzQnlCcmVha3BvaW50LnNldChicmVha3BvaW50LCBuZXdQ
cm9iZVNldCk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3Bl
Y3Rvci5Qcm9iZU1hbmFnZXIuRXZlbnQuUHJvYmVTZXRBZGRlZCwgbmV3UHJvYmVTZXQpOworICAg
ICAgICByZXR1cm4gbmV3UHJvYmVTZXQ7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb2JlU2V0LmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvYmVTZXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY5NTZhZTAyZWY2
Yzk4NjEzNGYwOGI1ZTEwYmIxMzkyMTM0YjI1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb2JlU2V0LmpzCkBAIC0wLDAgKzEsMTYxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gQSBQcm9iZVNldCBjbHVz
dGVycyBQcm9iZXMgZnJvbSB0aGUgc2FtZSBCcmVha3BvaW50IGFuZCB0aGVpciBzYW1wbGVzLgor
CitXZWJJbnNwZWN0b3IuUHJvYmVTZXQgPSBmdW5jdGlvbihicmVha3BvaW50KQoreworICAgIGNv
bnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dCwgIlVua25vd24gYnJlYWtwb2ludCBhcmd1bWVudDogIiwgYnJlYWtwb2ludCk7CisKKyAgICBX
ZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisgICAgdGhpcy5fYnJlYWtwb2ludCA9IGJy
ZWFrcG9pbnQ7CisgICAgdGhpcy5fcHJvYmVzID0gW107CisgICAgdGhpcy5fcHJvYmVzQnlJZGVu
dGlmaWVyID0gbmV3IE1hcDsKKworICAgIHRoaXMuX2NyZWF0ZURhdGFUYWJsZSgpOworCisgICAg
V2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2
ZW50Lk1haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlQ2hhbmdlZCwgdGhp
cyk7CisgICAgV2ViSW5zcGVjdG9yLlByb2JlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LlByb2JlLkV2ZW50LlNhbXBsZUFkZGVkLCB0aGlzLl9zYW1wbGVDb2xsZWN0ZWQsIHRoaXMpOwor
ICAgIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnQuRXZlbnQuUmVzb2x2ZWRTdGF0ZURpZENoYW5nZSwgdGhpcy5fYnJlYWtwb2lu
dFJlc29sdmVkU3RhdGVEaWRDaGFuZ2UsIHRoaXMpOworfQorCitXZWJJbnNwZWN0b3IuT2JqZWN0
LmFkZENvbnN0cnVjdG9yRnVuY3Rpb25zKFdlYkluc3BlY3Rvci5Qcm9iZVNldCk7CisKK1dlYklu
c3BlY3Rvci5Qcm9iZVNldC5FdmVudCA9IHsKKyAgICBQcm9iZUFkZGVkOiAicHJvYmUtc2V0LXBy
b2JlLWFkZGVkIiwKKyAgICBQcm9iZVJlbW92ZWQ6ICJwcm9iZS1zZXQtcHJvYmUtcmVtb3ZlZCIs
CisgICAgUmVzb2x2ZWRTdGF0ZURpZENoYW5nZTogInByb2JlLXNldC1yZXNvbHZlZC1zdGF0ZS1k
aWQtY2hhbmdlIiwKKyAgICBTYW1wbGVzQ2xlYXJlZDogInByb2JlLXNldC1zYW1wbGVzLWNsZWFy
ZWQiLAorfTsKKworV2ViSW5zcGVjdG9yLlByb2JlU2V0LlNhbXBsZU9iamVjdFRpdGxlID0gIk9i
amVjdCI7CisKK1dlYkluc3BlY3Rvci5Qcm9iZVNldC5wcm90b3R5cGUgPSB7CisgICAgY29uc3Ry
dWN0b3I6IFdlYkluc3BlY3Rvci5Qcm9iZVNldCwKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rv
ci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVibGljCisKKyAgIGdldCBicmVha3BvaW50
KCkKKyAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnQ7CisgICB9LAorCisgICAg
Z2V0IHByb2JlcygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmVzLnNsaWNlKCk7
CisgICAgfSwKKworICAgIGdldCBkYXRhVGFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2RhdGFUYWJsZTsKKyAgICB9LAorCisgICAgY2xlYXI6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX2JyZWFrcG9pbnQuY2xlYXJBY3Rpb25zKFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50QWN0aW9uLlR5cGUuUHJvYmUpOworICAgIH0sCisKKyAgICBjbGVhclNhbXBsZXM6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIHByb2JlIG9mIHRoaXMuX3Byb2JlcykKKyAg
ICAgICAgICAgIHByb2JlLmNsZWFyU2FtcGxlcygpOworCisgICAgICAgIHRoaXMuX2NyZWF0ZURh
dGFUYWJsZSgpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNw
ZWN0b3IuUHJvYmVTZXQuRXZlbnQuU2FtcGxlc0NsZWFyZWQsIHRoaXMpOworICAgIH0sCisKKyAg
ICBjcmVhdGVQcm9iZTogZnVuY3Rpb24oZXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIHRoaXMu
YnJlYWtwb2ludC5jcmVhdGVBY3Rpb24oV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRBY3Rpb24uVHlw
ZS5Qcm9iZSwgbnVsbCwgZXhwcmVzc2lvbik7CisgICAgfSwKKworICAgIGFkZFByb2JlOiBmdW5j
dGlvbihwcm9iZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHByb2JlIGluc3RhbmNl
b2YgV2ViSW5zcGVjdG9yLlByb2JlLCAiVHJpZWQgdG8gYWRkIG5vbi1wcm9iZSAiLCBwcm9iZSwg
IiB0byBwcm9iZSBncm91cCIsIHRoaXMpOworICAgICAgICBjb25zb2xlLmFzc2VydChwcm9iZS5i
cmVha3BvaW50ID09PSB0aGlzLmJyZWFrcG9pbnQsICJQcm9iZSBhbmQgUHJvYmVTZXQgbXVzdCBo
YXZlIHNhbWUgYnJlYWtwb2ludC4iLCBwcm9iZSwgdGhpcyk7CisKKyAgICAgICAgdGhpcy5fcHJv
YmVzLnB1c2gocHJvYmUpOworICAgICAgICB0aGlzLl9wcm9iZXNCeUlkZW50aWZpZXIuc2V0KHBy
b2JlLmlkZW50aWZpZXIsIHByb2JlKTsKKworICAgICAgICB0aGlzLmRhdGFUYWJsZS5hZGRQcm9i
ZShwcm9iZSk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3Bl
Y3Rvci5Qcm9iZVNldC5FdmVudC5Qcm9iZUFkZGVkLCBwcm9iZSk7CisgICAgfSwKKworICAgIHJl
bW92ZVByb2JlOiBmdW5jdGlvbihwcm9iZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHByb2JlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlLCAiVHJpZWQgdG8gcmVtb3ZlIG5v
bi1wcm9iZSAiLCBwcm9iZSwgIiB0byBwcm9iZSBncm91cCIsIHRoaXMpOworICAgICAgICBjb25z
b2xlLmFzc2VydCh0aGlzLl9wcm9iZXMuaW5kZXhPZihwcm9iZSkgIT0gLTEsICJUcmllZCB0byBy
ZW1vdmUgcHJvYmUiLCBwcm9iZSwgIiBub3QgaW4gZ3JvdXAgIiwgdGhpcyk7CisgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KHRoaXMuX3Byb2Jlc0J5SWRlbnRpZmllci5oYXMocHJvYmUuaWRlbnRpZmll
ciksICJUcmllZCB0byByZW1vdmUgcHJvYmUiLCBwcm9iZSwgIiBub3QgaW4gZ3JvdXAgIiwgdGhp
cyk7CisKKyAgICAgICAgdGhpcy5fcHJvYmVzLnNwbGljZSh0aGlzLl9wcm9iZXMuaW5kZXhPZihw
cm9iZSksIDEpOworICAgICAgICB0aGlzLl9wcm9iZXNCeUlkZW50aWZpZXIuZGVsZXRlKHByb2Jl
LmlkZW50aWZpZXIpOworICAgICAgICB0aGlzLmRhdGFUYWJsZS5yZW1vdmVQcm9iZShwcm9iZSk7
CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Qcm9i
ZVNldC5FdmVudC5Qcm9iZVJlbW92ZWQsIHByb2JlKTsKKyAgICB9LAorCisgICAgd2lsbFJlbW92
ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuX3Byb2Jl
cy5sZW5ndGgsICJQcm9iZVNldC53aWxsUmVtb3ZlIGNhbGxlZCwgYnV0IHByb2JlcyBzdGlsbCBh
c3NvY2lhdGVkIHdpdGggZ3JvdXA6ICIsIHRoaXMuX3Byb2Jlcyk7CisKKyAgICAgICAgV2ViSW5z
cGVjdG9yLkZyYW1lLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50
Lk1haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlQ2hhbmdlZCwgdGhpcyk7
CisgICAgICAgIFdlYkluc3BlY3Rvci5Qcm9iZS5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5Qcm9iZS5FdmVudC5TYW1wbGVBZGRlZCwgdGhpcy5fc2FtcGxlQ29sbGVjdGVkLCB0aGlz
KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5SZXNvbHZlZFN0YXRlRGlkQ2hhbmdlLCB0aGlz
Ll9icmVha3BvaW50UmVzb2x2ZWRTdGF0ZURpZENoYW5nZSwgdGhpcyk7CisgICAgfSwKKworICAg
IC8vIFByaXZhdGUKKworICAgIF9tYWluUmVzb3VyY2VDaGFuZ2VkOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB0aGlzLmRhdGFUYWJsZS5tYWluUmVzb3VyY2VDaGFuZ2VkKCk7CisgICAgfSwK
KworICAgIF9jcmVhdGVEYXRhVGFibGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0
aGlzLmRhdGFUYWJsZSkKKyAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLndpbGxSZW1vdmUoKTsK
KworICAgICAgICB0aGlzLl9kYXRhVGFibGUgPSBuZXcgV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0
YVRhYmxlKHRoaXMpOworICAgIH0sCisKKyAgICBfc2FtcGxlQ29sbGVjdGVkOiBmdW5jdGlvbihl
dmVudCkKKyAgICB7CisgICAgICAgIHZhciBzYW1wbGUgPSBldmVudC5kYXRhOworICAgICAgICBj
b25zb2xlLmFzc2VydChzYW1wbGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUHJvYmVTYW1wbGUs
ICJUcmllZCB0byBhZGQgbm9uLXNhbXBsZSB0byBwcm9iZSBncm91cDogIiwgc2FtcGxlKTsKKwor
ICAgICAgICB2YXIgcHJvYmUgPSBldmVudC50YXJnZXQ7CisgICAgICAgIGlmICghdGhpcy5fcHJv
YmVzQnlJZGVudGlmaWVyLmhhcyhwcm9iZS5pZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLmRhdGFUYWJsZSk7CisgICAgICAgIHRo
aXMuZGF0YVRhYmxlLmFkZFNhbXBsZUZvclByb2JlKHByb2JlLCBzYW1wbGUpOworICAgIH0sCisK
KyAgICBfYnJlYWtwb2ludFJlc29sdmVkU3RhdGVEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQor
ICAgIHsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9y
LlByb2JlU2V0LkV2ZW50LlJlc29sdmVkU3RhdGVEaWRDaGFuZ2UpOworICAgIH0KK307CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm9iZVNldERhdGFG
cmFtZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb2JlU2V0RGF0
YUZyYW1lLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllMTE2ZDIxYjQ4OTM0OGI5M2MyMjUwOWI3ODliOGNkYjkx
Yzg0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Qcm9iZVNldERhdGFGcmFtZS5qcwpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YUZyYW1lID0g
ZnVuY3Rpb24oaW5kZXgpCit7CisgICAgdGhpcy5fY291bnQgPSAwOworICAgIHRoaXMuX2luZGV4
ID0gaW5kZXg7CisgICAgdGhpcy5fc2VwYXJhdG9yID0gZmFsc2U7Cit9OworCitXZWJJbnNwZWN0
b3IuUHJvYmVTZXREYXRhRnJhbWUuY29tcGFyZSA9IGZ1bmN0aW9uKGEsIGIpIHsKKyAgICBjb25z
b2xlLmFzc2VydChhIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YUZyYW1lLCBh
KTsKKyAgICBjb25zb2xlLmFzc2VydChiIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlU2V0
RGF0YUZyYW1lLCBiKTsKKworICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDsKK30KKworV2Vi
SW5zcGVjdG9yLlByb2JlU2V0RGF0YUZyYW1lLk1pc3NpbmdWYWx1ZSA9ICI/IjsKKworV2ViSW5z
cGVjdG9yLlByb2JlU2V0RGF0YUZyYW1lLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3Rvcjog
V2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YUZyYW1lLAorCisgICAgLy8gUHVibGljCisKKyAgICBn
ZXQga2V5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcodGhpcy5faW5kZXgpOworICAg
IH0sCisKKyAgICBnZXQgY291bnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NvdW50
OworICAgIH0sCisKKyAgICBnZXQgaW5kZXgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2luZGV4OworICAgIH0sCisKKyAgICBnZXQgaXNTZXBhcmF0b3IoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX3NlcGFyYXRvcjsKKyAgICB9LAorCisgICAgLy8gVGhlIGxhc3QgZGF0YSBm
cmFtZSBiZWZvcmUgYSBtYWluIGZyYW1lIG5hdmlnYXRpb24gaXMgbWFya2VkIGFzIGEgInNlcGFy
YXRvciIgZnJhbWUuCisgICAgc2V0IGlzU2VwYXJhdG9yKHZhbHVlKQorICAgIHsKKyAgICAgICAg
dGhpcy5fc2VwYXJhdG9yID0gISF2YWx1ZTsKKyAgICB9LAorCisgICAgYWRkU2FtcGxlRm9yUHJv
YmU6IGZ1bmN0aW9uKHByb2JlLCBzYW1wbGUpCisgICAgeworICAgICAgICB0aGlzW3Byb2JlLmlk
XSA9IHNhbXBsZTsKKyAgICAgICAgdGhpcy5fY291bnQrKzsKKyAgICB9LAorCisgICAgbWlzc2lu
Z0tleXM6IGZ1bmN0aW9uKHByb2JlU2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb2JlU2V0
LnByb2Jlcy5maWx0ZXIoZnVuY3Rpb24ocHJvYmUpIHsKKyAgICAgICAgICAgIHJldHVybiAhdGhp
cy5oYXNPd25Qcm9wZXJ0eShwcm9iZS5pZCk7CisgICAgICAgIH0sIHRoaXMpOworICAgIH0sCisK
KyAgICBpc0NvbXBsZXRlOiBmdW5jdGlvbihwcm9iZVNldCkKKyAgICB7CisgICAgICAgIHJldHVy
biAhdGhpcy5taXNzaW5nS2V5cyhwcm9iZVNldCkubGVuZ3RoOworICAgIH0sCisKKyAgICBmaWxs
TWlzc2luZ1ZhbHVlczogZnVuY3Rpb24ocHJvYmVTZXQpCisgICAgeworICAgICAgICBmb3IgKHZh
ciBrZXkgb2YgdGhpcy5taXNzaW5nS2V5cyhwcm9iZVNldCkpCisgICAgICAgICAgICB0aGlzW2tl
eV0gPSBXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhRnJhbWUuTWlzc2luZ1ZhbHVlOworICAgIH0K
K307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm9i
ZVNldERhdGFUYWJsZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1By
b2JlU2V0RGF0YVRhYmxlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3N2JkNGIzZmI1OWU1NWNiNjk0YWQ0NTc0
NWQzZDFlMzI4NTg4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Qcm9iZVNldERhdGFUYWJsZS5qcwpAQCAtMCwwICsxLDEzNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCisgKiBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5Qcm9iZVNldERh
dGFUYWJsZSA9IGZ1bmN0aW9uKHByb2JlU2V0KQoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3Qu
Y2FsbCh0aGlzKTsKKworICAgIHRoaXMuX3Byb2JlU2V0ID0gcHJvYmVTZXQ7CisgICAgdGhpcy5f
ZnJhbWVzID0gW107CisgICAgdGhpcy5fcHJldmlvdXNCYXRjaElkZW50aWZpZXIgPSBXZWJJbnNw
ZWN0b3IuUHJvYmVTZXREYXRhVGFibGUuU2VudGluZWxWYWx1ZTsKK307CisKK1dlYkluc3BlY3Rv
ci5Qcm9iZVNldERhdGFUYWJsZS5FdmVudCA9IHsKKyAgICBGcmFtZUluc2VydGVkOiAicHJvYmUt
c2V0LWRhdGEtdGFibGUtZnJhbWUtaW5zZXJ0ZWQiLAorICAgIFNlcGFyYXRvckluc2VydGVkOiAi
cHJvYmUtc2V0LWRhdGEtdGFibGUtc2VwYXJhdG9yLWluc2VydGVkIiwKKyAgICBXaWxsUmVtb3Zl
OiAicHJvYmUtc2V0LWRhdGEtdGFibGUtd2lsbC1yZW1vdmUiCit9OworCitXZWJJbnNwZWN0b3Iu
UHJvYmVTZXREYXRhVGFibGUuU2VudGluZWxWYWx1ZSA9IC0xOworV2ViSW5zcGVjdG9yLlByb2Jl
U2V0RGF0YVRhYmxlLlVua25vd25WYWx1ZSA9ICI/IjsKKworV2ViSW5zcGVjdG9yLlByb2JlU2V0
RGF0YVRhYmxlLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlBy
b2JlU2V0RGF0YVRhYmxlLAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90
b3R5cGUsCisKKyAgICAvLyBQdWJsaWMKKworICAgIGdldCBmcmFtZXMoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2ZyYW1lcy5zbGljZSgpOworICAgIH0sCisKKyAgICBnZXQgc2VwYXJh
dG9ycygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWVzLmZpbHRlcihmdW5jdGlv
bihmcmFtZSkgeyByZXR1cm4gZnJhbWUuaXNTZXBhcmF0b3I7IH0pOworICAgIH0sCisKKyAgICB3
aWxsUmVtb3ZlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUHJvYmVTZXREYXRhVGFibGUuRXZlbnQuV2lsbFJlbW92
ZSk7CisgICAgICAgIHRoaXMuX2ZyYW1lcyA9IFtdOworICAgICAgICBkZWxldGUgdGhpcy5fcHJv
YmVTZXQ7CisgICAgfSwKKworICAgIG1haW5SZXNvdXJjZUNoYW5nZWQ6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHRoaXMuYWRkU2VwYXJhdG9yKCk7CisgICAgfSwKKworICAgIGFkZFNhbXBs
ZUZvclByb2JlOiBmdW5jdGlvbihwcm9iZSwgc2FtcGxlKQorICAgIHsKKyAgICAgICAgLy8gRWFn
ZXJseSBzYXZlIHRoZSBmcmFtZSBpZiB0aGUgYmF0Y2ggaWRlbnRpZmllciBkaWZmZXJzLCBvciB3
ZSBrbm93IHRoZSBmcmFtZSBpcyBmdWxsLgorICAgICAgICAvLyBDcmVhdGUgYSBuZXcgZnJhbWUg
d2hlbiB0aGUgYmF0Y2ggaWRlbnRpZmllciBkaWZmZXJzLgorICAgICAgICBpZiAoc2FtcGxlLmJh
dGNoSWQgIT0gdGhpcy5fcHJldmlvdXNCYXRjaElkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9vcGVuRnJhbWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9vcGVuRnJhbWUuZmls
bE1pc3NpbmdWYWx1ZXModGhpcy5fcHJvYmVTZXQpOworICAgICAgICAgICAgICAgIHRoaXMuYWRk
RnJhbWUodGhpcy5fb3BlbkZyYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
X29wZW5GcmFtZSA9IHRoaXMuY3JlYXRlRnJhbWUoKTsKKyAgICAgICAgICAgIHRoaXMuX3ByZXZp
b3VzQmF0Y2hJZGVudGlmaWVyID0gc2FtcGxlLmJhdGNoSWQ7CisgICAgICAgIH0KKworICAgICAg
ICBjb25zb2xlLmFzc2VydCh0aGlzLl9vcGVuRnJhbWUsICJTaG91bGQgYWx3YXlzIGhhdmUgYW4g
b3BlbiBmcmFtZSBiZWZvcmUgYWRkaW5nIHNhbXBsZS4iLCB0aGlzLCBwcm9iZSwgc2FtcGxlKTsK
KyAgICAgICAgdGhpcy5fb3BlbkZyYW1lLmFkZFNhbXBsZUZvclByb2JlKHByb2JlLCBzYW1wbGUp
OworICAgICAgICBpZiAodGhpcy5fb3BlbkZyYW1lLmNvdW50ID09IHRoaXMuX3Byb2JlU2V0LnBy
b2Jlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuYWRkRnJhbWUodGhpcy5fb3BlbkZyYW1l
KTsKKyAgICAgICAgICAgIHRoaXMuX29wZW5GcmFtZSA9IG51bGw7CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgYWRkUHJvYmU6IGZ1bmN0aW9uKHByb2JlKQorICAgIHsKKyAgICAgICAgZm9yICh2
YXIgZnJhbWUgb2YgdGhpcy5mcmFtZXMpCisgICAgICAgICAgICBpZiAoIWZyYW1lW3Byb2JlLmlk
XSkKKyAgICAgICAgICAgICAgICBmcmFtZVtwcm9iZS5pZF0gPSBXZWJJbnNwZWN0b3IuUHJvYmVT
ZXREYXRhVGFibGUuVW5rbm93blZhbHVlOworICAgIH0sCisKKyAgICByZW1vdmVQcm9iZTogZnVu
Y3Rpb24ocHJvYmUpCisgICAgeworICAgICAgICBmb3IgKHZhciBmcmFtZSBvZiB0aGlzLmZyYW1l
cykKKyAgICAgICAgICAgIGRlbGV0ZSBmcmFtZXNbaV1bcHJvYmUuaWRdOworICAgIH0sCisKKyAg
ICAvLyBQcm90ZWN0ZWQgLSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgorCisgICAg
Y3JlYXRlRnJhbWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5z
cGVjdG9yLlByb2JlU2V0RGF0YUZyYW1lKHRoaXMuX2ZyYW1lcy5sZW5ndGgpOworICAgIH0sCisK
KyAgICBhZGRGcmFtZTogZnVuY3Rpb24oZnJhbWUpCisgICAgeworICAgICAgICB0aGlzLl9mcmFt
ZXMucHVzaChmcmFtZSk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdl
Ykluc3BlY3Rvci5Qcm9iZVNldERhdGFUYWJsZS5FdmVudC5GcmFtZUluc2VydGVkLCBmcmFtZSk7
CisgICAgfSwKKworICAgIGFkZFNlcGFyYXRvcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
Ly8gU2VwYXJhdG9ycyBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCBhIGZyYW1lLgorICAgICAgICBp
ZiAoIXRoaXMuX2ZyYW1lcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dmFyIHByZXZpb3VzRnJhbWUgPSB0aGlzLl9mcmFtZXMubGFzdFZhbHVlOworICAgICAgICAvLyBE
b24ndCBzZW5kIG91dCBkdXBsaWNhdGUgZXZlbnRzIGZvciBhZGphY2VudCBzZXBhcmF0b3JzLgor
ICAgICAgICBpZiAocHJldmlvdXNGcmFtZS5pc1NlcGFyYXRvcikKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBwcmV2aW91c0ZyYW1lLmlzU2VwYXJhdG9yID0gdHJ1ZTsKKyAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlByb2JlU2V0RGF0YVRh
YmxlLkV2ZW50LlNlcGFyYXRvckluc2VydGVkLCBwcmV2aW91c0ZyYW1lKTsKKyAgICB9Cit9Owpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDQ3Y2ZiMmNmZDUyYmQwNDExNWI2ZWVlZDE1MGY4ZGYxOGVkZTJjMjUuLjc2ODA4YWI3
MWI4NTk2YWJlZWEzZjU0ZmQwOTJlZTRhNDRhYjUyZDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAor
MjAxNC0wMi0wNCAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIg
SW5zcGVjdG9yOiBhZGQgcHJvYmUgbWFuYWdlciBhbmQgbW9kZWwgb2JqZWN0cyB0byB0aGUgZnJv
bnRlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
NzExNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNl
dCB1cCB0aGUgZGVidWdnZXIgYW5kIHByb2JlIG1hbmFnZXJzIHdoZW4gdGVzdGluZyBtb2RlbHMu
CisKKyAgICAgICAgQWRkIGEgd29ya2FsaWtlIGZvciBJbnNwZWN0b3JCYWNrZW5kLmR1bXBJbnNw
ZWN0b3JQcm90b2NvbE1lc3NhZ2VzIHRvCisgICAgICAgIEluc3BlY3RvclRlc3QuCisKKyAgICAg
ICAgQWRkIGxpc3RlbmVycyBmb3IgYnJlYWtwb2ludHMgYW5kIHByb2JlcyB0aGF0IHByb2R1Y2UK
KyAgICAgICAgdXNlZnVsLCBkZXRlcm1pbmlzdGljIHRyYWNlIG91dHB1dC4gVXNlIHRoZSB0cmFj
aW5nIGluIGEgbmV3IHRlc3QuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci1wcm90
b2NvbC9yZXNvdXJjZXMvSW5zcGVjdG9yVGVzdC5qczoKKyAgICAgICAgKEluc3BlY3RvclRlc3Qu
c2VuZENvbW1hbmQpOgorICAgICAgICAoSW5zcGVjdG9yVGVzdC5pbml0aWFsaXplSW5zcGVjdG9y
TW9kZWxzLmNvbnNvbGUuYXNzZXJ0KToKKyAgICAgICAgKEluc3BlY3RvclRlc3QuaW5pdGlhbGl6
ZUluc3BlY3Rvck1vZGVscyk6CisgICAgICAgICogaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2Vy
L2RpZFNhbXBsZVByb2JlLW11bHRpcGxlLXByb2Jlcy1leHBlY3RlZC50eHQ6CisgICAgICAgICog
aW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL2RpZFNhbXBsZVByb2JlLW11bHRpcGxlLXByb2Jl
cy5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci1wcm90b2NvbC9tb2RlbC9wcm9iZS1tYW5hZ2Vy
LWFkZC1yZW1vdmUtYWN0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3Bl
Y3Rvci1wcm90b2NvbC9tb2RlbC9wcm9iZS1tYW5hZ2VyLWFkZC1yZW1vdmUtYWN0aW9ucy5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3ItcHJvdG9jb2wvcmVzb3VyY2VzL3Byb2JlLWhl
bHBlci5qczoKKyAgICAgICAgKFByb2JlSGVscGVyLnN0cmluZ2lmeVByb2JlU2FtcGxlKToKKyAg
ICAgICAgKFByb2JlSGVscGVyLmluc3RhbGxUcmFjaW5nTGlzdGVuZXJzLldlYkluc3BlY3Rvcik6
CisgICAgICAgIChQcm9iZUhlbHBlci5pbnN0YWxsVHJhY2luZ0xpc3RlbmVycyk6CisKIDIwMTQt
MDItMDQgIFJhZHUgU3RhdmlsYSAgPHN0YXZpbGFAYWRvYmUuY29tPgogCiAgICAgICAgIFJFR1JF
U1NJT04gKHIxNTk2MDkpOiBJbWFnZXMgYXJlIGNvcnJ1cHRlZCB3aGVuIGhvdmVyaW5nIG92ZXIg
YnV0dG9ucyBAIGdpdGh1Yi5jb20KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
aW5zcGVjdG9yLXByb3RvY29sL3Jlc291cmNlcy9JbnNwZWN0b3JUZXN0LmpzIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvcmVzb3VyY2VzL0luc3BlY3RvclRlc3Qu
anMKaW5kZXggYjYzMmRiNjFlNmE0NWRlN2JmODQ3OGM1ZjVkYTQ5ZjBhMjc3MDA4NS4uZTYzOWFj
OWM2ZjgzZGQwZTJmZTMwYTBjOGRmOTE5Zjk2OWRjMTY5YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvcmVzb3VyY2VzL0luc3BlY3RvclRlc3Qu
anMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvcmVzb3Vy
Y2VzL0luc3BlY3RvclRlc3QuanMKQEAgLTI2LDYgKzI2LDcgQEAKIEluc3BlY3RvckZyb250ZW5k
QVBJID0ge307CiAKIEluc3BlY3RvclRlc3QgPSB7fTsKK0luc3BlY3RvclRlc3QuZHVtcEluc3Bl
Y3RvclByb3RvY29sTWVzc2FnZXMgPSBmYWxzZTsKIEluc3BlY3RvclRlc3QuX2Rpc3BhdGNoVGFi
bGUgPSBbXTsKIEluc3BlY3RvclRlc3QuX3JlcXVlc3RJZCA9IC0xOwogSW5zcGVjdG9yVGVzdC5l
dmVudEhhbmRsZXIgPSB7fTsKQEAgLTQzLDYgKzQ0LDExIEBAIEluc3BlY3RvclRlc3Quc2VuZENv
bW1hbmQgPSBmdW5jdGlvbihtZXRob2QsIHBhcmFtcywgaGFuZGxlcikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInBhcmFtcyI6IHBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImlkIjogdGhpcy5fcmVxdWVzdElkIH07CiAKKyAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIGRlYnVn
IGR1bXBpbmcgaW4gSW5zcGVjdG9yQmFja2VuZCwgd2hpY2ggaXMgYnlwYXNzZWQKKyAgICAvLyBi
eSBJbnNwZWN0b3JUZXN0LiBSZXR1cm4gbWVzc2FnZXMgc2hvdWxkIGJlIGR1bXBlZCBieSBJbnNw
ZWN0b3JCYWNrZW5kLgorICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JQcm90b2NvbE1lc3NhZ2Vz
KQorICAgICAgICBjb25zb2xlLmxvZygiZnJvbnRlbmQ6ICIgKyBKU09OLnN0cmluZ2lmeShtZXNz
YWdlT2JqZWN0KSk7CisKICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Quc2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCkpOwogCiAgICAgcmV0dXJuIHRoaXMu
X3JlcXVlc3RJZDsKQEAgLTE2NSw4ICsxNzEsOSBAQCBJbnNwZWN0b3JUZXN0LmluaXRpYWxpemVJ
bnNwZWN0b3JNb2RlbHMgPSBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAoYXNzZXJ0aW9u
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVz
dCgpOworCiAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJBU1NFUlQ6IiArIG1lc3NhZ2UpOwor
ICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOwogICAgIH07CiAKICAgICAvLyBO
b3RlOiBUaGlzIGZ1bmN0aW9uIG92ZXJ3cml0ZXMgdGhlIEluc3BlY3RvckZyb250ZW5kQVBJLCBz
byB0aGVyZSdzIGN1cnJlbnRseSBubwpAQCAtMTk0LDggKzIwMSwxMiBAQCBJbnNwZWN0b3JUZXN0
LmluaXRpYWxpemVJbnNwZWN0b3JNb2RlbHMgPSBmdW5jdGlvbigpCiAgICAgICAgICJSZXZpc2lv
biIsCiAgICAgICAgICJTb3VyY2VDb2RlUmV2aXNpb24iLAogICAgICAgICAiU291cmNlQ29kZSIs
CisgICAgICAgICJTb3VyY2VDb2RlTG9jYXRpb24iLAorICAgICAgICAiU2NyaXB0IiwKKyAgICAg
ICAgIlRleHRSYW5nZSIsCiAgICAgICAgICJSZXNvdXJjZSIsCiAgICAgICAgICJSZXNvdXJjZUNv
bGxlY3Rpb24iLAorICAgICAgICAiU291cmNlTWFwUmVzb3VyY2UiLAogICAgICAgICAiRE9NVHJl
ZU1hbmFnZXIiLAogICAgICAgICAiRE9NTm9kZSIsCiAgICAgICAgICJDb250ZW50RmxvdyIsCkBA
IC0yMDYsNyArMjE3LDE3IEBAIEluc3BlY3RvclRlc3QuaW5pdGlhbGl6ZUluc3BlY3Rvck1vZGVs
cyA9IGZ1bmN0aW9uKCkKICAgICAgICAgIkNTU1N0eWxlTWFuYWdlciIsCiAgICAgICAgICJDb2xv
ciIsCiAgICAgICAgICJSdW50aW1lT2JzZXJ2ZXIiLAotICAgICAgICAiUnVudGltZU1hbmFnZXIi
CisgICAgICAgICJSdW50aW1lTWFuYWdlciIsCisgICAgICAgICJEZWJ1Z2dlck9ic2VydmVyIiwK
KyAgICAgICAgIkRlYnVnZ2VyTWFuYWdlciIsCisgICAgICAgICJCcmVha3BvaW50QWN0aW9uIiwK
KyAgICAgICAgIkJyZWFrcG9pbnQiLAorICAgICAgICAiUHJvYmUiLAorICAgICAgICAiUHJvYmVT
ZXQiLAorICAgICAgICAiUHJvYmVNYW5hZ2VyIiwKKyAgICAgICAgIlByb2JlU2V0RGF0YUZyYW1l
IiwKKyAgICAgICAgIlByb2JlU2V0RGF0YVRhYmxlIiwKKyAgICAgICAgIlJlbW90ZU9iamVjdCIK
ICAgICBdOwogCiAgICAgLy8gVGhpcyBjb3JyZXNwb25kcyB0byBsb2FkaW5nIHRoZSBzY3JpcHRz
IGluIE1haW4uaG1sLgpAQCAtMjI1LDYgKzI0Niw3IEBAIEluc3BlY3RvclRlc3QuaW5pdGlhbGl6
ZUluc3BlY3Rvck1vZGVscyA9IGZ1bmN0aW9uKCkKICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVySW5zcGVjdG9yRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLkluc3BlY3Rvck9ic2VydmVy
KTsKICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyUGFnZURpc3BhdGNoZXIobmV3IFdlYklu
c3BlY3Rvci5QYWdlT2JzZXJ2ZXIpOwogICAgIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJET01E
aXNwYXRjaGVyKG5ldyBXZWJJbnNwZWN0b3IuRE9NT2JzZXJ2ZXIpOworICAgIEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEZWJ1Z2dlckRpc3BhdGNoZXIobmV3IFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck9ic2VydmVyKTsKICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ1NTRGlzcGF0Y2hlcihu
ZXcgV2ViSW5zcGVjdG9yLkNTU09ic2VydmVyKTsKICAgICBpZiAoSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlclJ1bnRpbWVEaXNwYXRjaGVyKQogICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyUnVudGltZURpc3BhdGNoZXIobmV3IFdlYkluc3BlY3Rvci5SdW50aW1lT2JzZXJ2ZXIpOwpA
QCAtMjMyLDcgKzI1NCw5IEBAIEluc3BlY3RvclRlc3QuaW5pdGlhbGl6ZUluc3BlY3Rvck1vZGVs
cyA9IGZ1bmN0aW9uKCkKICAgICBXZWJJbnNwZWN0b3IuZnJhbWVSZXNvdXJjZU1hbmFnZXIgPSBu
ZXcgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyOwogICAgIFdlYkluc3BlY3Rvci5k
b21UcmVlTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXI7CiAgICAgV2Vi
SW5zcGVjdG9yLmNzc1N0eWxlTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5h
Z2VyOworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTWFuYWdlcjsKICAgICBXZWJJbnNwZWN0b3IucnVudGltZU1hbmFnZXIgPSBuZXcg
V2ViSW5zcGVjdG9yLlJ1bnRpbWVNYW5hZ2VyOworICAgIFdlYkluc3BlY3Rvci5wcm9iZU1hbmFn
ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlcjsKIH0KIAogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIvZGlkU2FtcGxlUHJvYmUtbXVs
dGlwbGUtcHJvYmVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2Nv
bC9kZWJ1Z2dlci9kaWRTYW1wbGVQcm9iZS1tdWx0aXBsZS1wcm9iZXMtZXhwZWN0ZWQudHh0Cmlu
ZGV4IGQ4YjViYTY3ZDM0MzI2YTVhNzMxZWZkODdiZDRjZWViMGY3NGU1ODkuLjQzOGZlNjViNTdl
ODg3NTY4Mzc2MjljYjg5ZjMwNWI3OWM4NDUwNTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9kaWRTYW1wbGVQcm9iZS1tdWx0aXBsZS1wcm9iZXMt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dl
ci9kaWRTYW1wbGVQcm9iZS1tdWx0aXBsZS1wcm9iZXMtZXhwZWN0ZWQudHh0CkBAIC0xLDExICsx
LDEwIEBACiBEZWJ1Z2dlci5zZXRCcmVha3BvaW50IHdpdGggbXVsdGlwbGUgcHJvYmUgYWN0aW9u
cyBhdCB0aGUgc2FtZSBicmVha3BvaW50LiBUZXN0IERlYnVnZ2VyLmRpZFNhbXBsZVByb2JlIGV2
ZW50cyBmb3IgdGhlIHByb2JlIHNhbXBsZXMuCiAKIEZvdW5kIGJyZWFrcG9pbnQuanMKLVBBU1M6
IFNob3VsZCByZWNlaXZlIHR3byBicmVha3BvaW50IGFjdGlvbiBpZGVudGlmaWVycyBvbiBEZWJ1
Z2dlci5zZXRCcmVha3BvaW50IGNhbGxiYWNrLgogUnVubmluZyBicmVha3BvaW50QWN0aW9ucyB0
byB0cmlnZ2VyIHByb2JlIHNhbXBsZXMuCiBpbnNpZGUgYnJlYWtwb2ludEFjdGlvbnMgYTooMTIp
IGI6KFtvYmplY3QgT2JqZWN0XSkKIFJlY2VpdmVkIHByb2JlIHNhbXBsZSBwYXlsb2FkOiB7InR5
cGUiOiJudW1iZXIiLCJ2YWx1ZSI6MTIsImRlc2NyaXB0aW9uIjoiMTIifQogUmVjZWl2ZWQgcHJv
YmUgc2FtcGxlIHBheWxvYWQ6IHsidHlwZSI6Im51bWJlciIsInZhbHVlIjoxMiwiZGVzY3JpcHRp
b24iOiIxMiJ9Ci1QQVNTOiBTYW1wbGVzIGZyb20gcHJvYmUgYWN0aW9ucyBvbiB0aGUgc2FtZSBi
cmVha3BvaW50IHNob3VsZCBoYXZlIHVuaXF1ZSBhY3Rpb24gaWRlbnRpZmllcnMuCitQQVNTOiBT
YW1wbGVzIGZyb20gZGlmZmVyZW50IHByb2JlIGFjdGlvbnMgc2hvdWxkIGhhdmUgdW5pcXVlIGFj
dGlvbiBpZGVudGlmaWVycy4KIFBBU1M6IFNhbXBsZXMgZnJvbSBwcm9iZSBhY3Rpb25zIG9uIHRo
ZSBzYW1lIGJyZWFrcG9pbnQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgYmF0Y2ggaWRlbnRpZmllcnMu
CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9k
aWRTYW1wbGVQcm9iZS1tdWx0aXBsZS1wcm9iZXMuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci1wcm90b2NvbC9kZWJ1Z2dlci9kaWRTYW1wbGVQcm9iZS1tdWx0aXBsZS1wcm9iZXMuaHRtbApp
bmRleCAxNjgwNmFjMTdjMjcxYjY4ZTZlMDU5YzM1OTYzOWI5N2E3OGQ5ZDkzLi5kZWEzYjk4NGZi
OGUzZmFjOTM4MzYyMWU4NTgzYTljYmRjZDg5MjYzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIvZGlkU2FtcGxlUHJvYmUtbXVsdGlwbGUtcHJvYmVz
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL2RpZFNh
bXBsZVByb2JlLW11bHRpcGxlLXByb2Jlcy5odG1sCkBAIC0yNCw3ICsyNCw3IEBAIGZ1bmN0aW9u
IHRlc3QoKQogCiAgICAgdmFyIHRlc3RzID0gWwogICAgICAgICB7Ci0gICAgICAgICAgICBtZXNz
YWdlOiAiU2FtcGxlcyBmcm9tIHByb2JlIGFjdGlvbnMgb24gdGhlIHNhbWUgYnJlYWtwb2ludCBz
aG91bGQgaGF2ZSB1bmlxdWUgYWN0aW9uIGlkZW50aWZpZXJzLiIsCisgICAgICAgICAgICBtZXNz
YWdlOiAiU2FtcGxlcyBmcm9tIGRpZmZlcmVudCBwcm9iZSBhY3Rpb25zIHNob3VsZCBoYXZlIHVu
aXF1ZSBhY3Rpb24gaWRlbnRpZmllcnMuIiwKICAgICAgICAgICAgIHByZWRpY2F0ZTogZnVuY3Rp
b24gc2FtcGxlc0hhdmVVbmlxdWVBY3Rpb25JZHMoKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHNhbXBsZXNbMF0ucHJvYmVJZCAhPT0gc2FtcGxlc1sxXS5wcm9iZUlkOwogICAgICAgICAgICAg
fSwKQEAgLTQ4LDIyICs0OCwxNCBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgIHZhciBv
cHRpb25zID0gewogICAgICAgICAgICAgICAgIGF1dG9Db250aW51ZTogdHJ1ZSwKICAgICAgICAg
ICAgICAgICBhY3Rpb25zOiBbCi0gICAgICAgICAgICAgICAgICAgIHsidHlwZSI6ICJwcm9iZSIs
ICJkYXRhIjogImEifSwKLSAgICAgICAgICAgICAgICAgICAgeyJ0eXBlIjogInByb2JlIiwgImRh
dGEiOiAiYSJ9CisgICAgICAgICAgICAgICAgICAgIHsidHlwZSI6ICJwcm9iZSIsICJkYXRhIjog
ImEiLCAiaWQiOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgeyJ0eXBlIjogInByb2JlIiwgImRh
dGEiOiAiYSIsICJpZCI6IDJ9CiAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgfTsKIAog
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5zZW5kQ29tbWFuZCgiRGVidWdnZXIuc2V0QnJlYWtw
b2ludCIsIHtsb2NhdGlvbjogbG9jYXRpb24sIG9wdGlvbnM6IG9wdGlvbnN9LCBmdW5jdGlvbihy
ZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tGb3JF
cnJvcihyZXNwb25zZU9iamVjdCk7Ci0gICAgICAgICAgICAgICAgdmFyIGFjdGlvbklkZW50aWZp
ZXJzID0gcmVzcG9uc2VPYmplY3QucmVzdWx0LmJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVyczsK
LSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChhY3Rpb25JZGVudGlmaWVycyBp
bnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbklkZW50aWZpZXJzLmxlbmd0aCA9PT0gMiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hvdWxkIHJlY2VpdmUgdHdvIGJyZWFr
cG9pbnQgYWN0aW9uIGlkZW50aWZpZXJzIG9uIERlYnVnZ2VyLnNldEJyZWFrcG9pbnQgY2FsbGJh
Y2suIik7CiAKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIHVzZSB0aGUgQnJl
YWtwb2ludC9CcmVha3BvaW50QWN0aW9uIG1vZGVsIG9iamVjdHMgdG8gbWFuYWdlIHRoaXM/Ci0g
ICAgICAgICAgICAgICAgaWYgKGFjdGlvbklkZW50aWZpZXJzLmxlbmd0aCA9PT0gMikgewotICAg
ICAgICAgICAgICAgICAgICBvcHRpb25zLmFjdGlvbnNbMF0uaWRlbnRpZmllciA9IGFjdGlvbklk
ZW50aWZpZXJzWzBdOwotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFjdGlvbnNbMV0uaWRl
bnRpZmllciA9IGFjdGlvbklkZW50aWZpZXJzWzFdOwotICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUnVubmluZyBicmVha3BvaW50QWN0aW9ucyB0
byB0cmlnZ2VyIHByb2JlIHNhbXBsZXMuIik7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5zZW5kQ29tbWFuZCgiUnVudGltZS5ldmFsdWF0ZSIsIHtleHByZXNzaW9uOiAiYnJlYWtwb2lu
dEFjdGlvbnMoMTIsIHt4OjEseToyfSkifSk7CiAgICAgICAgICAgICB9KTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9tb2RlbC9wcm9iZS1tYW5hZ2VyLWFkZC1y
ZW1vdmUtYWN0aW9ucy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9j
b2wvbW9kZWwvcHJvYmUtbWFuYWdlci1hZGQtcmVtb3ZlLWFjdGlvbnMtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjAxYzUzMzZlOGI5ZGMzM2QwMzc5ODdhY2I3NWVjODdmMWQ4NmE2YzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvbW9kZWwvcHJvYmUt
bWFuYWdlci1hZGQtcmVtb3ZlLWFjdGlvbnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTggQEAK
K1Rlc3RpbmcgdGhhdCB0aGUgcHJvYmUgbWFuYWdlciBwcm9wZXJseSBoYW5kbGVzIGFkZGl0aW9u
IGFuZCByZW1vdmFsIG9mIHJlbGF0ZWQgcHJvYmVzLgorCitCcmVha3BvaW50IGF1dG9jb250aW51
ZSBzdGF0ZSBjaGFuZ2VkOiB0cnVlCitQcm9iZSBzZXQgd2FzIGFkZGVkLiBOZXcgY291bnQ6IDEK
K1Byb2JlIHdpdGggaWRlbnRpZmllciAxIHdhcyBhZGRlZCB0byBwcm9iZSBzZXQuCitQcm9iZSBz
ZXQncyBwcm9iZSBjb3VudDogMQorQnJlYWtwb2ludCBhY3Rpb25zIGNoYW5nZWQuIE5ldyBjb3Vu
dDogMQorUHJvYmUgd2l0aCBpZGVudGlmaWVyIDIgd2FzIGFkZGVkIHRvIHByb2JlIHNldC4KK1By
b2JlIHNldCdzIHByb2JlIGNvdW50OiAyCitCcmVha3BvaW50IGFjdGlvbnMgY2hhbmdlZC4gTmV3
IGNvdW50OiAyCitCcmVha3BvaW50IHdhcyBhZGRlZC4KK1BBU1M6IEJyZWFrcG9pbnQgc2hvdWxk
IGJlIHJlc29sdmVkLgoraW5zaWRlIGJyZWFrcG9pbnRBY3Rpb25zIGE6KDEyKSBiOihbb2JqZWN0
IE9iamVjdF0pCitCcmVha3BvaW50IHJlc29sdmVkIHN0YXRlIGNoYW5nZWQ6IHRydWUKK0hpdCB0
ZXN0IGNoZWNrcG9pbnQgZXZlbnQgIzAgd2l0aCB0eXBlOiBwcm9iZS1vYmplY3Qtc2FtcGxlLWFk
ZGVkCitQcm9iZSB3aXRoIGlkZW50aWZpZXIgMSBhZGRlZCBzYW1wbGU6IFtvYmplY3QgT2JqZWN0
XQorSGl0IHRlc3QgY2hlY2twb2ludCBldmVudCAjMSB3aXRoIHR5cGU6IHByb2JlLW9iamVjdC1z
YW1wbGUtYWRkZWQKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29s
L21vZGVsL3Byb2JlLW1hbmFnZXItYWRkLXJlbW92ZS1hY3Rpb25zLmh0bWwgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3ItcHJvdG9jb2wvbW9kZWwvcHJvYmUtbWFuYWdlci1hZGQtcmVtb3ZlLWFjdGlv
bnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lYjM1NjBmOWI3MDk3NzU4Yjk0MzJiZDc0NTk0MjI0YzdjNjI4
ZGUyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL21v
ZGVsL3Byb2JlLW1hbmFnZXItYWRkLXJlbW92ZS1hY3Rpb25zLmh0bWwKQEAgLTAsMCArMSw1NCBA
QAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvcmVzb3Vy
Y2VzL3Byb3RvY29sLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2RlYnVnZ2Vy
L3Jlc291cmNlcy9icmVha3BvaW50LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0
ZXN0KCkKK3sKKyAgICBJbnNwZWN0b3JUZXN0LmltcG9ydFNjcmlwdCgiLi4vLi4vLi4vLi4vaW5z
cGVjdG9yLXByb3RvY29sL3Jlc291cmNlcy9wcm9iZS1oZWxwZXIuanMiKTsKKyAgICBJbnNwZWN0
b3JUZXN0LmluaXRpYWxpemVJbnNwZWN0b3JNb2RlbHMoKTsKKworICAgIHZhciBjdXJyZW50VGlj
a3MgPSAwOworICAgIGNvbnN0IGV4cGVjdGVkVGlja3MgPSAyOworCisgICAgZnVuY3Rpb24gaW5j
cmVtZW50VGljayhldmVudCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJIaXQg
dGVzdCBjaGVja3BvaW50IGV2ZW50ICMiICsgY3VycmVudFRpY2tzICsgIiB3aXRoIHR5cGU6ICIg
KyBldmVudC50eXBlKTsKKyAgICAgICAgaWYgKCsrY3VycmVudFRpY2tzID09PSBleHBlY3RlZFRp
Y2tzKQorICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICB9CisK
KyAgICBXZWJJbnNwZWN0b3IuUHJvYmUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUHJv
YmUuRXZlbnQuU2FtcGxlQWRkZWQsIGluY3JlbWVudFRpY2spOworCisgICAgUHJvYmVIZWxwZXIu
aW5zdGFsbFRyYWNpbmdMaXN0ZW5lcnMoKTsKKworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1h
bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50
LlNjcmlwdEFkZGVkLCBmdW5jdGlvbihldmVudCkgeworCisgICAgICAgIHZhciBzY3JpcHRPYmpl
Y3QgPSBldmVudC5kYXRhLnNjcmlwdDsKKworICAgICAgICBpZiAoIS9yZXNvdXJjZXNcL2JyZWFr
cG9pbnRcLmpzJC8udGVzdChzY3JpcHRPYmplY3QudXJsKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB2YXIgbG9jYXRpb24gPSBzY3JpcHRPYmplY3QuY3JlYXRlU291cmNlQ29kZUxv
Y2F0aW9uKDE4LCAwKTsKKyAgICAgICAgLy8gRm9yIHRoaXMgdGVzdCwgZmlyc3QgY3JlYXRlIHRo
ZSBicmVha3BvaW50IGFuZCBpdHMgYWN0aW9ucyBiZWZvcmUgc2VuZGluZyBhbnl0aGluZyB0byB0
aGUgYmFja2VuZC4KKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnQobG9jYXRpb24pOworICAgICAgICBicmVha3BvaW50LmF1dG9Db250aW51ZSA9IHRy
dWU7CisgICAgICAgIC8vIENyZWF0ZSB0d28gcmVsYXRlZCBhY3Rpb25zLgorICAgICAgICBmb3Ig
KHZhciBpIG9mIFswLCAxXSkKKyAgICAgICAgICAgIHZhciBhY3Rpb24gPSBicmVha3BvaW50LmNy
ZWF0ZUFjdGlvbihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludEFjdGlvbi5UeXBlLlByb2JlLCBudWxs
LCAiYSIpOworCisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkQnJlYWtw
b2ludChicmVha3BvaW50KTsKKworICAgICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuRXZlbnQuUmVzb2x2ZWRTdGF0ZURpZENoYW5nZSwgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChicmVha3BvaW50LnJl
c29sdmVkLCAiQnJlYWtwb2ludCBzaG91bGQgYmUgcmVzb2x2ZWQuIik7CisgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LnNlbmRDb21tYW5kKCJSdW50aW1lLmV2YWx1YXRlIiwge2V4cHJlc3Npb246
ICJicmVha3BvaW50QWN0aW9ucygxMiwge3g6MSx5OjJ9KSJ9KTsKKyAgICAgICAgfSk7CisgICAg
fSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAg
ICA8cD5UZXN0aW5nIHRoYXQgdGhlIHByb2JlIG1hbmFnZXIgcHJvcGVybHkgaGFuZGxlcyBhZGRp
dGlvbiBhbmQgcmVtb3ZhbCBvZiByZWxhdGVkIHByb2Jlcy48L3A+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvcmVzb3VyY2VzL3By
b2JlLWhlbHBlci5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9yZXNvdXJjZXMv
cHJvYmUtaGVscGVyLmpzCmluZGV4IDAxNDc2ZmExYzU0MWVjMWJhM2Q5MzNlNzllYTM3NWYyNWVi
MzY5M2UuLmI1YWRkZWU2YjJmNTgyNDMyMWZkYjNlZGYyOGQzNWM5ZmEzOTEwOTcgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9yZXNvdXJjZXMvcHJvYmUtaGVscGVy
LmpzCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9yZXNvdXJjZXMvcHJvYmUt
aGVscGVyLmpzCkBAIC0xMCwzICsxMCwxMTggQEAgUHJvYmVIZWxwZXIuc2ltcGxpZmllZFByb2Jl
U2FtcGxlID0gZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKICAgICAgICAgcGF5bG9hZDogZGF0YS5w
YXlsb2FkCiAgICAgfTsKIH0KKworUHJvYmVIZWxwZXIuc3RyaW5naWZ5UHJvYmVTYW1wbGUgPSBm
dW5jdGlvbihQcm9iZVNhbXBsZSkKK3sKKyAgICBjb25zb2xlLmFzc2VydChQcm9iZVNhbXBsZSBp
bnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9iZVNhbXBsZSwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5
cGUhIik7CisgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsKKyAgICAgICAgInNhbXBsZUlkIjog
UHJvYmVTYW1wbGUuc2FtcGxlSWQsCisgICAgICAgICJiYXRjaElkIjogUHJvYmVTYW1wbGUuYmF0
Y2hJZCwKKyAgICB9KTsKK30KKworUHJvYmVIZWxwZXIuaW5zdGFsbFRyYWNpbmdMaXN0ZW5lcnMg
PSBmdW5jdGlvbigpCit7CisgICAgaWYgKCFXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyIHx8
ICFXZWJJbnNwZWN0b3IucHJvYmVNYW5hZ2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTWFuYWdlci5FdmVudC5CcmVha3BvaW50QWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJCcmVha3BvaW50IHdhcyBhZGRlZC4iKTsKKyAgICB9
KTsKKworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkJyZWFrcG9pbnRSZW1vdmVkLCBmdW5j
dGlvbihldmVudCkgeworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiQnJlYWtwb2ludCB3YXMg
cmVtb3ZlZC4iKTsKKyAgICB9KTsKKworICAgIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuRXZlbnQuRGlzYWJsZWRTdGF0ZURp
ZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVu
dC50YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludCwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAg
ICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkJyZWFrcG9pbnQgZGlzYWJsZWQgc3RhdGUgY2hhbmdl
ZDogIiArIGJyZWFrcG9pbnQuZGlzYWJsZWQpOworICAgIH0pOworCisgICAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVu
dC5SZXNvbHZlZFN0YXRlRGlkQ2hhbmdlLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoYnJlYWtw
b2ludCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LCAiVW5leHBlY3RlZCBvYmpl
Y3QgdHlwZSEiKTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiQnJlYWtwb2ludCByZXNv
bHZlZCBzdGF0ZSBjaGFuZ2VkOiAiICsgYnJlYWtwb2ludC5yZXNvbHZlZCk7CisgICAgfSk7CisK
KyAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50LkV2ZW50LkF1dG9Db250aW51ZURpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC50YXJnZXQ7CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCwg
IlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2co
IkJyZWFrcG9pbnQgYXV0b2NvbnRpbnVlIHN0YXRlIGNoYW5nZWQ6ICIgKyBicmVha3BvaW50LmF1
dG9Db250aW51ZSk7CisgICAgfSk7CisKKyAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkNvbmRpdGlvbkRpZENo
YW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC50
YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludCwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisKKyAgICAg
ICAgSW5zcGVjdG9yVGVzdC5sb2coIkJyZWFrcG9pbnQgY29uZGl0aW9uIGNoYW5nZWQ6ICIgKyBi
cmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgfSk7CisKKyAgICBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkFjdGlv
bnNEaWRDaGFuZ2UsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBicmVha3BvaW50ID0g
ZXZlbnQudGFyZ2V0OworICAgICAgICBjb25zb2xlLmFzc2VydChicmVha3BvaW50IGluc3RhbmNl
b2YgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOwor
CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJCcmVha3BvaW50IGFjdGlvbnMgY2hhbmdlZC4g
TmV3IGNvdW50OiAiICsgYnJlYWtwb2ludC5hY3Rpb25zLmxlbmd0aCk7CisgICAgfSk7CisKKyAg
ICBXZWJJbnNwZWN0b3IucHJvYmVNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LlByb2JlTWFuYWdlci5FdmVudC5Qcm9iZVNldEFkZGVkLCBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICB2YXIgcHJvYmVTZXQgPSBldmVudC5kYXRhOworICAgICAgICBjb25zb2xlLmFzc2VydChw
cm9iZVNldCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9iZVNldCwgIlVuZXhwZWN0ZWQgb2Jq
ZWN0IHR5cGUhIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlByb2JlIHNldCB3YXMg
YWRkZWQuIE5ldyBjb3VudDogIiArIFdlYkluc3BlY3Rvci5wcm9iZU1hbmFnZXIucHJvYmVTZXRz
Lmxlbmd0aCk7CisgICAgfSk7CisKKyAgICBXZWJJbnNwZWN0b3IucHJvYmVNYW5hZ2VyLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlci5FdmVudC5Qcm9iZVNldFJlbW92
ZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBwcm9iZVNldCA9IGV2ZW50LmRhdGE7
CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHByb2JlU2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9y
LlByb2JlU2V0LCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKKworICAgICAgICBJbnNwZWN0
b3JUZXN0LmxvZygiUHJvYmUgc2V0IHdhcyByZW1vdmVkLiBOZXcgY291bnQ6ICIgKyBXZWJJbnNw
ZWN0b3IucHJvYmVNYW5hZ2VyLnByb2JlU2V0cy5sZW5ndGgpOworICAgIH0pOworCisgICAgV2Vi
SW5zcGVjdG9yLlByb2JlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlByb2JlLkV2ZW50
LkV4cHJlc3Npb25DaGFuZ2VkLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgcHJvYmUg
PSBldmVudC50YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHByb2JlIGluc3RhbmNlb2Yg
V2ViSW5zcGVjdG9yLlByb2JlLCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKKworICAgICAg
ICBJbnNwZWN0b3JUZXN0LmxvZygiUHJvYmUgd2l0aCBpZGVudGlmaWVyICIgKyBwcm9iZS5pZCAr
ICIgY2hhbmdlZCBleHByZXNzaW9uOiAiICsgcHJvYmUuZXhwcmVzc2lvbik7CisgICAgfSk7CisK
KyAgICBXZWJJbnNwZWN0b3IuUHJvYmUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUHJv
YmUuRXZlbnQuU2FtcGxlQWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBwcm9i
ZSA9IGV2ZW50LnRhcmdldDsKKyAgICAgICAgdmFyIHNhbXBsZSA9IGV2ZW50LmRhdGE7CisgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHByb2JlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlLCAi
VW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoc2FtcGxl
IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlU2FtcGxlLCAiVW5leHBlY3RlZCBvYmplY3Qg
dHlwZSEiKTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUHJvYmUgd2l0aCBpZGVudGlm
aWVyICIgKyBwcm9iZS5pZCArICIgYWRkZWQgc2FtcGxlOiAiICsgc2FtcGxlKTsKKyAgICB9KTsK
KworICAgIFdlYkluc3BlY3Rvci5Qcm9iZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Q
cm9iZS5FdmVudC5TYW1wbGVzQ2xlYXJlZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFy
IHByb2JlID0gZXZlbnQudGFyZ2V0OworICAgICAgICBjb25zb2xlLmFzc2VydChwcm9iZSBpbnN0
YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9iZSwgIlVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisK
KyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlByb2JlIHdpdGggaWRlbnRpZmllciAiICsgcHJv
YmUuaWQgKyAiIGNsZWFyZWQgYWxsIHNhbXBsZXMuIik7CisgICAgfSk7CisKKyAgICBXZWJJbnNw
ZWN0b3IuUHJvYmVTZXQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUHJvYmVTZXQuRXZl
bnQuUHJvYmVBZGRlZCwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIHByb2JlID0gZXZl
bnQuZGF0YTsKKyAgICAgICAgdmFyIHByb2JlU2V0ID0gZXZlbnQudGFyZ2V0OworICAgICAgICBj
b25zb2xlLmFzc2VydChwcm9iZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Qcm9iZSwgIlVuZXhw
ZWN0ZWQgb2JqZWN0IHR5cGUhIik7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHByb2JlU2V0IGlu
c3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlU2V0LCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEi
KTsKKworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUHJvYmUgd2l0aCBpZGVudGlmaWVyICIg
KyBwcm9iZS5pZCArICIgd2FzIGFkZGVkIHRvIHByb2JlIHNldC4iKTsKKyAgICAgICAgSW5zcGVj
dG9yVGVzdC5sb2coIlByb2JlIHNldCdzIHByb2JlIGNvdW50OiAiICsgcHJvYmVTZXQucHJvYmVz
Lmxlbmd0aCk7CisgICAgfSk7CisKKyAgICBXZWJJbnNwZWN0b3IuUHJvYmVTZXQuYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuUHJvYmVTZXQuRXZlbnQuUHJvYmVSZW1vdmVkLCBmdW5jdGlv
bihldmVudCkgeworICAgICAgICB2YXIgcHJvYmUgPSBldmVudC5kYXRhOworICAgICAgICB2YXIg
cHJvYmVTZXQgPSBldmVudC50YXJnZXQ7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHByb2JlIGlu
c3RhbmNlb2YgV2ViSW5zcGVjdG9yLlByb2JlLCAiVW5leHBlY3RlZCBvYmplY3QgdHlwZSEiKTsK
KyAgICAgICAgY29uc29sZS5hc3NlcnQocHJvYmVTZXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3Iu
UHJvYmVTZXQsICJVbmV4cGVjdGVkIG9iamVjdCB0eXBlISIpOworCisgICAgICAgIEluc3BlY3Rv
clRlc3QubG9nKCJQcm9iZSB3aXRoIGlkZW50aWZpZXIgIiArIHByb2JlLmlkICsgIiB3YXMgcmVt
b3ZlZCBmcm9tIHByb2JlIHNldC4iKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlByb2Jl
IHNldCdzIHByb2JlIGNvdW50OiAiICsgcHJvYmVTZXQucHJvYmVzLmxlbmd0aCk7CisgICAgfSk7
Cit9Cg==
</data>
<flag name="review"
          id="247175"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>