<?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>135142</bug_id>
          
          <creation_ts>2014-07-21 19:07:06 -0700</creation_ts>
          <short_desc>Web Inspector: Create a UI for displaying JavaScript type information</short_desc>
          <delta_ts>2014-09-02 11:27:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>burg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>syoichi</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1023857</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-21 19:07:06 -0700</bug_when>
    <thetext>JavaSciptCore now gathers more type information. This patch moves the inspector in the direction of showing more information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023858</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-07-21 19:07:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/17757293&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023859</commentid>
    <comment_count>2</comment_count>
      <attachid>235263</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-21 19:16:05 -0700</bug_when>
    <thetext>Created attachment 235263
Work In Progress

This is my work in progress towards integrating type information in the web inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025343</commentid>
    <comment_count>3</comment_count>
      <attachid>235651</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-28 17:23:12 -0700</bug_when>
    <thetext>Created attachment 235651
Work In Progress

This is a continued work in progress of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026373</commentid>
    <comment_count>4</comment_count>
      <attachid>235916</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-01 15:58:43 -0700</bug_when>
    <thetext>Created attachment 235916
work in progress



This changes a few things from the last work in progress. 
This also can&apos;t be landed until JSC merges in the ftlopt branch.
Any feedback until then is greatly appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026664</commentid>
    <comment_count>5</comment_count>
      <attachid>235980</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-04 12:26:52 -0700</bug_when>
    <thetext>Created attachment 235980
work in progress patch

This adds some optimizations to the previous patch. Specifically, we don&apos;t update type tokens while CodeMirror is being scrolled.
Also, we only show and update tokens for the viewable range in CodeMirror. We no longer traverse/annotate the entire AST because this is
not performant for sufficiently large JavaScript files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027641</commentid>
    <comment_count>6</comment_count>
      <attachid>235980</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-07 14:54:16 -0700</bug_when>
    <thetext>Comment on attachment 235980
work in progress patch

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

Fantastic work so far! I think this should be at least 3 patches:

1. BackForwardEntry.show() fix
2. Obtaining and converting the Script AST
3. Integration with the TextEditor and sidebar panels

For (2) I think it would be very beneficial to have some test coverage, especially for the special JSC modes.
I&apos;ve sprinkled some smaller comments throughout, let me know if you have questions. brrian on IRC.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:28
&gt; +    WebInspector.Object.call(this);

Add more argument assertions.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:41
&gt; +

put __proto__ here.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:43
&gt; +    get isActive()

Newline after // Public

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:71
&gt; +        if (this.isActive) {

We usually prefer to always use the private member, if there is no material difference otherwise.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:92
&gt; +            self._script._sourceCodeASTDidLoadCallback = function() {

Don&apos;t use |self| if |this| can be used instead. Also, this would be better if Script.waitForSourceCodeAST() (or similarly named) returned a promise that is fulfilled when SourceCodeAST has loaded. Then you can say 

if (!this._script.sourceCodeAST)
    this._script.waitForSourceCodeAST().then(this.insertAnnotations.bind(this));

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:96
&gt; +            if (self._script.canRequestContentFromBackend())

I think this is a protected member. Try Script.prototype.requestContent().

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:104
&gt; +        var startOffset;

We tend to use null as a sentinel when the value should always be assigned.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:116
&gt; +        var startTime = (new Date()).getTime();

Date.now()

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:128
&gt; +            callback.apply(callback, Array.prototype.slice.call(arguments));

callback(...arguments)

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:131
&gt; +        DebuggerAgent.getScriptSource(this._id, callbackWrapper.bind(this));

DebuggerAgent.getScriptSource(this._id)
    .then(function(payload) {
        this._makeAST(payload.scriptSource);
    }).then(callback);

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:195
&gt; +        if (this._sourceCodeASTDidLoadCallback &amp;&amp; typeof this._sourceCodeASTDidLoadCallback === &quot;function&quot;) {

See above comment regarding requestContent on how to do this more cleanly.

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCodeAST.js:26
&gt; +WebInspector.SourceCodeAST = function(sourceText, script) 

I prefer a name that explicitly mentions JavaScript or Script. WebInspector.SourceCode is the base class for all kinds of source files. I&apos;m more ambivalent about spelling out AbstractSyntaxTree all over the place.. :)

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCodeAST.js:29
&gt; +    this._script = script;

Lately we try to add instanceof assertions for arguments, especially in constructors. So,

console.assert(script &amp;&amp; script instanceof WebInspector.Script, script);

The trailing argument will log the offending member if the assertion fails.

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCodeAST.js:35
&gt; +        var verbose = false;

This doesn&apos;t make sense. The log statement is dead code.

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCodeAST.js:37
&gt; +            console.log(&quot;Couldn&apos;t parse JavaScript File: \n&quot; + e.message)

Use console.error

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCodeAST.js:181
&gt; +        var startTime = (new Date()).getTime();

Date.now()

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCodeAST.js:227
&gt; +            console.log(&quot;\n## RecurseTree time: &quot; + &quot;(&quot; + scriptURL + &quot;):&quot; + ((new Date().getTime()) - startRecurseTreeTime) + &quot;ms&quot;);

Does this code automatically split up work if it takes too long?

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCodeAST.js:492
&gt; +        var ret;

result

&gt; Source/WebInspectorUI/UserInterface/Views/ContentViewContainer.js:-193
&gt; -        // Hide the currently visible content view.

You should split this stuff into a separate patch.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:257
&gt; +            RuntimeAgent.enableHighFidelityTypeProfiling();

This really shouldn&apos;t be directly called from the text editor, as it is unavailable from inspector tests. Maybe put it in DebuggerManager or RuntimeManager.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1082
&gt; +

remove this extra newline

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1202
&gt; +        RuntimeAgent.getRuntimeTypesForVariablesAtOffsets(allRequests, handler.bind(this));

Again, this should go through a Manager so we can test it and possibly cache repeatedly requested tokens.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1216
&gt; +            //this.tokenTrackingController.highlightRange(candidate.expressionRange);

I know this is a WIP patch, but make sure to remove commented code eventually. :)

&gt; Source/WebInspectorUI/UserInterface/Views/TypePropertiesSection.js:43
&gt; +        for (i = 0; i &lt; structures.length; i++) {

Use for/of here and throughout this function.

&gt; Source/WebInspectorUI/UserInterface/Views/TypePropertiesSection.js:44
&gt; +            var property = {};

This could be an object literal, right?

&gt; Source/WebInspectorUI/UserInterface/Views/TypePropertiesSection.js:77
&gt; +WebInspector.TypePropertiesSection.CompareProperties = function(propertyA, propertyB)

This should probably be called PropertyComparator, so we know where it&apos;s going to be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027678</commentid>
    <comment_count>7</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-08-07 15:59:51 -0700</bug_when>
    <thetext>I agree this should be split into multiple patches. Model + Tests patch and a UI patch.

I would call the AST classes, vars, types, etc.: &quot;ScriptSyntaxTree&quot;. We don&apos;t use acronyms in types in the Web Inspector code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027901</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-08 11:55:49 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 235980 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=235980&amp;action=review
&gt; 
&gt; Fantastic work so far! I think this should be at least 3 patches:

Thanks for all the feedback, I&apos;ve made a bunch of changes b/c of it and have a few questions below.


&gt; 1. BackForwardEntry.show() fix
&gt; 2. Obtaining and converting the Script AST
&gt; 3. Integration with the TextEditor and sidebar panels

1. BackForwardEntry.show() fix was actually landed in a separate patch, I accidentally left it in this diff.
2. I&apos;ve created a new bug for the AST portion.
3. I&apos;m leaving this bug open for the User Interface portions of this feature.


&gt; For (2) I think it would be very beneficial to have some test coverage, especially for the special JSC modes.

My questions are mainly about testing. How should I test the protocol portion of this? 
I think it&apos;s also a good idea to test the AST, which can be done pretty easily.


&gt; Does this code automatically split up work if it takes too long?

No, but I&apos;ve limited the AST nodes we request type information to approximately the nodes that are visible from within the text editor, so this should never take long.


&gt; &gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:257
&gt; &gt; +            RuntimeAgent.enableHighFidelityTypeProfiling();
&gt; 
&gt; This really shouldn&apos;t be directly called from the text editor, as it is unavailable from inspector tests. Maybe put it in DebuggerManager or RuntimeManager.

So should I use RuntimeManager as an interface to RuntimeAgent.X where X are the different protocol methods I&apos;ve defined? If so, how do I test these new protocol methods?


&gt; &gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1202
&gt; &gt; +        RuntimeAgent.getRuntimeTypesForVariablesAtOffsets(allRequests, handler.bind(this));
&gt; 
&gt; Again, this should go through a Manager so we can test it and possibly cache repeatedly requested tokens.

I do some intelligent caching on the JSC side of things based on text offsets. I don&apos;t think we can safely cache inside the inspector because type information for a variable at a given source code location can change at anytime.


Thanks for all the input. I&apos;ve changed a bunch of because of it. I&apos;ll have another patch up today (for this bug and for the AST: https://bugs.webkit.org/show_bug.cgi?id=135763).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027917</commentid>
    <comment_count>9</comment_count>
      <attachid>236298</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-08 12:40:19 -0700</bug_when>
    <thetext>Created attachment 236298
work in progress

Brian&apos;s comments taken into account. A few other updates since the last patch, which are mostly performance optimizations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027918</commentid>
    <comment_count>10</comment_count>
      <attachid>236298</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-08 12:48:33 -0700</bug_when>
    <thetext>Comment on attachment 236298
work in progress

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:173
&gt; +        var start; 

This should be set to null.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:260
&gt; +            RuntimeAgent.enableHighFidelityTypeProfiling();

I think the correct thing to do here is not to recompile all JS functions. Calling this function will potentially recompile everything. I think the correct action to take is to manipulate the setting, and when the Inspector closes, it should check this setting, and if it&apos;s false, it should call disableHighFidelityTypeProfiling.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1040
&gt; +        else if (this._typeTokenAnnotator &amp;&amp; this._typeTokenAnnotator.isActive)

Maybe this shouldn&apos;t be a mode that overrides other modes? Because this will almost certainly always be enabled when viewing script resources.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1197
&gt; +        var offset;

Also set to null.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1247
&gt; +        //this._popover = this._popover || new WebInspector.Popover(this);

I&apos;ve had little luck with this line producing the correct results. In my testing, the nicest UI is simply to create a new popover every time.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1502
&gt; +    _prettyPrint: function(pretty)

Is this okay to override?

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1524
&gt; +        if (this._isTrackingScrollEventsForTypeTokenAnnotator)

I still need to create a way to remove these listeners, I&apos;ve just been lazy about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028702</commentid>
    <comment_count>11</comment_count>
      <attachid>236493</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-12 19:45:49 -0700</bug_when>
    <thetext>Created attachment 236493
work in progress

I think this is pretty close to a patch I want to land, feedback is greatly appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029520</commentid>
    <comment_count>12</comment_count>
      <attachid>236493</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-15 16:41:17 -0700</bug_when>
    <thetext>Comment on attachment 236493
work in progress

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:30
&gt; +    console.assert(sourceCodeTextEditor &amp;&amp; sourceCodeTextEditor instanceof WebInspector.SourceCodeTextEditor &amp;&amp; script);

I prefer assertions to deal with one argument at a time if it&apos;s routine stuff like this.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:148
&gt; +        var self = this;

you can pass the thisObject as the last parameter to forEach and avoid this capture.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:155
&gt; +                    param._attachments._typePopoverTitle = &quot;Type information for variable: &quot; + param.name;

WebInspector.UIString (here and in other popovers, tooltips, etc)

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:160
&gt; +            if (!node._attachments._typeToken &amp;&amp; node._attachments._returnTypes &amp;&amp; node._attachments._returnTypes.displayTypeName &amp;&amp; (scriptSyntaxTree.containsNonEmptyReturnStatement(node.body) || node._attachments._returnTypes.displayTypeName !== &quot;Undefined&quot;)) {

This condition is kinda unwieldy. It would be better to split it into some bools or have early exits:

var functionReturnType = node._attachments._returnTypes;
if (node._attachments._typeToken || !functionReturnType)
    break;

if (functionReturnType.displayTypeName &amp;&amp; (functionReturnType.displayTypeName !== &quot;Undefined&quot; || ...) {
    ...
}

break;

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:183
&gt; +            start = { line: location.lineNumber, ch: location.columnNumber };

Nit: house style is {line: ..., ch: ...}

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:189
&gt; +        if (isReturn) {

I had to read through a lot of code to figure out why it&apos;s called isReturn and what&apos;s different. I would recommend something like shouldInsertAfterParameterList or something more wordy. In the comment below, maybe illustrate the adjustment that happens. As I imagine it, it&apos;s something like

function bar(a, b, c) [type-bubble] {
...
}

or 

foo: get function() [type-bubble] { return ... }

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:195
&gt; +        // Note: CodeMirror bookmarks render to the left of the character they&apos;re being displayed next to; that is why right margin checks the current offset.

Is this true in general (i.e., for RTL case too)? I don&apos;t think this is an issue in the current usage, but you might want to fix the comment.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:197
&gt; +        var shouldHaveLeftMargin = offset !== 0 &amp;&amp; !isSpaceRegexp.test(sourceString[offset - 1]);

nice.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:208
&gt; +        var Types = WebInspector.ScriptSyntaxTree.NodeType;

I would inline this into case labels.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:240
&gt; +    _getNewOffsetForReturnStatement: function(node, offset, sourceString)

following from above, this could use a better name, like findOffsetAfterParameters or something.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:244
&gt; +        // All this code is just a way to find this parenthesis while ignoring comments.

I don&apos;t remember much about the esprima API, but ostensibly we have to do this because it doesn&apos;t track positions for concrete syntax (like parens). Does it keep track of comments?

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:249
&gt; +        while ((sourceString[offset] !== &quot;)&quot; || shouldIgnore) &amp;&amp; offset &lt; sourceString.length) {

I would use &apos;i&apos; instead of offset, unless it&apos;s something like a unicode codepoint offset (where the chars and bytes are different things).

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:262
&gt; +            WebInspector.showJavaScriptTypeInformationSetting.value = true;

you could update this outside of the branches.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:266
&gt; +            // to call it here, we would hava JavaScriptCore compile out all the necesessary type profiilng information,

typos.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:282
&gt; +        titleElement.className = &quot;title&quot;;

Eventually, should convert to CSS class name constants.

&gt; Source/WebInspectorUI/UserInterface/Views/TypePropertiesSection.js:2
&gt; + * Copyright (C) 2013 Apple Inc. All rights reserved.

2014

&gt; Source/WebInspectorUI/UserInterface/Views/TypePropertiesSection.js:43
&gt; +        var structures = this.types.globalStructures ? this.types.globalStructures : this.types.localStructures;

you could do: (applies various places)

var structures = this.types.globalStructures || this.types.localStructures;

&gt; Source/WebInspectorUI/UserInterface/Views/TypePropertiesSection.js:160
&gt; +                name: this.property.structure.prototypeStructure.constructorName + &quot; (Prototype)&quot;,

UIString?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029630</commentid>
    <comment_count>13</comment_count>
      <attachid>236493</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-16 11:29:14 -0700</bug_when>
    <thetext>Comment on attachment 236493
work in progress

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:155
&gt;&gt; +                    param._attachments._typePopoverTitle = &quot;Type information for variable: &quot; + param.name;
&gt; 
&gt; WebInspector.UIString (here and in other popovers, tooltips, etc)

I need to create a more abstracted way of forming popover titles here. (Applies for all the other places I inline titles).

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:160
&gt;&gt; +            if (!node._attachments._typeToken &amp;&amp; node._attachments._returnTypes &amp;&amp; node._attachments._returnTypes.displayTypeName &amp;&amp; (scriptSyntaxTree.containsNonEmptyReturnStatement(node.body) || node._attachments._returnTypes.displayTypeName !== &quot;Undefined&quot;)) {
&gt; 
&gt; This condition is kinda unwieldy. It would be better to split it into some bools or have early exits:
&gt; 
&gt; var functionReturnType = node._attachments._returnTypes;
&gt; if (node._attachments._typeToken || !functionReturnType)
&gt;     break;
&gt; 
&gt; if (functionReturnType.displayTypeName &amp;&amp; (functionReturnType.displayTypeName !== &quot;Undefined&quot; || ...) {
&gt;     ...
&gt; }
&gt; 
&gt; break;

Yeah. I&apos;m going to do a variation of this.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:189
&gt;&gt; +        if (isReturn) {
&gt; 
&gt; I had to read through a lot of code to figure out why it&apos;s called isReturn and what&apos;s different. I would recommend something like shouldInsertAfterParameterList or something more wordy. In the comment below, maybe illustrate the adjustment that happens. As I imagine it, it&apos;s something like
&gt; 
&gt; function bar(a, b, c) [type-bubble] {
&gt; ...
&gt; }
&gt; 
&gt; or 
&gt; 
&gt; foo: get function() [type-bubble] { return ... }

I agree, a comment like this is a good addition. 
Renaming is also apt.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:244
&gt;&gt; +        // All this code is just a way to find this parenthesis while ignoring comments.
&gt; 
&gt; I don&apos;t remember much about the esprima API, but ostensibly we have to do this because it doesn&apos;t track positions for concrete syntax (like parens). Does it keep track of comments?

Yes, you can keep track of comments in esprima by passing it an option when parsing. But I don&apos;t think it&apos;s worth us doing this unless we need it for another reason.
I&apos;m not even sure if having comments on the AST will help us here, because I remember looking at this option and I think it just tacks comments onto different AST nodes, I&apos;m not sure how in depth it tracks those comments&apos; ranges.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:249
&gt;&gt; +        while ((sourceString[offset] !== &quot;)&quot; || shouldIgnore) &amp;&amp; offset &lt; sourceString.length) {
&gt; 
&gt; I would use &apos;i&apos; instead of offset, unless it&apos;s something like a unicode codepoint offset (where the chars and bytes are different things).

It&apos;s not for unicode characters, but I kind of like using offset here, why do you prefer &apos;i&apos;? To me, it&apos;s more obvious by reading it that we&apos;re dealing with a text offset in the source code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029631</commentid>
    <comment_count>14</comment_count>
      <attachid>236719</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-16 12:01:53 -0700</bug_when>
    <thetext>Created attachment 236719
patch

Patch w/ Brian&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030448</commentid>
    <comment_count>15</comment_count>
      <attachid>236719</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-20 21:50:46 -0700</bug_when>
    <thetext>Comment on attachment 236719
patch

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

Mostly style comments so far.

&gt; Source/WebInspectorUI/UserInterface/Controllers/CodeMirrorTokenTrackingController.js:53
&gt;      JavaScriptExpression: &quot;javascript-expression&quot;,
&gt; -    MarkedTokens: &quot;marked-tokens&quot;
&gt; +    MarkedTokens: &quot;marked-tokens&quot;,
&gt; +    JavaScriptTypeInformation: &quot;javascript-type-information&quot;

Nit, put the two JavaScript* ones next to eachother.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:98
&gt; +        var scriptSyntaxTree = this._script._scriptSyntaxTree;

Nit: This should not reach into scriptSyntaxTree directly. You should add a public getter or always use the request version.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:99
&gt; +        var sourceID = this._script.id;

Nit: This is not used until later on. I&apos;d move it down with the other variables.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:115
&gt; +        var codeMirror = this._sourceCodeTextEditor._codeMirror;
&gt; +        var visibleRange = codeMirror.getViewport();

This does a lot of CodeMirror access. Perhaps it should be refactored.

Most of the other classes that make heavy use of CodeMirror we keep inside of TextEditor, so if we do have to replace the 3rd party editor, CodeMirror objects / APIs doesn&apos;t leak much outside of it. For example, we have a number of CodeMirror* classes, which TextEditor creates internally. This could probably be another of of them. The tricky bit is getting the CodeMirror editor.

    CodeMirrorTypeAnnotator which just needs:
      - CodeMirror (passed directly instead of reaching into TextEditor)
      - SourceCodeTextEditor (because we need a SourceCode)

This would be the first time a SourceCodeTextEditor touches &quot;CodeMirror&quot; but it would be limited to just getting the object. SourceCodeTextEditor could create as needed.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:127
&gt; +        if (sourceMap) {
&gt; +            startOffset = sourceMap.formattedToOriginalOffset(Math.max(visibleRange.from - 1, 0), 0);
&gt; +            endOffset = sourceMap.formattedToOriginalOffset(visibleRange.to - 1, 0);
&gt; +        } else {
&gt; +            startOffset = codeMirror.getDoc().indexFromPos({line: visibleRange.from, ch: 0});
&gt; +            endOffset = codeMirror.getDoc().indexFromPos({line: visibleRange.to, ch: 0});
&gt; +        }
&gt; +

Maybe we should add a few lines of padding to the visibleRange. Would that improve the UI while scrolling?

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:131
&gt; +            // Because this is an asynchronous call, we could have been deactivated before the callback function is called.

Nit: The first half of the comment is unnecessary.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:136
&gt; +            allNodesInRange.forEach(this._insertTypeTokensForEachNode, this);
&gt; +            allNodesInRange.forEach(this._updateTypeTokensForEachNode);

Heh, lets pass &quot;this&quot; to the update function as well, least we forget in the future. It has no cost.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:157
&gt; +                if (!param._attachments._typeToken &amp;&amp; param._attachments._types &amp;&amp; param._attachments._types.displayTypeName)
&gt; +                    this._insertToken(param.range[0], param, false, WebInspector.TypeTokenView.TitleType.variable, param.name);

Now that I see _attachments properties used, I think we should modify the property names.

    // These are attachments created by ScriptSyntaxTree itself, they don&apos;t need underscores.
    param._attachments._types =&gt; param.attachments.types
    param._attachments._returnTypes =&gt; param.attachments.returnTypes

    // These are attachments created by objects outside of ScriptSyntaxTree, double underscore them.
    param._attachments._typeToken =&gt; param.attachments.__typeToken

This is a somewhat uncommon style we use, but I think it provides clarity.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:183
&gt; +        var start = null; 

Declare &quot;var offset&quot; here. Otherwise you are leaking &quot;offset&quot; into the global scope!

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:184
&gt; +        var location; 

Style: inline the var where used.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:246
&gt; +            if (isSingleLineComment &amp;&amp; (sourceString[offset] === &quot;\n&quot; || (sourceString[offset] === &quot;\r&quot; &amp;&amp; sourceString[offset + 1] === &quot;\n&quot;))) {
&gt; +                if (sourceString[offset] === &quot;\r&quot;)
&gt; +                    offset++;
&gt; +                isSingleLineComment = false;
&gt; +                shouldIgnore = false;

I think this may be slightly incorrect but could be simplified.

Looking at the ES5 Grammar:
&lt;http://www.ecma-international.org/ecma-262/5.1/#sec-7.3&gt;
&lt;http://www.ecma-international.org/ecma-262/5.1/#sec-7.4&gt;

&gt;    SingleLineComment ::
&gt;        // SingleLineCommentChars?
&gt;
&gt;    SingleLineCommentChars ::
&gt;        SingleLineCommentChar SingleLineCommentChars?
&gt;
&gt;    SingleLineCommentChar ::
&gt;        SourceCharacter but not LineTerminator
&gt;
&gt;    LineTerminator ::
&gt;        &lt;LF&gt;
&gt;        &lt;CR&gt;
&gt;        &lt;LS&gt;
&gt;        &lt;PS&gt;

&gt;    Table 3 — Line Terminator Characters
&gt;    \u000A	Line Feed         	&lt;LF&gt;
&gt;    \u000D	Carriage Return    	&lt;CR&gt;
&gt;    \u2028	Line separator  	&lt;LS&gt;
&gt;    \u2029	Paragraph separator	&lt;PS&gt;

So instead of looking for &lt;LF&gt; || &lt;CR&gt;&lt;LF&gt; we should just look for &lt;LF&gt; || &lt;CR&gt; || &lt;LS&gt; || &lt;PS&gt; and move on.

    function isLineTerminator(c) {
        return c === &quot;\n&quot; || c === &quot;\r&quot; || c === &quot;\u2028&quot; || c === &quot;\u2028&quot;;
    }

    if (isSingleLineComment &amp;&amp; isLineTerminator(sourceString[offset])) {
        isSingleLineComment = false;
        shouldIgnore = false;
    } ...

You don&apos;t need to special case anything after the terminator since it will just naturally not be &quot;)&quot;.

&gt; Source/WebInspectorUI/UserInterface/Images/NavigationItemTypes.svg:3
&gt; +&lt;svg version=&quot;1.1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 15 15&quot;&gt;

The other button is 13x13 this is 15x15, seems  bit wide. You may be able to adjust appropriately and make a thinner T.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:112
&gt; +        if (this._typeTokenAnnotator)
&gt; +            this._typeTokenAnnotator.resume();

How about start / stop instead of resume / pause?

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:420
&gt; +        if (this._codeMirror.getMode().name === &quot;javascript&quot;)
&gt; +            this._makeTypeTokenAnnotator();

This should not check this._codeMirror. That is a layering violation.

Looking at the implementation of this function, just call it and it will return if there are no scripts.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1218
&gt; +        if (this._formatterSourceMap)
&gt; +            offset = this._formatterSourceMap.formattedToOriginalOffset(range.start.line, range.start.ch);
&gt; +        else
&gt; +            offset = this.tokenTrackingController._codeMirror.getDoc().indexFromPos({line: range.start.line, ch: range.start.ch});

This should not touch _codeMirror. That is a layering violation.

We should just put some method on TextEditor to get the offset given a (line, ch) pair:

    offsetForPosition: function(pos)
    {
        return this._codeMirror.getDoc().indexFromPos(pos);
    }

That you can call from here:

    offset = this.offsetForPosition(range.start);

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1513
&gt; +    _prettyPrint: function(pretty)
&gt; +    {
&gt; +        WebInspector.TextEditor.prototype._prettyPrint.call(this, pretty);

We should rename this to &quot;prettyPrint&quot; and put it in a &quot;Protected&quot; section now that we are overriding it.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1522
&gt; +        if (!this._sourceCode.scripts.length)
&gt; +            return;

This should return immediately if the feature is not supported by the backend.

    if (!RuntimeAgent.getRuntimeTypesForVariablesAtOffsets)
        return;

For example, _typeTokenAnnotator should always be null when inspecting iOS 6 / 7 which does not support this feature. Otherwise when we got to a RuntimeAgent call we would throw an exception.

In fact, ScriptSyntaxTree.prototype.updateTypes should assert that RuntimeAgent.getRuntimeTypesForVariablesAtOffsets exists.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1524
&gt; +        this._typeTokenAnnotator = new WebInspector.TypeTokenAnnotator(this, this._sourceCode.scripts[0]);

We should add a FIXME about making this work with a Resource with multiple scripts. E.g. HTML with multiple &lt;script&gt; blocks.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1543
&gt; +    _enableScrollEventsForTypeTokenAnnotator: function()
&gt; +    {
&gt; +        // Pause updating type tokens while scrolling to prevent frame loss.
&gt; +        var scrollHandler = this._makeTypeTokenScrollEventHandler();
&gt; +        this._currentTypeTokenScrollHandler = scrollHandler;
&gt; +        this._codeMirror.on(&quot;scroll&quot;, scrollHandler);
&gt; +    },
&gt; +
&gt; +    _disableScrollEventsForTypeTokenAnnotator:function()
&gt; +    {
&gt; +        this._codeMirror.off(&quot;scroll&quot;, this._currentTypeTokenScrollHandler);
&gt; +        this._currentTypeTokenScrollHandler = null;
&gt; +    },

You should be able to put all of this scroll timer logic entirely in the TypeAnnotator (which has a reference to the CodeMirror object). Start/Stop can add/remove the event listener detection.

&gt; Source/WebInspectorUI/UserInterface/Views/TextResourceContentView.js:57
&gt; +    this._showTypesButtonNavigationItem = new WebInspector.ActivateButtonNavigationItem(&quot;show-types&quot;, toolTipTypes, activatedToolTipTypes, &quot;Images/NavigationItemTypes.svg&quot;, 16, 16);

How does this look in Legacy (e.g. Mavericks)? I think it is probably incorrect to have 16x16 here despite the image being 15x15.

To test legacy, bump the ImageUtilities global number and set &quot;isLegacyMac&quot; to true in Platform.js. Recompile + test.

&gt; Source/WebInspectorUI/UserInterface/Views/TextResourceContentView.js:61
&gt; +    WebInspector.showJavaScriptTypeInformationSetting.addEventListener(WebInspector.Setting.Event.Changed, this._showJavaScriptTypeInformationSettingChanged, this);

You should duplicate all of this code for Views/ScriptContentView.js and probably also Views/TextContentView.js. Even if the buttons are always disabled, at least they will be consistent for now.

&gt; Source/WebInspectorUI/UserInterface/Views/TextResourceContentView.js:211
&gt; +        this._showTypesButtonNavigationItem.enabled = !!this._textEditor._typeTokenAnnotator;

Instead of reaching in and checking the private ivar, it would be nice to call a function like &quot;canBeFormatted&quot;. How about &quot;canAnnotateTypes&quot; or &quot;canShowTypeAnnotations&quot;. The implementation of that can just check if !!typeTokenAnnotator.

&gt; Source/WebInspectorUI/UserInterface/Views/TypePropertiesSection.js:86
&gt; +    if (a.indexOf(&quot;__proto__&quot;) !== -1)
&gt; +        return 1;
&gt; +    if (b.indexOf(&quot;__proto__&quot;) !== -1)
&gt; +        return -1;

Why the indexOf proto check? What would be an example of two strings being compared in here?

Likewise, I think we could write a String.prototype.endsWith in Utilities.js that may be more efficient than indexOf if this really is an ends with check.

&gt; Source/WebInspectorUI/UserInterface/Views/TypePropertiesSection.js:91
&gt; +    // if used elsewhere make sure to
&gt; +    //  - convert a and b to strings (not needed here, properties are all strings)

I suppose you can remove this comment.

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.css:34
&gt; +    font-size: 92%;

This is unusual. We would typically provide an explicit px size if possible. I assume this is snapping to a particular size anyways.

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:35
&gt; +    span.style.marginRight = (shouldHaveRightMargin ? &quot;5px&quot; : &quot;0px&quot;);
&gt; +    span.style.marginLeft = (shouldHaveLeftMargin ? &quot;5px&quot; : &quot;0px&quot;);

These should be CSS classes.

    .left-spacing {
        margin: 5px;
    }

    .right-spacing {
        margin: 5px;
    }

Then on the JS side:

    if (shouldHaveRightMargin)
        span.classList.add(&quot;right-spacing&quot;);
    if (shouldHaveLeftMargin)
        span.classList.add(&quot;left-spacing&quot;);

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:51
&gt; +        titleString = WebInspector.UIString(&quot;Type information for variable&quot;) + &quot;: &quot; + functionOrVariableName;

This should be a full format string so it can be localized for Left-to-Right:

    WebInspector.UIString(&quot;Type information for variable: %s&quot;).format(functionOrVariableName);

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:55
&gt; +        titleString = WebInspector.UIString(&quot;Return type information for function&quot;);
&gt; +        if (functionOrVariableName)
&gt; +            titleString += &quot;: &quot; + functionOrVariableName;

Likewise. This one could be two strings.

    WebInspector.UIString(&quot;Return type information for function: %s&quot;).format(functionOrVariableName);
    WebInspector.UIString(&quot;Return type information for anonymous function&quot;)

If any of these titles are too long we can come up with shorter names.

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:64
&gt; +WebInspector.TypeTokenView.TitleType = {
&gt; +    variable: &quot;title-type-variable&quot;,
&gt; +    returnStatement: &quot;title-type-return-statement&quot;
&gt; +};

Style: &quot;Variable&quot; and &quot;ReturnStatement&quot;.

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:73
&gt; +WebInspector.TypeTokenView.Colors = {
&gt; +    purple: &quot;#cc3bbf&quot;,
&gt; +    blue: &quot;#3b70e2&quot;,
&gt; +    red: &quot;#df352e&quot;,
&gt; +    green: &quot;#76ae1d&quot;,
&gt; +    gray: &quot;#7e7e7e&quot;,
&gt; +    orange: &quot;#ed8400&quot;
&gt; +};

Ideally these would be meaningful class names in CSS and rgb(...) colors.

    .fallback {
        background-color: rgb(118, 174, 29)
    }

    .number {
        color: rgb(59, 112, 226)
    }
    ...

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:85
&gt; +WebInspector.TypeTokenView.ColorForType = {
&gt; +    &quot;String&quot;: WebInspector.TypeTokenView.Colors.red,
&gt; +    &quot;Function&quot;: WebInspector.TypeTokenView.Colors.purple, 
&gt; +    &quot;Number&quot;: WebInspector.TypeTokenView.Colors.blue,
&gt; +    &quot;Integer&quot;: WebInspector.TypeTokenView.Colors.blue,
&gt; +    &quot;Undefined&quot;: WebInspector.TypeTokenView.Colors.gray,
&gt; +    &quot;Null&quot;: WebInspector.TypeTokenView.Colors.gray,
&gt; +    &quot;(?)&quot;: WebInspector.TypeTokenView.Colors.gray,
&gt; +    &quot;Boolean&quot;: WebInspector.TypeTokenView.Colors.purple,
&gt; +    &quot;(many)&quot;: WebInspector.TypeTokenView.Colors.orange
&gt; +};

NOTE: This is the only place in the inspector where we have a list matching what the backend produces. We may want a comment here saying this matches the types produced by JavaScriptCore.

And instead of referencing color values here, these would be class names.

    WebInspector.TypeTokenView.ClassForType = {
        &quot;String&quot;: &quot;string&quot;,
        &quot;Function&quot;: &quot;function&quot;,
        &quot;Number&quot;: &quot;number&quot;,
        &quot;Integer&quot;: &quot;number&quot;,
        ...
    }

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:99
&gt; +        this.element.style.backgroundColor = WebInspector.TypeTokenView.ColorForType[hashString] || WebInspector.TypeTokenView.Colors.green;

And this would be setting the element&apos;s class.

    var className = WebInspector.TypeTokenView.ClassForType[hashString] || &quot;fallback&quot;;
    this.element.classList.add(className);

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:106
&gt; +        var self = this;

Style: You could avoid self = this with bind.

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:109
&gt; +        this.element.onmouseover = function() 

Style: Where possible we use addEventListener.

    this.element.addEventListener(&quot;mouseover&quot;, function(event) {
        ...
    });

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:121
&gt; +                timeoutID = setTimeout(showPopoverAfterDelay, 350);

Might be nice to make this a constant. Most of our timeouts are.

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:124
&gt; +        this.element.onmouseout = function() 

Ditto. RE: addEventListener.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030540</commentid>
    <comment_count>16</comment_count>
      <attachid>236719</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-21 13:19:29 -0700</bug_when>
    <thetext>Comment on attachment 236719
patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:127
&gt;&gt; +
&gt; 
&gt; Maybe we should add a few lines of padding to the visibleRange. Would that improve the UI while scrolling?

CodeMirror already does this padding for us. Maybe we can add more padding on top of that, but I don&apos;t think it&apos;s necessary.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:183
&gt;&gt; +        var start = null; 
&gt; 
&gt; Declare &quot;var offset&quot; here. Otherwise you are leaking &quot;offset&quot; into the global scope!

It&apos;s passed in as a parameter to the function.

&gt;&gt; Source/WebInspectorUI/UserInterface/Images/NavigationItemTypes.svg:3
&gt;&gt; +&lt;svg version=&quot;1.1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 15 15&quot;&gt;
&gt; 
&gt; The other button is 13x13 this is 15x15, seems  bit wide. You may be able to adjust appropriately and make a thinner T.

Yeah I agree.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:112
&gt;&gt; +            this._typeTokenAnnotator.resume();
&gt; 
&gt; How about start / stop instead of resume / pause?

I personally like resume/pause more than start/stop because to me, it implies I&apos;m not getting rid of data, but just pausing the UI, where start/stop to me imply that some backing data is being destroyed, which isn&apos;t the case.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/TypePropertiesSection.js:86
&gt;&gt; +        return -1;
&gt; 
&gt; Why the indexOf proto check? What would be an example of two strings being compared in here?
&gt; 
&gt; Likewise, I think we could write a String.prototype.endsWith in Utilities.js that may be more efficient than indexOf if this really is an ends with check.

Actually. We don&apos;t need this at all. We&apos;re never passed an __proto__ property, unless a user specifies that one exists, and even then, I think it would just be converted in the passed in Object from JSC to prototypeStructure.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:99
&gt;&gt; +        this.element.style.backgroundColor = WebInspector.TypeTokenView.ColorForType[hashString] || WebInspector.TypeTokenView.Colors.green;
&gt; 
&gt; And this would be setting the element&apos;s class.
&gt; 
&gt;     var className = WebInspector.TypeTokenView.ClassForType[hashString] || &quot;fallback&quot;;
&gt;     this.element.classList.add(className);

Right. The annoying thing here, though, is that we&apos;d have to make sure to always remove the old class too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030541</commentid>
    <comment_count>17</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-21 13:23:12 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:246
&gt; &gt; +            if (isSingleLineComment &amp;&amp; (sourceString[offset] === &quot;\n&quot; || (sourceString[offset] === &quot;\r&quot; &amp;&amp; sourceString[offset + 1] === &quot;\n&quot;))) {
&gt; &gt; +                if (sourceString[offset] === &quot;\r&quot;)
&gt; &gt; +                    offset++;
&gt; &gt; +                isSingleLineComment = false;
&gt; &gt; +                shouldIgnore = false;
&gt; 
&gt; I think this may be slightly incorrect but could be simplified.
&gt; 
&gt; Looking at the ES5 Grammar:
&gt; &lt;http://www.ecma-international.org/ecma-262/5.1/#sec-7.3&gt;
&gt; &lt;http://www.ecma-international.org/ecma-262/5.1/#sec-7.4&gt;
&gt; 
&gt; &gt;    SingleLineComment ::
&gt; &gt;        // SingleLineCommentChars?
&gt; &gt;
&gt; &gt;    SingleLineCommentChars ::
&gt; &gt;        SingleLineCommentChar SingleLineCommentChars?
&gt; &gt;
&gt; &gt;    SingleLineCommentChar ::
&gt; &gt;        SourceCharacter but not LineTerminator
&gt; &gt;
&gt; &gt;    LineTerminator ::
&gt; &gt;        &lt;LF&gt;
&gt; &gt;        &lt;CR&gt;
&gt; &gt;        &lt;LS&gt;
&gt; &gt;        &lt;PS&gt;
&gt; 
&gt; &gt;    Table 3 — Line Terminator Characters
&gt; &gt;    \u000A	Line Feed         	&lt;LF&gt;
&gt; &gt;    \u000D	Carriage Return    	&lt;CR&gt;
&gt; &gt;    \u2028	Line separator  	&lt;LS&gt;
&gt; &gt;    \u2029	Paragraph separator	&lt;PS&gt;
&gt; 
&gt; So instead of looking for &lt;LF&gt; || &lt;CR&gt;&lt;LF&gt; we should just look for &lt;LF&gt; || &lt;CR&gt; || &lt;LS&gt; || &lt;PS&gt; and move on.
&gt; 
&gt;     function isLineTerminator(c) {
&gt;         return c === &quot;\n&quot; || c === &quot;\r&quot; || c === &quot;\u2028&quot; || c === &quot;\u2028&quot;;
&gt;     }
&gt; 
&gt;     if (isSingleLineComment &amp;&amp; isLineTerminator(sourceString[offset])) {
&gt;         isSingleLineComment = false;
&gt;         shouldIgnore = false;
&gt;     } ...
&gt; 
&gt; You don&apos;t need to special case anything after the terminator since it will just naturally not be &quot;)&quot;.

Yeah, this is much nicer. Thanks for looking into the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030547</commentid>
    <comment_count>18</comment_count>
      <attachid>236719</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-08-21 13:45:46 -0700</bug_when>
    <thetext>Comment on attachment 236719
patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:77
&gt; +    &quot;Function&quot;: WebInspector.TypeTokenView.Colors.purple, 

Beware of trailing whitespace. There is much of it in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030550</commentid>
    <comment_count>19</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-21 13:54:12 -0700</bug_when>
    <thetext>(In reply to comment #16)

&gt; Actually. We don&apos;t need this at all. We&apos;re never passed an __proto__ property, unless a user specifies that one exists, and even then, I think it would just be converted in the passed in Object from JSC to prototypeStructure.

Scratch that, __proto__ will show up in the properties for Object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030567</commentid>
    <comment_count>20</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-08-21 15:15:22 -0700</bug_when>
    <thetext>Those color names should be Title-case. And any other named enum like it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030578</commentid>
    <comment_count>21</comment_count>
      <attachid>236942</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-21 16:12:34 -0700</bug_when>
    <thetext>Created attachment 236942
patch

Another WIP patch, but this should be closer to what will land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030617</commentid>
    <comment_count>22</comment_count>
      <attachid>236951</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-21 18:11:26 -0700</bug_when>
    <thetext>Created attachment 236951
patch

Fixed a bug from previous patch, and more work for getting closer to landing the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031474</commentid>
    <comment_count>23</comment_count>
      <attachid>236951</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-26 14:01:23 -0700</bug_when>
    <thetext>Comment on attachment 236951
patch

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

This patch looks great. One more with a ChangeLog should probably be good enough to land! Are there any remaining issues you are aware of?

&gt; Source/WebInspectorUI/UserInterface/Views/ScriptContentView.js:67
&gt; +    this._showTypesButtonNavigationItem = new WebInspector.ActivateButtonNavigationItem(&quot;show-types&quot;, toolTipTypes, 
&gt; +        activatedToolTipTypes, &quot;Images/NavigationItemTypes.svg&quot;, showTypesImageSize, showTypesImageSize);

Style: One line.

Also, still missing this in TextContentView.js.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1519
&gt; +        // Make sure JavaScriptCore supports type profiling.

Nit: This comment is unnecessary. And it isn&apos;t so much &quot;JavaScriptCore&quot; as whatever backend the inspector is talking to.

&gt; Source/WebInspectorUI/UserInterface/Views/TextEditor.js:673
&gt; +    visibleRangeStartOffset: function()
&gt; +    {
&gt; +        var startOffset = null;
&gt; +        var visibleRange = this._codeMirror.getViewport();
&gt; +
&gt; +        if (this._formatterSourceMap)
&gt; +            startOffset = this._formatterSourceMap.formattedToOriginalOffset(Math.max(visibleRange.from - 1, 0), 0);
&gt; +        else
&gt; +            startOffset = this._codeMirror.getDoc().indexFromPos({line: visibleRange.from, ch: 0});
&gt; +
&gt; +        return startOffset;
&gt; +    },
&gt; +
&gt; +    visibleRangeEndOffset: function()
&gt; +    {
&gt; +        var endOffset = null;
&gt; +        var visibleRange = this._codeMirror.getViewport();
&gt; +
&gt; +        if (this._formatterSourceMap)
&gt; +            endOffset = this._formatterSourceMap.formattedToOriginalOffset(visibleRange.to - 1, 0);
&gt; +        else
&gt; +            endOffset = this._codeMirror.getDoc().indexFromPos({line: visibleRange.to, ch: 0});
&gt; +
&gt; +        return endOffset;
&gt; +    },

Seems like we could replace this with one function that gets both the start and end offset at once to reduce the duplicated logic.

    visibleRangeOffsets: function()
    {
        ...
        return {startOffset: startOffset, endOffset: endOffset};
    }

The user could use destructuring assignment when calling this:

    var {startOffset, endOffset} = this._sourceCodeTextEditor.visibleRangeOffsets();

&gt; Source/WebInspectorUI/UserInterface/Views/TextEditor.js:717
&gt; +        this._codeMirrorScrollHandler = handler;

I don&apos;t think this instance variable is needed. I think the caller should pass the handler in both add and remove. Similar to addEventListener.

Otherwise it looks like this API can only be used to register 1 handler, but it could be made to support multiple since under the hood this is just using addEventListener.

    var on = CodeMirror.on = function(emitter, type, f) {
        if (emitter.addEventListener)
            emitter.addEventListener(type, f, false);
        ...
    }

&gt; Source/WebInspectorUI/UserInterface/Views/TextResourceContentView.js:59
&gt; +    this._showTypesButtonNavigationItem = new WebInspector.ActivateButtonNavigationItem(&quot;show-types&quot;, toolTipTypes, 
&gt; +        activatedToolTipTypes, &quot;Images/NavigationItemTypes.svg&quot;, showTypesImageSize, showTypesImageSize);

Style: One line.

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.css:47
&gt; +    /* Purple */

Nit: All these comments are unnecessary.

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.css:73
&gt; +    /* Green */
&gt; +    background-color: rgb(237, 132, 0);

For instance this comment is incorrect. The color is clearly is not green with values RED:237 GREEN:132 BLUE:0.

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:44
&gt; +
&gt; +

Style: Duplicate blank line.

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:96
&gt; +        var hashString = title[title.length - 1] === &quot;?&quot; ? title.slice(0, title.length - 1) : title;

Looking at this code, I wonder if we should make the &quot;displayTypeName&quot; a frontend decision and not a backend one.

Currently, the Runtime.TypeDescription protocol type includes the displayTypeName. The backend has determined we should show &quot;String?&quot;, &quot;(many)&quot;, or &quot;(?)&quot; etc.

If we wanted to change this in the future, older backends would either not get the new convention/style or the frontend would need to include a translation.

Maybe we should send the equivalent of &quot;TypeSet&quot; bits as a &quot;typeSet&quot; property and optional &quot;commonConstructor&quot;. But lets tackle that in the future (a separate patch) if we want to go down that road.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031483</commentid>
    <comment_count>24</comment_count>
      <attachid>236951</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-08-26 14:29:12 -0700</bug_when>
    <thetext>Comment on attachment 236951
patch

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:186
&gt; +        var bookmark = this._sourceCodeTextEditor.setUniqueBookmark(tokenPosition, typeToken.element);

Is bookmark what we want to call this? I know this is CodeMirror&apos;s name for it, but we might just refer to them as tokens or source tokens. I also think the setUniqueBookmark function in our API could just be addToken, or addBookmark, or addWhatever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031487</commentid>
    <comment_count>25</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-26 14:45:27 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 236951 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236951&amp;action=review
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:186
&gt; &gt; +        var bookmark = this._sourceCodeTextEditor.setUniqueBookmark(tokenPosition, typeToken.element);
&gt; 
&gt; Is bookmark what we want to call this? I know this is CodeMirror&apos;s name for it, but we might just refer to them as tokens or source tokens. I also think the setUniqueBookmark function in our API could just be addToken, or addBookmark, or addWhatever.

Joe and I discussed this, and I think it&apos;s nice, in some ways, to stay consistent with CodeMirror, even though I think &quot;bookmark&quot; is a horrible name for this thing. I think it allows us to more easily reason about this code and other code that uses CodeMirror directly. That said, I&apos;m not entirely opposed to changing the name of this away from &quot;bookmark&quot; to something like &quot;token&quot; or &quot;inlineView&quot; or something, but I think if we decide to do that, we should rename the other places that we use setUniqueBookmark on CodeMirror directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031498</commentid>
    <comment_count>26</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-26 15:30:57 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; (From update of attachment 236951 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236951&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:186
&gt; &gt; &gt; +        var bookmark = this._sourceCodeTextEditor.setUniqueBookmark(tokenPosition, typeToken.element);
&gt; &gt; 
&gt; &gt; Is bookmark what we want to call this? [snip]
&gt; 
&gt; [snip]That said, I&apos;m not entirely opposed to changing the name of this away from &quot;bookmark&quot; to something like &quot;token&quot; or &quot;inlineView&quot; or something [snip]

&quot;setInlineWidget&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031500</commentid>
    <comment_count>27</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-26 15:36:42 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; (From update of attachment 236951 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236951&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:186
&gt; &gt; &gt; &gt; +        var bookmark = this._sourceCodeTextEditor.setUniqueBookmark(tokenPosition, typeToken.element);
&gt; &gt; &gt; 
&gt; &gt; &gt; Is bookmark what we want to call this? [snip]
&gt; &gt; 
&gt; &gt; [snip]That said, I&apos;m not entirely opposed to changing the name of this away from &quot;bookmark&quot; to something like &quot;token&quot; or &quot;inlineView&quot; or something [snip]
&gt; 
&gt; &quot;setInlineWidget&quot;?

I like that. I can open a patch to have subclasses of TextEditor use its API rather than _codeMirror directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031522</commentid>
    <comment_count>28</comment_count>
      <attachid>237185</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-26 17:01:43 -0700</bug_when>
    <thetext>Created attachment 237185
patch

Jono and Joe&apos;s considerations taken into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031525</commentid>
    <comment_count>29</comment_count>
      <attachid>237186</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-26 17:03:58 -0700</bug_when>
    <thetext>Created attachment 237186
patch

grr, above patch left in an assert removal from CodeMirrorTokenTrackingController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031878</commentid>
    <comment_count>30</comment_count>
      <attachid>237186</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-27 19:06:22 -0700</bug_when>
    <thetext>Comment on attachment 237186
patch

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

r=me. A few questions worth considering.

&gt; Source/WebInspectorUI/ChangeLog:26
&gt; +        This class is responsible for annotaing producing the inline

Typo: &quot;annotaing&quot; =&gt; &quot;annotating&quot;

&gt; Source/WebInspectorUI/UserInterface/Views/ScriptContentView.js:63
&gt; +    var showTypesImageSize = (WebInspector.Platform.isLegacyMacOS ? 15 : 16);

Style: No need for the ()s.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:155
&gt; +        if (this._typeTokenScrollHandler)
&gt; +            this._disableScrollEventsForTypeTokenAnnotator();

Is this necessary? I would expect that after &quot;close&quot; is called everything will get garbage collected.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1278
&gt; -        this._popover = this._popover || new WebInspector.Popover(this);
&gt; +        content.classList.add(WebInspector.SourceCodeTextEditor.PopoverDebuggerContentStyleClassName);
&gt; +
&gt; +        if (this._popover)
&gt; +            this._dismissPopover();
&gt; +        this._popover = new WebInspector.Popover(this);

Is the dismiss and new-assignment needed? Or can we stick with the old code and just reuse the popover?

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1544
&gt; +        this._typeTokenScrollHandler = this._makeTypeTokenScrollEventHandler();

Nit: console.assert(!this._typeTokenScrollHandler);

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1550
&gt; +        this.removeScrollHandler(this._typeTokenScrollHandler);

Nit: console.assert(this._typeTokenScrollHandler);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032341</commentid>
    <comment_count>31</comment_count>
      <attachid>237407</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-29 22:41:23 -0700</bug_when>
    <thetext>Created attachment 237407
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032342</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-29 22:43:36 -0700</bug_when>
    <thetext>Attachment 237407 did not pass style-queue:


ERROR: Source/WebInspectorUI/ChangeLog:25:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/ChangeLog:128:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032695</commentid>
    <comment_count>33</comment_count>
      <attachid>237407</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-09-02 10:59:49 -0700</bug_when>
    <thetext>Comment on attachment 237407
patch

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

r=me

&gt; Source/WebInspectorUI/ChangeLog:129
&gt; +		
&gt; +

Nit: Double empty line. And some tabs in the ChangeLog apparently.

&gt; Source/WebInspectorUI/UserInterface/Controllers/CodeMirrorTokenTrackingController.js:-196
&gt;      _startTracking: function()
&gt;      {
&gt; -        console.assert(!this._tracking);

This landed separately right?

&gt; Source/WebInspectorUI/UserInterface/Views/TextContentView.js:58
&gt; +    this._showTypesButtonNavigationItem.addEventListener(WebInspector.ButtonNavigationItem.Event.Clicked, function() {}, this);

If you are registering an empty event listener, just don&apos;t register an event listener!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032712</commentid>
    <comment_count>34</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-02 11:27:05 -0700</bug_when>
    <thetext>landed in: http://trac.webkit.org/changeset/173180</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235263</attachid>
            <date>2014-07-21 19:16:05 -0700</date>
            <delta_ts>2014-07-28 17:23:12 -0700</delta_ts>
            <desc>Work In Progress</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>197711</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Nv
ZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yVG9rZW5U
cmFja2luZ0NvbnRyb2xsZXIuanMJKHJldmlzaW9uIDE3MTI2NSkKKysrIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5n
Q29udHJvbGxlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksOCBAQCBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250CiAgICAgTm9uZTogIm5vbmUiLAogICAgIE5v
blN5bWJvbFRva2VuczogIm5vbi1zeW1ib2wtdG9rZW5zIiwKICAgICBKYXZhU2NyaXB0RXhwcmVz
c2lvbjogImphdmFzY3JpcHQtZXhwcmVzc2lvbiIsCi0gICAgTWFya2VkVG9rZW5zOiAibWFya2Vk
LXRva2VucyIKKyAgICBNYXJrZWRUb2tlbnM6ICJtYXJrZWQtdG9rZW5zIiwKKyAgICBQb3N0SmF2
YVNjcmlwdEV4cHJlc3Npb246ICJQb3N0SmF2YVNjcmlwdEV4cHJlc3Npb24iCiB9CiAKIFdlYklu
c3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewpA
QCAtMzg5LDYgKzM5MCw3IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0Nv
bnQKICAgICAgICAgICAgIHRoaXMuX2NhbmRpZGF0ZSA9IHRoaXMuX3Byb2Nlc3NOb25TeW1ib2xU
b2tlbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9u
OgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIuTW9kZS5Qb3N0SmF2YVNjcmlwdEV4cHJlc3Npb246CiAgICAgICAgICAgICB0aGlzLl9j
YW5kaWRhdGUgPSB0aGlzLl9wcm9jZXNzSmF2YVNjcmlwdEV4cHJlc3Npb24oKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFj
a2luZ0NvbnRyb2xsZXIuTW9kZS5NYXJrZWRUb2tlbnM6CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJTb3VyY2VNYXAuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxl
cnMvRm9ybWF0dGVyU291cmNlTWFwLmpzCShyZXZpc2lvbiAxNzEyNjUpCisrKyBTb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJTb3VyY2VNYXAu
anMJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDEzIEBAIFdlYkluc3BlY3Rvci5Gb3JtYXR0
ZXJTb3VyY2VNYXAucHJvdG90eXAKICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uVG9Mb2Nh
dGlvbih0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncywgZm9ybWF0dGVkUG9zaXRpb24pOwogICAg
IH0sCiAKKyAgICBvcmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQ6IGZ1bmN0aW9uKG9yaWdpbmFs
UG9zaXRpb24pCisgICAgeworICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9j
b252ZXJ0UG9zaXRpb24odGhpcy5fbWFwcGluZy5vcmlnaW5hbCwgdGhpcy5fbWFwcGluZy5mb3Jt
YXR0ZWQsIG9yaWdpbmFsUG9zaXRpb24pOworICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25U
b0xvY2F0aW9uKHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRQb3NpdGlvbik7
CisgICAgfSwKKworCiAgICAgZm9ybWF0dGVkVG9PcmlnaW5hbDogZnVuY3Rpb24obGluZU51bWJl
ciwgY29sdW1uTnVtYmVyKQogICAgIHsKICAgICAgICAgdmFyIGZvcm1hdHRlZFBvc2l0aW9uID0g
dGhpcy5fbG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLCBsaW5l
TnVtYmVyIHx8IDAsIGNvbHVtbk51bWJlciB8fCAwKTsKQEAgLTU2LDYgKzYzLDEzIEBAIFdlYklu
c3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAucHJvdG90eXAKICAgICAgICAgcmV0dXJuIHRoaXMu
X3Bvc2l0aW9uVG9Mb2NhdGlvbih0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzLCBvcmlnaW5hbFBv
c2l0aW9uKTsKICAgICB9LAogCisgICAgZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldDogZnVuY3Rp
b24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIGZvcm1hdHRl
ZFBvc2l0aW9uID0gdGhpcy5fbG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX2Zvcm1hdHRlZExpbmVF
bmRpbmdzLCBsaW5lTnVtYmVyIHx8IDAsIGNvbHVtbk51bWJlciB8fCAwKTsKKyAgICAgICAgdmFy
IG9yaWdpbmFsUG9zaXRpb24gPSB0aGlzLl9jb252ZXJ0UG9zaXRpb24odGhpcy5fbWFwcGluZy5m
b3JtYXR0ZWQsIHRoaXMuX21hcHBpbmcub3JpZ2luYWwsIGZvcm1hdHRlZFBvc2l0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIG9yaWdpbmFsUG9zaXRpb247CisgICAgfSwKKwogICAgIC8vIFByaXZhdGUK
IAogICAgIF9sb2NhdGlvblRvUG9zaXRpb246IGZ1bmN0aW9uKGxpbmVFbmRpbmdzLCBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIpCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5u
b3RhdG9yLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90
YXRvciA9IGZ1bmN0aW9uKHRleHRFZGl0b3IsIHNjcmlwdCkgCit7CisgICAgV2ViSW5zcGVjdG9y
Lk9iamVjdC5jYWxsKHRoaXMpOworCisgICAgdGhpcy5fc2NyaXB0ID0gc2NyaXB0OworICAgIHRo
aXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yID0gdGV4dEVkaXRvcjsKKyAgICB0aGlzLl90eXBlVG9r
ZW5Ob2RlcyA9IFtdOworICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcyA9IFtdOworICAgIHRo
aXMuX3RpbWVvdXRJRCA9IG51bGw7CisgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7CisgICAgdGhp
cy5faGlkZGVuID0gZmFsc2U7Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9y
LnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFu
bm90YXRvciwKKworICAgIC8vIHB1YmxpYworICAgIHBhdXNlOiBmdW5jdGlvbigpIAorICAgIHsK
KyAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJRCAhPT0gbnVsbCkKKyAgICAgICAgICAgIGNsZWFy
VGltZW91dCh0aGlzLl90aW1lb3V0SUQpOworICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlOwor
ICAgIH0sCisKKyAgICByZXN1bWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhp
cy5fcGF1c2VkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9wYXVzZWQgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5pbnNlcnRBbm5vdGF0aW9ucygpOworICAgIH0sCisKKyAgICBy
ZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7Cisg
ICAgICAgIGlmICh0aGlzLl90aW1lb3V0SUQgIT09IG51bGwpCisgICAgICAgICAgICBjbGVhclRp
bWVvdXQodGhpcy5fdGltZW91dElEKTsKKyAgICAgICAgdGhpcy5fY2xlYXJUeXBlVG9rZW5zKCk7
CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAgdG9nZ2xl
VHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5faGlk
ZGVuKQorICAgICAgICAgICAgdGhpcy5fc2hvd1R5cGVUb2tlbnMoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgdGhpcy5faGlkZVR5cGVUb2tlbnMoKTsKKworICAgICAgICB2YXIgaXNBY3Rp
dmF0ZWQgPSAhdGhpcy5faGlkZGVuOworICAgICAgICByZXR1cm4gaXNBY3RpdmF0ZWQ7CisgICAg
fSwKKworICAgIGluc2VydEFubm90YXRpb25zOiBmdW5jdGlvbigpIAorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuX3BhdXNlZCB8fCB0aGlzLl9oaWRkZW4pCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB2YXIgc291cmNlTWFwID0gdGhpcy5f
c291cmNlQ29kZVRleHRFZGl0b3IuX2Zvcm1hdHRlclNvdXJjZU1hcDsKKyAgICAgICAgdmFyIGNv
ZGVNaXJyb3IgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvci5fY29kZU1pcnJvcjsKKyAgICAg
ICAgdmFyIHNvdXJjZUNvZGVBU1QgPSB0aGlzLl9zY3JpcHQuX3NvdXJjZUNvZGVBU1Q7CisgICAg
ICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NjcmlwdC5pZDsKKworICAgICAgICBpZiAoIXNvdXJj
ZUNvZGVBU1QpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjcmlwdC5fc291cmNlQ29kZUFTVERpZExv
YWRDYWxsYmFjayA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHNlbGYuaW5zZXJ0QW5u
b3RhdGlvbnMoKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGluc2VydFRva2VuKG9mZnNldCwgbm9kZSwgaXNSZXR1
cm4pCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBsb2NhdGlvbjsgCisgICAgICAgICAgICB2
YXIgc3RhcnQ7IAorCisgICAgICAgICAgICBpZiAoc291cmNlTWFwKSB7CisgICAgICAgICAgICAg
ICAgbG9jYXRpb24gPSBzb3VyY2VNYXAub3JpZ2luYWxQb3NpdGlvblRvRm9ybWF0dGVkKG9mZnNl
dCk7CisgICAgICAgICAgICAgICAgc3RhcnQgPSB7IGxpbmU6IGxvY2F0aW9uLmxpbmVOdW1iZXIs
IGNoOiBsb2NhdGlvbi5jb2x1bW5OdW1iZXIgfTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBj
b2RlTWlycm9yLmdldERvYygpLmluZGV4RnJvbVBvcyhzdGFydCk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBzdGFydCA9IGNvZGVNaXJyb3IuZ2V0RG9jKCkucG9zRnJvbUlu
ZGV4KG9mZnNldCk7CisKKyAgICAgICAgICAgIHZhciBzb3VyY2VTdHJpbmcgPSBjb2RlTWlycm9y
LmdldFZhbHVlKCk7CisgICAgICAgICAgICBpZiAoaXNSZXR1cm4pIHsKKyAgICAgICAgICAgICAg
ICAvLyBUcmFuc2xhdGUgcG9zaXRpb24gdG8gdGhlIG9wZW5pbmcgcGFyZW4gb2YgdGhlIGZ1bmN0
aW9uLgorICAgICAgICAgICAgICAgIG9mZnNldCA9IHNlbGYuX2dldE5ld09mZnNldEZvclJldHVy
blN0YXRlbWVudChub2RlLCBvZmZzZXQsIHNvdXJjZVN0cmluZyk7CisgICAgICAgICAgICAgICAg
c3RhcnQgPSBjb2RlTWlycm9yLmdldERvYygpLnBvc0Zyb21JbmRleChvZmZzZXQpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBOb3RlOiBDb2RlTWlycm9yIGJvb2ttYXJrcyByZW5k
ZXIgdG8gdGhlIGxlZnQgb2YgdGhlIGNoYXJhY3RlciB0aGV5J3JlIGJlaW5nIGRpc3BsYXllZCBu
ZXh0IHRvLgorICAgICAgICAgICAgdmFyIGlzU3BhY2VSZWdleHAgPSAvW1x0XHZcZiBcdTAwYTBc
dTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIw
MDlcdTIwMGFcdTIwMGJcdTIwMjhcdTIwMjlcdTMwMDBdLzsKKyAgICAgICAgICAgIHZhciBzaG91
bGRIYXZlTGVmdE1hcmdpbiA9IG9mZnNldCAhPT0gMCAmJiAhaXNTcGFjZVJlZ2V4cC50ZXN0KHNv
dXJjZVN0cmluZ1tvZmZzZXQgLSAxXSk7CisgICAgICAgICAgICB2YXIgc2hvdWxkSGF2ZVJpZ2h0
TWFyZ2luID0gIWlzU3BhY2VSZWdleHAudGVzdChzb3VyY2VTdHJpbmdbb2Zmc2V0XSk7CisgICAg
ICAgICAgICB2YXIgdHlwZVRva2VuID0gbmV3IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3KHNl
bGYsIHNob3VsZEhhdmVSaWdodE1hcmdpbiwgc2hvdWxkSGF2ZUxlZnRNYXJnaW4pOworICAgICAg
ICAgICAgdmFyIGJvb2ttYXJrID0gY29kZU1pcnJvci5zZXRVbmlxdWVCb29rbWFyayhzdGFydCwg
eyB3aWRnZXQ6IHR5cGVUb2tlbi5lbGVtZW50IH0pOworICAgICAgICAgICAgbm9kZS5fdHlwZVRv
a2VuID0gdHlwZVRva2VuOworICAgICAgICAgICAgc2VsZi5fdHlwZVRva2VuTm9kZXMucHVzaChu
b2RlKTsKKyAgICAgICAgICAgIHNlbGYuX3R5cGVUb2tlbkJvb2ttYXJrcy5wdXNoKGJvb2ttYXJr
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGZvckVhY2gobm9kZSkgCisgICAgICAg
IHsKKyAgICAgICAgICAgIHZhciBUeXBlcyA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFT
VFR5cGU7CisKKyAgICAgICAgICAgIHN3aXRjaChub2RlLnR5cGUpIHsKKyAgICAgICAgICAgIGNh
c2UgVHlwZXMuRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgVHlwZXMuRnVu
Y3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgICAgIG5vZGUucGFyYW1zLmZvckVhY2goZnVu
Y3Rpb24gKHBhcmFtKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS5fdHlwZXMgJiYg
cGFyYW0uX3R5cGVzLmRpc3BsYXlUeXBlTmFtZSAmJiAhcGFyYW0uX3R5cGVUb2tlbikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydFRva2VuKHBhcmFtLnJhbmdlWzBdLCBwYXJhbSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgLy8gSWYgYSBmdW5jdGlvbiBkb2Vz
IG5vdCBoYXZlIGFuIGV4cGxpY2l0IHJldHVybiB0eXBlLCB0aGVuIGRvbid0IHNob3cgYSByZXR1
cm4gdHlwZSB1bmxlc3Mgd2UgdGhpbmsgaXQncyBhIGNvbnN0cnVjdG9yLgorICAgICAgICAgICAg
ICAgIGlmIChub2RlLl9yZXR1cm5UeXBlcyAmJiBub2RlLl9yZXR1cm5UeXBlcy5kaXNwbGF5VHlw
ZU5hbWUgJiYgIW5vZGUuX3R5cGVUb2tlbiAmJiAoc291cmNlQ29kZUFTVC5jb250YWluc1JldHVy
blN0YXRlbWVudChub2RlLmJvZHkpIHx8IG5vZGUuX3JldHVyblR5cGVzLmRpc3BsYXlUeXBlTmFt
ZSAhPT0gIlVuZGVmaW5lZCIpKQorICAgICAgICAgICAgICAgICAgICBpbnNlcnRUb2tlbihub2Rl
LmlzR2V0dGVyT3JTZXR0ZXIgPyBub2RlLmdldHRlck9yU2V0dGVyUmFuZ2VbMF0gOiBub2RlLnJh
bmdlWzBdLCBub2RlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgVHlwZXMuVmFyaWFibGVEZWNsYXJhdG9yOgorICAgICAgICAgICAgICAgIGlmIChub2Rl
Ll90eXBlcyAmJiBub2RlLl90eXBlcy5kaXNwbGF5VHlwZU5hbWUgJiYgIW5vZGUuX3R5cGVUb2tl
bikKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0VG9rZW4obm9kZS5pZC5yYW5nZVswXSwgbm9k
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBzb3VyY2VDb2RlQVNULnVwZGF0ZVR5cGVzKHNvdXJjZUlELCBmdW5jdGlvbiBhZnRl
clVwZGF0ZSgpIHsKKyAgICAgICAgICAgIHNvdXJjZUNvZGVBU1QuZm9yRWFjaE5vZGUoZm9yRWFj
aCk7CisgICAgICAgICAgICBzZWxmLl91cGRhdGVUeXBlVG9rZW5zKCk7CisgICAgICAgIH0pOwor
ICAgIH0sCisKKyAgICAvLyBQcml2YXRlCisKKyAgICBfdXBkYXRlVHlwZVRva2VuczogZnVuY3Rp
b24oKSAKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9wYXVzZWQgfHwgdGhpcy5faGlkZGVuKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzb3VyY2VDb2RlQVNUID0gdGhpcy5f
c2NyaXB0Ll9zb3VyY2VDb2RlQVNUOworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAg
ICAgZnVuY3Rpb24gZm9yRWFjaChub2RlKSAKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIFR5
cGVzID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZTsKKworICAgICAgICAgICAg
c3dpdGNoKG5vZGUudHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlcy5GdW5jdGlvbkRlY2xh
cmF0aW9uOgorICAgICAgICAgICAgY2FzZSBUeXBlcy5GdW5jdGlvbkV4cHJlc3Npb246CisgICAg
ICAgICAgICAgICAgbm9kZS5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihwYXJhbSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAocGFyYW0uX3R5cGVUb2tlbikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtLl90eXBlVG9rZW4udXBkYXRlKHBhcmFtLl90eXBlcyk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuX3R5cGVUb2tlbikKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS5fdHlwZVRva2VuLnVwZGF0ZShub2RlLl9yZXR1cm5UeXBlcyk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVzLlZhcmlhYmxlRGVjbGFy
YXRvcjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5fdHlwZVRva2VuKQorICAgICAgICAgICAg
ICAgICAgICBub2RlLl90eXBlVG9rZW4udXBkYXRlKG5vZGUuX3R5cGVzKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNvdXJjZUNv
ZGVBU1QuZm9yRWFjaE5vZGUoZm9yRWFjaCk7CisKKyAgICAgICAgdmFyIHN0YXJ0ID0gKG5ldyBE
YXRlKCkpLmdldFRpbWUoKTsKKyAgICAgICAgdGhpcy5fdGltZW91dElEID0gc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJBY3R1YWwgdGltZXI6ICIgKyAo
c3RhcnQgLSAobmV3IERhdGUoKS5nZXRUaW1lKCkpKSkKKyAgICAgICAgICAgIHNlbGYuX3RpbWVv
dXRJRCA9IG51bGw7CisgICAgICAgICAgICBzZWxmLmluc2VydEFubm90YXRpb25zKCk7CisgICAg
ICAgIH0sIDYwMDApOworICAgIH0sCisKKyAgICBfaGlkZVR5cGVUb2tlbnM6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHRoaXMuX2hpZGRlbiA9IHRydWU7CisgICAgICAgIHRoaXMuX2NsZWFy
VHlwZVRva2VucygpOworICAgIH0sCisKKyAgICBfc2hvd1R5cGVUb2tlbnM6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHRoaXMuX2hpZGRlbiA9IGZhbHNlOworICAgICAgICB0aGlzLnJlc2V0
KCk7CisgICAgfSwKKworICAgIF9jbGVhclR5cGVUb2tlbnM6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgbm9kZS5fdHlwZVRva2VuID0gbnVsbDsKKyAgICAgICAgfSk7CisgICAgICAgIHRo
aXMuX3R5cGVUb2tlbkJvb2ttYXJrcy5mb3JFYWNoKGZ1bmN0aW9uKGJvb2ttYXJrKSB7CisgICAg
ICAgICAgICBib29rbWFyay5jbGVhcigpOworICAgICAgICB9KTsKKworICAgICAgICB0aGlzLl90
eXBlVG9rZW5Ob2RlcyA9IFtdOworICAgICAgICB0aGlzLl90eXBlVG9rZW5Cb29rbWFya3MgPSBb
XTsKKyAgICB9LAorCisgICAgX2dldE5ld09mZnNldEZvclJldHVyblN0YXRlbWVudDogZnVuY3Rp
b24obm9kZSwgb2Zmc2V0LCBzb3VyY2VTdHJpbmcpCisgICAgeworICAgICAgICAvLyBUaGUgYXNz
dW1wdGlvbiBoZXJlIGlzIHRoYXQgd2UgZ2V0IHRoZSBvZmZzZXQgc3RhcnRpbmcgYXQgdGhlIGZ1
bmN0aW9uIGtleXdvcmQgKG9yIGFmdGVyIHRoZSBnZXQvc2V0IGtleXdvcmRzKS4KKyAgICAgICAg
Ly8gV2Ugd2lsbCByZXR1cm4gdGhlIG9mZnNldCBmb3IgdGhlIGNsb3NpbmcgcGFyYW0gaW4gdGhl
IGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorICAgICAgICAvLyBBbGwgdGhpcyBjb2RlIGlzIGp1c3Qg
YSB3YXkgdG8gZmluZCB0aGlzIHBhcmFtIHdoaWxlIGlnbm9yaW5nIGNvbW1lbnRzLgorCisgICAg
ICAgIHZhciBpc011bHRpTGluZUNvbW1lbnQgPSBmYWxzZTsKKyAgICAgICAgdmFyIGlzU2luZ2xl
TGluZUNvbW1lbnQgPSBmYWxzZTsKKyAgICAgICAgdmFyIHNob3VsZElnbm9yZSA9IGZhbHNlOwor
ICAgICAgICB3aGlsZSAoKHNvdXJjZVN0cmluZ1tvZmZzZXRdICE9PSAiKSIgfHwgc2hvdWxkSWdu
b3JlKSAmJiBvZmZzZXQgPCBzb3VyY2VTdHJpbmcubGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAo
aXNTaW5nbGVMaW5lQ29tbWVudCAmJiBzb3VyY2VTdHJpbmdbb2Zmc2V0XSA9PT0gIi9uIikgewor
ICAgICAgICAgICAgICAgIGlzU2luZ2xlTGluZUNvbW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBzaG91bGRJZ25vcmUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNdWx0
aUxpbmVDb21tZW50ICYmIHNvdXJjZVN0cmluZ1tvZmZzZXRdID09PSAiKiIgJiYgc291cmNlU3Ry
aW5nW29mZnNldCArIDFdID09PSAiLyIpIHsKKyAgICAgICAgICAgICAgICBpc011bHRpTGluZUNv
bW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBzaG91bGRJZ25vcmUgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBvZmZzZXQrKzsgCisgICAgICAgICAgICB9IGVsc2UgaWYgKCFzaG91bGRJ
Z25vcmUgJiYgc291cmNlU3RyaW5nW29mZnNldF0gPT09ICIvIikgeworICAgICAgICAgICAgICAg
IG9mZnNldCsrOworICAgICAgICAgICAgICAgIGlmIChzb3VyY2VTdHJpbmdbb2Zmc2V0XSA9PT0g
IioiKQorICAgICAgICAgICAgICAgICAgICBpc011bHRpTGluZUNvbW1lbnQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZVN0cmluZ1tvZmZzZXRdID09PSAiLyIpCisgICAg
ICAgICAgICAgICAgICAgIGlzU2luZ2xlTGluZUNvbW1lbnQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcGFyc2lu
Zy4gQ291bGRuJ3QgcGFyc2UgY29tbWVudCBwcmVhbWJsZS4iKTsKKyAgICAgICAgICAgICAgICBz
aG91bGRJZ25vcmUgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvZmZzZXQr
KzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBvZmZzZXQgKyAxOworICAgIH0KK307CisK
K1dlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdl
Ykluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmltYS9lc3ByaW1hLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNw
cmltYS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0V4dGVybmFsL0VzcHJpbWEvZXNwcmltYS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM3MzUgQEAKKy8qCisgIENvcHlyaWdodCAoQykgMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5o
aWRheWF0QGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIFRoYWRkZWUgVHlsIDx0aGFk
ZGVlLnR5bEBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMyBNYXRoaWFzIEJ5bmVucyA8
bWF0aGlhc0BxaXdpLmJlPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJp
eWEuaGlkYXlhdEBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVu
cyA8bWF0aGlhc0BxaXdpLmJlPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgSm9vc3QtV2ltIEJvZWtl
c3RlaWpuIDxqb29zdC13aW1AYm9la2VzdGVpam4ubmw+CisgIENvcHlyaWdodCAoQykgMjAxMiBL
cmlzIEtvd2FsIDxrcmlzLmtvd2FsQGNpeGFyLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIFl1
c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEy
IEFycGFkIEJvcnNvcyA8YXJwYWQuYm9yc29zQGdvb2dsZW1haWwuY29tPgorICBDb3B5cmlnaHQg
KEMpIDIwMTEgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+CisKKyAgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUyAiQVMgSVMiCisgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKKyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVS
PiBCRSBMSUFCTEUgRk9SIEFOWQorICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8vIFRoZSBvbmx5IGVkaXRzIHRoYXQgaGF2
ZSBiZWVuIG1hZGUgdG8gdGhpcyBmaWxlIGlzIHRvIHVzZSBXZWJJbnNwZWN0b3IuX2VzcHJpbWEg
YXMgdGhlICdleHBvcnRzJyBvYmplY3QgZm9yIGVzcHJpbWEuIAorLy8gSSBkZWx0ZWQgdGhlIGNv
ZGUgdGhhdCBkZXRlcm1pbmVzIHRoZSBjb250ZXh0IGVzcHJpbWEgaXMgbG9hZGVkIGluIChub2Rl
LmpzLCB0aGUgYnJvd3NlciwgZXRjLikgYW5kIHJlcGxhY2VkIGl0IHdpdGggV2ViSW5zcGVjdG9y
Ll9lc3ByaW1hLgorLy8gQWxsIHRoaXMgZG9lcyBpcyBwYXNzIGluIHRoZSBXZWJJbnNwZWN0b3Iu
X2VzcHJpbWEgb2JqZWN0IGFzIHRoZSAnZXhwb3J0cycgb2JqZWN0IGludG8gdGhlIGVuY2xvc2lu
ZyBjbG9zdXJlIHRoYXQgY29udGFpbnMgYWxsIG9mIGVzcHJpbWEncyBsb2dpYy4KK1dlYkluc3Bl
Y3Rvci5fZXNwcmltYSA9IHt9OworCisoZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgICAndXNlIHN0
cmljdCc7CisKKyAgICB2YXIgVG9rZW4sCisgICAgICAgIFRva2VuTmFtZSwKKyAgICAgICAgRm5F
eHByVG9rZW5zLAorICAgICAgICBTeW50YXgsCisgICAgICAgIFByb3BlcnR5S2luZCwKKyAgICAg
ICAgTWVzc2FnZXMsCisgICAgICAgIFJlZ2V4LAorICAgICAgICBTeW50YXhUcmVlRGVsZWdhdGUs
CisgICAgICAgIHNvdXJjZSwKKyAgICAgICAgc3RyaWN0LAorICAgICAgICBpbmRleCwKKyAgICAg
ICAgbGluZU51bWJlciwKKyAgICAgICAgbGluZVN0YXJ0LAorICAgICAgICBsZW5ndGgsCisgICAg
ICAgIGRlbGVnYXRlLAorICAgICAgICBsb29rYWhlYWQsCisgICAgICAgIHN0YXRlLAorICAgICAg
ICBleHRyYTsKKworICAgIFRva2VuID0geworICAgICAgICBCb29sZWFuTGl0ZXJhbDogMSwKKyAg
ICAgICAgRU9GOiAyLAorICAgICAgICBJZGVudGlmaWVyOiAzLAorICAgICAgICBLZXl3b3JkOiA0
LAorICAgICAgICBOdWxsTGl0ZXJhbDogNSwKKyAgICAgICAgTnVtZXJpY0xpdGVyYWw6IDYsCisg
ICAgICAgIFB1bmN0dWF0b3I6IDcsCisgICAgICAgIFN0cmluZ0xpdGVyYWw6IDgsCisgICAgICAg
IFJlZ3VsYXJFeHByZXNzaW9uOiA5CisgICAgfTsKKworICAgIFRva2VuTmFtZSA9IHt9OworICAg
IFRva2VuTmFtZVtUb2tlbi5Cb29sZWFuTGl0ZXJhbF0gPSAnQm9vbGVhbic7CisgICAgVG9rZW5O
YW1lW1Rva2VuLkVPRl0gPSAnPGVuZD4nOworICAgIFRva2VuTmFtZVtUb2tlbi5JZGVudGlmaWVy
XSA9ICdJZGVudGlmaWVyJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uS2V5d29yZF0gPSAnS2V5d29y
ZCc7CisgICAgVG9rZW5OYW1lW1Rva2VuLk51bGxMaXRlcmFsXSA9ICdOdWxsJzsKKyAgICBUb2tl
bk5hbWVbVG9rZW4uTnVtZXJpY0xpdGVyYWxdID0gJ051bWVyaWMnOworICAgIFRva2VuTmFtZVtU
b2tlbi5QdW5jdHVhdG9yXSA9ICdQdW5jdHVhdG9yJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uU3Ry
aW5nTGl0ZXJhbF0gPSAnU3RyaW5nJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uUmVndWxhckV4cHJl
c3Npb25dID0gJ1JlZ3VsYXJFeHByZXNzaW9uJzsKKworICAgIC8vIEEgZnVuY3Rpb24gZm9sbG93
aW5nIG9uZSBvZiB0aG9zZSB0b2tlbnMgaXMgYW4gZXhwcmVzc2lvbi4KKyAgICBGbkV4cHJUb2tl
bnMgPSBbJygnLCAneycsICdbJywgJ2luJywgJ3R5cGVvZicsICdpbnN0YW5jZW9mJywgJ25ldycs
CisgICAgICAgICAgICAgICAgICAgICdyZXR1cm4nLCAnY2FzZScsICdkZWxldGUnLCAndGhyb3cn
LCAndm9pZCcsCisgICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3JzCisg
ICAgICAgICAgICAgICAgICAgICc9JywgJys9JywgJy09JywgJyo9JywgJy89JywgJyU9JywgJzw8
PScsICc+Pj0nLCAnPj4+PScsCisgICAgICAgICAgICAgICAgICAgICcmPScsICd8PScsICdePScs
ICcsJywKKyAgICAgICAgICAgICAgICAgICAgLy8gYmluYXJ5L3VuYXJ5IG9wZXJhdG9ycworICAg
ICAgICAgICAgICAgICAgICAnKycsICctJywgJyonLCAnLycsICclJywgJysrJywgJy0tJywgJzw8
JywgJz4+JywgJz4+PicsICcmJywKKyAgICAgICAgICAgICAgICAgICAgJ3wnLCAnXicsICchJywg
J34nLCAnJiYnLCAnfHwnLCAnPycsICc6JywgJz09PScsICc9PScsICc+PScsCisgICAgICAgICAg
ICAgICAgICAgICc8PScsICc8JywgJz4nLCAnIT0nLCAnIT09J107CisKKyAgICBTeW50YXggPSB7
CisgICAgICAgIEFzc2lnbm1lbnRFeHByZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAor
ICAgICAgICBBcnJheUV4cHJlc3Npb246ICdBcnJheUV4cHJlc3Npb24nLAorICAgICAgICBCbG9j
a1N0YXRlbWVudDogJ0Jsb2NrU3RhdGVtZW50JywKKyAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjog
J0JpbmFyeUV4cHJlc3Npb24nLAorICAgICAgICBCcmVha1N0YXRlbWVudDogJ0JyZWFrU3RhdGVt
ZW50JywKKyAgICAgICAgQ2FsbEV4cHJlc3Npb246ICdDYWxsRXhwcmVzc2lvbicsCisgICAgICAg
IENhdGNoQ2xhdXNlOiAnQ2F0Y2hDbGF1c2UnLAorICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Np
b246ICdDb25kaXRpb25hbEV4cHJlc3Npb24nLAorICAgICAgICBDb250aW51ZVN0YXRlbWVudDog
J0NvbnRpbnVlU3RhdGVtZW50JywKKyAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVT
dGF0ZW1lbnQnLAorICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50
JywKKyAgICAgICAgRW1wdHlTdGF0ZW1lbnQ6ICdFbXB0eVN0YXRlbWVudCcsCisgICAgICAgIEV4
cHJlc3Npb25TdGF0ZW1lbnQ6ICdFeHByZXNzaW9uU3RhdGVtZW50JywKKyAgICAgICAgRm9yU3Rh
dGVtZW50OiAnRm9yU3RhdGVtZW50JywKKyAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0
YXRlbWVudCcsCisgICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0
aW9uJywKKyAgICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJywK
KyAgICAgICAgSWRlbnRpZmllcjogJ0lkZW50aWZpZXInLAorICAgICAgICBJZlN0YXRlbWVudDog
J0lmU3RhdGVtZW50JywKKyAgICAgICAgTGl0ZXJhbDogJ0xpdGVyYWwnLAorICAgICAgICBMYWJl
bGVkU3RhdGVtZW50OiAnTGFiZWxlZFN0YXRlbWVudCcsCisgICAgICAgIExvZ2ljYWxFeHByZXNz
aW9uOiAnTG9naWNhbEV4cHJlc3Npb24nLAorICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiAnTWVt
YmVyRXhwcmVzc2lvbicsCisgICAgICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJywK
KyAgICAgICAgT2JqZWN0RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLAorICAgICAgICBQ
cm9ncmFtOiAnUHJvZ3JhbScsCisgICAgICAgIFByb3BlcnR5OiAnUHJvcGVydHknLAorICAgICAg
ICBSZXR1cm5TdGF0ZW1lbnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLAorICAgICAgICBTZXF1ZW5jZUV4
cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLAorICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6
ICdTd2l0Y2hTdGF0ZW1lbnQnLAorICAgICAgICBTd2l0Y2hDYXNlOiAnU3dpdGNoQ2FzZScsCisg
ICAgICAgIFRoaXNFeHByZXNzaW9uOiAnVGhpc0V4cHJlc3Npb24nLAorICAgICAgICBUaHJvd1N0
YXRlbWVudDogJ1Rocm93U3RhdGVtZW50JywKKyAgICAgICAgVHJ5U3RhdGVtZW50OiAnVHJ5U3Rh
dGVtZW50JywKKyAgICAgICAgVW5hcnlFeHByZXNzaW9uOiAnVW5hcnlFeHByZXNzaW9uJywKKyAg
ICAgICAgVXBkYXRlRXhwcmVzc2lvbjogJ1VwZGF0ZUV4cHJlc3Npb24nLAorICAgICAgICBWYXJp
YWJsZURlY2xhcmF0aW9uOiAnVmFyaWFibGVEZWNsYXJhdGlvbicsCisgICAgICAgIFZhcmlhYmxl
RGVjbGFyYXRvcjogJ1ZhcmlhYmxlRGVjbGFyYXRvcicsCisgICAgICAgIFdoaWxlU3RhdGVtZW50
OiAnV2hpbGVTdGF0ZW1lbnQnLAorICAgICAgICBXaXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVu
dCcKKyAgICB9OworCisgICAgUHJvcGVydHlLaW5kID0geworICAgICAgICBEYXRhOiAxLAorICAg
ICAgICBHZXQ6IDIsCisgICAgICAgIFNldDogNAorICAgIH07CisKKyAgICAvLyBFcnJvciBtZXNz
YWdlcyBzaG91bGQgYmUgaWRlbnRpY2FsIHRvIFY4LgorICAgIE1lc3NhZ2VzID0geworICAgICAg
ICBVbmV4cGVjdGVkVG9rZW46ICAnVW5leHBlY3RlZCB0b2tlbiAlMCcsCisgICAgICAgIFVuZXhw
ZWN0ZWROdW1iZXI6ICAnVW5leHBlY3RlZCBudW1iZXInLAorICAgICAgICBVbmV4cGVjdGVkU3Ry
aW5nOiAgJ1VuZXhwZWN0ZWQgc3RyaW5nJywKKyAgICAgICAgVW5leHBlY3RlZElkZW50aWZpZXI6
ICAnVW5leHBlY3RlZCBpZGVudGlmaWVyJywKKyAgICAgICAgVW5leHBlY3RlZFJlc2VydmVkOiAg
J1VuZXhwZWN0ZWQgcmVzZXJ2ZWQgd29yZCcsCisgICAgICAgIFVuZXhwZWN0ZWRFT1M6ICAnVW5l
eHBlY3RlZCBlbmQgb2YgaW5wdXQnLAorICAgICAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogICdJbGxl
Z2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3cnLAorICAgICAgICBJbnZhbGlkUmVnRXhwOiAnSW52YWxp
ZCByZWd1bGFyIGV4cHJlc3Npb24nLAorICAgICAgICBVbnRlcm1pbmF0ZWRSZWdFeHA6ICAnSW52
YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IG1pc3NpbmcgLycsCisgICAgICAgIEludmFsaWRMSFNJ
bkFzc2lnbm1lbnQ6ICAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBhc3NpZ25tZW50JywKKyAg
ICAgICAgSW52YWxpZExIU0luRm9ySW46ICAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3It
aW4nLAorICAgICAgICBNdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2g6ICdNb3JlIHRoYW4gb25lIGRl
ZmF1bHQgY2xhdXNlIGluIHN3aXRjaCBzdGF0ZW1lbnQnLAorICAgICAgICBOb0NhdGNoT3JGaW5h
bGx5OiAgJ01pc3NpbmcgY2F0Y2ggb3IgZmluYWxseSBhZnRlciB0cnknLAorICAgICAgICBVbmtu
b3duTGFiZWw6ICdVbmRlZmluZWQgbGFiZWwgXCclMFwnJywKKyAgICAgICAgUmVkZWNsYXJhdGlv
bjogJyUwIFwnJTFcJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkJywKKyAgICAgICAgSWxsZWdh
bENvbnRpbnVlOiAnSWxsZWdhbCBjb250aW51ZSBzdGF0ZW1lbnQnLAorICAgICAgICBJbGxlZ2Fs
QnJlYWs6ICdJbGxlZ2FsIGJyZWFrIHN0YXRlbWVudCcsCisgICAgICAgIElsbGVnYWxSZXR1cm46
ICdJbGxlZ2FsIHJldHVybiBzdGF0ZW1lbnQnLAorICAgICAgICBTdHJpY3RNb2RlV2l0aDogICdT
dHJpY3QgbW9kZSBjb2RlIG1heSBub3QgaW5jbHVkZSBhIHdpdGggc3RhdGVtZW50JywKKyAgICAg
ICAgU3RyaWN0Q2F0Y2hWYXJpYWJsZTogICdDYXRjaCB2YXJpYWJsZSBtYXkgbm90IGJlIGV2YWwg
b3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0VmFyTmFtZTogICdW
YXJpYWJsZSBuYW1lIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUn
LAorICAgICAgICBTdHJpY3RQYXJhbU5hbWU6ICAnUGFyYW1ldGVyIG5hbWUgZXZhbCBvciBhcmd1
bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RQYXJh
bUR1cGU6ICdTdHJpY3QgbW9kZSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgZHVwbGljYXRlIHBhcmFt
ZXRlciBuYW1lcycsCisgICAgICAgIFN0cmljdEZ1bmN0aW9uTmFtZTogICdGdW5jdGlvbiBuYW1l
IG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBT
dHJpY3RPY3RhbExpdGVyYWw6ICAnT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHN0
cmljdCBtb2RlLicsCisgICAgICAgIFN0cmljdERlbGV0ZTogICdEZWxldGUgb2YgYW4gdW5xdWFs
aWZpZWQgaWRlbnRpZmllciBpbiBzdHJpY3QgbW9kZS4nLAorICAgICAgICBTdHJpY3REdXBsaWNh
dGVQcm9wZXJ0eTogICdEdXBsaWNhdGUgZGF0YSBwcm9wZXJ0eSBpbiBvYmplY3QgbGl0ZXJhbCBu
b3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIEFjY2Vzc29yRGF0YVByb3BlcnR5
OiAgJ09iamVjdCBsaXRlcmFsIG1heSBub3QgaGF2ZSBkYXRhIGFuZCBhY2Nlc3NvciBwcm9wZXJ0
eSB3aXRoIHRoZSBzYW1lIG5hbWUnLAorICAgICAgICBBY2Nlc3NvckdldFNldDogICdPYmplY3Qg
bGl0ZXJhbCBtYXkgbm90IGhhdmUgbXVsdGlwbGUgZ2V0L3NldCBhY2Nlc3NvcnMgd2l0aCB0aGUg
c2FtZSBuYW1lJywKKyAgICAgICAgU3RyaWN0TEhTQXNzaWdubWVudDogICdBc3NpZ25tZW50IHRv
IGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKKyAgICAg
ICAgU3RyaWN0TEhTUG9zdGZpeDogICdQb3N0Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5v
dCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAg
ICBTdHJpY3RMSFNQcmVmaXg6ICAnUHJlZml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBo
YXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBT
dHJpY3RSZXNlcnZlZFdvcmQ6ICAnVXNlIG9mIGZ1dHVyZSByZXNlcnZlZCB3b3JkIGluIHN0cmlj
dCBtb2RlJworICAgIH07CisKKyAgICAvLyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2Rl
LXJlZ2V4LnB5LgorICAgIFJlZ2V4ID0geworICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFy
dDogbmV3IFJlZ0V4cCgnW1x4QUFceEI1XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMx
XHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2
XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0Ex
XHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1
OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2
NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZB
LVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NB
LVx1MDdFQVx1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4Mjhc
dTA4NDAtXHUwODU4XHUwOEEwXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBc
dTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThG
XHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJE
XHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFc
dTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1
MEEzNlx1MEEzOFx1MEEzOVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1
MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1
MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXHUwQjBGXHUw
QjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUw
QjNEXHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBC
OEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJB
M1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXHUwQzA1LVx1MEMwQ1x1MEMw
RS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RcdTBD
NThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBD
QThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENG
MVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0
RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERC
My1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0
MC1cdTBFNDZcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQt
XHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJc
dTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEQy1c
dTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAt
XHUxMDJBXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZc
dTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0Rc
dTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4
XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJC
Mi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEy
RDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1
MTNGNFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFc
dTE2RUUtXHUxNkYwXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQw
LVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdE
Q1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5
MUNcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUx
QTAwLVx1MUExNlx1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1
MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1c
dTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZc
dTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4
LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgw
LVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZE
MC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUx
RkZDXHUyMDcxXHUyMDdGXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIx
MTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIx
MzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUy
QzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUy
RDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUy
REEwLVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1c
dTJEQzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDUt
XHUzMDA3XHUzMDIxLVx1MzAyOVx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5
Nlx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMx
MzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1
OUZDQ1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZc
dUE2MkFcdUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RUZcdUE3MTct
XHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdB
QVx1QTdGOC1cdUE4MDFcdUE4MDMtXHVBODA1XHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4
NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1cdUE4RjdcdUE4RkJcdUE5MEEtXHVBOTI1XHVB
OTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOFx1
QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZc
dUFBQjFcdUFBQjVcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1
QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEt
XHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdB
M1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZC
MDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVG
QjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZC
RDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1
RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVc
dUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXScpLAor
ICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJQYXJ0OiBuZXcgUmVnRXhwKCdbXHhBQVx4QjVceEJB
XHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1
MDJFQ1x1MDJFRVx1MDMwMC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzg2XHUw
Mzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1
MDQ4My1cdTA0ODdcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdc
dTA1OTEtXHUwNUJEXHUwNUJGXHUwNUMxXHUwNUMyXHUwNUM0XHUwNUM1XHUwNUM3XHUwNUQwLVx1
MDVFQVx1MDVGMC1cdTA1RjJcdTA2MTAtXHUwNjFBXHUwNjIwLVx1MDY2OVx1MDY2RS1cdTA2RDNc
dTA2RDUtXHUwNkRDXHUwNkRGLVx1MDZFOFx1MDZFQS1cdTA2RkNcdTA2RkZcdTA3MTAtXHUwNzRB
XHUwNzRELVx1MDdCMVx1MDdDMC1cdTA3RjVcdTA3RkFcdTA4MDAtXHUwODJEXHUwODQwLVx1MDg1
Qlx1MDhBMFx1MDhBMi1cdTA4QUNcdTA4RTQtXHUwOEZFXHUwOTAwLVx1MDk2M1x1MDk2Ni1cdTA5
NkZcdTA5NzEtXHUwOTc3XHUwOTc5LVx1MDk3Rlx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUw
OThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUw
OUJDLVx1MDlDNFx1MDlDN1x1MDlDOFx1MDlDQi1cdTA5Q0VcdTA5RDdcdTA5RENcdTA5RERcdTA5
REYtXHUwOUUzXHUwOUU2LVx1MDlGMVx1MEEwMS1cdTBBMDNcdTBBMDUtXHUwQTBBXHUwQTBGXHUw
QTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBB
MzhcdTBBMzlcdTBBM0NcdTBBM0UtXHUwQTQyXHUwQTQ3XHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1
MVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTc1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBB
OERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBB
QjUtXHUwQUI5XHUwQUJDLVx1MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUw
QUUwLVx1MEFFM1x1MEFFNi1cdTBBRUZcdTBCMDEtXHUwQjAzXHUwQjA1LVx1MEIwQ1x1MEIwRlx1
MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1
MEIzQy1cdTBCNDRcdTBCNDdcdTBCNDhcdTBCNEItXHUwQjREXHUwQjU2XHUwQjU3XHUwQjVDXHUw
QjVEXHUwQjVGLVx1MEI2M1x1MEI2Ni1cdTBCNkZcdTBCNzFcdTBCODJcdTBCODNcdTBCODUtXHUw
QjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBC
OUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBC
QzYtXHUwQkM4XHUwQkNBLVx1MEJDRFx1MEJEMFx1MEJEN1x1MEJFNi1cdTBCRUZcdTBDMDEtXHUw
QzAzXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1
MEMzNS1cdTBDMzlcdTBDM0QtXHUwQzQ0XHUwQzQ2LVx1MEM0OFx1MEM0QS1cdTBDNERcdTBDNTVc
dTBDNTZcdTBDNThcdTBDNTlcdTBDNjAtXHUwQzYzXHUwQzY2LVx1MEM2Rlx1MEM4Mlx1MEM4M1x1
MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUt
XHUwQ0I5XHUwQ0JDLVx1MENDNFx1MENDNi1cdTBDQzhcdTBDQ0EtXHUwQ0NEXHUwQ0Q1XHUwQ0Q2
XHUwQ0RFXHUwQ0UwLVx1MENFM1x1MENFNi1cdTBDRUZcdTBDRjFcdTBDRjJcdTBEMDJcdTBEMDNc
dTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMFx1MEQxMi1cdTBEM0FcdTBEM0QtXHUwRDQ0XHUwRDQ2
LVx1MEQ0OFx1MEQ0QS1cdTBENEVcdTBENTdcdTBENjAtXHUwRDYzXHUwRDY2LVx1MEQ2Rlx1MEQ3
QS1cdTBEN0ZcdTBEODJcdTBEODNcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBE
QkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRENBXHUwRENGLVx1MERENFx1MERENlx1MEREOC1cdTBE
REZcdTBERjJcdTBERjNcdTBFMDEtXHUwRTNBXHUwRTQwLVx1MEU0RVx1MEU1MC1cdTBFNTlcdTBF
ODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5
LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUI5
XHUwRUJCLVx1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFQzgtXHUwRUNEXHUwRUQwLVx1MEVE
OVx1MEVEQy1cdTBFREZcdTBGMDBcdTBGMThcdTBGMTlcdTBGMjAtXHUwRjI5XHUwRjM1XHUwRjM3
XHUwRjM5XHUwRjNFLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGNzEtXHUwRjg0XHUwRjg2LVx1MEY5
N1x1MEY5OS1cdTBGQkNcdTBGQzZcdTEwMDAtXHUxMDQ5XHUxMDUwLVx1MTA5RFx1MTBBMC1cdTEw
QzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEy
NTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUx
MjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1
MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzNUQt
XHUxMzVGXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3
Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGMFx1MTcwMC1cdTE3MENcdTE3
MEUtXHUxNzE0XHUxNzIwLVx1MTczNFx1MTc0MC1cdTE3NTNcdTE3NjAtXHUxNzZDXHUxNzZFLVx1
MTc3MFx1MTc3Mlx1MTc3M1x1MTc4MC1cdTE3RDNcdTE3RDdcdTE3RENcdTE3RERcdTE3RTAtXHUx
N0U5XHUxODBCLVx1MTgwRFx1MTgxMC1cdTE4MTlcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBQVx1
MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXHUxOTIwLVx1MTkyQlx1MTkzMC1cdTE5M0JcdTE5NDYt
XHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxOUQwLVx1MTlE
OVx1MUEwMC1cdTFBMUJcdTFBMjAtXHUxQTVFXHUxQTYwLVx1MUE3Q1x1MUE3Ri1cdTFBODlcdTFB
OTAtXHUxQTk5XHUxQUE3XHUxQjAwLVx1MUI0Qlx1MUI1MC1cdTFCNTlcdTFCNkItXHUxQjczXHUx
QjgwLVx1MUJGM1x1MUMwMC1cdTFDMzdcdTFDNDAtXHUxQzQ5XHUxQzRELVx1MUM3RFx1MUNEMC1c
dTFDRDJcdTFDRDQtXHUxQ0Y2XHUxRDAwLVx1MURFNlx1MURGQy1cdTFGMTVcdTFGMTgtXHUxRjFE
XHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVE
XHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZD
NFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFG
RjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjAwQ1x1MjAwRFx1MjAzRlx1MjA0MFx1MjA1NFx1MjA3
MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIwRDAtXHUyMERDXHUyMEUxXHUyMEU1LVx1MjBGMFx1MjEw
Mlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4
XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0
RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJD
RUItXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJE
N0YtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1
MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVc
dTJERTAtXHUyREZGXHUyRTJGXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMkZcdTMwMzEtXHUzMDM1
XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMwOTZcdTMwOTlcdTMwOUFcdTMwOUQtXHUzMDlGXHUzMEEx
LVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMx
QkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NcdUEwMDAtXHVBNDhDXHVB
NEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjJCXHVBNjQwLVx1QTY2Rlx1QTY3NC1c
dUE2N0RcdUE2N0YtXHVBNjk3XHVBNjlGLVx1QTZGMVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4
XHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgyN1x1QTg0
MC1cdUE4NzNcdUE4ODAtXHVBOEM0XHVBOEQwLVx1QThEOVx1QThFMC1cdUE4RjdcdUE4RkJcdUE5
MDAtXHVBOTJEXHVBOTMwLVx1QTk1M1x1QTk2MC1cdUE5N0NcdUE5ODAtXHVBOUMwXHVBOUNGLVx1
QTlEOVx1QUEwMC1cdUFBMzZcdUFBNDAtXHVBQTREXHVBQTUwLVx1QUE1OVx1QUE2MC1cdUFBNzZc
dUFBN0FcdUFBN0JcdUFBODAtXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUZcdUFBRjIt
XHVBQUY2XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIy
Nlx1QUIyOC1cdUFCMkVcdUFCQzAtXHVBQkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1QUJGOVx1QUMw
MC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVG
QUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJBLVx1RkIzNlx1
RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVG
QkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUwMC1c
dUZFMEZcdUZFMjAtXHVGRTI2XHVGRTMzXHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3MC1cdUZFNzRc
dUZFNzYtXHVGRUZDXHVGRjEwLVx1RkYxOVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZGNDEtXHVGRjVB
XHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZE
QS1cdUZGRENdJykKKyAgICB9OworCisgICAgLy8gRW5zdXJlIHRoZSBjb25kaXRpb24gaXMgdHJ1
ZSwgb3RoZXJ3aXNlIHRocm93IGFuIGVycm9yLgorICAgIC8vIFRoaXMgaXMgb25seSB0byBoYXZl
IGEgYmV0dGVyIGNvbnRyYWN0IHNlbWFudGljLCBpLmUuIGFub3RoZXIgc2FmZXR5IG5ldAorICAg
IC8vIHRvIGNhdGNoIGEgbG9naWMgZXJyb3IuIFRoZSBjb25kaXRpb24gc2hhbGwgYmUgZnVsZmls
bGVkIGluIG5vcm1hbCBjYXNlLgorICAgIC8vIERvIE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEg
Y2VydGFpbiBjb25kaXRpb24gb24gYW55IHVzZXIgaW5wdXQuCisKKyAgICBmdW5jdGlvbiBhc3Nl
cnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7CisgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAq
LworICAgICAgICBpZiAoIWNvbmRpdGlvbikgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdBU1NFUlQ6ICcgKyBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9u
IGlzRGVjaW1hbERpZ2l0KGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPj0gNDggJiYgY2ggPD0g
NTcpOyAgIC8vIDAuLjkKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0hleERpZ2l0KGNoKSB7Cisg
ICAgICAgIHJldHVybiAnMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRicuaW5kZXhPZihjaCkgPj0gMDsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBpc09jdGFsRGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJu
ICcwMTIzNDU2NycuaW5kZXhPZihjaCkgPj0gMDsKKyAgICB9CisKKworICAgIC8vIDcuMiBXaGl0
ZSBTcGFjZQorCisgICAgZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7CisgICAgICAgIHJldHVy
biAoY2ggPT09IDB4MjApIHx8IChjaCA9PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2gg
PT09IDB4MEMpIHx8IChjaCA9PT0gMHhBMCkgfHwKKyAgICAgICAgICAgIChjaCA+PSAweDE2ODAg
JiYgWzB4MTY4MCwgMHgxODBFLCAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAw
NCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJG
LCAweDIwNUYsIDB4MzAwMCwgMHhGRUZGXS5pbmRleE9mKGNoKSA+PSAwKTsKKyAgICB9CisKKyAg
ICAvLyA3LjMgTGluZSBUZXJtaW5hdG9ycworCisgICAgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRv
cihjaCkgeworICAgICAgICByZXR1cm4gKGNoID09PSAweDBBKSB8fCAoY2ggPT09IDB4MEQpIHx8
IChjaCA9PT0gMHgyMDI4KSB8fCAoY2ggPT09IDB4MjAyOSk7CisgICAgfQorCisgICAgLy8gNy42
IElkZW50aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJzCisKKyAgICBmdW5jdGlvbiBpc0lkZW50
aWZpZXJTdGFydChjaCkgeworICAgICAgICByZXR1cm4gKGNoID09PSAweDI0KSB8fCAoY2ggPT09
IDB4NUYpIHx8ICAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKQorICAgICAgICAgICAg
KGNoID49IDB4NDEgJiYgY2ggPD0gMHg1QSkgfHwgICAgICAgICAvLyBBLi5aCisgICAgICAgICAg
ICAoY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdBKSB8fCAgICAgICAgIC8vIGEuLnoKKyAgICAgICAg
ICAgIChjaCA9PT0gMHg1QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8gXCAoYmFja3NsYXNo
KQorICAgICAgICAgICAgKChjaCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJT
dGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gaXNJZGVudGlmaWVyUGFydChjaCkgeworICAgICAgICByZXR1cm4gKGNoID09PSAweDI0KSB8
fCAoY2ggPT09IDB4NUYpIHx8ICAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKQorICAg
ICAgICAgICAgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg1QSkgfHwgICAgICAgICAvLyBBLi5aCisg
ICAgICAgICAgICAoY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdBKSB8fCAgICAgICAgIC8vIGEuLnoK
KyAgICAgICAgICAgIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkpIHx8ICAgICAgICAgLy8gMC4u
OQorICAgICAgICAgICAgKGNoID09PSAweDVDKSB8fCAgICAgICAgICAgICAgICAgICAgICAvLyBc
IChiYWNrc2xhc2gpCisgICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lp
SWRlbnRpZmllclBhcnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpOworICAgIH0KKwor
ICAgIC8vIDcuNi4xLjIgRnV0dXJlIFJlc2VydmVkIFdvcmRzCisKKyAgICBmdW5jdGlvbiBpc0Z1
dHVyZVJlc2VydmVkV29yZChpZCkgeworICAgICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNh
c2UgJ2NsYXNzJzoKKyAgICAgICAgY2FzZSAnZW51bSc6CisgICAgICAgIGNhc2UgJ2V4cG9ydCc6
CisgICAgICAgIGNhc2UgJ2V4dGVuZHMnOgorICAgICAgICBjYXNlICdpbXBvcnQnOgorICAgICAg
ICBjYXNlICdzdXBlcic6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1
bmN0aW9uIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChpZCkgeworICAgICAgICBzd2l0Y2ggKGlk
KSB7CisgICAgICAgIGNhc2UgJ2ltcGxlbWVudHMnOgorICAgICAgICBjYXNlICdpbnRlcmZhY2Un
OgorICAgICAgICBjYXNlICdwYWNrYWdlJzoKKyAgICAgICAgY2FzZSAncHJpdmF0ZSc6CisgICAg
ICAgIGNhc2UgJ3Byb3RlY3RlZCc6CisgICAgICAgIGNhc2UgJ3B1YmxpYyc6CisgICAgICAgIGNh
c2UgJ3N0YXRpYyc6CisgICAgICAgIGNhc2UgJ3lpZWxkJzoKKyAgICAgICAgY2FzZSAnbGV0JzoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNSZXN0cmlj
dGVkV29yZChpZCkgeworICAgICAgICByZXR1cm4gaWQgPT09ICdldmFsJyB8fCBpZCA9PT0gJ2Fy
Z3VtZW50cyc7CisgICAgfQorCisgICAgLy8gNy42LjEuMSBLZXl3b3JkcworCisgICAgZnVuY3Rp
b24gaXNLZXl3b3JkKGlkKSB7CisgICAgICAgIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVz
ZXJ2ZWRXb3JkKGlkKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyAnY29uc3QnIGlzIHNwZWNpYWxpemVkIGFzIEtleXdvcmQgaW4gVjguCisgICAg
ICAgIC8vICd5aWVsZCcgYW5kICdsZXQnIGFyZSBmb3IgY29tcGF0aWJsaXR5IHdpdGggU3BpZGVy
TW9ua2V5IGFuZCBFUy5uZXh0LgorICAgICAgICAvLyBTb21lIG90aGVycyBhcmUgZnJvbSBmdXR1
cmUgcmVzZXJ2ZWQgd29yZHMuCisKKyAgICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHsKKyAgICAg
ICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2lmJykgfHwgKGlkID09PSAn
aW4nKSB8fCAoaWQgPT09ICdkbycpOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICByZXR1
cm4gKGlkID09PSAndmFyJykgfHwgKGlkID09PSAnZm9yJykgfHwgKGlkID09PSAnbmV3JykgfHwK
KyAgICAgICAgICAgICAgICAoaWQgPT09ICd0cnknKSB8fCAoaWQgPT09ICdsZXQnKTsKKyAgICAg
ICAgY2FzZSA0OgorICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3RoaXMnKSB8fCAoaWQgPT09
ICdlbHNlJykgfHwgKGlkID09PSAnY2FzZScpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAn
dm9pZCcpIHx8IChpZCA9PT0gJ3dpdGgnKSB8fCAoaWQgPT09ICdlbnVtJyk7CisgICAgICAgIGNh
c2UgNToKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2Jy
ZWFrJykgfHwgKGlkID09PSAnY2F0Y2gnKSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Ro
cm93JykgfHwgKGlkID09PSAnY29uc3QnKSB8fCAoaWQgPT09ICd5aWVsZCcpIHx8CisgICAgICAg
ICAgICAgICAgKGlkID09PSAnY2xhc3MnKSB8fCAoaWQgPT09ICdzdXBlcicpOworICAgICAgICBj
YXNlIDY6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAncmV0dXJuJykgfHwgKGlkID09PSAn
dHlwZW9mJykgfHwgKGlkID09PSAnZGVsZXRlJykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09
ICdzd2l0Y2gnKSB8fCAoaWQgPT09ICdleHBvcnQnKSB8fCAoaWQgPT09ICdpbXBvcnQnKTsKKyAg
ICAgICAgY2FzZSA3OgorICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2RlZmF1bHQnKSB8fCAo
aWQgPT09ICdmaW5hbGx5JykgfHwgKGlkID09PSAnZXh0ZW5kcycpOworICAgICAgICBjYXNlIDg6
CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZnVuY3Rpb24nKSB8fCAoaWQgPT09ICdjb250
aW51ZScpIHx8IChpZCA9PT0gJ2RlYnVnZ2VyJyk7CisgICAgICAgIGNhc2UgMTA6CisgICAgICAg
ICAgICByZXR1cm4gKGlkID09PSAnaW5zdGFuY2VvZicpOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gNy40IENv
bW1lbnRzCisKKyAgICBmdW5jdGlvbiBhZGRDb21tZW50KHR5cGUsIHZhbHVlLCBzdGFydCwgZW5k
LCBsb2MpIHsKKyAgICAgICAgdmFyIGNvbW1lbnQsIGF0dGFjaGVyOworCisgICAgICAgIGFzc2Vy
dCh0eXBlb2Ygc3RhcnQgPT09ICdudW1iZXInLCAnQ29tbWVudCBtdXN0IGhhdmUgdmFsaWQgcG9z
aXRpb24nKTsKKworICAgICAgICAvLyBCZWNhdXNlIHRoZSB3YXkgdGhlIGFjdHVhbCB0b2tlbiBp
cyBzY2FubmVkLCBvZnRlbiB0aGUgY29tbWVudHMKKyAgICAgICAgLy8gKGlmIGFueSkgYXJlIHNr
aXBwZWQgdHdpY2UgZHVyaW5nIHRoZSBsZXhpY2FsIGFuYWx5c2lzLgorICAgICAgICAvLyBUaHVz
LCB3ZSBuZWVkIHRvIHNraXAgYWRkaW5nIGEgY29tbWVudCBpZiB0aGUgY29tbWVudCBhcnJheSBh
bHJlYWR5CisgICAgICAgIC8vIGhhbmRsZWQgaXQuCisgICAgICAgIGlmIChzdGF0ZS5sYXN0Q29t
bWVudFN0YXJ0ID49IHN0YXJ0KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgc3RhdGUubGFzdENvbW1lbnRTdGFydCA9IHN0YXJ0OworCisgICAgICAgIGNvbW1lbnQg
PSB7CisgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgdmFsdWU6IHZhbHVlCisg
ICAgICAgIH07CisgICAgICAgIGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAgICAgY29tbWVu
dC5yYW5nZSA9IFtzdGFydCwgZW5kXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXh0cmEubG9j
KSB7CisgICAgICAgICAgICBjb21tZW50LmxvYyA9IGxvYzsKKyAgICAgICAgfQorICAgICAgICBl
eHRyYS5jb21tZW50cy5wdXNoKGNvbW1lbnQpOworICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29t
bWVudCkgeworICAgICAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7
CisgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBza2lwU2luZ2xlTGluZUNvbW1lbnQob2Zmc2V0
KSB7CisgICAgICAgIHZhciBzdGFydCwgbG9jLCBjaCwgY29tbWVudDsKKworICAgICAgICBzdGFy
dCA9IGluZGV4IC0gb2Zmc2V0OworICAgICAgICBsb2MgPSB7CisgICAgICAgICAgICBzdGFydDog
eworICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29s
dW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIG9mZnNldAorICAgICAgICAgICAgfQorICAgICAgICB9
OworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBz
b3VyY2UuY2hhckNvZGVBdChpbmRleCk7CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAg
ICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgaWYgKGV4dHJh
LmNvbW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uo
c3RhcnQgKyBvZmZzZXQsIGluZGV4IC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGxvYy5lbmQg
PSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDEKKyAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgYWRkQ29tbWVudCgnTGluZScsIGNvbW1l
bnQsIHN0YXJ0LCBpbmRleCAtIDEsIGxvYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChjaCA9PT0gMTMgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAxMCkg
eworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5k
ZXg7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7CisgICAgICAgICAgICBjb21tZW50ID0gc291
cmNlLnNsaWNlKHN0YXJ0ICsgb2Zmc2V0LCBpbmRleCk7CisgICAgICAgICAgICBsb2MuZW5kID0g
eworICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29s
dW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGFkZENv
bW1lbnQoJ0xpbmUnLCBjb21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBza2lwTXVsdGlMaW5lQ29tbWVudCgpIHsKKyAgICAgICAgdmFy
IHN0YXJ0LCBsb2MsIGNoLCBjb21tZW50OworCisgICAgICAgIGlmIChleHRyYS5jb21tZW50cykg
eworICAgICAgICAgICAgc3RhcnQgPSBpbmRleCAtIDI7CisgICAgICAgICAgICBsb2MgPSB7Cisg
ICAgICAgICAgICAgICAgc3RhcnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51
bWJlciwKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDIK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29k
ZUF0KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCAr
IDEpID09PSAweDBBKSB7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICAr
K2luZGV4OworICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAg
ICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEpIHsKKyAgICAgICAgICAg
ICAgICAvLyBCbG9jayBjb21tZW50IGVuZHMgd2l0aCAnKi8nLgorICAgICAgICAgICAgICAgIGlm
IChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDJGKSB7CisgICAgICAgICAgICAg
ICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChleHRyYS5jb21tZW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIDIsIGluZGV4IC0gMik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsb2MuZW5kID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRl
eCAtIGxpbmVTdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZENvbW1lbnQoJ0Jsb2NrJywgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2Mp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lM
TEVHQUwnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBza2lwQ29tbWVudCgpIHsKKyAgICAgICAg
dmFyIGNoLCBzdGFydDsKKworICAgICAgICBzdGFydCA9IChpbmRleCA9PT0gMCk7CisgICAgICAg
IHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCk7CisKKyAgICAgICAgICAgIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7CisgICAg
ICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWlu
YXRvcihjaCkpIHsKKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIGlm
IChjaCA9PT0gMHgwRCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4MEEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4Owor
ICAgICAgICAgICAgICAgIHN0YXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2gg
PT09IDB4MkYpIHsgLy8gVSswMDJGIGlzICcvJworICAgICAgICAgICAgICAgIGNoID0gc291cmNl
LmNoYXJDb2RlQXQoaW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MkYp
IHsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgKytp
bmRleDsKKyAgICAgICAgICAgICAgICAgICAgc2tpcFNpbmdsZUxpbmVDb21tZW50KDIpOworICAg
ICAgICAgICAgICAgICAgICBzdGFydCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChjaCA9PT0gMHgyQSkgeyAgLy8gVSswMDJBIGlzICcqJworICAgICAgICAgICAgICAgICAgICAr
K2luZGV4OworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAg
ICBza2lwTXVsdGlMaW5lQ29tbWVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc3RhcnQgJiYgY2ggPT09IDB4MkQpIHsgLy8gVSswMDJEIGlzICctJworICAgICAg
ICAgICAgICAgIC8vIFUrMDAzRSBpcyAnPicKKyAgICAgICAgICAgICAgICBpZiAoKHNvdXJjZS5j
aGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MkQpICYmIChzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCArIDIpID09PSAweDNFKSkgeworICAgICAgICAgICAgICAgICAgICAvLyAnLS0+JyBpcyBhIHNp
bmdsZS1saW5lIGNvbW1lbnQKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMzsKKyAgICAg
ICAgICAgICAgICAgICAgc2tpcFNpbmdsZUxpbmVDb21tZW50KDMpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4M0MpIHsgLy8gVSswMDNDIGlzICc8Jwor
ICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uuc2xpY2UoaW5kZXggKyAxLCBpbmRleCArIDQpID09
PSAnIS0tJykgeworICAgICAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgPGAKKyAgICAgICAg
ICAgICAgICAgICAgKytpbmRleDsgLy8gYCFgCisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7
IC8vIGAtYAorICAgICAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgLWAKKyAgICAgICAgICAg
ICAgICAgICAgc2tpcFNpbmdsZUxpbmVDb21tZW50KDQpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuSGV4RXNjYXBlKHByZWZpeCkgewor
ICAgICAgICB2YXIgaSwgbGVuLCBjaCwgY29kZSA9IDA7CisKKyAgICAgICAgbGVuID0gKHByZWZp
eCA9PT0gJ3UnKSA/IDQgOiAyOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpc0hleERpZ2l0KHNvdXJjZVtpbmRl
eF0pKSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAg
ICAgICAgY29kZSA9IGNvZGUgKiAxNiArICcwMTIzNDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRv
TG93ZXJDYXNlKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gJyc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmluZy5m
cm9tQ2hhckNvZGUoY29kZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0RXNjYXBlZElkZW50
aWZpZXIoKSB7CisgICAgICAgIHZhciBjaCwgaWQ7CisKKyAgICAgICAgY2ggPSBzb3VyY2UuY2hh
ckNvZGVBdChpbmRleCsrKTsKKyAgICAgICAgaWQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsK
KworICAgICAgICAvLyAnXHUnIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNo
YXJhY3Rlci4KKyAgICAgICAgaWYgKGNoID09PSAweDVDKSB7CisgICAgICAgICAgICBpZiAoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDc1KSB7CisgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2Fw
ZSgndScpOworICAgICAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcJyB8fCAhaXNJZGVudGlm
aWVyU3RhcnQoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZCA9IGNoOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsK
KyAgICAgICAgICAgIGlmICghaXNJZGVudGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICBpZCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsKKworICAgICAgICAgICAgLy8gJ1x1JyAo
VSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgICAg
ICBpZiAoY2ggPT09IDB4NUMpIHsKKyAgICAgICAgICAgICAgICBpZCA9IGlkLnN1YnN0cigwLCBp
ZC5sZW5ndGggLSAxKTsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5k
ZXgpICE9PSAweDc1KSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUo
J3UnKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNoIHx8IGNoID09PSAnXFwnIHx8ICFpc0lkZW50
aWZpZXJQYXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWQgKz0gY2g7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gaWQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0SWRl
bnRpZmllcigpIHsKKyAgICAgICAgdmFyIHN0YXJ0LCBjaDsKKworICAgICAgICBzdGFydCA9IGlu
ZGV4Kys7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2gg
PSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7CisgICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMp
IHsKKyAgICAgICAgICAgICAgICAvLyBCbGFja3NsYXNoIChVKzAwNUMpIG1hcmtzIFVuaWNvZGUg
ZXNjYXBlIHNlcXVlbmNlLgorICAgICAgICAgICAgICAgIGluZGV4ID0gc3RhcnQ7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdldEVzY2FwZWRJZGVudGlmaWVyKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICAr
K2luZGV4OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2Uoc3Rh
cnQsIGluZGV4KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuSWRlbnRpZmllcigpIHsKKyAg
ICAgICAgdmFyIHN0YXJ0LCBpZCwgdHlwZTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworCisg
ICAgICAgIC8vIEJhY2tzbGFzaCAoVSswMDVDKSBzdGFydHMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIu
CisgICAgICAgIGlkID0gKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHg1QykgPyBnZXRF
c2NhcGVkSWRlbnRpZmllcigpIDogZ2V0SWRlbnRpZmllcigpOworCisgICAgICAgIC8vIFRoZXJl
IGlzIG5vIGtleXdvcmQgb3IgbGl0ZXJhbCB3aXRoIG9ubHkgb25lIGNoYXJhY3Rlci4KKyAgICAg
ICAgLy8gVGh1cywgaXQgbXVzdCBiZSBhbiBpZGVudGlmaWVyLgorICAgICAgICBpZiAoaWQubGVu
Z3RoID09PSAxKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjsKKyAgICAg
ICAgfSBlbHNlIGlmIChpc0tleXdvcmQoaWQpKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4u
S2V5d29yZDsKKyAgICAgICAgfSBlbHNlIGlmIChpZCA9PT0gJ251bGwnKSB7CisgICAgICAgICAg
ICB0eXBlID0gVG9rZW4uTnVsbExpdGVyYWw7CisgICAgICAgIH0gZWxzZSBpZiAoaWQgPT09ICd0
cnVlJyB8fCBpZCA9PT0gJ2ZhbHNlJykgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLkJvb2xl
YW5MaXRlcmFsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLklk
ZW50aWZpZXI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlw
ZTogdHlwZSwKKyAgICAgICAgICAgIHZhbHVlOiBpZCwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6
IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAg
ICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgfTsKKyAg
ICB9CisKKworICAgIC8vIDcuNyBQdW5jdHVhdG9ycworCisgICAgZnVuY3Rpb24gc2NhblB1bmN0
dWF0b3IoKSB7CisgICAgICAgIHZhciBzdGFydCA9IGluZGV4LAorICAgICAgICAgICAgY29kZSA9
IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSwKKyAgICAgICAgICAgIGNvZGUyLAorICAgICAgICAg
ICAgY2gxID0gc291cmNlW2luZGV4XSwKKyAgICAgICAgICAgIGNoMiwKKyAgICAgICAgICAgIGNo
MywKKyAgICAgICAgICAgIGNoNDsKKworICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKKworICAgICAg
ICAvLyBDaGVjayBmb3IgbW9zdCBjb21tb24gc2luZ2xlLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4K
KyAgICAgICAgY2FzZSAweDJFOiAgLy8gLiBkb3QKKyAgICAgICAgY2FzZSAweDI4OiAgLy8gKCBv
cGVuIGJyYWNrZXQKKyAgICAgICAgY2FzZSAweDI5OiAgLy8gKSBjbG9zZSBicmFja2V0CisgICAg
ICAgIGNhc2UgMHgzQjogIC8vIDsgc2VtaWNvbG9uCisgICAgICAgIGNhc2UgMHgyQzogIC8vICwg
Y29tbWEKKyAgICAgICAgY2FzZSAweDdCOiAgLy8geyBvcGVuIGN1cmx5IGJyYWNlCisgICAgICAg
IGNhc2UgMHg3RDogIC8vIH0gY2xvc2UgY3VybHkgYnJhY2UKKyAgICAgICAgY2FzZSAweDVCOiAg
Ly8gWworICAgICAgICBjYXNlIDB4NUQ6ICAvLyBdCisgICAgICAgIGNhc2UgMHgzQTogIC8vIDoK
KyAgICAgICAgY2FzZSAweDNGOiAgLy8gPworICAgICAgICBjYXNlIDB4N0U6ICAvLyB+CisgICAg
ICAgICAgICArK2luZGV4OworICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGNvZGUgPT09IDB4MjgpIHsKKyAgICAgICAgICAgICAgICAgICAgZXh0
cmEub3BlblBhcmVuVG9rZW4gPSBleHRyYS50b2tlbnMubGVuZ3RoOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoY29kZSA9PT0gMHg3QikgeworICAgICAgICAgICAgICAgICAgICBleHRyYS5v
cGVuQ3VybHlUb2tlbiA9IGV4dHJhLnRva2Vucy5sZW5ndGg7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBUb2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNo
YXJDb2RlKGNvZGUpLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisg
ICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3Rh
cnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07CisK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNvZGUyID0gc291cmNlLmNoYXJDb2RlQXQo
aW5kZXggKyAxKTsKKworICAgICAgICAgICAgLy8gJz0nIChVKzAwM0QpIG1hcmtzIGFuIGFzc2ln
bm1lbnQgb3IgY29tcGFyaXNvbiBvcGVyYXRvci4KKyAgICAgICAgICAgIGlmIChjb2RlMiA9PT0g
MHgzRCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICAgICAgICAg
IGNhc2UgMHgyQjogIC8vICsKKyAgICAgICAgICAgICAgICBjYXNlIDB4MkQ6ICAvLyAtCisgICAg
ICAgICAgICAgICAgY2FzZSAweDJGOiAgLy8gLworICAgICAgICAgICAgICAgIGNhc2UgMHgzQzog
IC8vIDwKKyAgICAgICAgICAgICAgICBjYXNlIDB4M0U6ICAvLyA+CisgICAgICAgICAgICAgICAg
Y2FzZSAweDVFOiAgLy8gXgorICAgICAgICAgICAgICAgIGNhc2UgMHg3QzogIC8vIHwKKyAgICAg
ICAgICAgICAgICBjYXNlIDB4MjU6ICAvLyAlCisgICAgICAgICAgICAgICAgY2FzZSAweDI2OiAg
Ly8gJgorICAgICAgICAgICAgICAgIGNhc2UgMHgyQTogIC8vICoKKyAgICAgICAgICAgICAgICAg
ICAgaW5kZXggKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZTogU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSArIFN0cmluZy5mcm9tQ2hhckNv
ZGUoY29kZTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kOiBpbmRleAorICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgY2Fz
ZSAweDIxOiAvLyAhCisgICAgICAgICAgICAgICAgY2FzZSAweDNEOiAvLyA9CisgICAgICAgICAg
ICAgICAgICAgIGluZGV4ICs9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gIT09IGFuZCA9
PT0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0g
MHgzRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlOiBzb3VyY2Uuc2xpY2Uoc3RhcnQsIGluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3Rh
cnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyA0LWNoYXJhY3RlciBwdW5jdHVhdG9yOiA+Pj49CisKKyAgICAgICAgY2g0ID0gc291cmNlLnN1
YnN0cihpbmRleCwgNCk7CisKKyAgICAgICAgaWYgKGNoNCA9PT0gJz4+Pj0nKSB7CisgICAgICAg
ICAgICBpbmRleCArPSA0OworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiBjaDQsCisgICAg
ICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5l
U3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAg
ICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIDMtY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiA9PT0gIT09ID4+PiA8PD0gPj49CisKKyAgICAg
ICAgY2gzID0gY2g0LnN1YnN0cigwLCAzKTsKKworICAgICAgICBpZiAoY2gzID09PSAnPj4+JyB8
fCBjaDMgPT09ICc8PD0nIHx8IGNoMyA9PT0gJz4+PScpIHsKKyAgICAgICAgICAgIGluZGV4ICs9
IDM7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1
bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgdmFsdWU6IGNoMywKKyAgICAgICAgICAgICAgICBs
aW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0
YXJ0LAorICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6
IGluZGV4CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gT3RoZXIgMi1j
aGFyYWN0ZXIgcHVuY3R1YXRvcnM6ICsrIC0tIDw8ID4+ICYmIHx8CisgICAgICAgIGNoMiA9IGNo
My5zdWJzdHIoMCwgMik7CisKKyAgICAgICAgaWYgKChjaDEgPT09IGNoMlsxXSAmJiAoJystPD4m
fCcuaW5kZXhPZihjaDEpID49IDApKSB8fCBjaDIgPT09ICc9PicpIHsKKyAgICAgICAgICAgIGlu
ZGV4ICs9IDI7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRv
a2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgdmFsdWU6IGNoMiwKKyAgICAgICAgICAg
ICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDog
bGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAg
ICBlbmQ6IGluZGV4CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gMS1j
aGFyYWN0ZXIgcHVuY3R1YXRvcnM6IDwgPiA9ICEgKyAtICogJSAmIHwgXiAvCisgICAgICAgIGlm
ICgnPD49ISstKiUmfF4vJy5pbmRleE9mKGNoMSkgPj0gMCkgeworICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVu
Y3R1YXRvciwKKyAgICAgICAgICAgICAgICB2YWx1ZTogY2gxLAorICAgICAgICAgICAgICAgIGxp
bmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3Rh
cnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDog
aW5kZXgKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICB0aHJvd0Vycm9yKHt9
LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgfQorCisgICAgLy8g
Ny44LjMgTnVtZXJpYyBMaXRlcmFscworCisgICAgZnVuY3Rpb24gc2NhbkhleExpdGVyYWwoc3Rh
cnQpIHsKKyAgICAgICAgdmFyIG51bWJlciA9ICcnOworCisgICAgICAgIHdoaWxlIChpbmRleCA8
IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKCFpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBudW1i
ZXIgKz0gc291cmNlW2luZGV4KytdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG51bWJlci5s
ZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhw
ZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0lkZW50
aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xp
dGVyYWwsCisgICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQoJzB4JyArIG51bWJlciwgMTYpLAor
ICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFy
dDogbGluZVN0YXJ0LAorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5k
OiBpbmRleAorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5PY3RhbExpdGVy
YWwoc3RhcnQpIHsKKyAgICAgICAgdmFyIG51bWJlciA9ICcwJyArIHNvdXJjZVtpbmRleCsrXTsK
KyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlzT2N0
YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCkpIHx8IGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAg
ICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwn
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tl
bi5OdW1lcmljTGl0ZXJhbCwKKyAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludChudW1iZXIsIDgp
LAorICAgICAgICAgICAgb2N0YWw6IHRydWUsCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBz
dGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQor
CisgICAgZnVuY3Rpb24gc2Nhbk51bWVyaWNMaXRlcmFsKCkgeworICAgICAgICB2YXIgbnVtYmVy
LCBzdGFydCwgY2g7CisKKyAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3Nl
cnQoaXNEZWNpbWFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkgfHwgKGNoID09PSAnLicpLAorICAg
ICAgICAgICAgJ051bWVyaWMgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0
IG9yIGEgZGVjaW1hbCBwb2ludCcpOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAgICAg
IG51bWJlciA9ICcnOworICAgICAgICBpZiAoY2ggIT09ICcuJykgeworICAgICAgICAgICAgbnVt
YmVyID0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOwor
CisgICAgICAgICAgICAvLyBIZXggbnVtYmVyIHN0YXJ0cyB3aXRoICcweCcuCisgICAgICAgICAg
ICAvLyBPY3RhbCBudW1iZXIgc3RhcnRzIHdpdGggJzAnLgorICAgICAgICAgICAgaWYgKG51bWJl
ciA9PT0gJzAnKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdY
JykgeworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc2NhbkhleExpdGVyYWwoc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc2Nhbk9jdGFsTGl0ZXJhbChzdGFydCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gZGVjaW1hbCBudW1iZXIgc3RhcnRzIHdpdGggJzAnIHN1Y2ggYXMgJzA5JyBp
cyBpbGxlZ2FsLgorICAgICAgICAgICAgICAgIGlmIChjaCAmJiBpc0RlY2ltYWxEaWdpdChjaC5j
aGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNz
YWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNo
YXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5k
ZXgrK107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoY2ggPT09ICcuJykgeworICAgICAgICAgICAgbnVtYmVy
ICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChz
b3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNv
dXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoID0gc291cmNlW2lu
ZGV4XTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScp
IHsKKyAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisKKyAgICAgICAgICAg
IGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChjaCA9PT0gJysnIHx8IGNoID09
PSAnLScpIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29k
ZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0g
c291cmNlW2luZGV4KytdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2Vu
LCAnSUxMRUdBTCcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGlz
SWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAg
IHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1l
cmljTGl0ZXJhbCwKKyAgICAgICAgICAgIHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksCisgICAg
ICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBs
aW5lU3RhcnQsCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGlu
ZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgLy8gNy44LjQgU3RyaW5nIExpdGVyYWxzCisK
KyAgICBmdW5jdGlvbiBzY2FuU3RyaW5nTGl0ZXJhbCgpIHsKKyAgICAgICAgdmFyIHN0ciA9ICcn
LCBxdW90ZSwgc3RhcnQsIGNoLCBjb2RlLCB1bmVzY2FwZWQsIHJlc3RvcmUsIG9jdGFsID0gZmFs
c2UsIHN0YXJ0TGluZU51bWJlciwgc3RhcnRMaW5lU3RhcnQ7CisgICAgICAgIHN0YXJ0TGluZU51
bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0Owor
CisgICAgICAgIHF1b3RlID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgYXNzZXJ0KChxdW90ZSA9
PT0gJ1wnJyB8fCBxdW90ZSA9PT0gJyInKSwKKyAgICAgICAgICAgICdTdHJpbmcgbGl0ZXJhbCBt
dXN0IHN0YXJ0cyB3aXRoIGEgcXVvdGUnKTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworICAg
ICAgICArK2luZGV4OworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAg
ICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisKKyAgICAgICAgICAgIGlmIChjaCA9PT0gcXVv
dGUpIHsKKyAgICAgICAgICAgICAgICBxdW90ZSA9ICcnOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ1xcJykgeworICAgICAgICAgICAgICAg
IGNoID0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgICAgIGlmICghY2ggfHwgIWlzTGlu
ZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChjaCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7
CisgICAgICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZWQgPSBzY2FuSGV4RXNjYXBlKGNoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVzY2FwZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHIgKz0gdW5lc2NhcGVkOworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcbic7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6
CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xyJzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ciArPSAnXHQnOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgICAgICAgICAg
c3RyICs9ICdcYic7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xmJzsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
ICd2JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHgwQic7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlID0gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvY3RhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVu
Z3RoICYmIGlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvY3RhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10p
OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5
IGFsbG93ZWQgd2hlbiBzdHJpbmcgc3RhcnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHdpdGggMCwgMSwgMiwgMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoJzAxMjMnLmluZGV4T2YoY2gpID49IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleCA8IGxlbmd0aCAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzT2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5p
bmRleE9mKHNvdXJjZVtpbmRleCsrXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoY2gg
PT09ICAnXHInICYmIHNvdXJjZVtpbmRleF0gPT09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgbGluZVN0YXJ0ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0ciAr
PSBjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChxdW90ZSAhPT0g
JycpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tl
biwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICB0eXBlOiBUb2tlbi5TdHJpbmdMaXRlcmFsLAorICAgICAgICAgICAgdmFsdWU6IHN0ciwKKyAg
ICAgICAgICAgIG9jdGFsOiBvY3RhbCwKKyAgICAgICAgICAgIHN0YXJ0TGluZU51bWJlcjogc3Rh
cnRMaW5lTnVtYmVyLAorICAgICAgICAgICAgc3RhcnRMaW5lU3RhcnQ6IHN0YXJ0TGluZVN0YXJ0
LAorICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVT
dGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAg
ZW5kOiBpbmRleAorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RSZWdFeHAo
cGF0dGVybiwgZmxhZ3MpIHsKKyAgICAgICAgdmFyIHZhbHVlOworICAgICAgICB0cnkgeworICAg
ICAgICAgICAgdmFsdWUgPSBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTsKKyAgICAgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJl
Z0V4cCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHNjYW5SZWdFeHBCb2R5KCkgeworICAgICAgICB2YXIgY2gsIHN0ciwgY2xhc3NNYXJr
ZXIsIHRlcm1pbmF0ZWQsIGJvZHk7CisKKyAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAg
ICAgICBhc3NlcnQoY2ggPT09ICcvJywgJ1JlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIG11c3Qg
c3RhcnQgd2l0aCBhIHNsYXNoJyk7CisgICAgICAgIHN0ciA9IHNvdXJjZVtpbmRleCsrXTsKKwor
ICAgICAgICBjbGFzc01hcmtlciA9IGZhbHNlOworICAgICAgICB0ZXJtaW5hdGVkID0gZmFsc2U7
CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3Vy
Y2VbaW5kZXgrK107CisgICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICBpZiAoY2gg
PT09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAg
ICAgICAgICAgICAvLyBFQ01BLTI2MiA3LjguNQorICAgICAgICAgICAgICAgIGlmIChpc0xpbmVU
ZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNM
aW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGNsYXNzTWFya2VyKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHsK
KyAgICAgICAgICAgICAgICAgICAgY2xhc3NNYXJrZXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy8n
KSB7CisgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnWycpIHsK
KyAgICAgICAgICAgICAgICAgICAgY2xhc3NNYXJrZXIgPSB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGVybWluYXRlZCkg
eworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhw
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEV4Y2x1ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcg
c2xhc2guCisgICAgICAgIGJvZHkgPSBzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTsKKyAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHZhbHVlOiBib2R5LAorICAgICAgICAgICAgbGl0
ZXJhbDogc3RyCisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhblJlZ0V4cEZs
YWdzKCkgeworICAgICAgICB2YXIgY2gsIHN0ciwgZmxhZ3MsIHJlc3RvcmU7CisKKyAgICAgICAg
c3RyID0gJyc7CisgICAgICAgIGZsYWdzID0gJyc7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxl
bmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgaWYg
KCFpc0lkZW50aWZpZXJQYXJ0KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICBpZiAoY2ggPT09ICdcXCcgJiYgaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBj
aCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHsKKyAg
ICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9
IGluZGV4OworICAgICAgICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmbGFn
cyArPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RyICs9ICdcXHUnOyByZXN0
b3JlIDwgaW5kZXg7ICsrcmVzdG9yZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSBzb3VyY2VbcmVzdG9yZV07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJl
c3RvcmU7CisgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyArPSAndSc7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdHIgKz0gJ1xcdSc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVk
VG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3RyICs9ICdcXCc7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xl
cmFudCh7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmxhZ3MgKz0g
Y2g7CisgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHZhbHVlOiBmbGFncywKKyAgICAgICAg
ICAgIGxpdGVyYWw6IHN0cgorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5S
ZWdFeHAoKSB7CisgICAgICAgIHZhciBzdGFydCwgYm9keSwgZmxhZ3MsIHBhdHRlcm4sIHZhbHVl
OworCisgICAgICAgIGxvb2thaGVhZCA9IG51bGw7CisgICAgICAgIHNraXBDb21tZW50KCk7Cisg
ICAgICAgIHN0YXJ0ID0gaW5kZXg7CisKKyAgICAgICAgYm9keSA9IHNjYW5SZWdFeHBCb2R5KCk7
CisgICAgICAgIGZsYWdzID0gc2NhblJlZ0V4cEZsYWdzKCk7CisgICAgICAgIHZhbHVlID0gdGVz
dFJlZ0V4cChib2R5LnZhbHVlLCBmbGFncy52YWx1ZSk7CisKKyAgICAgICAgaWYgKGV4dHJhLnRv
a2VuaXplKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRv
a2VuLlJlZ3VsYXJFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAg
ICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxp
bmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAg
ICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGxpdGVyYWw6IGJvZHkubGl0ZXJhbCArIGZsYWdzLmxp
dGVyYWwsCisgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICBzdGFydDogc3Rh
cnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVu
Y3Rpb24gY29sbGVjdFJlZ2V4KCkgeworICAgICAgICB2YXIgcG9zLCBsb2MsIHJlZ2V4LCB0b2tl
bjsKKworICAgICAgICBza2lwQ29tbWVudCgpOworCisgICAgICAgIHBvcyA9IGluZGV4OworICAg
ICAgICBsb2MgPSB7CisgICAgICAgICAgICBzdGFydDogeworICAgICAgICAgICAgICAgIGxpbmU6
IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAor
ICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHJlZ2V4ID0gc2NhblJlZ0V4cCgp
OworICAgICAgICBsb2MuZW5kID0geworICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAg
ICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgfTsKKworICAgICAg
ICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworICAgICAgICBpZiAoIWV4dHJhLnRva2VuaXpl
KSB7CisgICAgICAgICAgICAvLyBQb3AgdGhlIHByZXZpb3VzIHRva2VuLCB3aGljaCBpcyBsaWtl
bHkgJy8nIG9yICcvPScKKyAgICAgICAgICAgIGlmIChleHRyYS50b2tlbnMubGVuZ3RoID4gMCkg
eworICAgICAgICAgICAgICAgIHRva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLnRva2Vucy5sZW5n
dGggLSAxXTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4ucmFuZ2VbMF0gPT09IHBvcyAmJiB0
b2tlbi50eXBlID09PSAnUHVuY3R1YXRvcicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRv
a2VuLnZhbHVlID09PSAnLycgfHwgdG9rZW4udmFsdWUgPT09ICcvPScpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXh0cmEudG9r
ZW5zLnB1c2goeworICAgICAgICAgICAgICAgIHR5cGU6ICdSZWd1bGFyRXhwcmVzc2lvbicsCisg
ICAgICAgICAgICAgICAgdmFsdWU6IHJlZ2V4LmxpdGVyYWwsCisgICAgICAgICAgICAgICAgcmFu
Z2U6IFtwb3MsIGluZGV4XSwKKyAgICAgICAgICAgICAgICBsb2M6IGxvYworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVnZXg7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gaXNJZGVudGlmaWVyTmFtZSh0b2tlbikgeworICAgICAgICByZXR1cm4gdG9rZW4udHlw
ZSA9PT0gVG9rZW4uSWRlbnRpZmllciB8fAorICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9r
ZW4uS2V5d29yZCB8fAorICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxp
dGVyYWwgfHwKKyAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLk51bGxMaXRlcmFsOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGFkdmFuY2VTbGFzaCgpIHsKKyAgICAgICAgdmFyIHByZXZU
b2tlbiwKKyAgICAgICAgICAgIGNoZWNrVG9rZW47CisgICAgICAgIC8vIFVzaW5nIHRoZSBmb2xs
b3dpbmcgYWxnb3JpdGhtOgorICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9z
d2VldC5qcy93aWtpL2Rlc2lnbgorICAgICAgICBwcmV2VG9rZW4gPSBleHRyYS50b2tlbnNbZXh0
cmEudG9rZW5zLmxlbmd0aCAtIDFdOworICAgICAgICBpZiAoIXByZXZUb2tlbikgeworICAgICAg
ICAgICAgLy8gTm90aGluZyBiZWZvcmUgdGhhdDogaXQgY2Fubm90IGJlIGEgZGl2aXNpb24uCisg
ICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHByZXZUb2tlbi50eXBlID09PSAnUHVuY3R1YXRvcicpIHsKKyAgICAgICAgICAgIGlmIChwcmV2
VG9rZW4udmFsdWUgPT09ICddJykgeworICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1
YXRvcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9
PT0gJyknKSB7CisgICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRy
YS5vcGVuUGFyZW5Ub2tlbiAtIDFdOworICAgICAgICAgICAgICAgIGlmIChjaGVja1Rva2VuICYm
CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnR5cGUgPT09ICdLZXl3b3JkJyAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrVG9rZW4udmFsdWUgPT09ICdpZicgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2hpbGUnIHx8
CisgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ2ZvcicgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2l0aCcpKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSAnfScpIHsKKyAgICAg
ICAgICAgICAgICAvLyBEaXZpZGluZyBhIGZ1bmN0aW9uIGJ5IGFueXRoaW5nIG1ha2VzIGxpdHRs
ZSBzZW5zZSwKKyAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhh
dC4KKyAgICAgICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2Vu
IC0gM10gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVu
Q3VybHlUb2tlbiAtIDNdLnR5cGUgPT09ICdLZXl3b3JkJykgeworICAgICAgICAgICAgICAgICAg
ICAvLyBBbm9ueW1vdXMgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4g
PSBleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjaGVja1Rva2VuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c2NhblB1bmN0dWF0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0gJiYKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAt
IDRdLnR5cGUgPT09ICdLZXl3b3JkJykgeworICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZCBm
dW5jdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tl
eHRyYS5vcGVuQ3VybHlUb2tlbiAtIDVdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNr
VG9rZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAvLyBjaGVja1Rva2VuIGRldGVybWluZXMgd2hldGhlciB0aGUgZnVu
Y3Rpb24gaXMKKyAgICAgICAgICAgICAgICAvLyBhIGRlY2xhcmF0aW9uIG9yIGFuIGV4cHJlc3Np
b24uCisgICAgICAgICAgICAgICAgaWYgKEZuRXhwclRva2Vucy5pbmRleE9mKGNoZWNrVG9rZW4u
dmFsdWUpID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gZXhwcmVzc2lv
bi4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEl0IGlzIGEgZGVjbGFyYXRpb24uCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2
VG9rZW4udHlwZSA9PT0gJ0tleXdvcmQnKSB7CisgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJl
Z2V4KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gYWR2YW5jZSgpIHsKKyAgICAgICAgdmFyIGNoOworCisgICAgICAg
IHNraXBDb21tZW50KCk7CisKKyAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgeworICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5FT0YsCisgICAgICAg
ICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3Rh
cnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICBzdGFydDogaW5kZXgsCisgICAgICAgICAg
ICAgICAgZW5kOiBpbmRleAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGNo
ID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOworCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJT
dGFydChjaCkpIHsKKyAgICAgICAgICAgIHJldHVybiBzY2FuSWRlbnRpZmllcigpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gVmVyeSBjb21tb246ICggYW5kICkgYW5kIDsKKyAgICAgICAgaWYg
KGNoID09PSAweDI4IHx8IGNoID09PSAweDI5IHx8IGNoID09PSAweDNCKSB7CisgICAgICAgICAg
ICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0cmlu
ZyBsaXRlcmFsIHN0YXJ0cyB3aXRoIHNpbmdsZSBxdW90ZSAoVSswMDI3KSBvciBkb3VibGUgcXVv
dGUgKFUrMDAyMikuCisgICAgICAgIGlmIChjaCA9PT0gMHgyNyB8fCBjaCA9PT0gMHgyMikgewor
ICAgICAgICAgICAgcmV0dXJuIHNjYW5TdHJpbmdMaXRlcmFsKCk7CisgICAgICAgIH0KKworCisg
ICAgICAgIC8vIERvdCAoLikgVSswMDJFIGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQg
bnVtYmVyLCBoZW5jZSB0aGUgbmVlZAorICAgICAgICAvLyB0byBjaGVjayB0aGUgbmV4dCBjaGFy
YWN0ZXIuCisgICAgICAgIGlmIChjaCA9PT0gMHgyRSkgeworICAgICAgICAgICAgaWYgKGlzRGVj
aW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkpKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0ZXJhbCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNE
ZWNpbWFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFs
KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTbGFzaCAoLykgVSswMDJGIGNhbiBhbHNvIHN0
YXJ0IGEgcmVnZXguCisgICAgICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjaCA9PT0gMHgyRikg
eworICAgICAgICAgICAgcmV0dXJuIGFkdmFuY2VTbGFzaCgpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29sbGVj
dFRva2VuKCkgeworICAgICAgICB2YXIgbG9jLCB0b2tlbiwgcmFuZ2UsIHZhbHVlOworCisgICAg
ICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIGxvYyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7
CisgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1
bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAg
ICAgdG9rZW4gPSBhZHZhbmNlKCk7CisgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICBs
aW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAor
ICAgICAgICB9OworCisgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAg
ICAgICAgICAgIHZhbHVlID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpOwor
ICAgICAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goeworICAgICAgICAgICAgICAgIHR5cGU6IFRv
a2VuTmFtZVt0b2tlbi50eXBlXSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAg
ICAgICAgICAgICAgcmFuZ2U6IFt0b2tlbi5zdGFydCwgdG9rZW4uZW5kXSwKKyAgICAgICAgICAg
ICAgICBsb2M6IGxvYworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gdG9rZW47CisgICAgfQorCisgICAgZnVuY3Rpb24gbGV4KCkgeworICAgICAgICB2YXIgdG9r
ZW47CisKKyAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGluZGV4ID0gdG9rZW4u
ZW5kOworICAgICAgICBsaW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsKKyAgICAgICAgbGlu
ZVN0YXJ0ID0gdG9rZW4ubGluZVN0YXJ0OworCisgICAgICAgIGxvb2thaGVhZCA9ICh0eXBlb2Yg
ZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykgPyBjb2xsZWN0VG9rZW4oKSA6IGFkdmFuY2Uo
KTsKKworICAgICAgICBpbmRleCA9IHRva2VuLmVuZDsKKyAgICAgICAgbGluZU51bWJlciA9IHRv
a2VuLmxpbmVOdW1iZXI7CisgICAgICAgIGxpbmVTdGFydCA9IHRva2VuLmxpbmVTdGFydDsKKwor
ICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQorCisgICAgZnVuY3Rpb24gcGVlaygpIHsKKyAg
ICAgICAgdmFyIHBvcywgbGluZSwgc3RhcnQ7CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAg
ICAgIGxpbmUgPSBsaW5lTnVtYmVyOworICAgICAgICBzdGFydCA9IGxpbmVTdGFydDsKKyAgICAg
ICAgbG9va2FoZWFkID0gKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSA/IGNv
bGxlY3RUb2tlbigpIDogYWR2YW5jZSgpOworICAgICAgICBpbmRleCA9IHBvczsKKyAgICAgICAg
bGluZU51bWJlciA9IGxpbmU7CisgICAgICAgIGxpbmVTdGFydCA9IHN0YXJ0OworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIFBvc2l0aW9uKGxpbmUsIGNvbHVtbikgeworICAgICAgICB0aGlzLmxpbmUg
PSBsaW5lOworICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBTb3VyY2VMb2NhdGlvbihzdGFydExpbmUsIHN0YXJ0Q29sdW1uLCBsaW5lLCBjb2x1bW4p
IHsKKyAgICAgICAgdGhpcy5zdGFydCA9IG5ldyBQb3NpdGlvbihzdGFydExpbmUsIHN0YXJ0Q29s
dW1uKTsKKyAgICAgICAgdGhpcy5lbmQgPSBuZXcgUG9zaXRpb24obGluZSwgY29sdW1uKTsKKyAg
ICB9CisKKyAgICBTeW50YXhUcmVlRGVsZWdhdGUgPSB7CisKKyAgICAgICAgbmFtZTogJ1N5bnRh
eFRyZWUnLAorCisgICAgICAgIHByb2Nlc3NDb21tZW50OiBmdW5jdGlvbiAobm9kZSkgeworICAg
ICAgICAgICAgdmFyIGxhc3RDaGlsZCwgdHJhaWxpbmdDb21tZW50czsKKworICAgICAgICAgICAg
aWYgKG5vZGUudHlwZSA9PT0gU3ludGF4LlByb2dyYW0pIHsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS5ib2R5Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGV4dHJhLnRy
YWlsaW5nQ29tbWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChleHRyYS50
cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGV4dHJhLnRyYWlsaW5nQ29tbWVudHM7Cisg
ICAgICAgICAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1l
bnRzLmxlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpZiAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYm
CisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJv
dHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50cyAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0
YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHNbMF0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5n
ZVsxXSkgeworICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEuYm90
dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5n
Q29tbWVudHM7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBleHRyYS5ib3R0b21SaWdodFN0
YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50czsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEVhdGlu
ZyB0aGUgc3RhY2suCisgICAgICAgICAgICB3aGlsZSAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5s
ZW5ndGggPiAwICYmIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFj
ay5sZW5ndGggLSAxXS5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzBdKSB7CisgICAgICAgICAgICAg
ICAgbGFzdENoaWxkID0gZXh0cmEuYm90dG9tUmlnaHRTdGFjay5wb3AoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGxhc3RDaGlsZCkgeworICAgICAgICAgICAgICAgIGlmIChs
YXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzICYmIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHNbbGFz
dENoaWxkLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdl
WzBdKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGFzdENo
aWxkLmxlYWRpbmdDb21tZW50czsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxhc3RDaGls
ZC5sZWFkaW5nQ29tbWVudHM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IGlmIChleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoID4gMCAmJiBleHRyYS5sZWFkaW5nQ29t
bWVudHNbZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCAtIDFdLnJhbmdlWzFdIDw9IG5vZGUu
cmFuZ2VbMF0pIHsKKyAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IGV4dHJh
LmxlYWRpbmdDb21tZW50czsKKyAgICAgICAgICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMg
PSBbXTsKKyAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50
cykgeworICAgICAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29t
bWVudHM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3Rh
Y2sucHVzaChub2RlKTsKKyAgICAgICAgfSwKKworICAgICAgICBtYXJrRW5kOiBmdW5jdGlvbiAo
bm9kZSwgc3RhcnRUb2tlbikgeworICAgICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7CisgICAg
ICAgICAgICAgICAgbm9kZS5yYW5nZSA9IFtzdGFydFRva2VuLnN0YXJ0LCBpbmRleF07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAgICAgICAg
bm9kZS5sb2MgPSBuZXcgU291cmNlTG9jYXRpb24oCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0
VG9rZW4uc3RhcnRMaW5lTnVtYmVyID09PSB1bmRlZmluZWQgPyAgc3RhcnRUb2tlbi5saW5lTnVt
YmVyIDogc3RhcnRUb2tlbi5zdGFydExpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIHN0
YXJ0VG9rZW4uc3RhcnQgLSAoc3RhcnRUb2tlbi5zdGFydExpbmVTdGFydCA9PT0gdW5kZWZpbmVk
ID8gIHN0YXJ0VG9rZW4ubGluZVN0YXJ0IDogc3RhcnRUb2tlbi5zdGFydExpbmVTdGFydCksCisg
ICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIGluZGV4
IC0gbGluZVN0YXJ0CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB0aGlzLnBv
c3RQcm9jZXNzKG5vZGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZXh0cmEu
YXR0YWNoQ29tbWVudCkgeworICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0NvbW1lbnQobm9k
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSwK
KworICAgICAgICBwb3N0UHJvY2VzczogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIGlm
IChleHRyYS5zb3VyY2UpIHsKKyAgICAgICAgICAgICAgICBub2RlLmxvYy5zb3VyY2UgPSBleHRy
YS5zb3VyY2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAg
ICAgfSwKKworICAgICAgICBjcmVhdGVBcnJheUV4cHJlc3Npb246IGZ1bmN0aW9uIChlbGVtZW50
cykgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
QXJyYXlFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cworICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVBc3NpZ25tZW50RXhwcmVz
c2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkgeworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb24s
CisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxl
ZnQ6IGxlZnQsCisgICAgICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0CisgICAgICAgICAgICB9Owor
ICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChv
cGVyYXRvciwgbGVmdCwgcmlnaHQpIHsKKyAgICAgICAgICAgIHZhciB0eXBlID0gKG9wZXJhdG9y
ID09PSAnfHwnIHx8IG9wZXJhdG9yID09PSAnJiYnKSA/IFN5bnRheC5Mb2dpY2FsRXhwcmVzc2lv
biA6CisgICAgICAgICAgICAgICAgICAgICAgICBTeW50YXguQmluYXJ5RXhwcmVzc2lvbjsKKyAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAg
ICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsCisgICAgICAgICAgICAgICAgbGVmdDogbGVmdCwK
KyAgICAgICAgICAgICAgICByaWdodDogcmlnaHQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0s
CisKKyAgICAgICAgY3JlYXRlQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5KSB7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5CbG9ja1N0YXRl
bWVudCwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAg
ICB9LAorCisgICAgICAgIGNyZWF0ZUJyZWFrU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsK
KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkJyZWFr
U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbAorICAgICAgICAgICAgfTsK
KyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gKGNh
bGxlZSwgYXJncykgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguQ2FsbEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUs
CisgICAgICAgICAgICAgICAgJ2FyZ3VtZW50cyc6IGFyZ3MKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ2F0Y2hDbGF1c2U6IGZ1bmN0aW9uIChwYXJhbSwgYm9k
eSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
Q2F0Y2hDbGF1c2UsCisgICAgICAgICAgICAgICAgcGFyYW06IHBhcmFtLAorICAgICAgICAgICAg
ICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3Jl
YXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uOiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCwgYWx0
ZXJuYXRlKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5
bnRheC5Db25kaXRpb25hbEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwK
KyAgICAgICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50LAorICAgICAgICAgICAgICAg
IGFsdGVybmF0ZTogYWx0ZXJuYXRlCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAg
ICAgIGNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNvbnRpbnVlU3RhdGVt
ZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbAorICAgICAgICAgICAgfTsKKyAgICAg
ICAgfSwKKworICAgICAgICBjcmVhdGVEZWJ1Z2dlclN0YXRlbWVudDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRGVidWdn
ZXJTdGF0ZW1lbnQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRl
RG9XaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gKGJvZHksIHRlc3QpIHsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkRvV2hpbGVTdGF0ZW1lbnQsCisg
ICAgICAgICAgICAgICAgYm9keTogYm9keSwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0Cisg
ICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUVtcHR5U3RhdGVtZW50
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5FbXB0eVN0YXRlbWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKwor
ICAgICAgICBjcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50OiBmdW5jdGlvbiAoZXhwcmVzc2lvbikg
eworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRXhw
cmVzc2lvblN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9u
CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUZvclN0YXRlbWVu
dDogZnVuY3Rpb24gKGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkgeworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRm9yU3RhdGVtZW50LAorICAgICAg
ICAgICAgICAgIGluaXQ6IGluaXQsCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAg
ICAgICAgICAgICB1cGRhdGU6IHVwZGF0ZSwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5Cisg
ICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUZvckluU3RhdGVtZW50
OiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkZvckluU3RhdGVtZW50LAorICAgICAgICAgICAg
ICAgIGxlZnQ6IGxlZnQsCisgICAgICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LAorICAgICAgICAg
ICAgICAgIGJvZHk6IGJvZHksCisgICAgICAgICAgICAgICAgZWFjaDogZmFsc2UKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbjog
ZnVuY3Rpb24gKGlkLCBwYXJhbXMsIGRlZmF1bHRzLCBib2R5KSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uLAor
ICAgICAgICAgICAgICAgIGlkOiBpZCwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywK
KyAgICAgICAgICAgICAgICBkZWZhdWx0czogZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgYm9k
eTogYm9keSwKKyAgICAgICAgICAgICAgICByZXN0OiBudWxsLAorICAgICAgICAgICAgICAgIGdl
bmVyYXRvcjogZmFsc2UsCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZmFsc2UKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9u
OiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgZGVmYXVsdHMsIGJvZHkpIHsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbiwK
KyAgICAgICAgICAgICAgICBpZDogaWQsCisgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMs
CisgICAgICAgICAgICAgICAgZGVmYXVsdHM6IGRlZmF1bHRzLAorICAgICAgICAgICAgICAgIGJv
ZHk6IGJvZHksCisgICAgICAgICAgICAgICAgcmVzdDogbnVsbCwKKyAgICAgICAgICAgICAgICBn
ZW5lcmF0b3I6IGZhbHNlLAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGZhbHNlCisgICAg
ICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUlkZW50aWZpZXI6IGZ1bmN0
aW9uIChuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5JZGVudGlmaWVyLAorICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlSWZTdGF0ZW1lbnQ6IGZ1bmN0aW9u
ICh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LklmU3RhdGVtZW50LAorICAgICAgICAgICAgICAg
IHRlc3Q6IHRlc3QsCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCwKKyAg
ICAgICAgICAgICAgICBhbHRlcm5hdGU6IGFsdGVybmF0ZQorICAgICAgICAgICAgfTsKKyAgICAg
ICAgfSwKKworICAgICAgICBjcmVhdGVMYWJlbGVkU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWws
IGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3lu
dGF4LkxhYmVsZWRTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLAorICAg
ICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAg
ICAgICAgY3JlYXRlTGl0ZXJhbDogZnVuY3Rpb24gKHRva2VuKSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5MaXRlcmFsLAorICAgICAgICAgICAg
ICAgIHZhbHVlOiB0b2tlbi52YWx1ZSwKKyAgICAgICAgICAgICAgICByYXc6IHNvdXJjZS5zbGlj
ZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKwor
ICAgICAgICBjcmVhdGVNZW1iZXJFeHByZXNzaW9uOiBmdW5jdGlvbiAoYWNjZXNzb3IsIG9iamVj
dCwgcHJvcGVydHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4Lk1lbWJlckV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IGFj
Y2Vzc29yID09PSAnWycsCisgICAgICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsCisgICAgICAg
ICAgICAgICAgcHJvcGVydHk6IHByb3BlcnR5CisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZU5ld0V4cHJlc3Npb246IGZ1bmN0aW9uIChjYWxsZWUsIGFyZ3MpIHsK
KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5ld0V4
cHJlc3Npb24sCisgICAgICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUsCisgICAgICAgICAgICAg
ICAgJ2FyZ3VtZW50cyc6IGFyZ3MKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgY3JlYXRlT2JqZWN0RXhwcmVzc2lvbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk9iamVjdEV4cHJl
c3Npb24sCisgICAgICAgICAgICAgICAgcHJvcGVydGllczogcHJvcGVydGllcworICAgICAgICAg
ICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVQb3N0Zml4RXhwcmVzc2lvbjogZnVu
Y3Rpb24gKG9wZXJhdG9yLCBhcmd1bWVudCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguVXBkYXRlRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAg
ICBvcGVyYXRvcjogb3BlcmF0b3IsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50
LAorICAgICAgICAgICAgICAgIHByZWZpeDogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0sCisKKyAgICAgICAgY3JlYXRlUHJvZ3JhbTogZnVuY3Rpb24gKGJvZHkpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlByb2dyYW0sCisgICAg
ICAgICAgICAgICAgYm9keTogYm9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVQcm9wZXJ0eTogZnVuY3Rpb24gKGtpbmQsIGtleSwgdmFsdWUpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlByb3BlcnR5LAor
ICAgICAgICAgICAgICAgIGtleToga2V5LAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwK
KyAgICAgICAgICAgICAgICBraW5kOiBraW5kCisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZVJldHVyblN0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXR1cm5T
dGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50CisgICAgICAgICAg
ICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbjogZnVu
Y3Rpb24gKGV4cHJlc3Npb25zKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5TZXF1ZW5jZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZXhw
cmVzc2lvbnM6IGV4cHJlc3Npb25zCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAg
ICAgIGNyZWF0ZVN3aXRjaENhc2U6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50KSB7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hDYXNl
LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAgICAgICAgY29uc2VxdWVu
dDogY29uc2VxdWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVh
dGVTd2l0Y2hTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChkaXNjcmltaW5hbnQsIGNhc2VzKSB7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hTdGF0
ZW1lbnQsCisgICAgICAgICAgICAgICAgZGlzY3JpbWluYW50OiBkaXNjcmltaW5hbnQsCisgICAg
ICAgICAgICAgICAgY2FzZXM6IGNhc2VzCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisg
ICAgICAgIGNyZWF0ZVRoaXNFeHByZXNzaW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UaGlzRXhwcmVzc2lvbgorICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVUaHJvd1N0YXRlbWVudDog
ZnVuY3Rpb24gKGFyZ3VtZW50KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5UaHJvd1N0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dDogYXJndW1lbnQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRl
VHJ5U3RhdGVtZW50OiBmdW5jdGlvbiAoYmxvY2ssIGd1YXJkZWRIYW5kbGVycywgaGFuZGxlcnMs
IGZpbmFsaXplcikgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguVHJ5U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGJsb2NrOiBibG9jaywKKyAg
ICAgICAgICAgICAgICBndWFyZGVkSGFuZGxlcnM6IGd1YXJkZWRIYW5kbGVycywKKyAgICAgICAg
ICAgICAgICBoYW5kbGVyczogaGFuZGxlcnMsCisgICAgICAgICAgICAgICAgZmluYWxpemVyOiBm
aW5hbGl6ZXIKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVW5h
cnlFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7CisgICAgICAgICAg
ICBpZiAob3BlcmF0b3IgPT09ICcrKycgfHwgb3BlcmF0b3IgPT09ICctLScpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVXBkYXRl
RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAg
ICAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsCisgICAgICAgICAgICAgICAgICAg
IHByZWZpeDogdHJ1ZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmFyeUV4cHJlc3Np
b24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAg
IGFyZ3VtZW50OiBhcmd1bWVudCwKKyAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlv
bjogZnVuY3Rpb24gKGRlY2xhcmF0aW9ucywga2luZCkgeworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbiwKKyAgICAg
ICAgICAgICAgICBkZWNsYXJhdGlvbnM6IGRlY2xhcmF0aW9ucywKKyAgICAgICAgICAgICAgICBr
aW5kOiBraW5kCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVZh
cmlhYmxlRGVjbGFyYXRvcjogZnVuY3Rpb24gKGlkLCBpbml0KSB7CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0b3IsCisg
ICAgICAgICAgICAgICAgaWQ6IGlkLAorICAgICAgICAgICAgICAgIGluaXQ6IGluaXQKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlV2hpbGVTdGF0ZW1lbnQ6IGZ1
bmN0aW9uICh0ZXN0LCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5XaGlsZVN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0
ZXN0LAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0sCisKKyAgICAgICAgY3JlYXRlV2l0aFN0YXRlbWVudDogZnVuY3Rpb24gKG9iamVjdCwgYm9k
eSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
V2l0aFN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBvYmplY3Q6IG9iamVjdCwKKyAgICAgICAg
ICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfTsKKwor
ICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgbGluZSB0ZXJtaW5hdG9yIGJlZm9yZSB0
aGUgbmV4dCB0b2tlbi4KKworICAgIGZ1bmN0aW9uIHBlZWtMaW5lVGVybWluYXRvcigpIHsKKyAg
ICAgICAgdmFyIHBvcywgbGluZSwgc3RhcnQsIGZvdW5kOworCisgICAgICAgIHBvcyA9IGluZGV4
OworICAgICAgICBsaW5lID0gbGluZU51bWJlcjsKKyAgICAgICAgc3RhcnQgPSBsaW5lU3RhcnQ7
CisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIGZvdW5kID0gbGluZU51bWJlciAhPT0g
bGluZTsKKyAgICAgICAgaW5kZXggPSBwb3M7CisgICAgICAgIGxpbmVOdW1iZXIgPSBsaW5lOwor
ICAgICAgICBsaW5lU3RhcnQgPSBzdGFydDsKKworICAgICAgICByZXR1cm4gZm91bmQ7CisgICAg
fQorCisgICAgLy8gVGhyb3cgYW4gZXhjZXB0aW9uCisKKyAgICBmdW5jdGlvbiB0aHJvd0Vycm9y
KHRva2VuLCBtZXNzYWdlRm9ybWF0KSB7CisgICAgICAgIHZhciBlcnJvciwKKyAgICAgICAgICAg
IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLAorICAgICAg
ICAgICAgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKAorICAgICAgICAgICAgICAgIC8lKFxk
KS9nLAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh3aG9sZSwgaW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0KGluZGV4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5j
ZSBtdXN0IGJlIGluIHJhbmdlJyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2lu
ZGV4XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICApOworCisgICAgICAgIGlmICh0
eXBlb2YgdG9rZW4ubGluZU51bWJlciA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgIGVycm9y
ID0gbmV3IEVycm9yKCdMaW5lICcgKyB0b2tlbi5saW5lTnVtYmVyICsgJzogJyArIG1zZyk7Cisg
ICAgICAgICAgICBlcnJvci5pbmRleCA9IHRva2VuLnN0YXJ0OworICAgICAgICAgICAgZXJyb3Iu
bGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7CisgICAgICAgICAgICBlcnJvci5jb2x1bW4g
PSB0b2tlbi5zdGFydCAtIGxpbmVTdGFydCArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBlcnJvciA9IG5ldyBFcnJvcignTGluZSAnICsgbGluZU51bWJlciArICc6ICcgKyBtc2cp
OworICAgICAgICAgICAgZXJyb3IuaW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIGVycm9yLmxp
bmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICAgICAgZXJyb3IuY29sdW1uID0gaW5kZXgg
LSBsaW5lU3RhcnQgKyAxOworICAgICAgICB9CisKKyAgICAgICAgZXJyb3IuZGVzY3JpcHRpb24g
PSBtc2c7CisgICAgICAgIHRocm93IGVycm9yOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRocm93
RXJyb3JUb2xlcmFudCgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRocm93RXJyb3Iu
YXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAg
ICAgaWYgKGV4dHJhLmVycm9ycykgeworICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNo
KGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisKKyAgICAvLyBUaHJvdyBhbiBleGNlcHRp
b24gYmVjYXVzZSBvZiB0aGUgdG9rZW4uCisKKyAgICBmdW5jdGlvbiB0aHJvd1VuZXhwZWN0ZWQo
dG9rZW4pIHsKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRikgeworICAgICAg
ICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZEVPUyk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsK
KyAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWROdW1iZXIp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlN0cmluZ0xp
dGVyYWwpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0
ZWRTdHJpbmcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2Vu
LklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVu
ZXhwZWN0ZWRJZGVudGlmaWVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50eXBl
ID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAgICAgICBpZiAoaXNGdXR1cmVSZXNlcnZlZFdv
cmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVz
c2FnZXMuVW5leHBlY3RlZFJlc2VydmVkKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0
ICYmIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29y
ZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCB0b2tlbi52YWx1ZSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBCb29sZWFuTGl0ZXJhbCwgTnVsbExpdGVyYWwsIG9y
IFB1bmN0dWF0b3IuCisgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0
ZWRUb2tlbiwgdG9rZW4udmFsdWUpOworICAgIH0KKworICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0
b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuCisgICAgLy8gSWYgbm90LCBh
biBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCisKKyAgICBmdW5jdGlvbiBleHBlY3QodmFsdWUp
IHsKKyAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7CisgICAgICAgIGlmICh0b2tlbi50eXBlICE9
PSBUb2tlbi5QdW5jdHVhdG9yIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkgeworICAgICAgICAg
ICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEV4
cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIGtleXdvcmQuCisgICAg
Ly8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCisKKyAgICBmdW5jdGlvbiBl
eHBlY3RLZXl3b3JkKGtleXdvcmQpIHsKKyAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7CisgICAg
ICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5LZXl3b3JkIHx8IHRva2VuLnZhbHVlICE9PSBr
ZXl3b3JkKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0
aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuCisKKyAgICBmdW5jdGlvbiBtYXRjaCh2YWx1ZSkgewor
ICAgICAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9v
a2FoZWFkLnZhbHVlID09PSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0
aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQga2V5d29yZAorCisgICAgZnVuY3Rp
b24gbWF0Y2hLZXl3b3JkKGtleXdvcmQpIHsKKyAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBl
ID09PSBUb2tlbi5LZXl3b3JkICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDsKKyAgICB9
CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhbiBhc3NpZ25tZW50
IG9wZXJhdG9yCisKKyAgICBmdW5jdGlvbiBtYXRjaEFzc2lnbigpIHsKKyAgICAgICAgdmFyIG9w
OworCisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvcikgewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG9wID0gbG9va2Fo
ZWFkLnZhbHVlOworICAgICAgICByZXR1cm4gb3AgPT09ICc9JyB8fAorICAgICAgICAgICAgb3Ag
PT09ICcqPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnLz0nIHx8CisgICAgICAgICAgICBvcCA9
PT0gJyU9JyB8fAorICAgICAgICAgICAgb3AgPT09ICcrPScgfHwKKyAgICAgICAgICAgIG9wID09
PSAnLT0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJzw8PScgfHwKKyAgICAgICAgICAgIG9wID09
PSAnPj49JyB8fAorICAgICAgICAgICAgb3AgPT09ICc+Pj49JyB8fAorICAgICAgICAgICAgb3Ag
PT09ICcmPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnXj0nIHx8CisgICAgICAgICAgICBvcCA9
PT0gJ3w9JzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkgeworICAg
ICAgICB2YXIgbGluZTsKKworICAgICAgICAvLyBDYXRjaCB0aGUgdmVyeSBjb21tb24gY2FzZSBm
aXJzdDogaW1tZWRpYXRlbHkgYSBzZW1pY29sb24gKFUrMDAzQikuCisgICAgICAgIGlmIChzb3Vy
Y2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0IgfHwgbWF0Y2goJzsnKSkgeworICAgICAgICAg
ICAgbGV4KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsaW5l
ID0gbGluZU51bWJlcjsKKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgaWYgKGxpbmVO
dW1iZXIgIT09IGxpbmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GICYmICFtYXRjaCgnfScpKSB7Cisg
ICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFJldHVybiB0cnVlIGlmIHByb3ZpZGVkIGV4cHJlc3Npb24gaXMgTGVmdEhhbmRT
aWRlRXhwcmVzc2lvbgorCisgICAgZnVuY3Rpb24gaXNMZWZ0SGFuZFNpZGUoZXhwcikgeworICAg
ICAgICByZXR1cm4gZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciB8fCBleHByLnR5cGUg
PT09IFN5bnRheC5NZW1iZXJFeHByZXNzaW9uOworICAgIH0KKworICAgIC8vIDExLjEuNCBBcnJh
eSBJbml0aWFsaXNlcgorCisgICAgZnVuY3Rpb24gcGFyc2VBcnJheUluaXRpYWxpc2VyKCkgewor
ICAgICAgICB2YXIgZWxlbWVudHMgPSBbXSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRv
a2VuID0gbG9va2FoZWFkOworICAgICAgICBleHBlY3QoJ1snKTsKKworICAgICAgICB3aGlsZSAo
IW1hdGNoKCddJykpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7CisgICAgICAgICAg
ICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChudWxsKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKCkpOworCisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7
CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGxleCgpOworCisgICAgICAgIHJldHVy
biBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUFycmF5RXhwcmVzc2lvbihlbGVtZW50
cyksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDExLjEuNSBPYmplY3QgSW5pdGlhbGlz
ZXIKKworICAgIGZ1bmN0aW9uIHBhcnNlUHJvcGVydHlGdW5jdGlvbihwYXJhbSwgZmlyc3QpIHsK
KyAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0LCBib2R5LCBzdGFydFRva2VuOworCisgICAgICAg
IHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0OworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFk
OworICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7CisgICAgICAg
IGlmIChmaXJzdCAmJiBzdHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChwYXJhbVswXS5uYW1lKSkg
eworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KGZpcnN0LCBNZXNzYWdlcy5TdHJpY3RQ
YXJhbU5hbWUpOworICAgICAgICB9CisgICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0Owor
ICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVGdW5jdGlvbkV4
cHJlc3Npb24obnVsbCwgcGFyYW0sIFtdLCBib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpIHsKKyAgICAgICAgdmFyIHRva2Vu
LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAg
IHRva2VuID0gbGV4KCk7CisKKyAgICAgICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgb25seSBmcm9tIHBhcnNlT2JqZWN0UHJvcGVydHkoKSwgd2hlcmUKKyAgICAgICAgLy8gRU9G
IGFuZCBQdW5jdHVhdG9yIHRva2VucyBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQuCisKKyAgICAg
ICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwgfHwgdG9rZW4udHlwZSA9
PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgdG9r
ZW4ub2N0YWwpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1l
c3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKSwgc3Rh
cnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChk
ZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAg
fQorCisgICAgZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eSgpIHsKKyAgICAgICAgdmFyIHRv
a2VuLCBrZXksIGlkLCB2YWx1ZSwgcGFyYW0sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgdG9rZW4g
PSBsb29rYWhlYWQ7CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAg
aWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKworICAgICAgICAgICAgaWQg
PSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisKKyAgICAgICAgICAgIC8vIFByb3BlcnR5IEFz
c2lnbm1lbnQ6IEdldHRlciBhbmQgU2V0dGVyLgorCisgICAgICAgICAgICBpZiAodG9rZW4udmFs
dWUgPT09ICdnZXQnICYmICFtYXRjaCgnOicpKSB7CisgICAgICAgICAgICAgICAga2V5ID0gcGFy
c2VPYmplY3RQcm9wZXJ0eUtleSgpOworICAgICAgICAgICAgICAgIGV4cGVjdCgnKCcpOworICAg
ICAgICAgICAgICAgIGV4cGVjdCgnKScpOworICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQ
cm9wZXJ0eUZ1bmN0aW9uKFtdKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFy
a0VuZChkZWxlZ2F0ZS5jcmVhdGVQcm9wZXJ0eSgnZ2V0Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9r
ZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnc2V0
JyAmJiAhbWF0Y2goJzonKSkgeworICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJv
cGVydHlLZXkoKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoJygnKTsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0g
VG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgICAgICBleHBlY3QoJyknKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5VbmV4
cGVjdGVkVG9rZW4sIHRva2VuLnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBw
YXJzZVByb3BlcnR5RnVuY3Rpb24oW10pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHBhcmFtID0gWyBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIF07Cisg
ICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnKScpOworICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihwYXJhbSwgdG9rZW4pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVh
dGVQcm9wZXJ0eSgnc2V0Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZXhwZWN0KCc6Jyk7CisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5k
KGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdpbml0JywgaWQsIHZhbHVlKSwgc3RhcnRUb2tlbik7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRiB8fCB0b2tl
bi50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0
ZWQodG9rZW4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAga2V5ID0gcGFyc2VPYmpl
Y3RQcm9wZXJ0eUtleSgpOworICAgICAgICAgICAgZXhwZWN0KCc6Jyk7CisgICAgICAgICAgICB2
YWx1ZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdpbml0Jywga2V5LCB2YWx1
ZSksIHN0YXJ0VG9rZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VP
YmplY3RJbml0aWFsaXNlcigpIHsKKyAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXSwgcHJvcGVy
dHksIG5hbWUsIGtleSwga2luZCwgbWFwID0ge30sIHRvU3RyaW5nID0gU3RyaW5nLCBzdGFydFRv
a2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwZWN0
KCd7Jyk7CisKKyAgICAgICAgd2hpbGUgKCFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICBwcm9w
ZXJ0eSA9IHBhcnNlT2JqZWN0UHJvcGVydHkoKTsKKworICAgICAgICAgICAgaWYgKHByb3BlcnR5
LmtleS50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIG5hbWUg
PSBwcm9wZXJ0eS5rZXkubmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgbmFtZSA9IHRvU3RyaW5nKHByb3BlcnR5LmtleS52YWx1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBraW5kID0gKHByb3BlcnR5LmtpbmQgPT09ICdpbml0JykgPyBQcm9wZXJ0eUtp
bmQuRGF0YSA6IChwcm9wZXJ0eS5raW5kID09PSAnZ2V0JykgPyBQcm9wZXJ0eUtpbmQuR2V0IDog
UHJvcGVydHlLaW5kLlNldDsKKworICAgICAgICAgICAga2V5ID0gJyQnICsgbmFtZTsKKyAgICAg
ICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWFwLCBrZXkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1hcFtrZXldID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGtpbmQgPT09IFByb3BlcnR5S2lu
ZC5EYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30s
IE1lc3NhZ2VzLlN0cmljdER1cGxpY2F0ZVByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChraW5kICE9PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckRhdGFQcm9w
ZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNj
ZXNzb3JEYXRhUHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcFtr
ZXldICYga2luZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50
KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckdldFNldCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWFwW2tleV0gfD0ga2luZDsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWFwW2tleV0gPSBraW5kOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOworCisgICAg
ICAgICAgICBpZiAoIW1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgnfScpOworCisgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZU9iamVjdEV4cHJlc3Np
b24ocHJvcGVydGllcyksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDExLjEuNiBUaGUg
R3JvdXBpbmcgT3BlcmF0b3IKKworICAgIGZ1bmN0aW9uIHBhcnNlR3JvdXBFeHByZXNzaW9uKCkg
eworICAgICAgICB2YXIgZXhwcjsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBl
eHByID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAg
ICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisKKyAgICAvLyAxMS4xIFByaW1hcnkgRXhwcmVzc2lv
bnMKKworICAgIGZ1bmN0aW9uIHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZh
ciB0eXBlLCB0b2tlbiwgZXhwciwgc3RhcnRUb2tlbjsKKworICAgICAgICBpZiAobWF0Y2goJygn
KSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlR3JvdXBFeHByZXNzaW9uKCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNl
QXJyYXlJbml0aWFsaXNlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoKCd7Jykp
IHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7CisgICAgICAg
IH0KKworICAgICAgICB0eXBlID0gbG9va2FoZWFkLnR5cGU7CisgICAgICAgIHN0YXJ0VG9rZW4g
PSBsb29rYWhlYWQ7CisKKyAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsK
KyAgICAgICAgICAgIGV4cHIgPSAgZGVsZWdhdGUuY3JlYXRlSWRlbnRpZmllcihsZXgoKS52YWx1
ZSk7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCB8fCB0
eXBlID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgeworICAgICAgICAgICAgaWYgKHN0cmljdCAm
JiBsb29rYWhlYWQub2N0YWwpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQo
bG9va2FoZWFkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwobGV4KCkpOworICAgICAg
ICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIGlmICht
YXRjaEtleXdvcmQoJ2Z1bmN0aW9uJykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VG
dW5jdGlvbkV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXRj
aEtleXdvcmQoJ3RoaXMnKSkgeworICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAg
ICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVUaGlzRXhwcmVzc2lvbigpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFs
KSB7CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgdG9rZW4udmFsdWUg
PSAodG9rZW4udmFsdWUgPT09ICd0cnVlJyk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUu
Y3JlYXRlTGl0ZXJhbCh0b2tlbik7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4u
TnVsbExpdGVyYWwpIHsKKyAgICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICB0
b2tlbi52YWx1ZSA9IG51bGw7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0
ZXJhbCh0b2tlbik7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJy8nKSB8fCBtYXRjaCgnLz0n
KSkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQn
KSB7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwoY29sbGVj
dFJlZ2V4KCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBleHByID0g
ZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbChzY2FuUmVnRXhwKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcGVlaygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3dVbmV4
cGVjdGVkKGxleCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJr
RW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDExLjIgTGVmdC1IYW5kLVNp
ZGUgRXhwcmVzc2lvbnMKKworICAgIGZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzKCkgeworICAgICAg
ICB2YXIgYXJncyA9IFtdOworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmICgh
bWF0Y2goJyknKSkgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgYXJncy5wdXNoKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSk7CisgICAg
ICAgICAgICAgICAgaWYgKG1hdGNoKCcpJykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0
dXJuIGFyZ3M7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5
KCkgeworICAgICAgICB2YXIgdG9rZW4sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tl
biA9IGxvb2thaGVhZDsKKyAgICAgICAgdG9rZW4gPSBsZXgoKTsKKworICAgICAgICBpZiAoIWlz
SWRlbnRpZmllck5hbWUodG9rZW4pKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9r
ZW4pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdh
dGUuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSB7CisgICAgICAgIGV4cGVjdCgn
LicpOworCisgICAgICAgIHJldHVybiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBwYXJzZUNvbXB1dGVkTWVtYmVyKCkgeworICAgICAgICB2YXIgZXhw
cjsKKworICAgICAgICBleHBlY3QoJ1snKTsKKworICAgICAgICBleHByID0gcGFyc2VFeHByZXNz
aW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCddJyk7CisKKyAgICAgICAgcmV0dXJuIGV4cHI7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VOZXdFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIg
Y2FsbGVlLCBhcmdzLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhl
YWQ7CisgICAgICAgIGV4cGVjdEtleXdvcmQoJ25ldycpOworICAgICAgICBjYWxsZWUgPSBwYXJz
ZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24oKTsKKyAgICAgICAgYXJncyA9IG1hdGNoKCcoJykgPyBw
YXJzZUFyZ3VtZW50cygpIDogW107CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
ZGVsZWdhdGUuY3JlYXRlTmV3RXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MpLCBzdGFydFRva2VuKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0Nh
bGwoKSB7CisgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4sIGV4cHIsIGFyZ3MsIHByb3BlcnR5
LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAg
ICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjsKKyAgICAgICAgc3RhdGUuYWxsb3dJ
biA9IHRydWU7CisgICAgICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoJ25ldycpID8gcGFyc2VOZXdF
eHByZXNzaW9uKCkgOiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCk7CisgICAgICAgIHN0YXRlLmFs
bG93SW4gPSBwcmV2aW91c0FsbG93SW47CisKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAg
ICAgaWYgKG1hdGNoKCcuJykpIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9u
Q29tcHV0ZWRNZW1iZXIoKTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRl
TWVtYmVyRXhwcmVzc2lvbignLicsIGV4cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAobWF0Y2goJygnKSkgeworICAgICAgICAgICAgICAgIGFyZ3MgPSBwYXJzZUFyZ3VtZW50
cygpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDYWxsRXhwcmVzc2lv
bihleHByLCBhcmdzKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ1snKSkgeworICAg
ICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VDb21wdXRlZE1lbWJlcigpOworICAgICAgICAg
ICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwg
cHJvcGVydHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRU
b2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBwcmV2
aW91c0FsbG93SW4sIGV4cHIsIHByb3BlcnR5LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0
VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxs
b3dJbjsKKyAgICAgICAgZXhwciA9IG1hdGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4cHJl
c3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgc3RhdGUuYWxsb3dJ
biA9IHByZXZpb3VzQWxsb3dJbjsKKworICAgICAgICB3aGlsZSAobWF0Y2goJy4nKSB8fCBtYXRj
aCgnWycpKSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAg
IHByb3BlcnR5ID0gcGFyc2VDb21wdXRlZE1lbWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIg
PSBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9u
Q29tcHV0ZWRNZW1iZXIoKTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRl
TWVtYmVyRXhwcmVzc2lvbignLicsIGV4cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICAvLyAxMS4zIFBvc3RmaXggRXhw
cmVzc2lvbnMKKworICAgIGZ1bmN0aW9uIHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKSB7CisgICAg
ICAgIHZhciBleHByLCB0b2tlbiwgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBl
eHByID0gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCk7CisKKyAgICAgICAg
aWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICBp
ZiAoKG1hdGNoKCcrKycpIHx8IG1hdGNoKCctLScpKSAmJiAhcGVla0xpbmVUZXJtaW5hdG9yKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyAxMS4zLjEsIDExLjMuMgorICAgICAgICAgICAgICAgIGlm
IChzdHJpY3QgJiYgZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0
ZWRXb3JkKGV4cHIubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVy
YW50KHt9LCBNZXNzYWdlcy5TdHJpY3RMSFNQb3N0Zml4KTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGV4cHIpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNz
aWdubWVudCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdG9rZW4gPSBs
ZXgoKTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5j
cmVhdGVQb3N0Zml4RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwciksIHN0YXJ0VG9rZW4pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQor
CisgICAgLy8gMTEuNCBVbmFyeSBPcGVyYXRvcnMKKworICAgIGZ1bmN0aW9uIHBhcnNlVW5hcnlF
eHByZXNzaW9uKCkgeworICAgICAgICB2YXIgdG9rZW4sIGV4cHIsIHN0YXJ0VG9rZW47CisKKyAg
ICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVh
ZC50eXBlICE9PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAgICAgICBleHByID0gcGFyc2VQb3N0
Zml4RXhwcmVzc2lvbigpOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcrKycpIHx8IG1hdGNo
KCctLScpKSB7CisgICAgICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICAg
ICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lv
bigpOworICAgICAgICAgICAgLy8gMTEuNC40LCAxMS40LjUKKyAgICAgICAgICAgIGlmIChzdHJp
Y3QgJiYgZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3Jk
KGV4cHIubmFtZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1l
c3NhZ2VzLlN0cmljdExIU1ByZWZpeCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghaXNMZWZ0SGFuZFNpZGUoZXhwcikpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9s
ZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRv
a2VuLnZhbHVlLCBleHByKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5tYXJrRW5kKGV4
cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcrJykgfHwgbWF0Y2go
Jy0nKSB8fCBtYXRjaCgnficpIHx8IG1hdGNoKCchJykpIHsKKyAgICAgICAgICAgIHN0YXJ0VG9r
ZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAg
ZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBleHByID0gZGVsZWdh
dGUuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTsKKyAgICAgICAgICAg
IGV4cHIgPSBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICB9IGVs
c2UgaWYgKG1hdGNoS2V5d29yZCgnZGVsZXRlJykgfHwgbWF0Y2hLZXl3b3JkKCd2b2lkJykgfHwg
bWF0Y2hLZXl3b3JkKCd0eXBlb2YnKSkgeworICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2th
aGVhZDsKKyAgICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICBleHByID0gcGFy
c2VVbmFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVV
bmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpOworICAgICAgICAgICAgZXhwciA9IGRl
bGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBpZiAoc3RyaWN0
ICYmIGV4cHIub3BlcmF0b3IgPT09ICdkZWxldGUnICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0g
U3ludGF4LklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQo
e30sIE1lc3NhZ2VzLlN0cmljdERlbGV0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgZnVuY3Rpb24gYmluYXJ5
UHJlY2VkZW5jZSh0b2tlbiwgYWxsb3dJbikgeworICAgICAgICB2YXIgcHJlYyA9IDA7CisKKyAg
ICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAh
PT0gVG9rZW4uS2V5d29yZCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKwor
ICAgICAgICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7CisgICAgICAgIGNhc2UgJ3x8JzoKKyAgICAg
ICAgICAgIHByZWMgPSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnJiYn
OgorICAgICAgICAgICAgcHJlYyA9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlICd8JzoKKyAgICAgICAgICAgIHByZWMgPSAzOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSAnXic6CisgICAgICAgICAgICBwcmVjID0gNDsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgJyYnOgorICAgICAgICAgICAgcHJlYyA9IDU7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlICc9PSc6CisgICAgICAgIGNhc2UgJyE9JzoKKyAgICAg
ICAgY2FzZSAnPT09JzoKKyAgICAgICAgY2FzZSAnIT09JzoKKyAgICAgICAgICAgIHByZWMgPSA2
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnPCc6CisgICAgICAgIGNhc2Ug
Jz4nOgorICAgICAgICBjYXNlICc8PSc6CisgICAgICAgIGNhc2UgJz49JzoKKyAgICAgICAgY2Fz
ZSAnaW5zdGFuY2VvZic6CisgICAgICAgICAgICBwcmVjID0gNzsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgJ2luJzoKKyAgICAgICAgICAgIHByZWMgPSBhbGxvd0luID8gNyA6
IDA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICc8PCc6CisgICAgICAgIGNh
c2UgJz4+JzoKKyAgICAgICAgY2FzZSAnPj4+JzoKKyAgICAgICAgICAgIHByZWMgPSA4OworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnKyc6CisgICAgICAgIGNhc2UgJy0nOgor
ICAgICAgICAgICAgcHJlYyA9IDk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
ICcqJzoKKyAgICAgICAgY2FzZSAnLyc6CisgICAgICAgIGNhc2UgJyUnOgorICAgICAgICAgICAg
cHJlYyA9IDExOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHByZWM7CisgICAgfQor
CisgICAgLy8gMTEuNSBNdWx0aXBsaWNhdGl2ZSBPcGVyYXRvcnMKKyAgICAvLyAxMS42IEFkZGl0
aXZlIE9wZXJhdG9ycworICAgIC8vIDExLjcgQml0d2lzZSBTaGlmdCBPcGVyYXRvcnMKKyAgICAv
LyAxMS44IFJlbGF0aW9uYWwgT3BlcmF0b3JzCisgICAgLy8gMTEuOSBFcXVhbGl0eSBPcGVyYXRv
cnMKKyAgICAvLyAxMS4xMCBCaW5hcnkgQml0d2lzZSBPcGVyYXRvcnMKKyAgICAvLyAxMS4xMSBC
aW5hcnkgTG9naWNhbCBPcGVyYXRvcnMKKworICAgIGZ1bmN0aW9uIHBhcnNlQmluYXJ5RXhwcmVz
c2lvbigpIHsKKyAgICAgICAgdmFyIG1hcmtlciwgbWFya2VycywgZXhwciwgdG9rZW4sIHByZWMs
IHN0YWNrLCByaWdodCwgb3BlcmF0b3IsIGxlZnQsIGk7CisKKyAgICAgICAgbWFya2VyID0gbG9v
a2FoZWFkOworICAgICAgICBsZWZ0ID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKworICAgICAg
ICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgcHJlYyA9IGJpbmFyeVByZWNlZGVuY2UodG9r
ZW4sIHN0YXRlLmFsbG93SW4pOworICAgICAgICBpZiAocHJlYyA9PT0gMCkgeworICAgICAgICAg
ICAgcmV0dXJuIGxlZnQ7CisgICAgICAgIH0KKyAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7Cisg
ICAgICAgIGxleCgpOworCisgICAgICAgIG1hcmtlcnMgPSBbbWFya2VyLCBsb29rYWhlYWRdOwor
ICAgICAgICByaWdodCA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7CisKKyAgICAgICAgc3RhY2sg
PSBbbGVmdCwgdG9rZW4sIHJpZ2h0XTsKKworICAgICAgICB3aGlsZSAoKHByZWMgPSBiaW5hcnlQ
cmVjZWRlbmNlKGxvb2thaGVhZCwgc3RhdGUuYWxsb3dJbikpID4gMCkgeworCisgICAgICAgICAg
ICAvLyBSZWR1Y2U6IG1ha2UgYSBiaW5hcnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Bt
b3N0IGVudHJpZXMuCisgICAgICAgICAgICB3aGlsZSAoKHN0YWNrLmxlbmd0aCA+IDIpICYmIChw
cmVjIDw9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDJdLnByZWMpKSB7CisgICAgICAgICAgICAgICAg
cmlnaHQgPSBzdGFjay5wb3AoKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRvciA9IHN0YWNrLnBv
cCgpLnZhbHVlOworICAgICAgICAgICAgICAgIGxlZnQgPSBzdGFjay5wb3AoKTsKKyAgICAgICAg
ICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwg
bGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIG1hcmtlcnMucG9wKCk7CisgICAgICAgICAg
ICAgICAgbWFya2VyID0gbWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAg
ICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgbWFya2VyKTsKKyAgICAgICAgICAgICAgICBzdGFj
ay5wdXNoKGV4cHIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTaGlmdC4KKyAg
ICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICB0b2tlbi5wcmVjID0gcHJlYzsK
KyAgICAgICAgICAgIHN0YWNrLnB1c2godG9rZW4pOworICAgICAgICAgICAgbWFya2Vycy5wdXNo
KGxvb2thaGVhZCk7CisgICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsK
KyAgICAgICAgICAgIHN0YWNrLnB1c2goZXhwcik7CisgICAgICAgIH0KKworICAgICAgICAvLyBG
aW5hbCByZWR1Y2UgdG8gY2xlYW4tdXAgdGhlIHN0YWNrLgorICAgICAgICBpID0gc3RhY2subGVu
Z3RoIC0gMTsKKyAgICAgICAgZXhwciA9IHN0YWNrW2ldOworICAgICAgICBtYXJrZXJzLnBvcCgp
OworICAgICAgICB3aGlsZSAoaSA+IDEpIHsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5j
cmVhdGVCaW5hcnlFeHByZXNzaW9uKHN0YWNrW2kgLSAxXS52YWx1ZSwgc3RhY2tbaSAtIDJdLCBl
eHByKTsKKyAgICAgICAgICAgIGkgLT0gMjsKKyAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlcnMu
cG9wKCk7CisgICAgICAgICAgICBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIG1hcmtlcik7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKworICAgIC8vIDExLjEyIENv
bmRpdGlvbmFsIE9wZXJhdG9yCisKKyAgICBmdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsRXhwcmVz
c2lvbigpIHsKKyAgICAgICAgdmFyIGV4cHIsIHByZXZpb3VzQWxsb3dJbiwgY29uc2VxdWVudCwg
YWx0ZXJuYXRlLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7
CisKKyAgICAgICAgZXhwciA9IHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpOworCisgICAgICAgIGlm
IChtYXRjaCgnPycpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHByZXZpb3Vz
QWxsb3dJbiA9IHN0YXRlLmFsbG93SW47CisgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1
ZTsKKyAgICAgICAgICAgIGNvbnNlcXVlbnQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7
CisgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOworICAgICAgICAg
ICAgZXhwZWN0KCc6Jyk7CisgICAgICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZUFzc2lnbm1lbnRF
eHByZXNzaW9uKCk7CisKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDb25kaXRp
b25hbEV4cHJlc3Npb24oZXhwciwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTsKKyAgICAgICAgICAg
IGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICAvLyAxMS4xMyBBc3NpZ25tZW50IE9wZXJhdG9y
cworCisgICAgZnVuY3Rpb24gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpIHsKKyAgICAgICAg
dmFyIHRva2VuLCBsZWZ0LCByaWdodCwgbm9kZSwgc3RhcnRUb2tlbjsKKworICAgICAgICB0b2tl
biA9IGxvb2thaGVhZDsKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAg
ICBub2RlID0gbGVmdCA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7CisKKyAgICAgICAg
aWYgKG1hdGNoQXNzaWduKCkpIHsKKyAgICAgICAgICAgIC8vIExlZnRIYW5kU2lkZUV4cHJlc3Np
b24KKyAgICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUobGVmdCkpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1l
bnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyAxMS4xMy4xCisgICAgICAgICAg
ICBpZiAoc3RyaWN0ICYmIGxlZnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0
cmljdGVkV29yZChsZWZ0Lm5hbWUpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVy
YW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RMSFNBc3NpZ25tZW50KTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VB
c3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICAgICAgbm9kZSA9IGRlbGVnYXRlLm1hcmtF
bmQoZGVsZWdhdGUuY3JlYXRlQXNzaWdubWVudEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGxlZnQs
IHJpZ2h0KSwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbm9kZTsK
KyAgICB9CisKKyAgICAvLyAxMS4xNCBDb21tYSBPcGVyYXRvcgorCisgICAgZnVuY3Rpb24gcGFy
c2VFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgZXhwciwgc3RhcnRUb2tlbiA9IGxvb2thaGVh
ZDsKKworICAgICAgICBleHByID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCisgICAg
ICAgIGlmIChtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRl
U2VxdWVuY2VFeHByZXNzaW9uKFsgZXhwciBdKTsKKworICAgICAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnLCcpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBs
ZXgoKTsKKyAgICAgICAgICAgICAgICBleHByLmV4cHJlc3Npb25zLnB1c2gocGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZWdhdGUu
bWFya0VuZChleHByLCBzdGFydFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBl
eHByOworICAgIH0KKworICAgIC8vIDEyLjEgQmxvY2sKKworICAgIGZ1bmN0aW9uIHBhcnNlU3Rh
dGVtZW50TGlzdCgpIHsKKyAgICAgICAgdmFyIGxpc3QgPSBbXSwKKyAgICAgICAgICAgIHN0YXRl
bWVudDsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlm
IChtYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBzdGF0ZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAgICAg
IGlmICh0eXBlb2Ygc3RhdGVtZW50ID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGlzdC5wdXNoKHN0YXRlbWVudCk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBwYXJzZUJsb2NrKCkgeworICAgICAgICB2YXIgYmxvY2ssIHN0YXJ0VG9rZW47CisKKyAgICAg
ICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAg
ICAgYmxvY2sgPSBwYXJzZVN0YXRlbWVudExpc3QoKTsKKworICAgICAgICBleHBlY3QoJ30nKTsK
KworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVCbG9ja1N0
YXRlbWVudChibG9jayksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDEyLjIgVmFyaWFi
bGUgU3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIHsK
KyAgICAgICAgdmFyIHRva2VuLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBs
b29rYWhlYWQ7CisgICAgICAgIHRva2VuID0gbGV4KCk7CisKKyAgICAgICAgaWYgKHRva2VuLnR5
cGUgIT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0
b2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxl
Z2F0ZS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQor
CisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKGtpbmQpIHsKKyAgICAgICAg
dmFyIGluaXQgPSBudWxsLCBpZCwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0g
bG9va2FoZWFkOworICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisKKyAg
ICAgICAgLy8gMTIuMi4xCisgICAgICAgIGlmIChzdHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChp
ZC5uYW1lKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5T
dHJpY3RWYXJOYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChraW5kID09PSAnY29uc3Qn
KSB7CisgICAgICAgICAgICBleHBlY3QoJz0nKTsKKyAgICAgICAgICAgIGluaXQgPSBwYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJz0nKSkgewor
ICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhw
cmVzc2lvbigpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
ZGVsZWdhdGUuY3JlYXRlVmFyaWFibGVEZWNsYXJhdG9yKGlkLCBpbml0KSwgc3RhcnRUb2tlbik7
CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChraW5k
KSB7CisgICAgICAgIHZhciBsaXN0ID0gW107CisKKyAgICAgICAgZG8geworICAgICAgICAgICAg
bGlzdC5wdXNoKHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihraW5kKSk7CisgICAgICAgICAgICBp
ZiAoIW1hdGNoKCcsJykpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGxleCgpOworICAgICAgICB9IHdoaWxlIChpbmRleCA8IGxlbmd0aCk7CisK
KyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJs
ZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGRlY2xhcmF0aW9uczsKKworICAgICAgICBleHBl
Y3RLZXl3b3JkKCd2YXInKTsKKworICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxl
RGVjbGFyYXRpb25MaXN0KCk7CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9u
cywgJ3ZhcicpOworICAgIH0KKworICAgIC8vIGtpbmQgbWF5IGJlIGBjb25zdGAgb3IgYGxldGAK
KyAgICAvLyBCb3RoIGFyZSBleHBlcmltZW50YWwgYW5kIG5vdCBpbiB0aGUgc3BlY2lmaWNhdGlv
biB5ZXQuCisgICAgLy8gc2VlIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lk
PWhhcm1vbnk6Y29uc3QKKyAgICAvLyBhbmQgaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9r
dS5waHA/aWQ9aGFybW9ueTpsZXQKKyAgICBmdW5jdGlvbiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRp
b24oa2luZCkgeworICAgICAgICB2YXIgZGVjbGFyYXRpb25zLCBzdGFydFRva2VuOworCisgICAg
ICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZChraW5k
KTsKKworICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0
KGtpbmQpOworCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4g
ZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xh
cmF0aW9ucywga2luZCksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDEyLjMgRW1wdHkg
U3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50KCkgeworICAgICAg
ICBleHBlY3QoJzsnKTsKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUVtcHR5U3RhdGVt
ZW50KCk7CisgICAgfQorCisgICAgLy8gMTIuNCBFeHByZXNzaW9uIFN0YXRlbWVudAorCisgICAg
ZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgZXhwciA9
IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOworICAgIH0K
KworICAgIC8vIDEyLjUgSWYgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUlmU3RhdGVt
ZW50KCkgeworICAgICAgICB2YXIgdGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlOworCisgICAg
ICAgIGV4cGVjdEtleXdvcmQoJ2lmJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAg
ICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisg
ICAgICAgIGNvbnNlcXVlbnQgPSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIGlmIChtYXRj
aEtleXdvcmQoJ2Vsc2UnKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBhbHRl
cm5hdGUgPSBwYXJzZVN0YXRlbWVudCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
YWx0ZXJuYXRlID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5j
cmVhdGVJZlN0YXRlbWVudCh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpOworICAgIH0KKwor
ICAgIC8vIDEyLjYgSXRlcmF0aW9uIFN0YXRlbWVudHMKKworICAgIGZ1bmN0aW9uIHBhcnNlRG9X
aGlsZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGJvZHksIHRlc3QsIG9sZEluSXRlcmF0aW9u
OworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2RvJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRp
b24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVl
OworCisgICAgICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmlu
SXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnd2hp
bGUnKTsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICB0ZXN0ID0gcGFyc2VFeHBy
ZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc7
JykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLmNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQoYm9keSwgdGVzdCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcGFyc2VXaGlsZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIHRlc3QsIGJvZHks
IG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3doaWxlJyk7CisKKyAg
ICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOwor
CisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUu
aW5JdGVyYXRpb247CisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTsKKworICAgICAg
ICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9
IG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVXaGlsZVN0
YXRlbWVudCh0ZXN0LCBib2R5KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZvclZhcmlh
YmxlRGVjbGFyYXRpb24oKSB7CisgICAgICAgIHZhciB0b2tlbiwgZGVjbGFyYXRpb25zLCBzdGFy
dFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHRva2Vu
ID0gbGV4KCk7CisgICAgICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlv
bkxpc3QoKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVh
dGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgdG9rZW4udmFsdWUpLCBzdGFydFRv
a2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZvclN0YXRlbWVudCgpIHsKKyAgICAg
ICAgdmFyIGluaXQsIHRlc3QsIHVwZGF0ZSwgbGVmdCwgcmlnaHQsIGJvZHksIG9sZEluSXRlcmF0
aW9uOworCisgICAgICAgIGluaXQgPSB0ZXN0ID0gdXBkYXRlID0gbnVsbDsKKworICAgICAgICBl
eHBlY3RLZXl3b3JkKCdmb3InKTsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBp
ZiAobWF0Y2goJzsnKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCd2YXInKSB8fCBtYXRjaEtleXdvcmQoJ2xldCcp
KSB7CisgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGluaXQgPSBwYXJzZUZvclZhcmlhYmxlRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGlmIChpbml0LmRlY2xh
cmF0aW9ucy5sZW5ndGggPT09IDEgJiYgbWF0Y2hLZXl3b3JkKCdpbicpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKKyAgICAg
ICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAg
ICAgICAgaW5pdCA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgaW5pdCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93
SW4gPSB0cnVlOworCisgICAgICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnaW4nKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uCisgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoaW5pdCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4p
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbGV4KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OworICAgICAgICAgICAgICAgICAgICByaWdo
dCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBl
b2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJzsnKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0g
J3VuZGVmaW5lZCcpIHsKKworICAgICAgICAgICAgaWYgKCFtYXRjaCgnOycpKSB7CisgICAgICAg
ICAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZXhwZWN0KCc7Jyk7CisKKyAgICAgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAg
ICAgICAgICAgICAgIHVwZGF0ZSA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRp
b24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVl
OworCisgICAgICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmlu
SXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247CisKKyAgICAgICAgcmV0dXJuICh0eXBlb2YgbGVm
dCA9PT0gJ3VuZGVmaW5lZCcpID8KKyAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5jcmVhdGVGb3JT
dGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KSA6CisgICAgICAgICAgICAgICAgZGVs
ZWdhdGUuY3JlYXRlRm9ySW5TdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpOworICAgIH0KKwor
ICAgIC8vIDEyLjcgVGhlIGNvbnRpbnVlIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VD
b250aW51ZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5OworCisg
ICAgICAgIGV4cGVjdEtleXdvcmQoJ2NvbnRpbnVlJyk7CisKKyAgICAgICAgLy8gT3B0aW1pemUg
dGhlIG1vc3QgY29tbW9uIGZvcm06ICdjb250aW51ZTsnLgorICAgICAgICBpZiAoc291cmNlLmNo
YXJDb2RlQXQoaW5kZXgpID09PSAweDNCKSB7CisgICAgICAgICAgICBsZXgoKTsKKworICAgICAg
ICAgICAgaWYgKCFzdGF0ZS5pbkl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93RXJy
b3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVDb250aW51ZVN0YXRlbWVudChudWxsKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAg
ICAgaWYgKCFzdGF0ZS5pbkl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVDb250aW51ZVN0YXRlbWVudChudWxsKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikg
eworICAgICAgICAgICAgbGFiZWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCisgICAg
ICAgICAgICBrZXkgPSAnJCcgKyBsYWJlbC5uYW1lOworICAgICAgICAgICAgaWYgKCFPYmplY3Qu
cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Vbmtub3duTGFiZWwsIGxhYmVs
Lm5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWlj
b2xvbigpOworCisgICAgICAgIGlmIChsYWJlbCA9PT0gbnVsbCAmJiAhc3RhdGUuaW5JdGVyYXRp
b24pIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51
ZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ29udGludWVT
dGF0ZW1lbnQobGFiZWwpOworICAgIH0KKworICAgIC8vIDEyLjggVGhlIGJyZWFrIHN0YXRlbWVu
dAorCisgICAgZnVuY3Rpb24gcGFyc2VCcmVha1N0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGxh
YmVsID0gbnVsbCwga2V5OworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2JyZWFrJyk7CisKKyAg
ICAgICAgLy8gQ2F0Y2ggdGhlIHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEg
c2VtaWNvbG9uIChVKzAwM0IpLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgp
ID09PSAweDNCKSB7CisgICAgICAgICAgICBsZXgoKTsKKworICAgICAgICAgICAgaWYgKCEoc3Rh
dGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7CisgICAgICAgICAgICAgICAgdGhy
b3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAg
ICBpZiAoIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQnJlYWtTdGF0ZW1lbnQo
bnVsbCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2Vu
LklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGxhYmVsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZp
ZXIoKTsKKworICAgICAgICAgICAga2V5ID0gJyQnICsgbGFiZWwubmFtZTsKKyAgICAgICAgICAg
IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0
LCBrZXkpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5rbm93
bkxhYmVsLCBsYWJlbC5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIShz
dGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobGFiZWwpOworICAgIH0KKworICAg
IC8vIDEyLjkgVGhlIHJldHVybiBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlUmV0dXJu
U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgYXJndW1lbnQgPSBudWxsOworCisgICAgICAgIGV4
cGVjdEtleXdvcmQoJ3JldHVybicpOworCisgICAgICAgIGlmICghc3RhdGUuaW5GdW5jdGlvbkJv
ZHkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdh
bFJldHVybik7CisgICAgICAgIH0KKworICAgICAgICAvLyAncmV0dXJuJyBmb2xsb3dlZCBieSBh
IHNwYWNlIGFuZCBhbiBpZGVudGlmaWVyIGlzIHZlcnkgY29tbW9uLgorICAgICAgICBpZiAoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDIwKSB7CisgICAgICAgICAgICBpZiAoaXNJZGVu
dGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHsKKyAgICAgICAgICAg
ICAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgIGNvbnN1
bWVTZW1pY29sb24oKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUmV0
dXJuU3RhdGVtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLmNyZWF0ZVJldHVyblN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghbWF0Y2goJzsnKSkgeworICAgICAgICAgICAgaWYgKCFtYXRjaCgnfScpICYmIGxvb2thaGVh
ZC50eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHBhcnNl
RXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3Vt
ZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVSZXR1cm5TdGF0
ZW1lbnQoYXJndW1lbnQpOworICAgIH0KKworICAgIC8vIDEyLjEwIFRoZSB3aXRoIHN0YXRlbWVu
dAorCisgICAgZnVuY3Rpb24gcGFyc2VXaXRoU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgb2Jq
ZWN0LCBib2R5OworCisgICAgICAgIGlmIChzdHJpY3QpIHsKKyAgICAgICAgICAgIC8vIFRPRE8o
aWthcmllbmF0b3IpOiBTaG91bGQgd2UgdXBkYXRlIHRoZSB0ZXN0IGNhc2VzIGluc3RlYWQ/Cisg
ICAgICAgICAgICBza2lwQ29tbWVudCgpOworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50
KHt9LCBNZXNzYWdlcy5TdHJpY3RNb2RlV2l0aCk7CisgICAgICAgIH0KKworICAgICAgICBleHBl
Y3RLZXl3b3JkKCd3aXRoJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgb2Jq
ZWN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAg
ICAgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNy
ZWF0ZVdpdGhTdGF0ZW1lbnQob2JqZWN0LCBib2R5KTsKKyAgICB9CisKKyAgICAvLyAxMi4xMCBU
aGUgc3dpdGggc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaENhc2UoKSB7Cisg
ICAgICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50ID0gW10sIHN0YXRlbWVudCwgc3RhcnRUb2tlbjsK
KworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBpZiAobWF0Y2hLZXl3
b3JkKCdkZWZhdWx0JykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgdGVzdCA9
IG51bGw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXNl
Jyk7CisgICAgICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKyAg
ICAgICAgZXhwZWN0KCc6Jyk7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Cisg
ICAgICAgICAgICBpZiAobWF0Y2goJ30nKSB8fCBtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSB8fCBt
YXRjaEtleXdvcmQoJ2Nhc2UnKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAg
ICAgIGNvbnNlcXVlbnQucHVzaChzdGF0ZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlU3dpdGNoQ2FzZSh0ZXN0LCBjb25z
ZXF1ZW50KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VTd2l0Y2hT
dGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBkaXNjcmltaW5hbnQsIGNhc2VzLCBjbGF1c2UsIG9s
ZEluU3dpdGNoLCBkZWZhdWx0Rm91bmQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnc3dpdGNo
Jyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgZGlzY3JpbWluYW50ID0gcGFy
c2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgZXhwZWN0
KCd7Jyk7CisKKyAgICAgICAgY2FzZXMgPSBbXTsKKworICAgICAgICBpZiAobWF0Y2goJ30nKSkg
eworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRl
U3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpOworICAgICAgICB9CisKKyAgICAg
ICAgb2xkSW5Td2l0Y2ggPSBzdGF0ZS5pblN3aXRjaDsKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2gg
PSB0cnVlOworICAgICAgICBkZWZhdWx0Rm91bmQgPSBmYWxzZTsKKworICAgICAgICB3aGlsZSAo
aW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbGF1c2UgPSBwYXJz
ZVN3aXRjaENhc2UoKTsKKyAgICAgICAgICAgIGlmIChjbGF1c2UudGVzdCA9PT0gbnVsbCkgewor
ICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Rm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2VzLnB1c2goY2xhdXNlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHN0YXRlLmluU3dpdGNoID0gb2xkSW5Td2l0Y2g7CisKKyAgICAgICAgZXhwZWN0KCd9
Jyk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVN3aXRjaFN0YXRlbWVudChkaXNj
cmltaW5hbnQsIGNhc2VzKTsKKyAgICB9CisKKyAgICAvLyAxMi4xMyBUaGUgdGhyb3cgc3RhdGVt
ZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZVRocm93U3RhdGVtZW50KCkgeworICAgICAgICB2YXIg
YXJndW1lbnQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgndGhyb3cnKTsKKworICAgICAgICBp
ZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1l
c3NhZ2VzLk5ld2xpbmVBZnRlclRocm93KTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ3VtZW50
ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVUaHJvd1N0YXRlbWVudChhcmd1bWVudCk7Cisg
ICAgfQorCisgICAgLy8gMTIuMTQgVGhlIHRyeSBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBh
cnNlQ2F0Y2hDbGF1c2UoKSB7CisgICAgICAgIHZhciBwYXJhbSwgYm9keSwgc3RhcnRUb2tlbjsK
KworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBleHBlY3RLZXl3b3Jk
KCdjYXRjaCcpOworCisgICAgICAgIGV4cGVjdCgnKCcpOworICAgICAgICBpZiAobWF0Y2goJykn
KSkgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7CisgICAgICAgIH0K
KworICAgICAgICBwYXJhbSA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgIC8v
IDEyLjE0LjEKKyAgICAgICAgaWYgKHN0cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtLm5h
bWUpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmlj
dENhdGNoVmFyaWFibGUpOworICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisgICAg
ICAgIGJvZHkgPSBwYXJzZUJsb2NrKCk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5k
KGRlbGVnYXRlLmNyZWF0ZUNhdGNoQ2xhdXNlKHBhcmFtLCBib2R5KSwgc3RhcnRUb2tlbik7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VUcnlTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBi
bG9jaywgaGFuZGxlcnMgPSBbXSwgZmluYWxpemVyID0gbnVsbDsKKworICAgICAgICBleHBlY3RL
ZXl3b3JkKCd0cnknKTsKKworICAgICAgICBibG9jayA9IHBhcnNlQmxvY2soKTsKKworICAgICAg
ICBpZiAobWF0Y2hLZXl3b3JkKCdjYXRjaCcpKSB7CisgICAgICAgICAgICBoYW5kbGVycy5wdXNo
KHBhcnNlQ2F0Y2hDbGF1c2UoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2hLZXl3
b3JkKCdmaW5hbGx5JykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgZmluYWxp
emVyID0gcGFyc2VCbG9jaygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhbmRsZXJzLmxl
bmd0aCA9PT0gMCAmJiAhZmluYWxpemVyKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBN
ZXNzYWdlcy5Ob0NhdGNoT3JGaW5hbGx5KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5jcmVhdGVUcnlTdGF0ZW1lbnQoYmxvY2ssIFtdLCBoYW5kbGVycywgZmluYWxpemVy
KTsKKyAgICB9CisKKyAgICAvLyAxMi4xNSBUaGUgZGVidWdnZXIgc3RhdGVtZW50CisKKyAgICBm
dW5jdGlvbiBwYXJzZURlYnVnZ2VyU3RhdGVtZW50KCkgeworICAgICAgICBleHBlY3RLZXl3b3Jk
KCdkZWJ1Z2dlcicpOworCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUuY3JlYXRlRGVidWdnZXJTdGF0ZW1lbnQoKTsKKyAgICB9CisKKyAgICAv
LyAxMiBTdGF0ZW1lbnRzCisKKyAgICBmdW5jdGlvbiBwYXJzZVN0YXRlbWVudCgpIHsKKyAgICAg
ICAgdmFyIHR5cGUgPSBsb29rYWhlYWQudHlwZSwKKyAgICAgICAgICAgIGV4cHIsCisgICAgICAg
ICAgICBsYWJlbGVkQm9keSwKKyAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgIHN0YXJ0VG9r
ZW47CisKKyAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdGhy
b3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZSA9
PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09ICd7JykgeworICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlQmxvY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXJ0VG9r
ZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3Ip
IHsKKyAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAgICBj
YXNlICc7JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUVt
cHR5U3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnKCc6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VFeHByZXNzaW9uU3RhdGVt
ZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09
PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkg
eworICAgICAgICAgICAgY2FzZSAnYnJlYWsnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5tYXJrRW5kKHBhcnNlQnJlYWtTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAg
ICAgICBjYXNlICdjb250aW51ZSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1h
cmtFbmQocGFyc2VDb250aW51ZVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAg
IGNhc2UgJ2RlYnVnZ2VyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0Vu
ZChwYXJzZURlYnVnZ2VyU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2Fz
ZSAnZG8nOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRG9X
aGlsZVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2Zvcic6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VGb3JTdGF0ZW1lbnQo
KSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCks
IHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnaWYnOgorICAgICAgICAgICAgICAgIHJl
dHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlSWZTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7Cisg
ICAgICAgICAgICBjYXNlICdyZXR1cm4nOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0
ZS5tYXJrRW5kKHBhcnNlUmV0dXJuU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAg
ICAgY2FzZSAnc3dpdGNoJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0Vu
ZChwYXJzZVN3aXRjaFN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2Ug
J3Rocm93JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVRo
cm93U3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAndHJ5JzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVRyeVN0YXRlbWVudCgp
LCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ3Zhcic6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpLCBzdGFydFRv
a2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ3doaWxlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZGVsZWdhdGUubWFya0VuZChwYXJzZVdoaWxlU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAg
ICAgICAgICAgY2FzZSAnd2l0aCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1h
cmtFbmQocGFyc2VXaXRoU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICAvLyAxMi4xMiBM
YWJlbGxlZCBTdGF0ZW1lbnRzCisgICAgICAgIGlmICgoZXhwci50eXBlID09PSBTeW50YXguSWRl
bnRpZmllcikgJiYgbWF0Y2goJzonKSkgeworICAgICAgICAgICAgbGV4KCk7CisKKyAgICAgICAg
ICAgIGtleSA9ICckJyArIGV4cHIubmFtZTsKKyAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5SZWRlY2xhcmF0aW9uLCAnTGFiZWwnLCBl
eHByLm5hbWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGF0ZS5sYWJlbFNldFtr
ZXldID0gdHJ1ZTsKKyAgICAgICAgICAgIGxhYmVsZWRCb2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsK
KyAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5sYWJlbFNldFtrZXldOworICAgICAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlTGFiZWxlZFN0YXRlbWVudChleHBy
LCBsYWJlbGVkQm9keSksIHN0YXJ0VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Vt
ZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRl
LmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwciksIHN0YXJ0VG9rZW4pOworICAgIH0KKwor
ICAgIC8vIDEzIEZ1bmN0aW9uIERlZmluaXRpb24KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rp
b25Tb3VyY2VFbGVtZW50cygpIHsKKyAgICAgICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVs
ZW1lbnRzID0gW10sIHRva2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3RlZCwKKyAgICAgICAg
ICAgIG9sZExhYmVsU2V0LCBvbGRJbkl0ZXJhdGlvbiwgb2xkSW5Td2l0Y2gsIG9sZEluRnVuY3Rp
b25Cb2R5LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7Cisg
ICAgICAgIGV4cGVjdCgneycpOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewor
ICAgICAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b2tl
biA9IGxvb2thaGVhZDsKKworICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNl
RWxlbWVudCgpOworICAgICAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50
KTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3lu
dGF4LkxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmUK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpcmVj
dGl2ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCArIDEsIHRva2VuLmVuZCAtIDEpOworICAg
ICAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7CisgICAgICAgICAgICAg
ICAgc3RyaWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7
CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQs
IE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0
b2tlbi5vY3RhbCkgeworICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tl
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBvbGRMYWJlbFNldCA9IHN0YXRlLmxhYmVsU2V0OworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9
IHN0YXRlLmluSXRlcmF0aW9uOworICAgICAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNo
OworICAgICAgICBvbGRJbkZ1bmN0aW9uQm9keSA9IHN0YXRlLmluRnVuY3Rpb25Cb2R5OworCisg
ICAgICAgIHN0YXRlLmxhYmVsU2V0ID0ge307CisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0g
ZmFsc2U7CisgICAgICAgIHN0YXRlLmluU3dpdGNoID0gZmFsc2U7CisgICAgICAgIHN0YXRlLmlu
RnVuY3Rpb25Cb2R5ID0gdHJ1ZTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsK
KyAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVt
ZW50KCk7CisgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZUVsZW1lbnQgPT09ICd1bmRlZmlu
ZWQnKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAg
ICAgZXhwZWN0KCd9Jyk7CisKKyAgICAgICAgc3RhdGUubGFiZWxTZXQgPSBvbGRMYWJlbFNldDsK
KyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjsKKyAgICAgICAgc3Rh
dGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRjaDsKKyAgICAgICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkg
PSBvbGRJbkZ1bmN0aW9uQm9keTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChk
ZWxlZ2F0ZS5jcmVhdGVCbG9ja1N0YXRlbWVudChzb3VyY2VFbGVtZW50cyksIHN0YXJ0VG9rZW4p
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCkgewor
ICAgICAgICB2YXIgcGFyYW0sIHBhcmFtcyA9IFtdLCB0b2tlbiwgc3RyaWN0ZWQsIHBhcmFtU2V0
LCBrZXksIG1lc3NhZ2U7CisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmICghbWF0
Y2goJyknKSkgeworICAgICAgICAgICAgcGFyYW1TZXQgPSB7fTsKKyAgICAgICAgICAgIHdoaWxl
IChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOwor
ICAgICAgICAgICAgICAgIHBhcmFtID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAg
ICAgICAgICAgICBrZXkgPSAnJCcgKyB0b2tlbi52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAo
c3RyaWN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2Vu
LnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWN0ZWQgPSB0b2tlbjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5w
cm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJhbVNldCwga2V5KSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZh
bHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47
CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2
ZWRXb3JkOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUu
aGFzT3duUHJvcGVydHkuY2FsbChwYXJhbVNldCwga2V5KSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTsK
KyAgICAgICAgICAgICAgICBwYXJhbVNldFtrZXldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBp
ZiAobWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgcGFyYW1zOiBwYXJhbXMsCisgICAgICAgICAgICBzdHJpY3RlZDogc3RyaWN0ZWQsCisg
ICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IGZpcnN0UmVzdHJpY3RlZCwKKyAgICAgICAgICAg
IG1lc3NhZ2U6IG1lc3NhZ2UKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJz
ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSB7CisgICAgICAgIHZhciBpZCwgcGFyYW1zID0gW10sIGJv
ZHksIHRva2VuLCBzdHJpY3RlZCwgdG1wLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHByZXZp
b3VzU3RyaWN0LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7
CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKKyAgICAgICAgdG9rZW4gPSBs
b29rYWhlYWQ7CisgICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAg
ICAgaWYgKHN0cmljdCkgeworICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4u
dmFsdWUpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNz
YWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAg
ICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgbWVz
c2FnZSA9IE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAg
ICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBN
ZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICB0bXAgPSBwYXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpOworICAgICAgICBwYXJh
bXMgPSB0bXAucGFyYW1zOworICAgICAgICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDsKKyAgICAg
ICAgZmlyc3RSZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDsKKyAgICAgICAgaWYgKHRt
cC5tZXNzYWdlKSB7CisgICAgICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7CisgICAgICAg
IH0KKworICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDsKKyAgICAgICAgYm9keSA9IHBh
cnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpOworICAgICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0
UmVzdHJpY3RlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvcihmaXJzdFJlc3RyaWN0ZWQsIG1l
c3NhZ2UpOworICAgICAgICB9CisgICAgICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0ZWQpIHsKKyAg
ICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAg
IH0KKyAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CisKKyAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihpZCwgcGFy
YW1zLCBbXSwgYm9keSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNl
RnVuY3Rpb25FeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgdG9rZW4sIGlkID0gbnVsbCwgc3Ry
aWN0ZWQsIGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgdG1wLCBwYXJhbXMgPSBbXSwgYm9keSwg
cHJldmlvdXNTdHJpY3QsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2th
aGVhZDsKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKKworICAgICAgICBpZiAo
IW1hdGNoKCcoJykpIHsKKyAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAg
ICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAgICAgaWYgKHN0cmlj
dCkgeworICAgICAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkg
eworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2Vz
LlN0cmljdEZ1bmN0aW9uTmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFs
dWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRt
cCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7CisgICAgICAgIHBhcmFtcyA9IHRtcC5w
YXJhbXM7CisgICAgICAgIHN0cmljdGVkID0gdG1wLnN0cmljdGVkOworICAgICAgICBmaXJzdFJl
c3RyaWN0ZWQgPSB0bXAuZmlyc3RSZXN0cmljdGVkOworICAgICAgICBpZiAodG1wLm1lc3NhZ2Up
IHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSB0bXAubWVzc2FnZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0OworICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlv
blNvdXJjZUVsZW1lbnRzKCk7CisgICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVk
KSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmljdCAmJiBzdHJpY3RlZCkgeworICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KHN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAg
ICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFy
a0VuZChkZWxlZ2F0ZS5jcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgW10sIGJv
ZHkpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICAvLyAxNCBQcm9ncmFtCisKKyAgICBmdW5j
dGlvbiBwYXJzZVNvdXJjZUVsZW1lbnQoKSB7CisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9
PT0gVG9rZW4uS2V5d29yZCkgeworICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUp
IHsKKyAgICAgICAgICAgIGNhc2UgJ2NvbnN0JzoKKyAgICAgICAgICAgIGNhc2UgJ2xldCc6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29uc3RMZXREZWNsYXJhdGlvbihsb29rYWhlYWQu
dmFsdWUpOworICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOgorICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikgewor
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmdW5jdGlvbiBwYXJzZVNvdXJjZUVsZW1lbnRzKCkgeworICAgICAgICB2YXIgc291cmNl
RWxlbWVudCwgc291cmNlRWxlbWVudHMgPSBbXSwgdG9rZW4sIGRpcmVjdGl2ZSwgZmlyc3RSZXN0
cmljdGVkOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAg
dG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4u
U3RyaW5nTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAg
ICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAgICAgICAg
aWYgKHNvdXJjZUVsZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9PSBTeW50YXguTGl0ZXJhbCkgewor
ICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNs
aWNlKHRva2VuLnN0YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7CisgICAgICAgICAgICBpZiAoZGly
ZWN0aXZlID09PSAndXNlIHN0cmljdCcpIHsKKyAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVl
OworICAgICAgICAgICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvclRvbGVyYW50KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0
T2N0YWxMaXRlcmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGlmICghZmlyc3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChpbmRleCA8
IGxlbmd0aCkgeworICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVu
dCgpOworICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovCisgICAgICAgICAgICBp
ZiAodHlwZW9mIHNvdXJjZUVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNo
KHNvdXJjZUVsZW1lbnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzb3VyY2VFbGVtZW50
czsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVByb2dyYW0oKSB7CisgICAgICAgIHZhciBi
b2R5LCBzdGFydFRva2VuOworCisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIHBlZWso
KTsKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgc3RyaWN0ID0gZmFs
c2U7CisKKyAgICAgICAgYm9keSA9IHBhcnNlU291cmNlRWxlbWVudHMoKTsKKyAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlUHJvZ3JhbShib2R5KSwgc3RhcnRU
b2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gZmlsdGVyVG9rZW5Mb2NhdGlvbigpIHsKKyAg
ICAgICAgdmFyIGksIGVudHJ5LCB0b2tlbiwgdG9rZW5zID0gW107CisKKyAgICAgICAgZm9yIChp
ID0gMDsgaSA8IGV4dHJhLnRva2Vucy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgZW50cnkg
PSBleHRyYS50b2tlbnNbaV07CisgICAgICAgICAgICB0b2tlbiA9IHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBlbnRyeS50eXBlLAorICAgICAgICAgICAgICAgIHZhbHVlOiBlbnRyeS52YWx1ZQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAg
ICAgICAgIHRva2VuLnJhbmdlID0gZW50cnkucmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAgICAgICAgdG9rZW4ubG9jID0gZW50cnku
bG9jOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOworICAg
ICAgICB9CisKKyAgICAgICAgZXh0cmEudG9rZW5zID0gdG9rZW5zOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHRva2VuaXplKGNvZGUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIHRvU3RyaW5nLAor
ICAgICAgICAgICAgdG9rZW4sCisgICAgICAgICAgICB0b2tlbnM7CisKKyAgICAgICAgdG9TdHJp
bmcgPSBTdHJpbmc7CisgICAgICAgIGlmICh0eXBlb2YgY29kZSAhPT0gJ3N0cmluZycgJiYgIShj
b2RlIGluc3RhbmNlb2YgU3RyaW5nKSkgeworICAgICAgICAgICAgY29kZSA9IHRvU3RyaW5nKGNv
ZGUpOworICAgICAgICB9CisKKyAgICAgICAgZGVsZWdhdGUgPSBTeW50YXhUcmVlRGVsZWdhdGU7
CisgICAgICAgIHNvdXJjZSA9IGNvZGU7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgbGlu
ZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDsKKyAgICAgICAgbGluZVN0YXJ0
ID0gMDsKKyAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKKyAgICAgICAgbG9va2FoZWFk
ID0gbnVsbDsKKyAgICAgICAgc3RhdGUgPSB7CisgICAgICAgICAgICBhbGxvd0luOiB0cnVlLAor
ICAgICAgICAgICAgbGFiZWxTZXQ6IHt9LAorICAgICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZh
bHNlLAorICAgICAgICAgICAgaW5JdGVyYXRpb246IGZhbHNlLAorICAgICAgICAgICAgaW5Td2l0
Y2g6IGZhbHNlLAorICAgICAgICAgICAgbGFzdENvbW1lbnRTdGFydDogLTEKKyAgICAgICAgfTsK
KworICAgICAgICBleHRyYSA9IHt9OworCisgICAgICAgIC8vIE9wdGlvbnMgbWF0Y2hpbmcuCisg
ICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCisgICAgICAgIC8vIE9mIGNvdXJzZSB3
ZSBjb2xsZWN0IHRva2VucyBoZXJlLgorICAgICAgICBvcHRpb25zLnRva2VucyA9IHRydWU7Cisg
ICAgICAgIGV4dHJhLnRva2VucyA9IFtdOworICAgICAgICBleHRyYS50b2tlbml6ZSA9IHRydWU7
CisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgdHdvIGZpZWxkcyBhcmUgbmVjZXNzYXJ5IHRvIGNv
bXB1dGUgdGhlIFJlZ2V4IHRva2Vucy4KKyAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSAt
MTsKKyAgICAgICAgZXh0cmEub3BlbkN1cmx5VG9rZW4gPSAtMTsKKworICAgICAgICBleHRyYS5y
YW5nZSA9ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJh
bmdlOworICAgICAgICBleHRyYS5sb2MgPSAodHlwZW9mIG9wdGlvbnMubG9jID09PSAnYm9vbGVh
bicpICYmIG9wdGlvbnMubG9jOworCisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50
ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5jb21tZW50KSB7CisgICAgICAgICAgICBleHRyYS5j
b21tZW50cyA9IFtdOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2xl
cmFudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudG9sZXJhbnQpIHsKKyAgICAgICAgICAgIGV4
dHJhLmVycm9ycyA9IFtdOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IHBlZWsoKTsKKyAgICAgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uRU9GKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGV4dHJhLnRva2VuczsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHdoaWxlIChsb29rYWhlYWQu
dHlwZSAhPT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChsZXhFcnJv
cikgeworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGV4dHJhLmVycm9ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgZXh0
cmEuZXJyb3JzLnB1c2gobGV4RXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
aGF2ZSB0byBicmVhayBvbiB0aGUgZmlyc3QgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRvIGF2b2lkIGluZmluaXRlIGxvb3BzLgorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvdyBsZXhFcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpOwor
ICAgICAgICAgICAgdG9rZW5zID0gZXh0cmEudG9rZW5zOworICAgICAgICAgICAgaWYgKHR5cGVv
ZiBleHRyYS5jb21tZW50cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICB0b2tl
bnMuY29tbWVudHMgPSBleHRyYS5jb21tZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh0eXBlb2YgZXh0cmEuZXJyb3JzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAg
ICAgIHRva2Vucy5lcnJvcnMgPSBleHRyYS5lcnJvcnM7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0gZmluYWxseSB7
CisgICAgICAgICAgICBleHRyYSA9IHt9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b2tl
bnM7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2UoY29kZSwgb3B0aW9ucykgeworICAgICAg
ICB2YXIgcHJvZ3JhbSwgdG9TdHJpbmc7CisKKyAgICAgICAgdG9TdHJpbmcgPSBTdHJpbmc7Cisg
ICAgICAgIGlmICh0eXBlb2YgY29kZSAhPT0gJ3N0cmluZycgJiYgIShjb2RlIGluc3RhbmNlb2Yg
U3RyaW5nKSkgeworICAgICAgICAgICAgY29kZSA9IHRvU3RyaW5nKGNvZGUpOworICAgICAgICB9
CisKKyAgICAgICAgZGVsZWdhdGUgPSBTeW50YXhUcmVlRGVsZWdhdGU7CisgICAgICAgIHNvdXJj
ZSA9IGNvZGU7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgbGluZU51bWJlciA9IChzb3Vy
Y2UubGVuZ3RoID4gMCkgPyAxIDogMDsKKyAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAg
bGVuZ3RoID0gc291cmNlLmxlbmd0aDsKKyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAg
ICAgc3RhdGUgPSB7CisgICAgICAgICAgICBhbGxvd0luOiB0cnVlLAorICAgICAgICAgICAgbGFi
ZWxTZXQ6IHt9LAorICAgICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLAorICAgICAgICAg
ICAgaW5JdGVyYXRpb246IGZhbHNlLAorICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAorICAg
ICAgICAgICAgbGFzdENvbW1lbnRTdGFydDogLTEKKyAgICAgICAgfTsKKworICAgICAgICBleHRy
YSA9IHt9OworICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7Cisg
ICAgICAgICAgICBleHRyYS5yYW5nZSA9ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xl
YW4nKSAmJiBvcHRpb25zLnJhbmdlOworICAgICAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBv
cHRpb25zLmxvYyA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmxvYzsKKyAgICAgICAgICAgIGV4
dHJhLmF0dGFjaENvbW1lbnQgPSAodHlwZW9mIG9wdGlvbnMuYXR0YWNoQ29tbWVudCA9PT0gJ2Jv
b2xlYW4nKSAmJiBvcHRpb25zLmF0dGFjaENvbW1lbnQ7CisKKyAgICAgICAgICAgIGlmIChleHRy
YS5sb2MgJiYgb3B0aW9ucy5zb3VyY2UgIT09IG51bGwgJiYgb3B0aW9ucy5zb3VyY2UgIT09IHVu
ZGVmaW5lZCkgeworICAgICAgICAgICAgICAgIGV4dHJhLnNvdXJjZSA9IHRvU3RyaW5nKG9wdGlv
bnMuc291cmNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRp
b25zLnRva2VucyA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudG9rZW5zKSB7CisgICAgICAgICAg
ICAgICAgZXh0cmEudG9rZW5zID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCkg
eworICAgICAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBv
cHRpb25zLnRvbGVyYW50KSB7CisgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzID0gW107Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAg
ICAgICAgICAgICAgIGV4dHJhLnJhbmdlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBleHRyYS5j
b21tZW50cyA9IFtdOworICAgICAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sgPSBb
XTsKKyAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107CisgICAgICAg
ICAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcHJvZ3JhbSA9IHBhcnNlUHJvZ3Jh
bSgpOworICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAhPT0gJ3VuZGVmaW5l
ZCcpIHsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLmNvbW1lbnRzID0gZXh0cmEuY29tbWVudHM7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7Cisg
ICAgICAgICAgICAgICAgcHJvZ3JhbS50b2tlbnMgPSBleHRyYS50b2tlbnM7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcp
IHsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLmVycm9ycyA9IGV4dHJhLmVycm9yczsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgdGhyb3cgZTsKKyAg
ICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGV4dHJhID0ge307CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gcHJvZ3JhbTsKKyAgICB9CisKKyAgICAvLyBTeW5jIHdpdGggKi5qc29u
IG1hbmlmZXN0cy4KKyAgICBleHBvcnRzLnZlcnNpb24gPSAnMS4yLjInOworCisgICAgZXhwb3J0
cy50b2tlbml6ZSA9IHRva2VuaXplOworCisgICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworCisg
ICAgLy8gRGVlcCBjb3B5LgorICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICBleHBv
cnRzLlN5bnRheCA9IChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBuYW1lLCB0eXBlcyA9IHt9
OworCisgICAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykgewor
ICAgICAgICAgICAgdHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOworICAgICAgICB9CisKKyAg
ICAgICAgZm9yIChuYW1lIGluIFN5bnRheCkgeworICAgICAgICAgICAgaWYgKFN5bnRheC5oYXNP
d25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgICAgICAgICAgIHR5cGVzW25hbWVdID0gU3ludGF4
W25hbWVdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBP
YmplY3QuZnJlZXplID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBPYmplY3QuZnJlZXpl
KHR5cGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0eXBlczsKKyAgICB9KCkpOwor
Cit9KShXZWJJbnNwZWN0b3IuX2VzcHJpbWEpOwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzCShyZXZpc2lvbiAxNzEy
NjUpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwyNCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0
ID0gZnVuY3Rpb24oaWQsIHJhbmdlCiAKICAgICBpZiAoc291cmNlTWFwVVJMKQogICAgICAgICBX
ZWJJbnNwZWN0b3Iuc291cmNlTWFwTWFuYWdlci5kb3dubG9hZFNvdXJjZU1hcChzb3VyY2VNYXBV
UkwsIHRoaXMuX3VybCwgdGhpcyk7CisKKyAgICB0aGlzLl9zb3VyY2VDb2RlQVNUID0gbnVsbDsK
KyAgICB0aGlzLl9zb3VyY2VDb2RlQVNURGlkTG9hZENhbGxiYWNrID0gbnVsbDsKKworICAgIGlm
ICh0aGlzLl9yZXNvdXJjZSkgeworICAgICAgICBpZiAodGhpcy5fcmVzb3VyY2UuY2FuUmVxdWVz
dENvbnRlbnRGcm9tQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhy
ZXNvdXJjZSwgc291cmNlVGV4dCkgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhp
cy5fbWFrZUFTVChzb3VyY2VUZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB3ZSdyZSB0aGUgZmlyc3QgY2FsbGJhY2suCisgICAgICAgICAgICB0aGlzLl9yZXNv
dXJjZS5fcGVuZGluZ0NvbnRlbnRSZXF1ZXN0Q2FsbGJhY2tzLnVuc2hpZnQoY2FsbGJhY2suYmlu
ZCh0aGlzKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiUmVz
b3VyY2UgYWxyZWFkeSBoYXMgY29udGVudDogIiArIHRoaXMuX3Jlc291cmNlLmNvbnRlbnQpCisg
ICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGdldCBvcmlnaW5hbENvbnRlbnQgaGVyZSBv
ciBqdXN0IGNvbnRlbnQ/IFdoYXQgaXMgb3JpZ2luYWxDb250ZW50PworICAgICAgICAgICAgdGhp
cy5fbWFrZUFTVCh0aGlzLl9yZXNvdXJjZS5jb250ZW50KTsKKyAgICAgICAgfQorICAgIH0KIH07
CiAKIFdlYkluc3BlY3Rvci5TY3JpcHQuVHlwZUlkZW50aWZpZXIgPSAic2NyaXB0IjsKQEAgLTEx
Nyw3ICsxMzUsMTUgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBEZWJ1Z2dlckFnZW50Lmdl
dFNjcmlwdFNvdXJjZSh0aGlzLl9pZCwgY2FsbGJhY2spOworICAgICAgICBmdW5jdGlvbiBjYWxs
YmFja1dyYXBwZXIoZXJyb3IsIHNvdXJjZVRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghZXJyb3IpCisgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUFTVChzb3VyY2VUZXh0KTsKKwor
ICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkoY2FsbGJhY2ssIEFycmF5LnByb3RvdHlwZS5zbGlj
ZS5jYWxsKGFyZ3VtZW50cykpOworICAgICAgICB9CisKKyAgICAgICAgRGVidWdnZXJBZ2VudC5n
ZXRTY3JpcHRTb3VyY2UodGhpcy5faWQsIGNhbGxiYWNrV3JhcHBlci5iaW5kKHRoaXMpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSwKIApAQCAtMTc0LDYgKzIwMCwxNSBAQCBXZWJJbnNw
ZWN0b3IuU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBu
dWxsOworICAgIH0sCisKKyAgICBfbWFrZUFTVDogZnVuY3Rpb24oc291cmNlVGV4dCkgeworICAg
ICAgICAvL2lmICghdGhpcy5fc291cmNlQ29kZUFTVCkKKyAgICAgICAgICAgIHRoaXMuX3NvdXJj
ZUNvZGVBU1QgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1Qoc291cmNlVGV4dCwgdGhp
cyk7CisgICAgICAgIGlmICh0aGlzLl9zb3VyY2VDb2RlQVNURGlkTG9hZENhbGxiYWNrICYmIHR5
cGVvZiB0aGlzLl9zb3VyY2VDb2RlQVNURGlkTG9hZENhbGxiYWNrID09PSAiZnVuY3Rpb24iKSB7
CisgICAgICAgICAgICB0aGlzLl9zb3VyY2VDb2RlQVNURGlkTG9hZENhbGxiYWNrKCk7CisgICAg
ICAgICAgICB0aGlzLl9zb3VyY2VDb2RlQVNURGlkTG9hZENhbGxiYWNrID0gbnVsbDsKKyAgICAg
ICAgfQogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01vZGVscy9Tb3VyY2VDb2RlQVNULmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlQVNULmpzCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNv
ZGVBU1QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVCA9IGZ1bmN0aW9uKHNvdXJjZVRleHQsIHNjcmlwdCkg
Cit7CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworICAgIHRoaXMuX3Njcmlw
dCA9IHNjcmlwdDsKKworICAgIHRyeSB7CisgICAgICAgIHZhciBlc3ByaW1hQVNUID0gV2ViSW5z
cGVjdG9yLl9lc3ByaW1hLnBhcnNlKHNvdXJjZVRleHQsIHsgcmFuZ2UgOiB0cnVlIH0pOworICAg
ICAgICB0aGlzLl9hc3QgPSB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChlc3ByaW1hQVNUKTsKKyAg
ICB9IGNhdGNoKGUpIHsKKyAgICAgICAgdmFyIHZlcmJvc2UgPSBmYWxzZTsKKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBjb25zb2xlLmxvZygiQ291bGRuJ3QgcGFyc2UgSmF2YVNj
cmlwdCBGaWxlOiBcbiIgKyBlLm1lc3NhZ2UpCisgICAgICAgIHRoaXMuX2FzdCA9IG51bGw7Cisg
ICAgfQorCisgICAgdGhpcy5fb3JpZ2luYWxTb3VyY2VUZXh0ID0gc291cmNlVGV4dDsKK307CisK
Ky8vIE5vdGUgdGhhdCB0aGlzIGNvcnJlc3BvbmRzIGlkZW50aWNhbGx5IHRvIGFuIGVudW0gaW4g
SmF2YVNjaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oCitXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZUFTVC5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yID0geworICAg
IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWw6IDEsCisgICAgVHlwZVByb2ZpbGVy
U2VhcmNoRGVzY3JpcHRvclRoaXNTdGF0ZW1lbnQ6IDIsCisgICAgVHlwZVByb2ZpbGVyU2VhcmNo
RGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuOiAzCit9OworCitXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZUFTVC5BU1RUeXBlID0geworICAgIEFzc2lnbm1lbnRFeHByZXNzaW9uOiAnQXNzaWdubWVudEV4
cHJlc3Npb24nLAorICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5RXhwcmVzc2lvbicsCisgICAg
QmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsCisgICAgQmluYXJ5RXhwcmVzc2lvbjog
J0JpbmFyeUV4cHJlc3Npb24nLAorICAgIEJyZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQn
LAorICAgIENhdGNoQ2xhdXNlOiAnQ2F0Y2hDbGF1c2UnLAorICAgIENvbnRpbnVlU3RhdGVtZW50
OiAnQ29udGludWVTdGF0ZW1lbnQnLAorICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICdEb1doaWxlU3Rh
dGVtZW50JywKKyAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JywKKyAg
ICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3RhdGVtZW50JywKKyAgICBFeHByZXNzaW9uU3RhdGVt
ZW50OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsCisgICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVt
ZW50JywKKyAgICBGb3JJblN0YXRlbWVudDogJ0ZvckluU3RhdGVtZW50JywKKyAgICBGdW5jdGlv
bkNhbGw6ICdGdW5jdGlvbkNhbGwnLAorICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlv
bkRlY2xhcmF0aW9uJywKKyAgICBGdW5jdGlvbkV4cHJlc3Npb246ICdGdW5jdGlvbkV4cHJlc3Np
b24nLAorICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJywKKyAgICBJZlN0YXRlbWVudDogJ0lm
U3RhdGVtZW50JywKKyAgICBMaXRlcmFsOiAnTGl0ZXJhbCcsCisgICAgTGFiZWxlZFN0YXRlbWVu
dDogJ0xhYmVsZWRTdGF0ZW1lbnQnLAorICAgIExvZ2ljYWxFeHByZXNzaW9uOiAnTG9naWNhbEV4
cHJlc3Npb24nLAorICAgIE1lbWJlckV4cHJlc3Npb246ICdNZW1iZXJFeHByZXNzaW9uJywKKyAg
ICBOZXdFeHByZXNzaW9uOiAnTmV3RXhwcmVzc2lvbicsCisgICAgT2JqZWN0RXhwcmVzc2lvbjog
J09iamVjdEV4cHJlc3Npb24nLAorICAgIFBvc3RmaXhFeHByZXNzaW9uOidQb3N0Zml4RXhwcmVz
c2lvbicsCisgICAgUHJvZ3JhbTogJ1Byb2dyYW0nLAorICAgIFByb3BlcnR5OiAnUHJvcGVydHkn
LAorICAgIFByZWZpeEV4cHJlc3Npb246J1ByZWZpeEV4cHJlc3Npb24nLAorICAgIFJldHVyblN0
YXRlbWVudDogJ1JldHVyblN0YXRlbWVudCcsCisgICAgU2VxdWVuY2VFeHByZXNzaW9uOiAnU2Vx
dWVuY2VFeHByZXNzaW9uJywKKyAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1lbnQn
LAorICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJywKKyAgICBUZXJuYXJ5RXhwcmVzc2lvbjog
J1Rlcm5hcnlFeHByZXNzaW9uJywKKyAgICBUaGlzRXhwcmVzc2lvbjogJ1RoaXNFeHByZXNzaW9u
JywKKyAgICBUaHJvd1N0YXRlbWVudDogJ1Rocm93U3RhdGVtZW50JywKKyAgICBUcnlTdGF0ZW1l
bnQ6ICdUcnlTdGF0ZW1lbnQnLAorICAgIFVuYXJ5RXhwcmVzc2lvbjogJ1VuYXJ5RXhwcmVzc2lv
bicsCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLAorICAg
IFZhcmlhYmxlRGVjbGFyYXRvcjogJ1ZhcmlhYmxlRGVjbGFyYXRvcicsCisgICAgV2hpbGVTdGF0
ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsCisgICAgV2l0aFN0YXRlbWVudDogJ1dpdGhTdGF0ZW1l
bnQnCit9OworCitXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5wcm90b3R5cGUgPSB7CisKKyAg
ICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QsCisKKyAgICAvLyBQdWJs
aWMKKworICAgIGZvckVhY2hOb2RlOiBmdW5jdGlvbihmdW5jKQorICAgIHsKKyAgICAgICAgdGhp
cy5fcmVjdXJzZSh0aGlzLl9hc3QsIGZ1bmMsIHRoaXMuX2RlZmF1bHRQYXJzZXJTdGF0ZSgpKTsK
KyAgICB9LAorCisgICAgZmlsdGVyOiBmdW5jdGlvbihmdW5jLCBzdGFydE5vZGUpIAorICAgIHsK
KyAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlIHx8IHRoaXMuX2FzdDsKKyAgICAgICAgdmFy
IG5vZGVzID0gW107CisgICAgICAgIGZ1bmN0aW9uIGZpbHRlcihub2RlLCBzdGF0ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGZ1bmMobm9kZSkpCisgICAgICAgICAgICAgICAgbm9kZXMu
cHVzaChub2RlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0ZS5za2lw
Q2hpbGROb2RlcyA9IHRydWU7IAorICAgICAgICB9CisgICAgICAgIHRoaXMuX3JlY3Vyc2Uoc3Rh
cnROb2RlLCBmaWx0ZXIsIHRoaXMuX2RlZmF1bHRQYXJzZXJTdGF0ZSgpKTsKKworICAgICAgICBy
ZXR1cm4gbm9kZXM7CisgICAgfSwKKworICAgIGNvbnRhaW5zUmV0dXJuU3RhdGVtZW50OiBmdW5j
dGlvbihzdGFydE5vZGUpCisgICAgeworICAgICAgICBpZiAoc3RhcnROb2RlLl9oYXNSZXR1cm5T
dGF0ZW1lbnQgIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybiBzdGFydE5vZGUuX2hh
c1JldHVyblN0YXRlbWVudDsKKworICAgICAgICBmdW5jdGlvbiBmaWx0ZXIobm9kZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5vZGUudHlwZSAhPT0gV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVBU1QuQVNUVHlwZS5GdW5jdGlvbkV4cHJlc3Npb24gJiYgbm9kZS50eXBlICE9PSBXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb247CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLmZpbHRlcihmaWx0ZXIsIHN0YXJ0Tm9k
ZSk7CisgICAgICAgIHZhciBoYXNSZXR1cm5TdGF0ZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgdmFy
IHJldHVyblR5cGUgPSBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlJldHVyblN0
YXRlbWVudDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTsKKyAgICAgICAgICAgIGlmIChub2Rl
LnR5cGUgPT09IHJldHVyblR5cGUgJiYgbm9kZS5hcmd1bWVudCkgeworICAgICAgICAgICAgICAg
IGhhc1JldHVyblN0YXRlbWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgIAorICAgICAgICBzdGFydE5vZGUuX2hhc1Jl
dHVyblN0YXRlbWVudCA9IGhhc1JldHVyblN0YXRlbWVudDsKKworICAgICAgICByZXR1cm4gaGFz
UmV0dXJuU3RhdGVtZW50OworICAgIH0sCisKKyAgICB1cGRhdGVUeXBlczogZnVuY3Rpb24oc291
cmNlSUQsIGNhbGxiYWNrKSAKKyAgICB7CisgICAgICAgIHZhciBzdGFydFRpbWUgPSAobmV3IERh
dGUoKSkuZ2V0VGltZSgpOworICAgICAgICB2YXIgdmVyYm9zZSA9IGZhbHNlOworICAgICAgICB2
YXIgYWxsUmVxdWVzdHMgPSBbXTsKKyAgICAgICAgdmFyIGFsbFJlcXVlc3ROb2RlcyA9IFtdOwor
CisgICAgICAgIGZ1bmN0aW9uIGZvckVhY2gobm9kZSkgeworICAgICAgICAgICAgdmFyIFR5cGVz
ID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZTsKKyAgICAgICAgICAgIHN3aXRj
aChub2RlLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25EZWNsYXJhdGlv
bjoKKyAgICAgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAg
ICAgICAgIG5vZGUucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7CisgICAgICAgICAg
ICAgICAgICAgIGFsbFJlcXVlc3RzLnB1c2goeworICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZUluZm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuVHlwZVBy
b2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFs
LAorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IHNvdXJjZUlELAorICAgICAgICAg
ICAgICAgICAgICAgICAgZGl2b3Q6IHBhcmFtLnJhbmdlWzBdCisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChwYXJhbSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0cy5wdXNoKHsK
KyAgICAgICAgICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVBU1QuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5UeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4sCisgICAgICAgICAgICAgICAgICAgIHNv
dXJjZUlEOiBzb3VyY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgZGl2b3Q6IG5vZGUuYm9keS5y
YW5nZVswXQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RO
b2Rlcy5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuaW5p
dCkgeworICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0cy5wdXNoKHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlQVNULlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IuVHlwZVByb2ZpbGVyU2VhcmNo
RGVzY3JpcHRvck5vcm1hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlEOiBzb3Vy
Y2VJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpdm90OiBub2RlLmlkLnJhbmdlWzBdCisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9k
ZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgc3RhcnRSZWN1cnNlVHJl
ZVRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgICAgICB2YXIgc2NyaXB0VVJMID0g
dGhpcy5fc2NyaXB0LnVybDsKKyAgICAgICAgdGhpcy5mb3JFYWNoTm9kZShmb3JFYWNoKTsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBjb25zb2xlLmxvZygiXG4jIyBSZWN1cnNl
VHJlZSB0aW1lOiAiICsgIigiICsgc2NyaXB0VVJMICsgIik6IiArICgobmV3IERhdGUoKS5nZXRU
aW1lKCkpIC0gc3RhcnRSZWN1cnNlVHJlZVRpbWUpICsgIm1zIik7CisKKyAgICAgICAgZnVuY3Rp
b24gaGFuZGxlVHlwZXMoZXJyb3IsIGFsbFR5cGVzKQorICAgICAgICB7CisgICAgICAgICAgICBj
b25zb2xlLmFzc2VydChhbGxUeXBlcy5sZW5ndGggPT09IGFsbFJlcXVlc3RzLmxlbmd0aCk7CisK
KyAgICAgICAgICAgIHZhciBlbmRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKKyAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJcbiMjIEdh
dGhlclR5cGVzIHRpbWUgIiArICIoIiArIHNjcmlwdFVSTCArICIpOiIgKyAoZW5kVGltZSAtIHN0
YXJ0VGltZSkgKyAibXMiKTsKKyAgICAgICAgICAgIHZhciBpOworICAgICAgICAgICAgdmFyIG5v
ZGU7CisgICAgICAgICAgICB2YXIgdHlwZXM7CisgICAgICAgICAgICB2YXIgc3RhcnRXYWxrUmVz
dWx0c1RpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IGFsbFR5cGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IGFs
bFJlcXVlc3ROb2Rlc1tpXTsKKyAgICAgICAgICAgICAgICB0eXBlcyA9IGFsbFR5cGVzW2ldOwor
ICAgICAgICAgICAgICAgIGlmIChhbGxSZXF1ZXN0c1tpXS50eXBlSW5mb3JtYXRpb25EZXNjcmlw
dG9yID09PSBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5UeXBlUHJvZmlsZXJTZWFyY2hEZXNj
cmlwdG9yLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybikKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS5fcmV0dXJuVHlwZXMgPSB0eXBlczsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGUuX3R5cGVzID0gdHlwZXM7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZhciBlbmRXYWxrUmVzdWx0c1RpbWUgPSAobmV3IERhdGUo
KSkuZ2V0VGltZSgpOworCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBjb25zb2xlLmxvZygiXG4jIyBXYWxrUmVzdWx0cyB0aW1lOiAiICsgIigiICsgc2NyaXB0VVJM
ICsgIik6IiArIChlbmRXYWxrUmVzdWx0c1RpbWUgLSBzdGFydFdhbGtSZXN1bHRzVGltZSkgKyAi
bXMiKTsKKworICAgICAgICAgICAgaWYgKHZlcmJvc2UgfHwgdHJ1ZSkKKyAgICAgICAgICAgICAg
ICBjb25zb2xlLmxvZygiXG4jIyBUb3RhbFRpbWUgdGltZTogIiArICIoIiArIHNjcmlwdFVSTCAr
ICIpOiIgKyAoZW5kV2Fsa1Jlc3VsdHNUaW1lIC0gc3RhcnRUaW1lKSArICJtcyIpOworCisgICAg
ICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9CisKKyAgICAgICAgUnVudGltZUFnZW50Lmdl
dFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhhbGxSZXF1ZXN0cywgaGFuZGxlVHlw
ZXMpOworICAgIH0sCisgICAgCisgICAgLy8gUHJpdmF0ZQorCisgICAgX2RlZmF1bHRQYXJzZXJT
dGF0ZTogZnVuY3Rpb24oKSAKKyAgICB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBz
aG91bGRTdG9wRWFybHk6IGZhbHNlLAorICAgICAgICAgICAgc2tpcENoaWxkTm9kZXM6IGZhbHNl
CisgICAgICAgIH07CisgICAgfSwKKworICAgIF9yZWN1cnNlOiBmdW5jdGlvbihub2RlLCBmdW5j
LCBzdGF0ZSkgCisgICAgeworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKHN0YXRlLnNob3VsZFN0b3BFYXJseSB8fCBzdGF0ZS5za2lwQ2hpbGRO
b2RlcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgVHlwZXMgPSBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlOworCisgICAgICAgIHN3aXRjaChub2RlLnR5cGUp
IHsKKyAgICAgICAgY2FzZSBUeXBlcy5Bc3NpZ25tZW50RXhwcmVzc2lvbjoKKyAgICAgICAgICAg
IGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxlZnQs
IGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5yaWdodCwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuQXJyYXlF
eHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5lbGVtZW50cywgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuQmxvY2tTdGF0ZW1lbnQ6CisgICAgICAgICAg
ICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2Rl
LmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGVzLkJpbmFyeUV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sZWZ0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkJyZWFrU3RhdGVtZW50OgorICAgICAgICAgICAg
ZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBl
cy5DYXRjaENsYXVzZToKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLnBhcmFtLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVHlwZXMuQ29udGludWVTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5j
KG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sYWJlbCwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuRG9XaGls
ZVN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGVzLkRlYnVnZ2VyU3RhdGVtZW50OgorICAgICAgICAgICAgZnVu
Yyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5F
bXB0eVN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuRXhwcmVzc2lvblN0YXRlbWVudDoKKyAgICAg
ICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmV4cHJlc3Npb24sIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFR5cGVzLkZvclN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmluaXQsIGZ1bmMsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS51cGRhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Gb3JJblN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1
bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxlZnQsIGZ1
bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5yaWdodCwgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0YXRl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkZ1bmN0aW9uQ2FsbDoK
KyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZShub2RlLmNhbGxlZSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFy
cmF5KG5vZGUuYXJndW1lbnRzLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUeXBlcy5GdW5jdGlvbkRlY2xhcmF0aW9uOgorICAgICAgICAgICAgZnVuYyhu
b2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaWQsIGZ1bmMsIHN0
YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLnBhcmFtcywgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0YXRl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkZ1bmN0aW9uRXhwcmVz
c2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZShub2RlLmlkLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
QXJyYXkobm9kZS5wYXJhbXMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUeXBlcy5JZGVudGlmaWVyOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5JZlN0YXRlbWVudDoKKyAgICAg
ICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LnByZWRpY2F0ZSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmNvbnNlcXVlbnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9k
ZS5hbHRlcm5hdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFR5cGVzLkxpdGVyYWw6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkxhYmVsZWRTdGF0ZW1lbnQ6CisgICAg
ICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9k
ZS5sYWJlbCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJv
ZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVz
LkxvZ2ljYWxFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubGVmdCwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLnJpZ2h0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5NZW1iZXJFeHByZXNzaW9uOgorICAgICAgICAgICAg
ZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUub2JqZWN0
LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucHJvcGVydHks
IGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLk5l
d0V4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5jYWxsZWUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRo
aXMuX3JlY3Vyc2VBcnJheShub2RlLmFyZ3VtZW50cywgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuT2JqZWN0RXhwcmVzc2lvbjoKKyAgICAgICAg
ICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5v
ZGUucHJvcGVydGllcywgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVHlwZXMuUHJlZml4RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Qcm9ncmFtOgorICAg
ICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJy
YXkobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUeXBlcy5Qcm9wZXJ0eToKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAg
ICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmtleSwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLnZhbHVlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Qb3N0Zml4RXhwcmVzc2lvbjoKKyAgICAgICAgICAg
IGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3Vt
ZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBl
cy5SZXR1cm5TdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgZnVuYywgc3RhdGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuU2VxdWVuY2VFeHByZXNzaW9uOgorICAg
ICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJy
YXkobm9kZS5leHByZXNzaW9ucywgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVHlwZXMuU3dpdGNoU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2Rl
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuZGlzY3JpbWluYW50LCBm
dW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5jYXNlcywg
ZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuU3dp
dGNoQ2FzZToKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZShub2RlLnByZWRpY2F0ZSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZUFycmF5KG5vZGUuY29uc2VxdWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVGVybmFyeUV4cHJlc3Npb246CisgICAgICAg
ICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5w
cmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5j
b25zZXF1ZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUu
YWx0ZXJuYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBUeXBlcy5UaGlzRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVGhyb3dTdGF0ZW1lbnQ6Cisg
ICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5hcmd1bWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVHlwZXMuVHJ5U3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYmxvY2ssIGZ1bmMsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmd1YXJkZWRIYW5kbGVycywgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuaGFuZGxlcnMsIGZ1
bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5maW5hbGl6ZXIsIGZ1
bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlVuYXJ5
RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0aW9uOgorICAgICAgICAg
ICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9k
ZS5kZWNsYXJhdGlvbnMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFR5cGVzLlZhcmlhYmxlRGVjbGFyYXRvcjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmlkLCBmdW5jLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaW5pdCwgZnVuYywgc3RhdGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuV2hpbGVTdGF0ZW1lbnQ6CisgICAg
ICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9k
ZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9k
ZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
eXBlcy5XaXRoU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUub2JqZWN0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZS5za2lwQ2hpbGROb2RlcyA9IGZhbHNl
OworICAgIH0sCisKKyAgICBfcmVjdXJzZUFycmF5IDogZnVuY3Rpb24oYXJyYXksIGZ1bmMsIHN0
YXRlKSAKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGZvckVhY2gobm9kZSkgeworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgIH0KKworICAgICAg
ICBhcnJheS5mb3JFYWNoKGZvckVhY2guYmluZCh0aGlzKSk7CisgICAgfSwKKyAgICAKKyAgICAv
LyBUaGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgZnJvbSBlc3ByaW1hJ3MgQVNUIHRvIG91cnMuIE1v
c3RseSwgdGhpcyBpcyBqdXN0IHRoZSBpZGVudGl0eSBmdW5jdGlvbiwgYnV0IHRoZXJlIGFyZSBh
IGZldyBub2RlcyBhbmQgYSBmZXcgcHJvcGVydGllcyB0aGF0IGFyZSByZW5hbWVkLgorICAgIC8v
IFNwZWNpZmljYWxseSwgJ3Rlc3QnIHByb3BlcnR5IGlzIHJlbmFtZWQgdG8gJ3ByZWRpY2F0ZScs
IHByZWZpeC9wb3N0Zml4IG5vZGVzIGFyZSBub3cgdG8gc2VwYXJhdGUgbm9kZXMsIENhbGxFeHBy
ZXNzaW9uIGlzIHJlbmFtZWQgdG8gRnVuY3Rpb25DYWxsLCBhbmQgCisgICAgLy8gQ29uZGl0aW9u
YWxFeHByZXNzaW9uIGlzIHJlbmFtZWQgdG8gVGVybmFyeUV4cHJlc3Npb24uCisgICAgX2NyZWF0
ZUludGVybmFsQVNUIDogZnVuY3Rpb24obm9kZSkgCisgICAgeworICAgICAgICBpZiAoIW5vZGUp
CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBzd2l0Y2gobm9kZS50eXBlKSB7
CisgICAgICAgIGNhc2UgJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNU
VHlwZS5Bc3NpZ25tZW50RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9k
ZS5vcGVyYXRvciwKKyAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFT
VChub2RlLmxlZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5h
bEFTVChub2RlLnJpZ2h0KSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnQXJyYXlFeHByZXNzaW9uJzoKKyAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVB
U1QuQVNUVHlwZS5BcnJheUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZWxlbWVudHM6IG5v
ZGUuZWxlbWVudHMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpLAorICAg
ICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9OworICAgICAgICBj
YXNlICdCbG9ja1N0YXRlbWVudCc6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuQmxvY2tTdGF0ZW1l
bnQsCisgICAgICAgICAgICAgICAgYm9keTogbm9kZS5ib2R5Lm1hcCh0aGlzLl9jcmVhdGVJbnRl
cm5hbEFTVC5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnQmluYXJ5RXhwcmVzc2lvbic6CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlQVNULkFTVFR5cGUuQmluYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRv
cjogbm9kZS5vcGVyYXRvciwKKyAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRl
cm5hbEFTVChub2RlLmxlZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbEFTVChub2RlLnJpZ2h0KSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5n
ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnQnJlYWtTdGF0ZW1lbnQnOgorICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZUFTVC5BU1RUeXBlLkJyZWFrU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiB0
aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmxhYmVsKSwKKyAgICAgICAgICAgICAgICByYW5n
ZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnQ2FsbEV4cHJlc3Np
b24nOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkZ1bmN0aW9uQ2FsbCwKKyAgICAgICAgICAgICAg
ICBjYWxsZWU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuY2FsbGVlKSwKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudHM6IG5vZGUuYXJndW1lbnRzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5h
bEFTVC5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnQ2F0Y2hDbGF1c2UnOgorICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5B
U1RUeXBlLkNhdGNoQ2xhdXNlLAorICAgICAgICAgICAgICAgIHBhcmFtOiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbEFTVChub2RlLnBhcmFtKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVh
dGVJbnRlcm5hbEFTVChub2RlLmJvZHkpLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJh
bmdlCisgICAgICAgICAgICB9OworICAgICAgICBjYXNlICdDb25kaXRpb25hbEV4cHJlc3Npb24n
OgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0
b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlRlcm5hcnlFeHByZXNzaW9uLAorICAgICAgICAgICAg
ICAgIHByZWRpY2F0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS50ZXN0KSwKKyAgICAg
ICAgICAgICAgICBjb25zZXF1ZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmNvbnNl
cXVlbnQpLAorICAgICAgICAgICAgICAgIGFsdGVybmF0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxB
U1Qobm9kZS5hbHRlcm5hdGUpLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisg
ICAgICAgICAgICB9OworICAgICAgICBjYXNlICdDb250aW51ZVN0YXRlbWVudCc6CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlQVNULkFTVFR5cGUuQ29udGludWVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6
IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUubGFiZWwpLAorICAgICAgICAgICAgICAgIHJh
bmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9OworICAgICAgICBjYXNlICdEb1doaWxlU3Rh
dGVtZW50JzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Eb1doaWxlU3RhdGVtZW50LAorICAgICAg
ICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYm9keSksCisgICAg
ICAgICAgICAgICAgcHJlZGljYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnRlc3Qp
LAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9OworICAg
ICAgICBjYXNlICdEZWJ1Z2dlclN0YXRlbWVudCc6CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRGVi
dWdnZXJTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgcmFuZ2U6IG5vZGUucmFuZ2UKKyAgICAg
ICAgICAgIH07CisgICAgICAgIGNhc2UgJ0VtcHR5U3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1Qu
QVNUVHlwZS5FbXB0eVN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5n
ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnRXhwcmVzc2lvblN0YXRlbWVudCc6Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlQVNULkFTVFR5cGUuRXhwcmVzc2lvblN0YXRlbWVudCwKKyAgICAgICAgICAgICAg
ICBleHByZXNzaW9uOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmV4cHJlc3Npb24pLAor
ICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9OworICAgICAg
ICBjYXNlICdGb3JTdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkZvclN0YXRlbWVu
dCwKKyAgICAgICAgICAgICAgICBpbml0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmlu
aXQpLAorICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qo
bm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAgICB1cGRhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFs
QVNUKG5vZGUudXBkYXRlKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRl
cm5hbEFTVChub2RlLmJvZHkpLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisg
ICAgICAgICAgICB9OworICAgICAgICBjYXNlICdGb3JJblN0YXRlbWVudCc6CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
QVNULkFTVFR5cGUuRm9ySW5TdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGVmdDogdGhpcy5f
Y3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5sZWZ0KSwKKyAgICAgICAgICAgICAgICByaWdodDogdGhp
cy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5yaWdodCksCisgICAgICAgICAgICAgICAgYm9keTog
dGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5ib2R5KSwKKyAgICAgICAgICAgICAgICByYW5n
ZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnRnVuY3Rpb25EZWNs
YXJhdGlvbic6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbiwKKyAg
ICAgICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5pZCksCisgICAg
ICAgICAgICAgICAgcGFyYW1zOiBub2RlLnBhcmFtcy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxB
U1QuYmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJu
YWxBU1Qobm9kZS5ib2R5KSwKKyAgICAgICAgICAgICAgICBpc0dldHRlck9yU2V0dGVyOiBmYWxz
ZSwgLy8gVGhpcyBpcyBvYnZpb3VzLCBidXQgaXMgY29udmVuaWVudCBub25lIHRoZSBsZXNzIGIv
YyBEZWNsYXJhdGlvbnMgYW5kIEV4cHJlc3Npb25zIGFyZSBvZnRlbiBpbm5lcnR3aW5lZC4KKyAg
ICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAg
Y2FzZSAnRnVuY3Rpb25FeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5GdW5jdGlv
bkV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNU
KG5vZGUuaWQpLAorICAgICAgICAgICAgICAgIHBhcmFtczogbm9kZS5wYXJhbXMubWFwKHRoaXMu
X2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpLAorICAgICAgICAgICAgICAgIGJvZHk6IHRo
aXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYm9keSksCisgICAgICAgICAgICAgICAgaXNHZXR0
ZXJPclNldHRlcjogZmFsc2UsIC8vIElmIHRydWUsIGl0IGlzIHNldCBpbiB0aGUgUHJvcGVydHkg
QVNUIG5vZGUuCisgICAgICAgICAgICAgICAgcmFuZ2U6IG5vZGUucmFuZ2UKKyAgICAgICAgICAg
IH07CisgICAgICAgIGNhc2UgJ0lkZW50aWZpZXInOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLklk
ZW50aWZpZXIsCisgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5uYW1lLAorICAgICAgICAgICAg
ICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9OworICAgICAgICBjYXNlICdJZlN0
YXRlbWVudCc6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuSWZTdGF0ZW1lbnQsCisgICAgICAgICAg
ICAgICAgcHJlZGljYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnRlc3QpLAorICAg
ICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuY29u
c2VxdWVudCksCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5h
bEFTVChub2RlLmFsdGVybmF0ZSksCisgICAgICAgICAgICAgICAgcmFuZ2U6IG5vZGUucmFuZ2UK
KyAgICAgICAgICAgIH07CisgICAgICAgIGNhc2UgJ0xpdGVyYWwnOgorICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5B
U1RUeXBlLkxpdGVyYWwsCisgICAgICAgICAgICAgICAgdmFsdWU6IG5vZGUudmFsdWUsCisgICAg
ICAgICAgICAgICAgcmF3OiBub2RlLnJhdywKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5y
YW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnTGFiZWxlZFN0YXRlbWVudCc6Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlQVNULkFTVFR5cGUuTGFiZWxlZFN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBs
YWJlbDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5sYWJlbCksCisgICAgICAgICAgICAg
ICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5ib2R5KSwKKyAgICAgICAgICAg
ICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnTG9n
aWNhbEV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkxvZ2ljYWxFeHByZXNzaW9u
LAorICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUubGVm
dCksCisgICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUu
cmlnaHQpLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9
OworICAgICAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlw
ZS5NZW1iZXJFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5fY3JlYXRl
SW50ZXJuYWxBU1Qobm9kZS5vYmplY3QpLAorICAgICAgICAgICAgICAgIHByb3BlcnR5OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnByb3BlcnR5KSwKKyAgICAgICAgICAgICAgICByYW5n
ZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnTmV3RXhwcmVzc2lv
bic6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuTmV3RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAg
ICBjYWxsZWU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuY2FsbGVlKSwKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudHM6IG5vZGUuYXJndW1lbnRzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5h
bEFTVC5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnT2JqZWN0RXhwcmVzc2lvbic6CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
QVNULkFTVFR5cGUuT2JqZWN0RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0aWVz
OiBub2RlLnByb3BlcnRpZXMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykp
LAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9OworICAg
ICAgICBjYXNlICdQcm9ncmFtJzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Qcm9ncmFtLAorICAg
ICAgICAgICAgICAgIGJvZHk6IG5vZGUuYm9keS5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qu
YmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgcmFuZ2U6IG5vZGUucmFuZ2UKKyAgICAgICAg
ICAgIH07CisgICAgICAgIGNhc2UgJ1Byb3BlcnR5JzoKKyAgICAgICAgICAgIHZhciBwcm9wID0g
eworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5
cGUuUHJvcGVydHksCisgICAgICAgICAgICAgICAga2V5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFT
VChub2RlLmtleSksCisgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2NyZWF0ZUludGVybmFs
QVNUKG5vZGUudmFsdWUpLAorICAgICAgICAgICAgICAgIGtpbmQ6IG5vZGUua2luZCwKKyAgICAg
ICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IGlmIChwcm9wLmtpbmQgPT09ICJnZXQiIHx8IHByb3Aua2luZCA9PT0gInNldCIpIHsKKyAgICAg
ICAgICAgICAgICBwcm9wLnZhbHVlLmlzR2V0dGVyT3JTZXR0ZXIgPSB0cnVlOworICAgICAgICAg
ICAgICAgIHByb3AudmFsdWUuZ2V0dGVyT3JTZXR0ZXJSYW5nZSA9IHByb3Aua2V5LnJhbmdlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHByb3A7CisgICAgICAgIGNhc2UgJ1Jl
dHVyblN0YXRlbWVudCc6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuUmV0dXJuU3RhdGVtZW50LAor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmFy
Z3VtZW50KSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAg
fTsKKyAgICAgICAgY2FzZSAnU2VxdWVuY2VFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNU
VHlwZS5TZXF1ZW5jZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IG5v
ZGUuZXhwcmVzc2lvbnMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpLAor
ICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9OworICAgICAg
ICBjYXNlICdTd2l0Y2hTdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlN3aXRjaFN0
YXRlbWVudCwKKyAgICAgICAgICAgICAgICBkaXNjcmltaW5hbnQ6IHRoaXMuX2NyZWF0ZUludGVy
bmFsQVNUKG5vZGUuZGlzY3JpbWluYW50KSwKKyAgICAgICAgICAgICAgICBjYXNlczogbm9kZS5j
YXNlcy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxBU1QuYmluZCh0aGlzKSksCisgICAgICAgICAg
ICAgICAgcmFuZ2U6IG5vZGUucmFuZ2UKKyAgICAgICAgICAgIH07CisgICAgICAgIGNhc2UgJ1N3
aXRjaENhc2UnOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlN3aXRjaENhc2UsCisgICAgICAgICAg
ICAgICAgcHJlZGljYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnRlc3QpLAorICAg
ICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IG5vZGUuY29uc2VxdWVudC5tYXAodGhpcy5fY3JlYXRl
SW50ZXJuYWxBU1QuYmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgcmFuZ2U6IG5vZGUucmFu
Z2UKKyAgICAgICAgICAgIH07CisgICAgICAgIGNhc2UgJ1RoaXNFeHByZXNzaW9uJzoKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVBU1QuQVNUVHlwZS5UaGlzRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICByYW5nZTog
bm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnVGhyb3dTdGF0ZW1lbnQn
OgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0
b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlRocm93U3RhdGVtZW50LAorICAgICAgICAgICAgICAg
IGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmFyZ3VtZW50KSwKKyAgICAg
ICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2Fz
ZSAnVHJ5U3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5UcnlTdGF0ZW1lbnQsCisg
ICAgICAgICAgICAgICAgYmxvY2s6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYmxvY2sp
LAorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGFyZSBndWFyZGVkIGhhbmRsZXJzPwor
ICAgICAgICAgICAgICAgIGd1YXJkZWRIYW5kbGVyczogbm9kZS5ndWFyZGVkSGFuZGxlcnMubWFw
KHRoaXMuX2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpLAorICAgICAgICAgICAgICAgIGhh
bmRsZXJzOiBub2RlLmhhbmRsZXJzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRo
aXMpKSwKKyAgICAgICAgICAgICAgICBmaW5hbGl6ZXI6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNU
KG5vZGUuZmluYWxpemVyKSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzoKKyAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVB
U1QuQVNUVHlwZS5VbmFyeUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG5v
ZGUub3BlcmF0b3IsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IHRoaXMuX2NyZWF0ZUludGVy
bmFsQVNUKG5vZGUuYXJndW1lbnQpLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdl
CisgICAgICAgICAgICB9OworICAgICAgICBjYXNlICdVcGRhdGVFeHByZXNzaW9uJzoKKyAgICAg
ICAgICAgIC8vIFByZWZpeC9wb3N0Zml4IGV4cHJlc3Npb25zIGluIGVzcHJpbWEuCisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IChub2RlLnByZWZpeCA/IFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuUHJlZml4RXhwcmVzc2lvbiA6IFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuUG9zdGZpeEV4cHJlc3Npb24pLAorICAgICAgICAg
ICAgICAgIG9wZXJhdG9yOiBub2RlLm9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50
OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmFyZ3VtZW50KSwKKyAgICAgICAgICAgICAg
ICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnVmFyaWFi
bGVEZWNsYXJhdGlvbic6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuVmFyaWFibGVEZWNsYXJhdGlv
biwKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IG5vZGUuZGVjbGFyYXRpb25zLm1hcCh0
aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICByYW5n
ZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnVmFyaWFibGVEZWNs
YXJhdG9yJzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5WYXJpYWJsZURlY2xhcmF0b3IsCisgICAg
ICAgICAgICAgICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuaWQpLAorICAgICAg
ICAgICAgICAgIGluaXQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuaW5pdCksCisgICAg
ICAgICAgICAgICAgcmFuZ2U6IG5vZGUucmFuZ2UKKyAgICAgICAgICAgIH07CisgICAgICAgIGNh
c2UgJ1doaWxlU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5XaGlsZVN0YXRlbWVu
dCwKKyAgICAgICAgICAgICAgICBwcmVkaWNhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5v
ZGUudGVzdCksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qo
bm9kZS5ib2R5KSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgY2FzZSAnV2l0aFN0YXRlbWVudCc6CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5
cGUuV2l0aFN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsQVNUKG5vZGUub2JqZWN0KSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVh
dGVJbnRlcm5hbEFTVChub2RlLmJvZHkpLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJh
bmdlCisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVBU1QucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3Qu
cHJvdG90eXBlOworCisvKiBUaGlzIGlzIGEgbmljZSBzdGFydGluZyBvZmYgcG9pbnQgaWYgeW91
IHdhbnQgdG8gd3JpdGUgYSByZWN1cnNpdmUgZnVuY3Rpb246CisKKyAgICB2YXIgVHlwZXMgPSBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlOworICAgIHN3aXRjaCAoLi4uKSB7Cisg
ICAgY2FzZSBUeXBlcy5Bc3NpZ25tZW50RXhwcmVzc2lvbjoKKyAgICBjYXNlIFR5cGVzLkFycmF5
RXhwcmVzc2lvbjoKKyAgICBjYXNlIFR5cGVzLkJsb2NrU3RhdGVtZW50OgorICAgIGNhc2UgVHlw
ZXMuQmluYXJ5RXhwcmVzc2lvbjoKKyAgICBjYXNlIFR5cGVzLkJyZWFrU3RhdGVtZW50OgorICAg
IGNhc2UgVHlwZXMuQ2F0Y2hDbGF1c2U6CisgICAgY2FzZSBUeXBlcy5Db250aW51ZVN0YXRlbWVu
dDoKKyAgICBjYXNlIFR5cGVzLkRvV2hpbGVTdGF0ZW1lbnQ6CisgICAgY2FzZSBUeXBlcy5EZWJ1
Z2dlclN0YXRlbWVudDoKKyAgICBjYXNlIFR5cGVzLkVtcHR5U3RhdGVtZW50OgorICAgIGNhc2Ug
VHlwZXMuRXhwcmVzc2lvblN0YXRlbWVudDoKKyAgICBjYXNlIFR5cGVzLkZvclN0YXRlbWVudDoK
KyAgICBjYXNlIFR5cGVzLkZvckluU3RhdGVtZW50OgorICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25D
YWxsOgorICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAgICBjYXNlIFR5cGVz
LkZ1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICBjYXNlIFR5cGVzLklkZW50aWZpZXI6CisgICAgY2Fz
ZSBUeXBlcy5JZlN0YXRlbWVudDoKKyAgICBjYXNlIFR5cGVzLkxpdGVyYWw6CisgICAgY2FzZSBU
eXBlcy5MYWJlbGVkU3RhdGVtZW50OgorICAgIGNhc2UgVHlwZXMuTG9naWNhbEV4cHJlc3Npb246
CisgICAgY2FzZSBUeXBlcy5NZW1iZXJFeHByZXNzaW9uOgorICAgIGNhc2UgVHlwZXMuTmV3RXhw
cmVzc2lvbjoKKyAgICBjYXNlIFR5cGVzLk9iamVjdEV4cHJlc3Npb246CisgICAgY2FzZSBUeXBl
cy5QcmVmaXhFeHByZXNzaW9uOgorICAgIGNhc2UgVHlwZXMuUHJvZ3JhbToKKyAgICBjYXNlIFR5
cGVzLlByb3BlcnR5OgorICAgIGNhc2UgVHlwZXMuUG9zdGZpeEV4cHJlc3Npb246CisgICAgY2Fz
ZSBUeXBlcy5SZXR1cm5TdGF0ZW1lbnQ6CisgICAgY2FzZSBUeXBlcy5TZXF1ZW5jZUV4cHJlc3Np
b246CisgICAgY2FzZSBUeXBlcy5Td2l0Y2hTdGF0ZW1lbnQ6CisgICAgY2FzZSBUeXBlcy5Td2l0
Y2hDYXNlOgorICAgIGNhc2UgVHlwZXMuVGVybmFyeUV4cHJlc3Npb246CisgICAgY2FzZSBUeXBl
cy5UaGlzRXhwcmVzc2lvbjoKKyAgICBjYXNlIFR5cGVzLlRocm93U3RhdGVtZW50OgorICAgIGNh
c2UgVHlwZXMuVHJ5U3RhdGVtZW50OgorICAgIGNhc2UgVHlwZXMuVW5hcnlFeHByZXNzaW9uOgor
ICAgIGNhc2UgVHlwZXMuVmFyaWFibGVEZWNsYXJhdGlvbjoKKyAgICBjYXNlIFR5cGVzLlZhcmlh
YmxlRGVjbGFyYXRvcjoKKyAgICBjYXNlIFR5cGVzLldoaWxlU3RhdGVtZW50OgorICAgIGNhc2Ug
VHlwZXMuV2l0aFN0YXRlbWVudDoKKyAgICB9CisqLwpJbmRleDogU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29k
ZVRleHRFZGl0b3IuanMJKHJldmlzaW9uIDE3MTI2NSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw2ICszNiw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvciA9
IGZ1bmMKIAogICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLmNhbGwodGhpcywgbnVsbCwgbnVs
bCwgdGhpcyk7CiAKKyAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgPSBudWxsOyAKKwogICAg
IC8vIEZJWE1FOiBDdXJyZW50bHkgdGhpcyBqdXN0IGp1bXBzIGJldHdlZW4gcmVzb3VyY2VzIGFu
ZCByZWxhdGVkIHNvdXJjZSBtYXAgcmVzb3VyY2VzLiBJdCBkb2Vzbid0ICJqdW1wIHRvIHN5bWJv
bCIgeWV0LgogICAgIHRoaXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsK
IApAQCAtMTAwLDYgKzEwMiwxNCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90CiAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VDb2RlOwogICAgIH0sCiAKKyAgICBz
aG93bjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3Iu
cHJvdG90eXBlLnNob3duLmNhbGwodGhpcyk7CisKKyAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tl
bkFubm90YXRvcikKKyAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZXN1bWUo
KTsKKyAgICB9LAorCiAgICAgaGlkZGVuOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuaGlkZGVuLmNhbGwodGhpcyk7CkBAIC0xMDks
NiArMTE5LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAg
ICAgICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOwogICAgICAgICAKICAgICAgICAgdGhpcy5fZGlz
bWlzc0VkaXRpbmdDb250cm9sbGVyKHRydWUpOworCisgICAgICAgIGlmICh0aGlzLl90eXBlVG9r
ZW5Bbm5vdGF0b3IpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucGF1c2Uo
KTsKICAgICB9LAogCiAgICAgY2xvc2U6IGZ1bmN0aW9uKCkKQEAgLTM0OCw2ICszNjEsNyBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIH0KIAogICAg
ICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZU1hcmtlcnMoKTsKKwogICAgIH0sCiAKICAgICBfcG9w
dWxhdGVXaXRoQ29udGVudDogZnVuY3Rpb24oY29udGVudCkKQEAgLTM1Niw2ICszNzAsMTAgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogCiAgICAgICAgIHRoaXMu
X2NvbnRlbnRXaWxsUG9wdWxhdGUoY29udGVudCk7CiAgICAgICAgIHRoaXMuc3RyaW5nID0gY29u
dGVudDsKKyAgICAgICAgaWYgKHRoaXMuX2NvZGVNaXJyb3IuZ2V0TW9kZSgpLm5hbWUgPT09ICJq
YXZhc2NyaXB0IikgeworICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yID0gbmV3
IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IodGhpcywgdGhpcy5fc291cmNlQ29kZS5z
Y3JpcHRzWzBdKTsKKyAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZXNldCgp
OworICAgICAgICB9CiAgICAgICAgIHRoaXMuX2NvbnRlbnREaWRQb3B1bGF0ZSgpOwogICAgIH0s
CiAKQEAgLTk3NSw2ICs5OTMsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90CiAgICAgICAgIGVsc2UgaWYgKCh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2Vi
SW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlIHx8IHRoaXMuX3NvdXJjZUNvZGUuc291cmNlTWFw
cy5sZW5ndGggIT09IDApICYmIFdlYkluc3BlY3Rvci5tb2RpZmllcktleXMubWV0YUtleSAmJiAh
V2ViSW5zcGVjdG9yLm1vZGlmaWVyS2V5cy5hbHRLZXkgJiYgIVdlYkluc3BlY3Rvci5tb2RpZmll
cktleXMuc2hpZnRLZXkpCiAgICAgICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk5vblN5bWJvbFRva2VuczsKIAorICAgICAg
ICBpZiAoIShtb2RlID09PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250
cm9sbGVyLk1vZGUuSmF2YVNjcmlwdEV4cHJlc3Npb24pKQorICAgICAgICAgICAgbW9kZSA9IFdl
Ykluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5Qb3N0SmF2
YVNjcmlwdEV4cHJlc3Npb247CisKICAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxl
ci5lbmFibGVkID0gbW9kZSAhPT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5n
Q29udHJvbGxlci5Nb2RlLk5vbmU7CiAKICAgICAgICAgaWYgKG1vZGUgPT09IHRoaXMudG9rZW5U
cmFja2luZ0NvbnRyb2xsZXIubW9kZSkKQEAgLTk5Miw2ICsxMDEzLDcgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICAgICAgdGhpcy5fZGlzbWlzc1Bv
cG92ZXIoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5D
b2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0RXhwcmVzc2lv
bjoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250
cm9sbGVyLk1vZGUuUG9zdEphdmFTY3JpcHRFeHByZXNzaW9uOgogICAgICAgICAgICAgdGhpcy50
b2tlblRyYWNraW5nQ29udHJvbGxlci5tb3VzZU92ZXJEZWxheUR1cmF0aW9uID0gV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1cmF0aW9uVG9Nb3VzZU92ZXJUb2tlblRvTWFrZUhv
dmVyZWRUb2tlbjsKICAgICAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW91
c2VPdXRSZWxlYXNlRGVsYXlEdXJhdGlvbiA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5EdXJhdGlvblRvTW91c2VPdXRPZkhvdmVyZWRUb2tlblRvUmVsZWFzZTsKICAgICAgICAg
ICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2xhc3NOYW1lRm9ySGlnaGxpZ2h0ZWRS
YW5nZSA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5Ib3ZlcmVkRXhwcmVzc2lv
bkhpZ2hsaWdodFN0eWxlQ2xhc3NOYW1lOwpAQCAtMTAyOSw2ICsxMDUxLDcgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICAgICAgdGhpcy5fZGlzbWlz
c1BvcG92ZXIoKTsKICAgICB9LAogCisKICAgICB0b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hs
aWdodGVkUmFuZ2VXYXNDbGlja2VkOiBmdW5jdGlvbih0b2tlblRyYWNraW5nQ29udHJvbGxlcikK
ICAgICB7CiAgICAgICAgIGlmICh0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vZGUgIT09
IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5Ob25T
eW1ib2xUb2tlbnMpCkBAIC0xMDUyLDcgKzEwNzUsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAodGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5tb2RlID09PSBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2YVNjcmlwdEV4cHJl
c3Npb24pIHsKKyAgICAgICAgaWYgKHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW9kZSA9
PT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkph
dmFTY3JpcHRFeHByZXNzaW9uCisgICAgICAgICAgICB8fCB0aGlzLnRva2VuVHJhY2tpbmdDb250
cm9sbGVyLm1vZGUgPT09IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIuTW9kZS5Qb3N0SmF2YVNjcmlwdEV4cHJlc3Npb24pIAorICAgICAgICB7CiAgICAgICAg
ICAgICB0aGlzLl90b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdEV4
cHJlc3Npb24oY2FuZGlkYXRlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
MTEwOSwyOSArMTEzNCw2MiBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJv
dG90CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBEZWJ1Z2dlckFnZW50LmV2
YWx1YXRlT25DYWxsRnJhbWUuaW52b2tlKHtjYWxsRnJhbWVJZDogV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWUuaWQsIGV4cHJlc3Npb246IGNhbmRpZGF0ZS5leHBy
ZXNzaW9uLCBvYmplY3RHcm91cDogInBvcG92ZXIiLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5k
TXV0ZUNvbnNvbGU6IHRydWV9LCBwb3B1bGF0ZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgaWYgKHRo
aXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW9kZSA9PT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLlBvc3RKYXZhU2NyaXB0RXhwcmVzc2lvbikg
eyAKKyAgICAgICAgICAgIHZhciBzb3VyY2VDb2RlID0gdGhpcy5fc291cmNlQ29kZTsKKyAgICAg
ICAgICAgIHZhciBzb3VyY2VJRCA9IHNvdXJjZUNvZGUuc2NyaXB0c1swXS5pZDsKKyAgICAgICAg
ICAgIHZhciByYW5nZSA9IGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZTsKKyAgICAgICAgICAg
IHZhciBvZmZzZXQ7CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAp
CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1h
dHRlZFRvT3JpZ2luYWxPZmZzZXQocmFuZ2Uuc3RhcnQubGluZSwgcmFuZ2Uuc3RhcnQuY2gpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9rZW5UcmFj
a2luZ0NvbnRyb2xsZXIuX2NvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9zKHsgbGluZSA6
IHJhbmdlLnN0YXJ0LmxpbmUsIGNoIDogcmFuZ2Uuc3RhcnQuY2ggfSk7CisKKyAgICAgICAgICAg
IHZhciBhbGxSZXF1ZXN0cyA9IFt7CisgICAgICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVz
Y3JpcHRvcjogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuVHlwZVByb2ZpbGVyU2VhcmNoRGVz
Y3JpcHRvci5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsLAorICAgICAgICAgICAg
ICAgIHNvdXJjZUlEOiBzb3VyY2VJRCwKKyAgICAgICAgICAgICAgICBkaXZvdDogb2Zmc2V0Cisg
ICAgICAgICAgICB9XTsKKworICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxlcihlcnJvciwgYWxs
VHlwZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlICE9PSB0aGlzLnRva2VuVHJh
Y2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoYWxsVHlwZXMubGVuZ3RoID09PSAxKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWFsbFR5cGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHZhciB0eXBlcyA9IGFsbFR5cGVzWzBdOworICAg
ICAgICAgICAgICAgIGlmICh0eXBlcy5kaXNwbGF5VHlwZU5hbWUpCisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3Nob3dQb3BvdmVyRm9yVHlwZXModHlwZXMpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgUnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0
cyhhbGxSZXF1ZXN0cywgaGFuZGxlci5iaW5kKHRoaXMpKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBEZWJ1Z2dlckFnZW50LmV2YWx1YXRlT25DYWxsRnJhbWUuaW52b2tlKHtjYWxsRnJh
bWVJZDogV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWUuaWQsIGV4
cHJlc3Npb246IGNhbmRpZGF0ZS5leHByZXNzaW9uLCBvYmplY3RHcm91cDogInBvcG92ZXIiLCBk
b05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGU6IHRydWV9LCBwb3B1bGF0ZS5iaW5k
KHRoaXMpKTsKICAgICB9LAogCi0gICAgX3Nob3dQb3BvdmVyOiBmdW5jdGlvbihjb250ZW50KQor
ICAgIF9zaG93UG9wb3ZlcjogZnVuY3Rpb24oY29udGVudCwgYm91bmRzKQogICAgIHsKLSAgICAg
ICAgY29uc29sZS5hc3NlcnQodGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5jYW5kaWRhdGUp
OworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmNh
bmRpZGF0ZSB8fCBib3VuZHMpOwogCi0gICAgICAgIHZhciBjYW5kaWRhdGUgPSB0aGlzLnRva2Vu
VHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZTsKLSAgICAgICAgaWYgKCFjYW5kaWRhdGUpCi0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghYm91bmRzKSB7CisgICAgICAgICAgICB2
YXIgY2FuZGlkYXRlID0gdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5jYW5kaWRhdGU7Cisg
ICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB2YXIgcmVjdHMgPSB0aGlzLnJlY3RzRm9yUmFuZ2UoY2FuZGlkYXRlLmhvdmVyZWRU
b2tlblJhbmdlKTsKKyAgICAgICAgICAgIGJvdW5kcyA9IFdlYkluc3BlY3Rvci5SZWN0LnVuaW9u
T2ZSZWN0cyhyZWN0cyk7CisgICAgICAgICAgICAvL3RoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xs
ZXIuaGlnaGxpZ2h0UmFuZ2UoY2FuZGlkYXRlLmV4cHJlc3Npb25SYW5nZSk7CisgICAgICAgIH0K
IAogICAgICAgICBjb250ZW50LmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVU
ZXh0RWRpdG9yLlBvcG92ZXJEZWJ1Z2dlckNvbnRlbnRTdHlsZUNsYXNzTmFtZSk7CiAKLSAgICAg
ICAgdmFyIHJlY3RzID0gdGhpcy5yZWN0c0ZvclJhbmdlKGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5S
YW5nZSk7Ci0gICAgICAgIHZhciBib3VuZHMgPSBXZWJJbnNwZWN0b3IuUmVjdC51bmlvbk9mUmVj
dHMocmVjdHMpOwotCi0gICAgICAgIHRoaXMuX3BvcG92ZXIgPSB0aGlzLl9wb3BvdmVyIHx8IG5l
dyBXZWJJbnNwZWN0b3IuUG9wb3Zlcih0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMuX3BvcG92ZXIp
CisgICAgICAgICAgICB0aGlzLl9wb3BvdmVyLmRpc21pc3MoKTsKKyAgICAgICAgdGhpcy5fcG9w
b3ZlciA9IG5ldyBXZWJJbnNwZWN0b3IuUG9wb3ZlcihudWxsKTsKKyAgICAgICAgLy90aGlzLl9w
b3BvdmVyID0gdGhpcy5fcG9wb3ZlciB8fCBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXIodGhpcyk7
CiAgICAgICAgIHRoaXMuX3BvcG92ZXIuY29udGVudCA9IGNvbnRlbnQ7CiAgICAgICAgIHRoaXMu
X3BvcG92ZXIucHJlc2VudChib3VuZHMucGFkKDUpLCBbV2ViSW5zcGVjdG9yLlJlY3RFZGdlLk1J
Tl9ZLCBXZWJJbnNwZWN0b3IuUmVjdEVkZ2UuTUFYX1ksIFdlYkluc3BlY3Rvci5SZWN0RWRnZS5N
QVhfWF0pOwogCi0gICAgICAgIHRoaXMuX3RyYWNrUG9wb3ZlckV2ZW50cygpOwotCi0gICAgICAg
IHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuaGlnaGxpZ2h0UmFuZ2UoY2FuZGlkYXRlLmV4
cHJlc3Npb25SYW5nZSk7CisgICAgICAgIC8vdGhpcy5fdHJhY2tQb3BvdmVyRXZlbnRzKCk7CiAg
ICAgfSwKIAogICAgIF9zaG93UG9wb3ZlckZvckZ1bmN0aW9uOiBmdW5jdGlvbihkYXRhKQpAQCAt
MTI0Niw2ICsxMzA0LDI0IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90
b3QKICAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXIoY29udGVudCk7CiAgICAgfSwKIAorICAgIF9z
aG93UG9wb3ZlckZvclR5cGVzOiBmdW5jdGlvbih0eXBlcywgYm91bmRzKQorICAgIHsKKyAgICAg
ICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAg
Y29udGVudC5jbGFzc05hbWUgPSAib2JqZWN0IGV4cGFuZGFibGUiOworCisgICAgICAgIHZhciB0
aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGl0
bGVFbGVtZW50LmNsYXNzTmFtZSA9ICJ0aXRsZSI7CisgICAgICAgIHRpdGxlRWxlbWVudC50ZXh0
Q29udGVudCA9ICJUeXBlIEluZm9ybWF0aW9uOiAiICsgdHlwZXMuZGlzcGxheVR5cGVOYW1lOwor
ICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbWVudCk7CisKKyAgICAgICAgdmFy
IHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbih0eXBlcyk7
CisgICAgICAgIHNlY3Rpb24uZXhwYW5kZWQgPSB0cnVlOworICAgICAgICBzZWN0aW9uLmVsZW1l
bnQuY2xhc3NMaXN0LmFkZCgiYm9keSIpOworICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKHNl
Y3Rpb24uZWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXIoY29udGVudCwgYm91
bmRzKTsKKyAgICB9LAorCiAgICAgd2lsbERpc21pc3NQb3BvdmVyOiBmdW5jdGlvbihwb3BvdmVy
KQogICAgIHsKICAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5yZW1vdmVIaWdo
bGlnaHRlZFJhbmdlKCk7CkBAIC0xMzYxLDYgKzE0MzcsMTQgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICB0aGlzLl9pZ25vcmVDb250ZW50RGlkQ2hh
bmdlLS07CiAKICAgICAgICAgZGVsZXRlIHRoaXMuX2VkaXRpbmdDb250cm9sbGVyOworICAgIH0s
CisKKyAgICBfcHJldHR5UHJpbnQ6IGZ1bmN0aW9uKHByZXR0eSkKKyAgICB7CisgICAgICAgIFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcHJldHR5UHJpbnQuY2FsbCh0aGlzLCBw
cmV0dHkpOworCisgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IpCisgICAgICAg
ICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzZXQoKTsKICAgICB9CiB9OwogCkluZGV4
OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VD
b250ZW50Vmlldy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qcwkocmV2aXNpb24gMTcxMjY1
KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dFJlc291
cmNlQ29udGVudFZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDEyIEBAIFdlYklu
c3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50VmlldyA9IGYKICAgICB0aGlzLl9wcmV0dHlQcmlu
dEJ1dHRvbk5hdmlnYXRpb25JdGVtID0gbmV3IFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5h
dmlnYXRpb25JdGVtKCJwcmV0dHktcHJpbnQiLCB0b29sVGlwLCBhY3RpdmF0ZWRUb29sVGlwLCAi
SW1hZ2VzL05hdmlnYXRpb25JdGVtQ3VybGV5QnJhY2VzLnN2ZyIsIDE2LCAxNik7CiAgICAgdGhp
cy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCB0aGlzLl90b2dnbGVQ
cmV0dHlQcmludCwgdGhpcyk7CiAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9u
SXRlbS5lbmFibGVkID0gZmFsc2U7IC8vIEVuYWJsZWQgd2hlbiB0aGUgdGV4dCBlZGl0b3IgaXMg
cG9wdWxhdGVkIHdpdGggY29udGVudC4KKworICAgIHZhciB0b29sVGlwVHlwZXMgPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlByZXR0eSBwcmludCIpOworICAgIHZhciBhY3RpdmF0ZWRUb29sVGlw
VHlwZXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk9yaWdpbmFsIGZvcm1hdHRpbmciKTsKKyAg
ICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbSA9IG5ldyBXZWJJbnNwZWN0b3Iu
QWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbSgic2hvdy10eXBlcyIsIHRvb2xUaXBUeXBlcywg
YWN0aXZhdGVkVG9vbFRpcFR5cGVzLCAiSW1hZ2VzL05hdmlnYXRpb25JdGVtVGF1LnN2ZyIsIDE2
LCAxNik7CisgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwg
dGhpcy5fdG9nZ2xlVHlwZUFubm90YXRpb25zLCB0aGlzKTsKKyAgICB0aGlzLl9zaG93VHlwZXNC
dXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gZmFsc2U7CiB9OwogCiBXZWJJbnNwZWN0b3Iu
VGV4dFJlc291cmNlQ29udGVudFZpZXcuU3R5bGVDbGFzc05hbWUgPSAidGV4dCI7CkBAIC01Niw3
ICs2Miw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm8KIAogICAg
IGdldCBuYXZpZ2F0aW9uSXRlbXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFt0aGlzLl9wcmV0
dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtXTsKKyAgICAgICAgcmV0dXJuIFt0aGlzLl9wcmV0
dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLCB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0
aW9uSXRlbV07CiAgICAgfSwKIAogICAgIGdldCBtYW5hZ2VzT3duSXNzdWVzKCkKQEAgLTE5NCw2
ICsyMDAsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvCiAgICAg
X2NvbnRlbnREaWRQb3B1bGF0ZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlz
Ll9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSB0aGlzLl90ZXh0RWRp
dG9yLmNhbkJlRm9ybWF0dGVkKCk7CisgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmln
YXRpb25JdGVtLmVuYWJsZWQgPSAhIXRoaXMuX3RleHRFZGl0b3IuX3R5cGVUb2tlbkFubm90YXRv
cjsKKyAgICAgICAgaWYgKHRoaXMuX3RleHRFZGl0b3IuX3R5cGVUb2tlbkFubm90YXRvcikKKyAg
ICAgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmFjdGl2YXRlZCA9
ICF0aGlzLl90ZXh0RWRpdG9yLl90eXBlVG9rZW5Bbm5vdGF0b3IuX2hpZGRlbjsKICAgICB9LAog
CiAgICAgX3RvZ2dsZVByZXR0eVByaW50OiBmdW5jdGlvbihldmVudCkKQEAgLTIwMiw2ICsyMTEs
MTIgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnBybwogICAgICAgICB0
aGlzLl90ZXh0RWRpdG9yLmZvcm1hdHRlZCA9IGFjdGl2YXRlZDsKICAgICB9LAogCisgICAgX3Rv
Z2dsZVR5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIg
aXNBY3RpdmF0ZWQgPSB0aGlzLl90ZXh0RWRpdG9yLl90eXBlVG9rZW5Bbm5vdGF0b3IudG9nZ2xl
VHlwZUFubm90YXRpb25zKCk7CisgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRp
b25JdGVtLmFjdGl2YXRlZCA9IGlzQWN0aXZhdGVkOworICAgIH0sCisKICAgICBfdGV4dEVkaXRv
ckZvcm1hdHRpbmdEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhp
cy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5hY3RpdmF0ZWQgPSB0aGlzLl90ZXh0
RWRpdG9yLmZvcm1hdHRlZDsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1R5cGVQcm9wZXJ0aWVzU2VjdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlUHJvcGVydGllc1NlY3Rpb24u
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnRpZXNTZWN0aW9uID0g
ZnVuY3Rpb24odHlwZXMsIHRpdGxlLCBzdWJ0aXRsZSkKK3sKKyAgICB0aGlzLmVtcHR5UGxhY2Vo
b2xkZXIgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk5vIFByb3BlcnRpZXMiKTsKKyAgICB0aGlz
LnR5cGVzID0gdHlwZXM7CisKKyAgICBXZWJJbnNwZWN0b3IuUHJvcGVydGllc1NlY3Rpb24uY2Fs
bCh0aGlzLCB0aXRsZSwgc3VidGl0bGUpOworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0
aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CisgICAgb25wb3B1bGF0ZTogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdmFyIGk7CisgICAgICAgIHZhciBwcmltaXRpdmVUeXBlTmFtZXMgPSB0aGlz
LnR5cGVzLmdsb2JhbFByaW1pdGl2ZVR5cGVOYW1lcyA/IHRoaXMudHlwZXMuZ2xvYmFsUHJpbWl0
aXZlVHlwZU5hbWVzIDogdGhpcy50eXBlcy5sb2NhbFByaW1pdGl2ZVR5cGVOYW1lczsKKyAgICAg
ICAgdmFyIG9iamVjdFR5cGVOYW1lcyA9IHRoaXMudHlwZXMuZ2xvYmFsT2JqZWN0VHlwZU5hbWVz
ID8gdGhpcy50eXBlcy5nbG9iYWxPYmplY3RUeXBlTmFtZXMgOiB0aGlzLnR5cGVzLmxvY2FsT2Jq
ZWN0VHlwZU5hbWVzOworICAgICAgICB2YXIgc3RydWN0dXJlcyA9IHRoaXMudHlwZXMuZ2xvYmFs
U3RydWN0dXJlcyA/IHRoaXMudHlwZXMuZ2xvYmFsU3RydWN0dXJlcyA6IHRoaXMudHlwZXMubG9j
YWxTdHJ1Y3R1cmVzOworICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdOworICAgICAgICBjb25z
b2xlLmFzc2VydChzdHJ1Y3R1cmVzLmxlbmd0aCA9PT0gb2JqZWN0VHlwZU5hbWVzLmxlbmd0aCk7
CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvYmplY3RUeXBlTmFtZXMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHt9OworICAgICAgICAgICAgcHJvcGVydHkubmFt
ZSA9IG9iamVjdFR5cGVOYW1lc1tpXTsKKyAgICAgICAgICAgIHByb3BlcnR5LnN0cnVjdHVyZSA9
IHN0cnVjdHVyZXNbaV07CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOwor
ICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmltaXRpdmVUeXBlTmFtZXMubGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHt9OworICAgICAgICAgICAg
cHJvcGVydHkubmFtZSA9IHByaW1pdGl2ZVR5cGVOYW1lc1tpXTsKKyAgICAgICAgICAgIHByb3Bl
cnR5LnN0cnVjdHVyZSA9IG51bGw7CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVy
dHkpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgcHJvcGVydGllcy5zb3J0KFdl
Ykluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24uQ29tcGFyZVByb3BlcnRpZXMpOworCisg
ICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLnJlbW92ZUNoaWxkcmVuKCk7CisgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAg
dGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5U
eXBlUHJvcGVydHlUcmVlRWxlbWVudChwcm9wZXJ0aWVzW2ldKSk7CisKKyAgICAgICAgaWYgKCF0
aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5jaGlsZHJlbi5sZW5ndGgpIHsKKyAgICAgICAgICAg
IHZhciB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAg
dGl0bGUuY2xhc3NOYW1lID0gImluZm8iOworICAgICAgICAgICAgdGl0bGUudGV4dENvbnRlbnQg
PSB0aGlzLmVtcHR5UGxhY2Vob2xkZXI7CisgICAgICAgICAgICB2YXIgaW5mb0VsZW1lbnQgPSBu
ZXcgVHJlZUVsZW1lbnQodGl0bGUsIG51bGwsIGZhbHNlKTsKKyAgICAgICAgICAgIHRoaXMucHJv
cGVydGllc1RyZWVPdXRsaW5lLmFwcGVuZENoaWxkKGluZm9FbGVtZW50KTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLlNlY3Rpb24uRXZlbnQuVmlzaWJsZUNvbnRlbnREaWRDaGFuZ2UpOworICAgIH0KK307CisK
K1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLl9fcHJvdG9fXyA9
IFdlYkluc3BlY3Rvci5Qcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGU7CisKK1dlYkluc3BlY3Rv
ci5UeXBlUHJvcGVydGllc1NlY3Rpb24uQ29tcGFyZVByb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9w
ZXJ0eUEsIHByb3BlcnR5QikKK3sKKyAgICB2YXIgYSA9IHByb3BlcnR5QS5uYW1lOworICAgIHZh
ciBiID0gcHJvcGVydHlCLm5hbWU7CisgICAgaWYgKGEuaW5kZXhPZigiX19wcm90b19fIikgIT09
IC0xKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoYi5pbmRleE9mKCJfX3Byb3RvX18iKSAh
PT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoYSA9PT0gYikKKyAgICAgICAgcmV0
dXJuIDE7CisKKyAgICAvLyBpZiB1c2VkIGVsc2V3aGVyZSBtYWtlIHN1cmUgdG8KKyAgICAvLyAg
LSBjb252ZXJ0IGEgYW5kIGIgdG8gc3RyaW5ncyAobm90IG5lZWRlZCBoZXJlLCBwcm9wZXJ0aWVz
IGFyZSBhbGwgc3RyaW5ncykKKworICAgIHZhciBkaWZmID0gMDsKKyAgICB2YXIgY2h1bmsgPSAv
XlxkK3xeXEQrLzsKKyAgICB2YXIgY2h1bmthLCBjaHVua2IsIGFudW0sIGJudW07CisgICAgd2hp
bGUgKGRpZmYgPT09IDApIHsKKyAgICAgICAgaWYgKCFhICYmIGIpCisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIGlmICghYiAmJiBhKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIGNodW5rYSA9IGEubWF0Y2goY2h1bmspWzBdOworICAgICAgICBjaHVua2IgPSBiLm1hdGNo
KGNodW5rKVswXTsKKyAgICAgICAgYW51bSA9ICFpc05hTihjaHVua2EpOworICAgICAgICBibnVt
ID0gIWlzTmFOKGNodW5rYik7CisgICAgICAgIGlmIChhbnVtICYmICFibnVtKQorICAgICAgICAg
ICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoYm51bSAmJiAhYW51bSkKKyAgICAgICAgICAgIHJl
dHVybiAxOworICAgICAgICBpZiAoYW51bSAmJiBibnVtKSB7CisgICAgICAgICAgICBkaWZmID0g
Y2h1bmthIC0gY2h1bmtiOworICAgICAgICAgICAgaWYgKGRpZmYgPT09IDAgJiYgY2h1bmthLmxl
bmd0aCAhPT0gY2h1bmtiLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGlmICghK2NodW5rYSAm
JiAhK2NodW5rYikgLy8gY2h1bmtzIGFyZSBzdHJpbmdzIG9mIGFsbCAwcyAoc3BlY2lhbCBjYXNl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2h1bmthLmxlbmd0aCAtIGNodW5rYi5sZW5n
dGg7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2h1
bmtiLmxlbmd0aCAtIGNodW5rYS5sZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoY2h1bmthICE9PSBjaHVua2IpCisgICAgICAgICAgICByZXR1cm4gKGNodW5rYSA8IGNo
dW5rYikgPyAtMSA6IDE7CisgICAgICAgIGEgPSBhLnN1YnN0cmluZyhjaHVua2EubGVuZ3RoKTsK
KyAgICAgICAgYiA9IGIuc3Vic3RyaW5nKGNodW5rYi5sZW5ndGgpOworICAgIH0KKworICAgIHJl
dHVybiBkaWZmOworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50ID0g
ZnVuY3Rpb24ocHJvcGVydHkpCit7CisgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5OworCisg
ICAgLy8gUGFzcyBhbiBlbXB0eSB0aXRsZSwgdGhlIHRpdGxlIGdldHMgbWFkZSBsYXRlciBpbiBv
bmF0dGFjaC4KKyAgICB0aGlzLm5hbWVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c3BhbiIpOworICAgIHRoaXMubmFtZUVsZW1lbnQuY2xhc3NOYW1lID0gIm5hbWUiOworICAgIHRo
aXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLnByb3BlcnR5Lm5hbWU7CisKKyAgICBU
cmVlRWxlbWVudC5jYWxsKHRoaXMsIHRoaXMubmFtZUVsZW1lbnQsIG51bGwsIGZhbHNlKTsKKwor
ICAgIHRoaXMudG9nZ2xlT25DbGljayA9IHRydWU7CisgICAgdGhpcy5oYXNDaGlsZHJlbiA9IHRo
aXMucHJvcGVydHkuc3RydWN0dXJlICYmIHRoaXMucHJvcGVydHkuc3RydWN0dXJlLmxlbmd0aDsK
K307CisKK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7
CisgICAgb25wb3B1bGF0ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHByb3BlcnRp
ZXMgPSBbXTsKKyAgICAgICAgdmFyIGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnBy
b3BlcnR5LnN0cnVjdHVyZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIG5ld1Byb3Ag
PSB7fTsKKyAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaChuZXdQcm9wKTsKKyAgICAgICAgICAg
IG5ld1Byb3AubmFtZSA9IHRoaXMucHJvcGVydHkuc3RydWN0dXJlW2ldOworICAgICAgICAgICAg
bmV3UHJvcC5zdHJ1Y3R1cmUgPSBudWxsOworICAgICAgICAgICAgLy8gUHJvdG8ncyBhcmUgYWxs
IHBhc3NlZCBpbiBhIGZsYXR0ZW5lZCBhcnJheSwgYnV0IHdlIHNob3VsZCBjcmVhdGUgZGVwdGgg
YnkgbWFraW5nIGVhY2ggc3VjY2Vzc2l2ZSBwcm90byBhIGRyb3AgZG93biBsaXN0LgorICAgICAg
ICAgICAgaWYgKG5ld1Byb3AubmFtZS5pbmRleE9mKCJfX3Byb3RvX18iKSAhPT0gLTEpIHsKKyAg
ICAgICAgICAgICAgICBuZXdQcm9wLnN0cnVjdHVyZSA9IHRoaXMucHJvcGVydHkuc3RydWN0dXJl
LnNsaWNlKGkgKyAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHByb3BlcnRpZXMuc29ydChXZWJJbnNwZWN0b3IuVHlwZVByb3Bl
cnRpZXNTZWN0aW9uLkNvbXBhcmVQcm9wZXJ0aWVzKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8
IHByb3BlcnRpZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKG5l
dyBXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnR5VHJlZUVsZW1lbnQocHJvcGVydGllc1tpXSkpOwor
ICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5
cGUuX19wcm90b19fID0gVHJlZUVsZW1lbnQucHJvdG90eXBlOworCkluZGV4OiBTb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmNzcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9r
ZW5WaWV3LmNzcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisudHlwZS10b2tlbiB7CisgICAgZGlzcGxheTogaW5saW5lOyAK
KyAgICBib3JkZXItcmFkaXVzOiAxMHB4OworICAgIHBhZGRpbmctbGVmdDogOHB4OworICAgIHBh
ZGRpbmctcmlnaHQ6IDhweDsKKyAgICBwYWRkaW5nLXRvcDogMXB4OworICAgIGNvbG9yOiB3aGl0
ZTsKKyAgICBmb250LXNpemU6IDkyJTsKKyAgICBvcGFjaXR5OiAwLjg1OworfQpJbmRleDogU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9U
eXBlVG9rZW5WaWV3LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcgPSBm
dW5jdGlvbih0b2tlbkFubm90YXRvciwgc2hvdWxkSGF2ZVJpZ2h0TWFyZ2luLCBzaG91bGRIYXZl
TGVmdE1hcmdpbikgCit7CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworCisg
ICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgc3Bhbi5j
bGFzc05hbWUgPSAidHlwZS10b2tlbiI7CisgICAgc3Bhbi5zdHlsZS5tYXJnaW5SaWdodCA9IChz
aG91bGRIYXZlUmlnaHRNYXJnaW4gPyAiNXB4IiA6ICIwcHgiKTsKKyAgICBzcGFuLnN0eWxlLm1h
cmdpbkxlZnQgPSAoc2hvdWxkSGF2ZUxlZnRNYXJnaW4gPyAiNXB4IiA6ICIwcHgiKTsKKworICAg
IHRoaXMuZWxlbWVudCA9IHNwYW47CisgICAgdGhpcy5fdG9rZW5Bbm5vdGF0b3IgPSB0b2tlbkFu
bm90YXRvcjsKKyAgICB0aGlzLl90eXBlcyA9IG51bGw7CisKKyAgICB0aGlzLl9zZXRVcE1vdXNl
b3ZlckhhbmRsZXJzKCk7Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMg
PSB7CisgICAgcHVycGxlIDogIiNjYzNiYmYiLAorICAgIGJsdWU6ICIjM2I3MGUyIiwKKyAgICBy
ZWQ6ICIjZGYzNTJlIiwKKyAgICBncmVlbjogIiM3NmFlMWQiLAorICAgIGdyYXk6ICIjN2U3ZTdl
IiwKKyAgICBvcmFuZ2U6ICIjZWQ4NDAwIgorfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZp
ZXcuQ29sb3JGb3JUeXBlID0geworICAgICJTdHJpbmciIDogV2ViSW5zcGVjdG9yLlR5cGVUb2tl
blZpZXcuQ29sb3JzLnJlZCwKKyAgICAiRnVuY3Rpb24iIDogV2ViSW5zcGVjdG9yLlR5cGVUb2tl
blZpZXcuQ29sb3JzLnB1cnBsZSwgCisgICAgIk51bWJlciIgOiBXZWJJbnNwZWN0b3IuVHlwZVRv
a2VuVmlldy5Db2xvcnMuYmx1ZSwKKyAgICAiSW50ZWdlciIgOiBXZWJJbnNwZWN0b3IuVHlwZVRv
a2VuVmlldy5Db2xvcnMuYmx1ZSwKKyAgICAiVW5kZWZpbmVkIiA6IFdlYkluc3BlY3Rvci5UeXBl
VG9rZW5WaWV3LkNvbG9ycy5ncmF5LAorICAgICJOdWxsIiA6IFdlYkluc3BlY3Rvci5UeXBlVG9r
ZW5WaWV3LkNvbG9ycy5ncmF5LAorICAgICIoPykiIDogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZp
ZXcuQ29sb3JzLmdyYXksCisgICAgIkJvb2xlYW4iIDogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZp
ZXcuQ29sb3JzLnB1cnBsZSwKKyAgICAiKG1hbnkpIiA6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5W
aWV3LkNvbG9ycy5vcmFuZ2UKK307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnByb3Rv
dHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcsCisK
KyAgICAvLyBwdWJsaWMKKworICAgIHVwZGF0ZTogZnVuY3Rpb24odHlwZXMpCisgICAgeworICAg
ICAgICAvL2NvbnNvbGUudHJhY2UoKTsKKyAgICAgICAgdmFyIHRpdGxlID0gdHlwZXMuZGlzcGxh
eVR5cGVOYW1lOworICAgICAgICB0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQgPSB0aXRsZTsKKyAg
ICAgICAgdGhpcy5fdHlwZXMgPSB0eXBlczsKKyAgICAgICAgdmFyIGhhc2hTdHJpbmcgPSB0aXRs
ZVt0aXRsZS5sZW5ndGggLSAxXSA9PT0gIj8iID8gdGl0bGUuc2xpY2UoMCwgdGl0bGUubGVuZ3Ro
IC0gMSkgOiB0aXRsZTsKKyAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xv
ciA9IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9yRm9yVHlwZVtoYXNoU3RyaW5nXSB8
fCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMuZ3JlZW47CisgICAgfSwKKyAgICAK
KyAgICAvLyBwcml2YXRlCisgICAgCisgICAgX3NldFVwTW91c2VvdmVySGFuZGxlcnM6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBpc0hvdmVyZWQgPSBmYWxzZTsKKyAgICAgICAgdmFy
IHNlbGYgPSB0aGlzOworCisgICAgICAgIHRoaXMuZWxlbWVudC5vbm1vdXNlb3ZlciA9IGZ1bmN0
aW9uKCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIGlzSG92ZXJlZCA9IHRydWU7CisgICAgICAg
ICAgICBmdW5jdGlvbiBhZnRlckRlbGF5KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWlzSG92ZXJlZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICAgICAgdmFyIGRvbVJlY3QgPSBzZWxmLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCk7CisgICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG5ldyBXZWJJbnNwZWN0b3IuUmVjdChk
b21SZWN0LmxlZnQsIGRvbVJlY3QudG9wLCBkb21SZWN0LndpZHRoLCBkb21SZWN0LmhlaWdodCk7
CisgICAgICAgICAgICAgICAgdmFyIGVkZ2VzID0gW1dlYkluc3BlY3Rvci5SZWN0RWRnZS5NSU5f
WSwgV2ViSW5zcGVjdG9yLlJlY3RFZGdlLk1BWF9ZLCBXZWJJbnNwZWN0b3IuUmVjdEVkZ2UuTUFY
X1hdOworCisgICAgICAgICAgICAgICAgc2VsZi5fdG9rZW5Bbm5vdGF0b3IuX3NvdXJjZUNvZGVU
ZXh0RWRpdG9yLl9zaG93UG9wb3ZlckZvclR5cGVzKHNlbGYuX3R5cGVzLCBib3VuZHMpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRUaW1lb3V0KGFmdGVyRGVsYXksIDM1MCk7Cisg
ICAgICAgIH0KKworICAgICAgICB0aGlzLmVsZW1lbnQub25tb3VzZW91dCA9IGZ1bmN0aW9uKCkg
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlzSG92ZXJlZCA9IGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcucHJvdG90eXBlLl9fcHJvdG9f
XyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235651</attachid>
            <date>2014-07-28 17:23:12 -0700</date>
            <delta_ts>2014-08-01 15:58:43 -0700</delta_ts>
            <desc>Work In Progress</desc>
            <filename>review.diff</filename>
            <type>text/plain</type>
            <size>86441</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2Fs
aXplZFN0cmluZ3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2Fs
aXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwkocmV2aXNpb24gMTcxNjkzKQor
KysgU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVk
U3RyaW5ncy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw2IEBACiAAbABvAGMAYQBs
AGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIARQBsAGUAbQBlAG4AdAAgAGMAbABpAHAAcwAgAGMA
bwBtAHAAbwBzAGkAdABpAG4AZwAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAiAF0AIAA9ACAAIgBF
AGwAZQBtAGUAbgB0ACAAYwBsAGkAcABzACAAYwBvAG0AcABvAHMAaQB0AGkAbgBnACAAZABlAHMA
YwBlAG4AZABhAG4AdABzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsA
IgBFAGwAZQBtAGUAbgB0ACAAZQBzAHQAYQBiAGwAaQBzAGgAZQBzACAAYQAgAHMAdABhAGMAawBp
AG4AZwAgAGMAbwBuAHQAZQB4AHQAIgBdACAAPQAgACIARQBsAGUAbQBlAG4AdAAgAGUAcwB0AGEA
YgBsAGkAcwBoAGUAcwAgAGEAIABzAHQAYQBjAGsAaQBuAGcAIABjAG8AbgB0AGUAeAB0ACIAOwAK
IABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBtAGUAbgB0ACAAaABh
AHMAIABDAFMAUwAgAGIAbABlAG4AZABpAG4AZwAgAGEAcABwAGwAaQBlAGQAIABhAG4AZAAgAGMA
bwBtAHAAbwBzAGkAdABlAGQAIABkAGUAcwBjAGUAbgBkAGEAbgB0AHMAIgBdACAAPQAgACIARQBs
AGUAbQBlAG4AdAAgAGgAYQBzACAAQwBTAFMAIABiAGwAZQBuAGQAaQBuAGcAIABhAHAAcABsAGkA
ZQBkACAAYQBuAGQAIABjAG8AbQBwAG8AcwBpAHQAZQBkACAAZABlAHMAYwBlAG4AZABhAG4AdABz
ACIAOwAKLQBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBtAGUAbgB0
ACAAaQBzACAAYQAgAHMAdABhAGMAawBpAG4AZwAgAGMAbwBuAHQAZQB4AHQAIABhAG4AZAAgAGgA
YQBzACAAYwBvAG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAgAHcAaQB0
AGgAIABDAFMAUwAgAGIAbABlAG4AZABpAG4AZwAgAGEAcABwAGwAaQBlAGQAIgBdACAAPQAgACIA
RQBsAGUAbQBlAG4AdAAgAGkAcwAgAGEAIABzAHQAYQBjAGsAaQBuAGcAIABjAG8AbgB0AGUAeAB0
ACAAYQBuAGQAIABoAGEAcwAgAGMAbwBtAHAAbwBzAGkAdABlAGQAIABkAGUAcwBjAGUAbgBkAGEA
bgB0AHMAIAB3AGkAdABoACAAQwBTAFMAIABiAGwAZQBuAGQAaQBuAGcAIABhAHAAcABsAGkAZQBk
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBtAGUAbgB0
ACAAaABhAHMAIABDAFMAUwAgAGYAaQBsAHQAZQByAHMAIABhAHAAcABsAGkAZQBkACIAXQAgAD0A
IAAiAEUAbABlAG0AZQBuAHQAIABoAGEAcwAgAEMAUwBTACAAZgBpAGwAdABlAHIAcwAgAGEAcABw
AGwAaQBlAGQAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEUAbABl
AG0AZQBuAHQAIABoAGEAcwAgAEMAUwBTACAAZgBpAGwAdABlAHIAcwAgAGEAcABwAGwAaQBlAGQA
IABhAG4AZAAgAGMAbwBtAHAAbwBzAGkAdABlAGQAIABkAGUAcwBjAGUAbgBkAGEAbgB0AHMAIgBd
ACAAPQAgACIARQBsAGUAbQBlAG4AdAAgAGgAYQBzACAAQwBTAFMAIABmAGkAbAB0AGUAcgBzACAA
YQBwAHAAbABpAGUAZAAgAGEAbgBkACAAYwBvAG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBu
AGQAYQBuAHQAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIARQBs
AGUAbQBlAG4AdAAgAGgAYQBzACAAYQAgADIARAAgAHQAcgBhAG4AcwBmAG8AcgBtACAAYQBuAGQA
IABjAG8AbQBwAG8AcwBpAHQAZQBkACAAZABlAHMAYwBlAG4AZABhAG4AdABzACIAXQAgAD0AIAAi
AEUAbABlAG0AZQBuAHQAIABoAGEAcwAgAGEAIAAyAEQAIAB0AHIAYQBuAHMAZgBvAHIAbQAgAGEA
bgBkACAAYwBvAG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAiADsACkBA
IC0xNjksNiArMTY4LDcgQEAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBF
AGwAZQBtAGUAbgB0ACAAaQBzACAAPABpAGYAcgBhAG0AZQA+ACIAXQAgAD0AIAAiAEUAbABlAG0A
ZQBuAHQAIABpAHMAIAA8AGkAZgByAGEAbQBlAD4AIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMA
dAByAGkAbgBnAHMAWwAiAEUAbABlAG0AZQBuAHQAIABpAHMAIAA8AHYAaQBkAGUAbwA+ACIAXQAg
AD0AIAAiAEUAbABlAG0AZQBuAHQAIABpAHMAIAA8AHYAaQBkAGUAbwA+ACIAOwAKIABsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBtAGUAbgB0ACAAaQBzACAAYQAgAHAA
bAB1AGcALQBpAG4AIgBdACAAPQAgACIARQBsAGUAbQBlAG4AdAAgAGkAcwAgAGEAIABwAGwAdQBn
AC0AaQBuACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBt
AGUAbgB0ACAAaQBzACAAYQAgAHMAdABhAGMAawBpAG4AZwAgAGMAbwBuAHQAZQB4AHQAIABhAG4A
ZAAgAGgAYQBzACAAYwBvAG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAg
AHcAaQB0AGgAIABDAFMAUwAgAGIAbABlAG4AZABpAG4AZwAgAGEAcABwAGwAaQBlAGQAIgBdACAA
PQAgACIARQBsAGUAbQBlAG4AdAAgAGkAcwAgAGEAIABzAHQAYQBjAGsAaQBuAGcAIABjAG8AbgB0
AGUAeAB0ACAAYQBuAGQAIABoAGEAcwAgAGMAbwBtAHAAbwBzAGkAdABlAGQAIABkAGUAcwBjAGUA
bgBkAGEAbgB0AHMAIAB3AGkAdABoACAAQwBTAFMAIABiAGwAZQBuAGQAaQBuAGcAIABhAHAAcABs
AGkAZQBkACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBt
AGUAbgB0ACAAaQBzACAAYQBuAGkAbQBhAHQAZQBkACIAXQAgAD0AIAAiAEUAbABlAG0AZQBuAHQA
IABpAHMAIABhAG4AaQBtAGEAdABlAGQAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkA
bgBnAHMAWwAiAEUAbABlAG0AZQBuAHQAIABpAHMAIABtAGEAcwBrAGUAZAAgAGEAbgBkACAAYwBv
AG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAiAF0AIAA9ACAAIgBFAGwA
ZQBtAGUAbgB0ACAAaQBzACAAbQBhAHMAawBlAGQAIABhAG4AZAAgAGMAbwBtAHAAbwBzAGkAdABl
AGQAIABkAGUAcwBjAGUAbgBkAGEAbgB0AHMAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdABy
AGkAbgBnAHMAWwAiAEUAbABlAG0AZQBuAHQAIABpAHMAIAB0AGgAZQAgAHIAbwBvAHQAIABlAGwA
ZQBtAGUAbgB0ACIAXQAgAD0AIAAiAEUAbABlAG0AZQBuAHQAIABpAHMAIAB0AGgAZQAgAHIAbwBv
AHQAIABlAGwAZQBtAGUAbgB0ACIAOwAKQEAgLTIxNCwxNCArMjE0LDE1IEBACiAAbABvAGMAYQBs
AGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABUAE0ATAAgAEEAdAB0AHIAaQBiAHUAdABlAHMA
IgBdACAAPQAgACIASABUAE0ATAAgAEEAdAB0AHIAaQBiAHUAdABlAHMAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAVABUAFAAIgBdACAAPQAgACIASABUAFQAUAAi
ADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABlAGkAZwBoAHQAIgBd
ACAAPQAgACIASABlAGkAZwBoAHQAIgA7AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBn
AHMAWwAiAEgAaQBkAGUAIABSAGUAcABsAGEAeQAgAEMAbwBuAHQAcgBvAGwAcwAiAF0AIAA9ACAA
IgBIAGkAZABlACAAUgBlAHAAbABhAHkAIABDAG8AbgB0AHIAbwBsAHMAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAaQBkAGUAIABjAG8AbQBwAG8AcwBpAHQAaQBu
AGcAIABiAG8AcgBkAGUAcgBzACIAXQAgAD0AIAAiAEgAaQBkAGUAIABjAG8AbQBwAG8AcwBpAHQA
aQBuAGcAIABiAG8AcgBkAGUAcgBzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4A
ZwBzAFsAIgBIAGkAZABlACAAYwBvAG4AcwBvAGwAZQAgACgAJQBzACkAIgBdACAAPQAgACIASABp
AGQAZQAgAGMAbwBuAHMAbwBsAGUAIAAoACUAcwApACIAOwAKLQBsAG8AYwBhAGwAaQB6AGUAZABT
AHQAcgBpAG4AZwBzAFsAIgBIAGkAZABlACAAUgBlAHAAbABhAHkAIABDAG8AbgB0AHIAbwBsAHMA
IgBdACAAPQAgACIASABpAGQAZQAgAFIAZQBwAGwAYQB5ACAAQwBvAG4AdAByAG8AbABzACIAOwAK
IABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBIAGkAZABlACAAcwBoAGEAZABv
AHcAIABEAE8ATQAgAG4AbwBkAGUAcwAiAF0AIAA9ACAAIgBIAGkAZABlACAAcwBoAGEAZABvAHcA
IABEAE8ATQAgAG4AbwBkAGUAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcA
cwBbACIASABpAGQAZQAgAHQAaABlACAAJQBzACAAZABlAHQAYQBpAGwAcwAgAHMAaQBkAGUAYgBh
AHIAIgBdACAAPQAgACIASABpAGQAZQAgAHQAaABlACAAJQBzACAAZABlAHQAYQBpAGwAcwAgAHMA
aQBkAGUAYgBhAHIAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgA
aQBkAGUAIAB0AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBsAHMAIABzAGkAZABlAGIAYQByACAAKAAl
AHMAKQAiAF0AIAA9ACAAIgBIAGkAZABlACAAdABoAGUAIAAlAHMAIABkAGUAdABhAGkAbABzACAA
cwBpAGQAZQBiAGEAcgAgACgAJQBzACkAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkA
bgBnAHMAWwAiAEgAaQBkAGUAIAB0AGgAZQAgACUAcwAgAG4AYQB2AGkAZwBhAHQAaQBvAG4AIABz
AGkAZABlAGIAYQByACIAXQAgAD0AIAAiAEgAaQBkAGUAIAB0AGgAZQAgACUAcwAgAG4AYQB2AGkA
ZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQA
cgBpAG4AZwBzAFsAIgBIAGkAZABlACAAdABoAGUAIAAlAHMAIABuAGEAdgBpAGcAYQB0AGkAbwBu
ACAAcwBpAGQAZQBiAGEAcgAgACgAJQBzACkAIgBdACAAPQAgACIASABpAGQAZQAgAHQAaABlACAA
JQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBkAGUAYgBhAHIAIAAoACUAcwApACIAOwAK
KwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBIAGkAZABlACAAdAB5AHAAZQAg
AGkAbgBmAG8AcgBtAGEAdABpAG8AbgAiAF0AIAA9ACAAIgBIAGkAZABlACAAdAB5AHAAZQAgAGkA
bgBmAG8AcgBtAGEAdABpAG8AbgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcA
cwBbACIASABvAHMAdAAiAF0AIAA9ACAAIgBIAG8AcwB0ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUA
ZABTAHQAcgBpAG4AZwBzAFsAIgBJAGMAbwBuACAATwBuAGwAeQAiAF0AIAA9ACAAIgBJAGMAbwBu
ACAATwBuAGwAeQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASQBj
AG8AbgAgAGEAbgBkACAAVABlAHgAdAAgACgASABvAHIAaQB6AG8AbgB0AGEAbAApACIAXQAgAD0A
IAAiAEkAYwBvAG4AIABhAG4AZAAgAFQAZQB4AHQAIAAoAEgAbwByAGkAegBvAG4AdABhAGwAKQAi
ADsACkBAIC0zNDIsOCArMzQzLDggQEAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBz
AFsAIgBSAGUAZgBlAHIAZQBuAGMAZQAgAEkAcwBzAHUAZQAiAF0AIAA9ACAAIgBSAGUAZgBlAHIA
ZQBuAGMAZQAgAEkAcwBzAHUAZQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcA
cwBbACIAUgBlAGYAbABlAGMAdABpAG8AbgAiAF0AIAA9ACAAIgBSAGUAZgBsAGUAYwB0AGkAbwBu
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUAZgByAGUAcwBo
ACIAXQAgAD0AIAAiAFIAZQBmAHIAZQBzAGgAIgA7AAotAGwAbwBjAGEAbABpAHoAZQBkAFMAdABy
AGkAbgBnAHMAWwAiAFIAZQBnAGkAbwBuACAAYQBuAG4AbwB1AG4AYwBlAGQAIABpAG4AIABpAHQA
cwAgAGUAbgB0AGkAcgBlAHQAeQAuACIAXQAgAD0AIAAiAFIAZQBnAGkAbwBuACAAYQBuAG4AbwB1
AG4AYwBlAGQAIABpAG4AIABpAHQAcwAgAGUAbgB0AGkAcgBlAHQAeQAuACIAOwAKIABsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUAZwBpAG8AbgAgAEYAbABvAHcAIgBdACAA
PQAgACIAUgBlAGcAaQBvAG4AIABGAGwAbwB3ACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUAZABTAHQA
cgBpAG4AZwBzAFsAIgBSAGUAZwBpAG8AbgAgAGEAbgBuAG8AdQBuAGMAZQBkACAAaQBuACAAaQB0
AHMAIABlAG4AdABpAHIAZQB0AHkALgAiAF0AIAA9ACAAIgBSAGUAZwBpAG8AbgAgAGEAbgBuAG8A
dQBuAGMAZQBkACAAaQBuACAAaQB0AHMAIABlAG4AdABpAHIAZQB0AHkALgAiADsACiAAbABvAGMA
YQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAGwAbwBhAGQAIABwAGEAZwBlACAAKAAl
AHMAKQBcAG4AUgBlAGwAbwBhAGQAIABpAGcAbgBvAHIAaQBuAGcAIABjAGEAYwBoAGUAIAAoACUA
cwApACIAXQAgAD0AIAAiAFIAZQBsAG8AYQBkACAAcABhAGcAZQAgACgAJQBzACkAXABuAFIAZQBs
AG8AYQBkACAAaQBnAG4AbwByAGkAbgBnACAAYwBhAGMAaABlACAAKAAlAHMAKQAiADsACiAAbABv
AGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAG0AbwB2AGUAIAB0AGgAaQBzACAA
YgByAGUAYQBrAHAAbwBpAG4AdAAgAGEAYwB0AGkAbwBuACIAXQAgAD0AIAAiAFIAZQBtAG8AdgBl
ACAAdABoAGkAcwAgAGIAcgBlAGEAawBwAG8AaQBuAHQAIABhAGMAdABpAG8AbgAiADsACiAAbABv
AGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHAAZQBhAHQAaQBuAGcAIABMAGkA
bgBlAGEAcgAgAEcAcgBhAGQAaQBlAG4AdAAiAF0AIAA9ACAAIgBSAGUAcABlAGEAdABpAG4AZwAg
AEwAaQBuAGUAYQByACAARwByAGEAZABpAGUAbgB0ACIAOwAKQEAgLTM4NCwxMSArMzg1LDExIEBA
CiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAGEAcgBlAGQAIABGAG8A
YwB1AHMAIgBdACAAPQAgACIAUwBoAGEAcgBlAGQAIABGAG8AYwB1AHMAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIABBAGwAbAAiAF0AIAA9ACAAIgBT
AGgAbwB3ACAAQQBsAGwAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAi
AFMAaABvAHcAIABBAGwAbAAgAE4AbwBkAGUAcwAgACgAJQBkACAATQBvAHIAZQApACIAXQAgAD0A
IAAiAFMAaABvAHcAIABBAGwAbAAgAE4AbwBkAGUAcwAgACgAJQBkACAATQBvAHIAZQApACIAOwAK
KwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAUgBlAHAAbABh
AHkAIABDAG8AbgB0AHIAbwBsAHMAIgBdACAAPQAgACIAUwBoAG8AdwAgAFIAZQBwAGwAYQB5ACAA
QwBvAG4AdAByAG8AbABzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsA
IgBTAGgAbwB3ACAAYwBvAG0AcABvAHMAaQB0AGkAbgBnACAAYgBvAHIAZABlAHIAcwAiAF0AIAA9
ACAAIgBTAGgAbwB3ACAAYwBvAG0AcABvAHMAaQB0AGkAbgBnACAAYgBvAHIAZABlAHIAcwAiADsA
CiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAgAGMAbwBuAHMA
bwBsAGUAIAAoACUAcwApACIAXQAgAD0AIAAiAFMAaABvAHcAIABjAG8AbgBzAG8AbABlACAAKAAl
AHMAKQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAg
AGYAdQBsAGwALQBoAGUAaQBnAGgAdAAgAGMAbwBuAHMAbwBsAGUAIgBdACAAPQAgACIAUwBoAG8A
dwAgAGYAdQBsAGwALQBoAGUAaQBnAGgAdAAgAGMAbwBuAHMAbwBsAGUAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIABmAHUAbgBjAHQAaQBvAG4AIABk
AGUAZgBpAG4AaQB0AGkAbwBuACIAXQAgAD0AIAAiAFMAaABvAHcAIABmAHUAbgBjAHQAaQBvAG4A
IABkAGUAZgBpAG4AaQB0AGkAbwBuACIAOwAKLQBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4A
ZwBzAFsAIgBTAGgAbwB3ACAAUgBlAHAAbABhAHkAIABDAG8AbgB0AHIAbwBsAHMAIgBdACAAPQAg
ACIAUwBoAG8AdwAgAFIAZQBwAGwAYQB5ACAAQwBvAG4AdAByAG8AbABzACIAOwAKIABsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAcwBoAGEAZABvAHcAIABEAE8A
TQAgAG4AbwBkAGUAcwAiAF0AIAA9ACAAIgBTAGgAbwB3ACAAcwBoAGEAZABvAHcAIABEAE8ATQAg
AG4AbwBkAGUAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBo
AG8AdwAgAHMAcABsAGkAdAAgAGMAbwBuAHMAbwBsAGUAIgBdACAAPQAgACIAUwBoAG8AdwAgAHMA
cABsAGkAdAAgAGMAbwBuAHMAbwBsAGUAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkA
bgBnAHMAWwAiAFMAaABvAHcAIAB0AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBsAHMAIABzAGkAZABl
AGIAYQByACIAXQAgAD0AIAAiAFMAaABvAHcAIAB0AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBsAHMA
IABzAGkAZABlAGIAYQByACIAOwAKQEAgLTM5Nyw2ICszOTgsNyBAQAogAGwAbwBjAGEAbABpAHoA
ZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIAB0AGgAZQAgACUAcwAgAG4AYQB2AGkAZwBh
AHQAaQBvAG4AIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiAF0AIAA9ACAAIgBTAGgAbwB3ACAA
dABoAGUAIAAlAHMAIABuAGEAdgBpAGcAYQB0AGkAbwBuACAAcwBpAGQAZQBiAGEAcgAgACgAJQBz
ACkAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIAB0
AGkAbQBlAHMAIABhAHMAIABhAGIAcwBvAGwAdQB0AGUAIAB0AGkAbQBlAHMAIgBdACAAPQAgACIA
UwBoAG8AdwAgAHQAaQBtAGUAcwAgAGEAcwAgAGEAYgBzAG8AbAB1AHQAZQAgAHQAaQBtAGUAcwAi
ADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAgAHQAaQBt
AGUAcwAgAGEAcwAgAHAAZQByAGMAZQBuAHQAYQBnAGUAcwAiAF0AIAA9ACAAIgBTAGgAbwB3ACAA
dABpAG0AZQBzACAAYQBzACAAcABlAHIAYwBlAG4AdABhAGcAZQBzACIAOwAKKwBsAG8AYwBhAGwA
aQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAdAB5AHAAZQAgAGkAbgBmAG8AcgBt
AGEAdABpAG8AbgAiAF0AIAA9ACAAIgBTAGgAbwB3ACAAdAB5AHAAZQAgAGkAbgBmAG8AcgBtAGEA
dABpAG8AbgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBpAHoA
ZQAiAF0AIAA9ACAAIgBTAGkAegBlACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4A
ZwBzAFsAIgBTAG0AYQBsAGwAIABJAGMAbwBuAHMAIgBdACAAPQAgACIAUwBtAGEAbABsACAASQBj
AG8AbgBzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAG8AYwBr
AGUAdAAiAF0AIAA9ACAAIgBTAG8AYwBrAGUAdAAiADsACkBAIC00MDQsOCArNDA2LDggQEAKIABs
AG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAG8AdQByAGMAZQAgAEMAbwBkAGUA
IgBdACAAPQAgACIAUwBvAHUAcgBjAGUAIABDAG8AZABlACIAOwAKIABsAG8AYwBhAGwAaQB6AGUA
ZABTAHQAcgBpAG4AZwBzAFsAIgBTAHAAZQBsAGwAaQBuAGcAIgBdACAAPQAgACIAUwBwAGUAbABs
AGkAbgBnACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAHQAYQBy
AHQAIABKAGEAdgBhAFMAYwByAGkAcAB0ACAAcAByAG8AZgBpAGwAaQBuAGcALgAiAF0AIAA9ACAA
IgBTAHQAYQByAHQAIABKAGEAdgBhAFMAYwByAGkAcAB0ACAAcAByAG8AZgBpAGwAaQBuAGcALgAi
ADsACi0AbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwB0AGEAcgB0ACAAUgBl
AGMAbwByAGQAaQBuAGcAIgBdACAAPQAgACIAUwB0AGEAcgB0ACAAUgBlAGMAbwByAGQAaQBuAGcA
IgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAdABhAHIAdAAgAFAA
bABhAHkAYgBhAGMAawAiAF0AIAA9ACAAIgBTAHQAYQByAHQAIABQAGwAYQB5AGIAYQBjAGsAIgA7
AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAdABhAHIAdAAgAFIAZQBj
AG8AcgBkAGkAbgBnACIAXQAgAD0AIAAiAFMAdABhAHIAdAAgAFIAZQBjAG8AcgBkAGkAbgBnACIA
OwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAHQAYQByAHQAIABUAGkA
bQBlACIAXQAgAD0AIAAiAFMAdABhAHIAdAAgAFQAaQBtAGUAIgA7AAogAGwAbwBjAGEAbABpAHoA
ZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAdABhAHQAdQBzACIAXQAgAD0AIAAiAFMAdABhAHQAdQBz
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAHQAZQBwACAAaQBu
AHQAbwAgACgAJQBzACAAbwByACAAJQBzACkAIgBdACAAPQAgACIAUwB0AGUAcAAgAGkAbgB0AG8A
IAAoACUAcwAgAG8AcgAgACUAcwApACIAOwAKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJKHJldmlzaW9uIDE3MTY5MykKKysrIFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MTM1LDYgKzEzNSw3IEBACiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9U
aW1lbGluZVZpZXcuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdz
L1Rvb2xiYXIuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1Ry
ZWVFbGVtZW50U3RhdHVzQnV0dG9uLmNzcyI+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSJWaWV3cy9UeXBlVG9rZW5WaWV3LmNzcyI+CiAKICAgICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9IkNvbnRyb2xsZXJzL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5jc3Mi
PgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iQ29udHJvbGxlcnMvQ29kZU1pcnJv
ckRyYWdUb0FkanVzdE51bWJlckNvbnRyb2xsZXIuY3NzIj4KQEAgLTE2MCw2ICsxNjEsOCBAQAog
ICAgIDxzY3JpcHQgc3JjPSJFeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9IkV4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzIj48L3NjcmlwdD4KIAor
CisKICAgICA8c2NyaXB0IHNyYz0iQmFzZS9XZWJJbnNwZWN0b3IuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJCYXNlL09iamVjdC5qcyI+PC9zY3JpcHQ+CiAKQEAgLTI1Niw2ICsyNjEs
NyBAQAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU2V0dGluZy5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCBzcmM9Ik1vZGVscy9Tb3VyY2VDb2RlTG9jYXRpb24uanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJNb2RlbHMvU291cmNlQ29kZVBvc2l0aW9uLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NvdXJjZUNvZGVBU1QuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgc3JjPSJNb2RlbHMvU291cmNlQ29kZVJldmlzaW9uLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iTW9kZWxzL1NvdXJjZUNvZGVUZXh0UmFuZ2UuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJNb2RlbHMvU291cmNlQ29kZVRpbWVsaW5lLmpzIj48L3NjcmlwdD4KQEAg
LTQ1Miw2ICs0NTgsOCBAQAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Ub29sYmFyLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHJlZUVsZW1lbnRTdGF0dXNCdXR0b24uanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UcmVlT3V0bGluZURhdGFHcmlkU3lu
Y2hyb25pemVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHlwZVByb3Bl
cnRpZXNTZWN0aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHlwZVRv
a2VuVmlldy5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvQ29k
ZU1pcnJvckVkaXRpbmdDb250cm9sbGVyLmpzIj48L3NjcmlwdD4KIApAQCAtNDgzLDYgKzQ5MSw3
IEBACiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1NvdXJjZU1hcE1hbmFnZXIuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9TdG9yYWdlTWFuYWdlci5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1RpbWVsaW5lTWFuYWdlci5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90
YXRvci5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQmFzZS9NYWluLmpzIj48L3Nj
cmlwdD4KIApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9N
YWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0Jhc2UvTWFpbi5qcwkocmV2aXNpb24gMTcxNjkzKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNiArMTYw
LDggQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKIAogICAgIHRoaXMuc2hvd1No
YWRvd0RPTVNldHRpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoInNob3ctc2hhZG93LWRv
bSIsIGZhbHNlKTsKICAgICB0aGlzLnNob3dSZXBsYXlJbnRlcmZhY2VTZXR0aW5nID0gbmV3IFdl
Ykluc3BlY3Rvci5TZXR0aW5nKCJzaG93LXdlYi1yZXBsYXkiLCBmYWxzZSk7CisgICAgCisgICAg
dGhpcy5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcgPSBuZXcgV2ViSW5zcGVj
dG9yLlNldHRpbmcoInNob3ctamF2YXNjcmlwdC10eXBlLWluZm9ybWF0aW9uLXNldHRpbmciLCBm
YWxzZSk7CiAKICAgICB0aGlzLm1vdXNlQ29vcmRzID0gewogICAgICAgICB4OiAwLApJbmRleDog
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJv
clRva2VuVHJhY2tpbmdDb250cm9sbGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5n
Q29udHJvbGxlci5qcwkocmV2aXNpb24gMTcxNjkzKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9s
bGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw4IEBAIFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yVG9rZW5UcmFja2luZ0NvbnQKICAgICBOb25lOiAibm9uZSIsCiAgICAgTm9uU3ltYm9s
VG9rZW5zOiAibm9uLXN5bWJvbC10b2tlbnMiLAogICAgIEphdmFTY3JpcHRFeHByZXNzaW9uOiAi
amF2YXNjcmlwdC1leHByZXNzaW9uIiwKLSAgICBNYXJrZWRUb2tlbnM6ICJtYXJrZWQtdG9rZW5z
IgorICAgIE1hcmtlZFRva2VuczogIm1hcmtlZC10b2tlbnMiLAorICAgIEphdmFTY3JpcHRUeXBl
SW5mb3JtYXRpb246ICJKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uIgogfQogCiBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKQEAgLTM4
OSw2ICszOTAsNyBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250CiAg
ICAgICAgICAgICB0aGlzLl9jYW5kaWRhdGUgPSB0aGlzLl9wcm9jZXNzTm9uU3ltYm9sVG9rZW4o
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWly
cm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0RXhwcmVzc2lvbjoKKyAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVy
Lk1vZGUuSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjoKICAgICAgICAgICAgIHRoaXMuX2NhbmRp
ZGF0ZSA9IHRoaXMuX3Byb2Nlc3NKYXZhU2NyaXB0RXhwcmVzc2lvbigpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5n
Q29udHJvbGxlci5Nb2RlLk1hcmtlZFRva2VuczoKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9G
b3JtYXR0ZXJTb3VyY2VNYXAuanMJKHJldmlzaW9uIDE3MTY5MykKKysrIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5qcwko
d29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTMgQEAgV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNv
dXJjZU1hcC5wcm90b3R5cAogICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0aW9u
KHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRQb3NpdGlvbik7CiAgICAgfSwK
IAorICAgIG9yaWdpbmFsUG9zaXRpb25Ub0Zvcm1hdHRlZDogZnVuY3Rpb24ob3JpZ2luYWxQb3Np
dGlvbikKKyAgICB7CisgICAgICAgIHZhciBmb3JtYXR0ZWRQb3NpdGlvbiA9IHRoaXMuX2NvbnZl
cnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLm9yaWdpbmFsLCB0aGlzLl9tYXBwaW5nLmZvcm1hdHRl
ZCwgb3JpZ2luYWxQb3NpdGlvbik7CisgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblRvTG9j
YXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGZvcm1hdHRlZFBvc2l0aW9uKTsKKyAg
ICB9LAorCisKICAgICBmb3JtYXR0ZWRUb09yaWdpbmFsOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIpCiAgICAgewogICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlz
Ll9sb2NhdGlvblRvUG9zaXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGxpbmVOdW1i
ZXIgfHwgMCwgY29sdW1uTnVtYmVyIHx8IDApOwpAQCAtNTYsNiArNjMsMTMgQEAgV2ViSW5zcGVj
dG9yLkZvcm1hdHRlclNvdXJjZU1hcC5wcm90b3R5cAogICAgICAgICByZXR1cm4gdGhpcy5fcG9z
aXRpb25Ub0xvY2F0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MsIG9yaWdpbmFsUG9zaXRp
b24pOwogICAgIH0sCiAKKyAgICBmb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0OiBmdW5jdGlvbihs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgeworICAgICAgICB2YXIgZm9ybWF0dGVkUG9z
aXRpb24gPSB0aGlzLl9sb2NhdGlvblRvUG9zaXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGlu
Z3MsIGxpbmVOdW1iZXIgfHwgMCwgY29sdW1uTnVtYmVyIHx8IDApOworICAgICAgICB2YXIgb3Jp
Z2luYWxQb3NpdGlvbiA9IHRoaXMuX2NvbnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLmZvcm1h
dHRlZCwgdGhpcy5fbWFwcGluZy5vcmlnaW5hbCwgZm9ybWF0dGVkUG9zaXRpb24pOworICAgICAg
ICByZXR1cm4gb3JpZ2luYWxQb3NpdGlvbjsKKyAgICB9LAorCiAgICAgLy8gUHJpdmF0ZQogCiAg
ICAgX2xvY2F0aW9uVG9Qb3NpdGlvbjogZnVuY3Rpb24obGluZUVuZGluZ3MsIGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlcikKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0
b3IuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9y
ID0gZnVuY3Rpb24odGV4dEVkaXRvciwgc2NyaXB0KSAKK3sKKyAgICBXZWJJbnNwZWN0b3IuT2Jq
ZWN0LmNhbGwodGhpcyk7CisKKyAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7CisgICAgdGhpcy5f
c291cmNlQ29kZVRleHRFZGl0b3IgPSB0ZXh0RWRpdG9yOworICAgIHRoaXMuX3R5cGVUb2tlbk5v
ZGVzID0gW107CisgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtzID0gW107CisgICAgdGhpcy5f
dGltZW91dElEID0gbnVsbDsKKyAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOworCisgICAgY29u
c29sZS5hc3NlcnQodGhpcy5fc2NyaXB0KTsKK307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5B
bm5vdGF0b3IucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuVHlw
ZVRva2VuQW5ub3RhdG9yLAorCisgICAgLy8gcHVibGljCisgICAgZ2V0IGlzQWN0aXZlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZTsKKyAgICB9LAorCisgICAgcGF1c2U6
IGZ1bmN0aW9uKCkgCisgICAgeworICAgICAgICBpZiAodGhpcy5fdGltZW91dElEICE9PSBudWxs
KQorICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJRCk7CisgICAgICAgIHRo
aXMuX2lzQWN0aXZlID0gZmFsc2U7CisgICAgfSwKKworICAgIHJlc3VtZTogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOworICAgICAgICB0aGlzLmluc2VydEFubm90
YXRpb25zKCk7CisgICAgfSwKKworICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIGlmICh0aGlzLl90aW1lb3V0SUQgIT09
IG51bGwpCisgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElEKTsKKyAgICAg
ICAgdGhpcy5fY2xlYXJUeXBlVG9rZW5zKCk7CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlv
bnMoKTsKKyAgICB9LAorCisgICAgdG9nZ2xlVHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSkgeworICAgICAgICAgICAgdGhpcy5faXNB
Y3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2NsZWFyVHlwZVRva2VucygpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOworICAgICAg
ICAgICAgdGhpcy5yZXNldCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMuaXNB
Y3RpdmU7CisgICAgfSwKKworICAgIGluc2VydEFubm90YXRpb25zOiBmdW5jdGlvbigpIAorICAg
IHsKKyAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIHNvdXJjZU1hcCA9IHRoaXMuX3Nv
dXJjZUNvZGVUZXh0RWRpdG9yLl9mb3JtYXR0ZXJTb3VyY2VNYXA7CisgICAgICAgIHZhciBjb2Rl
TWlycm9yID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3IuX2NvZGVNaXJyb3I7CisgICAgICAg
IHZhciBzb3VyY2VDb2RlQVNUID0gdGhpcy5fc2NyaXB0Ll9zb3VyY2VDb2RlQVNUOworICAgICAg
ICB2YXIgc291cmNlSUQgPSB0aGlzLl9zY3JpcHQuaWQ7CisKKyAgICAgICAgaWYgKCFzb3VyY2VD
b2RlQVNUKSB7CisgICAgICAgICAgICB0aGlzLl9zY3JpcHQuX3NvdXJjZUNvZGVBU1REaWRMb2Fk
Q2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBzZWxmLmluc2VydEFubm90
YXRpb25zKCk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAodGhpcy5fc2NyaXB0
LmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKSkKKyAgICAgICAgICAgICAgICB0aGlzLl9z
Y3JpcHQucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZChmdW5jdGlvbigpIHt9KTsKKworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW5zZXJ0VG9rZW4o
b2Zmc2V0LCBub2RlLCBpc1JldHVybikKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGxvY2F0
aW9uOyAKKyAgICAgICAgICAgIHZhciBzdGFydDsgCisKKyAgICAgICAgICAgIGlmIChzb3VyY2VN
YXApIHsKKyAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHNvdXJjZU1hcC5vcmlnaW5hbFBvc2l0
aW9uVG9Gb3JtYXR0ZWQob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzdGFydCA9IHsgbGluZTog
bG9jYXRpb24ubGluZU51bWJlciwgY2g6IGxvY2F0aW9uLmNvbHVtbk51bWJlciB9OworICAgICAg
ICAgICAgICAgIG9mZnNldCA9IGNvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9zKHN0YXJ0
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gY29kZU1pcnJv
ci5nZXREb2MoKS5wb3NGcm9tSW5kZXgob2Zmc2V0KTsKKworICAgICAgICAgICAgdmFyIHNvdXJj
ZVN0cmluZyA9IGNvZGVNaXJyb3IuZ2V0VmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChpc1JldHVy
bikgeworICAgICAgICAgICAgICAgIC8vIFRyYW5zbGF0ZSBwb3NpdGlvbiB0byB0aGUgb3Blbmlu
ZyBwYXJlbiBvZiB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi5f
Z2V0TmV3T2Zmc2V0Rm9yUmV0dXJuU3RhdGVtZW50KG5vZGUsIG9mZnNldCwgc291cmNlU3RyaW5n
KTsKKyAgICAgICAgICAgICAgICBzdGFydCA9IGNvZGVNaXJyb3IuZ2V0RG9jKCkucG9zRnJvbUlu
ZGV4KG9mZnNldCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vdGU6IENvZGVN
aXJyb3IgYm9va21hcmtzIHJlbmRlciB0byB0aGUgbGVmdCBvZiB0aGUgY2hhcmFjdGVyIHRoZXkn
cmUgYmVpbmcgZGlzcGxheWVkIG5leHQgdG8sIGFuZCB0aGF0IGlzIHdoeSByaWdodCBtYXJnaW4g
Y2hlY2tzIHRoZSBjdXJyZW50IG9mZnNldC4KKyAgICAgICAgICAgIHZhciBpc1NwYWNlUmVnZXhw
ID0gL1tcdFx2XGYgXHUwMGEwXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUy
MDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBhXHUyMDBiXHUyMDI4XHUyMDI5XHUzMDAwXS87Cisg
ICAgICAgICAgICB2YXIgc2hvdWxkSGF2ZUxlZnRNYXJnaW4gPSBvZmZzZXQgIT09IDAgJiYgIWlz
U3BhY2VSZWdleHAudGVzdChzb3VyY2VTdHJpbmdbb2Zmc2V0IC0gMV0pOworICAgICAgICAgICAg
dmFyIHNob3VsZEhhdmVSaWdodE1hcmdpbiA9ICFpc1NwYWNlUmVnZXhwLnRlc3Qoc291cmNlU3Ry
aW5nW29mZnNldF0pOworICAgICAgICAgICAgdmFyIHR5cGVUb2tlbiA9IG5ldyBXZWJJbnNwZWN0
b3IuVHlwZVRva2VuVmlldyhzZWxmLCBzaG91bGRIYXZlUmlnaHRNYXJnaW4sIHNob3VsZEhhdmVM
ZWZ0TWFyZ2luLCBub2RlLl9hdHRhY2htZW50cy5fdHlwZVBvcG92ZXJUaXRsZSk7CisgICAgICAg
ICAgICB2YXIgYm9va21hcmsgPSBjb2RlTWlycm9yLnNldFVuaXF1ZUJvb2ttYXJrKHN0YXJ0LCB7
IHdpZGdldDogdHlwZVRva2VuLmVsZW1lbnQgfSk7CisgICAgICAgICAgICBub2RlLl9hdHRhY2ht
ZW50cy5fdHlwZVRva2VuID0gdHlwZVRva2VuOworICAgICAgICAgICAgc2VsZi5fdHlwZVRva2Vu
Tm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgIHNlbGYuX3R5cGVUb2tlbkJvb2ttYXJrcy5w
dXNoKGJvb2ttYXJrKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGZvckVhY2gobm9k
ZSkgCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBUeXBlcyA9IFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlQVNULkFTVFR5cGU7CisKKyAgICAgICAgICAgIHN3aXRjaChub2RlLnR5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIGNh
c2UgVHlwZXMuRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgICAgIG5vZGUucGFyYW1z
LmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJh
bS5fYXR0YWNobWVudHMuX3R5cGVzICYmIHBhcmFtLl9hdHRhY2htZW50cy5fdHlwZXMuZGlzcGxh
eVR5cGVOYW1lICYmICFwYXJhbS5fYXR0YWNobWVudHMuX3R5cGVUb2tlbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW0uX2F0dGFjaG1lbnRzLl90eXBlUG9wb3ZlclRpdGxlID0gIlR5
cGUgaW5mb3JtYXRpb24gZm9yIHZhcmlhYmxlOiAiICsgcGFyYW0ubmFtZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydFRva2VuKHBhcmFtLnJhbmdlWzBdLCBwYXJhbSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAvLyBJ
ZiBhIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXhwbGljaXQgcmV0dXJuIHR5cGUsIHRoZW4g
ZG9uJ3Qgc2hvdyBhIHJldHVybiB0eXBlIHVubGVzcyB3ZSB0aGluayBpdCdzIGEgY29uc3RydWN0
b3IuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUuX2F0dGFjaG1lbnRzLl9yZXR1cm5UeXBlcyAm
JiBub2RlLl9hdHRhY2htZW50cy5fcmV0dXJuVHlwZXMuZGlzcGxheVR5cGVOYW1lICYmICFub2Rl
Ll9hdHRhY2htZW50cy5fdHlwZVRva2VuICYmIChzb3VyY2VDb2RlQVNULmNvbnRhaW5zUmV0dXJu
U3RhdGVtZW50KG5vZGUuYm9keSkgfHwgbm9kZS5fYXR0YWNobWVudHMuX3JldHVyblR5cGVzLmRp
c3BsYXlUeXBlTmFtZSAhPT0gIlVuZGVmaW5lZCIpKSB7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUuX2F0dGFjaG1lbnRzLl90eXBlUG9wb3ZlclRpdGxlID0gIlJldHVybiB0eXBlIGluZm9ybWF0
aW9uIGZvciBmdW5jdGlvbiIgKyAobm9kZS5pZCA/ICgiOiAiICsgbm9kZS5pZC5uYW1lKSA6ICIi
KTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0VG9rZW4obm9kZS5pc0dldHRlck9yU2V0dGVy
ID8gbm9kZS5nZXR0ZXJPclNldHRlclJhbmdlWzBdIDogbm9kZS5yYW5nZVswXSwgbm9kZSwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUuX2F0dGFjaG1lbnRzLl90eXBlcyAmJiBub2RlLl9hdHRhY2htZW50cy5fdHlwZXMuZGlzcGxh
eVR5cGVOYW1lICYmICFub2RlLl9hdHRhY2htZW50cy5fdHlwZVRva2VuKSB7CisgICAgICAgICAg
ICAgICAgICAgIG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlUG9wb3ZlclRpdGxlID0gIlR5cGUgaW5m
b3JtYXRpb24gZm9yIHZhcmlhYmxlOiAiICsgbm9kZS5pZC5uYW1lOworICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRUb2tlbihub2RlLmlkLnJhbmdlWzBdLCBub2RlKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBzb3VyY2VDb2RlQVNULnVwZGF0ZVR5cGVzKHNvdXJjZUlELCBmdW5jdGlvbiBhZnRl
clR5cGVVcGRhdGVzKCkgeworICAgICAgICAgICAgc291cmNlQ29kZUFTVC5mb3JFYWNoTm9kZShm
b3JFYWNoKTsKKyAgICAgICAgICAgIHNlbGYuX3VwZGF0ZVR5cGVUb2tlbnMoKTsKKyAgICAgICAg
fSk7CisgICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIF91cGRhdGVUeXBlVG9rZW5zOiBm
dW5jdGlvbigpIAorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHZhciBzb3VyY2VDb2RlQVNUID0gdGhpcy5fc2NyaXB0Ll9z
b3VyY2VDb2RlQVNUOworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgZnVuY3Rp
b24gZm9yRWFjaChub2RlKSAKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIFR5cGVzID0gV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZTsKKworICAgICAgICAgICAgc3dpdGNoKG5v
ZGUudHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlcy5GdW5jdGlvbkRlY2xhcmF0aW9uOgor
ICAgICAgICAgICAgY2FzZSBUeXBlcy5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICAg
ICAgbm9kZS5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihwYXJhbSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyYW0uX2F0dGFjaG1lbnRzLl90eXBlVG9rZW4pCisgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbS5fYXR0YWNobWVudHMuX3R5cGVUb2tlbi51cGRhdGUocGFyYW0uX2F0dGFj
aG1lbnRzLl90eXBlcyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlVG9rZW4pCisgICAgICAgICAgICAgICAgICAgIG5vZGUu
X2F0dGFjaG1lbnRzLl90eXBlVG9rZW4udXBkYXRlKG5vZGUuX2F0dGFjaG1lbnRzLl9yZXR1cm5U
eXBlcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVzLlZh
cmlhYmxlRGVjbGFyYXRvcjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5fYXR0YWNobWVudHMu
X3R5cGVUb2tlbikKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3R5cGVU
b2tlbi51cGRhdGUobm9kZS5fYXR0YWNobWVudHMuX3R5cGVzKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNvdXJjZUNvZGVBU1Qu
Zm9yRWFjaE5vZGUoZm9yRWFjaCk7CisKKyAgICAgICAgdGhpcy5fdGltZW91dElEID0gc2V0VGlt
ZW91dChmdW5jdGlvbiB0aW1lb3V0VXBkYXRlKCkgeworICAgICAgICAgICAgc2VsZi5fdGltZW91
dElEID0gbnVsbDsKKyAgICAgICAgICAgIHNlbGYuaW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICAg
ICAgfSwgNjAwMCk7CisgICAgfSwKKworICAgIF9jbGVhclR5cGVUb2tlbnM6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9k
ZSkgeworICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3R5cGVUb2tlbiA9IG51bGw7Cisg
ICAgICAgIH0pOworICAgICAgICB0aGlzLl90eXBlVG9rZW5Cb29rbWFya3MuZm9yRWFjaChmdW5j
dGlvbihib29rbWFyaykgeworICAgICAgICAgICAgYm9va21hcmsuY2xlYXIoKTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuTm9kZXMgPSBbXTsKKyAgICAgICAgdGhpcy5f
dHlwZVRva2VuQm9va21hcmtzID0gW107CisgICAgfSwKKworICAgIF9nZXROZXdPZmZzZXRGb3JS
ZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uKG5vZGUsIG9mZnNldCwgc291cmNlU3RyaW5nKQorICAg
IHsKKyAgICAgICAgLy8gVGhlIGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IHdlIGdldCB0aGUgb2Zm
c2V0IHN0YXJ0aW5nIGF0IHRoZSBmdW5jdGlvbiBrZXl3b3JkIChvciBhZnRlciB0aGUgZ2V0L3Nl
dCBrZXl3b3JkcykuCisgICAgICAgIC8vIFdlIHdpbGwgcmV0dXJuIHRoZSBvZmZzZXQgZm9yIHRo
ZSBjbG9zaW5nIHBhcmVudGhlc2lzIGluIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KKyAgICAg
ICAgLy8gQWxsIHRoaXMgY29kZSBpcyBqdXN0IGEgd2F5IHRvIGZpbmQgdGhpcyBwYXJlbnRoZXNp
cyB3aGlsZSBpZ25vcmluZyBjb21tZW50cy4KKworICAgICAgICB2YXIgaXNNdWx0aUxpbmVDb21t
ZW50ID0gZmFsc2U7CisgICAgICAgIHZhciBpc1NpbmdsZUxpbmVDb21tZW50ID0gZmFsc2U7Cisg
ICAgICAgIHZhciBzaG91bGRJZ25vcmUgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKChzb3VyY2VT
dHJpbmdbb2Zmc2V0XSAhPT0gIikiIHx8IHNob3VsZElnbm9yZSkgJiYgb2Zmc2V0IDwgc291cmNl
U3RyaW5nLmxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGlzU2luZ2xlTGluZUNvbW1lbnQgJiYg
c291cmNlU3RyaW5nW29mZnNldF0gPT09ICIvbiIpIHsKKyAgICAgICAgICAgICAgICBpc1Npbmds
ZUxpbmVDb21tZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgc2hvdWxkSWdub3JlID0gZmFs
c2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTXVsdGlMaW5lQ29tbWVudCAmJiBzb3VyY2VT
dHJpbmdbb2Zmc2V0XSA9PT0gIioiICYmIHNvdXJjZVN0cmluZ1tvZmZzZXQgKyAxXSA9PT0gIi8i
KSB7CisgICAgICAgICAgICAgICAgaXNNdWx0aUxpbmVDb21tZW50ID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgc2hvdWxkSWdub3JlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgb2Zmc2V0Kys7
IAorICAgICAgICAgICAgfSBlbHNlIGlmICghc2hvdWxkSWdub3JlICYmIHNvdXJjZVN0cmluZ1tv
ZmZzZXRdID09PSAiLyIpIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQrKzsKKyAgICAgICAgICAg
ICAgICBpZiAoc291cmNlU3RyaW5nW29mZnNldF0gPT09ICIqIikKKyAgICAgICAgICAgICAgICAg
ICAgaXNNdWx0aUxpbmVDb21tZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChz
b3VyY2VTdHJpbmdbb2Zmc2V0XSA9PT0gIi8iKQorICAgICAgICAgICAgICAgICAgICBpc1Npbmds
ZUxpbmVDb21tZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHBhcnNpbmcuIENvdWxkbid0IHBhcnNlIGNvbW1l
bnQgcHJlYW1ibGUuIik7CisgICAgICAgICAgICAgICAgc2hvdWxkSWdub3JlID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgb2Zmc2V0Kys7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gb2Zmc2V0ICsgMTsKKyAgICB9Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRva2Vu
QW5ub3RhdG9yLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3Rv
dHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9O
YXZpZ2F0aW9uSXRlbVRhdS5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtVGF1LnN2ZwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9u
SXRlbVRhdS5zdmcJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxzdmcgdmlld0JveD0i
MCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyI+CisgICAgPHJlY3QgeD0iMyIgeT0iMyIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiPjwvcmVjdD4K
KyAgICA8cmVjdCB4PSI3IiB5PSI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIxMCI+PC9yZWN0PgorPC9z
dmc+CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2Ny
aXB0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01vZGVscy9TY3JpcHQuanMJKHJldmlzaW9uIDE3MTY5MykKKysrIFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDYgKzQxLDkgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdCA9IGZ1bmN0aW9uKGlkLCByYW5nZQogCiAg
ICAgaWYgKHNvdXJjZU1hcFVSTCkKICAgICAgICAgV2ViSW5zcGVjdG9yLnNvdXJjZU1hcE1hbmFn
ZXIuZG93bmxvYWRTb3VyY2VNYXAoc291cmNlTWFwVVJMLCB0aGlzLl91cmwsIHRoaXMpOworCisg
ICAgdGhpcy5fc291cmNlQ29kZUFTVCA9IG51bGw7CisgICAgdGhpcy5fc291cmNlQ29kZUFTVERp
ZExvYWRDYWxsYmFjayA9IG51bGw7CiB9OwogCiBXZWJJbnNwZWN0b3IuU2NyaXB0LlR5cGVJZGVu
dGlmaWVyID0gInNjcmlwdCI7CkBAIC0xMTcsNyArMTIwLDE1IEBAIFdlYkluc3BlY3Rvci5TY3Jp
cHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAK
LSAgICAgICAgRGVidWdnZXJBZ2VudC5nZXRTY3JpcHRTb3VyY2UodGhpcy5faWQsIGNhbGxiYWNr
KTsKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2tXcmFwcGVyKGVycm9yLCBzb3VyY2VUZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWVycm9yKQorICAgICAgICAgICAgICAgIHRoaXMu
X21ha2VBU1Qoc291cmNlVGV4dCk7CisKKyAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KGNhbGxi
YWNrLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTsKKyAgICAgICAgfQor
CisgICAgICAgIERlYnVnZ2VyQWdlbnQuZ2V0U2NyaXB0U291cmNlKHRoaXMuX2lkLCBjYWxsYmFj
a1dyYXBwZXIuYmluZCh0aGlzKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0sCiAKQEAg
LTE3NCw2ICsxODUsMTcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIH0KIAogICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgX21ha2VBU1Q6IGZ1
bmN0aW9uKHNvdXJjZVRleHQpIHsKKyAgICAgICAgaWYgKCFzb3VyY2VUZXh0KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3NvdXJjZUNvZGVBU1QgPSBuZXcgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVBU1Qoc291cmNlVGV4dCwgdGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9z
b3VyY2VDb2RlQVNURGlkTG9hZENhbGxiYWNrICYmIHR5cGVvZiB0aGlzLl9zb3VyY2VDb2RlQVNU
RGlkTG9hZENhbGxiYWNrID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICB0aGlzLl9zb3Vy
Y2VDb2RlQVNURGlkTG9hZENhbGxiYWNrKCk7CisgICAgICAgICAgICB0aGlzLl9zb3VyY2VDb2Rl
QVNURGlkTG9hZENhbGxiYWNrID0gbnVsbDsKKyAgICAgICAgfQogICAgIH0KIH07CiAKSW5kZXg6
IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlQVNU
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9Tb3VyY2VDb2RlQVNULmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGVBU1QuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFT
VCA9IGZ1bmN0aW9uKHNvdXJjZVRleHQsIHNjcmlwdCkgCit7CisgICAgV2ViSW5zcGVjdG9yLk9i
amVjdC5jYWxsKHRoaXMpOworICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlwdDsKKworICAgIHRyeSB7
CisgICAgICAgIHZhciBlc3ByaW1hQVNUID0gV2ViSW5zcGVjdG9yLl9lc3ByaW1hLnBhcnNlKHNv
dXJjZVRleHQsIHsgcmFuZ2UgOiB0cnVlIH0pOworICAgICAgICB0aGlzLl9hc3QgPSB0aGlzLl9j
cmVhdGVJbnRlcm5hbEFTVChlc3ByaW1hQVNUKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAg
dmFyIHZlcmJvc2UgPSBmYWxzZTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBj
b25zb2xlLmxvZygiQ291bGRuJ3QgcGFyc2UgSmF2YVNjcmlwdCBGaWxlOiBcbiIgKyBlLm1lc3Nh
Z2UpCisgICAgICAgIHRoaXMuX2FzdCA9IG51bGw7CisgICAgfQorCisgICAgdGhpcy5fb3JpZ2lu
YWxTb3VyY2VUZXh0ID0gc291cmNlVGV4dDsKK307CisKKy8vIE5vdGUgdGhhdCB0aGlzIGNvcnJl
c3BvbmRzIGlkZW50aWNhbGx5IHRvIGFuIGVudW0gaW4gSmF2YVNjaXB0Q29yZS9ydW50aW1lL0hp
Z2hGaWRlbGl0eVR5cGVQcm9maWxlci5oCitXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5UeXBl
UHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yID0geworICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2Ny
aXB0b3JOb3JtYWw6IDEsCisgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvclRoaXNTdGF0
ZW1lbnQ6IDIsCisgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJu
OiAzCit9OworCitXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlID0geworICAgIEFz
c2lnbm1lbnRFeHByZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAorICAgIEFycmF5RXhw
cmVzc2lvbjogJ0FycmF5RXhwcmVzc2lvbicsCisgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0
YXRlbWVudCcsCisgICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24nLAorICAg
IEJyZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQnLAorICAgIENhdGNoQ2xhdXNlOiAnQ2F0
Y2hDbGF1c2UnLAorICAgIENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLAor
ICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICdEb1doaWxlU3RhdGVtZW50JywKKyAgICBEZWJ1Z2dlclN0
YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JywKKyAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5
U3RhdGVtZW50JywKKyAgICBFeHByZXNzaW9uU3RhdGVtZW50OiAnRXhwcmVzc2lvblN0YXRlbWVu
dCcsCisgICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVtZW50JywKKyAgICBGb3JJblN0YXRlbWVu
dDogJ0ZvckluU3RhdGVtZW50JywKKyAgICBGdW5jdGlvbkNhbGw6ICdGdW5jdGlvbkNhbGwnLAor
ICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJywKKyAgICBGdW5j
dGlvbkV4cHJlc3Npb246ICdGdW5jdGlvbkV4cHJlc3Npb24nLAorICAgIElkZW50aWZpZXI6ICdJ
ZGVudGlmaWVyJywKKyAgICBJZlN0YXRlbWVudDogJ0lmU3RhdGVtZW50JywKKyAgICBMaXRlcmFs
OiAnTGl0ZXJhbCcsCisgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLAor
ICAgIExvZ2ljYWxFeHByZXNzaW9uOiAnTG9naWNhbEV4cHJlc3Npb24nLAorICAgIE1lbWJlckV4
cHJlc3Npb246ICdNZW1iZXJFeHByZXNzaW9uJywKKyAgICBOZXdFeHByZXNzaW9uOiAnTmV3RXhw
cmVzc2lvbicsCisgICAgT2JqZWN0RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLAorICAg
IFBvc3RmaXhFeHByZXNzaW9uOidQb3N0Zml4RXhwcmVzc2lvbicsCisgICAgUHJvZ3JhbTogJ1By
b2dyYW0nLAorICAgIFByb3BlcnR5OiAnUHJvcGVydHknLAorICAgIFByZWZpeEV4cHJlc3Npb246
J1ByZWZpeEV4cHJlc3Npb24nLAorICAgIFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRlbWVu
dCcsCisgICAgU2VxdWVuY2VFeHByZXNzaW9uOiAnU2VxdWVuY2VFeHByZXNzaW9uJywKKyAgICBT
d2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1lbnQnLAorICAgIFN3aXRjaENhc2U6ICdTd2l0
Y2hDYXNlJywKKyAgICBUZXJuYXJ5RXhwcmVzc2lvbjogJ1Rlcm5hcnlFeHByZXNzaW9uJywKKyAg
ICBUaGlzRXhwcmVzc2lvbjogJ1RoaXNFeHByZXNzaW9uJywKKyAgICBUaHJvd1N0YXRlbWVudDog
J1Rocm93U3RhdGVtZW50JywKKyAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLAorICAg
IFVuYXJ5RXhwcmVzc2lvbjogJ1VuYXJ5RXhwcmVzc2lvbicsCisgICAgVmFyaWFibGVEZWNsYXJh
dGlvbjogJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLAorICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogJ1Zh
cmlhYmxlRGVjbGFyYXRvcicsCisgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcs
CisgICAgV2l0aFN0YXRlbWVudDogJ1dpdGhTdGF0ZW1lbnQnCit9OworCitXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZUFTVC5wcm90b3R5cGUgPSB7CisKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVBU1QsCisKKyAgICAvLyBQdWJsaWMKKworICAgIGZvckVhY2hOb2RlOiBm
dW5jdGlvbihmdW5jKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVjdXJzZSh0aGlzLl9hc3QsIGZ1
bmMsIHRoaXMuX2RlZmF1bHRQYXJzZXJTdGF0ZSgpKTsKKyAgICB9LAorCisgICAgZmlsdGVyOiBm
dW5jdGlvbihmdW5jLCBzdGFydE5vZGUpIAorICAgIHsKKyAgICAgICAgc3RhcnROb2RlID0gc3Rh
cnROb2RlIHx8IHRoaXMuX2FzdDsKKyAgICAgICAgdmFyIG5vZGVzID0gW107CisgICAgICAgIGZ1
bmN0aW9uIGZpbHRlcihub2RlLCBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGZ1
bmMobm9kZSkpCisgICAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0ZS5za2lwQ2hpbGROb2RlcyA9IHRydWU7IAorICAg
ICAgICB9CisgICAgICAgIHRoaXMuX3JlY3Vyc2Uoc3RhcnROb2RlLCBmaWx0ZXIsIHRoaXMuX2Rl
ZmF1bHRQYXJzZXJTdGF0ZSgpKTsKKworICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgfSwKKwor
ICAgIGNvbnRhaW5zUmV0dXJuU3RhdGVtZW50OiBmdW5jdGlvbihzdGFydE5vZGUpCisgICAgewor
ICAgICAgICBpZiAoc3RhcnROb2RlLl9hdHRhY2htZW50cy5faGFzUmV0dXJuU3RhdGVtZW50ICE9
PSB1bmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm4gc3RhcnROb2RlLl9hdHRhY2htZW50cy5f
aGFzUmV0dXJuU3RhdGVtZW50OworCisgICAgICAgIGZ1bmN0aW9uIGZpbHRlcihub2RlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbm9kZS50eXBlICE9PSBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZUFTVC5BU1RUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbiAmJiBub2RlLnR5cGUgIT09IFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBub2RlcyA9IHRoaXMuZmlsdGVyKGZpbHRlciwgc3RhcnRO
b2RlKTsKKyAgICAgICAgdmFyIGhhc1JldHVyblN0YXRlbWVudCA9IGZhbHNlOworICAgICAgICB2
YXIgcmV0dXJuVHlwZSA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuUmV0dXJu
U3RhdGVtZW50OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldOworICAgICAgICAgICAgaWYgKG5v
ZGUudHlwZSA9PT0gcmV0dXJuVHlwZSAmJiBub2RlLmFyZ3VtZW50KSB7CisgICAgICAgICAgICAg
ICAgaGFzUmV0dXJuU3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgCisgICAgICAgIHN0YXJ0Tm9kZS5fYXR0
YWNobWVudHMuX2hhc1JldHVyblN0YXRlbWVudCA9IGhhc1JldHVyblN0YXRlbWVudDsKKworICAg
ICAgICByZXR1cm4gaGFzUmV0dXJuU3RhdGVtZW50OworICAgIH0sCisKKyAgICB1cGRhdGVUeXBl
czogZnVuY3Rpb24oc291cmNlSUQsIGNhbGxiYWNrKSAKKyAgICB7CisgICAgICAgIHZhciBzdGFy
dFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgICAgICB2YXIgdmVyYm9zZSA9IGZh
bHNlOworICAgICAgICB2YXIgYWxsUmVxdWVzdHMgPSBbXTsKKyAgICAgICAgdmFyIGFsbFJlcXVl
c3ROb2RlcyA9IFtdOworCisgICAgICAgIGZ1bmN0aW9uIGZvckVhY2gobm9kZSkgeworICAgICAg
ICAgICAgdmFyIFR5cGVzID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZTsKKyAg
ICAgICAgICAgIHN3aXRjaChub2RlLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZXMuRnVu
Y3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25FeHByZXNz
aW9uOgorICAgICAgICAgICAgICAgIG5vZGUucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFt
KSB7CisgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzLnB1c2goeworICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVBU1QuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5UeXBlUHJvZmlsZXJTZWFyY2hE
ZXNjcmlwdG9yTm9ybWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IHNvdXJj
ZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgZGl2b3Q6IHBhcmFtLnJhbmdlWzBdCisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMu
cHVzaChwYXJhbSk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBhbGxS
ZXF1ZXN0cy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3Jp
cHRvcjogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3Jp
cHRvci5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4sCisgICAgICAg
ICAgICAgICAgICAgIHNvdXJjZUlEOiBzb3VyY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgZGl2
b3Q6IG5vZGUuYm9keS5yYW5nZVswXQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIGFsbFJlcXVlc3ROb2Rlcy5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUuaW5pdCkgeworICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0cy5wdXNo
KHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IuVHlw
ZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNvdXJjZUlEOiBzb3VyY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpdm90OiBub2Rl
LmlkLnJhbmdlWzBdCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAg
ICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIg
c3RhcnRSZWN1cnNlVHJlZVRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgICAgICB2
YXIgc2NyaXB0VVJMID0gdGhpcy5fc2NyaXB0LnVybDsKKyAgICAgICAgdGhpcy5mb3JFYWNoTm9k
ZShmb3JFYWNoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBjb25zb2xlLmxv
ZygiXG4jIyBSZWN1cnNlVHJlZSB0aW1lOiAiICsgIigiICsgc2NyaXB0VVJMICsgIik6IiArICgo
bmV3IERhdGUoKS5nZXRUaW1lKCkpIC0gc3RhcnRSZWN1cnNlVHJlZVRpbWUpICsgIm1zIik7CisK
KyAgICAgICAgZnVuY3Rpb24gaGFuZGxlVHlwZXMoZXJyb3IsIGFsbFR5cGVzKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICBjb25zb2xlLmFzc2VydChhbGxUeXBlcy5sZW5ndGggPT09IGFsbFJlcXVlc3RzLmxl
bmd0aCk7CisKKyAgICAgICAgICAgIHZhciBlbmRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUo
KTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGNvbnNvbGUubG9n
KCJcbiMjIEdhdGhlclR5cGVzIHRpbWUgIiArICIoIiArIHNjcmlwdFVSTCArICIpOiIgKyAoZW5k
VGltZSAtIHN0YXJ0VGltZSkgKyAibXMiKTsKKyAgICAgICAgICAgIHZhciBpOworICAgICAgICAg
ICAgdmFyIG5vZGU7CisgICAgICAgICAgICB2YXIgdHlwZXM7CisgICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgYWxsVHlwZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBub2RlID0g
YWxsUmVxdWVzdE5vZGVzW2ldOworICAgICAgICAgICAgICAgIHR5cGVzID0gYWxsVHlwZXNbaV07
CisgICAgICAgICAgICAgICAgaWYgKGFsbFJlcXVlc3RzW2ldLnR5cGVJbmZvcm1hdGlvbkRlc2Ny
aXB0b3IgPT09IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULlR5cGVQcm9maWxlclNlYXJjaERl
c2NyaXB0b3IuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuKQorICAg
ICAgICAgICAgICAgICAgICBub2RlLl9hdHRhY2htZW50cy5fcmV0dXJuVHlwZXMgPSB0eXBlczsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGUuX2F0dGFjaG1l
bnRzLl90eXBlcyA9IHR5cGVzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiXG4jIyBUb3RhbFRpbWUgdGltZTog
IiArICIoIiArIHNjcmlwdFVSTCArICIpOiIgKyAoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHN0
YXJ0VGltZSkgKyAibXMiKTsKKworICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQor
CisgICAgICAgIFJ1bnRpbWVBZ2VudC5nZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNl
dHMoYWxsUmVxdWVzdHMsIGhhbmRsZVR5cGVzKTsKKyAgICB9LAorICAgIAorICAgIC8vIFByaXZh
dGUKKworICAgIF9kZWZhdWx0UGFyc2VyU3RhdGU6IGZ1bmN0aW9uKCkgCisgICAgeworICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgc2hvdWxkU3RvcEVhcmx5OiBmYWxzZSwKKyAgICAgICAg
ICAgIHNraXBDaGlsZE5vZGVzOiBmYWxzZQorICAgICAgICB9OworICAgIH0sCisKKyAgICBfcmVj
dXJzZTogZnVuY3Rpb24obm9kZSwgZnVuYywgc3RhdGUpIAorICAgIHsKKyAgICAgICAgaWYgKCFu
b2RlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChzdGF0ZS5zaG91bGRTdG9w
RWFybHkgfHwgc3RhdGUuc2tpcENoaWxkTm9kZXMpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdmFyIFR5cGVzID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZTsKKwor
ICAgICAgICBzd2l0Y2gobm9kZS50eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZXMuQXNzaWdubWVu
dEV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5sZWZ0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlKG5vZGUucmlnaHQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFR5cGVzLkFycmF5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9k
ZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZWxlbWVudHMs
IGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkJs
b2NrU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5CaW5hcnlFeHByZXNzaW9uOgorICAgICAgICAg
ICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubGVm
dCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnJpZ2h0LCBm
dW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5CcmVh
a1N0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuQ2F0Y2hDbGF1c2U6CisgICAgICAgICAgICBmdW5j
KG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wYXJhbSwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0
YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkNvbnRpbnVlU3Rh
dGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlKG5vZGUubGFiZWwsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFR5cGVzLkRvV2hpbGVTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5v
ZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBz
dGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucHJlZGljYXRlLCBmdW5jLCBz
dGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5EZWJ1Z2dlclN0
YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVHlwZXMuRW1wdHlTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5j
KG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkV4
cHJlc3Npb25TdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5leHByZXNzaW9uLCBmdW5jLCBzdGF0ZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Gb3JTdGF0ZW1lbnQ6CisgICAgICAg
ICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5p
bml0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucHJlZGlj
YXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUudXBkYXRl
LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuRm9ySW5T
dGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRo
aXMuX3JlY3Vyc2Uobm9kZS5sZWZ0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9y
ZWN1cnNlKG5vZGUucmlnaHQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUeXBlcy5GdW5jdGlvbkNhbGw6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsK
KyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5jYWxsZWUsIGZ1bmMsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmFyZ3VtZW50cywgZnVuYywgc3RhdGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25EZWNsYXJh
dGlvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZShub2RlLmlkLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
QXJyYXkobm9kZS5wYXJhbXMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUeXBlcy5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0
YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5pZCwgZnVuYywgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUucGFyYW1zLCBmdW5jLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuSWRlbnRpZmllcjoKKyAgICAgICAg
ICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
VHlwZXMuSWZTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5jb25zZXF1ZW50LCBmdW5jLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYWx0ZXJuYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5MaXRlcmFsOgorICAgICAgICAgICAg
ZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBl
cy5MYWJlbGVkU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubGFiZWwsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Mb2dpY2FsRXhwcmVzc2lvbjoKKyAgICAgICAgICAg
IGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxlZnQs
IGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5yaWdodCwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuTWVtYmVy
RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLm9iamVjdCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZShub2RlLnByb3BlcnR5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlcy5OZXdFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhu
b2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuY2FsbGVlLCBmdW5j
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5hcmd1bWVudHMs
IGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLk9i
amVjdEV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLnByb3BlcnRpZXMsIGZ1bmMsIHN0YXRlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlByZWZpeEV4cHJlc3Npb246Cisg
ICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5hcmd1bWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVHlwZXMuUHJvZ3JhbToKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAg
ICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuUHJvcGVydHk6CisgICAgICAgICAg
ICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5rZXks
IGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS52YWx1ZSwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuUG9zdGZp
eEV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuUmV0dXJuU3RhdGVtZW50OgorICAgICAgICAgICAg
ZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1l
bnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVz
LlNlcXVlbmNlRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAg
ICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZXhwcmVzc2lvbnMsIGZ1bmMsIHN0YXRl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlN3aXRjaFN0YXRlbWVu
dDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLmRpc2NyaW1pbmFudCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZUFycmF5KG5vZGUuY2FzZXMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGVzLlN3aXRjaENhc2U6CisgICAgICAgICAgICBmdW5jKG5vZGUs
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMs
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmNvbnNlcXVlbnQs
IGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlRl
cm5hcnlFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucHJlZGljYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuY29uc2VxdWVudCwgZnVuYywgc3RhdGUpOworICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFsdGVybmF0ZSwgZnVuYywgc3RhdGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVGhpc0V4cHJlc3Npb246CisgICAgICAg
ICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFR5cGVzLlRocm93U3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1lbnQsIGZ1bmMsIHN0YXRlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlRyeVN0YXRlbWVudDoKKyAgICAg
ICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmJsb2NrLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9k
ZS5ndWFyZGVkSGFuZGxlcnMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2VBcnJheShub2RlLmhhbmRsZXJzLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9y
ZWN1cnNlKG5vZGUuZmluYWxpemVyLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUeXBlcy5VbmFyeUV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5v
ZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVmFyaWFi
bGVEZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZGVjbGFyYXRpb25zLCBmdW5jLCBzdGF0ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0b3I6
CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5pZCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmluaXQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGVzLldoaWxlU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucHJlZGljYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuV2l0aFN0YXRlbWVudDoKKyAgICAgICAgICAg
IGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLm9iamVj
dCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1
bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3Rh
dGUuc2tpcENoaWxkTm9kZXMgPSBmYWxzZTsKKyAgICB9LAorCisgICAgX3JlY3Vyc2VBcnJheSA6
IGZ1bmN0aW9uKGFycmF5LCBmdW5jLCBzdGF0ZSkgCisgICAgeworICAgICAgICBmdW5jdGlvbiBm
b3JFYWNoKG5vZGUpIHsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZSwgZnVuYywgc3Rh
dGUpOworICAgICAgICB9CisKKyAgICAgICAgYXJyYXkuZm9yRWFjaChmb3JFYWNoLmJpbmQodGhp
cykpOworICAgIH0sCisgICAgCisgICAgLy8gVGhpcyBmdW5jdGlvbiB0cmFuc2xhdGVzIGZyb20g
ZXNwcmltYSdzIEFTVCB0byBvdXJzLiBNb3N0bHksIHRoaXMgaXMganVzdCB0aGUgaWRlbnRpdHkg
ZnVuY3Rpb24sIGJ1dCB0aGVyZSBhcmUgYSBmZXcgbm9kZXMgYW5kIGEgZmV3IHByb3BlcnRpZXMg
dGhhdCBhcmUgcmVuYW1lZC4KKyAgICAvLyBTcGVjaWZpY2FsbHksICd0ZXN0JyBwcm9wZXJ0eSBp
cyByZW5hbWVkIHRvICdwcmVkaWNhdGUnLCBwcmVmaXgvcG9zdGZpeCBub2RlcyBhcmUgbm93IHRv
IHNlcGFyYXRlIG5vZGVzLCBDYWxsRXhwcmVzc2lvbiBpcyByZW5hbWVkIHRvIEZ1bmN0aW9uQ2Fs
bCwgYW5kIAorICAgIC8vIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBpcyByZW5hbWVkIHRvIFRlcm5h
cnlFeHByZXNzaW9uLgorICAgIF9jcmVhdGVJbnRlcm5hbEFTVCA6IGZ1bmN0aW9uKG5vZGUpIAor
ICAgIHsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAg
ICAgICAgdmFyIHJldDsKKyAgICAgICAgc3dpdGNoKG5vZGUudHlwZSkgeworICAgICAgICBjYXNl
ICdBc3NpZ25tZW50RXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Bc3NpZ25tZW50
RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5vcGVyYXRvciwKKyAg
ICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmxlZnQpLAor
ICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnJpZ2h0
KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdBcnJh
eUV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuQXJyYXlFeHByZXNzaW9uLAorICAg
ICAgICAgICAgICAgIGVsZW1lbnRzOiBub2RlLmVsZW1lbnRzLm1hcCh0aGlzLl9jcmVhdGVJbnRl
cm5hbEFTVC5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICdCbG9ja1N0YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAg
ICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5CbG9j
a1N0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBib2R5OiBub2RlLmJvZHkubWFwKHRoaXMuX2Ny
ZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgJ0JpbmFyeUV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0
ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFT
VFR5cGUuQmluYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5v
cGVyYXRvciwKKyAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChu
b2RlLmxlZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFT
VChub2RlLnJpZ2h0KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICdCcmVha1N0YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5CcmVha1N0YXRl
bWVudCwKKyAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9k
ZS5sYWJlbCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAnQ2FsbEV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAg
IHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRnVuY3Rpb25DYWxsLAor
ICAgICAgICAgICAgICAgIGNhbGxlZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5jYWxs
ZWUpLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50czogbm9kZS5hcmd1bWVudHMubWFwKHRoaXMu
X2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0NhdGNoQ2xhdXNlJzoKKyAgICAgICAgICAgIHJldCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RU
eXBlLkNhdGNoQ2xhdXNlLAorICAgICAgICAgICAgICAgIHBhcmFtOiB0aGlzLl9jcmVhdGVJbnRl
cm5hbEFTVChub2RlLnBhcmFtKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbEFTVChub2RlLmJvZHkpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXQg
PSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNU
VHlwZS5UZXJuYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBwcmVkaWNhdGU6IHRoaXMu
X2NyZWF0ZUludGVybmFsQVNUKG5vZGUudGVzdCksCisgICAgICAgICAgICAgICAgY29uc2VxdWVu
dDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5jb25zZXF1ZW50KSwKKyAgICAgICAgICAg
ICAgICBhbHRlcm5hdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYWx0ZXJuYXRlKQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdDb250aW51
ZVN0YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTog
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Db250aW51ZVN0YXRlbWVudCwKKyAg
ICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5sYWJlbCkK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnRG9XaGls
ZVN0YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTog
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Eb1doaWxlU3RhdGVtZW50LAorICAg
ICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYm9keSksCisg
ICAgICAgICAgICAgICAgcHJlZGljYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnRl
c3QpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0Rl
YnVnZ2VyU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkRlYnVnZ2VyU3RhdGVtZW50
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0VtcHR5
U3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkVtcHR5U3RhdGVtZW50CisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0V4cHJlc3Npb25TdGF0
ZW1lbnQnOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRXhwcmVzc2lvblN0YXRlbWVudCwKKyAgICAg
ICAgICAgICAgICBleHByZXNzaW9uOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmV4cHJl
c3Npb24pCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
J0ZvclN0YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Gb3JTdGF0ZW1lbnQsCisgICAg
ICAgICAgICAgICAgaW5pdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5pbml0KSwKKyAg
ICAgICAgICAgICAgICBwcmVkaWNhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUudGVz
dCksCisgICAgICAgICAgICAgICAgdXBkYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2Rl
LnVwZGF0ZSksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qo
bm9kZS5ib2R5KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlICdGb3JJblN0YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAg
ICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Gb3JJblN0YXRlbWVu
dCwKKyAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmxl
ZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2Rl
LnJpZ2h0KSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChu
b2RlLmJvZHkpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ0Z1bmN0aW9uRGVjbGFyYXRpb24nOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAg
ICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRnVuY3Rpb25E
ZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qo
bm9kZS5pZCksCisgICAgICAgICAgICAgICAgcGFyYW1zOiBub2RlLnBhcmFtcy5tYXAodGhpcy5f
Y3JlYXRlSW50ZXJuYWxBU1QuYmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgYm9keTogdGhp
cy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5ib2R5KSwKKyAgICAgICAgICAgICAgICBpc0dldHRl
ck9yU2V0dGVyOiBmYWxzZSAvLyBUaGlzIGlzIG9idmlvdXMsIGJ1dCBpcyBjb252ZW5pZW50IG5v
bmUgdGhlIGxlc3MgYi9jIERlY2xhcmF0aW9ucyBhbmQgRXhwcmVzc2lvbnMgYXJlIG9mdGVuIGlu
dGVydHdpbmVkLgorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlICdGdW5jdGlvbkV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAg
ICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRnVuY3Rpb25F
eHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGlkOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChu
b2RlLmlkKSwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0aGlzLl9j
cmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmJvZHkpLAorICAgICAgICAgICAgICAgIGlzR2V0dGVy
T3JTZXR0ZXI6IGZhbHNlIC8vIElmIHRydWUsIGl0IGlzIHNldCBpbiB0aGUgUHJvcGVydHkgQVNU
IG5vZGUuCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
J0lkZW50aWZpZXInOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuSWRlbnRpZmllciwKKyAgICAgICAg
ICAgICAgICBuYW1lOiBub2RlLm5hbWUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAnSWZTdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmV0ID0geworICAg
ICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuSWZT
dGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgcHJlZGljYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5h
bEFTVChub2RlLnRlc3QpLAorICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IHRoaXMuX2NyZWF0
ZUludGVybmFsQVNUKG5vZGUuY29uc2VxdWVudCksCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRl
OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmFsdGVybmF0ZSkKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnTGl0ZXJhbCc6CisgICAgICAgICAg
ICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVB
U1QuQVNUVHlwZS5MaXRlcmFsLAorICAgICAgICAgICAgICAgIHZhbHVlOiBub2RlLnZhbHVlLAor
ICAgICAgICAgICAgICAgIHJhdzogbm9kZS5yYXcKKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAnTGFiZWxlZFN0YXRlbWVudCc6CisgICAgICAgICAgICBy
ZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1Qu
QVNUVHlwZS5MYWJlbGVkU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl9j
cmVhdGVJbnRlcm5hbEFTVChub2RlLmxhYmVsKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmJvZHkpCisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0xvZ2ljYWxFeHByZXNzaW9uJzoKKyAgICAgICAgICAg
IHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFT
VC5BU1RUeXBlLkxvZ2ljYWxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMu
X2NyZWF0ZUludGVybmFsQVNUKG5vZGUubGVmdCksCisgICAgICAgICAgICAgICAgcmlnaHQ6IHRo
aXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUucmlnaHQpCisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ01lbWJlckV4cHJlc3Npb24nOgorICAgICAgICAg
ICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
QVNULkFTVFR5cGUuTWVtYmVyRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvYmplY3Q6IHRo
aXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUub2JqZWN0KSwKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0eTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5wcm9wZXJ0eSkKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnTmV3RXhwcmVzc2lvbic6Cisg
ICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVBU1QuQVNUVHlwZS5OZXdFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGNhbGxl
ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5jYWxsZWUpLAorICAgICAgICAgICAgICAg
IGFyZ3VtZW50czogbm9kZS5hcmd1bWVudHMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsQVNULmJp
bmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ09iamVjdEV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuT2JqZWN0RXhwcmVz
c2lvbiwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBub2RlLnByb3BlcnRpZXMubWFwKHRo
aXMuX2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1Byb2dyYW0nOgorICAgICAgICAgICAgcmV0ID0g
eworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5
cGUuUHJvZ3JhbSwKKyAgICAgICAgICAgICAgICBib2R5OiBub2RlLmJvZHkubWFwKHRoaXMuX2Ny
ZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgJ1Byb3BlcnR5JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlBy
b3BlcnR5LAorICAgICAgICAgICAgICAgIGtleTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9k
ZS5rZXkpLAorICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChu
b2RlLnZhbHVlKSwKKyAgICAgICAgICAgICAgICBraW5kOiBub2RlLmtpbmQKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBpZiAocmV0LmtpbmQgPT09ICJnZXQiIHx8IHJldC5raW5kID09PSAi
c2V0IikgeworICAgICAgICAgICAgICAgIHJldC52YWx1ZS5pc0dldHRlck9yU2V0dGVyID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByZXQudmFsdWUuZ2V0dGVyT3JTZXR0ZXJSYW5nZSA9IHJldC5r
ZXkucmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAnUmV0dXJuU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlJldHVyblN0YXRlbWVu
dCwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9k
ZS5hcmd1bWVudCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAnU2VxdWVuY2VFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlNlcXVlbmNl
RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uczogbm9kZS5leHByZXNzaW9u
cy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxBU1QuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnU3dpdGNoU3RhdGVtZW50JzoKKyAg
ICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZUFTVC5BU1RUeXBlLlN3aXRjaFN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBkaXNj
cmltaW5hbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuZGlzY3JpbWluYW50KSwKKyAg
ICAgICAgICAgICAgICBjYXNlczogbm9kZS5jYXNlcy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxB
U1QuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAnU3dpdGNoQ2FzZSc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAg
ICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Td2l0Y2hDYXNlLAor
ICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS50
ZXN0KSwKKyAgICAgICAgICAgICAgICBjb25zZXF1ZW50OiBub2RlLmNvbnNlcXVlbnQubWFwKHRo
aXMuX2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1RoaXNFeHByZXNzaW9uJzoKKyAgICAgICAgICAg
IHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFT
VC5BU1RUeXBlLlRoaXNFeHByZXNzaW9uCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ1Rocm93U3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBl
LlRocm93U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbEFTVChub2RlLmFyZ3VtZW50KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICdUcnlTdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmV0ID0gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUu
VHJ5U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGJsb2NrOiB0aGlzLl9jcmVhdGVJbnRlcm5h
bEFTVChub2RlLmJsb2NrKSwKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBhcmUgZ3Vh
cmRlZCBoYW5kbGVycz8KKyAgICAgICAgICAgICAgICBndWFyZGVkSGFuZGxlcnM6IG5vZGUuZ3Vh
cmRlZEhhbmRsZXJzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKSwKKyAg
ICAgICAgICAgICAgICBoYW5kbGVyczogbm9kZS5oYW5kbGVycy5tYXAodGhpcy5fY3JlYXRlSW50
ZXJuYWxBU1QuYmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgZmluYWxpemVyOiB0aGlzLl9j
cmVhdGVJbnRlcm5hbEFTVChub2RlLmZpbmFsaXplcikKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzoKKyAgICAgICAgICAg
IHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFT
VC5BU1RUeXBlLlVuYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9k
ZS5vcGVyYXRvciwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJu
YWxBU1Qobm9kZS5hcmd1bWVudCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAnVXBkYXRlRXhwcmVzc2lvbic6CisgICAgICAgICAgICAvLyBQcmVmaXgv
cG9zdGZpeCBleHByZXNzaW9ucyBpbiBlc3ByaW1hLgorICAgICAgICAgICAgcmV0ID0geworICAg
ICAgICAgICAgICAgIHR5cGU6IChub2RlLnByZWZpeCA/IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
QVNULkFTVFR5cGUuUHJlZml4RXhwcmVzc2lvbiA6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNU
LkFTVFR5cGUuUG9zdGZpeEV4cHJlc3Npb24pLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBu
b2RlLm9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRl
cm5hbEFTVChub2RlLmFyZ3VtZW50KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICdWYXJpYWJsZURlY2xhcmF0aW9uJzoKKyAgICAgICAgICAgIHJldCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RU
eXBlLlZhcmlhYmxlRGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBu
b2RlLmRlY2xhcmF0aW9ucy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxBU1QuYmluZCh0aGlzKSkK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVmFyaWFi
bGVEZWNsYXJhdG9yJzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlZhcmlhYmxlRGVjbGFyYXRvciwK
KyAgICAgICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5pZCksCisg
ICAgICAgICAgICAgICAgaW5pdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5pbml0KQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdXaGlsZVN0
YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5XaGlsZVN0YXRlbWVudCwKKyAgICAgICAg
ICAgICAgICBwcmVkaWNhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUudGVzdCksCisg
ICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5ib2R5KQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdXaXRoU3Rh
dGVtZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLldpdGhTdGF0ZW1lbnQsCisgICAgICAgICAg
ICAgICAgb2JqZWN0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLm9iamVjdCksCisgICAg
ICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5ib2R5KQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICByZXQucmFuZ2UgPSBub2RlLnJhbmdlOworICAgICAgICByZXQuX2F0dGFjaG1lbnRzID0g
e307IC8vIFRoaXMgaXMgYW4gb2JqZWN0IGZvciB3aGljaCB5b3UgY2FuIGFkZCBmaWVsZHMgdG8g
YW4gQVNUIG5vZGUgd2l0aG91dCB3b3JyeWluZyBhYm91dCBwb2xsdXRpbmcgdGhlIHN5bnRheC1y
ZWxhdGVkIGZpZWxkcyBvZiB0aGUgbm9kZS4KKworICAgICAgICByZXR1cm4gcmV0OworICAgIH0K
K307CisKK1dlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKKworLyogVGhpcyBpcyBhIG5pY2Ugc3RhcnRp
bmcgb2ZmIHBvaW50IGlmIHlvdSB3YW50IHRvIHdyaXRlIGEgcmVjdXJzaXZlIGZ1bmN0aW9uOgor
ICoKKyAqICAgdmFyIFR5cGVzID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZTsK
KyAqICAgc3dpdGNoICguLi4pIHsKKyAqICAgY2FzZSBUeXBlcy5Bc3NpZ25tZW50RXhwcmVzc2lv
bjoKKyAqICAgY2FzZSBUeXBlcy5BcnJheUV4cHJlc3Npb246CisgKiAgIGNhc2UgVHlwZXMuQmxv
Y2tTdGF0ZW1lbnQ6CisgKiAgIGNhc2UgVHlwZXMuQmluYXJ5RXhwcmVzc2lvbjoKKyAqICAgY2Fz
ZSBUeXBlcy5CcmVha1N0YXRlbWVudDoKKyAqICAgY2FzZSBUeXBlcy5DYXRjaENsYXVzZToKKyAq
ICAgY2FzZSBUeXBlcy5Db250aW51ZVN0YXRlbWVudDoKKyAqICAgY2FzZSBUeXBlcy5Eb1doaWxl
U3RhdGVtZW50OgorICogICBjYXNlIFR5cGVzLkRlYnVnZ2VyU3RhdGVtZW50OgorICogICBjYXNl
IFR5cGVzLkVtcHR5U3RhdGVtZW50OgorICogICBjYXNlIFR5cGVzLkV4cHJlc3Npb25TdGF0ZW1l
bnQ6CisgKiAgIGNhc2UgVHlwZXMuRm9yU3RhdGVtZW50OgorICogICBjYXNlIFR5cGVzLkZvcklu
U3RhdGVtZW50OgorICogICBjYXNlIFR5cGVzLkZ1bmN0aW9uQ2FsbDoKKyAqICAgY2FzZSBUeXBl
cy5GdW5jdGlvbkRlY2xhcmF0aW9uOgorICogICBjYXNlIFR5cGVzLkZ1bmN0aW9uRXhwcmVzc2lv
bjoKKyAqICAgY2FzZSBUeXBlcy5JZGVudGlmaWVyOgorICogICBjYXNlIFR5cGVzLklmU3RhdGVt
ZW50OgorICogICBjYXNlIFR5cGVzLkxpdGVyYWw6CisgKiAgIGNhc2UgVHlwZXMuTGFiZWxlZFN0
YXRlbWVudDoKKyAqICAgY2FzZSBUeXBlcy5Mb2dpY2FsRXhwcmVzc2lvbjoKKyAqICAgY2FzZSBU
eXBlcy5NZW1iZXJFeHByZXNzaW9uOgorICogICBjYXNlIFR5cGVzLk5ld0V4cHJlc3Npb246Cisg
KiAgIGNhc2UgVHlwZXMuT2JqZWN0RXhwcmVzc2lvbjoKKyAqICAgY2FzZSBUeXBlcy5QcmVmaXhF
eHByZXNzaW9uOgorICogICBjYXNlIFR5cGVzLlByb2dyYW06CisgKiAgIGNhc2UgVHlwZXMuUHJv
cGVydHk6CisgKiAgIGNhc2UgVHlwZXMuUG9zdGZpeEV4cHJlc3Npb246CisgKiAgIGNhc2UgVHlw
ZXMuUmV0dXJuU3RhdGVtZW50OgorICogICBjYXNlIFR5cGVzLlNlcXVlbmNlRXhwcmVzc2lvbjoK
KyAqICAgY2FzZSBUeXBlcy5Td2l0Y2hTdGF0ZW1lbnQ6CisgKiAgIGNhc2UgVHlwZXMuU3dpdGNo
Q2FzZToKKyAqICAgY2FzZSBUeXBlcy5UZXJuYXJ5RXhwcmVzc2lvbjoKKyAqICAgY2FzZSBUeXBl
cy5UaGlzRXhwcmVzc2lvbjoKKyAqICAgY2FzZSBUeXBlcy5UaHJvd1N0YXRlbWVudDoKKyAqICAg
Y2FzZSBUeXBlcy5UcnlTdGF0ZW1lbnQ6CisgKiAgIGNhc2UgVHlwZXMuVW5hcnlFeHByZXNzaW9u
OgorICogICBjYXNlIFR5cGVzLlZhcmlhYmxlRGVjbGFyYXRpb246CisgKiAgIGNhc2UgVHlwZXMu
VmFyaWFibGVEZWNsYXJhdG9yOgorICogICBjYXNlIFR5cGVzLldoaWxlU3RhdGVtZW50OgorICog
ICBjYXNlIFR5cGVzLldpdGhTdGF0ZW1lbnQ6CisgKiAgIH0KKyAqCisqLwpJbmRleDogU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3Iu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMJKHJldmlzaW9uIDE3MTY5MykKKysrIFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvciA9IGZ1bmMKIAogICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLmNhbGwodGhp
cywgbnVsbCwgbnVsbCwgdGhpcyk7CiAKKyAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgPSBu
dWxsOyAKKwogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgdGhpcyBqdXN0IGp1bXBzIGJldHdlZW4g
cmVzb3VyY2VzIGFuZCByZWxhdGVkIHNvdXJjZSBtYXAgcmVzb3VyY2VzLiBJdCBkb2Vzbid0ICJq
dW1wIHRvIHN5bWJvbCIgeWV0LgogICAgIHRoaXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9s
bGVyU3RhdGUoKTsKIApAQCAtMTAwLDYgKzEwMiwxNCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VDb2RlOwogICAg
IH0sCiAKKyAgICBzaG93bjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3IucHJvdG90eXBlLnNob3duLmNhbGwodGhpcyk7CisKKyAgICAgICAgaWYgKHRo
aXMuX3R5cGVUb2tlbkFubm90YXRvcikKKyAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90
YXRvci5yZXN1bWUoKTsKKyAgICB9LAorCiAgICAgaGlkZGVuOiBmdW5jdGlvbigpCiAgICAgewog
ICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuaGlkZGVuLmNhbGwodGhp
cyk7CkBAIC0xMDksNiArMTE5LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9y
LnByb3RvdAogICAgICAgICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOwogICAgICAgICAKICAgICAg
ICAgdGhpcy5fZGlzbWlzc0VkaXRpbmdDb250cm9sbGVyKHRydWUpOworCisgICAgICAgIGlmICh0
aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5v
dGF0b3IucGF1c2UoKTsKICAgICB9LAogCiAgICAgY2xvc2U6IGZ1bmN0aW9uKCkKQEAgLTIzMiw2
ICsyNDUsMjQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAg
ICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVNYXJrZXJzKHJhbmdlKTsKICAgICB9LAogCisg
ICAgdG9nZ2xlVHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAo
IXRoaXMuX3R5cGVUb2tlbkFubm90YXRvcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICB2YXIgaXNBY3RpdmF0ZWQgPSB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IudG9nZ2xl
VHlwZUFubm90YXRpb25zKCk7CisgICAgICAgIGlmIChpc0FjdGl2YXRlZCkgeworICAgICAgICAg
ICAgUnVudGltZUFnZW50LmVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoKTsKKyAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcu
dmFsdWUgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUnVudGltZUFnZW50
LmRpc2FibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKCk7CisgICAgICAgICAgICBXZWJJbnNw
ZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLnZhbHVlID0gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxl
clN0YXRlKCk7CisgICAgICAgIHJldHVybiBpc0FjdGl2YXRlZDsKKyAgICB9LAorCiAgICAgLy8g
UHJpdmF0ZQogCiAgICAgX3VuZm9ybWF0dGVkTGluZUluZm9Gb3JFZGl0b3JMaW5lSW5mbzogZnVu
Y3Rpb24obGluZUluZm8pCkBAIC0zNTYsNiArMzg3LDEwIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlVGV4dEVkaXRvci5wcm90b3QKIAogICAgICAgICB0aGlzLl9jb250ZW50V2lsbFBvcHVsYXRl
KGNvbnRlbnQpOwogICAgICAgICB0aGlzLnN0cmluZyA9IGNvbnRlbnQ7CisKKyAgICAgICAgaWYg
KHRoaXMuX2NvZGVNaXJyb3IuZ2V0TW9kZSgpLm5hbWUgPT09ICJqYXZhc2NyaXB0IikKKyAgICAg
ICAgICAgIHRoaXMuX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKwogICAgICAgICB0aGlzLl9j
b250ZW50RGlkUG9wdWxhdGUoKTsKICAgICB9LAogCkBAIC05NzQsNiArMTAwOSw4IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgICAgIG1vZGUgPSBX
ZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTWFya2Vk
VG9rZW5zOwogICAgICAgICBlbHNlIGlmICgodGhpcy5fc291cmNlQ29kZSBpbnN0YW5jZW9mIFdl
Ykluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZSB8fCB0aGlzLl9zb3VyY2VDb2RlLnNvdXJjZU1h
cHMubGVuZ3RoICE9PSAwKSAmJiBXZWJJbnNwZWN0b3IubW9kaWZpZXJLZXlzLm1ldGFLZXkgJiYg
IVdlYkluc3BlY3Rvci5tb2RpZmllcktleXMuYWx0S2V5ICYmICFXZWJJbnNwZWN0b3IubW9kaWZp
ZXJLZXlzLnNoaWZ0S2V5KQogICAgICAgICAgICAgbW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWly
cm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5Ob25TeW1ib2xUb2tlbnM7CisgICAgICAg
IGVsc2UgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5v
dGF0b3IuaXNBY3RpdmUpCisgICAgICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb247
CiAKICAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5lbmFibGVkID0gbW9kZSAh
PT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk5v
bmU7CiAKQEAgLTk5Miw2ICsxMDI5LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yLnByb3RvdAogICAgICAgICAgICAgdGhpcy5fZGlzbWlzc1BvcG92ZXIoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFj
a2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0RXhwcmVzc2lvbjoKKyAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2YVNj
cmlwdFR5cGVJbmZvcm1hdGlvbjoKICAgICAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIubW91c2VPdmVyRGVsYXlEdXJhdGlvbiA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4
dEVkaXRvci5EdXJhdGlvblRvTW91c2VPdmVyVG9rZW5Ub01ha2VIb3ZlcmVkVG9rZW47CiAgICAg
ICAgICAgICB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vdXNlT3V0UmVsZWFzZURlbGF5
RHVyYXRpb24gPSBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub01v
dXNlT3V0T2ZIb3ZlcmVkVG9rZW5Ub1JlbGVhc2U7CiAgICAgICAgICAgICB0aGlzLnRva2VuVHJh
Y2tpbmdDb250cm9sbGVyLmNsYXNzTmFtZUZvckhpZ2hsaWdodGVkUmFuZ2UgPSBXZWJJbnNwZWN0
b3IuU291cmNlQ29kZVRleHRFZGl0b3IuSG92ZXJlZEV4cHJlc3Npb25IaWdobGlnaHRTdHlsZUNs
YXNzTmFtZTsKQEAgLTEwMjksNiArMTA2Nyw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4
dEVkaXRvci5wcm90b3QKICAgICAgICAgICAgIHRoaXMuX2Rpc21pc3NQb3BvdmVyKCk7CiAgICAg
fSwKIAorCiAgICAgdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZFJhbmdlV2FzQ2xp
Y2tlZDogZnVuY3Rpb24odG9rZW5UcmFja2luZ0NvbnRyb2xsZXIpCiAgICAgewogICAgICAgICBp
ZiAodGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5tb2RlICE9PSBXZWJJbnNwZWN0b3IuQ29k
ZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTm9uU3ltYm9sVG9rZW5zKQpAQCAt
MTA1Nyw2ICsxMDk2LDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90
b3QKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIGlmICh0aGlzLnRv
a2VuVHJhY2tpbmdDb250cm9sbGVyLm1vZGUgPT09IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uKSB7Cisg
ICAgICAgICAgICB0aGlzLl90b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2YVNj
cmlwdFR5cGVJbmZvcm1hdGlvbihjYW5kaWRhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKICAgICAgICAgaWYgKHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW9kZSA9
PT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk1h
cmtlZFRva2VucykgewogICAgICAgICAgICAgdmFyIG1hcmtlcnMgPSB0aGlzLm1hcmtlcnNBdFBv
c2l0aW9uKGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZS5zdGFydCk7CiAgICAgICAgICAgICBp
ZiAobWFya2Vycy5sZW5ndGggPiAwKQpAQCAtMTExMiwyNiArMTE1Niw2NCBAQCBXZWJJbnNwZWN0
b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIERlYnVnZ2VyQWdlbnQuZXZh
bHVhdGVPbkNhbGxGcmFtZS5pbnZva2Uoe2NhbGxGcmFtZUlkOiBXZWJJbnNwZWN0b3IuZGVidWdn
ZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZS5pZCwgZXhwcmVzc2lvbjogY2FuZGlkYXRlLmV4cHJl
c3Npb24sIG9iamVjdEdyb3VwOiAicG9wb3ZlciIsIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZTogdHJ1ZX0sIHBvcHVsYXRlLmJpbmQodGhpcykpOwogICAgIH0sCiAKLSAgICBf
c2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGNvbnRlbnQpCisgICAgX3Rva2VuVHJhY2tpbmdDb250cm9s
bGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOiBmdW5jdGlvbihjYW5kaWRh
dGUpCiAgICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnRva2VuVHJhY2tpbmdDb250
cm9sbGVyLmNhbmRpZGF0ZSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNhbmRpZGF0ZS5leHBy
ZXNzaW9uKTsKIAotICAgICAgICB2YXIgY2FuZGlkYXRlID0gdGhpcy50b2tlblRyYWNraW5nQ29u
dHJvbGxlci5jYW5kaWRhdGU7Ci0gICAgICAgIGlmICghY2FuZGlkYXRlKQotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB2YXIgc291cmNlQ29kZSA9IHRoaXMuX3NvdXJjZUNvZGU7CisgICAg
ICAgIHZhciBzb3VyY2VJRCA9IHNvdXJjZUNvZGUuc2NyaXB0c1swXS5pZDsKKyAgICAgICAgdmFy
IHJhbmdlID0gY2FuZGlkYXRlLmhvdmVyZWRUb2tlblJhbmdlOworICAgICAgICB2YXIgb2Zmc2V0
OwogCi0gICAgICAgIGNvbnRlbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IuUG9wb3ZlckRlYnVnZ2VyQ29udGVudFN0eWxlQ2xhc3NOYW1lKTsKKyAgICAg
ICAgaWYgKHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcCkKKyAgICAgICAgICAgIG9mZnNldCA9IHRo
aXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0KHJhbmdlLnN0
YXJ0LmxpbmUsIHJhbmdlLnN0YXJ0LmNoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb2Zm
c2V0ID0gdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5fY29kZU1pcnJvci5nZXREb2MoKS5p
bmRleEZyb21Qb3MoeyBsaW5lIDogcmFuZ2Uuc3RhcnQubGluZSwgY2ggOiByYW5nZS5zdGFydC5j
aCB9KTsKKworICAgICAgICB2YXIgYWxsUmVxdWVzdHMgPSBbeworICAgICAgICAgICAgdHlwZUlu
Zm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuVHlwZVByb2Zp
bGVyU2VhcmNoRGVzY3JpcHRvci5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsLAor
ICAgICAgICAgICAgc291cmNlSUQ6IHNvdXJjZUlELAorICAgICAgICAgICAgZGl2b3Q6IG9mZnNl
dAorICAgICAgICB9XTsKKworICAgICAgICBmdW5jdGlvbiBoYW5kbGVyKGVycm9yLCBhbGxUeXBl
cykgeworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSAhPT0gdGhpcy50b2tlblRyYWNraW5nQ29u
dHJvbGxlci5jYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZh
ciByZWN0cyA9IHRoaXMucmVjdHNGb3JSYW5nZShjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2Up
OwotICAgICAgICB2YXIgYm91bmRzID0gV2ViSW5zcGVjdG9yLlJlY3QudW5pb25PZlJlY3RzKHJl
Y3RzKTsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGFsbFR5cGVzLmxlbmd0aCA9PT0gMSk7
CisgICAgICAgICAgICBpZiAoIWFsbFR5cGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB2YXIgdHlwZXMgPSBhbGxUeXBlc1swXTsKKyAgICAgICAgICAgIGlm
ICh0eXBlcy5kaXNwbGF5VHlwZU5hbWUpCisgICAgICAgICAgICAgICAgdGhpcy5fc2hvd1BvcG92
ZXJGb3JUeXBlcyh0eXBlcywgbnVsbCwgIlR5cGUgaW5mb3JtYXRpb24gZm9yOiAiICsgY2FuZGlk
YXRlLmV4cHJlc3Npb24pOworICAgICAgICB9CisgICAgICAgIFJ1bnRpbWVBZ2VudC5nZXRSdW50
aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoYWxsUmVxdWVzdHMsIGhhbmRsZXIuYmluZCh0
aGlzKSk7CiAKLSAgICAgICAgdGhpcy5fcG9wb3ZlciA9IHRoaXMuX3BvcG92ZXIgfHwgbmV3IFdl
Ykluc3BlY3Rvci5Qb3BvdmVyKHRoaXMpOworICAgIH0sCisKKyAgICBfc2hvd1BvcG92ZXI6IGZ1
bmN0aW9uKGNvbnRlbnQsIGJvdW5kcykKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRo
aXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2FuZGlkYXRlIHx8IGJvdW5kcyk7CisKKyAgICAg
ICAgaWYgKCFib3VuZHMpIHsKKyAgICAgICAgICAgIHZhciBjYW5kaWRhdGUgPSB0aGlzLnRva2Vu
VHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZTsKKyAgICAgICAgICAgIGlmICghY2FuZGlkYXRl
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHZhciByZWN0cyA9IHRoaXMu
cmVjdHNGb3JSYW5nZShjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2UpOworICAgICAgICAgICAg
Ym91bmRzID0gV2ViSW5zcGVjdG9yLlJlY3QudW5pb25PZlJlY3RzKHJlY3RzKTsKKyAgICAgICAg
ICAgIC8vdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5oaWdobGlnaHRSYW5nZShjYW5kaWRh
dGUuZXhwcmVzc2lvblJhbmdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRlbnQuY2xhc3NM
aXN0LmFkZChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuUG9wb3ZlckRlYnVnZ2Vy
Q29udGVudFN0eWxlQ2xhc3NOYW1lKTsKKworICAgICAgICBpZiAodGhpcy5fcG9wb3ZlcikKKyAg
ICAgICAgICAgIHRoaXMuX3BvcG92ZXIuZGlzbWlzcygpOworICAgICAgICB0aGlzLl9wb3BvdmVy
ID0gbmV3IFdlYkluc3BlY3Rvci5Qb3BvdmVyKG51bGwpOworICAgICAgICAvL3RoaXMuX3BvcG92
ZXIgPSB0aGlzLl9wb3BvdmVyIHx8IG5ldyBXZWJJbnNwZWN0b3IuUG9wb3Zlcih0aGlzKTsKICAg
ICAgICAgdGhpcy5fcG9wb3Zlci5jb250ZW50ID0gY29udGVudDsKICAgICAgICAgdGhpcy5fcG9w
b3Zlci5wcmVzZW50KGJvdW5kcy5wYWQoNSksIFtXZWJJbnNwZWN0b3IuUmVjdEVkZ2UuTUlOX1ks
IFdlYkluc3BlY3Rvci5SZWN0RWRnZS5NQVhfWSwgV2ViSW5zcGVjdG9yLlJlY3RFZGdlLk1BWF9Y
XSk7CiAKLSAgICAgICAgdGhpcy5fdHJhY2tQb3BvdmVyRXZlbnRzKCk7Ci0KLSAgICAgICAgdGhp
cy50b2tlblRyYWNraW5nQ29udHJvbGxlci5oaWdobGlnaHRSYW5nZShjYW5kaWRhdGUuZXhwcmVz
c2lvblJhbmdlKTsKKyAgICAgICAgLy90aGlzLl90cmFja1BvcG92ZXJFdmVudHMoKTsKICAgICB9
LAogCiAgICAgX3Nob3dQb3BvdmVyRm9yRnVuY3Rpb246IGZ1bmN0aW9uKGRhdGEpCkBAIC0xMjQ2
LDYgKzEzMjgsMjQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAog
ICAgICAgICB0aGlzLl9zaG93UG9wb3Zlcihjb250ZW50KTsKICAgICB9LAogCisgICAgX3Nob3dQ
b3BvdmVyRm9yVHlwZXM6IGZ1bmN0aW9uKHR5cGVzLCBib3VuZHMsIHRpdGxlKQorICAgIHsKKyAg
ICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgY29udGVudC5jbGFzc05hbWUgPSAib2JqZWN0IGV4cGFuZGFibGUiOworCisgICAgICAgIHZh
ciB0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAg
dGl0bGVFbGVtZW50LmNsYXNzTmFtZSA9ICJ0aXRsZSI7CisgICAgICAgIHRpdGxlRWxlbWVudC50
ZXh0Q29udGVudCA9IHRpdGxlOworICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKHRpdGxlRWxl
bWVudCk7CisKKyAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9w
ZXJ0aWVzU2VjdGlvbih0eXBlcyk7CisgICAgICAgIHNlY3Rpb24uZXhwYW5kZWQgPSB0cnVlOwor
ICAgICAgICBzZWN0aW9uLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiYm9keSIpOworICAgICAgICBj
b250ZW50LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5fc2hv
d1BvcG92ZXIoY29udGVudCwgYm91bmRzKTsKKyAgICB9LAorCiAgICAgd2lsbERpc21pc3NQb3Bv
dmVyOiBmdW5jdGlvbihwb3BvdmVyKQogICAgIHsKICAgICAgICAgdGhpcy50b2tlblRyYWNraW5n
Q29udHJvbGxlci5yZW1vdmVIaWdobGlnaHRlZFJhbmdlKCk7CkBAIC0xMzYxLDYgKzE0NjEsMjUg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICB0aGlz
Ll9pZ25vcmVDb250ZW50RGlkQ2hhbmdlLS07CiAKICAgICAgICAgZGVsZXRlIHRoaXMuX2VkaXRp
bmdDb250cm9sbGVyOworICAgIH0sCisKKyAgICBfcHJldHR5UHJpbnQ6IGZ1bmN0aW9uKHByZXR0
eSkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcHJl
dHR5UHJpbnQuY2FsbCh0aGlzLCBwcmV0dHkpOworCisgICAgICAgIGlmICh0aGlzLl90eXBlVG9r
ZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQorICAgICAg
ICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlc2V0KCk7CisgICAgfSwKKworICAgIF9t
YWtlVHlwZVRva2VuQW5ub3RhdG9yOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRo
aXMuX3NvdXJjZUNvZGUuc2NyaXB0cy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgUnVudGltZUFnZW50LmVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoKTsKKyAg
ICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5UeXBlVG9r
ZW5Bbm5vdGF0b3IodGhpcywgdGhpcy5fc291cmNlQ29kZS5zY3JpcHRzWzBdKTsKKyAgICAgICAg
aWYgKFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFs
dWUpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzZXQoKTsKICAgICB9
CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9U
ZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qcwkocmV2
aXNpb24gMTcxNjkzKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1
LDE0IEBAIFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50VmlldyA9IGYKICAgICB0aGlz
Ll9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtID0gbmV3IFdlYkluc3BlY3Rvci5BY3Rp
dmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtKCJwcmV0dHktcHJpbnQiLCB0b29sVGlwLCBhY3RpdmF0
ZWRUb29sVGlwLCAiSW1hZ2VzL05hdmlnYXRpb25JdGVtQ3VybGV5QnJhY2VzLnN2ZyIsIDE2LCAx
Nik7CiAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCB0
aGlzLl90b2dnbGVQcmV0dHlQcmludCwgdGhpcyk7CiAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0
b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gZmFsc2U7IC8vIEVuYWJsZWQgd2hlbiB0aGUgdGV4
dCBlZGl0b3IgaXMgcG9wdWxhdGVkIHdpdGggY29udGVudC4KKworICAgIHZhciB0b29sVGlwVHlw
ZXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgdHlwZSBpbmZvcm1hdGlvbiIpOworICAg
IHZhciBhY3RpdmF0ZWRUb29sVGlwVHlwZXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhpZGUg
dHlwZSBpbmZvcm1hdGlvbiIpOworICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25J
dGVtID0gbmV3IFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtKCJzaG93
LXR5cGVzMiIsIHRvb2xUaXBUeXBlcywgYWN0aXZhdGVkVG9vbFRpcFR5cGVzLCAiSW1hZ2VzL05h
dmlnYXRpb25JdGVtVGF1LnN2ZyIsIDE2LCAxNik7CisgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9u
TmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdh
dGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgdGhpcy5fdG9nZ2xlVHlwZUFubm90YXRpb25zLCB0aGlz
KTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gZmFs
c2U7CisKKyAgICBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0
aW5nLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNldHRpbmcuRXZlbnQuQ2hhbmdlZCwg
dGhpcy5fc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nQ2hhbmdlZCwgdGhpcyk7
CiB9OwogCiBXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcuU3R5bGVDbGFzc05h
bWUgPSAidGV4dCI7CkBAIC01Niw3ICs2NCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VD
b250ZW50Vmlldy5wcm8KIAogICAgIGdldCBuYXZpZ2F0aW9uSXRlbXMoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFt0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtXTsKKyAgICAg
ICAgcmV0dXJuIFt0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLCB0aGlzLl9z
aG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbV07CiAgICAgfSwKIAogICAgIGdldCBtYW5hZ2Vz
T3duSXNzdWVzKCkKQEAgLTE5NCw2ICsyMDIsOCBAQCBXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNl
Q29udGVudFZpZXcucHJvCiAgICAgX2NvbnRlbnREaWRQb3B1bGF0ZTogZnVuY3Rpb24oZXZlbnQp
CiAgICAgewogICAgICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLmVu
YWJsZWQgPSB0aGlzLl90ZXh0RWRpdG9yLmNhbkJlRm9ybWF0dGVkKCk7CisgICAgICAgIHRoaXMu
X3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSAhIXRoaXMuX3RleHRFZGl0
b3IuX3R5cGVUb2tlbkFubm90YXRvcjsKKyAgICAgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2
aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUlu
Zm9ybWF0aW9uU2V0dGluZy52YWx1ZTsKICAgICB9LAogCiAgICAgX3RvZ2dsZVByZXR0eVByaW50
OiBmdW5jdGlvbihldmVudCkKQEAgLTIwMiw2ICsyMTIsMTYgQEAgV2ViSW5zcGVjdG9yLlRleHRS
ZXNvdXJjZUNvbnRlbnRWaWV3LnBybwogICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLmZvcm1hdHRl
ZCA9IGFjdGl2YXRlZDsKICAgICB9LAogCisgICAgX3RvZ2dsZVR5cGVBbm5vdGF0aW9uczogZnVu
Y3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLnRvZ2dsZVR5cGVB
bm5vdGF0aW9ucygpOworICAgIH0sCisKKyAgICBfc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRp
b25TZXR0aW5nQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLl9z
aG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5hY3RpdmF0ZWQgPSBXZWJJbnNwZWN0b3Iuc2hv
d0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLnZhbHVlOworICAgIH0sCisKICAgICBf
dGV4dEVkaXRvckZvcm1hdHRpbmdEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAg
ICAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5hY3RpdmF0ZWQgPSB0
aGlzLl90ZXh0RWRpdG9yLmZvcm1hdHRlZDsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVQcm9wZXJ0aWVzU2VjdGlvbi5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlUHJvcGVydGll
c1NlY3Rpb24uanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnRpZXNT
ZWN0aW9uID0gZnVuY3Rpb24odHlwZXMsIHRpdGxlLCBzdWJ0aXRsZSkKK3sKKyAgICB0aGlzLmVt
cHR5UGxhY2Vob2xkZXIgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk5vIFByb3BlcnRpZXMiKTsK
KyAgICB0aGlzLnR5cGVzID0gdHlwZXM7CisKKyAgICBXZWJJbnNwZWN0b3IuUHJvcGVydGllc1Nl
Y3Rpb24uY2FsbCh0aGlzLCB0aXRsZSwgc3VidGl0bGUpOworfTsKKworV2ViSW5zcGVjdG9yLlR5
cGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CisgICAgb25wb3B1bGF0ZTogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUucmVtb3ZlQ2hp
bGRyZW4oKTsKKworICAgICAgICB2YXIgaTsKKyAgICAgICAgdmFyIHByaW1pdGl2ZVR5cGVOYW1l
cyA9IHRoaXMudHlwZXMuZ2xvYmFsUHJpbWl0aXZlVHlwZU5hbWVzID8gdGhpcy50eXBlcy5nbG9i
YWxQcmltaXRpdmVUeXBlTmFtZXMgOiB0aGlzLnR5cGVzLmxvY2FsUHJpbWl0aXZlVHlwZU5hbWVz
OworICAgICAgICB2YXIgc3RydWN0dXJlcyA9IHRoaXMudHlwZXMuZ2xvYmFsU3RydWN0dXJlcyA/
IHRoaXMudHlwZXMuZ2xvYmFsU3RydWN0dXJlcyA6IHRoaXMudHlwZXMubG9jYWxTdHJ1Y3R1cmVz
OworICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
c3RydWN0dXJlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0ge307
CisgICAgICAgICAgICBwcm9wZXJ0eS5uYW1lID0gc3RydWN0dXJlc1tpXS5jb25zdHJ1Y3Rvck5h
bWU7CisgICAgICAgICAgICBwcm9wZXJ0eS5zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOworICAg
ICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTsKKyAgICAgICAgfQorICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgcHJpbWl0aXZlVHlwZU5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICB2YXIgcHJvcGVydHkgPSB7fTsKKyAgICAgICAgICAgIHByb3BlcnR5Lm5hbWUgPSBwcmlt
aXRpdmVUeXBlTmFtZXNbaV07CisgICAgICAgICAgICBwcm9wZXJ0eS5zdHJ1Y3R1cmUgPSBudWxs
OworICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTsKKyAgICAgICAgfQorCisg
ICAgICAgIHByb3BlcnRpZXMuc29ydChXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnRpZXNTZWN0aW9u
LkNvbXBhcmVQcm9wZXJ0aWVzKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMu
bGVuZ3RoOyBpKyspCisgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5hcHBl
bmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50KHByb3BlcnRp
ZXNbaV0pKTsKKworICAgICAgICBpZiAoIXRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmNoaWxk
cmVuLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7CisgICAgICAgICAgICB0aXRsZS5jbGFzc05hbWUgPSAiaW5mbyI7CisgICAg
ICAgICAgICB0aXRsZS50ZXh0Q29udGVudCA9IHRoaXMuZW1wdHlQbGFjZWhvbGRlcjsKKyAgICAg
ICAgICAgIHZhciBpbmZvRWxlbWVudCA9IG5ldyBUcmVlRWxlbWVudCh0aXRsZSwgbnVsbCwgZmFs
c2UpOworICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQo
aW5mb0VsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNlY3Rpb24uRXZlbnQuVmlzaWJsZUNvbnRlbnREaWRDaGFu
Z2UpOworCisgICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMSkKKyAgICAgICAgICAg
IHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmNoaWxkcmVuWzBdLmV4cGFuZFJlY3Vyc2l2ZWx5
KCk7CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90
b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlw
ZTsKKworV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5Db21wYXJlUHJvcGVydGll
cyA9IGZ1bmN0aW9uKHByb3BlcnR5QSwgcHJvcGVydHlCKQoreworICAgIHZhciBhID0gcHJvcGVy
dHlBLm5hbWU7CisgICAgdmFyIGIgPSBwcm9wZXJ0eUIubmFtZTsKKyAgICBpZiAoYS5pbmRleE9m
KCJfX3Byb3RvX18iKSAhPT0gLTEpCisgICAgICAgIHJldHVybiAxOworICAgIGlmIChiLmluZGV4
T2YoIl9fcHJvdG9fXyIpICE9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChhID09
PSBiKQorICAgICAgICByZXR1cm4gMTsKKworICAgIC8vIGlmIHVzZWQgZWxzZXdoZXJlIG1ha2Ug
c3VyZSB0bworICAgIC8vICAtIGNvbnZlcnQgYSBhbmQgYiB0byBzdHJpbmdzIChub3QgbmVlZGVk
IGhlcmUsIHByb3BlcnRpZXMgYXJlIGFsbCBzdHJpbmdzKQorCisgICAgdmFyIGRpZmYgPSAwOwor
ICAgIHZhciBjaHVuayA9IC9eXGQrfF5cRCsvOworICAgIHZhciBjaHVua2EsIGNodW5rYiwgYW51
bSwgYm51bTsKKyAgICB3aGlsZSAoZGlmZiA9PT0gMCkgeworICAgICAgICBpZiAoIWEgJiYgYikK
KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKCFiICYmIGEpCisgICAgICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgY2h1bmthID0gYS5tYXRjaChjaHVuaylbMF07CisgICAgICAg
IGNodW5rYiA9IGIubWF0Y2goY2h1bmspWzBdOworICAgICAgICBhbnVtID0gIWlzTmFOKGNodW5r
YSk7CisgICAgICAgIGJudW0gPSAhaXNOYU4oY2h1bmtiKTsKKyAgICAgICAgaWYgKGFudW0gJiYg
IWJudW0pCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChibnVtICYmICFhbnVt
KQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChhbnVtICYmIGJudW0pIHsKKyAg
ICAgICAgICAgIGRpZmYgPSBjaHVua2EgLSBjaHVua2I7CisgICAgICAgICAgICBpZiAoZGlmZiA9
PT0gMCAmJiBjaHVua2EubGVuZ3RoICE9PSBjaHVua2IubGVuZ3RoKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCErY2h1bmthICYmICErY2h1bmtiKSAvLyBjaHVua3MgYXJlIHN0cmluZ3Mgb2YgYWxs
IDBzIChzcGVjaWFsIGNhc2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHVua2EubGVu
Z3RoIC0gY2h1bmtiLmxlbmd0aDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjaHVua2IubGVuZ3RoIC0gY2h1bmthLmxlbmd0aDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmIChjaHVua2EgIT09IGNodW5rYikKKyAgICAgICAgICAgIHJl
dHVybiAoY2h1bmthIDwgY2h1bmtiKSA/IC0xIDogMTsKKyAgICAgICAgYSA9IGEuc3Vic3RyaW5n
KGNodW5rYS5sZW5ndGgpOworICAgICAgICBiID0gYi5zdWJzdHJpbmcoY2h1bmtiLmxlbmd0aCk7
CisgICAgfQorCisgICAgcmV0dXJuIGRpZmY7Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVByb3Bl
cnR5VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihwcm9wZXJ0eSkKK3sKKyAgICB0aGlzLnByb3BlcnR5
ID0gcHJvcGVydHk7CisKKyAgICB0aGlzLm5hbWVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic3BhbiIpOworICAgIHRoaXMubmFtZUVsZW1lbnQuY2xhc3NOYW1lID0gIm5hbWUiOwor
ICAgIHRoaXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLnByb3BlcnR5Lm5hbWU7CisK
KyAgICBUcmVlRWxlbWVudC5jYWxsKHRoaXMsIHRoaXMubmFtZUVsZW1lbnQsIG51bGwsIGZhbHNl
KTsKKworICAgIHRoaXMudG9nZ2xlT25DbGljayA9IHRydWU7CisgICAgdGhpcy5oYXNDaGlsZHJl
biA9ICEhdGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmU7IAorfTsKKworV2ViSW5zcGVjdG9yLlR5cGVQ
cm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKKyAgICBvbnBvcHVsYXRlOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICAgICAgdmFy
IHByb3BlcnRpZXMgPSBbXTsKKyAgICAgICAgdmFyIGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkg
PCB0aGlzLnByb3BlcnR5LnN0cnVjdHVyZS5maWVsZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIHZhciBuZXdQcm9wID0ge307CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gobmV3UHJv
cCk7CisgICAgICAgICAgICBuZXdQcm9wLm5hbWUgPSB0aGlzLnByb3BlcnR5LnN0cnVjdHVyZS5m
aWVsZHNbaV07CisgICAgICAgICAgICBuZXdQcm9wLnN0cnVjdHVyZSA9IG51bGw7CisgICAgICAg
IH0KKworICAgICAgICBwcm9wZXJ0aWVzLnNvcnQoV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVz
U2VjdGlvbi5Db21wYXJlUHJvcGVydGllcyk7CisKKyAgICAgICAgaWYgKHRoaXMucHJvcGVydHku
c3RydWN0dXJlLnByb3RvdHlwZVN0cnVjdHVyZSkgeworICAgICAgICAgICAgdmFyIGN0b3JQcm9w
ID0ge307CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goY3RvclByb3ApOworICAgICAgICAg
ICAgY3RvclByb3AubmFtZSA9IHRoaXMucHJvcGVydHkuc3RydWN0dXJlLnByb3RvdHlwZVN0cnVj
dHVyZS5jb25zdHJ1Y3Rvck5hbWUgKyAiIChQcm90b3R5cGUpIjsKKyAgICAgICAgICAgIGN0b3JQ
cm9wLnN0cnVjdHVyZSA9IHRoaXMucHJvcGVydHkuc3RydWN0dXJlLnByb3RvdHlwZVN0cnVjdHVy
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0
aDsgaSsrKQorICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLlR5
cGVQcm9wZXJ0eVRyZWVFbGVtZW50KHByb3BlcnRpZXNbaV0pKTsKKyAgICB9Cit9OworCitXZWJJ
bnNwZWN0b3IuVHlwZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFRy
ZWVFbGVtZW50LnByb3RvdHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuY3NzCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRv
a2VuVmlldy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky50eXBlLXRva2VuIHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7IAorICAgIGJvcmRlci1yYWRpdXM6
IDEwcHg7CisgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgICBwYWRkaW5nLWxlZnQ6
IDhweDsKKyAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7CisgICAgcGFkZGluZy10b3A6IDFweDsKKyAg
ICBjb2xvcjogd2hpdGU7CisgICAgZm9udC1zaXplOiA5MiU7CisgICAgb3BhY2l0eTogMC44NTsK
K30KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVU
b2tlblZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKK1dlYkluc3BlY3Rvci5UeXBl
VG9rZW5WaWV3ID0gZnVuY3Rpb24odG9rZW5Bbm5vdGF0b3IsIHNob3VsZEhhdmVSaWdodE1hcmdp
biwgc2hvdWxkSGF2ZUxlZnRNYXJnaW4sIHBvcG92ZXJUaXRsZSkgCit7CisgICAgV2ViSW5zcGVj
dG9yLk9iamVjdC5jYWxsKHRoaXMpOworCisgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7CisgICAgc3Bhbi5jbGFzc05hbWUgPSAidHlwZS10b2tlbiI7CisgICAg
c3Bhbi5zdHlsZS5tYXJnaW5SaWdodCA9IChzaG91bGRIYXZlUmlnaHRNYXJnaW4gPyAiNXB4IiA6
ICIwcHgiKTsKKyAgICBzcGFuLnN0eWxlLm1hcmdpbkxlZnQgPSAoc2hvdWxkSGF2ZUxlZnRNYXJn
aW4gPyAiNXB4IiA6ICIwcHgiKTsKKworICAgIHRoaXMuZWxlbWVudCA9IHNwYW47CisgICAgdGhp
cy5fdG9rZW5Bbm5vdGF0b3IgPSB0b2tlbkFubm90YXRvcjsKKyAgICB0aGlzLl90eXBlcyA9IG51
bGw7CisgICAgdGhpcy5fcG9wb3ZlclRpdGxlID0gcG9wb3ZlclRpdGxlOworCisgICAgdGhpcy5f
c2V0VXBNb3VzZW92ZXJIYW5kbGVycygpOworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZp
ZXcuQ29sb3JzID0geworICAgIHB1cnBsZSA6ICIjY2MzYmJmIiwKKyAgICBibHVlOiAiIzNiNzBl
MiIsCisgICAgcmVkOiAiI2RmMzUyZSIsCisgICAgZ3JlZW46ICIjNzZhZTFkIiwKKyAgICBncmF5
OiAiIzdlN2U3ZSIsCisgICAgb3JhbmdlOiAiI2VkODQwMCIKK307CisKK1dlYkluc3BlY3Rvci5U
eXBlVG9rZW5WaWV3LkNvbG9yRm9yVHlwZSA9IHsKKyAgICAiU3RyaW5nIjogV2ViSW5zcGVjdG9y
LlR5cGVUb2tlblZpZXcuQ29sb3JzLnJlZCwKKyAgICAiRnVuY3Rpb24iOiBXZWJJbnNwZWN0b3Iu
VHlwZVRva2VuVmlldy5Db2xvcnMucHVycGxlLCAKKyAgICAiTnVtYmVyIjogV2ViSW5zcGVjdG9y
LlR5cGVUb2tlblZpZXcuQ29sb3JzLmJsdWUsCisgICAgIkludGVnZXIiOiBXZWJJbnNwZWN0b3Iu
VHlwZVRva2VuVmlldy5Db2xvcnMuYmx1ZSwKKyAgICAiVW5kZWZpbmVkIjogV2ViSW5zcGVjdG9y
LlR5cGVUb2tlblZpZXcuQ29sb3JzLmdyYXksCisgICAgIk51bGwiOiBXZWJJbnNwZWN0b3IuVHlw
ZVRva2VuVmlldy5Db2xvcnMuZ3JheSwKKyAgICAiKD8pIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tl
blZpZXcuQ29sb3JzLmdyYXksCisgICAgIkJvb2xlYW4iOiBXZWJJbnNwZWN0b3IuVHlwZVRva2Vu
Vmlldy5Db2xvcnMucHVycGxlLAorICAgICIobWFueSkiOiBXZWJJbnNwZWN0b3IuVHlwZVRva2Vu
Vmlldy5Db2xvcnMub3JhbmdlCit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5TaW1w
bGVUeXBlID0geworICAgICJTdHJpbmciOiB0cnVlLAorICAgICJOdW1iZXIiOiB0cnVlLAorICAg
ICJJbnRlZ2VyIjogdHJ1ZSwKKyAgICAiVW5kZWZpbmVkIjogdHJ1ZSwKKyAgICAiTnVsbCI6IHRy
dWUsCisgICAgIkJvb2xlYW4iOiB0cnVlLAorfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZp
ZXcucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuVHlwZVRva2Vu
VmlldywKKworICAgIC8vIHB1YmxpYworCisgICAgdXBkYXRlOiBmdW5jdGlvbih0eXBlcykKKyAg
ICB7CisgICAgICAgIHZhciB0aXRsZSA9IHR5cGVzLmRpc3BsYXlUeXBlTmFtZTsKKyAgICAgICAg
dGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gdGl0bGU7CisgICAgICAgIHRoaXMuX3R5cGVzID0g
dHlwZXM7CisgICAgICAgIHZhciBoYXNoU3RyaW5nID0gdGl0bGVbdGl0bGUubGVuZ3RoIC0gMV0g
PT09ICI/IiA/IHRpdGxlLnNsaWNlKDAsIHRpdGxlLmxlbmd0aCAtIDEpIDogdGl0bGU7CisgICAg
ICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBXZWJJbnNwZWN0b3IuVHlw
ZVRva2VuVmlldy5Db2xvckZvclR5cGVbaGFzaFN0cmluZ10gfHwgV2ViSW5zcGVjdG9yLlR5cGVU
b2tlblZpZXcuQ29sb3JzLmdyZWVuOworICAgIH0sCisgICAgCisgICAgLy8gcHJpdmF0ZQorICAg
IAorICAgIF9zZXRVcE1vdXNlb3ZlckhhbmRsZXJzOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciB0aW1lb3V0SUQgPSBudWxsOworCisgICAg
ICAgIHRoaXMuZWxlbWVudC5vbm1vdXNlb3ZlciA9IGZ1bmN0aW9uKCkgCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIHNob3dQb3BvdmVyQWZ0ZXJEZWxheSgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdGltZW91dElEID0gbnVsbDsKKworICAgICAgICAgICAgICAgIHZh
ciBkb21SZWN0ID0gc2VsZi5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAg
ICAgICAgICAgIHZhciBib3VuZHMgPSBuZXcgV2ViSW5zcGVjdG9yLlJlY3QoZG9tUmVjdC5sZWZ0
LCBkb21SZWN0LnRvcCwgZG9tUmVjdC53aWR0aCwgZG9tUmVjdC5oZWlnaHQpOworICAgICAgICAg
ICAgICAgIHNlbGYuX3Rva2VuQW5ub3RhdG9yLl9zb3VyY2VDb2RlVGV4dEVkaXRvci5fc2hvd1Bv
cG92ZXJGb3JUeXBlcyhzZWxmLl90eXBlcywgYm91bmRzLCBzZWxmLl9wb3BvdmVyVGl0bGUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5UeXBlVG9rZW5W
aWV3LlNpbXBsZVR5cGVbc2VsZi5fdHlwZXMuZGlzcGxheVR5cGVOYW1lXSkKKyAgICAgICAgICAg
ICAgICB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KHNob3dQb3BvdmVyQWZ0ZXJEZWxheSwgMzUwKTsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZWxlbWVudC5vbm1vdXNlb3V0ID0gZnVuY3Rpb24o
KSAKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRpbWVvdXRJRCAhPT0gbnVsbCkKKyAgICAg
ICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTsKKyAgICAgICAgfQorICAgIH0KKwor
fTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdl
Ykluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235916</attachid>
            <date>2014-08-01 15:58:43 -0700</date>
            <delta_ts>2014-08-04 12:26:52 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>91700</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2Fs
aXplZFN0cmluZ3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2Fs
aXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwkocmV2aXNpb24gMTcxOTM1KQor
KysgU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVk
U3RyaW5ncy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw2IEBACiAAbABvAGMAYQBs
AGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIARQBsAGUAbQBlAG4AdAAgAGMAbABpAHAAcwAgAGMA
bwBtAHAAbwBzAGkAdABpAG4AZwAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAiAF0AIAA9ACAAIgBF
AGwAZQBtAGUAbgB0ACAAYwBsAGkAcABzACAAYwBvAG0AcABvAHMAaQB0AGkAbgBnACAAZABlAHMA
YwBlAG4AZABhAG4AdABzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsA
IgBFAGwAZQBtAGUAbgB0ACAAZQBzAHQAYQBiAGwAaQBzAGgAZQBzACAAYQAgAHMAdABhAGMAawBp
AG4AZwAgAGMAbwBuAHQAZQB4AHQAIgBdACAAPQAgACIARQBsAGUAbQBlAG4AdAAgAGUAcwB0AGEA
YgBsAGkAcwBoAGUAcwAgAGEAIABzAHQAYQBjAGsAaQBuAGcAIABjAG8AbgB0AGUAeAB0ACIAOwAK
IABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBtAGUAbgB0ACAAaABh
AHMAIABDAFMAUwAgAGIAbABlAG4AZABpAG4AZwAgAGEAcABwAGwAaQBlAGQAIABhAG4AZAAgAGMA
bwBtAHAAbwBzAGkAdABlAGQAIABkAGUAcwBjAGUAbgBkAGEAbgB0AHMAIgBdACAAPQAgACIARQBs
AGUAbQBlAG4AdAAgAGgAYQBzACAAQwBTAFMAIABiAGwAZQBuAGQAaQBuAGcAIABhAHAAcABsAGkA
ZQBkACAAYQBuAGQAIABjAG8AbQBwAG8AcwBpAHQAZQBkACAAZABlAHMAYwBlAG4AZABhAG4AdABz
ACIAOwAKLQBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBtAGUAbgB0
ACAAaQBzACAAYQAgAHMAdABhAGMAawBpAG4AZwAgAGMAbwBuAHQAZQB4AHQAIABhAG4AZAAgAGgA
YQBzACAAYwBvAG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAgAHcAaQB0
AGgAIABDAFMAUwAgAGIAbABlAG4AZABpAG4AZwAgAGEAcABwAGwAaQBlAGQAIgBdACAAPQAgACIA
RQBsAGUAbQBlAG4AdAAgAGkAcwAgAGEAIABzAHQAYQBjAGsAaQBuAGcAIABjAG8AbgB0AGUAeAB0
ACAAYQBuAGQAIABoAGEAcwAgAGMAbwBtAHAAbwBzAGkAdABlAGQAIABkAGUAcwBjAGUAbgBkAGEA
bgB0AHMAIAB3AGkAdABoACAAQwBTAFMAIABiAGwAZQBuAGQAaQBuAGcAIABhAHAAcABsAGkAZQBk
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBtAGUAbgB0
ACAAaABhAHMAIABDAFMAUwAgAGYAaQBsAHQAZQByAHMAIABhAHAAcABsAGkAZQBkACIAXQAgAD0A
IAAiAEUAbABlAG0AZQBuAHQAIABoAGEAcwAgAEMAUwBTACAAZgBpAGwAdABlAHIAcwAgAGEAcABw
AGwAaQBlAGQAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEUAbABl
AG0AZQBuAHQAIABoAGEAcwAgAEMAUwBTACAAZgBpAGwAdABlAHIAcwAgAGEAcABwAGwAaQBlAGQA
IABhAG4AZAAgAGMAbwBtAHAAbwBzAGkAdABlAGQAIABkAGUAcwBjAGUAbgBkAGEAbgB0AHMAIgBd
ACAAPQAgACIARQBsAGUAbQBlAG4AdAAgAGgAYQBzACAAQwBTAFMAIABmAGkAbAB0AGUAcgBzACAA
YQBwAHAAbABpAGUAZAAgAGEAbgBkACAAYwBvAG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBu
AGQAYQBuAHQAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIARQBs
AGUAbQBlAG4AdAAgAGgAYQBzACAAYQAgADIARAAgAHQAcgBhAG4AcwBmAG8AcgBtACAAYQBuAGQA
IABjAG8AbQBwAG8AcwBpAHQAZQBkACAAZABlAHMAYwBlAG4AZABhAG4AdABzACIAXQAgAD0AIAAi
AEUAbABlAG0AZQBuAHQAIABoAGEAcwAgAGEAIAAyAEQAIAB0AHIAYQBuAHMAZgBvAHIAbQAgAGEA
bgBkACAAYwBvAG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAiADsACkBA
IC0xNjksNiArMTY4LDcgQEAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBF
AGwAZQBtAGUAbgB0ACAAaQBzACAAPABpAGYAcgBhAG0AZQA+ACIAXQAgAD0AIAAiAEUAbABlAG0A
ZQBuAHQAIABpAHMAIAA8AGkAZgByAGEAbQBlAD4AIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMA
dAByAGkAbgBnAHMAWwAiAEUAbABlAG0AZQBuAHQAIABpAHMAIAA8AHYAaQBkAGUAbwA+ACIAXQAg
AD0AIAAiAEUAbABlAG0AZQBuAHQAIABpAHMAIAA8AHYAaQBkAGUAbwA+ACIAOwAKIABsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBtAGUAbgB0ACAAaQBzACAAYQAgAHAA
bAB1AGcALQBpAG4AIgBdACAAPQAgACIARQBsAGUAbQBlAG4AdAAgAGkAcwAgAGEAIABwAGwAdQBn
AC0AaQBuACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBt
AGUAbgB0ACAAaQBzACAAYQAgAHMAdABhAGMAawBpAG4AZwAgAGMAbwBuAHQAZQB4AHQAIABhAG4A
ZAAgAGgAYQBzACAAYwBvAG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAg
AHcAaQB0AGgAIABDAFMAUwAgAGIAbABlAG4AZABpAG4AZwAgAGEAcABwAGwAaQBlAGQAIgBdACAA
PQAgACIARQBsAGUAbQBlAG4AdAAgAGkAcwAgAGEAIABzAHQAYQBjAGsAaQBuAGcAIABjAG8AbgB0
AGUAeAB0ACAAYQBuAGQAIABoAGEAcwAgAGMAbwBtAHAAbwBzAGkAdABlAGQAIABkAGUAcwBjAGUA
bgBkAGEAbgB0AHMAIAB3AGkAdABoACAAQwBTAFMAIABiAGwAZQBuAGQAaQBuAGcAIABhAHAAcABs
AGkAZQBkACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBt
AGUAbgB0ACAAaQBzACAAYQBuAGkAbQBhAHQAZQBkACIAXQAgAD0AIAAiAEUAbABlAG0AZQBuAHQA
IABpAHMAIABhAG4AaQBtAGEAdABlAGQAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkA
bgBnAHMAWwAiAEUAbABlAG0AZQBuAHQAIABpAHMAIABtAGEAcwBrAGUAZAAgAGEAbgBkACAAYwBv
AG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAiAF0AIAA9ACAAIgBFAGwA
ZQBtAGUAbgB0ACAAaQBzACAAbQBhAHMAawBlAGQAIABhAG4AZAAgAGMAbwBtAHAAbwBzAGkAdABl
AGQAIABkAGUAcwBjAGUAbgBkAGEAbgB0AHMAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdABy
AGkAbgBnAHMAWwAiAEUAbABlAG0AZQBuAHQAIABpAHMAIAB0AGgAZQAgAHIAbwBvAHQAIABlAGwA
ZQBtAGUAbgB0ACIAXQAgAD0AIAAiAEUAbABlAG0AZQBuAHQAIABpAHMAIAB0AGgAZQAgAHIAbwBv
AHQAIABlAGwAZQBtAGUAbgB0ACIAOwAKQEAgLTIxNCwxNCArMjE0LDE1IEBACiAAbABvAGMAYQBs
AGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABUAE0ATAAgAEEAdAB0AHIAaQBiAHUAdABlAHMA
IgBdACAAPQAgACIASABUAE0ATAAgAEEAdAB0AHIAaQBiAHUAdABlAHMAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAVABUAFAAIgBdACAAPQAgACIASABUAFQAUAAi
ADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABlAGkAZwBoAHQAIgBd
ACAAPQAgACIASABlAGkAZwBoAHQAIgA7AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBn
AHMAWwAiAEgAaQBkAGUAIABSAGUAcABsAGEAeQAgAEMAbwBuAHQAcgBvAGwAcwAiAF0AIAA9ACAA
IgBIAGkAZABlACAAUgBlAHAAbABhAHkAIABDAG8AbgB0AHIAbwBsAHMAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAaQBkAGUAIABjAG8AbQBwAG8AcwBpAHQAaQBu
AGcAIABiAG8AcgBkAGUAcgBzACIAXQAgAD0AIAAiAEgAaQBkAGUAIABjAG8AbQBwAG8AcwBpAHQA
aQBuAGcAIABiAG8AcgBkAGUAcgBzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4A
ZwBzAFsAIgBIAGkAZABlACAAYwBvAG4AcwBvAGwAZQAgACgAJQBzACkAIgBdACAAPQAgACIASABp
AGQAZQAgAGMAbwBuAHMAbwBsAGUAIAAoACUAcwApACIAOwAKLQBsAG8AYwBhAGwAaQB6AGUAZABT
AHQAcgBpAG4AZwBzAFsAIgBIAGkAZABlACAAUgBlAHAAbABhAHkAIABDAG8AbgB0AHIAbwBsAHMA
IgBdACAAPQAgACIASABpAGQAZQAgAFIAZQBwAGwAYQB5ACAAQwBvAG4AdAByAG8AbABzACIAOwAK
IABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBIAGkAZABlACAAcwBoAGEAZABv
AHcAIABEAE8ATQAgAG4AbwBkAGUAcwAiAF0AIAA9ACAAIgBIAGkAZABlACAAcwBoAGEAZABvAHcA
IABEAE8ATQAgAG4AbwBkAGUAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcA
cwBbACIASABpAGQAZQAgAHQAaABlACAAJQBzACAAZABlAHQAYQBpAGwAcwAgAHMAaQBkAGUAYgBh
AHIAIgBdACAAPQAgACIASABpAGQAZQAgAHQAaABlACAAJQBzACAAZABlAHQAYQBpAGwAcwAgAHMA
aQBkAGUAYgBhAHIAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgA
aQBkAGUAIAB0AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBsAHMAIABzAGkAZABlAGIAYQByACAAKAAl
AHMAKQAiAF0AIAA9ACAAIgBIAGkAZABlACAAdABoAGUAIAAlAHMAIABkAGUAdABhAGkAbABzACAA
cwBpAGQAZQBiAGEAcgAgACgAJQBzACkAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkA
bgBnAHMAWwAiAEgAaQBkAGUAIAB0AGgAZQAgACUAcwAgAG4AYQB2AGkAZwBhAHQAaQBvAG4AIABz
AGkAZABlAGIAYQByACIAXQAgAD0AIAAiAEgAaQBkAGUAIAB0AGgAZQAgACUAcwAgAG4AYQB2AGkA
ZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQA
cgBpAG4AZwBzAFsAIgBIAGkAZABlACAAdABoAGUAIAAlAHMAIABuAGEAdgBpAGcAYQB0AGkAbwBu
ACAAcwBpAGQAZQBiAGEAcgAgACgAJQBzACkAIgBdACAAPQAgACIASABpAGQAZQAgAHQAaABlACAA
JQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBkAGUAYgBhAHIAIAAoACUAcwApACIAOwAK
KwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBIAGkAZABlACAAdAB5AHAAZQAg
AGkAbgBmAG8AcgBtAGEAdABpAG8AbgAiAF0AIAA9ACAAIgBIAGkAZABlACAAdAB5AHAAZQAgAGkA
bgBmAG8AcgBtAGEAdABpAG8AbgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcA
cwBbACIASABvAHMAdAAiAF0AIAA9ACAAIgBIAG8AcwB0ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUA
ZABTAHQAcgBpAG4AZwBzAFsAIgBJAGMAbwBuACAATwBuAGwAeQAiAF0AIAA9ACAAIgBJAGMAbwBu
ACAATwBuAGwAeQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASQBj
AG8AbgAgAGEAbgBkACAAVABlAHgAdAAgACgASABvAHIAaQB6AG8AbgB0AGEAbAApACIAXQAgAD0A
IAAiAEkAYwBvAG4AIABhAG4AZAAgAFQAZQB4AHQAIAAoAEgAbwByAGkAegBvAG4AdABhAGwAKQAi
ADsACkBAIC0zNDIsOCArMzQzLDggQEAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBz
AFsAIgBSAGUAZgBlAHIAZQBuAGMAZQAgAEkAcwBzAHUAZQAiAF0AIAA9ACAAIgBSAGUAZgBlAHIA
ZQBuAGMAZQAgAEkAcwBzAHUAZQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcA
cwBbACIAUgBlAGYAbABlAGMAdABpAG8AbgAiAF0AIAA9ACAAIgBSAGUAZgBsAGUAYwB0AGkAbwBu
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUAZgByAGUAcwBo
ACIAXQAgAD0AIAAiAFIAZQBmAHIAZQBzAGgAIgA7AAotAGwAbwBjAGEAbABpAHoAZQBkAFMAdABy
AGkAbgBnAHMAWwAiAFIAZQBnAGkAbwBuACAAYQBuAG4AbwB1AG4AYwBlAGQAIABpAG4AIABpAHQA
cwAgAGUAbgB0AGkAcgBlAHQAeQAuACIAXQAgAD0AIAAiAFIAZQBnAGkAbwBuACAAYQBuAG4AbwB1
AG4AYwBlAGQAIABpAG4AIABpAHQAcwAgAGUAbgB0AGkAcgBlAHQAeQAuACIAOwAKIABsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUAZwBpAG8AbgAgAEYAbABvAHcAIgBdACAA
PQAgACIAUgBlAGcAaQBvAG4AIABGAGwAbwB3ACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUAZABTAHQA
cgBpAG4AZwBzAFsAIgBSAGUAZwBpAG8AbgAgAGEAbgBuAG8AdQBuAGMAZQBkACAAaQBuACAAaQB0
AHMAIABlAG4AdABpAHIAZQB0AHkALgAiAF0AIAA9ACAAIgBSAGUAZwBpAG8AbgAgAGEAbgBuAG8A
dQBuAGMAZQBkACAAaQBuACAAaQB0AHMAIABlAG4AdABpAHIAZQB0AHkALgAiADsACiAAbABvAGMA
YQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAGwAbwBhAGQAIABwAGEAZwBlACAAKAAl
AHMAKQBcAG4AUgBlAGwAbwBhAGQAIABpAGcAbgBvAHIAaQBuAGcAIABjAGEAYwBoAGUAIAAoACUA
cwApACIAXQAgAD0AIAAiAFIAZQBsAG8AYQBkACAAcABhAGcAZQAgACgAJQBzACkAXABuAFIAZQBs
AG8AYQBkACAAaQBnAG4AbwByAGkAbgBnACAAYwBhAGMAaABlACAAKAAlAHMAKQAiADsACiAAbABv
AGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAG0AbwB2AGUAIAB0AGgAaQBzACAA
YgByAGUAYQBrAHAAbwBpAG4AdAAgAGEAYwB0AGkAbwBuACIAXQAgAD0AIAAiAFIAZQBtAG8AdgBl
ACAAdABoAGkAcwAgAGIAcgBlAGEAawBwAG8AaQBuAHQAIABhAGMAdABpAG8AbgAiADsACiAAbABv
AGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHAAZQBhAHQAaQBuAGcAIABMAGkA
bgBlAGEAcgAgAEcAcgBhAGQAaQBlAG4AdAAiAF0AIAA9ACAAIgBSAGUAcABlAGEAdABpAG4AZwAg
AEwAaQBuAGUAYQByACAARwByAGEAZABpAGUAbgB0ACIAOwAKQEAgLTM4NCwxMSArMzg1LDExIEBA
CiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAGEAcgBlAGQAIABGAG8A
YwB1AHMAIgBdACAAPQAgACIAUwBoAGEAcgBlAGQAIABGAG8AYwB1AHMAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIABBAGwAbAAiAF0AIAA9ACAAIgBT
AGgAbwB3ACAAQQBsAGwAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAi
AFMAaABvAHcAIABBAGwAbAAgAE4AbwBkAGUAcwAgACgAJQBkACAATQBvAHIAZQApACIAXQAgAD0A
IAAiAFMAaABvAHcAIABBAGwAbAAgAE4AbwBkAGUAcwAgACgAJQBkACAATQBvAHIAZQApACIAOwAK
KwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAUgBlAHAAbABh
AHkAIABDAG8AbgB0AHIAbwBsAHMAIgBdACAAPQAgACIAUwBoAG8AdwAgAFIAZQBwAGwAYQB5ACAA
QwBvAG4AdAByAG8AbABzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsA
IgBTAGgAbwB3ACAAYwBvAG0AcABvAHMAaQB0AGkAbgBnACAAYgBvAHIAZABlAHIAcwAiAF0AIAA9
ACAAIgBTAGgAbwB3ACAAYwBvAG0AcABvAHMAaQB0AGkAbgBnACAAYgBvAHIAZABlAHIAcwAiADsA
CiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAgAGMAbwBuAHMA
bwBsAGUAIAAoACUAcwApACIAXQAgAD0AIAAiAFMAaABvAHcAIABjAG8AbgBzAG8AbABlACAAKAAl
AHMAKQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAg
AGYAdQBsAGwALQBoAGUAaQBnAGgAdAAgAGMAbwBuAHMAbwBsAGUAIgBdACAAPQAgACIAUwBoAG8A
dwAgAGYAdQBsAGwALQBoAGUAaQBnAGgAdAAgAGMAbwBuAHMAbwBsAGUAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIABmAHUAbgBjAHQAaQBvAG4AIABk
AGUAZgBpAG4AaQB0AGkAbwBuACIAXQAgAD0AIAAiAFMAaABvAHcAIABmAHUAbgBjAHQAaQBvAG4A
IABkAGUAZgBpAG4AaQB0AGkAbwBuACIAOwAKLQBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4A
ZwBzAFsAIgBTAGgAbwB3ACAAUgBlAHAAbABhAHkAIABDAG8AbgB0AHIAbwBsAHMAIgBdACAAPQAg
ACIAUwBoAG8AdwAgAFIAZQBwAGwAYQB5ACAAQwBvAG4AdAByAG8AbABzACIAOwAKIABsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAcwBoAGEAZABvAHcAIABEAE8A
TQAgAG4AbwBkAGUAcwAiAF0AIAA9ACAAIgBTAGgAbwB3ACAAcwBoAGEAZABvAHcAIABEAE8ATQAg
AG4AbwBkAGUAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBo
AG8AdwAgAHMAcABsAGkAdAAgAGMAbwBuAHMAbwBsAGUAIgBdACAAPQAgACIAUwBoAG8AdwAgAHMA
cABsAGkAdAAgAGMAbwBuAHMAbwBsAGUAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkA
bgBnAHMAWwAiAFMAaABvAHcAIAB0AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBsAHMAIABzAGkAZABl
AGIAYQByACIAXQAgAD0AIAAiAFMAaABvAHcAIAB0AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBsAHMA
IABzAGkAZABlAGIAYQByACIAOwAKQEAgLTM5Nyw2ICszOTgsNyBAQAogAGwAbwBjAGEAbABpAHoA
ZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIAB0AGgAZQAgACUAcwAgAG4AYQB2AGkAZwBh
AHQAaQBvAG4AIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiAF0AIAA9ACAAIgBTAGgAbwB3ACAA
dABoAGUAIAAlAHMAIABuAGEAdgBpAGcAYQB0AGkAbwBuACAAcwBpAGQAZQBiAGEAcgAgACgAJQBz
ACkAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIAB0
AGkAbQBlAHMAIABhAHMAIABhAGIAcwBvAGwAdQB0AGUAIAB0AGkAbQBlAHMAIgBdACAAPQAgACIA
UwBoAG8AdwAgAHQAaQBtAGUAcwAgAGEAcwAgAGEAYgBzAG8AbAB1AHQAZQAgAHQAaQBtAGUAcwAi
ADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAgAHQAaQBt
AGUAcwAgAGEAcwAgAHAAZQByAGMAZQBuAHQAYQBnAGUAcwAiAF0AIAA9ACAAIgBTAGgAbwB3ACAA
dABpAG0AZQBzACAAYQBzACAAcABlAHIAYwBlAG4AdABhAGcAZQBzACIAOwAKKwBsAG8AYwBhAGwA
aQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAdAB5AHAAZQAgAGkAbgBmAG8AcgBt
AGEAdABpAG8AbgAiAF0AIAA9ACAAIgBTAGgAbwB3ACAAdAB5AHAAZQAgAGkAbgBmAG8AcgBtAGEA
dABpAG8AbgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBpAHoA
ZQAiAF0AIAA9ACAAIgBTAGkAegBlACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4A
ZwBzAFsAIgBTAG0AYQBsAGwAIABJAGMAbwBuAHMAIgBdACAAPQAgACIAUwBtAGEAbABsACAASQBj
AG8AbgBzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAG8AYwBr
AGUAdAAiAF0AIAA9ACAAIgBTAG8AYwBrAGUAdAAiADsACkBAIC00MDQsOCArNDA2LDggQEAKIABs
AG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAG8AdQByAGMAZQAgAEMAbwBkAGUA
IgBdACAAPQAgACIAUwBvAHUAcgBjAGUAIABDAG8AZABlACIAOwAKIABsAG8AYwBhAGwAaQB6AGUA
ZABTAHQAcgBpAG4AZwBzAFsAIgBTAHAAZQBsAGwAaQBuAGcAIgBdACAAPQAgACIAUwBwAGUAbABs
AGkAbgBnACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAHQAYQBy
AHQAIABKAGEAdgBhAFMAYwByAGkAcAB0ACAAcAByAG8AZgBpAGwAaQBuAGcALgAiAF0AIAA9ACAA
IgBTAHQAYQByAHQAIABKAGEAdgBhAFMAYwByAGkAcAB0ACAAcAByAG8AZgBpAGwAaQBuAGcALgAi
ADsACi0AbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwB0AGEAcgB0ACAAUgBl
AGMAbwByAGQAaQBuAGcAIgBdACAAPQAgACIAUwB0AGEAcgB0ACAAUgBlAGMAbwByAGQAaQBuAGcA
IgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAdABhAHIAdAAgAFAA
bABhAHkAYgBhAGMAawAiAF0AIAA9ACAAIgBTAHQAYQByAHQAIABQAGwAYQB5AGIAYQBjAGsAIgA7
AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAdABhAHIAdAAgAFIAZQBj
AG8AcgBkAGkAbgBnACIAXQAgAD0AIAAiAFMAdABhAHIAdAAgAFIAZQBjAG8AcgBkAGkAbgBnACIA
OwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAHQAYQByAHQAIABUAGkA
bQBlACIAXQAgAD0AIAAiAFMAdABhAHIAdAAgAFQAaQBtAGUAIgA7AAogAGwAbwBjAGEAbABpAHoA
ZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAdABhAHQAdQBzACIAXQAgAD0AIAAiAFMAdABhAHQAdQBz
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAHQAZQBwACAAaQBu
AHQAbwAgACgAJQBzACAAbwByACAAJQBzACkAIgBdACAAPQAgACIAUwB0AGUAcAAgAGkAbgB0AG8A
IAAoACUAcwAgAG8AcgAgACUAcwApACIAOwAKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MTM1LDYgKzEzNSw3IEBACiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9U
aW1lbGluZVZpZXcuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdz
L1Rvb2xiYXIuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1Ry
ZWVFbGVtZW50U3RhdHVzQnV0dG9uLmNzcyI+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSJWaWV3cy9UeXBlVG9rZW5WaWV3LmNzcyI+CiAKICAgICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9IkNvbnRyb2xsZXJzL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5jc3Mi
PgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iQ29udHJvbGxlcnMvQ29kZU1pcnJv
ckRyYWdUb0FkanVzdE51bWJlckNvbnRyb2xsZXIuY3NzIj4KQEAgLTE2MCw2ICsxNjEsOCBAQAog
ICAgIDxzY3JpcHQgc3JjPSJFeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9IkV4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzIj48L3NjcmlwdD4KIAor
CisKICAgICA8c2NyaXB0IHNyYz0iQmFzZS9XZWJJbnNwZWN0b3IuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJCYXNlL09iamVjdC5qcyI+PC9zY3JpcHQ+CiAKQEAgLTI1Niw2ICsyNjEs
NyBAQAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU2V0dGluZy5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCBzcmM9Ik1vZGVscy9Tb3VyY2VDb2RlTG9jYXRpb24uanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJNb2RlbHMvU291cmNlQ29kZVBvc2l0aW9uLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NvdXJjZUNvZGVBU1QuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgc3JjPSJNb2RlbHMvU291cmNlQ29kZVJldmlzaW9uLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iTW9kZWxzL1NvdXJjZUNvZGVUZXh0UmFuZ2UuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJNb2RlbHMvU291cmNlQ29kZVRpbWVsaW5lLmpzIj48L3NjcmlwdD4KQEAg
LTQ1Miw2ICs0NTgsOCBAQAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Ub29sYmFyLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHJlZUVsZW1lbnRTdGF0dXNCdXR0b24uanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UcmVlT3V0bGluZURhdGFHcmlkU3lu
Y2hyb25pemVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHlwZVByb3Bl
cnRpZXNTZWN0aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHlwZVRv
a2VuVmlldy5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvQ29k
ZU1pcnJvckVkaXRpbmdDb250cm9sbGVyLmpzIj48L3NjcmlwdD4KIApAQCAtNDgzLDYgKzQ5MSw3
IEBACiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1NvdXJjZU1hcE1hbmFnZXIuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9TdG9yYWdlTWFuYWdlci5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1RpbWVsaW5lTWFuYWdlci5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90
YXRvci5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQmFzZS9NYWluLmpzIj48L3Nj
cmlwdD4KIApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9N
YWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0Jhc2UvTWFpbi5qcwkocmV2aXNpb24gMTcxOTM1KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNiArMTYw
LDggQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKIAogICAgIHRoaXMuc2hvd1No
YWRvd0RPTVNldHRpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoInNob3ctc2hhZG93LWRv
bSIsIGZhbHNlKTsKICAgICB0aGlzLnNob3dSZXBsYXlJbnRlcmZhY2VTZXR0aW5nID0gbmV3IFdl
Ykluc3BlY3Rvci5TZXR0aW5nKCJzaG93LXdlYi1yZXBsYXkiLCBmYWxzZSk7CisgICAgCisgICAg
dGhpcy5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcgPSBuZXcgV2ViSW5zcGVj
dG9yLlNldHRpbmcoInNob3ctamF2YXNjcmlwdC10eXBlLWluZm9ybWF0aW9uLXNldHRpbmciLCBm
YWxzZSk7CiAKICAgICB0aGlzLm1vdXNlQ29vcmRzID0gewogICAgICAgICB4OiAwLApJbmRleDog
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJv
clRva2VuVHJhY2tpbmdDb250cm9sbGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5n
Q29udHJvbGxlci5qcwkocmV2aXNpb24gMTcxOTM1KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9s
bGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw4IEBAIFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yVG9rZW5UcmFja2luZ0NvbnQKICAgICBOb25lOiAibm9uZSIsCiAgICAgTm9uU3ltYm9s
VG9rZW5zOiAibm9uLXN5bWJvbC10b2tlbnMiLAogICAgIEphdmFTY3JpcHRFeHByZXNzaW9uOiAi
amF2YXNjcmlwdC1leHByZXNzaW9uIiwKLSAgICBNYXJrZWRUb2tlbnM6ICJtYXJrZWQtdG9rZW5z
IgorICAgIE1hcmtlZFRva2VuczogIm1hcmtlZC10b2tlbnMiLAorICAgIEphdmFTY3JpcHRUeXBl
SW5mb3JtYXRpb246ICJqYXZhc2NyaXB0LXR5cGUtaW5mb3JtYXRpb24iCiB9CiAKIFdlYkluc3Bl
Y3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewpAQCAt
Mzg5LDYgKzM5MCw3IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnQK
ICAgICAgICAgICAgIHRoaXMuX2NhbmRpZGF0ZSA9IHRoaXMuX3Byb2Nlc3NOb25TeW1ib2xUb2tl
bigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvZGVN
aXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9uOgor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xs
ZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOgogICAgICAgICAgICAgdGhpcy5fY2Fu
ZGlkYXRlID0gdGhpcy5fcHJvY2Vzc0phdmFTY3JpcHRFeHByZXNzaW9uKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tp
bmdDb250cm9sbGVyLk1vZGUuTWFya2VkVG9rZW5zOgpJbmRleDogU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyU291cmNlTWFwLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0Zvcm1hdHRlclNvdXJjZU1hcC5qcwkocmV2aXNpb24gMTcxOTM1KQorKysgU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyU291cmNlTWFwLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNSArNDUsMjcgQEAgV2ViSW5zcGVjdG9yLkZvcm1hdHRl
clNvdXJjZU1hcC5wcm90b3R5cAogICAgIG9yaWdpbmFsVG9Gb3JtYXR0ZWQ6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CiAgICAgICAgIHZhciBvcmlnaW5hbFBvc2l0
aW9uID0gdGhpcy5fbG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3Ms
IGxpbmVOdW1iZXIgfHwgMCwgY29sdW1uTnVtYmVyIHx8IDApOworICAgICAgICByZXR1cm4gdGhp
cy5vcmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQob3JpZ2luYWxQb3NpdGlvbik7CisgICAgfSwK
KworICAgIG9yaWdpbmFsUG9zaXRpb25Ub0Zvcm1hdHRlZDogZnVuY3Rpb24ob3JpZ2luYWxQb3Np
dGlvbikKKyAgICB7CiAgICAgICAgIHZhciBmb3JtYXR0ZWRQb3NpdGlvbiA9IHRoaXMuX2NvbnZl
cnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLm9yaWdpbmFsLCB0aGlzLl9tYXBwaW5nLmZvcm1hdHRl
ZCwgb3JpZ2luYWxQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblRvTG9j
YXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGZvcm1hdHRlZFBvc2l0aW9uKTsKICAg
ICB9LAogCisKICAgICBmb3JtYXR0ZWRUb09yaWdpbmFsOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIpCiAgICAgeworICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMu
Zm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOworICAg
ICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVu
ZGluZ3MsIG9yaWdpbmFsUG9zaXRpb24pOworICAgIH0sCisKKyAgICBmb3JtYXR0ZWRUb09yaWdp
bmFsT2Zmc2V0OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgewogICAg
ICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9sb2NhdGlvblRvUG9zaXRpb24odGhp
cy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGxpbmVOdW1iZXIgfHwgMCwgY29sdW1uTnVtYmVyIHx8
IDApOwogICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMuX2NvbnZlcnRQb3NpdGlv
bih0aGlzLl9tYXBwaW5nLmZvcm1hdHRlZCwgdGhpcy5fbWFwcGluZy5vcmlnaW5hbCwgZm9ybWF0
dGVkUG9zaXRpb24pOwotICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0aW9uKHRo
aXMuX29yaWdpbmFsTGluZUVuZGluZ3MsIG9yaWdpbmFsUG9zaXRpb24pOworICAgICAgICByZXR1
cm4gb3JpZ2luYWxQb3NpdGlvbjsKICAgICB9LAogCiAgICAgLy8gUHJpdmF0ZQpJbmRleDogU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5u
b3RhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFu
bm90YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K1dlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IgPSBmdW5jdGlvbih0ZXh0RWRpdG9yLCBz
Y3JpcHQpIAoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKKworICAgIHRo
aXMuX3NjcmlwdCA9IHNjcmlwdDsKKyAgICB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvciA9IHRl
eHRFZGl0b3I7CisgICAgdGhpcy5fdHlwZVRva2VuTm9kZXMgPSBbXTsKKyAgICB0aGlzLl90eXBl
VG9rZW5Cb29rbWFya3MgPSBbXTsKKyAgICB0aGlzLl90aW1lb3V0SWRlbnRpZmllciA9IG51bGw7
CisgICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTsKKworICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMu
X3NjcmlwdCk7Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlw
ZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvciwK
KworICAgIC8vIHB1YmxpYworICAgIGdldCBpc0FjdGl2ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5faXNBY3RpdmU7CisgICAgfSwKKworICAgIHBhdXNlOiBmdW5jdGlvbigpIAorICAg
IHsKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsKKyAgICAgICAgdGhpcy5f
aXNBY3RpdmUgPSBmYWxzZTsKKyAgICB9LAorCisgICAgcmVzdW1lOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOworICAgICAgICB0aGlzLl9p
c0FjdGl2ZSA9IHRydWU7CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICB9
LAorCisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NsZWFyVGlt
ZW91dElmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAg
dGhpcy5fY2xlYXJUeXBlVG9rZW5zKCk7CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMo
KTsKKyAgICB9LAorCisgICAgdG9nZ2xlVHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSkgeworICAgICAgICAgICAgdGhpcy5faXNBY3Rp
dmUgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2NsZWFyVHlwZVRva2VucygpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOworICAgICAgICAg
ICAgdGhpcy5yZXNldCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMuaXNBY3Rp
dmU7CisgICAgfSwKKworICAgIGluc2VydEFubm90YXRpb25zOiBmdW5jdGlvbigpIAorICAgIHsK
KyAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIHNvdXJjZU1hcCA9IHRoaXMuX3NvdXJj
ZUNvZGVUZXh0RWRpdG9yLl9mb3JtYXR0ZXJTb3VyY2VNYXA7CisgICAgICAgIHZhciBjb2RlTWly
cm9yID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3IuX2NvZGVNaXJyb3I7CisgICAgICAgIHZh
ciBzb3VyY2VDb2RlQVNUID0gdGhpcy5fc2NyaXB0Ll9zb3VyY2VDb2RlQVNUOworICAgICAgICB2
YXIgc291cmNlSUQgPSB0aGlzLl9zY3JpcHQuaWQ7CisKKyAgICAgICAgaWYgKCFzb3VyY2VDb2Rl
QVNUKSB7CisgICAgICAgICAgICB0aGlzLl9zY3JpcHQuX3NvdXJjZUNvZGVBU1REaWRMb2FkQ2Fs
bGJhY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBzZWxmLmluc2VydEFubm90YXRp
b25zKCk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAodGhpcy5fc2NyaXB0LmNh
blJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKSkKKyAgICAgICAgICAgICAgICB0aGlzLl9zY3Jp
cHQucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZChmdW5jdGlvbigpIHt9KTsKKworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW5zZXJ0VG9rZW4ob2Zm
c2V0LCBub2RlLCBpc1JldHVybikKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGxvY2F0aW9u
OyAKKyAgICAgICAgICAgIHZhciBzdGFydDsgCisKKyAgICAgICAgICAgIGlmIChzb3VyY2VNYXAp
IHsKKyAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHNvdXJjZU1hcC5vcmlnaW5hbFBvc2l0aW9u
VG9Gb3JtYXR0ZWQob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzdGFydCA9IHsgbGluZTogbG9j
YXRpb24ubGluZU51bWJlciwgY2g6IGxvY2F0aW9uLmNvbHVtbk51bWJlciB9OworICAgICAgICAg
ICAgICAgIG9mZnNldCA9IGNvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9zKHN0YXJ0KTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gY29kZU1pcnJvci5n
ZXREb2MoKS5wb3NGcm9tSW5kZXgob2Zmc2V0KTsKKworICAgICAgICAgICAgdmFyIHNvdXJjZVN0
cmluZyA9IGNvZGVNaXJyb3IuZ2V0VmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChpc1JldHVybikg
eworICAgICAgICAgICAgICAgIC8vIFRyYW5zbGF0ZSBwb3NpdGlvbiB0byB0aGUgb3BlbmluZyBw
YXJlbiBvZiB0aGUgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi5fZ2V0
TmV3T2Zmc2V0Rm9yUmV0dXJuU3RhdGVtZW50KG5vZGUsIG9mZnNldCwgc291cmNlU3RyaW5nKTsK
KyAgICAgICAgICAgICAgICBzdGFydCA9IGNvZGVNaXJyb3IuZ2V0RG9jKCkucG9zRnJvbUluZGV4
KG9mZnNldCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vdGU6IENvZGVNaXJy
b3IgYm9va21hcmtzIHJlbmRlciB0byB0aGUgbGVmdCBvZiB0aGUgY2hhcmFjdGVyIHRoZXkncmUg
YmVpbmcgZGlzcGxheWVkIG5leHQgdG8sIGFuZCB0aGF0IGlzIHdoeSByaWdodCBtYXJnaW4gY2hl
Y2tzIHRoZSBjdXJyZW50IG9mZnNldC4KKyAgICAgICAgICAgIHZhciBpc1NwYWNlUmVnZXhwID0g
L1tcdFx2XGYgXHUwMGEwXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUyMDA2
XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBhXHUyMDBiXHUyMDI4XHUyMDI5XHUzMDAwXS87CisgICAg
ICAgICAgICB2YXIgc2hvdWxkSGF2ZUxlZnRNYXJnaW4gPSBvZmZzZXQgIT09IDAgJiYgIWlzU3Bh
Y2VSZWdleHAudGVzdChzb3VyY2VTdHJpbmdbb2Zmc2V0IC0gMV0pOworICAgICAgICAgICAgdmFy
IHNob3VsZEhhdmVSaWdodE1hcmdpbiA9ICFpc1NwYWNlUmVnZXhwLnRlc3Qoc291cmNlU3RyaW5n
W29mZnNldF0pOworICAgICAgICAgICAgdmFyIHR5cGVUb2tlbiA9IG5ldyBXZWJJbnNwZWN0b3Iu
VHlwZVRva2VuVmlldyhzZWxmLCBzaG91bGRIYXZlUmlnaHRNYXJnaW4sIHNob3VsZEhhdmVMZWZ0
TWFyZ2luLCBub2RlLl9hdHRhY2htZW50cy5fdHlwZVBvcG92ZXJUaXRsZSk7CisgICAgICAgICAg
ICB2YXIgYm9va21hcmsgPSBjb2RlTWlycm9yLnNldFVuaXF1ZUJvb2ttYXJrKHN0YXJ0LCB7IHdp
ZGdldDogdHlwZVRva2VuLmVsZW1lbnQgfSk7CisgICAgICAgICAgICBub2RlLl9hdHRhY2htZW50
cy5fdHlwZVRva2VuID0gdHlwZVRva2VuOworICAgICAgICAgICAgc2VsZi5fdHlwZVRva2VuTm9k
ZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgIHNlbGYuX3R5cGVUb2tlbkJvb2ttYXJrcy5wdXNo
KGJvb2ttYXJrKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGZvckVhY2gobm9kZSkg
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBUeXBlcyA9IFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlQVNULkFTVFR5cGU7CisKKyAgICAgICAgICAgIHN3aXRjaChub2RlLnR5cGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIGNhc2Ug
VHlwZXMuRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgICAgIG5vZGUucGFyYW1zLmZv
ckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS5f
YXR0YWNobWVudHMuX3R5cGVzICYmIHBhcmFtLl9hdHRhY2htZW50cy5fdHlwZXMuZGlzcGxheVR5
cGVOYW1lICYmICFwYXJhbS5fYXR0YWNobWVudHMuX3R5cGVUb2tlbikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW0uX2F0dGFjaG1lbnRzLl90eXBlUG9wb3ZlclRpdGxlID0gIlR5cGUg
aW5mb3JtYXRpb24gZm9yIHZhcmlhYmxlOiAiICsgcGFyYW0ubmFtZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydFRva2VuKHBhcmFtLnJhbmdlWzBdLCBwYXJhbSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAvLyBJZiBh
IGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXhwbGljaXQgcmV0dXJuIHR5cGUsIHRoZW4gZG9u
J3Qgc2hvdyBhIHJldHVybiB0eXBlIHVubGVzcyB3ZSB0aGluayBpdCdzIGEgY29uc3RydWN0b3Iu
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuX2F0dGFjaG1lbnRzLl9yZXR1cm5UeXBlcyAmJiBu
b2RlLl9hdHRhY2htZW50cy5fcmV0dXJuVHlwZXMuZGlzcGxheVR5cGVOYW1lICYmICFub2RlLl9h
dHRhY2htZW50cy5fdHlwZVRva2VuICYmIChzb3VyY2VDb2RlQVNULmNvbnRhaW5zUmV0dXJuU3Rh
dGVtZW50KG5vZGUuYm9keSkgfHwgbm9kZS5fYXR0YWNobWVudHMuX3JldHVyblR5cGVzLmRpc3Bs
YXlUeXBlTmFtZSAhPT0gIlVuZGVmaW5lZCIpKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUu
X2F0dGFjaG1lbnRzLl90eXBlUG9wb3ZlclRpdGxlID0gIlJldHVybiB0eXBlIGluZm9ybWF0aW9u
IGZvciBmdW5jdGlvbiIgKyAobm9kZS5pZCA/ICgiOiAiICsgbm9kZS5pZC5uYW1lKSA6ICIiKTsK
KyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0VG9rZW4obm9kZS5pc0dldHRlck9yU2V0dGVyID8g
bm9kZS5nZXR0ZXJPclNldHRlclJhbmdlWzBdIDogbm9kZS5yYW5nZVswXSwgbm9kZSwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUu
X2F0dGFjaG1lbnRzLl90eXBlcyAmJiBub2RlLl9hdHRhY2htZW50cy5fdHlwZXMuZGlzcGxheVR5
cGVOYW1lICYmICFub2RlLl9hdHRhY2htZW50cy5fdHlwZVRva2VuKSB7CisgICAgICAgICAgICAg
ICAgICAgIG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlUG9wb3ZlclRpdGxlID0gIlR5cGUgaW5mb3Jt
YXRpb24gZm9yIHZhcmlhYmxlOiAiICsgbm9kZS5pZC5uYW1lOworICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRUb2tlbihub2RlLmlkLnJhbmdlWzBdLCBub2RlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBzb3VyY2VDb2RlQVNULnVwZGF0ZVR5cGVzKHNvdXJjZUlELCBmdW5jdGlvbiBhZnRlclR5
cGVVcGRhdGVzKCkgeworICAgICAgICAgICAgc291cmNlQ29kZUFTVC5mb3JFYWNoTm9kZShmb3JF
YWNoKTsKKyAgICAgICAgICAgIHNlbGYuX3VwZGF0ZVR5cGVUb2tlbnMoKTsKKyAgICAgICAgfSk7
CisgICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIF91cGRhdGVUeXBlVG9rZW5zOiBmdW5j
dGlvbigpIAorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHZhciBzb3VyY2VDb2RlQVNUID0gdGhpcy5fc2NyaXB0Ll9zb3Vy
Y2VDb2RlQVNUOworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgZnVuY3Rpb24g
Zm9yRWFjaChub2RlKSAKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIFR5cGVzID0gV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZTsKKworICAgICAgICAgICAgc3dpdGNoKG5vZGUu
dHlwZSkgeworICAgICAgICAgICAgY2FzZSBUeXBlcy5GdW5jdGlvbkRlY2xhcmF0aW9uOgorICAg
ICAgICAgICAgY2FzZSBUeXBlcy5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICAgICAg
bm9kZS5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihwYXJhbSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAocGFyYW0uX2F0dGFjaG1lbnRzLl90eXBlVG9rZW4pCisgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbS5fYXR0YWNobWVudHMuX3R5cGVUb2tlbi51cGRhdGUocGFyYW0uX2F0dGFjaG1l
bnRzLl90eXBlcyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUuX2F0dGFjaG1lbnRzLl90eXBlVG9rZW4pCisgICAgICAgICAgICAgICAgICAgIG5vZGUuX2F0
dGFjaG1lbnRzLl90eXBlVG9rZW4udXBkYXRlKG5vZGUuX2F0dGFjaG1lbnRzLl9yZXR1cm5UeXBl
cyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVzLlZhcmlh
YmxlRGVjbGFyYXRvcjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5fYXR0YWNobWVudHMuX3R5
cGVUb2tlbikKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3R5cGVUb2tl
bi51cGRhdGUobm9kZS5fYXR0YWNobWVudHMuX3R5cGVzKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNvdXJjZUNvZGVBU1QuZm9y
RWFjaE5vZGUoZm9yRWFjaCk7CisKKyAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBz
ZXRUaW1lb3V0KGZ1bmN0aW9uIHRpbWVvdXRVcGRhdGUoKSB7CisgICAgICAgICAgICBzZWxmLl90
aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAgICAgICBzZWxmLmluc2VydEFubm90YXRp
b25zKCk7CisgICAgICAgIH0sIDYwMDApOworICAgIH0sCisKKyAgICBfY2xlYXJUeXBlVG9rZW5z
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl90eXBlVG9rZW5Ob2Rlcy5mb3JFYWNo
KGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlVG9r
ZW4gPSBudWxsOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtz
LmZvckVhY2goZnVuY3Rpb24oYm9va21hcmspIHsKKyAgICAgICAgICAgIGJvb2ttYXJrLmNsZWFy
KCk7CisgICAgICAgIH0pOworCisgICAgICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzID0gW107Cisg
ICAgICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcyA9IFtdOworICAgIH0sCisKKyAgICBfZ2V0
TmV3T2Zmc2V0Rm9yUmV0dXJuU3RhdGVtZW50OiBmdW5jdGlvbihub2RlLCBvZmZzZXQsIHNvdXJj
ZVN0cmluZykKKyAgICB7CisgICAgICAgIC8vIFRoZSBhc3N1bXB0aW9uIGhlcmUgaXMgdGhhdCB3
ZSBnZXQgdGhlIG9mZnNldCBzdGFydGluZyBhdCB0aGUgZnVuY3Rpb24ga2V5d29yZCAob3IgYWZ0
ZXIgdGhlIGdldC9zZXQga2V5d29yZHMpLgorICAgICAgICAvLyBXZSB3aWxsIHJldHVybiB0aGUg
b2Zmc2V0IGZvciB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcyBpbiB0aGUgZnVuY3Rpb24gZGVjbGFy
YXRpb24uCisgICAgICAgIC8vIEFsbCB0aGlzIGNvZGUgaXMganVzdCBhIHdheSB0byBmaW5kIHRo
aXMgcGFyZW50aGVzaXMgd2hpbGUgaWdub3JpbmcgY29tbWVudHMuCisKKyAgICAgICAgdmFyIGlz
TXVsdGlMaW5lQ29tbWVudCA9IGZhbHNlOworICAgICAgICB2YXIgaXNTaW5nbGVMaW5lQ29tbWVu
dCA9IGZhbHNlOworICAgICAgICB2YXIgc2hvdWxkSWdub3JlID0gZmFsc2U7CisgICAgICAgIHdo
aWxlICgoc291cmNlU3RyaW5nW29mZnNldF0gIT09ICIpIiB8fCBzaG91bGRJZ25vcmUpICYmIG9m
ZnNldCA8IHNvdXJjZVN0cmluZy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChpc1NpbmdsZUxp
bmVDb21tZW50ICYmIHNvdXJjZVN0cmluZ1tvZmZzZXRdID09PSAiL24iKSB7CisgICAgICAgICAg
ICAgICAgaXNTaW5nbGVMaW5lQ29tbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHNob3Vs
ZElnbm9yZSA9IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc011bHRpTGluZUNvbW1l
bnQgJiYgc291cmNlU3RyaW5nW29mZnNldF0gPT09ICIqIiAmJiBzb3VyY2VTdHJpbmdbb2Zmc2V0
ICsgMV0gPT09ICIvIikgeworICAgICAgICAgICAgICAgIGlzTXVsdGlMaW5lQ29tbWVudCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIHNob3VsZElnbm9yZSA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIG9mZnNldCsrOyAKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNob3VsZElnbm9yZSAmJiBz
b3VyY2VTdHJpbmdbb2Zmc2V0XSA9PT0gIi8iKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0Kys7
CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVN0cmluZ1tvZmZzZXRdID09PSAiKiIpCisgICAg
ICAgICAgICAgICAgICAgIGlzTXVsdGlMaW5lQ29tbWVudCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoc291cmNlU3RyaW5nW29mZnNldF0gPT09ICIvIikKKyAgICAgICAgICAgICAg
ICAgICAgaXNTaW5nbGVMaW5lQ29tbWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBwYXJzaW5nLiBDb3VsZG4n
dCBwYXJzZSBjb21tZW50IHByZWFtYmxlLiIpOworICAgICAgICAgICAgICAgIHNob3VsZElnbm9y
ZSA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9mZnNldCsrOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIG9mZnNldCArIDE7CisgICAgfSwKKworICAgIF9jbGVhclRp
bWVvdXRJZk5lZWRlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3RpbWVv
dXRJZGVudGlmaWVyKSB7CisgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElk
ZW50aWZpZXIpOworICAgICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOwor
ICAgICAgICB9CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5w
cm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CkluZGV4
OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0
ZW1UYXUuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbVRhdS5zdmcJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1UYXUuc3Zn
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8c3ZnIHZpZXdCb3g9IjAgMCAxNiAxNiIg
dmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgorICAgIDxy
ZWN0IHg9IjMiIHk9IjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIj48L3JlY3Q+CisgICAgPHJlY3Qg
eD0iNyIgeT0iNCIgd2lkdGg9IjIiIGhlaWdodD0iMTAiPjwvcmVjdD4KKzwvc3ZnPgpJbmRleDog
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0JhY2tGb3J3YXJkRW50
cnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL0JhY2tGb3J3YXJkRW50cnkuanMJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9CYWNrRm9yd2FyZEVudHJ5LmpzCSh3
b3JraW5nIGNvcHkpCkBAIC01MiwxMiArNTIsMTMgQEAgV2ViSW5zcGVjdG9yLkJhY2tGb3J3YXJk
RW50cnkucHJvdG90eXBlIAogICAgICAgICByZXR1cm4gT2JqZWN0LnNoYWxsb3dDb3B5KHRoaXMu
X2Nvb2tpZSk7CiAgICAgfSwKIAotICAgIHByZXBhcmVUb1Nob3c6IGZ1bmN0aW9uKCkKKyAgICBw
cmVwYXJlVG9TaG93OiBmdW5jdGlvbihzaG91bGRDYWxsU2hvd24pCiAgICAgewogICAgICAgICB0
aGlzLl9yZXN0b3JlRnJvbUNvb2tpZSgpOwogCiAgICAgICAgIHRoaXMuY29udGVudFZpZXcudmlz
aWJsZSA9IHRydWU7Ci0gICAgICAgIHRoaXMuY29udGVudFZpZXcuc2hvd24oKTsKKyAgICAgICAg
aWYgKHNob3VsZENhbGxTaG93bikKKyAgICAgICAgICAgIHRoaXMuY29udGVudFZpZXcuc2hvd24o
KTsKICAgICAgICAgdGhpcy5jb250ZW50Vmlldy51cGRhdGVMYXlvdXQoKTsKICAgICB9LAogCklu
ZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9TY3JpcHQuanMJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDkgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdCA9IGZ1bmN0aW9uKGlkLCByYW5nZQogCiAgICAgaWYg
KHNvdXJjZU1hcFVSTCkKICAgICAgICAgV2ViSW5zcGVjdG9yLnNvdXJjZU1hcE1hbmFnZXIuZG93
bmxvYWRTb3VyY2VNYXAoc291cmNlTWFwVVJMLCB0aGlzLl91cmwsIHRoaXMpOworCisgICAgdGhp
cy5fc291cmNlQ29kZUFTVCA9IG51bGw7CisgICAgdGhpcy5fc291cmNlQ29kZUFTVERpZExvYWRD
YWxsYmFjayA9IG51bGw7CiB9OwogCiBXZWJJbnNwZWN0b3IuU2NyaXB0LlR5cGVJZGVudGlmaWVy
ID0gInNjcmlwdCI7CkBAIC0xMTcsNyArMTIwLDE1IEBAIFdlYkluc3BlY3Rvci5TY3JpcHQucHJv
dG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgRGVidWdnZXJBZ2VudC5nZXRTY3JpcHRTb3VyY2UodGhpcy5faWQsIGNhbGxiYWNrKTsKKyAg
ICAgICAgZnVuY3Rpb24gY2FsbGJhY2tXcmFwcGVyKGVycm9yLCBzb3VyY2VUZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIWVycm9yKQorICAgICAgICAgICAgICAgIHRoaXMuX21ha2VB
U1Qoc291cmNlVGV4dCk7CisKKyAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KGNhbGxiYWNrLCBB
cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIERlYnVnZ2VyQWdlbnQuZ2V0U2NyaXB0U291cmNlKHRoaXMuX2lkLCBjYWxsYmFja1dyYXBw
ZXIuYmluZCh0aGlzKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0sCiAKQEAgLTE3NCw2
ICsxODUsMTcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0K
IAogICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgX21ha2VBU1Q6IGZ1bmN0aW9u
KHNvdXJjZVRleHQpIHsKKyAgICAgICAgaWYgKCFzb3VyY2VUZXh0KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHRoaXMuX3NvdXJjZUNvZGVBU1QgPSBuZXcgV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVBU1Qoc291cmNlVGV4dCwgdGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9zb3VyY2VD
b2RlQVNURGlkTG9hZENhbGxiYWNrICYmIHR5cGVvZiB0aGlzLl9zb3VyY2VDb2RlQVNURGlkTG9h
ZENhbGxiYWNrID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICB0aGlzLl9zb3VyY2VDb2Rl
QVNURGlkTG9hZENhbGxiYWNrKCk7CisgICAgICAgICAgICB0aGlzLl9zb3VyY2VDb2RlQVNURGlk
TG9hZENhbGxiYWNrID0gbnVsbDsKKyAgICAgICAgfQogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlQVNULmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9T
b3VyY2VDb2RlQVNULmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGVBU1QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVCA9IGZ1
bmN0aW9uKHNvdXJjZVRleHQsIHNjcmlwdCkgCit7CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5j
YWxsKHRoaXMpOworICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlwdDsKKworICAgIHRyeSB7CisgICAg
ICAgIHZhciBlc3ByaW1hQVNUID0gV2ViSW5zcGVjdG9yLl9lc3ByaW1hLnBhcnNlKHNvdXJjZVRl
eHQsIHsgcmFuZ2UgOiB0cnVlIH0pOworICAgICAgICB0aGlzLl9hc3QgPSB0aGlzLl9jcmVhdGVJ
bnRlcm5hbEFTVChlc3ByaW1hQVNUKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgdmFyIHZl
cmJvc2UgPSBmYWxzZTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBjb25zb2xl
LmxvZygiQ291bGRuJ3QgcGFyc2UgSmF2YVNjcmlwdCBGaWxlOiBcbiIgKyBlLm1lc3NhZ2UpCisg
ICAgICAgIHRoaXMuX2FzdCA9IG51bGw7CisgICAgfQorCisgICAgdGhpcy5fb3JpZ2luYWxTb3Vy
Y2VUZXh0ID0gc291cmNlVGV4dDsKK307CisKKy8vIE5vdGUgdGhhdCB0aGlzIGNvcnJlc3BvbmRz
IGlkZW50aWNhbGx5IHRvIGFuIGVudW0gaW4gSmF2YVNjaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRl
bGl0eVR5cGVQcm9maWxlci5oCitXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5UeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yID0geworICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JO
b3JtYWw6IDEsCisgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvclRoaXNTdGF0ZW1lbnQ6
IDIsCisgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuOiAzCit9
OworCitXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlID0geworICAgIEFzc2lnbm1l
bnRFeHByZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAorICAgIEFycmF5RXhwcmVzc2lv
bjogJ0FycmF5RXhwcmVzc2lvbicsCisgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVu
dCcsCisgICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24nLAorICAgIEJyZWFr
U3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQnLAorICAgIENhdGNoQ2xhdXNlOiAnQ2F0Y2hDbGF1
c2UnLAorICAgIENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLAorICAgIERv
V2hpbGVTdGF0ZW1lbnQ6ICdEb1doaWxlU3RhdGVtZW50JywKKyAgICBEZWJ1Z2dlclN0YXRlbWVu
dDogJ0RlYnVnZ2VyU3RhdGVtZW50JywKKyAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3RhdGVt
ZW50JywKKyAgICBFeHByZXNzaW9uU3RhdGVtZW50OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsCisg
ICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVtZW50JywKKyAgICBGb3JJblN0YXRlbWVudDogJ0Zv
ckluU3RhdGVtZW50JywKKyAgICBGdW5jdGlvbkNhbGw6ICdGdW5jdGlvbkNhbGwnLAorICAgIEZ1
bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJywKKyAgICBGdW5jdGlvbkV4
cHJlc3Npb246ICdGdW5jdGlvbkV4cHJlc3Npb24nLAorICAgIElkZW50aWZpZXI6ICdJZGVudGlm
aWVyJywKKyAgICBJZlN0YXRlbWVudDogJ0lmU3RhdGVtZW50JywKKyAgICBMaXRlcmFsOiAnTGl0
ZXJhbCcsCisgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLAorICAgIExv
Z2ljYWxFeHByZXNzaW9uOiAnTG9naWNhbEV4cHJlc3Npb24nLAorICAgIE1lbWJlckV4cHJlc3Np
b246ICdNZW1iZXJFeHByZXNzaW9uJywKKyAgICBOZXdFeHByZXNzaW9uOiAnTmV3RXhwcmVzc2lv
bicsCisgICAgT2JqZWN0RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLAorICAgIFBvc3Rm
aXhFeHByZXNzaW9uOidQb3N0Zml4RXhwcmVzc2lvbicsCisgICAgUHJvZ3JhbTogJ1Byb2dyYW0n
LAorICAgIFByb3BlcnR5OiAnUHJvcGVydHknLAorICAgIFByZWZpeEV4cHJlc3Npb246J1ByZWZp
eEV4cHJlc3Npb24nLAorICAgIFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRlbWVudCcsCisg
ICAgU2VxdWVuY2VFeHByZXNzaW9uOiAnU2VxdWVuY2VFeHByZXNzaW9uJywKKyAgICBTd2l0Y2hT
dGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1lbnQnLAorICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNl
JywKKyAgICBUZXJuYXJ5RXhwcmVzc2lvbjogJ1Rlcm5hcnlFeHByZXNzaW9uJywKKyAgICBUaGlz
RXhwcmVzc2lvbjogJ1RoaXNFeHByZXNzaW9uJywKKyAgICBUaHJvd1N0YXRlbWVudDogJ1Rocm93
U3RhdGVtZW50JywKKyAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLAorICAgIFVuYXJ5
RXhwcmVzc2lvbjogJ1VuYXJ5RXhwcmVzc2lvbicsCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbjog
J1ZhcmlhYmxlRGVjbGFyYXRpb24nLAorICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogJ1ZhcmlhYmxl
RGVjbGFyYXRvcicsCisgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsCisgICAg
V2l0aFN0YXRlbWVudDogJ1dpdGhTdGF0ZW1lbnQnCit9OworCitXZWJJbnNwZWN0b3IuU291cmNl
Q29kZUFTVC5wcm90b3R5cGUgPSB7CisKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVBU1QsCisKKyAgICAvLyBQdWJsaWMKKworICAgIGZvckVhY2hOb2RlOiBmdW5jdGlv
bihmdW5jKQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVjdXJzZSh0aGlzLl9hc3QsIGZ1bmMsIHRo
aXMuX2RlZmF1bHRQYXJzZXJTdGF0ZSgpKTsKKyAgICB9LAorCisgICAgZmlsdGVyOiBmdW5jdGlv
bihmdW5jLCBzdGFydE5vZGUpIAorICAgIHsKKyAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2Rl
IHx8IHRoaXMuX2FzdDsKKyAgICAgICAgdmFyIG5vZGVzID0gW107CisgICAgICAgIGZ1bmN0aW9u
IGZpbHRlcihub2RlLCBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGZ1bmMobm9k
ZSkpCisgICAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBzdGF0ZS5za2lwQ2hpbGROb2RlcyA9IHRydWU7IAorICAgICAgICB9
CisgICAgICAgIHRoaXMuX3JlY3Vyc2Uoc3RhcnROb2RlLCBmaWx0ZXIsIHRoaXMuX2RlZmF1bHRQ
YXJzZXJTdGF0ZSgpKTsKKworICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgfSwKKworICAgIGNv
bnRhaW5zUmV0dXJuU3RhdGVtZW50OiBmdW5jdGlvbihzdGFydE5vZGUpCisgICAgeworICAgICAg
ICBpZiAoc3RhcnROb2RlLl9hdHRhY2htZW50cy5faGFzUmV0dXJuU3RhdGVtZW50ICE9PSB1bmRl
ZmluZWQpCisgICAgICAgICAgICByZXR1cm4gc3RhcnROb2RlLl9hdHRhY2htZW50cy5faGFzUmV0
dXJuU3RhdGVtZW50OworCisgICAgICAgIGZ1bmN0aW9uIGZpbHRlcihub2RlKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbm9kZS50eXBlICE9PSBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZUFTVC5BU1RUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbiAmJiBub2RlLnR5cGUgIT09IFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBub2RlcyA9IHRoaXMuZmlsdGVyKGZpbHRlciwgc3RhcnROb2RlKTsK
KyAgICAgICAgdmFyIGhhc1JldHVyblN0YXRlbWVudCA9IGZhbHNlOworICAgICAgICB2YXIgcmV0
dXJuVHlwZSA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuUmV0dXJuU3RhdGVt
ZW50OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldOworICAgICAgICAgICAgaWYgKG5vZGUudHlw
ZSA9PT0gcmV0dXJuVHlwZSAmJiBub2RlLmFyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAgaGFz
UmV0dXJuU3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAgCisgICAgICAgIHN0YXJ0Tm9kZS5fYXR0YWNobWVu
dHMuX2hhc1JldHVyblN0YXRlbWVudCA9IGhhc1JldHVyblN0YXRlbWVudDsKKworICAgICAgICBy
ZXR1cm4gaGFzUmV0dXJuU3RhdGVtZW50OworICAgIH0sCisKKyAgICB1cGRhdGVUeXBlczogZnVu
Y3Rpb24oc291cmNlSUQsIGNhbGxiYWNrKSAKKyAgICB7CisgICAgICAgIHZhciBzdGFydFRpbWUg
PSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgICAgICB2YXIgdmVyYm9zZSA9IGZhbHNlOwor
ICAgICAgICB2YXIgYWxsUmVxdWVzdHMgPSBbXTsKKyAgICAgICAgdmFyIGFsbFJlcXVlc3ROb2Rl
cyA9IFtdOworCisgICAgICAgIGZ1bmN0aW9uIGZvckVhY2gobm9kZSkgeworICAgICAgICAgICAg
dmFyIFR5cGVzID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZTsKKyAgICAgICAg
ICAgIHN3aXRjaChub2RlLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25E
ZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25FeHByZXNzaW9uOgor
ICAgICAgICAgICAgICAgIG5vZGUucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzLnB1c2goeworICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVB
U1QuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlw
dG9yTm9ybWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IHNvdXJjZUlELAor
ICAgICAgICAgICAgICAgICAgICAgICAgZGl2b3Q6IHBhcmFtLnJhbmdlWzBdCisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChw
YXJhbSk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0
cy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvcjog
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5U
eXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4sCisgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZUlEOiBzb3VyY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgZGl2b3Q6IG5v
ZGUuYm9keS5yYW5nZVswXQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGFs
bFJlcXVlc3ROb2Rlcy5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUuaW5pdCkgeworICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0cy5wdXNoKHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlQVNULlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IuVHlwZVByb2Zp
bGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJj
ZUlEOiBzb3VyY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpdm90OiBub2RlLmlkLnJh
bmdlWzBdCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBhbGxS
ZXF1ZXN0Tm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgc3RhcnRS
ZWN1cnNlVHJlZVRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgICAgICB2YXIgc2Ny
aXB0VVJMID0gdGhpcy5fc2NyaXB0LnVybDsKKyAgICAgICAgdGhpcy5mb3JFYWNoTm9kZShmb3JF
YWNoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBjb25zb2xlLmxvZygiXG4j
IyBSZWN1cnNlVHJlZSB0aW1lOiAiICsgIigiICsgc2NyaXB0VVJMICsgIik6IiArICgobmV3IERh
dGUoKS5nZXRUaW1lKCkpIC0gc3RhcnRSZWN1cnNlVHJlZVRpbWUpICsgIm1zIik7CisKKyAgICAg
ICAgZnVuY3Rpb24gaGFuZGxlVHlwZXMoZXJyb3IsIGFsbFR5cGVzKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICBjb25zb2xlLmFzc2VydChhbGxUeXBlcy5sZW5ndGggPT09IGFsbFJlcXVlc3RzLmxlbmd0aCk7
CisKKyAgICAgICAgICAgIHZhciBlbmRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJcbiMj
IEdhdGhlclR5cGVzIHRpbWUgIiArICIoIiArIHNjcmlwdFVSTCArICIpOiIgKyAoZW5kVGltZSAt
IHN0YXJ0VGltZSkgKyAibXMiKTsKKyAgICAgICAgICAgIHZhciBpOworICAgICAgICAgICAgdmFy
IG5vZGU7CisgICAgICAgICAgICB2YXIgdHlwZXM7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgYWxsVHlwZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBub2RlID0gYWxsUmVx
dWVzdE5vZGVzW2ldOworICAgICAgICAgICAgICAgIHR5cGVzID0gYWxsVHlwZXNbaV07CisgICAg
ICAgICAgICAgICAgaWYgKGFsbFJlcXVlc3RzW2ldLnR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3Ig
PT09IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0
b3IuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuKQorICAgICAgICAg
ICAgICAgICAgICBub2RlLl9hdHRhY2htZW50cy5fcmV0dXJuVHlwZXMgPSB0eXBlczsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGUuX2F0dGFjaG1lbnRzLl90
eXBlcyA9IHR5cGVzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiXG4jIyBUb3RhbFRpbWUgdGltZTogIiArICIo
IiArIHNjcmlwdFVSTCArICIpOiIgKyAoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHN0YXJ0VGlt
ZSkgKyAibXMiKTsKKworICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFJ1bnRpbWVBZ2VudC5nZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoYWxs
UmVxdWVzdHMsIGhhbmRsZVR5cGVzKTsKKyAgICB9LAorICAgIAorICAgIC8vIFByaXZhdGUKKwor
ICAgIF9kZWZhdWx0UGFyc2VyU3RhdGU6IGZ1bmN0aW9uKCkgCisgICAgeworICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgc2hvdWxkU3RvcEVhcmx5OiBmYWxzZSwKKyAgICAgICAgICAgIHNr
aXBDaGlsZE5vZGVzOiBmYWxzZQorICAgICAgICB9OworICAgIH0sCisKKyAgICBfcmVjdXJzZTog
ZnVuY3Rpb24obm9kZSwgZnVuYywgc3RhdGUpIAorICAgIHsKKyAgICAgICAgaWYgKCFub2RlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChzdGF0ZS5zaG91bGRTdG9wRWFybHkg
fHwgc3RhdGUuc2tpcENoaWxkTm9kZXMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dmFyIFR5cGVzID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZTsKKworICAgICAg
ICBzd2l0Y2gobm9kZS50eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZXMuQXNzaWdubWVudEV4cHJl
c3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2Uobm9kZS5sZWZ0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlKG5vZGUucmlnaHQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFR5cGVzLkFycmF5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZWxlbWVudHMsIGZ1bmMs
IHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkJsb2NrU3Rh
dGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlQXJyYXkobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlcy5CaW5hcnlFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVu
Yyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubGVmdCwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnJpZ2h0LCBmdW5jLCBz
dGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5CcmVha1N0YXRl
bWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVHlwZXMuQ2F0Y2hDbGF1c2U6CisgICAgICAgICAgICBmdW5jKG5vZGUs
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wYXJhbSwgZnVuYywgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkNvbnRpbnVlU3RhdGVtZW50
OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlKG5vZGUubGFiZWwsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFR5cGVzLkRvV2hpbGVTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0
YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucHJlZGljYXRlLCBmdW5jLCBzdGF0ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5EZWJ1Z2dlclN0YXRlbWVu
dDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVHlwZXMuRW1wdHlTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUs
IHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkV4cHJlc3Np
b25TdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5leHByZXNzaW9uLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Gb3JTdGF0ZW1lbnQ6CisgICAgICAgICAgICBm
dW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5pbml0LCBm
dW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucHJlZGljYXRlLCBm
dW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUudXBkYXRlLCBmdW5j
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3Rh
dGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuRm9ySW5TdGF0ZW1l
bnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS5sZWZ0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
KG5vZGUucmlnaHQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9k
ZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
eXBlcy5GdW5jdGlvbkNhbGw6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5jYWxsZWUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmFyZ3VtZW50cywgZnVuYywgc3RhdGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25EZWNsYXJhdGlvbjoK
KyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZShub2RlLmlkLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXko
bm9kZS5wYXJhbXMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9k
ZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
eXBlcy5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsK
KyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5pZCwgZnVuYywgc3RhdGUpOworICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUucGFyYW1zLCBmdW5jLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuSWRlbnRpZmllcjoKKyAgICAgICAgICAgIGZ1
bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMu
SWZTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5jb25zZXF1ZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlKG5vZGUuYWx0ZXJuYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5MaXRlcmFsOgorICAgICAgICAgICAgZnVuYyhu
b2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5MYWJl
bGVkU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlKG5vZGUubGFiZWwsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRo
aXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUeXBlcy5Mb2dpY2FsRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMo
bm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxlZnQsIGZ1bmMs
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5yaWdodCwgZnVuYywgc3Rh
dGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuTWVtYmVyRXhwcmVz
c2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZShub2RlLm9iamVjdCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLnByb3BlcnR5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUeXBlcy5OZXdFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBz
dGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuY2FsbGVlLCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5hcmd1bWVudHMsIGZ1bmMs
IHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLk9iamVjdEV4
cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRo
aXMuX3JlY3Vyc2VBcnJheShub2RlLnByb3BlcnRpZXMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlByZWZpeEV4cHJlc3Npb246CisgICAgICAg
ICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5h
cmd1bWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
VHlwZXMuUHJvZ3JhbToKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuUHJvcGVydHk6CisgICAgICAgICAgICBmdW5j
KG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5rZXksIGZ1bmMs
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS52YWx1ZSwgZnVuYywgc3Rh
dGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuUG9zdGZpeEV4cHJl
c3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVHlwZXMuUmV0dXJuU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhu
b2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1lbnQsIGZ1
bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlNlcXVl
bmNlRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZXhwcmVzc2lvbnMsIGZ1bmMsIHN0YXRlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlN3aXRjaFN0YXRlbWVudDoKKyAg
ICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShu
b2RlLmRpc2NyaW1pbmFudCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZUFycmF5KG5vZGUuY2FzZXMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFR5cGVzLlN3aXRjaENhc2U6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRl
KTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRl
KTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmNvbnNlcXVlbnQsIGZ1bmMs
IHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlRlcm5hcnlF
eHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlKG5vZGUucHJlZGljYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlKG5vZGUuY29uc2VxdWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLmFsdGVybmF0ZSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVGhpc0V4cHJlc3Npb246CisgICAgICAgICAgICBm
dW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVz
LlRocm93U3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1lbnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlRyeVN0YXRlbWVudDoKKyAgICAgICAgICAg
IGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJsb2Nr
LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5ndWFy
ZGVkSGFuZGxlcnMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJh
eShub2RlLmhhbmRsZXJzLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
KG5vZGUuZmluYWxpemVyLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUeXBlcy5VbmFyeUV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0
YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgZnVuYywgc3Rh
dGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVmFyaWFibGVEZWNs
YXJhdGlvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZUFycmF5KG5vZGUuZGVjbGFyYXRpb25zLCBmdW5jLCBzdGF0ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAg
ICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9k
ZS5pZCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmluaXQs
IGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLldo
aWxlU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlKG5vZGUucHJlZGljYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVHlwZXMuV2l0aFN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMo
bm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLm9iamVjdCwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0
YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGUuc2tp
cENoaWxkTm9kZXMgPSBmYWxzZTsKKyAgICB9LAorCisgICAgX3JlY3Vyc2VBcnJheSA6IGZ1bmN0
aW9uKGFycmF5LCBmdW5jLCBzdGF0ZSkgCisgICAgeworICAgICAgICBmdW5jdGlvbiBmb3JFYWNo
KG5vZGUpIHsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZSwgZnVuYywgc3RhdGUpOwor
ICAgICAgICB9CisKKyAgICAgICAgYXJyYXkuZm9yRWFjaChmb3JFYWNoLmJpbmQodGhpcykpOwor
ICAgIH0sCisgICAgCisgICAgLy8gVGhpcyBmdW5jdGlvbiB0cmFuc2xhdGVzIGZyb20gZXNwcmlt
YSdzIEFTVCB0byBvdXJzLiBNb3N0bHksIHRoaXMgaXMganVzdCB0aGUgaWRlbnRpdHkgZnVuY3Rp
b24sIGJ1dCB0aGVyZSBhcmUgYSBmZXcgbm9kZXMgYW5kIGEgZmV3IHByb3BlcnRpZXMgdGhhdCBh
cmUgcmVuYW1lZC4KKyAgICAvLyBTcGVjaWZpY2FsbHksICd0ZXN0JyBwcm9wZXJ0eSBpcyByZW5h
bWVkIHRvICdwcmVkaWNhdGUnLCBwcmVmaXgvcG9zdGZpeCBub2RlcyBhcmUgbm93IHRvIHNlcGFy
YXRlIG5vZGVzLCBDYWxsRXhwcmVzc2lvbiBpcyByZW5hbWVkIHRvIEZ1bmN0aW9uQ2FsbCwgYW5k
IAorICAgIC8vIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBpcyByZW5hbWVkIHRvIFRlcm5hcnlFeHBy
ZXNzaW9uLgorICAgIF9jcmVhdGVJbnRlcm5hbEFTVCA6IGZ1bmN0aW9uKG5vZGUpIAorICAgIHsK
KyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAg
dmFyIHJldDsKKyAgICAgICAgc3dpdGNoKG5vZGUudHlwZSkgeworICAgICAgICBjYXNlICdBc3Np
Z25tZW50RXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAg
dHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Bc3NpZ25tZW50RXhwcmVz
c2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5vcGVyYXRvciwKKyAgICAgICAg
ICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmxlZnQpLAorICAgICAg
ICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnJpZ2h0KQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdBcnJheUV4cHJl
c3Npb24nOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuQXJyYXlFeHByZXNzaW9uLAorICAgICAgICAg
ICAgICAgIGVsZW1lbnRzOiBub2RlLmVsZW1lbnRzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbEFT
VC5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICdCbG9ja1N0YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5CbG9ja1N0YXRl
bWVudCwKKyAgICAgICAgICAgICAgICBib2R5OiBub2RlLmJvZHkubWFwKHRoaXMuX2NyZWF0ZUlu
dGVybmFsQVNULmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ0JpbmFyeUV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0ID0gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUu
QmluYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5vcGVyYXRv
ciwKKyAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmxl
ZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2Rl
LnJpZ2h0KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICdCcmVha1N0YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAg
dHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5CcmVha1N0YXRlbWVudCwK
KyAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5sYWJl
bCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnQ2Fs
bEV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRnVuY3Rpb25DYWxsLAorICAgICAg
ICAgICAgICAgIGNhbGxlZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5jYWxsZWUpLAor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50czogbm9kZS5hcmd1bWVudHMubWFwKHRoaXMuX2NyZWF0
ZUludGVybmFsQVNULmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ0NhdGNoQ2xhdXNlJzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkNh
dGNoQ2xhdXNlLAorICAgICAgICAgICAgICAgIHBhcmFtOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFT
VChub2RlLnBhcmFtKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5h
bEFTVChub2RlLmJvZHkpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXQgPSB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5U
ZXJuYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBwcmVkaWNhdGU6IHRoaXMuX2NyZWF0
ZUludGVybmFsQVNUKG5vZGUudGVzdCksCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogdGhp
cy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5jb25zZXF1ZW50KSwKKyAgICAgICAgICAgICAgICBh
bHRlcm5hdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYWx0ZXJuYXRlKQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdDb250aW51ZVN0YXRl
bWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Db250aW51ZVN0YXRlbWVudCwKKyAgICAgICAg
ICAgICAgICBsYWJlbDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5sYWJlbCkKKyAgICAg
ICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnRG9XaGlsZVN0YXRl
bWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Eb1doaWxlU3RhdGVtZW50LAorICAgICAgICAg
ICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYm9keSksCisgICAgICAg
ICAgICAgICAgcHJlZGljYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnRlc3QpCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0RlYnVnZ2Vy
U3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkRlYnVnZ2VyU3RhdGVtZW50CisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0VtcHR5U3RhdGVt
ZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkVtcHR5U3RhdGVtZW50CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0V4cHJlc3Npb25TdGF0ZW1lbnQn
OgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRXhwcmVzc2lvblN0YXRlbWVudCwKKyAgICAgICAgICAg
ICAgICBleHByZXNzaW9uOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmV4cHJlc3Npb24p
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0ZvclN0
YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Gb3JTdGF0ZW1lbnQsCisgICAgICAgICAg
ICAgICAgaW5pdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5pbml0KSwKKyAgICAgICAg
ICAgICAgICBwcmVkaWNhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUudGVzdCksCisg
ICAgICAgICAgICAgICAgdXBkYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnVwZGF0
ZSksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5i
b2R5KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdG
b3JJblN0YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Gb3JJblN0YXRlbWVudCwKKyAg
ICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmxlZnQpLAor
ICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnJpZ2h0
KSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmJv
ZHkpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0Z1
bmN0aW9uRGVjbGFyYXRpb24nOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAg
IHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRnVuY3Rpb25EZWNsYXJh
dGlvbiwKKyAgICAgICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5p
ZCksCisgICAgICAgICAgICAgICAgcGFyYW1zOiBub2RlLnBhcmFtcy5tYXAodGhpcy5fY3JlYXRl
SW50ZXJuYWxBU1QuYmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxBU1Qobm9kZS5ib2R5KSwKKyAgICAgICAgICAgICAgICBpc0dldHRlck9yU2V0
dGVyOiBmYWxzZSAvLyBUaGlzIGlzIG9idmlvdXMsIGJ1dCBpcyBjb252ZW5pZW50IG5vbmUgdGhl
IGxlc3MgYi9jIERlY2xhcmF0aW9ucyBhbmQgRXhwcmVzc2lvbnMgYXJlIG9mdGVuIGludGVydHdp
bmVkLgorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdG
dW5jdGlvbkV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAg
IHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRnVuY3Rpb25FeHByZXNz
aW9uLAorICAgICAgICAgICAgICAgIGlkOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmlk
KSwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0aGlzLl9jcmVhdGVJ
bnRlcm5hbEFTVC5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVh
dGVJbnRlcm5hbEFTVChub2RlLmJvZHkpLAorICAgICAgICAgICAgICAgIGlzR2V0dGVyT3JTZXR0
ZXI6IGZhbHNlIC8vIElmIHRydWUsIGl0IGlzIHNldCBpbiB0aGUgUHJvcGVydHkgQVNUIG5vZGUu
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0lkZW50
aWZpZXInOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuSWRlbnRpZmllciwKKyAgICAgICAgICAgICAg
ICBuYW1lOiBub2RlLm5hbWUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAnSWZTdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAg
ICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuSWZTdGF0ZW1l
bnQsCisgICAgICAgICAgICAgICAgcHJlZGljYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChu
b2RlLnRlc3QpLAorICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IHRoaXMuX2NyZWF0ZUludGVy
bmFsQVNUKG5vZGUuY29uc2VxdWVudCksCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlOiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmFsdGVybmF0ZSkKKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnTGl0ZXJhbCc6CisgICAgICAgICAgICByZXQg
PSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNU
VHlwZS5MaXRlcmFsLAorICAgICAgICAgICAgICAgIHZhbHVlOiBub2RlLnZhbHVlLAorICAgICAg
ICAgICAgICAgIHJhdzogbm9kZS5yYXcKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAnTGFiZWxlZFN0YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7
CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlw
ZS5MYWJlbGVkU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbEFTVChub2RlLmxhYmVsKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVh
dGVJbnRlcm5hbEFTVChub2RlLmJvZHkpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgJ0xvZ2ljYWxFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RU
eXBlLkxvZ2ljYWxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0
ZUludGVybmFsQVNUKG5vZGUubGVmdCksCisgICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMuX2Ny
ZWF0ZUludGVybmFsQVNUKG5vZGUucmlnaHQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgJ01lbWJlckV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0
ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFT
VFR5cGUuTWVtYmVyRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMuX2Ny
ZWF0ZUludGVybmFsQVNUKG5vZGUub2JqZWN0KSwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eTog
dGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5wcm9wZXJ0eSkKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnTmV3RXhwcmVzc2lvbic6CisgICAgICAg
ICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGVBU1QuQVNUVHlwZS5OZXdFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGNhbGxlZTogdGhp
cy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5jYWxsZWUpLAorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50czogbm9kZS5hcmd1bWVudHMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhp
cykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ09i
amVjdEV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5
cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuT2JqZWN0RXhwcmVzc2lvbiwK
KyAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBub2RlLnByb3BlcnRpZXMubWFwKHRoaXMuX2Ny
ZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgJ1Byb2dyYW0nOgorICAgICAgICAgICAgcmV0ID0geworICAg
ICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuUHJv
Z3JhbSwKKyAgICAgICAgICAgICAgICBib2R5OiBub2RlLmJvZHkubWFwKHRoaXMuX2NyZWF0ZUlu
dGVybmFsQVNULmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ1Byb3BlcnR5JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlByb3BlcnR5
LAorICAgICAgICAgICAgICAgIGtleTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5rZXkp
LAorICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnZh
bHVlKSwKKyAgICAgICAgICAgICAgICBraW5kOiBub2RlLmtpbmQKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBpZiAocmV0LmtpbmQgPT09ICJnZXQiIHx8IHJldC5raW5kID09PSAic2V0Iikg
eworICAgICAgICAgICAgICAgIHJldC52YWx1ZS5pc0dldHRlck9yU2V0dGVyID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICByZXQudmFsdWUuZ2V0dGVyT3JTZXR0ZXJSYW5nZSA9IHJldC5rZXkucmFu
Z2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnUmV0
dXJuU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlJldHVyblN0YXRlbWVudCwKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5hcmd1
bWVudCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAn
U2VxdWVuY2VFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlNlcXVlbmNlRXhwcmVz
c2lvbiwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uczogbm9kZS5leHByZXNzaW9ucy5tYXAo
dGhpcy5fY3JlYXRlSW50ZXJuYWxBU1QuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnU3dpdGNoU3RhdGVtZW50JzoKKyAgICAgICAg
ICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZUFTVC5BU1RUeXBlLlN3aXRjaFN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBkaXNjcmltaW5h
bnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuZGlzY3JpbWluYW50KSwKKyAgICAgICAg
ICAgICAgICBjYXNlczogbm9kZS5jYXNlcy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxBU1QuYmlu
ZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAnU3dpdGNoQ2FzZSc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Td2l0Y2hDYXNlLAorICAgICAg
ICAgICAgICAgIHByZWRpY2F0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS50ZXN0KSwK
KyAgICAgICAgICAgICAgICBjb25zZXF1ZW50OiBub2RlLmNvbnNlcXVlbnQubWFwKHRoaXMuX2Ny
ZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgJ1RoaXNFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RU
eXBlLlRoaXNFeHByZXNzaW9uCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgJ1Rocm93U3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlRocm93
U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5h
bEFTVChub2RlLmFyZ3VtZW50KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICdUcnlTdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmV0ID0geworICAgICAg
ICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuVHJ5U3Rh
dGVtZW50LAorICAgICAgICAgICAgICAgIGJsb2NrOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChu
b2RlLmJsb2NrKSwKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBhcmUgZ3VhcmRlZCBo
YW5kbGVycz8KKyAgICAgICAgICAgICAgICBndWFyZGVkSGFuZGxlcnM6IG5vZGUuZ3VhcmRlZEhh
bmRsZXJzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKSwKKyAgICAgICAg
ICAgICAgICBoYW5kbGVyczogbm9kZS5oYW5kbGVycy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxB
U1QuYmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgZmluYWxpemVyOiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbEFTVChub2RlLmZpbmFsaXplcikKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RU
eXBlLlVuYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5vcGVy
YXRvciwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qo
bm9kZS5hcmd1bWVudCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAnVXBkYXRlRXhwcmVzc2lvbic6CisgICAgICAgICAgICAvLyBQcmVmaXgvcG9zdGZp
eCBleHByZXNzaW9ucyBpbiBlc3ByaW1hLgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAg
ICAgICAgIHR5cGU6IChub2RlLnByZWZpeCA/IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFT
VFR5cGUuUHJlZml4RXhwcmVzc2lvbiA6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5
cGUuUG9zdGZpeEV4cHJlc3Npb24pLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBub2RlLm9w
ZXJhdG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFT
VChub2RlLmFyZ3VtZW50KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdWYXJpYWJsZURlY2xhcmF0aW9uJzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlZh
cmlhYmxlRGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBub2RlLmRl
Y2xhcmF0aW9ucy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxBU1QuYmluZCh0aGlzKSkKKyAgICAg
ICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVmFyaWFibGVEZWNs
YXJhdG9yJzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlZhcmlhYmxlRGVjbGFyYXRvciwKKyAgICAg
ICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5pZCksCisgICAgICAg
ICAgICAgICAgaW5pdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5pbml0KQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdXaGlsZVN0YXRlbWVu
dCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5XaGlsZVN0YXRlbWVudCwKKyAgICAgICAgICAgICAg
ICBwcmVkaWNhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUudGVzdCksCisgICAgICAg
ICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5ib2R5KQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdXaXRoU3RhdGVtZW50
JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0
b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLldpdGhTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAg
b2JqZWN0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLm9iamVjdCksCisgICAgICAgICAg
ICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5ib2R5KQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXQucmFuZ2UgPSBub2RlLnJhbmdlOworICAgICAgICByZXQuX2F0dGFjaG1lbnRzID0ge307IC8v
IFRoaXMgaXMgYW4gb2JqZWN0IGZvciB3aGljaCB5b3UgY2FuIGFkZCBmaWVsZHMgdG8gYW4gQVNU
IG5vZGUgd2l0aG91dCB3b3JyeWluZyBhYm91dCBwb2xsdXRpbmcgdGhlIHN5bnRheC1yZWxhdGVk
IGZpZWxkcyBvZiB0aGUgbm9kZS4KKworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KK307CisK
K1dlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKKworLyogVGhpcyBpcyBhIG5pY2Ugc3RhcnRpbmcgb2Zm
IHBvaW50IGlmIHlvdSB3YW50IHRvIHdyaXRlIGEgcmVjdXJzaXZlIGZ1bmN0aW9uOgorICoKKyAq
ICAgdmFyIFR5cGVzID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZTsKKyAqICAg
c3dpdGNoICguLi4pIHsKKyAqICAgY2FzZSBUeXBlcy5Bc3NpZ25tZW50RXhwcmVzc2lvbjoKKyAq
ICAgY2FzZSBUeXBlcy5BcnJheUV4cHJlc3Npb246CisgKiAgIGNhc2UgVHlwZXMuQmxvY2tTdGF0
ZW1lbnQ6CisgKiAgIGNhc2UgVHlwZXMuQmluYXJ5RXhwcmVzc2lvbjoKKyAqICAgY2FzZSBUeXBl
cy5CcmVha1N0YXRlbWVudDoKKyAqICAgY2FzZSBUeXBlcy5DYXRjaENsYXVzZToKKyAqICAgY2Fz
ZSBUeXBlcy5Db250aW51ZVN0YXRlbWVudDoKKyAqICAgY2FzZSBUeXBlcy5Eb1doaWxlU3RhdGVt
ZW50OgorICogICBjYXNlIFR5cGVzLkRlYnVnZ2VyU3RhdGVtZW50OgorICogICBjYXNlIFR5cGVz
LkVtcHR5U3RhdGVtZW50OgorICogICBjYXNlIFR5cGVzLkV4cHJlc3Npb25TdGF0ZW1lbnQ6Cisg
KiAgIGNhc2UgVHlwZXMuRm9yU3RhdGVtZW50OgorICogICBjYXNlIFR5cGVzLkZvckluU3RhdGVt
ZW50OgorICogICBjYXNlIFR5cGVzLkZ1bmN0aW9uQ2FsbDoKKyAqICAgY2FzZSBUeXBlcy5GdW5j
dGlvbkRlY2xhcmF0aW9uOgorICogICBjYXNlIFR5cGVzLkZ1bmN0aW9uRXhwcmVzc2lvbjoKKyAq
ICAgY2FzZSBUeXBlcy5JZGVudGlmaWVyOgorICogICBjYXNlIFR5cGVzLklmU3RhdGVtZW50Ogor
ICogICBjYXNlIFR5cGVzLkxpdGVyYWw6CisgKiAgIGNhc2UgVHlwZXMuTGFiZWxlZFN0YXRlbWVu
dDoKKyAqICAgY2FzZSBUeXBlcy5Mb2dpY2FsRXhwcmVzc2lvbjoKKyAqICAgY2FzZSBUeXBlcy5N
ZW1iZXJFeHByZXNzaW9uOgorICogICBjYXNlIFR5cGVzLk5ld0V4cHJlc3Npb246CisgKiAgIGNh
c2UgVHlwZXMuT2JqZWN0RXhwcmVzc2lvbjoKKyAqICAgY2FzZSBUeXBlcy5QcmVmaXhFeHByZXNz
aW9uOgorICogICBjYXNlIFR5cGVzLlByb2dyYW06CisgKiAgIGNhc2UgVHlwZXMuUHJvcGVydHk6
CisgKiAgIGNhc2UgVHlwZXMuUG9zdGZpeEV4cHJlc3Npb246CisgKiAgIGNhc2UgVHlwZXMuUmV0
dXJuU3RhdGVtZW50OgorICogICBjYXNlIFR5cGVzLlNlcXVlbmNlRXhwcmVzc2lvbjoKKyAqICAg
Y2FzZSBUeXBlcy5Td2l0Y2hTdGF0ZW1lbnQ6CisgKiAgIGNhc2UgVHlwZXMuU3dpdGNoQ2FzZToK
KyAqICAgY2FzZSBUeXBlcy5UZXJuYXJ5RXhwcmVzc2lvbjoKKyAqICAgY2FzZSBUeXBlcy5UaGlz
RXhwcmVzc2lvbjoKKyAqICAgY2FzZSBUeXBlcy5UaHJvd1N0YXRlbWVudDoKKyAqICAgY2FzZSBU
eXBlcy5UcnlTdGF0ZW1lbnQ6CisgKiAgIGNhc2UgVHlwZXMuVW5hcnlFeHByZXNzaW9uOgorICog
ICBjYXNlIFR5cGVzLlZhcmlhYmxlRGVjbGFyYXRpb246CisgKiAgIGNhc2UgVHlwZXMuVmFyaWFi
bGVEZWNsYXJhdG9yOgorICogICBjYXNlIFR5cGVzLldoaWxlU3RhdGVtZW50OgorICogICBjYXNl
IFR5cGVzLldpdGhTdGF0ZW1lbnQ6CisgKiAgIH0KKyAqCisqLwpJbmRleDogU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGVudFZpZXdDb250YWluZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29u
dGVudFZpZXdDb250YWluZXIuanMJKHJldmlzaW9uIDE3MTkzNSkKKysrIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRlbnRWaWV3Q29udGFpbmVyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTAsMTYgKzE5MCwxOSBAQCBXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdD
b250YWluZXIucHJvdG90CiAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50SW5kZXggPT09IGluZGV4
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIEhpZGUgdGhlIGN1cnJlbnRseSB2
aXNpYmxlIGNvbnRlbnQgdmlldy4KICAgICAgICAgdmFyIHByZXZpb3VzRW50cnkgPSB0aGlzLmN1
cnJlbnRCYWNrRm9yd2FyZEVudHJ5OwotICAgICAgICBpZiAocHJldmlvdXNFbnRyeSkKLSAgICAg
ICAgICAgIHRoaXMuX2hpZGVFbnRyeShwcmV2aW91c0VudHJ5KTsKLQogICAgICAgICB0aGlzLl9j
dXJyZW50SW5kZXggPSBpbmRleDsKICAgICAgICAgdmFyIGN1cnJlbnRFbnRyeSA9IHRoaXMuY3Vy
cmVudEJhY2tGb3J3YXJkRW50cnk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGN1cnJlbnRFbnRy
eSk7CiAKLSAgICAgICAgdGhpcy5fc2hvd0VudHJ5KGN1cnJlbnRFbnRyeSk7CisgICAgICAgIHZh
ciBpc05ld0NvbnRlbnRWaWV3ID0gIXByZXZpb3VzRW50cnkgfHwgIWN1cnJlbnRFbnRyeS5jb250
ZW50Vmlldy52aXNpYmxlOworICAgICAgICBpZiAoaXNOZXdDb250ZW50VmlldykgeworICAgICAg
ICAgICAgLy8gSGlkZSB0aGUgY3VycmVudGx5IHZpc2libGUgY29udGVudCB2aWV3LgorICAgICAg
ICAgICAgaWYgKHByZXZpb3VzRW50cnkpCisgICAgICAgICAgICAgICAgdGhpcy5faGlkZUVudHJ5
KHByZXZpb3VzRW50cnkpOworICAgICAgICAgICAgdGhpcy5fc2hvd0VudHJ5KGN1cnJlbnRFbnRy
eSwgdHJ1ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhpcy5fc2hvd0VudHJ5KGN1
cnJlbnRFbnRyeSwgZmFsc2UpOwogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5FdmVudC5DdXJyZW50Q29udGVu
dFZpZXdEaWRDaGFuZ2UpOwogICAgIH0sCkBAIC0yNDAsNyArMjQzLDcgQEAgV2ViSW5zcGVjdG9y
LkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdAogCiAgICAgICAgIC8vIFJlLXNob3cgdGhlIGN1
cnJlbnQgZW50cnksIGJlY2F1c2UgaXRzIGNvbnRlbnQgdmlldyBpbnN0YW5jZSB3YXMgcmVwbGFj
ZWQuCiAgICAgICAgIGlmIChjdXJyZW50bHlTaG93aW5nKSB7Ci0gICAgICAgICAgICB0aGlzLl9z
aG93RW50cnkodGhpcy5jdXJyZW50QmFja0ZvcndhcmRFbnRyeSk7CisgICAgICAgICAgICB0aGlz
Ll9zaG93RW50cnkodGhpcy5jdXJyZW50QmFja0ZvcndhcmRFbnRyeSwgdHJ1ZSk7CiAgICAgICAg
ICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuQ29udGVudFZp
ZXdDb250YWluZXIuRXZlbnQuQ3VycmVudENvbnRlbnRWaWV3RGlkQ2hhbmdlKTsKICAgICAgICAg
fQogICAgIH0sCkBAIC0yOTYsNyArMjk5LDcgQEAgV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29u
dGFpbmVyLnByb3RvdAogICAgICAgICBjb25zb2xlLmFzc2VydChjdXJyZW50RW50cnkgfHwgKCFj
dXJyZW50RW50cnkgJiYgdGhpcy5fY3VycmVudEluZGV4ID09PSAtMSkpOwogCiAgICAgICAgIGlm
IChjdXJyZW50RW50cnkgJiYgY3VycmVudEVudHJ5LmNvbnRlbnRWaWV3ICE9PSBvbGRDdXJyZW50
Q29udGVudFZpZXcgfHwgYmFja0ZvcndhcmRMaXN0RGlkQ2hhbmdlKSB7Ci0gICAgICAgICAgICB0
aGlzLl9zaG93RW50cnkoY3VycmVudEVudHJ5KTsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dFbnRy
eShjdXJyZW50RW50cnksIHRydWUpOwogICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLkV2ZW50LkN1cnJlbnRD
b250ZW50Vmlld0RpZENoYW5nZSk7CiAgICAgICAgIH0KICAgICB9LApAQCAtMzUyLDcgKzM1NSw3
IEBAIFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3QKICAgICAgICAgaWYg
KCFjdXJyZW50RW50cnkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdGhpcy5fc2hv
d0VudHJ5KGN1cnJlbnRFbnRyeSk7CisgICAgICAgIHRoaXMuX3Nob3dFbnRyeShjdXJyZW50RW50
cnksIHRydWUpOwogICAgIH0sCiAKICAgICBoaWRkZW46IGZ1bmN0aW9uKCkKQEAgLTM5MywxMiAr
Mzk2LDEyIEBAIFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0NvbnRhaW5lci5wcm90b3QKICAgICAg
ICAgY29udGVudFZpZXcuY2xvc2VkKCk7CiAgICAgfSwKIAotICAgIF9zaG93RW50cnk6IGZ1bmN0
aW9uKGVudHJ5KQorICAgIF9zaG93RW50cnk6IGZ1bmN0aW9uKGVudHJ5LCBzaG91bGRDYWxsU2hv
d24pCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChlbnRyeSBpbnN0YW5jZW9mIFdlYklu
c3BlY3Rvci5CYWNrRm9yd2FyZEVudHJ5KTsKIAogICAgICAgICB0aGlzLl9hZGRDb250ZW50Vmll
d0VsZW1lbnQoZW50cnkuY29udGVudFZpZXcpOwotICAgICAgICBlbnRyeS5wcmVwYXJlVG9TaG93
KCk7CisgICAgICAgIGVudHJ5LnByZXBhcmVUb1Nob3coc2hvdWxkQ2FsbFNob3duKTsKICAgICB9
LAogCiAgICAgX2hpZGVFbnRyeTogZnVuY3Rpb24oZW50cnkpCkluZGV4OiBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5qcwkocmV2aXNpb24gMTcxOTM1KQorKysgU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yID0gZnVuYwogCiAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuY2FsbCh0aGlzLCBudWxs
LCBudWxsLCB0aGlzKTsKIAorICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciA9IG51bGw7IAor
CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB0aGlzIGp1c3QganVtcHMgYmV0d2VlbiByZXNvdXJj
ZXMgYW5kIHJlbGF0ZWQgc291cmNlIG1hcCByZXNvdXJjZXMuIEl0IGRvZXNuJ3QgImp1bXAgdG8g
c3ltYm9sIiB5ZXQuCiAgICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0
ZSgpOwogCkBAIC01Myw2ICs1NSw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ciA9IGZ1bmMKIAogICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5QYXVzZWQsIHRoaXMu
X2RlYnVnZ2VyRGlkUGF1c2UsIHRoaXMpOwogICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVu
dC5SZXN1bWVkLCB0aGlzLl9kZWJ1Z2dlckRpZFJlc3VtZSwgdGhpcyk7CisgICAgICAgIFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVi
dWdnZXJNYW5hZ2VyLkV2ZW50LkNhbGxGcmFtZXNEaWRDaGFuZ2UsIHRoaXMuX2NhbGxGcmFtZURp
ZENoYW5nZSwgdGhpcyk7CiAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2Vy
LmFjdGl2ZUNhbGxGcmFtZSkKICAgICAgICAgICAgIHRoaXMuX2RlYnVnZ2VyRGlkUGF1c2UoKTsK
IApAQCAtMTAwLDYgKzEwMywxNSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90CiAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VDb2RlOwogICAgIH0sCiAKKyAgICBz
aG93bjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy9jb25zb2xlLnRyYWNlKCk7CisgICAg
ICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zaG93bi5jYWxsKHRoaXMpOwor
CisgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IpCisgICAgICAgICAgICB0aGlz
Ll90eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1lKCk7CisgICAgfSwKKwogICAgIGhpZGRlbjogZnVu
Y3Rpb24oKQogICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBl
LmhpZGRlbi5jYWxsKHRoaXMpOwpAQCAtMTA5LDYgKzEyMSw5IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgdGhpcy5fZGlzbWlzc1BvcG92ZXIoKTsK
ICAgICAgICAgCiAgICAgICAgIHRoaXMuX2Rpc21pc3NFZGl0aW5nQ29udHJvbGxlcih0cnVlKTsK
KworICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQorICAgICAgICAgICAgdGhp
cy5fdHlwZVRva2VuQW5ub3RhdG9yLnBhdXNlKCk7CiAgICAgfSwKIAogICAgIGNsb3NlOiBmdW5j
dGlvbigpCkBAIC0yMzIsNiArMjQ3LDI0IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5wcm90b3QKICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRhYmxlTWFya2VycyhyYW5n
ZSk7CiAgICAgfSwKIAorICAgIHRvZ2dsZVR5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgaWYgKCF0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdmFyIGlzQWN0aXZhdGVkID0gdGhpcy5fdHlwZVRva2Vu
QW5ub3RhdG9yLnRvZ2dsZVR5cGVBbm5vdGF0aW9ucygpOworICAgICAgICBpZiAoaXNBY3RpdmF0
ZWQpIHsKKyAgICAgICAgICAgIFJ1bnRpbWVBZ2VudC5lbmFibGVIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsaW5nKCk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5m
b3JtYXRpb25TZXR0aW5nLnZhbHVlID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFJ1bnRpbWVBZ2VudC5kaXNhYmxlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZygpOworICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGlu
Zy52YWx1ZSA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5U
cmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOworICAgICAgICByZXR1cm4gaXNBY3RpdmF0ZWQ7Cisg
ICAgfSwKKwogICAgIC8vIFByaXZhdGUKIAogICAgIF91bmZvcm1hdHRlZExpbmVJbmZvRm9yRWRp
dG9yTGluZUluZm86IGZ1bmN0aW9uKGxpbmVJbmZvKQpAQCAtMzU2LDYgKzM4OSwxMCBAQCBXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAKICAgICAgICAgdGhpcy5fY29u
dGVudFdpbGxQb3B1bGF0ZShjb250ZW50KTsKICAgICAgICAgdGhpcy5zdHJpbmcgPSBjb250ZW50
OworCisgICAgICAgIGlmICh0aGlzLl9jb2RlTWlycm9yLmdldE1vZGUoKS5uYW1lID09PSAiamF2
YXNjcmlwdCIpCisgICAgICAgICAgICB0aGlzLl9tYWtlVHlwZVRva2VuQW5ub3RhdG9yKCk7CisK
ICAgICAgICAgdGhpcy5fY29udGVudERpZFBvcHVsYXRlKCk7CiAgICAgfSwKIApAQCAtOTQ5LDEy
ICs5ODYsMjIgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAg
IF9kZWJ1Z2dlckRpZFBhdXNlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMu
X3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKKyAgICAgICAgaWYgKHRoaXMu
X3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUp
CisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1lKCk7CisgICAgfSwK
KworICAgIF9jYWxsRnJhbWVEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KSAKKyAgICB7CisgICAg
ICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3Rh
dG9yLmlzQWN0aXZlKQorICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlc3Vt
ZSgpOwogICAgIH0sCiAKICAgICBfZGVidWdnZXJEaWRSZXN1bWU6IGZ1bmN0aW9uKGV2ZW50KQog
ICAgIHsKICAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgp
OwogICAgICAgICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOworICAgICAgICBpZiAodGhpcy5fdHlw
ZVRva2VuQW5ub3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkKKyAg
ICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZXN1bWUoKTsKICAgICB9LAogCiAg
ICAgX3NvdXJjZUNvZGVTb3VyY2VNYXBBZGRlZDogZnVuY3Rpb24oZXZlbnQpCkBAIC05NzQsNiAr
MTAyMSw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAg
ICAgICAgIG1vZGUgPSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9s
bGVyLk1vZGUuTWFya2VkVG9rZW5zOwogICAgICAgICBlbHNlIGlmICgodGhpcy5fc291cmNlQ29k
ZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZSB8fCB0aGlzLl9zb3Vy
Y2VDb2RlLnNvdXJjZU1hcHMubGVuZ3RoICE9PSAwKSAmJiBXZWJJbnNwZWN0b3IubW9kaWZpZXJL
ZXlzLm1ldGFLZXkgJiYgIVdlYkluc3BlY3Rvci5tb2RpZmllcktleXMuYWx0S2V5ICYmICFXZWJJ
bnNwZWN0b3IubW9kaWZpZXJLZXlzLnNoaWZ0S2V5KQogICAgICAgICAgICAgbW9kZSA9IFdlYklu
c3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5Ob25TeW1ib2xU
b2tlbnM7CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlz
Ll90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUpCisgICAgICAgICAgICBtb2RlID0gV2ViSW5z
cGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRU
eXBlSW5mb3JtYXRpb247CiAKICAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5l
bmFibGVkID0gbW9kZSAhPT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29u
dHJvbGxlci5Nb2RlLk5vbmU7CiAKQEAgLTk5Miw2ICsxMDQxLDcgQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICAgICAgdGhpcy5fZGlzbWlzc1BvcG92
ZXIoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0RXhwcmVzc2lvbjoK
KyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9s
bGVyLk1vZGUuSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjoKICAgICAgICAgICAgIHRoaXMudG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIubW91c2VPdmVyRGVsYXlEdXJhdGlvbiA9IFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5EdXJhdGlvblRvTW91c2VPdmVyVG9rZW5Ub01ha2VIb3Zl
cmVkVG9rZW47CiAgICAgICAgICAgICB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vdXNl
T3V0UmVsZWFzZURlbGF5RHVyYXRpb24gPSBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IuRHVyYXRpb25Ub01vdXNlT3V0T2ZIb3ZlcmVkVG9rZW5Ub1JlbGVhc2U7CiAgICAgICAgICAg
ICB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmNsYXNzTmFtZUZvckhpZ2hsaWdodGVkUmFu
Z2UgPSBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuSG92ZXJlZEV4cHJlc3Npb25I
aWdobGlnaHRTdHlsZUNsYXNzTmFtZTsKQEAgLTEwMjksNiArMTA3OSw3IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgICAgIHRoaXMuX2Rpc21pc3NQ
b3BvdmVyKCk7CiAgICAgfSwKIAorCiAgICAgdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGln
aHRlZFJhbmdlV2FzQ2xpY2tlZDogZnVuY3Rpb24odG9rZW5UcmFja2luZ0NvbnRyb2xsZXIpCiAg
ICAgewogICAgICAgICBpZiAodGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5tb2RlICE9PSBX
ZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTm9uU3lt
Ym9sVG9rZW5zKQpAQCAtMTA1Nyw2ICsxMTA4LDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAg
ICAgIGlmICh0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vZGUgPT09IFdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUlu
Zm9ybWF0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl90b2tlblRyYWNraW5nQ29udHJvbGxlckhp
Z2hsaWdodGVkSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbihjYW5kaWRhdGUpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgaWYgKHRoaXMudG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIubW9kZSA9PT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29u
dHJvbGxlci5Nb2RlLk1hcmtlZFRva2VucykgewogICAgICAgICAgICAgdmFyIG1hcmtlcnMgPSB0
aGlzLm1hcmtlcnNBdFBvc2l0aW9uKGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZS5zdGFydCk7
CiAgICAgICAgICAgICBpZiAobWFya2Vycy5sZW5ndGggPiAwKQpAQCAtMTExMiwyNiArMTE2OCw2
NCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIERl
YnVnZ2VyQWdlbnQuZXZhbHVhdGVPbkNhbGxGcmFtZS5pbnZva2Uoe2NhbGxGcmFtZUlkOiBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZS5pZCwgZXhwcmVzc2lvbjog
Y2FuZGlkYXRlLmV4cHJlc3Npb24sIG9iamVjdEdyb3VwOiAicG9wb3ZlciIsIGRvTm90UGF1c2VP
bkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZTogdHJ1ZX0sIHBvcHVsYXRlLmJpbmQodGhpcykpOwog
ICAgIH0sCiAKLSAgICBfc2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGNvbnRlbnQpCisgICAgX3Rva2Vu
VHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOiBm
dW5jdGlvbihjYW5kaWRhdGUpCiAgICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnRv
a2VuVHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KGNhbmRpZGF0ZS5leHByZXNzaW9uKTsKIAotICAgICAgICB2YXIgY2FuZGlkYXRlID0gdGhpcy50
b2tlblRyYWNraW5nQ29udHJvbGxlci5jYW5kaWRhdGU7Ci0gICAgICAgIGlmICghY2FuZGlkYXRl
KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgc291cmNlQ29kZSA9IHRoaXMuX3Nv
dXJjZUNvZGU7CisgICAgICAgIHZhciBzb3VyY2VJRCA9IHNvdXJjZUNvZGUuc2NyaXB0c1swXS5p
ZDsKKyAgICAgICAgdmFyIHJhbmdlID0gY2FuZGlkYXRlLmhvdmVyZWRUb2tlblJhbmdlOworICAg
ICAgICB2YXIgb2Zmc2V0OwogCi0gICAgICAgIGNvbnRlbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuUG9wb3ZlckRlYnVnZ2VyQ29udGVudFN0eWxlQ2xh
c3NOYW1lKTsKKyAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcCkKKyAgICAgICAg
ICAgIG9mZnNldCA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFs
T2Zmc2V0KHJhbmdlLnN0YXJ0LmxpbmUsIHJhbmdlLnN0YXJ0LmNoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5fY29kZU1p
cnJvci5nZXREb2MoKS5pbmRleEZyb21Qb3MoeyBsaW5lIDogcmFuZ2Uuc3RhcnQubGluZSwgY2gg
OiByYW5nZS5zdGFydC5jaCB9KTsKKworICAgICAgICB2YXIgYWxsUmVxdWVzdHMgPSBbeworICAg
ICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGVBU1QuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5UeXBlUHJvZmlsZXJTZWFyY2hEZXNj
cmlwdG9yTm9ybWFsLAorICAgICAgICAgICAgc291cmNlSUQ6IHNvdXJjZUlELAorICAgICAgICAg
ICAgZGl2b3Q6IG9mZnNldAorICAgICAgICB9XTsKKworICAgICAgICBmdW5jdGlvbiBoYW5kbGVy
KGVycm9yLCBhbGxUeXBlcykgeworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSAhPT0gdGhpcy50
b2tlblRyYWNraW5nQ29udHJvbGxlci5jYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChhbGxUeXBlcy5sZW5ndGggPT09IDEpOwor
ICAgICAgICAgICAgaWYgKCFhbGxUeXBlcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgdmFyIHR5cGVzID0gYWxsVHlwZXNbMF07CisgICAgICAgICAgICBpZiAo
dHlwZXMuZGlzcGxheVR5cGVOYW1lKQorICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVy
Rm9yVHlwZXModHlwZXMsIG51bGwsICJUeXBlIGluZm9ybWF0aW9uIGZvcjogIiArIGNhbmRpZGF0
ZS5leHByZXNzaW9uKTsKKyAgICAgICAgfQorICAgICAgICBSdW50aW1lQWdlbnQuZ2V0UnVudGlt
ZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKGFsbFJlcXVlc3RzLCBoYW5kbGVyLmJpbmQodGhp
cykpOwogCi0gICAgICAgIHZhciByZWN0cyA9IHRoaXMucmVjdHNGb3JSYW5nZShjYW5kaWRhdGUu
aG92ZXJlZFRva2VuUmFuZ2UpOwotICAgICAgICB2YXIgYm91bmRzID0gV2ViSW5zcGVjdG9yLlJl
Y3QudW5pb25PZlJlY3RzKHJlY3RzKTsKKyAgICB9LAorCisgICAgX3Nob3dQb3BvdmVyOiBmdW5j
dGlvbihjb250ZW50LCBib3VuZHMpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlz
LnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZSB8fCBib3VuZHMpOwogCi0gICAgICAg
IHRoaXMuX3BvcG92ZXIgPSB0aGlzLl9wb3BvdmVyIHx8IG5ldyBXZWJJbnNwZWN0b3IuUG9wb3Zl
cih0aGlzKTsKKyAgICAgICAgaWYgKCFib3VuZHMpIHsKKyAgICAgICAgICAgIHZhciBjYW5kaWRh
dGUgPSB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZTsKKyAgICAgICAgICAg
IGlmICghY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHZh
ciByZWN0cyA9IHRoaXMucmVjdHNGb3JSYW5nZShjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2Up
OworICAgICAgICAgICAgYm91bmRzID0gV2ViSW5zcGVjdG9yLlJlY3QudW5pb25PZlJlY3RzKHJl
Y3RzKTsKKyAgICAgICAgICAgIC8vdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5oaWdobGln
aHRSYW5nZShjYW5kaWRhdGUuZXhwcmVzc2lvblJhbmdlKTsKKyAgICAgICAgfQorCisgICAgICAg
IGNvbnRlbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
UG9wb3ZlckRlYnVnZ2VyQ29udGVudFN0eWxlQ2xhc3NOYW1lKTsKKworICAgICAgICBpZiAodGhp
cy5fcG9wb3ZlcikKKyAgICAgICAgICAgIHRoaXMuX3BvcG92ZXIuZGlzbWlzcygpOworICAgICAg
ICB0aGlzLl9wb3BvdmVyID0gbmV3IFdlYkluc3BlY3Rvci5Qb3BvdmVyKG51bGwpOworICAgICAg
ICAvL3RoaXMuX3BvcG92ZXIgPSB0aGlzLl9wb3BvdmVyIHx8IG5ldyBXZWJJbnNwZWN0b3IuUG9w
b3Zlcih0aGlzKTsKICAgICAgICAgdGhpcy5fcG9wb3Zlci5jb250ZW50ID0gY29udGVudDsKICAg
ICAgICAgdGhpcy5fcG9wb3Zlci5wcmVzZW50KGJvdW5kcy5wYWQoNSksIFtXZWJJbnNwZWN0b3Iu
UmVjdEVkZ2UuTUlOX1ksIFdlYkluc3BlY3Rvci5SZWN0RWRnZS5NQVhfWSwgV2ViSW5zcGVjdG9y
LlJlY3RFZGdlLk1BWF9YXSk7CiAKLSAgICAgICAgdGhpcy5fdHJhY2tQb3BvdmVyRXZlbnRzKCk7
Ci0KLSAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5oaWdobGlnaHRSYW5nZShj
YW5kaWRhdGUuZXhwcmVzc2lvblJhbmdlKTsKKyAgICAgICAgLy90aGlzLl90cmFja1BvcG92ZXJF
dmVudHMoKTsKICAgICB9LAogCiAgICAgX3Nob3dQb3BvdmVyRm9yRnVuY3Rpb246IGZ1bmN0aW9u
KGRhdGEpCkBAIC0xMjQ2LDYgKzEzNDAsMjQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0
RWRpdG9yLnByb3RvdAogICAgICAgICB0aGlzLl9zaG93UG9wb3Zlcihjb250ZW50KTsKICAgICB9
LAogCisgICAgX3Nob3dQb3BvdmVyRm9yVHlwZXM6IGZ1bmN0aW9uKHR5cGVzLCBib3VuZHMsIHRp
dGxlKQorICAgIHsKKyAgICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKyAgICAgICAgY29udGVudC5jbGFzc05hbWUgPSAib2JqZWN0IGV4cGFuZGFibGUi
OworCisgICAgICAgIHZhciB0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICAgICAgdGl0bGVFbGVtZW50LmNsYXNzTmFtZSA9ICJ0aXRsZSI7CisgICAgICAg
IHRpdGxlRWxlbWVudC50ZXh0Q29udGVudCA9IHRpdGxlOworICAgICAgICBjb250ZW50LmFwcGVu
ZENoaWxkKHRpdGxlRWxlbWVudCk7CisKKyAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5z
cGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbih0eXBlcyk7CisgICAgICAgIHNlY3Rpb24uZXhw
YW5kZWQgPSB0cnVlOworICAgICAgICBzZWN0aW9uLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiYm9k
eSIpOworICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxlbWVudCk7CisKKyAg
ICAgICAgdGhpcy5fc2hvd1BvcG92ZXIoY29udGVudCwgYm91bmRzKTsKKyAgICB9LAorCiAgICAg
d2lsbERpc21pc3NQb3BvdmVyOiBmdW5jdGlvbihwb3BvdmVyKQogICAgIHsKICAgICAgICAgdGhp
cy50b2tlblRyYWNraW5nQ29udHJvbGxlci5yZW1vdmVIaWdobGlnaHRlZFJhbmdlKCk7CkBAIC0x
MzYxLDYgKzE0NzMsMjUgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3Rv
dAogICAgICAgICB0aGlzLl9pZ25vcmVDb250ZW50RGlkQ2hhbmdlLS07CiAKICAgICAgICAgZGVs
ZXRlIHRoaXMuX2VkaXRpbmdDb250cm9sbGVyOworICAgIH0sCisKKyAgICBfcHJldHR5UHJpbnQ6
IGZ1bmN0aW9uKHByZXR0eSkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
LnByb3RvdHlwZS5fcHJldHR5UHJpbnQuY2FsbCh0aGlzLCBwcmV0dHkpOworCisgICAgICAgIGlm
ICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlz
QWN0aXZlKQorICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlc2V0KCk7Cisg
ICAgfSwKKworICAgIF9tYWtlVHlwZVRva2VuQW5ub3RhdG9yOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZUNvZGUuc2NyaXB0cy5sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgUnVudGltZUFnZW50LmVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxpbmcoKTsKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yID0gbmV3IFdlYklu
c3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IodGhpcywgdGhpcy5fc291cmNlQ29kZS5zY3JpcHRz
WzBdKTsKKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1h
dGlvblNldHRpbmcudmFsdWUpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3Iu
cmVzZXQoKTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250
ZW50Vmlldy5qcwkocmV2aXNpb24gMTcxOTM1KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDYgKzQ1LDE0IEBAIFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmll
dyA9IGYKICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtID0gbmV3IFdl
Ykluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtKCJwcmV0dHktcHJpbnQiLCB0
b29sVGlwLCBhY3RpdmF0ZWRUb29sVGlwLCAiSW1hZ2VzL05hdmlnYXRpb25JdGVtQ3VybGV5QnJh
Y2VzLnN2ZyIsIDE2LCAxNik7CiAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9u
SXRlbS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5F
dmVudC5DbGlja2VkLCB0aGlzLl90b2dnbGVQcmV0dHlQcmludCwgdGhpcyk7CiAgICAgdGhpcy5f
cHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gZmFsc2U7IC8vIEVuYWJs
ZWQgd2hlbiB0aGUgdGV4dCBlZGl0b3IgaXMgcG9wdWxhdGVkIHdpdGggY29udGVudC4KKworICAg
IHZhciB0b29sVGlwVHlwZXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgdHlwZSBpbmZv
cm1hdGlvbiIpOworICAgIHZhciBhY3RpdmF0ZWRUb29sVGlwVHlwZXMgPSBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkhpZGUgdHlwZSBpbmZvcm1hdGlvbiIpOworICAgIHRoaXMuX3Nob3dUeXBlc0J1
dHRvbk5hdmlnYXRpb25JdGVtID0gbmV3IFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmln
YXRpb25JdGVtKCJzaG93LXR5cGVzMiIsIHRvb2xUaXBUeXBlcywgYWN0aXZhdGVkVG9vbFRpcFR5
cGVzLCAiSW1hZ2VzL05hdmlnYXRpb25JdGVtVGF1LnN2ZyIsIDE2LCAxNik7CisgICAgdGhpcy5f
c2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0
b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgdGhpcy5fdG9nZ2xlVHlwZUFu
bm90YXRpb25zLCB0aGlzKTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRl
bS5lbmFibGVkID0gZmFsc2U7CisKKyAgICBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBl
SW5mb3JtYXRpb25TZXR0aW5nLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNldHRpbmcu
RXZlbnQuQ2hhbmdlZCwgdGhpcy5fc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5n
Q2hhbmdlZCwgdGhpcyk7CiB9OwogCiBXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZp
ZXcuU3R5bGVDbGFzc05hbWUgPSAidGV4dCI7CkBAIC01Niw3ICs2NCw3IEBAIFdlYkluc3BlY3Rv
ci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm8KIAogICAgIGdldCBuYXZpZ2F0aW9uSXRlbXMo
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFt0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRp
b25JdGVtXTsKKyAgICAgICAgcmV0dXJuIFt0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRp
b25JdGVtLCB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbV07CiAgICAgfSwKIAog
ICAgIGdldCBtYW5hZ2VzT3duSXNzdWVzKCkKQEAgLTE5NCw2ICsyMDIsOCBAQCBXZWJJbnNwZWN0
b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvCiAgICAgX2NvbnRlbnREaWRQb3B1bGF0ZTog
ZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5h
dmlnYXRpb25JdGVtLmVuYWJsZWQgPSB0aGlzLl90ZXh0RWRpdG9yLmNhbkJlRm9ybWF0dGVkKCk7
CisgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSAh
IXRoaXMuX3RleHRFZGl0b3IuX3R5cGVUb2tlbkFubm90YXRvcjsKKyAgICAgICAgdGhpcy5fc2hv
d1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gV2ViSW5zcGVjdG9yLnNob3dK
YXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZTsKICAgICB9LAogCiAgICAgX3Rv
Z2dsZVByZXR0eVByaW50OiBmdW5jdGlvbihldmVudCkKQEAgLTIwMiw2ICsyMTIsMTYgQEAgV2Vi
SW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnBybwogICAgICAgICB0aGlzLl90ZXh0
RWRpdG9yLmZvcm1hdHRlZCA9IGFjdGl2YXRlZDsKICAgICB9LAogCisgICAgX3RvZ2dsZVR5cGVB
bm5vdGF0aW9uczogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLl90ZXh0RWRp
dG9yLnRvZ2dsZVR5cGVBbm5vdGF0aW9ucygpOworICAgIH0sCisKKyAgICBfc2hvd0phdmFTY3Jp
cHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgewor
ICAgICAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5hY3RpdmF0ZWQgPSBX
ZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLnZhbHVlOwor
ICAgIH0sCisKICAgICBfdGV4dEVkaXRvckZvcm1hdHRpbmdEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2
ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRl
bS5hY3RpdmF0ZWQgPSB0aGlzLl90ZXh0RWRpdG9yLmZvcm1hdHRlZDsKSW5kZXg6IFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVQcm9wZXJ0aWVzU2VjdGlvbi5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3Iu
VHlwZVByb3BlcnRpZXNTZWN0aW9uID0gZnVuY3Rpb24odHlwZXMsIHRpdGxlLCBzdWJ0aXRsZSkK
K3sKKyAgICB0aGlzLmVtcHR5UGxhY2Vob2xkZXIgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk5v
IFByb3BlcnRpZXMiKTsKKyAgICB0aGlzLnR5cGVzID0gdHlwZXM7CisKKyAgICBXZWJJbnNwZWN0
b3IuUHJvcGVydGllc1NlY3Rpb24uY2FsbCh0aGlzLCB0aXRsZSwgc3VidGl0bGUpOworfTsKKwor
V2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CisgICAgb25w
b3B1bGF0ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91
dGxpbmUucmVtb3ZlQ2hpbGRyZW4oKTsKKworICAgICAgICB2YXIgaTsKKyAgICAgICAgdmFyIHBy
aW1pdGl2ZVR5cGVOYW1lcyA9IHRoaXMudHlwZXMuZ2xvYmFsUHJpbWl0aXZlVHlwZU5hbWVzID8g
dGhpcy50eXBlcy5nbG9iYWxQcmltaXRpdmVUeXBlTmFtZXMgOiB0aGlzLnR5cGVzLmxvY2FsUHJp
bWl0aXZlVHlwZU5hbWVzOworICAgICAgICB2YXIgc3RydWN0dXJlcyA9IHRoaXMudHlwZXMuZ2xv
YmFsU3RydWN0dXJlcyA/IHRoaXMudHlwZXMuZ2xvYmFsU3RydWN0dXJlcyA6IHRoaXMudHlwZXMu
bG9jYWxTdHJ1Y3R1cmVzOworICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdOworICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgc3RydWN0dXJlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFy
IHByb3BlcnR5ID0ge307CisgICAgICAgICAgICBwcm9wZXJ0eS5uYW1lID0gc3RydWN0dXJlc1tp
XS5jb25zdHJ1Y3Rvck5hbWU7CisgICAgICAgICAgICBwcm9wZXJ0eS5zdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmVzW2ldOworICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpbWl0aXZlVHlwZU5hbWVzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB7fTsKKyAgICAgICAgICAgIHByb3Bl
cnR5Lm5hbWUgPSBwcmltaXRpdmVUeXBlTmFtZXNbaV07CisgICAgICAgICAgICBwcm9wZXJ0eS5z
dHJ1Y3R1cmUgPSBudWxsOworICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTsK
KyAgICAgICAgfQorCisgICAgICAgIHByb3BlcnRpZXMuc29ydChXZWJJbnNwZWN0b3IuVHlwZVBy
b3BlcnRpZXNTZWN0aW9uLkNvbXBhcmVQcm9wZXJ0aWVzKTsKKyAgICAgICAgZm9yIChpID0gMDsg
aSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXNU
cmVlT3V0bGluZS5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVF
bGVtZW50KHByb3BlcnRpZXNbaV0pKTsKKworICAgICAgICBpZiAoIXRoaXMucHJvcGVydGllc1Ry
ZWVPdXRsaW5lLmNoaWxkcmVuLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIHRpdGxlID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICB0aXRsZS5jbGFzc05hbWUg
PSAiaW5mbyI7CisgICAgICAgICAgICB0aXRsZS50ZXh0Q29udGVudCA9IHRoaXMuZW1wdHlQbGFj
ZWhvbGRlcjsKKyAgICAgICAgICAgIHZhciBpbmZvRWxlbWVudCA9IG5ldyBUcmVlRWxlbWVudCh0
aXRsZSwgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxp
bmUuYXBwZW5kQ2hpbGQoaW5mb0VsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNlY3Rpb24uRXZlbnQuVmlzaWJs
ZUNvbnRlbnREaWRDaGFuZ2UpOworCisgICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0g
MSkKKyAgICAgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmNoaWxkcmVuWzBdLmV4
cGFuZFJlY3Vyc2l2ZWx5KCk7CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0
aWVzU2VjdGlvbi5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNT
ZWN0aW9uLnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5D
b21wYXJlUHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnR5QSwgcHJvcGVydHlCKQoreworICAg
IHZhciBhID0gcHJvcGVydHlBLm5hbWU7CisgICAgdmFyIGIgPSBwcm9wZXJ0eUIubmFtZTsKKyAg
ICBpZiAoYS5pbmRleE9mKCJfX3Byb3RvX18iKSAhPT0gLTEpCisgICAgICAgIHJldHVybiAxOwor
ICAgIGlmIChiLmluZGV4T2YoIl9fcHJvdG9fXyIpICE9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0x
OworICAgIGlmIChhID09PSBiKQorICAgICAgICByZXR1cm4gMTsKKworICAgIC8vIGlmIHVzZWQg
ZWxzZXdoZXJlIG1ha2Ugc3VyZSB0bworICAgIC8vICAtIGNvbnZlcnQgYSBhbmQgYiB0byBzdHJp
bmdzIChub3QgbmVlZGVkIGhlcmUsIHByb3BlcnRpZXMgYXJlIGFsbCBzdHJpbmdzKQorCisgICAg
dmFyIGRpZmYgPSAwOworICAgIHZhciBjaHVuayA9IC9eXGQrfF5cRCsvOworICAgIHZhciBjaHVu
a2EsIGNodW5rYiwgYW51bSwgYm51bTsKKyAgICB3aGlsZSAoZGlmZiA9PT0gMCkgeworICAgICAg
ICBpZiAoIWEgJiYgYikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKCFiICYm
IGEpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2h1bmthID0gYS5tYXRjaChjaHVu
aylbMF07CisgICAgICAgIGNodW5rYiA9IGIubWF0Y2goY2h1bmspWzBdOworICAgICAgICBhbnVt
ID0gIWlzTmFOKGNodW5rYSk7CisgICAgICAgIGJudW0gPSAhaXNOYU4oY2h1bmtiKTsKKyAgICAg
ICAgaWYgKGFudW0gJiYgIWJudW0pCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlm
IChibnVtICYmICFhbnVtKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChhbnVt
ICYmIGJudW0pIHsKKyAgICAgICAgICAgIGRpZmYgPSBjaHVua2EgLSBjaHVua2I7CisgICAgICAg
ICAgICBpZiAoZGlmZiA9PT0gMCAmJiBjaHVua2EubGVuZ3RoICE9PSBjaHVua2IubGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgaWYgKCErY2h1bmthICYmICErY2h1bmtiKSAvLyBjaHVua3MgYXJl
IHN0cmluZ3Mgb2YgYWxsIDBzIChzcGVjaWFsIGNhc2UpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjaHVua2EubGVuZ3RoIC0gY2h1bmtiLmxlbmd0aDsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHVua2IubGVuZ3RoIC0gY2h1bmthLmxlbmd0
aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjaHVua2EgIT09IGNodW5rYikK
KyAgICAgICAgICAgIHJldHVybiAoY2h1bmthIDwgY2h1bmtiKSA/IC0xIDogMTsKKyAgICAgICAg
YSA9IGEuc3Vic3RyaW5nKGNodW5rYS5sZW5ndGgpOworICAgICAgICBiID0gYi5zdWJzdHJpbmco
Y2h1bmtiLmxlbmd0aCk7CisgICAgfQorCisgICAgcmV0dXJuIGRpZmY7Cit9OworCitXZWJJbnNw
ZWN0b3IuVHlwZVByb3BlcnR5VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihwcm9wZXJ0eSkKK3sKKyAg
ICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CisKKyAgICB0aGlzLm5hbWVFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgIHRoaXMubmFtZUVsZW1lbnQuY2xhc3NO
YW1lID0gIm5hbWUiOworICAgIHRoaXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLnBy
b3BlcnR5Lm5hbWU7CisKKyAgICBUcmVlRWxlbWVudC5jYWxsKHRoaXMsIHRoaXMubmFtZUVsZW1l
bnQsIG51bGwsIGZhbHNlKTsKKworICAgIHRoaXMudG9nZ2xlT25DbGljayA9IHRydWU7CisgICAg
dGhpcy5oYXNDaGlsZHJlbiA9ICEhdGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmU7IAorfTsKKworV2Vi
SW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKKyAgICBvbnBv
cHVsYXRlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7
CisKKyAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXTsKKyAgICAgICAgdmFyIGk7CisgICAgICAg
IGZvciAoaSA9IDA7IGkgPCB0aGlzLnByb3BlcnR5LnN0cnVjdHVyZS5maWVsZHMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIHZhciBuZXdQcm9wID0ge307CisgICAgICAgICAgICBwcm9wZXJ0
aWVzLnB1c2gobmV3UHJvcCk7CisgICAgICAgICAgICBuZXdQcm9wLm5hbWUgPSB0aGlzLnByb3Bl
cnR5LnN0cnVjdHVyZS5maWVsZHNbaV07CisgICAgICAgICAgICBuZXdQcm9wLnN0cnVjdHVyZSA9
IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwcm9wZXJ0aWVzLnNvcnQoV2ViSW5zcGVjdG9y
LlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5Db21wYXJlUHJvcGVydGllcyk7CisKKyAgICAgICAgaWYg
KHRoaXMucHJvcGVydHkuc3RydWN0dXJlLnByb3RvdHlwZVN0cnVjdHVyZSkgeworICAgICAgICAg
ICAgdmFyIGN0b3JQcm9wID0ge307CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goY3RvclBy
b3ApOworICAgICAgICAgICAgY3RvclByb3AubmFtZSA9IHRoaXMucHJvcGVydHkuc3RydWN0dXJl
LnByb3RvdHlwZVN0cnVjdHVyZS5jb25zdHJ1Y3Rvck5hbWUgKyAiIChQcm90b3R5cGUpIjsKKyAg
ICAgICAgICAgIGN0b3JQcm9wLnN0cnVjdHVyZSA9IHRoaXMucHJvcGVydHkuc3RydWN0dXJlLnBy
b3RvdHlwZVN0cnVjdHVyZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBw
cm9wZXJ0aWVzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChuZXcg
V2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50KHByb3BlcnRpZXNbaV0pKTsKKyAg
ICB9Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFRyZWVFbGVtZW50LnByb3RvdHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuY3NzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZp
ZXcuY3NzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvVHlwZVRva2VuVmlldy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy50eXBlLXRva2VuIHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7IAorICAg
IGJvcmRlci1yYWRpdXM6IDEwcHg7CisgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAg
ICBwYWRkaW5nLWxlZnQ6IDhweDsKKyAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7CisgICAgcGFkZGlu
Zy10b3A6IDFweDsKKyAgICBjb2xvcjogd2hpdGU7CisgICAgZm9udC1zaXplOiA5MiU7CisgICAg
b3BhY2l0eTogMC44NTsKK30KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZp
ZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKK1dl
Ykluc3BlY3Rvci5UeXBlVG9rZW5WaWV3ID0gZnVuY3Rpb24odG9rZW5Bbm5vdGF0b3IsIHNob3Vs
ZEhhdmVSaWdodE1hcmdpbiwgc2hvdWxkSGF2ZUxlZnRNYXJnaW4sIHBvcG92ZXJUaXRsZSkgCit7
CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworCisgICAgdmFyIHNwYW4gPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgc3Bhbi5jbGFzc05hbWUgPSAidHlw
ZS10b2tlbiI7CisgICAgc3Bhbi5zdHlsZS5tYXJnaW5SaWdodCA9IChzaG91bGRIYXZlUmlnaHRN
YXJnaW4gPyAiNXB4IiA6ICIwcHgiKTsKKyAgICBzcGFuLnN0eWxlLm1hcmdpbkxlZnQgPSAoc2hv
dWxkSGF2ZUxlZnRNYXJnaW4gPyAiNXB4IiA6ICIwcHgiKTsKKworICAgIHRoaXMuZWxlbWVudCA9
IHNwYW47CisgICAgdGhpcy5fdG9rZW5Bbm5vdGF0b3IgPSB0b2tlbkFubm90YXRvcjsKKyAgICB0
aGlzLl90eXBlcyA9IG51bGw7CisgICAgdGhpcy5fcG9wb3ZlclRpdGxlID0gcG9wb3ZlclRpdGxl
OworCisgICAgdGhpcy5fc2V0VXBNb3VzZW92ZXJIYW5kbGVycygpOworfTsKKworV2ViSW5zcGVj
dG9yLlR5cGVUb2tlblZpZXcuQ29sb3JzID0geworICAgIHB1cnBsZSA6ICIjY2MzYmJmIiwKKyAg
ICBibHVlOiAiIzNiNzBlMiIsCisgICAgcmVkOiAiI2RmMzUyZSIsCisgICAgZ3JlZW46ICIjNzZh
ZTFkIiwKKyAgICBncmF5OiAiIzdlN2U3ZSIsCisgICAgb3JhbmdlOiAiI2VkODQwMCIKK307CisK
K1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9yRm9yVHlwZSA9IHsKKyAgICAiU3RyaW5n
IjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JzLnJlZCwKKyAgICAiRnVuY3Rpb24i
OiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMucHVycGxlLCAKKyAgICAiTnVtYmVy
IjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JzLmJsdWUsCisgICAgIkludGVnZXIi
OiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMuYmx1ZSwKKyAgICAiVW5kZWZpbmVk
IjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JzLmdyYXksCisgICAgIk51bGwiOiBX
ZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMuZ3JheSwKKyAgICAiKD8pIjogV2ViSW5z
cGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JzLmdyYXksCisgICAgIkJvb2xlYW4iOiBXZWJJbnNw
ZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMucHVycGxlLAorICAgICIobWFueSkiOiBXZWJJbnNw
ZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMub3JhbmdlCit9OworCitXZWJJbnNwZWN0b3IuVHlw
ZVRva2VuVmlldy5TaW1wbGVUeXBlID0geworICAgICJTdHJpbmciOiB0cnVlLAorICAgICJOdW1i
ZXIiOiB0cnVlLAorICAgICJJbnRlZ2VyIjogdHJ1ZSwKKyAgICAiVW5kZWZpbmVkIjogdHJ1ZSwK
KyAgICAiTnVsbCI6IHRydWUsCisgICAgIkJvb2xlYW4iOiB0cnVlLAorfTsKKworV2ViSW5zcGVj
dG9yLlR5cGVUb2tlblZpZXcucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNw
ZWN0b3IuVHlwZVRva2VuVmlldywKKworICAgIC8vIHB1YmxpYworCisgICAgdXBkYXRlOiBmdW5j
dGlvbih0eXBlcykKKyAgICB7CisgICAgICAgIHZhciB0aXRsZSA9IHR5cGVzLmRpc3BsYXlUeXBl
TmFtZTsKKyAgICAgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gdGl0bGU7CisgICAgICAg
IHRoaXMuX3R5cGVzID0gdHlwZXM7CisgICAgICAgIHZhciBoYXNoU3RyaW5nID0gdGl0bGVbdGl0
bGUubGVuZ3RoIC0gMV0gPT09ICI/IiA/IHRpdGxlLnNsaWNlKDAsIHRpdGxlLmxlbmd0aCAtIDEp
IDogdGl0bGU7CisgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBX
ZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvckZvclR5cGVbaGFzaFN0cmluZ10gfHwgV2Vi
SW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JzLmdyZWVuOworICAgIH0sCisgICAgCisgICAg
Ly8gcHJpdmF0ZQorICAgIAorICAgIF9zZXRVcE1vdXNlb3ZlckhhbmRsZXJzOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciB0aW1lb3V0SUQg
PSBudWxsOworCisgICAgICAgIHRoaXMuZWxlbWVudC5vbm1vdXNlb3ZlciA9IGZ1bmN0aW9uKCkg
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNob3dQb3BvdmVyQWZ0ZXJEZWxheSgp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGltZW91dElEID0gbnVsbDsKKworICAg
ICAgICAgICAgICAgIHZhciBkb21SZWN0ID0gc2VsZi5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpOworICAgICAgICAgICAgICAgIHZhciBib3VuZHMgPSBuZXcgV2ViSW5zcGVjdG9yLlJl
Y3QoZG9tUmVjdC5sZWZ0LCBkb21SZWN0LnRvcCwgZG9tUmVjdC53aWR0aCwgZG9tUmVjdC5oZWln
aHQpOworICAgICAgICAgICAgICAgIHNlbGYuX3Rva2VuQW5ub3RhdG9yLl9zb3VyY2VDb2RlVGV4
dEVkaXRvci5fc2hvd1BvcG92ZXJGb3JUeXBlcyhzZWxmLl90eXBlcywgYm91bmRzLCBzZWxmLl9w
b3BvdmVyVGl0bGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVdlYkluc3Bl
Y3Rvci5UeXBlVG9rZW5WaWV3LlNpbXBsZVR5cGVbc2VsZi5fdHlwZXMuZGlzcGxheVR5cGVOYW1l
XSkKKyAgICAgICAgICAgICAgICB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KHNob3dQb3BvdmVyQWZ0
ZXJEZWxheSwgMzUwKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZWxlbWVudC5vbm1vdXNl
b3V0ID0gZnVuY3Rpb24oKSAKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRpbWVvdXRJRCAh
PT0gbnVsbCkKKyAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTsKKyAgICAg
ICAgfQorICAgIH0KKworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235980</attachid>
            <date>2014-08-04 12:26:52 -0700</date>
            <delta_ts>2014-08-08 12:40:19 -0700</delta_ts>
            <desc>work in progress patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>94977</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2Fs
aXplZFN0cmluZ3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2Fs
aXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwkocmV2aXNpb24gMTcxOTk3KQor
KysgU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVk
U3RyaW5ncy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw2IEBACiAAbABvAGMAYQBs
AGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIARQBsAGUAbQBlAG4AdAAgAGMAbABpAHAAcwAgAGMA
bwBtAHAAbwBzAGkAdABpAG4AZwAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAiAF0AIAA9ACAAIgBF
AGwAZQBtAGUAbgB0ACAAYwBsAGkAcABzACAAYwBvAG0AcABvAHMAaQB0AGkAbgBnACAAZABlAHMA
YwBlAG4AZABhAG4AdABzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsA
IgBFAGwAZQBtAGUAbgB0ACAAZQBzAHQAYQBiAGwAaQBzAGgAZQBzACAAYQAgAHMAdABhAGMAawBp
AG4AZwAgAGMAbwBuAHQAZQB4AHQAIgBdACAAPQAgACIARQBsAGUAbQBlAG4AdAAgAGUAcwB0AGEA
YgBsAGkAcwBoAGUAcwAgAGEAIABzAHQAYQBjAGsAaQBuAGcAIABjAG8AbgB0AGUAeAB0ACIAOwAK
IABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBtAGUAbgB0ACAAaABh
AHMAIABDAFMAUwAgAGIAbABlAG4AZABpAG4AZwAgAGEAcABwAGwAaQBlAGQAIABhAG4AZAAgAGMA
bwBtAHAAbwBzAGkAdABlAGQAIABkAGUAcwBjAGUAbgBkAGEAbgB0AHMAIgBdACAAPQAgACIARQBs
AGUAbQBlAG4AdAAgAGgAYQBzACAAQwBTAFMAIABiAGwAZQBuAGQAaQBuAGcAIABhAHAAcABsAGkA
ZQBkACAAYQBuAGQAIABjAG8AbQBwAG8AcwBpAHQAZQBkACAAZABlAHMAYwBlAG4AZABhAG4AdABz
ACIAOwAKLQBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBtAGUAbgB0
ACAAaQBzACAAYQAgAHMAdABhAGMAawBpAG4AZwAgAGMAbwBuAHQAZQB4AHQAIABhAG4AZAAgAGgA
YQBzACAAYwBvAG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAgAHcAaQB0
AGgAIABDAFMAUwAgAGIAbABlAG4AZABpAG4AZwAgAGEAcABwAGwAaQBlAGQAIgBdACAAPQAgACIA
RQBsAGUAbQBlAG4AdAAgAGkAcwAgAGEAIABzAHQAYQBjAGsAaQBuAGcAIABjAG8AbgB0AGUAeAB0
ACAAYQBuAGQAIABoAGEAcwAgAGMAbwBtAHAAbwBzAGkAdABlAGQAIABkAGUAcwBjAGUAbgBkAGEA
bgB0AHMAIAB3AGkAdABoACAAQwBTAFMAIABiAGwAZQBuAGQAaQBuAGcAIABhAHAAcABsAGkAZQBk
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBtAGUAbgB0
ACAAaABhAHMAIABDAFMAUwAgAGYAaQBsAHQAZQByAHMAIABhAHAAcABsAGkAZQBkACIAXQAgAD0A
IAAiAEUAbABlAG0AZQBuAHQAIABoAGEAcwAgAEMAUwBTACAAZgBpAGwAdABlAHIAcwAgAGEAcABw
AGwAaQBlAGQAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEUAbABl
AG0AZQBuAHQAIABoAGEAcwAgAEMAUwBTACAAZgBpAGwAdABlAHIAcwAgAGEAcABwAGwAaQBlAGQA
IABhAG4AZAAgAGMAbwBtAHAAbwBzAGkAdABlAGQAIABkAGUAcwBjAGUAbgBkAGEAbgB0AHMAIgBd
ACAAPQAgACIARQBsAGUAbQBlAG4AdAAgAGgAYQBzACAAQwBTAFMAIABmAGkAbAB0AGUAcgBzACAA
YQBwAHAAbABpAGUAZAAgAGEAbgBkACAAYwBvAG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBu
AGQAYQBuAHQAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIARQBs
AGUAbQBlAG4AdAAgAGgAYQBzACAAYQAgADIARAAgAHQAcgBhAG4AcwBmAG8AcgBtACAAYQBuAGQA
IABjAG8AbQBwAG8AcwBpAHQAZQBkACAAZABlAHMAYwBlAG4AZABhAG4AdABzACIAXQAgAD0AIAAi
AEUAbABlAG0AZQBuAHQAIABoAGEAcwAgAGEAIAAyAEQAIAB0AHIAYQBuAHMAZgBvAHIAbQAgAGEA
bgBkACAAYwBvAG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAiADsACkBA
IC0xNjksNiArMTY4LDcgQEAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBF
AGwAZQBtAGUAbgB0ACAAaQBzACAAPABpAGYAcgBhAG0AZQA+ACIAXQAgAD0AIAAiAEUAbABlAG0A
ZQBuAHQAIABpAHMAIAA8AGkAZgByAGEAbQBlAD4AIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMA
dAByAGkAbgBnAHMAWwAiAEUAbABlAG0AZQBuAHQAIABpAHMAIAA8AHYAaQBkAGUAbwA+ACIAXQAg
AD0AIAAiAEUAbABlAG0AZQBuAHQAIABpAHMAIAA8AHYAaQBkAGUAbwA+ACIAOwAKIABsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBtAGUAbgB0ACAAaQBzACAAYQAgAHAA
bAB1AGcALQBpAG4AIgBdACAAPQAgACIARQBsAGUAbQBlAG4AdAAgAGkAcwAgAGEAIABwAGwAdQBn
AC0AaQBuACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBt
AGUAbgB0ACAAaQBzACAAYQAgAHMAdABhAGMAawBpAG4AZwAgAGMAbwBuAHQAZQB4AHQAIABhAG4A
ZAAgAGgAYQBzACAAYwBvAG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAg
AHcAaQB0AGgAIABDAFMAUwAgAGIAbABlAG4AZABpAG4AZwAgAGEAcABwAGwAaQBlAGQAIgBdACAA
PQAgACIARQBsAGUAbQBlAG4AdAAgAGkAcwAgAGEAIABzAHQAYQBjAGsAaQBuAGcAIABjAG8AbgB0
AGUAeAB0ACAAYQBuAGQAIABoAGEAcwAgAGMAbwBtAHAAbwBzAGkAdABlAGQAIABkAGUAcwBjAGUA
bgBkAGEAbgB0AHMAIAB3AGkAdABoACAAQwBTAFMAIABiAGwAZQBuAGQAaQBuAGcAIABhAHAAcABs
AGkAZQBkACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBFAGwAZQBt
AGUAbgB0ACAAaQBzACAAYQBuAGkAbQBhAHQAZQBkACIAXQAgAD0AIAAiAEUAbABlAG0AZQBuAHQA
IABpAHMAIABhAG4AaQBtAGEAdABlAGQAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkA
bgBnAHMAWwAiAEUAbABlAG0AZQBuAHQAIABpAHMAIABtAGEAcwBrAGUAZAAgAGEAbgBkACAAYwBv
AG0AcABvAHMAaQB0AGUAZAAgAGQAZQBzAGMAZQBuAGQAYQBuAHQAcwAiAF0AIAA9ACAAIgBFAGwA
ZQBtAGUAbgB0ACAAaQBzACAAbQBhAHMAawBlAGQAIABhAG4AZAAgAGMAbwBtAHAAbwBzAGkAdABl
AGQAIABkAGUAcwBjAGUAbgBkAGEAbgB0AHMAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdABy
AGkAbgBnAHMAWwAiAEUAbABlAG0AZQBuAHQAIABpAHMAIAB0AGgAZQAgAHIAbwBvAHQAIABlAGwA
ZQBtAGUAbgB0ACIAXQAgAD0AIAAiAEUAbABlAG0AZQBuAHQAIABpAHMAIAB0AGgAZQAgAHIAbwBv
AHQAIABlAGwAZQBtAGUAbgB0ACIAOwAKQEAgLTIxNCwxNCArMjE0LDE1IEBACiAAbABvAGMAYQBs
AGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABUAE0ATAAgAEEAdAB0AHIAaQBiAHUAdABlAHMA
IgBdACAAPQAgACIASABUAE0ATAAgAEEAdAB0AHIAaQBiAHUAdABlAHMAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAVABUAFAAIgBdACAAPQAgACIASABUAFQAUAAi
ADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABlAGkAZwBoAHQAIgBd
ACAAPQAgACIASABlAGkAZwBoAHQAIgA7AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBn
AHMAWwAiAEgAaQBkAGUAIABSAGUAcABsAGEAeQAgAEMAbwBuAHQAcgBvAGwAcwAiAF0AIAA9ACAA
IgBIAGkAZABlACAAUgBlAHAAbABhAHkAIABDAG8AbgB0AHIAbwBsAHMAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAaQBkAGUAIABjAG8AbQBwAG8AcwBpAHQAaQBu
AGcAIABiAG8AcgBkAGUAcgBzACIAXQAgAD0AIAAiAEgAaQBkAGUAIABjAG8AbQBwAG8AcwBpAHQA
aQBuAGcAIABiAG8AcgBkAGUAcgBzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4A
ZwBzAFsAIgBIAGkAZABlACAAYwBvAG4AcwBvAGwAZQAgACgAJQBzACkAIgBdACAAPQAgACIASABp
AGQAZQAgAGMAbwBuAHMAbwBsAGUAIAAoACUAcwApACIAOwAKLQBsAG8AYwBhAGwAaQB6AGUAZABT
AHQAcgBpAG4AZwBzAFsAIgBIAGkAZABlACAAUgBlAHAAbABhAHkAIABDAG8AbgB0AHIAbwBsAHMA
IgBdACAAPQAgACIASABpAGQAZQAgAFIAZQBwAGwAYQB5ACAAQwBvAG4AdAByAG8AbABzACIAOwAK
IABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBIAGkAZABlACAAcwBoAGEAZABv
AHcAIABEAE8ATQAgAG4AbwBkAGUAcwAiAF0AIAA9ACAAIgBIAGkAZABlACAAcwBoAGEAZABvAHcA
IABEAE8ATQAgAG4AbwBkAGUAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcA
cwBbACIASABpAGQAZQAgAHQAaABlACAAJQBzACAAZABlAHQAYQBpAGwAcwAgAHMAaQBkAGUAYgBh
AHIAIgBdACAAPQAgACIASABpAGQAZQAgAHQAaABlACAAJQBzACAAZABlAHQAYQBpAGwAcwAgAHMA
aQBkAGUAYgBhAHIAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgA
aQBkAGUAIAB0AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBsAHMAIABzAGkAZABlAGIAYQByACAAKAAl
AHMAKQAiAF0AIAA9ACAAIgBIAGkAZABlACAAdABoAGUAIAAlAHMAIABkAGUAdABhAGkAbABzACAA
cwBpAGQAZQBiAGEAcgAgACgAJQBzACkAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkA
bgBnAHMAWwAiAEgAaQBkAGUAIAB0AGgAZQAgACUAcwAgAG4AYQB2AGkAZwBhAHQAaQBvAG4AIABz
AGkAZABlAGIAYQByACIAXQAgAD0AIAAiAEgAaQBkAGUAIAB0AGgAZQAgACUAcwAgAG4AYQB2AGkA
ZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQA
cgBpAG4AZwBzAFsAIgBIAGkAZABlACAAdABoAGUAIAAlAHMAIABuAGEAdgBpAGcAYQB0AGkAbwBu
ACAAcwBpAGQAZQBiAGEAcgAgACgAJQBzACkAIgBdACAAPQAgACIASABpAGQAZQAgAHQAaABlACAA
JQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBkAGUAYgBhAHIAIAAoACUAcwApACIAOwAK
KwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBIAGkAZABlACAAdAB5AHAAZQAg
AGkAbgBmAG8AcgBtAGEAdABpAG8AbgAiAF0AIAA9ACAAIgBIAGkAZABlACAAdAB5AHAAZQAgAGkA
bgBmAG8AcgBtAGEAdABpAG8AbgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcA
cwBbACIASABvAHMAdAAiAF0AIAA9ACAAIgBIAG8AcwB0ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUA
ZABTAHQAcgBpAG4AZwBzAFsAIgBJAGMAbwBuACAATwBuAGwAeQAiAF0AIAA9ACAAIgBJAGMAbwBu
ACAATwBuAGwAeQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASQBj
AG8AbgAgAGEAbgBkACAAVABlAHgAdAAgACgASABvAHIAaQB6AG8AbgB0AGEAbAApACIAXQAgAD0A
IAAiAEkAYwBvAG4AIABhAG4AZAAgAFQAZQB4AHQAIAAoAEgAbwByAGkAegBvAG4AdABhAGwAKQAi
ADsACkBAIC0zNDIsOCArMzQzLDggQEAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBz
AFsAIgBSAGUAZgBlAHIAZQBuAGMAZQAgAEkAcwBzAHUAZQAiAF0AIAA9ACAAIgBSAGUAZgBlAHIA
ZQBuAGMAZQAgAEkAcwBzAHUAZQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcA
cwBbACIAUgBlAGYAbABlAGMAdABpAG8AbgAiAF0AIAA9ACAAIgBSAGUAZgBsAGUAYwB0AGkAbwBu
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUAZgByAGUAcwBo
ACIAXQAgAD0AIAAiAFIAZQBmAHIAZQBzAGgAIgA7AAotAGwAbwBjAGEAbABpAHoAZQBkAFMAdABy
AGkAbgBnAHMAWwAiAFIAZQBnAGkAbwBuACAAYQBuAG4AbwB1AG4AYwBlAGQAIABpAG4AIABpAHQA
cwAgAGUAbgB0AGkAcgBlAHQAeQAuACIAXQAgAD0AIAAiAFIAZQBnAGkAbwBuACAAYQBuAG4AbwB1
AG4AYwBlAGQAIABpAG4AIABpAHQAcwAgAGUAbgB0AGkAcgBlAHQAeQAuACIAOwAKIABsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUAZwBpAG8AbgAgAEYAbABvAHcAIgBdACAA
PQAgACIAUgBlAGcAaQBvAG4AIABGAGwAbwB3ACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUAZABTAHQA
cgBpAG4AZwBzAFsAIgBSAGUAZwBpAG8AbgAgAGEAbgBuAG8AdQBuAGMAZQBkACAAaQBuACAAaQB0
AHMAIABlAG4AdABpAHIAZQB0AHkALgAiAF0AIAA9ACAAIgBSAGUAZwBpAG8AbgAgAGEAbgBuAG8A
dQBuAGMAZQBkACAAaQBuACAAaQB0AHMAIABlAG4AdABpAHIAZQB0AHkALgAiADsACiAAbABvAGMA
YQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAGwAbwBhAGQAIABwAGEAZwBlACAAKAAl
AHMAKQBcAG4AUgBlAGwAbwBhAGQAIABpAGcAbgBvAHIAaQBuAGcAIABjAGEAYwBoAGUAIAAoACUA
cwApACIAXQAgAD0AIAAiAFIAZQBsAG8AYQBkACAAcABhAGcAZQAgACgAJQBzACkAXABuAFIAZQBs
AG8AYQBkACAAaQBnAG4AbwByAGkAbgBnACAAYwBhAGMAaABlACAAKAAlAHMAKQAiADsACiAAbABv
AGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAG0AbwB2AGUAIAB0AGgAaQBzACAA
YgByAGUAYQBrAHAAbwBpAG4AdAAgAGEAYwB0AGkAbwBuACIAXQAgAD0AIAAiAFIAZQBtAG8AdgBl
ACAAdABoAGkAcwAgAGIAcgBlAGEAawBwAG8AaQBuAHQAIABhAGMAdABpAG8AbgAiADsACiAAbABv
AGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHAAZQBhAHQAaQBuAGcAIABMAGkA
bgBlAGEAcgAgAEcAcgBhAGQAaQBlAG4AdAAiAF0AIAA9ACAAIgBSAGUAcABlAGEAdABpAG4AZwAg
AEwAaQBuAGUAYQByACAARwByAGEAZABpAGUAbgB0ACIAOwAKQEAgLTM4NCwxMSArMzg1LDExIEBA
CiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAGEAcgBlAGQAIABGAG8A
YwB1AHMAIgBdACAAPQAgACIAUwBoAGEAcgBlAGQAIABGAG8AYwB1AHMAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIABBAGwAbAAiAF0AIAA9ACAAIgBT
AGgAbwB3ACAAQQBsAGwAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAi
AFMAaABvAHcAIABBAGwAbAAgAE4AbwBkAGUAcwAgACgAJQBkACAATQBvAHIAZQApACIAXQAgAD0A
IAAiAFMAaABvAHcAIABBAGwAbAAgAE4AbwBkAGUAcwAgACgAJQBkACAATQBvAHIAZQApACIAOwAK
KwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAUgBlAHAAbABh
AHkAIABDAG8AbgB0AHIAbwBsAHMAIgBdACAAPQAgACIAUwBoAG8AdwAgAFIAZQBwAGwAYQB5ACAA
QwBvAG4AdAByAG8AbABzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsA
IgBTAGgAbwB3ACAAYwBvAG0AcABvAHMAaQB0AGkAbgBnACAAYgBvAHIAZABlAHIAcwAiAF0AIAA9
ACAAIgBTAGgAbwB3ACAAYwBvAG0AcABvAHMAaQB0AGkAbgBnACAAYgBvAHIAZABlAHIAcwAiADsA
CiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAgAGMAbwBuAHMA
bwBsAGUAIAAoACUAcwApACIAXQAgAD0AIAAiAFMAaABvAHcAIABjAG8AbgBzAG8AbABlACAAKAAl
AHMAKQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAg
AGYAdQBsAGwALQBoAGUAaQBnAGgAdAAgAGMAbwBuAHMAbwBsAGUAIgBdACAAPQAgACIAUwBoAG8A
dwAgAGYAdQBsAGwALQBoAGUAaQBnAGgAdAAgAGMAbwBuAHMAbwBsAGUAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIABmAHUAbgBjAHQAaQBvAG4AIABk
AGUAZgBpAG4AaQB0AGkAbwBuACIAXQAgAD0AIAAiAFMAaABvAHcAIABmAHUAbgBjAHQAaQBvAG4A
IABkAGUAZgBpAG4AaQB0AGkAbwBuACIAOwAKLQBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4A
ZwBzAFsAIgBTAGgAbwB3ACAAUgBlAHAAbABhAHkAIABDAG8AbgB0AHIAbwBsAHMAIgBdACAAPQAg
ACIAUwBoAG8AdwAgAFIAZQBwAGwAYQB5ACAAQwBvAG4AdAByAG8AbABzACIAOwAKIABsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAcwBoAGEAZABvAHcAIABEAE8A
TQAgAG4AbwBkAGUAcwAiAF0AIAA9ACAAIgBTAGgAbwB3ACAAcwBoAGEAZABvAHcAIABEAE8ATQAg
AG4AbwBkAGUAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBo
AG8AdwAgAHMAcABsAGkAdAAgAGMAbwBuAHMAbwBsAGUAIgBdACAAPQAgACIAUwBoAG8AdwAgAHMA
cABsAGkAdAAgAGMAbwBuAHMAbwBsAGUAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkA
bgBnAHMAWwAiAFMAaABvAHcAIAB0AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBsAHMAIABzAGkAZABl
AGIAYQByACIAXQAgAD0AIAAiAFMAaABvAHcAIAB0AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBsAHMA
IABzAGkAZABlAGIAYQByACIAOwAKQEAgLTM5Nyw2ICszOTgsNyBAQAogAGwAbwBjAGEAbABpAHoA
ZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIAB0AGgAZQAgACUAcwAgAG4AYQB2AGkAZwBh
AHQAaQBvAG4AIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiAF0AIAA9ACAAIgBTAGgAbwB3ACAA
dABoAGUAIAAlAHMAIABuAGEAdgBpAGcAYQB0AGkAbwBuACAAcwBpAGQAZQBiAGEAcgAgACgAJQBz
ACkAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIAB0
AGkAbQBlAHMAIABhAHMAIABhAGIAcwBvAGwAdQB0AGUAIAB0AGkAbQBlAHMAIgBdACAAPQAgACIA
UwBoAG8AdwAgAHQAaQBtAGUAcwAgAGEAcwAgAGEAYgBzAG8AbAB1AHQAZQAgAHQAaQBtAGUAcwAi
ADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAgAHQAaQBt
AGUAcwAgAGEAcwAgAHAAZQByAGMAZQBuAHQAYQBnAGUAcwAiAF0AIAA9ACAAIgBTAGgAbwB3ACAA
dABpAG0AZQBzACAAYQBzACAAcABlAHIAYwBlAG4AdABhAGcAZQBzACIAOwAKKwBsAG8AYwBhAGwA
aQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAdAB5AHAAZQAgAGkAbgBmAG8AcgBt
AGEAdABpAG8AbgAiAF0AIAA9ACAAIgBTAGgAbwB3ACAAdAB5AHAAZQAgAGkAbgBmAG8AcgBtAGEA
dABpAG8AbgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBpAHoA
ZQAiAF0AIAA9ACAAIgBTAGkAegBlACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4A
ZwBzAFsAIgBTAG0AYQBsAGwAIABJAGMAbwBuAHMAIgBdACAAPQAgACIAUwBtAGEAbABsACAASQBj
AG8AbgBzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAG8AYwBr
AGUAdAAiAF0AIAA9ACAAIgBTAG8AYwBrAGUAdAAiADsACkBAIC00MDQsOCArNDA2LDggQEAKIABs
AG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAG8AdQByAGMAZQAgAEMAbwBkAGUA
IgBdACAAPQAgACIAUwBvAHUAcgBjAGUAIABDAG8AZABlACIAOwAKIABsAG8AYwBhAGwAaQB6AGUA
ZABTAHQAcgBpAG4AZwBzAFsAIgBTAHAAZQBsAGwAaQBuAGcAIgBdACAAPQAgACIAUwBwAGUAbABs
AGkAbgBnACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAHQAYQBy
AHQAIABKAGEAdgBhAFMAYwByAGkAcAB0ACAAcAByAG8AZgBpAGwAaQBuAGcALgAiAF0AIAA9ACAA
IgBTAHQAYQByAHQAIABKAGEAdgBhAFMAYwByAGkAcAB0ACAAcAByAG8AZgBpAGwAaQBuAGcALgAi
ADsACi0AbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwB0AGEAcgB0ACAAUgBl
AGMAbwByAGQAaQBuAGcAIgBdACAAPQAgACIAUwB0AGEAcgB0ACAAUgBlAGMAbwByAGQAaQBuAGcA
IgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAdABhAHIAdAAgAFAA
bABhAHkAYgBhAGMAawAiAF0AIAA9ACAAIgBTAHQAYQByAHQAIABQAGwAYQB5AGIAYQBjAGsAIgA7
AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAdABhAHIAdAAgAFIAZQBj
AG8AcgBkAGkAbgBnACIAXQAgAD0AIAAiAFMAdABhAHIAdAAgAFIAZQBjAG8AcgBkAGkAbgBnACIA
OwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAHQAYQByAHQAIABUAGkA
bQBlACIAXQAgAD0AIAAiAFMAdABhAHIAdAAgAFQAaQBtAGUAIgA7AAogAGwAbwBjAGEAbABpAHoA
ZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAdABhAHQAdQBzACIAXQAgAD0AIAAiAFMAdABhAHQAdQBz
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAHQAZQBwACAAaQBu
AHQAbwAgACgAJQBzACAAbwByACAAJQBzACkAIgBdACAAPQAgACIAUwB0AGUAcAAgAGkAbgB0AG8A
IAAoACUAcwAgAG8AcgAgACUAcwApACIAOwAKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJKHJldmlzaW9uIDE3MTk5NykKKysrIFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MTM1LDYgKzEzNSw3IEBACiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9U
aW1lbGluZVZpZXcuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdz
L1Rvb2xiYXIuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1Ry
ZWVFbGVtZW50U3RhdHVzQnV0dG9uLmNzcyI+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSJWaWV3cy9UeXBlVG9rZW5WaWV3LmNzcyI+CiAKICAgICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9IkNvbnRyb2xsZXJzL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5jc3Mi
PgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iQ29udHJvbGxlcnMvQ29kZU1pcnJv
ckRyYWdUb0FkanVzdE51bWJlckNvbnRyb2xsZXIuY3NzIj4KQEAgLTE2MCw2ICsxNjEsOCBAQAog
ICAgIDxzY3JpcHQgc3JjPSJFeHRlcm5hbC9Db2RlTWlycm9yL3NxbC5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9IkV4dGVybmFsL0NvZGVNaXJyb3IveG1sLmpzIj48L3NjcmlwdD4KIAor
CisKICAgICA8c2NyaXB0IHNyYz0iQmFzZS9XZWJJbnNwZWN0b3IuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJCYXNlL09iamVjdC5qcyI+PC9zY3JpcHQ+CiAKQEAgLTI1Niw2ICsyNjEs
NyBAQAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU2V0dGluZy5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCBzcmM9Ik1vZGVscy9Tb3VyY2VDb2RlTG9jYXRpb24uanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJNb2RlbHMvU291cmNlQ29kZVBvc2l0aW9uLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NvdXJjZUNvZGVBU1QuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgc3JjPSJNb2RlbHMvU291cmNlQ29kZVJldmlzaW9uLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iTW9kZWxzL1NvdXJjZUNvZGVUZXh0UmFuZ2UuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJNb2RlbHMvU291cmNlQ29kZVRpbWVsaW5lLmpzIj48L3NjcmlwdD4KQEAg
LTQ1Miw2ICs0NTgsOCBAQAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Ub29sYmFyLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHJlZUVsZW1lbnRTdGF0dXNCdXR0b24uanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UcmVlT3V0bGluZURhdGFHcmlkU3lu
Y2hyb25pemVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHlwZVByb3Bl
cnRpZXNTZWN0aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHlwZVRv
a2VuVmlldy5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvQ29k
ZU1pcnJvckVkaXRpbmdDb250cm9sbGVyLmpzIj48L3NjcmlwdD4KIApAQCAtNDgzLDYgKzQ5MSw3
IEBACiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1NvdXJjZU1hcE1hbmFnZXIuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9TdG9yYWdlTWFuYWdlci5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1RpbWVsaW5lTWFuYWdlci5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90
YXRvci5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQmFzZS9NYWluLmpzIj48L3Nj
cmlwdD4KIApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9N
YWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0Jhc2UvTWFpbi5qcwkocmV2aXNpb24gMTcxOTk3KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNiArMTYw
LDggQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKIAogICAgIHRoaXMuc2hvd1No
YWRvd0RPTVNldHRpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoInNob3ctc2hhZG93LWRv
bSIsIGZhbHNlKTsKICAgICB0aGlzLnNob3dSZXBsYXlJbnRlcmZhY2VTZXR0aW5nID0gbmV3IFdl
Ykluc3BlY3Rvci5TZXR0aW5nKCJzaG93LXdlYi1yZXBsYXkiLCBmYWxzZSk7CisgICAgCisgICAg
dGhpcy5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcgPSBuZXcgV2ViSW5zcGVj
dG9yLlNldHRpbmcoInNob3ctamF2YXNjcmlwdC10eXBlLWluZm9ybWF0aW9uIiwgZmFsc2UpOwog
CiAgICAgdGhpcy5tb3VzZUNvb3JkcyA9IHsKICAgICAgICAgeDogMCwKSW5kZXg6IFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRy
YWNraW5nQ29udHJvbGxlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xs
ZXIuanMJKHJldmlzaW9uIDE3MTk5NykKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5qcwko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksOCBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRv
a2VuVHJhY2tpbmdDb250CiAgICAgTm9uZTogIm5vbmUiLAogICAgIE5vblN5bWJvbFRva2Vuczog
Im5vbi1zeW1ib2wtdG9rZW5zIiwKICAgICBKYXZhU2NyaXB0RXhwcmVzc2lvbjogImphdmFzY3Jp
cHQtZXhwcmVzc2lvbiIsCi0gICAgTWFya2VkVG9rZW5zOiAibWFya2VkLXRva2VucyIKKyAgICBN
YXJrZWRUb2tlbnM6ICJtYXJrZWQtdG9rZW5zIiwKKyAgICBKYXZhU2NyaXB0VHlwZUluZm9ybWF0
aW9uOiAiamF2YXNjcmlwdC10eXBlLWluZm9ybWF0aW9uIgogfQogCiBXZWJJbnNwZWN0b3IuQ29k
ZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKQEAgLTM4OSw2ICsz
OTAsNyBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250CiAgICAgICAg
ICAgICB0aGlzLl9jYW5kaWRhdGUgPSB0aGlzLl9wcm9jZXNzTm9uU3ltYm9sVG9rZW4oKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0RXhwcmVzc2lvbjoKKyAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUu
SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjoKICAgICAgICAgICAgIHRoaXMuX2NhbmRpZGF0ZSA9
IHRoaXMuX3Byb2Nlc3NKYXZhU2NyaXB0RXhwcmVzc2lvbigpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJv
bGxlci5Nb2RlLk1hcmtlZFRva2VuczoKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0
ZXJTb3VyY2VNYXAuanMJKHJldmlzaW9uIDE3MTk5NykKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsMTUgKzQ1LDI3IEBAIFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VN
YXAucHJvdG90eXAKICAgICBvcmlnaW5hbFRvRm9ybWF0dGVkOiBmdW5jdGlvbihsaW5lTnVtYmVy
LCBjb2x1bW5OdW1iZXIpCiAgICAgewogICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IHRo
aXMuX2xvY2F0aW9uVG9Qb3NpdGlvbih0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzLCBsaW5lTnVt
YmVyIHx8IDAsIGNvbHVtbk51bWJlciB8fCAwKTsKKyAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2lu
YWxQb3NpdGlvblRvRm9ybWF0dGVkKG9yaWdpbmFsUG9zaXRpb24pOworICAgIH0sCisKKyAgICBv
cmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQ6IGZ1bmN0aW9uKG9yaWdpbmFsUG9zaXRpb24pCisg
ICAgewogICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9jb252ZXJ0UG9zaXRp
b24odGhpcy5fbWFwcGluZy5vcmlnaW5hbCwgdGhpcy5fbWFwcGluZy5mb3JtYXR0ZWQsIG9yaWdp
bmFsUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0aW9uKHRo
aXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRQb3NpdGlvbik7CiAgICAgfSwKIAor
CiAgICAgZm9ybWF0dGVkVG9PcmlnaW5hbDogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVt
YmVyKQogICAgIHsKKyAgICAgICAgdmFyIG9yaWdpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm1hdHRl
ZFRvT3JpZ2luYWxPZmZzZXQobGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3Bvc2l0aW9uVG9Mb2NhdGlvbih0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzLCBv
cmlnaW5hbFBvc2l0aW9uKTsKKyAgICB9LAorCisgICAgZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNl
dDogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAgIHsKICAgICAgICAgdmFy
IGZvcm1hdHRlZFBvc2l0aW9uID0gdGhpcy5fbG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX2Zvcm1h
dHRlZExpbmVFbmRpbmdzLCBsaW5lTnVtYmVyIHx8IDAsIGNvbHVtbk51bWJlciB8fCAwKTsKICAg
ICAgICAgdmFyIG9yaWdpbmFsUG9zaXRpb24gPSB0aGlzLl9jb252ZXJ0UG9zaXRpb24odGhpcy5f
bWFwcGluZy5mb3JtYXR0ZWQsIHRoaXMuX21hcHBpbmcub3JpZ2luYWwsIGZvcm1hdHRlZFBvc2l0
aW9uKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uVG9Mb2NhdGlvbih0aGlzLl9vcmln
aW5hbExpbmVFbmRpbmdzLCBvcmlnaW5hbFBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG9yaWdp
bmFsUG9zaXRpb247CiAgICAgfSwKIAogICAgIC8vIFByaXZhdGUKSW5kZXg6IFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250
cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3Iu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNw
ZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yID0gZnVuY3Rpb24odGV4dEVkaXRvciwgc2NyaXB0KSAK
K3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisKKyAgICBjb25zb2xlLmFz
c2VydChzY3JpcHQpOworICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlwdDsKKyAgICB0aGlzLl9zb3Vy
Y2VDb2RlVGV4dEVkaXRvciA9IHRleHRFZGl0b3I7CisgICAgdGhpcy5fdHlwZVRva2VuTm9kZXMg
PSBbXTsKKyAgICB0aGlzLl90eXBlVG9rZW5Cb29rbWFya3MgPSBbXTsKKyAgICB0aGlzLl90aW1l
b3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTsKK307CisK
K1dlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlID0geworICAgIGNvbnN0
cnVjdG9yOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLAorCisgICAgLy8gcHVibGlj
CisgICAgZ2V0IGlzQWN0aXZlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9pc0FjdGl2
ZTsKKyAgICB9LAorCisgICAgcGF1c2U6IGZ1bmN0aW9uKCkgCisgICAgeworICAgICAgICB0aGlz
Ll9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOworICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNl
OworICAgIH0sCisKKyAgICByZXN1bWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMu
X2NsZWFyVGltZW91dElmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsK
KyAgICAgICAgdGhpcy5pbnNlcnRBbm5vdGF0aW9ucygpOworICAgIH0sCisKKyAgICByZXNldDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsK
KyAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOworICAgICAgICB0aGlzLl9jbGVhclR5cGVU
b2tlbnMoKTsKKyAgICAgICAgdGhpcy5pbnNlcnRBbm5vdGF0aW9ucygpOworICAgIH0sCisKKyAg
ICB0b2dnbGVUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0
aGlzLmlzQWN0aXZlKSB7CisgICAgICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOworICAg
ICAgICAgICAgdGhpcy5fY2xlYXJUeXBlVG9rZW5zKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICB0aGlzLnJlc2V0KCk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpcy5pc0FjdGl2ZTsKKyAgICB9LAorCisg
ICAgaW5zZXJ0QW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkgCisgICAgeworICAgICAgICBpZiAoIXRo
aXMuaXNBY3RpdmUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNvdXJjZUNv
ZGVBU1QgPSB0aGlzLl9zY3JpcHQuX3NvdXJjZUNvZGVBU1Q7CisgICAgICAgIHZhciBzb3VyY2VJ
RCA9IHRoaXMuX3NjcmlwdC5pZDsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAg
IGlmICghc291cmNlQ29kZUFTVCkgeworICAgICAgICAgICAgc2VsZi5fc2NyaXB0Ll9zb3VyY2VD
b2RlQVNURGlkTG9hZENhbGxiYWNrID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgc2Vs
Zi5pbnNlcnRBbm5vdGF0aW9ucygpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYg
KHNlbGYuX3NjcmlwdC5jYW5SZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKCkpCisgICAgICAgICAg
ICAgICAgc2VsZi5fc2NyaXB0LnJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQoZnVuY3Rpb24oKSB7
fSk7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBjb2Rl
TWlycm9yID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3IuX2NvZGVNaXJyb3I7CisgICAgICAg
IHZhciB2aXNpYmxlUmFuZ2UgPSBjb2RlTWlycm9yLmdldFZpZXdwb3J0KCk7CisgICAgICAgIHZh
ciBzdGFydE9mZnNldDsKKyAgICAgICAgdmFyIGVuZE9mZnNldDsKKyAgICAgICAgdmFyIHNvdXJj
ZU1hcCA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLl9mb3JtYXR0ZXJTb3VyY2VNYXA7CisK
KyAgICAgICAgaWYgKHNvdXJjZU1hcCkgeworICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBzb3Vy
Y2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldChNYXRoLm1heCh2aXNpYmxlUmFuZ2UuZnJv
bSAtIDEsIDApLCAwKTsKKyAgICAgICAgICAgIGVuZE9mZnNldCA9IHNvdXJjZU1hcC5mb3JtYXR0
ZWRUb09yaWdpbmFsT2Zmc2V0KHZpc2libGVSYW5nZS50byAtIDEsIDApOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBjb2RlTWlycm9yLmdldERvYygpLmluZGV4
RnJvbVBvcyh7IGxpbmU6IHZpc2libGVSYW5nZS5mcm9tLCBjaDogMCB9KTsKKyAgICAgICAgICAg
IGVuZE9mZnNldCA9IGNvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9zKHsgbGluZTogdmlz
aWJsZVJhbmdlLnRvLCBjaDogMCB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzdGFydFRp
bWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgICAgICB2YXIgYWxsTm9kZXNJblJhbmdl
ID0gc291cmNlQ29kZUFTVC5maWx0ZXJCeVJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwor
ICAgICAgICBzb3VyY2VDb2RlQVNULnVwZGF0ZVR5cGVzKHNvdXJjZUlELCBhbGxOb2Rlc0luUmFu
Z2UsIGZ1bmN0aW9uIGFmdGVyVHlwZVVwZGF0ZXMoKSB7CisgICAgICAgICAgICAvLyBCZWNhdXNl
IHRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIGNhbGwsIHdlIGNvdWxkIGhhdmUgYmVlbiBkZWFjdGl2
YXRlZCBiZWZvcmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgICAgICAgICAg
IGlmICghc2VsZi5pc0FjdGl2ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIGFsbE5vZGVzSW5SYW5nZS5mb3JFYWNoKHNlbGYuX2luc2VydFR5cGVUb2tlbnNGb3JFYWNo
Tm9kZS5iaW5kKHNlbGYpKTsKKyAgICAgICAgICAgIGFsbE5vZGVzSW5SYW5nZS5mb3JFYWNoKHNl
bGYuX3VwZGF0ZVR5cGVUb2tlbnNGb3JFYWNoTm9kZSk7CisKKyAgICAgICAgICAgIHZhciB0b3Rh
bFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpIC0gc3RhcnRUaW1lOworICAgICAgICAgICAg
Ly92YXIgdGltZW91dFRpbWUgPSBNYXRoLm1heCg4MDAsIE1hdGgubWluKHRvdGFsVGltZSAqIDEw
LCA4MDAwKSk7CisgICAgICAgICAgICB2YXIgdGltZW91dFRpbWUgPSBNYXRoLm1pbihNYXRoLm1h
eCg3NTAwLCB0b3RhbFRpbWUpLCA4ICogdG90YWxUaW1lKTsKKyAgICAgICAgICAgIC8vY29uc29s
ZS5sb2coIlxuVGltZW91dCB0aW1lOiAiLCB0aW1lb3V0VGltZSwgIiBUb3RhbCB0aW1lOiAiLCB0
b3RhbFRpbWUpOworCisgICAgICAgICAgICBzZWxmLl90aW1lb3V0SWRlbnRpZmllciA9IHNldFRp
bWVvdXQoZnVuY3Rpb24gdGltZW91dFVwZGF0ZSgpIHsKKyAgICAgICAgICAgICAgICBzZWxmLl90
aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAgICAgICAgICAgc2VsZi5pbnNlcnRBbm5v
dGF0aW9ucygpOworICAgICAgICAgICAgfSwgdGltZW91dFRpbWUpOworICAgICAgICB9KTsKKyAg
ICB9LAorCisgICAgLy8gUHJpdmF0ZQorCisgICAgX2luc2VydFR5cGVUb2tlbnNGb3JFYWNoTm9k
ZTogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIHZhciBUeXBlcyA9IFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlQVNULkFTVFR5cGU7CisgICAgICAgIHZhciBzb3VyY2VDb2RlQVNUID0gdGhp
cy5fc2NyaXB0Ll9zb3VyY2VDb2RlQVNUOworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAg
ICAgICAgc3dpdGNoKG5vZGUudHlwZSkgeworICAgICAgICBjYXNlIFR5cGVzLkZ1bmN0aW9uRGVj
bGFyYXRpb246CisgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAg
ICAgICAgbm9kZS5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIXBhcmFtLl9hdHRhY2htZW50cy5fdHlwZVRva2VuICYmIHBhcmFtLl9hdHRhY2ht
ZW50cy5fdHlwZXMgJiYgcGFyYW0uX2F0dGFjaG1lbnRzLl90eXBlcy5kaXNwbGF5VHlwZU5hbWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW0uX2F0dGFjaG1lbnRzLl90eXBlUG9wb3ZlclRp
dGxlID0gIlR5cGUgaW5mb3JtYXRpb24gZm9yIHZhcmlhYmxlOiAiICsgcGFyYW0ubmFtZTsKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5faW5zZXJ0VG9rZW4ocGFyYW0ucmFuZ2VbMF0sIHBhcmFt
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAvLyBJZiBhIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXhwbGljaXQgcmV0dXJuIHR5cGUs
IHRoZW4gZG9uJ3Qgc2hvdyBhIHJldHVybiB0eXBlIHVubGVzcyB3ZSB0aGluayBpdCdzIGEgY29u
c3RydWN0b3IuCisgICAgICAgICAgICBpZiAoIW5vZGUuX2F0dGFjaG1lbnRzLl90eXBlVG9rZW4g
JiYgbm9kZS5fYXR0YWNobWVudHMuX3JldHVyblR5cGVzICYmIG5vZGUuX2F0dGFjaG1lbnRzLl9y
ZXR1cm5UeXBlcy5kaXNwbGF5VHlwZU5hbWUgJiYgKHNvdXJjZUNvZGVBU1QuY29udGFpbnNOb25F
bXB0eVJldHVyblN0YXRlbWVudChub2RlLmJvZHkpIHx8IG5vZGUuX2F0dGFjaG1lbnRzLl9yZXR1
cm5UeXBlcy5kaXNwbGF5VHlwZU5hbWUgIT09ICJVbmRlZmluZWQiKSkgeworICAgICAgICAgICAg
ICAgIG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlUG9wb3ZlclRpdGxlID0gIlJldHVybiB0eXBlIGlu
Zm9ybWF0aW9uIGZvciBmdW5jdGlvbiIgKyAobm9kZS5pZCA/ICgiOiAiICsgbm9kZS5pZC5uYW1l
KSA6ICIiKTsKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnNlcnRUb2tlbihub2RlLmlzR2V0dGVy
T3JTZXR0ZXIgPyBub2RlLmdldHRlck9yU2V0dGVyUmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdLCBu
b2RlLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFR5cGVzLlZhcmlhYmxlRGVjbGFyYXRvcjoKKyAgICAgICAgICAgIGlmICghbm9kZS5fYXR0
YWNobWVudHMuX3R5cGVUb2tlbiAmJiBub2RlLl9hdHRhY2htZW50cy5fdHlwZXMgJiYgbm9kZS5f
YXR0YWNobWVudHMuX3R5cGVzLmRpc3BsYXlUeXBlTmFtZSkgeworICAgICAgICAgICAgICAgIG5v
ZGUuX2F0dGFjaG1lbnRzLl90eXBlUG9wb3ZlclRpdGxlID0gIlR5cGUgaW5mb3JtYXRpb24gZm9y
IHZhcmlhYmxlOiAiICsgbm9kZS5pZC5uYW1lOworICAgICAgICAgICAgICAgIHNlbGYuX2luc2Vy
dFRva2VuKG5vZGUuaWQucmFuZ2VbMF0sIG5vZGUsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSwKKworICAgIF9pbnNlcnRUb2tlbjog
ZnVuY3Rpb24ob2Zmc2V0LCBub2RlLCBpc1JldHVybikKKyAgICB7CisgICAgICAgIHZhciBzb3Vy
Y2VNYXAgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvci5fZm9ybWF0dGVyU291cmNlTWFwOwor
ICAgICAgICB2YXIgY29kZU1pcnJvciA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLl9jb2Rl
TWlycm9yOworICAgICAgICB2YXIgbG9jYXRpb247IAorICAgICAgICB2YXIgc3RhcnQ7IAorCisg
ICAgICAgIGlmIChzb3VyY2VNYXApIHsKKyAgICAgICAgICAgIGxvY2F0aW9uID0gc291cmNlTWFw
Lm9yaWdpbmFsUG9zaXRpb25Ub0Zvcm1hdHRlZChvZmZzZXQpOworICAgICAgICAgICAgc3RhcnQg
PSB7IGxpbmU6IGxvY2F0aW9uLmxpbmVOdW1iZXIsIGNoOiBsb2NhdGlvbi5jb2x1bW5OdW1iZXIg
fTsKKyAgICAgICAgICAgIG9mZnNldCA9IGNvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9z
KHN0YXJ0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdGFydCA9IGNvZGVNaXJyb3Iu
Z2V0RG9jKCkucG9zRnJvbUluZGV4KG9mZnNldCk7CisKKyAgICAgICAgdmFyIHNvdXJjZVN0cmlu
ZyA9IGNvZGVNaXJyb3IuZ2V0VmFsdWUoKTsKKyAgICAgICAgaWYgKGlzUmV0dXJuKSB7CisgICAg
ICAgICAgICAvLyBUcmFuc2xhdGUgdGhlIHBvc2l0aW9uIHRvIHRoZSBjbG9zaW5nIHBhcmVudGhl
c2lzIG9mIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMuCisgICAgICAgICAgICBvZmZzZXQgPSB0aGlz
Ll9nZXROZXdPZmZzZXRGb3JSZXR1cm5TdGF0ZW1lbnQobm9kZSwgb2Zmc2V0LCBzb3VyY2VTdHJp
bmcpOworICAgICAgICAgICAgc3RhcnQgPSBjb2RlTWlycm9yLmdldERvYygpLnBvc0Zyb21JbmRl
eChvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm90ZTogQ29kZU1pcnJvciBib29r
bWFya3MgcmVuZGVyIHRvIHRoZSBsZWZ0IG9mIHRoZSBjaGFyYWN0ZXIgdGhleSdyZSBiZWluZyBk
aXNwbGF5ZWQgbmV4dCB0bzsgdGhhdCBpcyB3aHkgcmlnaHQgbWFyZ2luIGNoZWNrcyB0aGUgY3Vy
cmVudCBvZmZzZXQuCisgICAgICAgIHZhciBpc1NwYWNlUmVnZXhwID0gL1xzLzsKKyAgICAgICAg
dmFyIHNob3VsZEhhdmVMZWZ0TWFyZ2luID0gb2Zmc2V0ICE9PSAwICYmICFpc1NwYWNlUmVnZXhw
LnRlc3Qoc291cmNlU3RyaW5nW29mZnNldCAtIDFdKTsKKyAgICAgICAgdmFyIHNob3VsZEhhdmVS
aWdodE1hcmdpbiA9ICFpc1NwYWNlUmVnZXhwLnRlc3Qoc291cmNlU3RyaW5nW29mZnNldF0pOwor
ICAgICAgICB2YXIgdHlwZVRva2VuID0gbmV3IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3KHRo
aXMsIHNob3VsZEhhdmVSaWdodE1hcmdpbiwgc2hvdWxkSGF2ZUxlZnRNYXJnaW4sIG5vZGUuX2F0
dGFjaG1lbnRzLl90eXBlUG9wb3ZlclRpdGxlKTsKKyAgICAgICAgdmFyIGJvb2ttYXJrID0gY29k
ZU1pcnJvci5zZXRVbmlxdWVCb29rbWFyayhzdGFydCwgeyB3aWRnZXQ6IHR5cGVUb2tlbi5lbGVt
ZW50IH0pOworICAgICAgICBub2RlLl9hdHRhY2htZW50cy5fdHlwZVRva2VuID0gdHlwZVRva2Vu
OworICAgICAgICB0aGlzLl90eXBlVG9rZW5Ob2Rlcy5wdXNoKG5vZGUpOworICAgICAgICB0aGlz
Ll90eXBlVG9rZW5Cb29rbWFya3MucHVzaChib29rbWFyayk7CisgICAgfSwKKworICAgIF91cGRh
dGVUeXBlVG9rZW5zRm9yRWFjaE5vZGU6IGZ1bmN0aW9uKG5vZGUpIAorICAgIHsKKyAgICAgICAg
dmFyIFR5cGVzID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZTsKKworICAgICAg
ICBzd2l0Y2gobm9kZS50eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25EZWNsYXJh
dGlvbjoKKyAgICAgICAgY2FzZSBUeXBlcy5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAg
ICBub2RlLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtKSB7CisgICAgICAgICAgICAgICAg
aWYgKHBhcmFtLl9hdHRhY2htZW50cy5fdHlwZVRva2VuKQorICAgICAgICAgICAgICAgICAgICBw
YXJhbS5fYXR0YWNobWVudHMuX3R5cGVUb2tlbi51cGRhdGUocGFyYW0uX2F0dGFjaG1lbnRzLl90
eXBlcyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChub2RlLl9hdHRhY2htZW50
cy5fdHlwZVRva2VuKQorICAgICAgICAgICAgICAgIG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlVG9r
ZW4udXBkYXRlKG5vZGUuX2F0dGFjaG1lbnRzLl9yZXR1cm5UeXBlcyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAg
ICBpZiAobm9kZS5fYXR0YWNobWVudHMuX3R5cGVUb2tlbikKKyAgICAgICAgICAgICAgICBub2Rl
Ll9hdHRhY2htZW50cy5fdHlwZVRva2VuLnVwZGF0ZShub2RlLl9hdHRhY2htZW50cy5fdHlwZXMp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2NsZWFyVHlw
ZVRva2VuczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuTm9kZXMu
Zm9yRWFjaChmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBub2RlLl9hdHRhY2htZW50cy5f
dHlwZVRva2VuID0gbnVsbDsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3R5cGVUb2tlbkJv
b2ttYXJrcy5mb3JFYWNoKGZ1bmN0aW9uKGJvb2ttYXJrKSB7CisgICAgICAgICAgICBib29rbWFy
ay5jbGVhcigpOworICAgICAgICB9KTsKKworICAgICAgICB0aGlzLl90eXBlVG9rZW5Ob2RlcyA9
IFtdOworICAgICAgICB0aGlzLl90eXBlVG9rZW5Cb29rbWFya3MgPSBbXTsKKyAgICB9LAorCisg
ICAgX2dldE5ld09mZnNldEZvclJldHVyblN0YXRlbWVudDogZnVuY3Rpb24obm9kZSwgb2Zmc2V0
LCBzb3VyY2VTdHJpbmcpCisgICAgeworICAgICAgICAvLyBUaGUgYXNzdW1wdGlvbiBoZXJlIGlz
IHRoYXQgd2UgZ2V0IHRoZSBvZmZzZXQgc3RhcnRpbmcgYXQgdGhlIGZ1bmN0aW9uIGtleXdvcmQg
KG9yIGFmdGVyIHRoZSBnZXQvc2V0IGtleXdvcmRzKS4KKyAgICAgICAgLy8gV2Ugd2lsbCByZXR1
cm4gdGhlIG9mZnNldCBmb3IgdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMgaW4gdGhlIGZ1bmN0aW9u
IGRlY2xhcmF0aW9uLgorICAgICAgICAvLyBBbGwgdGhpcyBjb2RlIGlzIGp1c3QgYSB3YXkgdG8g
ZmluZCB0aGlzIHBhcmVudGhlc2lzIHdoaWxlIGlnbm9yaW5nIGNvbW1lbnRzLgorCisgICAgICAg
IHZhciBpc011bHRpTGluZUNvbW1lbnQgPSBmYWxzZTsKKyAgICAgICAgdmFyIGlzU2luZ2xlTGlu
ZUNvbW1lbnQgPSBmYWxzZTsKKyAgICAgICAgdmFyIHNob3VsZElnbm9yZSA9IGZhbHNlOworICAg
ICAgICB3aGlsZSAoKHNvdXJjZVN0cmluZ1tvZmZzZXRdICE9PSAiKSIgfHwgc2hvdWxkSWdub3Jl
KSAmJiBvZmZzZXQgPCBzb3VyY2VTdHJpbmcubGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoaXNT
aW5nbGVMaW5lQ29tbWVudCAmJiAoc291cmNlU3RyaW5nW29mZnNldF0gPT09ICJcbiIgfHwgKHNv
dXJjZVN0cmluZ1tvZmZzZXRdID09PSAiXHIiICYmIHNvdXJjZVN0cmluZ1tvZmZzZXQgKyAxXSA9
PT0gIlxuIikpKSB7CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVN0cmluZ1tvZmZzZXRdID09
PSAiXHIiKQorICAgICAgICAgICAgICAgICAgICBvZmZzZXQrKzsKKyAgICAgICAgICAgICAgICBp
c1NpbmdsZUxpbmVDb21tZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgc2hvdWxkSWdub3Jl
ID0gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTXVsdGlMaW5lQ29tbWVudCAmJiBz
b3VyY2VTdHJpbmdbb2Zmc2V0XSA9PT0gIioiICYmIHNvdXJjZVN0cmluZ1tvZmZzZXQgKyAxXSA9
PT0gIi8iKSB7CisgICAgICAgICAgICAgICAgaXNNdWx0aUxpbmVDb21tZW50ID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgc2hvdWxkSWdub3JlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgb2Zm
c2V0Kys7IAorICAgICAgICAgICAgfSBlbHNlIGlmICghc2hvdWxkSWdub3JlICYmIHNvdXJjZVN0
cmluZ1tvZmZzZXRdID09PSAiLyIpIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQrKzsKKyAgICAg
ICAgICAgICAgICBpZiAoc291cmNlU3RyaW5nW29mZnNldF0gPT09ICIqIikKKyAgICAgICAgICAg
ICAgICAgICAgaXNNdWx0aUxpbmVDb21tZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChzb3VyY2VTdHJpbmdbb2Zmc2V0XSA9PT0gIi8iKQorICAgICAgICAgICAgICAgICAgICBp
c1NpbmdsZUxpbmVDb21tZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHBhcnNpbmcuIENvdWxkbid0IHBhcnNl
IGNvbW1lbnQgcHJlYW1ibGUuIik7CisgICAgICAgICAgICAgICAgc2hvdWxkSWdub3JlID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb2Zmc2V0Kys7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMTsKKyAgICB9LAorCisgICAgX2NsZWFyVGltZW91dElm
TmVlZGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fdGltZW91dElkZW50
aWZpZXIpIHsKKyAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWRlbnRpZmll
cik7CisgICAgICAgICAgICB0aGlzLl90aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAg
IH0KKyAgICB9Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlw
ZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKSW5kZXg6IFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbVRhdS5z
dmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1h
Z2VzL05hdmlnYXRpb25JdGVtVGF1LnN2ZwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbVRhdS5zdmcJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJV
VEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxzdmcgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9u
PSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CisgICAgPHJlY3QgeD0i
MyIgeT0iMyIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiPjwvcmVjdD4KKyAgICA8cmVjdCB4PSI3IiB5
PSI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIxMCI+PC9yZWN0PgorPC9zdmc+CkluZGV4OiBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQmFja0ZvcndhcmRFbnRyeS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
QmFja0ZvcndhcmRFbnRyeS5qcwkocmV2aXNpb24gMTcxOTk3KQorKysgU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0JhY2tGb3J3YXJkRW50cnkuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDEyICs1MiwxMyBAQCBXZWJJbnNwZWN0b3IuQmFja0ZvcndhcmRFbnRyeS5w
cm90b3R5cGUgCiAgICAgICAgIHJldHVybiBPYmplY3Quc2hhbGxvd0NvcHkodGhpcy5fY29va2ll
KTsKICAgICB9LAogCi0gICAgcHJlcGFyZVRvU2hvdzogZnVuY3Rpb24oKQorICAgIHByZXBhcmVU
b1Nob3c6IGZ1bmN0aW9uKHNob3VsZENhbGxTaG93bikKICAgICB7CiAgICAgICAgIHRoaXMuX3Jl
c3RvcmVGcm9tQ29va2llKCk7CiAKICAgICAgICAgdGhpcy5jb250ZW50Vmlldy52aXNpYmxlID0g
dHJ1ZTsKLSAgICAgICAgdGhpcy5jb250ZW50Vmlldy5zaG93bigpOworICAgICAgICBpZiAoc2hv
dWxkQ2FsbFNob3duKQorICAgICAgICAgICAgdGhpcy5jb250ZW50Vmlldy5zaG93bigpOwogICAg
ICAgICB0aGlzLmNvbnRlbnRWaWV3LnVwZGF0ZUxheW91dCgpOwogICAgIH0sCiAKSW5kZXg6IFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Njcmlw
dC5qcwkocmV2aXNpb24gMTcxOTk3KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTW9kZWxzL1NjcmlwdC5qcwkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOSBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0ID0gZnVuY3Rpb24oaWQsIHJhbmdlCiAKICAgICBpZiAoc291cmNl
TWFwVVJMKQogICAgICAgICBXZWJJbnNwZWN0b3Iuc291cmNlTWFwTWFuYWdlci5kb3dubG9hZFNv
dXJjZU1hcChzb3VyY2VNYXBVUkwsIHRoaXMuX3VybCwgdGhpcyk7CisKKyAgICB0aGlzLl9zb3Vy
Y2VDb2RlQVNUID0gbnVsbDsKKyAgICB0aGlzLl9zb3VyY2VDb2RlQVNURGlkTG9hZENhbGxiYWNr
ID0gbnVsbDsKIH07CiAKIFdlYkluc3BlY3Rvci5TY3JpcHQuVHlwZUlkZW50aWZpZXIgPSAic2Ny
aXB0IjsKQEAgLTExNyw3ICsxMjAsMTUgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBEZWJ1
Z2dlckFnZW50LmdldFNjcmlwdFNvdXJjZSh0aGlzLl9pZCwgY2FsbGJhY2spOworICAgICAgICBm
dW5jdGlvbiBjYWxsYmFja1dyYXBwZXIoZXJyb3IsIHNvdXJjZVRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICghZXJyb3IpCisgICAgICAgICAgICAgICAgdGhpcy5fbWFrZUFTVChzb3Vy
Y2VUZXh0KTsKKworICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkoY2FsbGJhY2ssIEFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpOworICAgICAgICB9CisKKyAgICAgICAgRGVi
dWdnZXJBZ2VudC5nZXRTY3JpcHRTb3VyY2UodGhpcy5faWQsIGNhbGxiYWNrV3JhcHBlci5iaW5k
KHRoaXMpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSwKIApAQCAtMTc0LDYgKzE4NSwx
NyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAg
ICAgIHJldHVybiBudWxsOworICAgIH0sCisKKyAgICBfbWFrZUFTVDogZnVuY3Rpb24oc291cmNl
VGV4dCkgeworICAgICAgICBpZiAoIXNvdXJjZVRleHQpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdGhpcy5fc291cmNlQ29kZUFTVCA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZUFTVChzb3VyY2VUZXh0LCB0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMuX3NvdXJjZUNvZGVBU1RE
aWRMb2FkQ2FsbGJhY2sgJiYgdHlwZW9mIHRoaXMuX3NvdXJjZUNvZGVBU1REaWRMb2FkQ2FsbGJh
Y2sgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgIHRoaXMuX3NvdXJjZUNvZGVBU1REaWRM
b2FkQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIHRoaXMuX3NvdXJjZUNvZGVBU1REaWRMb2FkQ2Fs
bGJhY2sgPSBudWxsOworICAgICAgICB9CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGVBU1QuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNv
ZGVBU1QuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Nb2RlbHMvU291cmNlQ29kZUFTVC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgz
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNUID0gZnVuY3Rpb24o
c291cmNlVGV4dCwgc2NyaXB0KSAKK3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhp
cyk7CisgICAgdGhpcy5fc2NyaXB0ID0gc2NyaXB0OworCisgICAgdHJ5IHsKKyAgICAgICAgdmFy
IGVzcHJpbWFBU1QgPSBXZWJJbnNwZWN0b3IuX2VzcHJpbWEucGFyc2Uoc291cmNlVGV4dCwgeyBy
YW5nZSA6IHRydWUgfSk7CisgICAgICAgIHRoaXMuX2FzdCA9IHRoaXMuX2NyZWF0ZUludGVybmFs
QVNUKGVzcHJpbWFBU1QpOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICB2YXIgdmVyYm9zZSA9
IGZhbHNlOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJD
b3VsZG4ndCBwYXJzZSBKYXZhU2NyaXB0IEZpbGU6IFxuIiArIGUubWVzc2FnZSkKKyAgICAgICAg
dGhpcy5fYXN0ID0gbnVsbDsKKyAgICB9CisKKyAgICB0aGlzLl9vcmlnaW5hbFNvdXJjZVRleHQg
PSBzb3VyY2VUZXh0OworfTsKKworLy8gTm90ZSB0aGF0IHRoaXMgY29ycmVzcG9uZHMgaWRlbnRp
Y2FsbHkgdG8gYW4gZW51bSBpbiBKYXZhU2NpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGVyLmgKK1dlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULlR5cGVQcm9maWxlclNlYXJj
aERlc2NyaXB0b3IgPSB7CisgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbDog
MSwKKyAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm46IDIKK307
CisKK1dlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUgPSB7CisgICAgQXNzaWdubWVu
dEV4cHJlc3Npb246ICdBc3NpZ25tZW50RXhwcmVzc2lvbicsCisgICAgQXJyYXlFeHByZXNzaW9u
OiAnQXJyYXlFeHByZXNzaW9uJywKKyAgICBCbG9ja1N0YXRlbWVudDogJ0Jsb2NrU3RhdGVtZW50
JywKKyAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVzc2lvbicsCisgICAgQnJlYWtT
dGF0ZW1lbnQ6ICdCcmVha1N0YXRlbWVudCcsCisgICAgQ2F0Y2hDbGF1c2U6ICdDYXRjaENsYXVz
ZScsCisgICAgQ29udGludWVTdGF0ZW1lbnQ6ICdDb250aW51ZVN0YXRlbWVudCcsCisgICAgRG9X
aGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLAorICAgIERlYnVnZ2VyU3RhdGVtZW50
OiAnRGVidWdnZXJTdGF0ZW1lbnQnLAorICAgIEVtcHR5U3RhdGVtZW50OiAnRW1wdHlTdGF0ZW1l
bnQnLAorICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6ICdFeHByZXNzaW9uU3RhdGVtZW50JywKKyAg
ICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLAorICAgIEZvckluU3RhdGVtZW50OiAnRm9y
SW5TdGF0ZW1lbnQnLAorICAgIEZ1bmN0aW9uQ2FsbDogJ0Z1bmN0aW9uQ2FsbCcsCisgICAgRnVu
Y3Rpb25EZWNsYXJhdGlvbjogJ0Z1bmN0aW9uRGVjbGFyYXRpb24nLAorICAgIEZ1bmN0aW9uRXhw
cmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAgSWRlbnRpZmllcjogJ0lkZW50aWZp
ZXInLAorICAgIElmU3RhdGVtZW50OiAnSWZTdGF0ZW1lbnQnLAorICAgIExpdGVyYWw6ICdMaXRl
cmFsJywKKyAgICBMYWJlbGVkU3RhdGVtZW50OiAnTGFiZWxlZFN0YXRlbWVudCcsCisgICAgTG9n
aWNhbEV4cHJlc3Npb246ICdMb2dpY2FsRXhwcmVzc2lvbicsCisgICAgTWVtYmVyRXhwcmVzc2lv
bjogJ01lbWJlckV4cHJlc3Npb24nLAorICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9u
JywKKyAgICBPYmplY3RFeHByZXNzaW9uOiAnT2JqZWN0RXhwcmVzc2lvbicsCisgICAgUG9zdGZp
eEV4cHJlc3Npb246J1Bvc3RmaXhFeHByZXNzaW9uJywKKyAgICBQcm9ncmFtOiAnUHJvZ3JhbScs
CisgICAgUHJvcGVydHk6ICdQcm9wZXJ0eScsCisgICAgUHJlZml4RXhwcmVzc2lvbjonUHJlZml4
RXhwcmVzc2lvbicsCisgICAgUmV0dXJuU3RhdGVtZW50OiAnUmV0dXJuU3RhdGVtZW50JywKKyAg
ICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLAorICAgIFN3aXRjaFN0
YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsCisgICAgU3dpdGNoQ2FzZTogJ1N3aXRjaENhc2Un
LAorICAgIFRlcm5hcnlFeHByZXNzaW9uOiAnVGVybmFyeUV4cHJlc3Npb24nLAorICAgIFRoaXNF
eHByZXNzaW9uOiAnVGhpc0V4cHJlc3Npb24nLAorICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dT
dGF0ZW1lbnQnLAorICAgIFRyeVN0YXRlbWVudDogJ1RyeVN0YXRlbWVudCcsCisgICAgVW5hcnlF
eHByZXNzaW9uOiAnVW5hcnlFeHByZXNzaW9uJywKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiAn
VmFyaWFibGVEZWNsYXJhdGlvbicsCisgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVE
ZWNsYXJhdG9yJywKKyAgICBXaGlsZVN0YXRlbWVudDogJ1doaWxlU3RhdGVtZW50JywKKyAgICBX
aXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVudCcKK307CisKK1dlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlQVNULnByb3RvdHlwZSA9IHsKKworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZUFTVCwKKworICAgIC8vIFB1YmxpYworCisgICAgZm9yRWFjaE5vZGU6IGZ1bmN0aW9u
KGZ1bmMpCisgICAgeworICAgICAgICB0aGlzLl9yZWN1cnNlKHRoaXMuX2FzdCwgZnVuYywgdGhp
cy5fZGVmYXVsdFBhcnNlclN0YXRlKCkpOworICAgIH0sCisKKyAgICBmaWx0ZXI6IGZ1bmN0aW9u
KGZ1bmMsIHN0YXJ0Tm9kZSkgCisgICAgeworICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUg
fHwgdGhpcy5fYXN0OworICAgICAgICB2YXIgbm9kZXMgPSBbXTsKKyAgICAgICAgZnVuY3Rpb24g
ZmlsdGVyKG5vZGUsIHN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZnVuYyhub2Rl
KSkKKyAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHN0YXRlLnNraXBDaGlsZE5vZGVzID0gdHJ1ZTsgCisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fcmVjdXJzZShzdGFydE5vZGUsIGZpbHRlciwgdGhpcy5fZGVmYXVsdFBh
cnNlclN0YXRlKCkpOworCisgICAgICAgIHJldHVybiBub2RlczsKKyAgICB9LAorCisgICAgZmls
dGVyQnlSYW5nZTogZnVuY3Rpb24oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKKyAgICB7CisgICAg
ICAgIHZhciBhbGxOb2RlcyA9IFtdOworICAgICAgICB2YXIgc3RhcnQgPSAwOworICAgICAgICB2
YXIgZW5kID0gMTsKKyAgICAgICAgZnVuY3Rpb24gZm9yRWFjaChub2RlLCBzdGF0ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gcHJvZ19zdGFydCAgICByYW5nZSAgICAgcHJvZ3JhbSBlbmQK
KyAgICAgICAgICAgIC8vIFsgICAgICAgICAgICAgWyAgIF0gICAgICAgICAgICAgICBdCisgICAg
ICAgICAgICAvLyAgICAgICAgICBbIF0gWyBbXSAgXSAgWyBdCisKKyAgICAgICAgICAgIC8vIElm
IGEgbm9kZSdzIHJhbmdlIGVuZHMgYmVmb3JlIHRoZSByYW5nZSB3ZSdyZSBpbnRlcmVzdGVkIGlu
IHN0YXJ0cywgd2UgZG9uJ3QgbmVlZCB0byBzZWFyY2ggYW55IG9mIGl0cworICAgICAgICAgICAg
Ly8gZW5jbG9zaW5nIHJhbmdlcywgYmVjYXVzZSwgYnkgZGVmaW5pdGlvbiwgdGhvc2UgZW5jbG9z
aW5nIHJhbmdlcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIG5vZGUncyBvdXRlciByYW5nZS4K
KyAgICAgICAgICAgIGlmIChub2RlLnJhbmdlW2VuZF0gPCBzdGFydE9mZnNldCkKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5za2lwQ2hpbGROb2RlcyA9IHRydWU7CisKKyAgICAgICAgICAgIC8vIFdl
IGFyZSBvbmx5IGluc3RlcmVzdGVkIGluIG5vZGVzIHdob3NlIHN0YXJ0IHBvcyBpcyB3aXRoaW4g
b3VyIHJhbmdlLgorICAgICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0IDw9IG5vZGUucmFuZ2Vbc3Rh
cnRdICYmIG5vZGUucmFuZ2Vbc3RhcnRdIDw9IGVuZE9mZnNldCkKKyAgICAgICAgICAgICAgICBh
bGxOb2Rlcy5wdXNoKG5vZGUpOworCisgICAgICAgICAgICAvLyBPbmNlIHdlIHNlZSBub2RlcyB0
aGF0IHN0YXJ0IGJleW9uZCBvdXIgcmFuZ2UsIHdlIGNhbiBxdWl0IHRyYXZlcnNpbmcgdGhlIEFT
VC4gV2UgY2FuIGRvIHRoaXMgc2FmZWx5CisgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIGtub3cg
dGhlIEFTVCBpcyB0cmF2ZXJzZWQgdXNpbmcgZGVwdGggZmlyc3Qgc2VhcmNoLCBzbyBpdCB3aWxs
IHRyYXZlcnNlIGludG8gZW5jbG9zaW5nIHJhbmdlcworICAgICAgICAgICAgLy8gYmVmb3JlIGl0
IHRyYXZlcnNlcyBpbnRvIGFkamFjZW50IHJhbmdlcy4KKyAgICAgICAgICAgIGlmIChub2RlLnJh
bmdlW3N0YXJ0XSA+IGVuZE9mZnNldCkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zaG91bGRTdG9w
RWFybHkgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5mb3JFYWNoTm9kZShmb3JF
YWNoKTsKKworICAgICAgICByZXR1cm4gYWxsTm9kZXM7CisgICAgfSwKKworICAgIGNvbnRhaW5z
Tm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uKHN0YXJ0Tm9kZSkKKyAgICB7CisgICAg
ICAgIGlmIChzdGFydE5vZGUuX2F0dGFjaG1lbnRzLl9oYXNSZXR1cm5TdGF0ZW1lbnQgIT09IHVu
ZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybiBzdGFydE5vZGUuX2F0dGFjaG1lbnRzLl9oYXNS
ZXR1cm5TdGF0ZW1lbnQ7CisKKyAgICAgICAgZnVuY3Rpb24gZmlsdGVyKG5vZGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBub2RlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlQVNULkFTVFR5cGUuRnVuY3Rpb25FeHByZXNzaW9uICYmIG5vZGUudHlwZSAhPT0gV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5GdW5jdGlvbkRlY2xhcmF0aW9uOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5maWx0ZXIoZmlsdGVyLCBzdGFydE5vZGUp
OworICAgICAgICB2YXIgaGFzUmV0dXJuU3RhdGVtZW50ID0gZmFsc2U7CisgICAgICAgIHZhciBy
ZXR1cm5UeXBlID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5SZXR1cm5TdGF0
ZW1lbnQ7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07CisgICAgICAgICAgICBpZiAobm9kZS50
eXBlID09PSByZXR1cm5UeXBlICYmIG5vZGUuYXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICBo
YXNSZXR1cm5TdGF0ZW1lbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgICAKKyAgICAgICAgc3RhcnROb2RlLl9hdHRhY2ht
ZW50cy5faGFzUmV0dXJuU3RhdGVtZW50ID0gaGFzUmV0dXJuU3RhdGVtZW50OworCisgICAgICAg
IHJldHVybiBoYXNSZXR1cm5TdGF0ZW1lbnQ7CisgICAgfSwKKworICAgIHVwZGF0ZVR5cGVzOiBm
dW5jdGlvbihzb3VyY2VJRCwgbm9kZXNUb1VwZGF0ZSwgY2FsbGJhY2spIAorICAgIHsKKyAgICAg
ICAgdmFyIHN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CisgICAgICAgIHZhciB2
ZXJib3NlID0gZmFsc2U7CisgICAgICAgIHZhciBhbGxSZXF1ZXN0cyA9IFtdOworICAgICAgICB2
YXIgYWxsUmVxdWVzdE5vZGVzID0gW107CisKKyAgICAgICAgZnVuY3Rpb24gZm9yRWFjaChub2Rl
KSB7CisgICAgICAgICAgICB2YXIgVHlwZXMgPSBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5B
U1RUeXBlOworICAgICAgICAgICAgc3dpdGNoKG5vZGUudHlwZSkgeworICAgICAgICAgICAgY2Fz
ZSBUeXBlcy5GdW5jdGlvbkRlY2xhcmF0aW9uOgorICAgICAgICAgICAgY2FzZSBUeXBlcy5GdW5j
dGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgbm9kZS5wYXJhbXMuZm9yRWFjaChmdW5j
dGlvbiAocGFyYW0pIHsKKyAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdHMucHVzaCh7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yOiBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZUFTVC5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLlR5cGVQcm9m
aWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWwsCisgICAgICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2VJRDogc291cmNlSUQsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXZvdDogcGFyYW0ucmFu
Z2VbMF0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGFsbFJl
cXVlc3ROb2Rlcy5wdXNoKHBhcmFtKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgICAgIGFsbFJlcXVlc3RzLnB1c2goeworICAgICAgICAgICAgICAgICAgICB0eXBlSW5mb3Jt
YXRpb25EZXNjcmlwdG9yOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5UeXBlUHJvZmlsZXJT
ZWFyY2hEZXNjcmlwdG9yLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVy
biwKKyAgICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IHNvdXJjZUlELAorICAgICAgICAgICAg
ICAgICAgICBkaXZvdDogbm9kZS5ib2R5LnJhbmdlWzBdCisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgYWxsUmVxdWVzdE5vZGVzLnB1c2gobm9kZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVzLlZhcmlhYmxlRGVjbGFyYXRvcjoKKyAg
ICAgICAgICAgICAgICAvL2lmIChub2RlLmluaXQpIHsKKyAgICAgICAgICAgICAgICAvL2NvbnNv
bGUubG9nKCJyZXF1ZXN0aW5nIHR5cGUgZm9yIHZhcjogIiArIG5vZGUuaWQubmFtZSkKKyAgICAg
ICAgICAgICAgICAgICAgYWxsUmVxdWVzdHMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5U
eXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JO
b3JtYWwsCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJRDogc291cmNlSUQsCisgICAg
ICAgICAgICAgICAgICAgICAgICBkaXZvdDogbm9kZS5pZC5yYW5nZVswXQorICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdE5vZGVzLnB1c2gobm9k
ZSk7CisgICAgICAgICAgICAgICAgLy99CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgc3RhcnRSZWN1cnNlVHJlZVRpbWUgPSAo
bmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgICAgICB2YXIgc2NyaXB0VVJMID0gdGhpcy5fc2Ny
aXB0LnVybDsKKyAgICAgICAgCisgICAgICAgIG5vZGVzVG9VcGRhdGUuZm9yRWFjaChmb3JFYWNo
KTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJcbiMj
IFJlY3Vyc2VUcmVlIHRpbWU6ICIgKyAiKCIgKyBzY3JpcHRVUkwgKyAiKToiICsgKChuZXcgRGF0
ZSgpLmdldFRpbWUoKSkgLSBzdGFydFJlY3Vyc2VUcmVlVGltZSkgKyAibXMiKTsKKworICAgICAg
ICBmdW5jdGlvbiBoYW5kbGVUeXBlcyhlcnJvciwgYWxsVHlwZXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KGFsbFR5cGVzLmxlbmd0aCA9PT0gYWxsUmVxdWVzdHMubGVuZ3RoKTsK
KworICAgICAgICAgICAgdmFyIGVuZFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlxuIyMg
R2F0aGVyVHlwZXMgdGltZSAiICsgIigiICsgc2NyaXB0VVJMICsgIik6IiArIChlbmRUaW1lIC0g
c3RhcnRUaW1lKSArICJtcyIpOworICAgICAgICAgICAgdmFyIGk7CisgICAgICAgICAgICB2YXIg
bm9kZTsKKyAgICAgICAgICAgIHZhciB0eXBlczsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg
PCBhbGxUeXBlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIG5vZGUgPSBhbGxSZXF1
ZXN0Tm9kZXNbaV07CisgICAgICAgICAgICAgICAgdHlwZXMgPSBhbGxUeXBlc1tpXTsKKyAgICAg
ICAgICAgICAgICBpZiAoYWxsUmVxdWVzdHNbaV0udHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciA9
PT0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRv
ci5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4pCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUuX2F0dGFjaG1lbnRzLl9yZXR1cm5UeXBlcyA9IHR5cGVzOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3R5
cGVzID0gdHlwZXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJcbiMjIFRvdGFsVGltZSB0aW1lOiAiICsgIigi
ICsgc2NyaXB0VVJMICsgIik6IiArICgobmV3IERhdGUoKSkuZ2V0VGltZSgpIC0gc3RhcnRUaW1l
KSArICJtcyIpOworCisgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9CisKKyAgICAg
ICAgUnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhhbGxS
ZXF1ZXN0cywgaGFuZGxlVHlwZXMpOworICAgIH0sCisgICAgCisgICAgLy8gUHJpdmF0ZQorCisg
ICAgX2RlZmF1bHRQYXJzZXJTdGF0ZTogZnVuY3Rpb24oKSAKKyAgICB7CisgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICBzaG91bGRTdG9wRWFybHk6IGZhbHNlLAorICAgICAgICAgICAgc2tp
cENoaWxkTm9kZXM6IGZhbHNlCisgICAgICAgIH07CisgICAgfSwKKworICAgIF9yZWN1cnNlOiBm
dW5jdGlvbihub2RlLCBmdW5jLCBzdGF0ZSkgCisgICAgeworICAgICAgICBpZiAoIW5vZGUpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHN0YXRlLnNob3VsZFN0b3BFYXJseSB8
fCBzdGF0ZS5za2lwQ2hpbGROb2RlcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2
YXIgVHlwZXMgPSBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlOworCisgICAgICAg
IHN3aXRjaChub2RlLnR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlcy5Bc3NpZ25tZW50RXhwcmVz
c2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZShub2RlLmxlZnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5yaWdodCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVHlwZXMuQXJyYXlFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0
ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5lbGVtZW50cywgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuQmxvY2tTdGF0
ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2VBcnJheShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGVzLkJpbmFyeUV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5j
KG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sZWZ0LCBmdW5j
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGZ1bmMsIHN0
YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkJyZWFrU3RhdGVt
ZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUeXBlcy5DYXRjaENsYXVzZToKKyAgICAgICAgICAgIGZ1bmMobm9kZSwg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnBhcmFtLCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuQ29udGludWVTdGF0ZW1lbnQ6
CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5sYWJlbCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVHlwZXMuRG9XaGlsZVN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsK
KyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkRlYnVnZ2VyU3RhdGVtZW50
OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUeXBlcy5FbXB0eVN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuRXhwcmVzc2lv
blN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLmV4cHJlc3Npb24sIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkZvclN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1
bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmluaXQsIGZ1
bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1
bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS51cGRhdGUsIGZ1bmMs
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Gb3JJblN0YXRlbWVu
dDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLmxlZnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5yaWdodCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGVzLkZ1bmN0aW9uQ2FsbDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmNhbGxlZSwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuYXJndW1lbnRzLCBmdW5jLCBzdGF0ZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5GdW5jdGlvbkRlY2xhcmF0aW9uOgor
ICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
KG5vZGUuaWQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShu
b2RlLnBhcmFtcywgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGVzLkZ1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmlkLCBmdW5jLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5wYXJhbXMsIGZ1bmMsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5JZGVudGlmaWVyOgorICAgICAgICAgICAgZnVu
Yyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5J
ZlN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLnByZWRpY2F0ZSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLmNvbnNlcXVlbnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5hbHRlcm5hdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkxpdGVyYWw6CisgICAgICAgICAgICBmdW5jKG5v
ZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkxhYmVs
ZWRTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5sYWJlbCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFR5cGVzLkxvZ2ljYWxFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhu
b2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubGVmdCwgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnJpZ2h0LCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5NZW1iZXJFeHByZXNz
aW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9y
ZWN1cnNlKG5vZGUub2JqZWN0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlKG5vZGUucHJvcGVydHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFR5cGVzLk5ld0V4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0
YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5jYWxsZWUsIGZ1bmMsIHN0YXRl
KTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmFyZ3VtZW50cywgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuT2JqZWN0RXhw
cmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZUFycmF5KG5vZGUucHJvcGVydGllcywgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuUHJlZml4RXhwcmVzc2lvbjoKKyAgICAgICAg
ICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFy
Z3VtZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
eXBlcy5Qcm9ncmFtOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Qcm9wZXJ0eToKKyAgICAgICAgICAgIGZ1bmMo
bm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmtleSwgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnZhbHVlLCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Qb3N0Zml4RXhwcmVz
c2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZShub2RlLmFyZ3VtZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUeXBlcy5SZXR1cm5TdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5v
ZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuU2VxdWVu
Y2VFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5leHByZXNzaW9ucywgZnVuYywgc3RhdGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuU3dpdGNoU3RhdGVtZW50OgorICAg
ICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5v
ZGUuZGlzY3JpbWluYW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
QXJyYXkobm9kZS5jYXNlcywgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVHlwZXMuU3dpdGNoQ2FzZToKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnByZWRpY2F0ZSwgZnVuYywgc3RhdGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuY29uc2VxdWVudCwgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVGVybmFyeUV4
cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRo
aXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRo
aXMuX3JlY3Vyc2Uobm9kZS5jb25zZXF1ZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlKG5vZGUuYWx0ZXJuYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5UaGlzRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1
bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMu
VGhyb3dTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVHJ5U3RhdGVtZW50OgorICAgICAgICAgICAg
ZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYmxvY2ss
IGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmd1YXJk
ZWRIYW5kbGVycywgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5
KG5vZGUuaGFuZGxlcnMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5maW5hbGl6ZXIsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFR5cGVzLlVuYXJ5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5WYXJpYWJsZURlY2xh
cmF0aW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlQXJyYXkobm9kZS5kZWNsYXJhdGlvbnMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlZhcmlhYmxlRGVjbGFyYXRvcjoKKyAgICAg
ICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmlkLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaW5pdCwg
ZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuV2hp
bGVTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlcy5XaXRoU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhu
b2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUub2JqZWN0LCBmdW5j
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3Rh
dGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZS5za2lw
Q2hpbGROb2RlcyA9IGZhbHNlOworICAgIH0sCisKKyAgICBfcmVjdXJzZUFycmF5IDogZnVuY3Rp
b24oYXJyYXksIGZ1bmMsIHN0YXRlKSAKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGZvckVhY2go
bm9kZSkgeworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLCBmdW5jLCBzdGF0ZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBhcnJheS5mb3JFYWNoKGZvckVhY2guYmluZCh0aGlzKSk7Cisg
ICAgfSwKKyAgICAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgZnJvbSBlc3ByaW1h
J3MgQVNUIHRvIG91cnMuIE1vc3RseSwgdGhpcyBpcyBqdXN0IHRoZSBpZGVudGl0eSBmdW5jdGlv
biwgYnV0IHRoZXJlIGFyZSBhIGZldyBub2RlcyBhbmQgYSBmZXcgcHJvcGVydGllcyB0aGF0IGFy
ZSByZW5hbWVkLgorICAgIC8vIFNwZWNpZmljYWxseSwgJ3Rlc3QnIHByb3BlcnR5IGlzIHJlbmFt
ZWQgdG8gJ3ByZWRpY2F0ZScsIHByZWZpeC9wb3N0Zml4IG5vZGVzIGFyZSBub3cgdG8gc2VwYXJh
dGUgbm9kZXMsIENhbGxFeHByZXNzaW9uIGlzIHJlbmFtZWQgdG8gRnVuY3Rpb25DYWxsLCBhbmQg
CisgICAgLy8gQ29uZGl0aW9uYWxFeHByZXNzaW9uIGlzIHJlbmFtZWQgdG8gVGVybmFyeUV4cHJl
c3Npb24uCisgICAgX2NyZWF0ZUludGVybmFsQVNUIDogZnVuY3Rpb24obm9kZSkgCisgICAgewor
ICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICB2
YXIgcmV0OworICAgICAgICBzd2l0Y2gobm9kZS50eXBlKSB7CisgICAgICAgIGNhc2UgJ0Fzc2ln
bm1lbnRFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkFzc2lnbm1lbnRFeHByZXNz
aW9uLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBub2RlLm9wZXJhdG9yLAorICAgICAgICAg
ICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUubGVmdCksCisgICAgICAg
ICAgICAgICAgcmlnaHQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUucmlnaHQpCisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0FycmF5RXhwcmVz
c2lvbic6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5BcnJheUV4cHJlc3Npb24sCisgICAgICAgICAg
ICAgICAgZWxlbWVudHM6IG5vZGUuZWxlbWVudHMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsQVNU
LmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgJ0Jsb2NrU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkJsb2NrU3RhdGVt
ZW50LAorICAgICAgICAgICAgICAgIGJvZHk6IG5vZGUuYm9keS5tYXAodGhpcy5fY3JlYXRlSW50
ZXJuYWxBU1QuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAnQmluYXJ5RXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXQgPSB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5C
aW5hcnlFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBub2RlLm9wZXJhdG9y
LAorICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUubGVm
dCksCisgICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUu
cmlnaHQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
J0JyZWFrU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkJyZWFrU3RhdGVtZW50LAor
ICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmxhYmVs
KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdDYWxs
RXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTog
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5GdW5jdGlvbkNhbGwsCisgICAgICAg
ICAgICAgICAgY2FsbGVlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmNhbGxlZSksCisg
ICAgICAgICAgICAgICAgYXJndW1lbnRzOiBub2RlLmFyZ3VtZW50cy5tYXAodGhpcy5fY3JlYXRl
SW50ZXJuYWxBU1QuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAnQ2F0Y2hDbGF1c2UnOgorICAgICAgICAgICAgcmV0ID0geworICAg
ICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuQ2F0
Y2hDbGF1c2UsCisgICAgICAgICAgICAgICAgcGFyYW06IHRoaXMuX2NyZWF0ZUludGVybmFsQVNU
KG5vZGUucGFyYW0pLAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFs
QVNUKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlRl
cm5hcnlFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogdGhpcy5fY3JlYXRl
SW50ZXJuYWxBU1Qobm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAgICBjb25zZXF1ZW50OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmNvbnNlcXVlbnQpLAorICAgICAgICAgICAgICAgIGFs
dGVybmF0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5hbHRlcm5hdGUpCisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0NvbnRpbnVlU3RhdGVt
ZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkNvbnRpbnVlU3RhdGVtZW50LAorICAgICAgICAg
ICAgICAgIGxhYmVsOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmxhYmVsKQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdEb1doaWxlU3RhdGVt
ZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkRvV2hpbGVTdGF0ZW1lbnQsCisgICAgICAgICAg
ICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5ib2R5KSwKKyAgICAgICAg
ICAgICAgICBwcmVkaWNhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUudGVzdCkKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnRGVidWdnZXJT
dGF0ZW1lbnQnOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRGVidWdnZXJTdGF0ZW1lbnQKKyAgICAg
ICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnRW1wdHlTdGF0ZW1l
bnQnOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRW1wdHlTdGF0ZW1lbnQKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnRXhwcmVzc2lvblN0YXRlbWVudCc6
CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5FeHByZXNzaW9uU3RhdGVtZW50LAorICAgICAgICAgICAg
ICAgIGV4cHJlc3Npb246IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuZXhwcmVzc2lvbikK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnRm9yU3Rh
dGVtZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkZvclN0YXRlbWVudCwKKyAgICAgICAgICAg
ICAgICBpbml0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmluaXQpLAorICAgICAgICAg
ICAgICAgIHByZWRpY2F0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS50ZXN0KSwKKyAg
ICAgICAgICAgICAgICB1cGRhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUudXBkYXRl
KSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmJv
ZHkpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0Zv
ckluU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkZvckluU3RhdGVtZW50LAorICAg
ICAgICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUubGVmdCksCisg
ICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUucmlnaHQp
LAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYm9k
eSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnRnVu
Y3Rpb25EZWNsYXJhdGlvbic6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAg
dHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5GdW5jdGlvbkRlY2xhcmF0
aW9uLAorICAgICAgICAgICAgICAgIGlkOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmlk
KSwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0aGlzLl9jcmVhdGVJ
bnRlcm5hbEFTVC5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVh
dGVJbnRlcm5hbEFTVChub2RlLmJvZHkpLAorICAgICAgICAgICAgICAgIGlzR2V0dGVyT3JTZXR0
ZXI6IGZhbHNlIC8vIFRoaXMgaXMgb2J2aW91cywgYnV0IGlzIGNvbnZlbmllbnQgbm9uZSB0aGUg
bGVzcyBiL2MgRGVjbGFyYXRpb25zIGFuZCBFeHByZXNzaW9ucyBhcmUgb2Z0ZW4gaW50ZXJ0d2lu
ZWQuCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0Z1
bmN0aW9uRXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAg
dHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5GdW5jdGlvbkV4cHJlc3Np
b24sCisgICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuaWQp
LAorICAgICAgICAgICAgICAgIHBhcmFtczogbm9kZS5wYXJhbXMubWFwKHRoaXMuX2NyZWF0ZUlu
dGVybmFsQVNULmJpbmQodGhpcykpLAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0
ZUludGVybmFsQVNUKG5vZGUuYm9keSksCisgICAgICAgICAgICAgICAgaXNHZXR0ZXJPclNldHRl
cjogZmFsc2UgLy8gSWYgdHJ1ZSwgaXQgaXMgc2V0IGluIHRoZSBQcm9wZXJ0eSBBU1Qgbm9kZS4K
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnSWRlbnRp
Zmllcic6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5JZGVudGlmaWVyLAorICAgICAgICAgICAgICAg
IG5hbWU6IG5vZGUubmFtZQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdJZlN0YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5JZlN0YXRlbWVu
dCwKKyAgICAgICAgICAgICAgICBwcmVkaWNhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5v
ZGUudGVzdCksCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogdGhpcy5fY3JlYXRlSW50ZXJu
YWxBU1Qobm9kZS5jb25zZXF1ZW50KSwKKyAgICAgICAgICAgICAgICBhbHRlcm5hdGU6IHRoaXMu
X2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYWx0ZXJuYXRlKQorICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdMaXRlcmFsJzoKKyAgICAgICAgICAgIHJldCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RU
eXBlLkxpdGVyYWwsCisgICAgICAgICAgICAgICAgdmFsdWU6IG5vZGUudmFsdWUsCisgICAgICAg
ICAgICAgICAgcmF3OiBub2RlLnJhdworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICdMYWJlbGVkU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldCA9IHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBl
LkxhYmVsZWRTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsQVNUKG5vZGUubGFiZWwpLAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0
ZUludGVybmFsQVNUKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAnTG9naWNhbEV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0ID0g
eworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5
cGUuTG9naWNhbEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgbGVmdDogdGhpcy5fY3JlYXRl
SW50ZXJuYWxBU1Qobm9kZS5sZWZ0KSwKKyAgICAgICAgICAgICAgICByaWdodDogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxBU1Qobm9kZS5yaWdodCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAnTWVtYmVyRXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXQg
PSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNU
VHlwZS5NZW1iZXJFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxBU1Qobm9kZS5vYmplY3QpLAorICAgICAgICAgICAgICAgIHByb3BlcnR5OiB0
aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnByb3BlcnR5KQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdOZXdFeHByZXNzaW9uJzoKKyAgICAgICAg
ICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZUFTVC5BU1RUeXBlLk5ld0V4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgY2FsbGVlOiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmNhbGxlZSksCisgICAgICAgICAgICAgICAgYXJndW1l
bnRzOiBub2RlLmFyZ3VtZW50cy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxBU1QuYmluZCh0aGlz
KSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnT2Jq
ZWN0RXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5PYmplY3RFeHByZXNzaW9uLAor
ICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IG5vZGUucHJvcGVydGllcy5tYXAodGhpcy5fY3Jl
YXRlSW50ZXJuYWxBU1QuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAnUHJvZ3JhbSc6CisgICAgICAgICAgICByZXQgPSB7CisgICAg
ICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Qcm9n
cmFtLAorICAgICAgICAgICAgICAgIGJvZHk6IG5vZGUuYm9keS5tYXAodGhpcy5fY3JlYXRlSW50
ZXJuYWxBU1QuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAnUHJvcGVydHknOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAg
ICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuUHJvcGVydHks
CisgICAgICAgICAgICAgICAga2V5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmtleSks
CisgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUudmFs
dWUpLAorICAgICAgICAgICAgICAgIGtpbmQ6IG5vZGUua2luZAorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGlmIChyZXQua2luZCA9PT0gImdldCIgfHwgcmV0LmtpbmQgPT09ICJzZXQiKSB7
CisgICAgICAgICAgICAgICAgcmV0LnZhbHVlLmlzR2V0dGVyT3JTZXR0ZXIgPSB0cnVlOworICAg
ICAgICAgICAgICAgIHJldC52YWx1ZS5nZXR0ZXJPclNldHRlclJhbmdlID0gcmV0LmtleS5yYW5n
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdSZXR1
cm5TdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuUmV0dXJuU3RhdGVtZW50LAorICAg
ICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmFyZ3Vt
ZW50KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdT
ZXF1ZW5jZUV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAg
IHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuU2VxdWVuY2VFeHByZXNz
aW9uLAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zOiBub2RlLmV4cHJlc3Npb25zLm1hcCh0
aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdTd2l0Y2hTdGF0ZW1lbnQnOgorICAgICAgICAg
ICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
QVNULkFTVFR5cGUuU3dpdGNoU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGRpc2NyaW1pbmFu
dDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5kaXNjcmltaW5hbnQpLAorICAgICAgICAg
ICAgICAgIGNhc2VzOiBub2RlLmNhc2VzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5k
KHRoaXMpKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICdTd2l0Y2hDYXNlJzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlN3aXRjaENhc2UsCisgICAgICAg
ICAgICAgICAgcHJlZGljYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnRlc3QpLAor
ICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IG5vZGUuY29uc2VxdWVudC5tYXAodGhpcy5fY3Jl
YXRlSW50ZXJuYWxBU1QuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAnVGhpc0V4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0ID0g
eworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5
cGUuVGhpc0V4cHJlc3Npb24KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAnVGhyb3dTdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmV0ID0geworICAgICAg
ICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuVGhyb3dT
dGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFs
QVNUKG5vZGUuYXJndW1lbnQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgJ1RyeVN0YXRlbWVudCc6CisgICAgICAgICAgICByZXQgPSB7CisgICAgICAg
ICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5UcnlTdGF0
ZW1lbnQsCisgICAgICAgICAgICAgICAgYmxvY2s6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5v
ZGUuYmxvY2spLAorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGFyZSBndWFyZGVkIGhh
bmRsZXJzPworICAgICAgICAgICAgICAgIGd1YXJkZWRIYW5kbGVyczogbm9kZS5ndWFyZGVkSGFu
ZGxlcnMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpLAorICAgICAgICAg
ICAgICAgIGhhbmRsZXJzOiBub2RlLmhhbmRsZXJzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbEFT
VC5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICBmaW5hbGl6ZXI6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsQVNUKG5vZGUuZmluYWxpemVyKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICdVbmFyeUV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0ID0g
eworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5
cGUuVW5hcnlFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBub2RlLm9wZXJh
dG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChu
b2RlLmFyZ3VtZW50KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICdVcGRhdGVFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIC8vIFByZWZpeC9wb3N0Zml4
IGV4cHJlc3Npb25zIGluIGVzcHJpbWEuCisgICAgICAgICAgICByZXQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogKG5vZGUucHJlZml4ID8gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNU
VHlwZS5QcmVmaXhFeHByZXNzaW9uIDogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlw
ZS5Qb3N0Zml4RXhwcmVzc2lvbiksCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG5vZGUub3Bl
cmF0b3IsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNU
KG5vZGUuYXJndW1lbnQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nOgorICAgICAgICAgICAgcmV0ID0geworICAg
ICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuVmFy
aWFibGVEZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IG5vZGUuZGVj
bGFyYXRpb25zLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdWYXJpYWJsZURlY2xh
cmF0b3InOgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuVmFyaWFibGVEZWNsYXJhdG9yLAorICAgICAg
ICAgICAgICAgIGlkOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmlkKSwKKyAgICAgICAg
ICAgICAgICBpbml0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmluaXQpCisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1doaWxlU3RhdGVtZW50
JzoKKyAgICAgICAgICAgIHJldCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0
b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLldoaWxlU3RhdGVtZW50LAorICAgICAgICAgICAgICAg
IHByZWRpY2F0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS50ZXN0KSwKKyAgICAgICAg
ICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmJvZHkpCisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1dpdGhTdGF0ZW1lbnQn
OgorICAgICAgICAgICAgcmV0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuV2l0aFN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBv
YmplY3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUub2JqZWN0KSwKKyAgICAgICAgICAg
ICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmJvZHkpCisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
dC5yYW5nZSA9IG5vZGUucmFuZ2U7CisgICAgICAgIHJldC5fYXR0YWNobWVudHMgPSB7fTsgLy8g
VGhpcyBpcyBhbiBvYmplY3QgZm9yIHdoaWNoIHlvdSBjYW4gYWRkIGZpZWxkcyB0byBhbiBBU1Qg
bm9kZSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHBvbGx1dGluZyB0aGUgc3ludGF4LXJlbGF0ZWQg
ZmllbGRzIG9mIHRoZSBub2RlLgorCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorfTsKKwor
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3Bl
Y3Rvci5PYmplY3QucHJvdG90eXBlOworCisvKiBUaGlzIGlzIGEgbmljZSBzdGFydGluZyBvZmYg
cG9pbnQgaWYgeW91IHdhbnQgdG8gd3JpdGUgYSByZWN1cnNpdmUgZnVuY3Rpb246CisgKgorICog
ICB2YXIgVHlwZXMgPSBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlOworICogICBz
d2l0Y2ggKC4uLikgeworICogICBjYXNlIFR5cGVzLkFzc2lnbm1lbnRFeHByZXNzaW9uOgorICog
ICBjYXNlIFR5cGVzLkFycmF5RXhwcmVzc2lvbjoKKyAqICAgY2FzZSBUeXBlcy5CbG9ja1N0YXRl
bWVudDoKKyAqICAgY2FzZSBUeXBlcy5CaW5hcnlFeHByZXNzaW9uOgorICogICBjYXNlIFR5cGVz
LkJyZWFrU3RhdGVtZW50OgorICogICBjYXNlIFR5cGVzLkNhdGNoQ2xhdXNlOgorICogICBjYXNl
IFR5cGVzLkNvbnRpbnVlU3RhdGVtZW50OgorICogICBjYXNlIFR5cGVzLkRvV2hpbGVTdGF0ZW1l
bnQ6CisgKiAgIGNhc2UgVHlwZXMuRGVidWdnZXJTdGF0ZW1lbnQ6CisgKiAgIGNhc2UgVHlwZXMu
RW1wdHlTdGF0ZW1lbnQ6CisgKiAgIGNhc2UgVHlwZXMuRXhwcmVzc2lvblN0YXRlbWVudDoKKyAq
ICAgY2FzZSBUeXBlcy5Gb3JTdGF0ZW1lbnQ6CisgKiAgIGNhc2UgVHlwZXMuRm9ySW5TdGF0ZW1l
bnQ6CisgKiAgIGNhc2UgVHlwZXMuRnVuY3Rpb25DYWxsOgorICogICBjYXNlIFR5cGVzLkZ1bmN0
aW9uRGVjbGFyYXRpb246CisgKiAgIGNhc2UgVHlwZXMuRnVuY3Rpb25FeHByZXNzaW9uOgorICog
ICBjYXNlIFR5cGVzLklkZW50aWZpZXI6CisgKiAgIGNhc2UgVHlwZXMuSWZTdGF0ZW1lbnQ6Cisg
KiAgIGNhc2UgVHlwZXMuTGl0ZXJhbDoKKyAqICAgY2FzZSBUeXBlcy5MYWJlbGVkU3RhdGVtZW50
OgorICogICBjYXNlIFR5cGVzLkxvZ2ljYWxFeHByZXNzaW9uOgorICogICBjYXNlIFR5cGVzLk1l
bWJlckV4cHJlc3Npb246CisgKiAgIGNhc2UgVHlwZXMuTmV3RXhwcmVzc2lvbjoKKyAqICAgY2Fz
ZSBUeXBlcy5PYmplY3RFeHByZXNzaW9uOgorICogICBjYXNlIFR5cGVzLlByZWZpeEV4cHJlc3Np
b246CisgKiAgIGNhc2UgVHlwZXMuUHJvZ3JhbToKKyAqICAgY2FzZSBUeXBlcy5Qcm9wZXJ0eToK
KyAqICAgY2FzZSBUeXBlcy5Qb3N0Zml4RXhwcmVzc2lvbjoKKyAqICAgY2FzZSBUeXBlcy5SZXR1
cm5TdGF0ZW1lbnQ6CisgKiAgIGNhc2UgVHlwZXMuU2VxdWVuY2VFeHByZXNzaW9uOgorICogICBj
YXNlIFR5cGVzLlN3aXRjaFN0YXRlbWVudDoKKyAqICAgY2FzZSBUeXBlcy5Td2l0Y2hDYXNlOgor
ICogICBjYXNlIFR5cGVzLlRlcm5hcnlFeHByZXNzaW9uOgorICogICBjYXNlIFR5cGVzLlRoaXNF
eHByZXNzaW9uOgorICogICBjYXNlIFR5cGVzLlRocm93U3RhdGVtZW50OgorICogICBjYXNlIFR5
cGVzLlRyeVN0YXRlbWVudDoKKyAqICAgY2FzZSBUeXBlcy5VbmFyeUV4cHJlc3Npb246CisgKiAg
IGNhc2UgVHlwZXMuVmFyaWFibGVEZWNsYXJhdGlvbjoKKyAqICAgY2FzZSBUeXBlcy5WYXJpYWJs
ZURlY2xhcmF0b3I6CisgKiAgIGNhc2UgVHlwZXMuV2hpbGVTdGF0ZW1lbnQ6CisgKiAgIGNhc2Ug
VHlwZXMuV2l0aFN0YXRlbWVudDoKKyAqICAgfQorICoKKyovCkluZGV4OiBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db250ZW50Vmlld0NvbnRhaW5lci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db250
ZW50Vmlld0NvbnRhaW5lci5qcwkocmV2aXNpb24gMTcxOTk3KQorKysgU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGVudFZpZXdDb250YWluZXIuanMJKHdvcmtp
bmcgY29weSkKQEAgLTE5MCwxNiArMTkwLDE5IEBAIFdlYkluc3BlY3Rvci5Db250ZW50Vmlld0Nv
bnRhaW5lci5wcm90b3QKICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRJbmRleCA9PT0gaW5kZXgp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgLy8gSGlkZSB0aGUgY3VycmVudGx5IHZp
c2libGUgY29udGVudCB2aWV3LgogICAgICAgICB2YXIgcHJldmlvdXNFbnRyeSA9IHRoaXMuY3Vy
cmVudEJhY2tGb3J3YXJkRW50cnk7Ci0gICAgICAgIGlmIChwcmV2aW91c0VudHJ5KQotICAgICAg
ICAgICAgdGhpcy5faGlkZUVudHJ5KHByZXZpb3VzRW50cnkpOwotCiAgICAgICAgIHRoaXMuX2N1
cnJlbnRJbmRleCA9IGluZGV4OwogICAgICAgICB2YXIgY3VycmVudEVudHJ5ID0gdGhpcy5jdXJy
ZW50QmFja0ZvcndhcmRFbnRyeTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoY3VycmVudEVudHJ5
KTsKIAotICAgICAgICB0aGlzLl9zaG93RW50cnkoY3VycmVudEVudHJ5KTsKKyAgICAgICAgdmFy
IGlzTmV3Q29udGVudFZpZXcgPSAhcHJldmlvdXNFbnRyeSB8fCAhY3VycmVudEVudHJ5LmNvbnRl
bnRWaWV3LnZpc2libGU7CisgICAgICAgIGlmIChpc05ld0NvbnRlbnRWaWV3KSB7CisgICAgICAg
ICAgICAvLyBIaWRlIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBjb250ZW50IHZpZXcuCisgICAgICAg
ICAgICBpZiAocHJldmlvdXNFbnRyeSkKKyAgICAgICAgICAgICAgICB0aGlzLl9oaWRlRW50cnko
cHJldmlvdXNFbnRyeSk7CisgICAgICAgICAgICB0aGlzLl9zaG93RW50cnkoY3VycmVudEVudHJ5
LCB0cnVlKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aGlzLl9zaG93RW50cnkoY3Vy
cmVudEVudHJ5LCBmYWxzZSk7CiAKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLkV2ZW50LkN1cnJlbnRDb250ZW50
Vmlld0RpZENoYW5nZSk7CiAgICAgfSwKQEAgLTI0MCw3ICsyNDMsNyBAQCBXZWJJbnNwZWN0b3Iu
Q29udGVudFZpZXdDb250YWluZXIucHJvdG90CiAKICAgICAgICAgLy8gUmUtc2hvdyB0aGUgY3Vy
cmVudCBlbnRyeSwgYmVjYXVzZSBpdHMgY29udGVudCB2aWV3IGluc3RhbmNlIHdhcyByZXBsYWNl
ZC4KICAgICAgICAgaWYgKGN1cnJlbnRseVNob3dpbmcpIHsKLSAgICAgICAgICAgIHRoaXMuX3No
b3dFbnRyeSh0aGlzLmN1cnJlbnRCYWNrRm9yd2FyZEVudHJ5KTsKKyAgICAgICAgICAgIHRoaXMu
X3Nob3dFbnRyeSh0aGlzLmN1cnJlbnRCYWNrRm9yd2FyZEVudHJ5LCB0cnVlKTsKICAgICAgICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Db250ZW50Vmll
d0NvbnRhaW5lci5FdmVudC5DdXJyZW50Q29udGVudFZpZXdEaWRDaGFuZ2UpOwogICAgICAgICB9
CiAgICAgfSwKQEAgLTI5Niw3ICsyOTksNyBAQCBXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250
YWluZXIucHJvdG90CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGN1cnJlbnRFbnRyeSB8fCAoIWN1
cnJlbnRFbnRyeSAmJiB0aGlzLl9jdXJyZW50SW5kZXggPT09IC0xKSk7CiAKICAgICAgICAgaWYg
KGN1cnJlbnRFbnRyeSAmJiBjdXJyZW50RW50cnkuY29udGVudFZpZXcgIT09IG9sZEN1cnJlbnRD
b250ZW50VmlldyB8fCBiYWNrRm9yd2FyZExpc3REaWRDaGFuZ2UpIHsKLSAgICAgICAgICAgIHRo
aXMuX3Nob3dFbnRyeShjdXJyZW50RW50cnkpOworICAgICAgICAgICAgdGhpcy5fc2hvd0VudHJ5
KGN1cnJlbnRFbnRyeSwgdHJ1ZSk7CiAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuQ29udGVudFZpZXdDb250YWluZXIuRXZlbnQuQ3VycmVudENv
bnRlbnRWaWV3RGlkQ2hhbmdlKTsKICAgICAgICAgfQogICAgIH0sCkBAIC0zNTIsNyArMzU1LDcg
QEAgV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdAogICAgICAgICBpZiAo
IWN1cnJlbnRFbnRyeSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB0aGlzLl9zaG93
RW50cnkoY3VycmVudEVudHJ5KTsKKyAgICAgICAgdGhpcy5fc2hvd0VudHJ5KGN1cnJlbnRFbnRy
eSwgdHJ1ZSk7CiAgICAgfSwKIAogICAgIGhpZGRlbjogZnVuY3Rpb24oKQpAQCAtMzkzLDEyICsz
OTYsMTIgQEAgV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3Q29udGFpbmVyLnByb3RvdAogICAgICAg
ICBjb250ZW50Vmlldy5jbG9zZWQoKTsKICAgICB9LAogCi0gICAgX3Nob3dFbnRyeTogZnVuY3Rp
b24oZW50cnkpCisgICAgX3Nob3dFbnRyeTogZnVuY3Rpb24oZW50cnksIHNob3VsZENhbGxTaG93
bikKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGVudHJ5IGluc3RhbmNlb2YgV2ViSW5z
cGVjdG9yLkJhY2tGb3J3YXJkRW50cnkpOwogCiAgICAgICAgIHRoaXMuX2FkZENvbnRlbnRWaWV3
RWxlbWVudChlbnRyeS5jb250ZW50Vmlldyk7Ci0gICAgICAgIGVudHJ5LnByZXBhcmVUb1Nob3co
KTsKKyAgICAgICAgZW50cnkucHJlcGFyZVRvU2hvdyhzaG91bGRDYWxsU2hvd24pOwogICAgIH0s
CiAKICAgICBfaGlkZUVudHJ5OiBmdW5jdGlvbihlbnRyeSkKSW5kZXg6IFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJj
ZUNvZGVUZXh0RWRpdG9yLmpzCShyZXZpc2lvbiAxNzE5OTcpCisrKyBTb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IgPSBmdW5jCiAKICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5jYWxsKHRoaXMsIG51bGws
IG51bGwsIHRoaXMpOwogCisgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yID0gbnVsbDsgCisK
ICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHRoaXMganVzdCBqdW1wcyBiZXR3ZWVuIHJlc291cmNl
cyBhbmQgcmVsYXRlZCBzb3VyY2UgbWFwIHJlc291cmNlcy4gSXQgZG9lc24ndCAianVtcCB0byBz
eW1ib2wiIHlldC4KICAgICB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRl
KCk7CiAKQEAgLTUzLDYgKzU1LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9y
ID0gZnVuYwogCiAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlBhdXNlZCwgdGhpcy5f
ZGVidWdnZXJEaWRQYXVzZSwgdGhpcyk7CiAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1h
bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50
LlJlc3VtZWQsIHRoaXMuX2RlYnVnZ2VyRGlkUmVzdW1lLCB0aGlzKTsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1hbmFnZXIuRXZlbnQuQ2FsbEZyYW1lc0RpZENoYW5nZSwgdGhpcy5fY2FsbEZyYW1lRGlk
Q2hhbmdlLCB0aGlzKTsKICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIu
YWN0aXZlQ2FsbEZyYW1lKQogICAgICAgICAgICAgdGhpcy5fZGVidWdnZXJEaWRQYXVzZSgpOwog
CkBAIC0xMDAsNiArMTAzLDE1IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3QKICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZUNvZGU7CiAgICAgfSwKIAorICAgIHNo
b3duOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICAvL2NvbnNvbGUudHJhY2UoKTsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNob3duLmNhbGwodGhpcyk7CisK
KyAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvcikKKyAgICAgICAgICAgIHRoaXMu
X3R5cGVUb2tlbkFubm90YXRvci5yZXN1bWUoKTsKKyAgICB9LAorCiAgICAgaGlkZGVuOiBmdW5j
dGlvbigpCiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUu
aGlkZGVuLmNhbGwodGhpcyk7CkBAIC0xMDksNiArMTIxLDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOwog
ICAgICAgICAKICAgICAgICAgdGhpcy5fZGlzbWlzc0VkaXRpbmdDb250cm9sbGVyKHRydWUpOwor
CisgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IpCisgICAgICAgICAgICB0aGlz
Ll90eXBlVG9rZW5Bbm5vdGF0b3IucGF1c2UoKTsKICAgICB9LAogCiAgICAgY2xvc2U6IGZ1bmN0
aW9uKCkKQEAgLTIzMiw2ICsyNDcsMjQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yLnByb3RvdAogICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVNYXJrZXJzKHJhbmdl
KTsKICAgICB9LAogCisgICAgdG9nZ2xlVHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICBpZiAoIXRoaXMuX3R5cGVUb2tlbkFubm90YXRvcikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICB2YXIgaXNBY3RpdmF0ZWQgPSB0aGlzLl90eXBlVG9rZW5B
bm5vdGF0b3IudG9nZ2xlVHlwZUFubm90YXRpb25zKCk7CisgICAgICAgIGlmIChpc0FjdGl2YXRl
ZCkgeworICAgICAgICAgICAgUnVudGltZUFnZW50LmVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmcoKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZv
cm1hdGlvblNldHRpbmcudmFsdWUgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgUnVudGltZUFnZW50LmRpc2FibGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nKCk7CisgICAg
ICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5n
LnZhbHVlID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl91cGRhdGVUb2tlblRy
YWNraW5nQ29udHJvbGxlclN0YXRlKCk7CisgICAgICAgIHJldHVybiBpc0FjdGl2YXRlZDsKKyAg
ICB9LAorCiAgICAgLy8gUHJpdmF0ZQogCiAgICAgX3VuZm9ybWF0dGVkTGluZUluZm9Gb3JFZGl0
b3JMaW5lSW5mbzogZnVuY3Rpb24obGluZUluZm8pCkBAIC0zNTYsNiArMzg5LDEwIEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKIAogICAgICAgICB0aGlzLl9jb250
ZW50V2lsbFBvcHVsYXRlKGNvbnRlbnQpOwogICAgICAgICB0aGlzLnN0cmluZyA9IGNvbnRlbnQ7
CisKKyAgICAgICAgaWYgKHRoaXMuX2NvZGVNaXJyb3IuZ2V0TW9kZSgpLm5hbWUgPT09ICJqYXZh
c2NyaXB0IikKKyAgICAgICAgICAgIHRoaXMuX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKwog
ICAgICAgICB0aGlzLl9jb250ZW50RGlkUG9wdWxhdGUoKTsKICAgICB9LAogCkBAIC05NDksMTIg
Kzk4NiwyMiBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAg
X2RlYnVnZ2VyRGlkUGF1c2U6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5f
dXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOworICAgICAgICBpZiAodGhpcy5f
dHlwZVRva2VuQW5ub3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkK
KyAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZXN1bWUoKTsKKyAgICB9LAor
CisgICAgX2NhbGxGcmFtZURpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpIAorICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0
b3IuaXNBY3RpdmUpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1l
KCk7CiAgICAgfSwKIAogICAgIF9kZWJ1Z2dlckRpZFJlc3VtZTogZnVuY3Rpb24oZXZlbnQpCiAg
ICAgewogICAgICAgICB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKCk7
CiAgICAgICAgIHRoaXMuX2Rpc21pc3NQb3BvdmVyKCk7CisgICAgICAgIGlmICh0aGlzLl90eXBl
VG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQorICAg
ICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlc3VtZSgpOwogICAgIH0sCiAKICAg
ICBfc291cmNlQ29kZVNvdXJjZU1hcEFkZGVkOiBmdW5jdGlvbihldmVudCkKQEAgLTk3MCw2ICsx
MDE3LDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAg
ICB2YXIgbW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xs
ZXIuTW9kZS5Ob25lOwogICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5w
YXVzZWQpCiAgICAgICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRy
YWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9uOworICAgICAgICBlbHNl
IGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9y
LmlzQWN0aXZlKQorICAgICAgICAgICAgbW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOwogICAg
ICAgICBlbHNlIGlmICh0aGlzLl9oYXNDb2xvck1hcmtlcnMoKSkKICAgICAgICAgICAgIG1vZGUg
PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTWFy
a2VkVG9rZW5zOwogICAgICAgICBlbHNlIGlmICgodGhpcy5fc291cmNlQ29kZSBpbnN0YW5jZW9m
IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZSB8fCB0aGlzLl9zb3VyY2VDb2RlLnNvdXJj
ZU1hcHMubGVuZ3RoICE9PSAwKSAmJiBXZWJJbnNwZWN0b3IubW9kaWZpZXJLZXlzLm1ldGFLZXkg
JiYgIVdlYkluc3BlY3Rvci5tb2RpZmllcktleXMuYWx0S2V5ICYmICFXZWJJbnNwZWN0b3IubW9k
aWZpZXJLZXlzLnNoaWZ0S2V5KQpAQCAtOTkyLDYgKzEwNDEsNyBAQCBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgICAgICB0aGlzLl9kaXNtaXNzUG9wb3Zl
cigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvZGVN
aXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9uOgor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xs
ZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOgogICAgICAgICAgICAgdGhpcy50b2tl
blRyYWNraW5nQ29udHJvbGxlci5tb3VzZU92ZXJEZWxheUR1cmF0aW9uID0gV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1cmF0aW9uVG9Nb3VzZU92ZXJUb2tlblRvTWFrZUhvdmVy
ZWRUb2tlbjsKICAgICAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW91c2VP
dXRSZWxlYXNlRGVsYXlEdXJhdGlvbiA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5EdXJhdGlvblRvTW91c2VPdXRPZkhvdmVyZWRUb2tlblRvUmVsZWFzZTsKICAgICAgICAgICAg
IHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2xhc3NOYW1lRm9ySGlnaGxpZ2h0ZWRSYW5n
ZSA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5Ib3ZlcmVkRXhwcmVzc2lvbkhp
Z2hsaWdodFN0eWxlQ2xhc3NOYW1lOwpAQCAtMTAyOSw2ICsxMDc5LDcgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICAgICAgdGhpcy5fZGlzbWlzc1Bv
cG92ZXIoKTsKICAgICB9LAogCisKICAgICB0b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdo
dGVkUmFuZ2VXYXNDbGlja2VkOiBmdW5jdGlvbih0b2tlblRyYWNraW5nQ29udHJvbGxlcikKICAg
ICB7CiAgICAgICAgIGlmICh0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vZGUgIT09IFdl
Ykluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5Ob25TeW1i
b2xUb2tlbnMpCkBAIC0xMDU3LDYgKzExMDgsMTEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVU
ZXh0RWRpdG9yLnByb3RvdAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAg
ICAgaWYgKHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW9kZSA9PT0gV2ViSW5zcGVjdG9y
LkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRUeXBlSW5m
b3JtYXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMuX3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGln
aGxpZ2h0ZWRKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uKGNhbmRpZGF0ZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBpZiAodGhpcy50b2tlblRyYWNraW5nQ29u
dHJvbGxlci5tb2RlID09PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250
cm9sbGVyLk1vZGUuTWFya2VkVG9rZW5zKSB7CiAgICAgICAgICAgICB2YXIgbWFya2VycyA9IHRo
aXMubWFya2Vyc0F0UG9zaXRpb24oY2FuZGlkYXRlLmhvdmVyZWRUb2tlblJhbmdlLnN0YXJ0KTsK
ICAgICAgICAgICAgIGlmIChtYXJrZXJzLmxlbmd0aCA+IDApCkBAIC0xMTEyLDI2ICsxMTY4LDY0
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgRGVi
dWdnZXJBZ2VudC5ldmFsdWF0ZU9uQ2FsbEZyYW1lLmludm9rZSh7Y2FsbEZyYW1lSWQ6IFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWN0aXZlQ2FsbEZyYW1lLmlkLCBleHByZXNzaW9uOiBj
YW5kaWRhdGUuZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXA6ICJwb3BvdmVyIiwgZG9Ob3RQYXVzZU9u
RXhjZXB0aW9uc0FuZE11dGVDb25zb2xlOiB0cnVlfSwgcG9wdWxhdGUuYmluZCh0aGlzKSk7CiAg
ICAgfSwKIAotICAgIF9zaG93UG9wb3ZlcjogZnVuY3Rpb24oY29udGVudCkKKyAgICBfdG9rZW5U
cmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZEphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb246IGZ1
bmN0aW9uKGNhbmRpZGF0ZSkKICAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMudG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIuY2FuZGlkYXRlKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQo
Y2FuZGlkYXRlLmV4cHJlc3Npb24pOwogCi0gICAgICAgIHZhciBjYW5kaWRhdGUgPSB0aGlzLnRv
a2VuVHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZTsKLSAgICAgICAgaWYgKCFjYW5kaWRhdGUp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBzb3VyY2VDb2RlID0gdGhpcy5fc291
cmNlQ29kZTsKKyAgICAgICAgdmFyIHNvdXJjZUlEID0gc291cmNlQ29kZS5zY3JpcHRzWzBdLmlk
OworICAgICAgICB2YXIgcmFuZ2UgPSBjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2U7CisgICAg
ICAgIHZhciBvZmZzZXQ7CiAKLSAgICAgICAgY29udGVudC5jbGFzc0xpc3QuYWRkKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5Qb3BvdmVyRGVidWdnZXJDb250ZW50U3R5bGVDbGFz
c05hbWUpOworICAgICAgICBpZiAodGhpcy5fZm9ybWF0dGVyU291cmNlTWFwKQorICAgICAgICAg
ICAgb2Zmc2V0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWxP
ZmZzZXQocmFuZ2Uuc3RhcnQubGluZSwgcmFuZ2Uuc3RhcnQuY2gpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLl9jb2RlTWly
cm9yLmdldERvYygpLmluZGV4RnJvbVBvcyh7IGxpbmUgOiByYW5nZS5zdGFydC5saW5lLCBjaCA6
IHJhbmdlLnN0YXJ0LmNoIH0pOworCisgICAgICAgIHZhciBhbGxSZXF1ZXN0cyA9IFt7CisgICAg
ICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yOiBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZUFTVC5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLlR5cGVQcm9maWxlclNlYXJjaERlc2Ny
aXB0b3JOb3JtYWwsCisgICAgICAgICAgICBzb3VyY2VJRDogc291cmNlSUQsCisgICAgICAgICAg
ICBkaXZvdDogb2Zmc2V0CisgICAgICAgIH1dOworCisgICAgICAgIGZ1bmN0aW9uIGhhbmRsZXIo
ZXJyb3IsIGFsbFR5cGVzKSB7CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlICE9PSB0aGlzLnRv
a2VuVHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgdmFyIHJlY3RzID0gdGhpcy5yZWN0c0ZvclJhbmdlKGNhbmRpZGF0ZS5ob3Zl
cmVkVG9rZW5SYW5nZSk7Ci0gICAgICAgIHZhciBib3VuZHMgPSBXZWJJbnNwZWN0b3IuUmVjdC51
bmlvbk9mUmVjdHMocmVjdHMpOworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoYWxsVHlwZXMu
bGVuZ3RoID09PSAxKTsKKyAgICAgICAgICAgIGlmICghYWxsVHlwZXMubGVuZ3RoKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHZhciB0eXBlcyA9IGFsbFR5cGVzWzBdOwor
ICAgICAgICAgICAgaWYgKHR5cGVzLmRpc3BsYXlUeXBlTmFtZSkKKyAgICAgICAgICAgICAgICB0
aGlzLl9zaG93UG9wb3ZlckZvclR5cGVzKHR5cGVzLCBudWxsLCAiVHlwZSBpbmZvcm1hdGlvbiBm
b3I6ICIgKyBjYW5kaWRhdGUuZXhwcmVzc2lvbik7CisgICAgICAgIH0KKyAgICAgICAgUnVudGlt
ZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhhbGxSZXF1ZXN0cywg
aGFuZGxlci5iaW5kKHRoaXMpKTsKKworICAgIH0sCiAKLSAgICAgICAgdGhpcy5fcG9wb3ZlciA9
IHRoaXMuX3BvcG92ZXIgfHwgbmV3IFdlYkluc3BlY3Rvci5Qb3BvdmVyKHRoaXMpOworICAgIF9z
aG93UG9wb3ZlcjogZnVuY3Rpb24oY29udGVudCwgYm91bmRzKQorICAgIHsKKyAgICAgICAgY29u
c29sZS5hc3NlcnQodGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5jYW5kaWRhdGUgfHwgYm91
bmRzKTsKKworICAgICAgICBpZiAoIWJvdW5kcykgeworICAgICAgICAgICAgdmFyIGNhbmRpZGF0
ZSA9IHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2FuZGlkYXRlOworICAgICAgICAgICAg
aWYgKCFjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgdmFy
IHJlY3RzID0gdGhpcy5yZWN0c0ZvclJhbmdlKGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZSk7
CisgICAgICAgICAgICBib3VuZHMgPSBXZWJJbnNwZWN0b3IuUmVjdC51bmlvbk9mUmVjdHMocmVj
dHMpOworICAgICAgICAgICAgLy90aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmhpZ2hsaWdo
dFJhbmdlKGNhbmRpZGF0ZS5leHByZXNzaW9uUmFuZ2UpOworICAgICAgICB9CisKKyAgICAgICAg
Y29udGVudC5jbGFzc0xpc3QuYWRkKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5Q
b3BvdmVyRGVidWdnZXJDb250ZW50U3R5bGVDbGFzc05hbWUpOworCisgICAgICAgIGlmICh0aGlz
Ll9wb3BvdmVyKQorICAgICAgICAgICAgdGhpcy5fcG9wb3Zlci5kaXNtaXNzKCk7CisgICAgICAg
IHRoaXMuX3BvcG92ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXIobnVsbCk7CisgICAgICAg
IC8vdGhpcy5fcG9wb3ZlciA9IHRoaXMuX3BvcG92ZXIgfHwgbmV3IFdlYkluc3BlY3Rvci5Qb3Bv
dmVyKHRoaXMpOwogICAgICAgICB0aGlzLl9wb3BvdmVyLmNvbnRlbnQgPSBjb250ZW50OwogICAg
ICAgICB0aGlzLl9wb3BvdmVyLnByZXNlbnQoYm91bmRzLnBhZCg1KSwgW1dlYkluc3BlY3Rvci5S
ZWN0RWRnZS5NSU5fWSwgV2ViSW5zcGVjdG9yLlJlY3RFZGdlLk1BWF9ZLCBXZWJJbnNwZWN0b3Iu
UmVjdEVkZ2UuTUFYX1hdKTsKIAotICAgICAgICB0aGlzLl90cmFja1BvcG92ZXJFdmVudHMoKTsK
LQotICAgICAgICB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmhpZ2hsaWdodFJhbmdlKGNh
bmRpZGF0ZS5leHByZXNzaW9uUmFuZ2UpOworICAgICAgICAvL3RoaXMuX3RyYWNrUG9wb3ZlckV2
ZW50cygpOwogICAgIH0sCiAKICAgICBfc2hvd1BvcG92ZXJGb3JGdW5jdGlvbjogZnVuY3Rpb24o
ZGF0YSkKQEAgLTEyNDYsNiArMTM0MCwyNCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IucHJvdG90CiAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyKGNvbnRlbnQpOwogICAgIH0s
CiAKKyAgICBfc2hvd1BvcG92ZXJGb3JUeXBlczogZnVuY3Rpb24odHlwZXMsIGJvdW5kcywgdGl0
bGUpCisgICAgeworICAgICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOworICAgICAgICBjb250ZW50LmNsYXNzTmFtZSA9ICJvYmplY3QgZXhwYW5kYWJsZSI7
CisKKyAgICAgICAgdmFyIHRpdGxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgICAgICB0aXRsZUVsZW1lbnQuY2xhc3NOYW1lID0gInRpdGxlIjsKKyAgICAgICAg
dGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGl0bGU7CisgICAgICAgIGNvbnRlbnQuYXBwZW5k
Q2hpbGQodGl0bGVFbGVtZW50KTsKKworICAgICAgICB2YXIgc2VjdGlvbiA9IG5ldyBXZWJJbnNw
ZWN0b3IuVHlwZVByb3BlcnRpZXNTZWN0aW9uKHR5cGVzKTsKKyAgICAgICAgc2VjdGlvbi5leHBh
bmRlZCA9IHRydWU7CisgICAgICAgIHNlY3Rpb24uZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJib2R5
Iik7CisgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQoc2VjdGlvbi5lbGVtZW50KTsKKworICAg
ICAgICB0aGlzLl9zaG93UG9wb3Zlcihjb250ZW50LCBib3VuZHMpOworICAgIH0sCisKICAgICB3
aWxsRGlzbWlzc1BvcG92ZXI6IGZ1bmN0aW9uKHBvcG92ZXIpCiAgICAgewogICAgICAgICB0aGlz
LnRva2VuVHJhY2tpbmdDb250cm9sbGVyLnJlbW92ZUhpZ2hsaWdodGVkUmFuZ2UoKTsKQEAgLTEz
NjEsNiArMTQ3Myw0NCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
CiAgICAgICAgIHRoaXMuX2lnbm9yZUNvbnRlbnREaWRDaGFuZ2UtLTsKIAogICAgICAgICBkZWxl
dGUgdGhpcy5fZWRpdGluZ0NvbnRyb2xsZXI7CisgICAgfSwKKworICAgIF9wcmV0dHlQcmludDog
ZnVuY3Rpb24ocHJldHR5KQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3Iu
cHJvdG90eXBlLl9wcmV0dHlQcmludC5jYWxsKHRoaXMsIHByZXR0eSk7CisKKyAgICAgICAgaWYg
KHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNB
Y3RpdmUpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzZXQoKTsKKyAg
ICB9LAorCisgICAgX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3I6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5fc291cmNlQ29kZS5zY3JpcHRzLmxlbmd0aCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBSdW50aW1lQWdlbnQuZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGluZygpOworICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgPSBuZXcgV2ViSW5z
cGVjdG9yLlR5cGVUb2tlbkFubm90YXRvcih0aGlzLCB0aGlzLl9zb3VyY2VDb2RlLnNjcmlwdHNb
MF0pOworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0
aW9uU2V0dGluZy52YWx1ZSkKKyAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5y
ZXNldCgpOworICAgICAgICB0aGlzLl9zZXR1cFNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFubm90
YXRvcigpOworICAgIH0sCisKKyAgICBfc2V0dXBTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5v
dGF0b3I6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB0eXBlVG9rZW5Bbm5vdGF0b3Ig
PSB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3I7CisgICAgICAgIHZhciB0aW1lb3V0SWRlbnRpZmll
ciA9IG51bGw7CisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oInNjcm9sbCIsIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgaWYgKHRpbWVvdXRJZGVudGlmaWVyKQorICAgICAgICAgICAgICAg
IGNsZWFyVGltZW91dCh0aW1lb3V0SWRlbnRpZmllcik7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgdHlwZVRva2VuQW5ub3RhdG9yLnBhdXNlKCk7CisKKyAgICAgICAgICAgIHRp
bWVvdXRJZGVudGlmaWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICB0aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAgICAgICAgICAgY29uc29sZS5sb2co
InJlc3VtaW5nIik7CisgICAgICAgICAgICAgICAgdHlwZVRva2VuQW5ub3RhdG9yLnJlc3VtZSgp
OworICAgICAgICAgICAgfSwgMTAwKTsKKyAgICAgICAgfSk7CiAgICAgfQogfTsKIApJbmRleDog
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dFJlc291cmNlQ29u
dGVudFZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanMJKHJldmlzaW9uIDE3MTk5NykK
KysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRSZXNvdXJj
ZUNvbnRlbnRWaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxNCBAQCBXZWJJbnNw
ZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcgPSBmCiAgICAgdGhpcy5fcHJldHR5UHJpbnRC
dXR0b25OYXZpZ2F0aW9uSXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZp
Z2F0aW9uSXRlbSgicHJldHR5LXByaW50IiwgdG9vbFRpcCwgYWN0aXZhdGVkVG9vbFRpcCwgIklt
YWdlcy9OYXZpZ2F0aW9uSXRlbUN1cmxleUJyYWNlcy5zdmciLCAxNiwgMTYpOwogICAgIHRoaXMu
X3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgdGhpcy5fdG9nZ2xlUHJl
dHR5UHJpbnQsIHRoaXMpOwogICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0
ZW0uZW5hYmxlZCA9IGZhbHNlOyAvLyBFbmFibGVkIHdoZW4gdGhlIHRleHQgZWRpdG9yIGlzIHBv
cHVsYXRlZCB3aXRoIGNvbnRlbnQuCisKKyAgICB2YXIgdG9vbFRpcFR5cGVzID0gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJTaG93IHR5cGUgaW5mb3JtYXRpb24iKTsKKyAgICB2YXIgYWN0aXZhdGVk
VG9vbFRpcFR5cGVzID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJIaWRlIHR5cGUgaW5mb3JtYXRp
b24iKTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbSA9IG5ldyBXZWJJ
bnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbSgic2hvdy10eXBlczIiLCB0b29s
VGlwVHlwZXMsIGFjdGl2YXRlZFRvb2xUaXBUeXBlcywgIkltYWdlcy9OYXZpZ2F0aW9uSXRlbVRh
dS5zdmciLCAxNiwgMTYpOworICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVt
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLkV2ZW50
LkNsaWNrZWQsIHRoaXMuX3RvZ2dsZVR5cGVBbm5vdGF0aW9ucywgdGhpcyk7CisgICAgdGhpcy5f
c2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IGZhbHNlOworCisgICAgV2Vi
SW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5TZXR0aW5nLkV2ZW50LkNoYW5nZWQsIHRoaXMuX3Nob3dKYXZh
U2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZ0NoYW5nZWQsIHRoaXMpOwogfTsKIAogV2ViSW5z
cGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LlN0eWxlQ2xhc3NOYW1lID0gInRleHQiOwpA
QCAtNTYsNyArNjQsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJv
CiAKICAgICBnZXQgbmF2aWdhdGlvbkl0ZW1zKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBbdGhp
cy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbV07CisgICAgICAgIHJldHVybiBbdGhp
cy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbSwgdGhpcy5fc2hvd1R5cGVzQnV0dG9u
TmF2aWdhdGlvbkl0ZW1dOwogICAgIH0sCiAKICAgICBnZXQgbWFuYWdlc093bklzc3VlcygpCkBA
IC0xOTQsNiArMjAyLDggQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnBy
bwogICAgIF9jb250ZW50RGlkUG9wdWxhdGU6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAg
ICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gdGhpcy5f
dGV4dEVkaXRvci5jYW5CZUZvcm1hdHRlZCgpOworICAgICAgICB0aGlzLl9zaG93VHlwZXNCdXR0
b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gISF0aGlzLl90ZXh0RWRpdG9yLl90eXBlVG9rZW5B
bm5vdGF0b3I7CisgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmFj
dGl2YXRlZCA9IFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRp
bmcudmFsdWU7CiAgICAgfSwKIAogICAgIF90b2dnbGVQcmV0dHlQcmludDogZnVuY3Rpb24oZXZl
bnQpCkBAIC0yMDIsNiArMjEyLDE2IEBAIFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50
Vmlldy5wcm8KICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5mb3JtYXR0ZWQgPSBhY3RpdmF0ZWQ7
CiAgICAgfSwKIAorICAgIF90b2dnbGVUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKGV2ZW50KQor
ICAgIHsKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci50b2dnbGVUeXBlQW5ub3RhdGlvbnMoKTsK
KyAgICB9LAorCisgICAgX3Nob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZ0NoYW5n
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9u
TmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlw
ZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZTsKKyAgICB9LAorCiAgICAgX3RleHRFZGl0b3JGb3Jt
YXR0aW5nRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMuX3By
ZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gdGhpcy5fdGV4dEVkaXRv
ci5mb3JtYXR0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
VHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbiA9IGZ1bmN0
aW9uKHR5cGVzLCB0aXRsZSwgc3VidGl0bGUpCit7CisgICAgdGhpcy5lbXB0eVBsYWNlaG9sZGVy
ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJObyBQcm9wZXJ0aWVzIik7CisgICAgdGhpcy50eXBl
cyA9IHR5cGVzOworCisgICAgV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTZWN0aW9uLmNhbGwodGhp
cywgdGl0bGUsIHN1YnRpdGxlKTsKK307CisKK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1Nl
Y3Rpb24ucHJvdG90eXBlID0geworICAgIG9ucG9wdWxhdGU6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLnJlbW92ZUNoaWxkcmVuKCk7CisKKyAg
ICAgICAgdmFyIGk7CisgICAgICAgIHZhciBwcmltaXRpdmVUeXBlTmFtZXMgPSB0aGlzLnR5cGVz
Lmdsb2JhbFByaW1pdGl2ZVR5cGVOYW1lcyA/IHRoaXMudHlwZXMuZ2xvYmFsUHJpbWl0aXZlVHlw
ZU5hbWVzIDogdGhpcy50eXBlcy5sb2NhbFByaW1pdGl2ZVR5cGVOYW1lczsKKyAgICAgICAgdmFy
IHN0cnVjdHVyZXMgPSB0aGlzLnR5cGVzLmdsb2JhbFN0cnVjdHVyZXMgPyB0aGlzLnR5cGVzLmds
b2JhbFN0cnVjdHVyZXMgOiB0aGlzLnR5cGVzLmxvY2FsU3RydWN0dXJlczsKKyAgICAgICAgdmFy
IHByb3BlcnRpZXMgPSBbXTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cnVjdHVyZXMubGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHt9OworICAgICAgICAgICAg
cHJvcGVydHkubmFtZSA9IHN0cnVjdHVyZXNbaV0uY29uc3RydWN0b3JOYW1lOworICAgICAgICAg
ICAgcHJvcGVydHkuc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKKyAgICAgICAgICAgIHByb3Bl
cnRpZXMucHVzaChwcm9wZXJ0eSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8
IHByaW1pdGl2ZVR5cGVOYW1lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIHByb3Bl
cnR5ID0ge307CisgICAgICAgICAgICBwcm9wZXJ0eS5uYW1lID0gcHJpbWl0aXZlVHlwZU5hbWVz
W2ldOworICAgICAgICAgICAgcHJvcGVydHkuc3RydWN0dXJlID0gbnVsbDsKKyAgICAgICAgICAg
IHByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7CisgICAgICAgIH0KKworICAgICAgICBwcm9wZXJ0
aWVzLnNvcnQoV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5Db21wYXJlUHJvcGVy
dGllcyk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKQor
ICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQobmV3IFdl
Ykluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudChwcm9wZXJ0aWVzW2ldKSk7CisKKyAg
ICAgICAgaWYgKCF0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5jaGlsZHJlbi5sZW5ndGgpIHsK
KyAgICAgICAgICAgIHZhciB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
ICAgICAgICAgICAgdGl0bGUuY2xhc3NOYW1lID0gImluZm8iOworICAgICAgICAgICAgdGl0bGUu
dGV4dENvbnRlbnQgPSB0aGlzLmVtcHR5UGxhY2Vob2xkZXI7CisgICAgICAgICAgICB2YXIgaW5m
b0VsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQodGl0bGUsIG51bGwsIGZhbHNlKTsKKyAgICAgICAg
ICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmFwcGVuZENoaWxkKGluZm9FbGVtZW50KTsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYklu
c3BlY3Rvci5TZWN0aW9uLkV2ZW50LlZpc2libGVDb250ZW50RGlkQ2hhbmdlKTsKKworICAgICAg
ICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDEpCisgICAgICAgICAgICB0aGlzLnByb3BlcnRp
ZXNUcmVlT3V0bGluZS5jaGlsZHJlblswXS5leHBhbmRSZWN1cnNpdmVseSgpOworICAgIH0KK307
CisKK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLl9fcHJvdG9f
XyA9IFdlYkluc3BlY3Rvci5Qcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGU7CisKK1dlYkluc3Bl
Y3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24uQ29tcGFyZVByb3BlcnRpZXMgPSBmdW5jdGlvbihw
cm9wZXJ0eUEsIHByb3BlcnR5QikKK3sKKyAgICB2YXIgYSA9IHByb3BlcnR5QS5uYW1lOworICAg
IHZhciBiID0gcHJvcGVydHlCLm5hbWU7CisgICAgaWYgKGEuaW5kZXhPZigiX19wcm90b19fIikg
IT09IC0xKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoYi5pbmRleE9mKCJfX3Byb3RvX18i
KSAhPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoYSA9PT0gYikKKyAgICAgICAg
cmV0dXJuIDE7CisKKyAgICAvLyBpZiB1c2VkIGVsc2V3aGVyZSBtYWtlIHN1cmUgdG8KKyAgICAv
LyAgLSBjb252ZXJ0IGEgYW5kIGIgdG8gc3RyaW5ncyAobm90IG5lZWRlZCBoZXJlLCBwcm9wZXJ0
aWVzIGFyZSBhbGwgc3RyaW5ncykKKworICAgIHZhciBkaWZmID0gMDsKKyAgICB2YXIgY2h1bmsg
PSAvXlxkK3xeXEQrLzsKKyAgICB2YXIgY2h1bmthLCBjaHVua2IsIGFudW0sIGJudW07CisgICAg
d2hpbGUgKGRpZmYgPT09IDApIHsKKyAgICAgICAgaWYgKCFhICYmIGIpCisgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgIGlmICghYiAmJiBhKQorICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgIGNodW5rYSA9IGEubWF0Y2goY2h1bmspWzBdOworICAgICAgICBjaHVua2IgPSBiLm1h
dGNoKGNodW5rKVswXTsKKyAgICAgICAgYW51bSA9ICFpc05hTihjaHVua2EpOworICAgICAgICBi
bnVtID0gIWlzTmFOKGNodW5rYik7CisgICAgICAgIGlmIChhbnVtICYmICFibnVtKQorICAgICAg
ICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoYm51bSAmJiAhYW51bSkKKyAgICAgICAgICAg
IHJldHVybiAxOworICAgICAgICBpZiAoYW51bSAmJiBibnVtKSB7CisgICAgICAgICAgICBkaWZm
ID0gY2h1bmthIC0gY2h1bmtiOworICAgICAgICAgICAgaWYgKGRpZmYgPT09IDAgJiYgY2h1bmth
Lmxlbmd0aCAhPT0gY2h1bmtiLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGlmICghK2NodW5r
YSAmJiAhK2NodW5rYikgLy8gY2h1bmtzIGFyZSBzdHJpbmdzIG9mIGFsbCAwcyAoc3BlY2lhbCBj
YXNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2h1bmthLmxlbmd0aCAtIGNodW5rYi5s
ZW5ndGg7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y2h1bmtiLmxlbmd0aCAtIGNodW5rYS5sZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoY2h1bmthICE9PSBjaHVua2IpCisgICAgICAgICAgICByZXR1cm4gKGNodW5rYSA8
IGNodW5rYikgPyAtMSA6IDE7CisgICAgICAgIGEgPSBhLnN1YnN0cmluZyhjaHVua2EubGVuZ3Ro
KTsKKyAgICAgICAgYiA9IGIuc3Vic3RyaW5nKGNodW5rYi5sZW5ndGgpOworICAgIH0KKworICAg
IHJldHVybiBkaWZmOworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50
ID0gZnVuY3Rpb24ocHJvcGVydHkpCit7CisgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5Owor
CisgICAgdGhpcy5uYW1lRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsK
KyAgICB0aGlzLm5hbWVFbGVtZW50LmNsYXNzTmFtZSA9ICJuYW1lIjsKKyAgICB0aGlzLm5hbWVF
bGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5wcm9wZXJ0eS5uYW1lOworCisgICAgVHJlZUVsZW1l
bnQuY2FsbCh0aGlzLCB0aGlzLm5hbWVFbGVtZW50LCBudWxsLCBmYWxzZSk7CisKKyAgICB0aGlz
LnRvZ2dsZU9uQ2xpY2sgPSB0cnVlOworICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSAhIXRoaXMucHJv
cGVydHkuc3RydWN0dXJlOyAKK307CisKK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxl
bWVudC5wcm90b3R5cGUgPSB7CisgICAgb25wb3B1bGF0ZTogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOworCisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0g
W107CisgICAgICAgIHZhciBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0
eS5zdHJ1Y3R1cmUuZmllbGRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgbmV3UHJv
cCA9IHt9OworICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKG5ld1Byb3ApOworICAgICAgICAg
ICAgbmV3UHJvcC5uYW1lID0gdGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUuZmllbGRzW2ldOworICAg
ICAgICAgICAgbmV3UHJvcC5zdHJ1Y3R1cmUgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAg
cHJvcGVydGllcy5zb3J0KFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24uQ29tcGFy
ZVByb3BlcnRpZXMpOworCisgICAgICAgIGlmICh0aGlzLnByb3BlcnR5LnN0cnVjdHVyZS5wcm90
b3R5cGVTdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIHZhciBjdG9yUHJvcCA9IHt9OworICAgICAg
ICAgICAgcHJvcGVydGllcy5wdXNoKGN0b3JQcm9wKTsKKyAgICAgICAgICAgIGN0b3JQcm9wLm5h
bWUgPSB0aGlzLnByb3BlcnR5LnN0cnVjdHVyZS5wcm90b3R5cGVTdHJ1Y3R1cmUuY29uc3RydWN0
b3JOYW1lICsgIiAoUHJvdG90eXBlKSI7CisgICAgICAgICAgICBjdG9yUHJvcC5zdHJ1Y3R1cmUg
PSB0aGlzLnByb3BlcnR5LnN0cnVjdHVyZS5wcm90b3R5cGVTdHJ1Y3R1cmU7CisgICAgICAgIH0K
KworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykKKyAgICAg
ICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVl
RWxlbWVudChwcm9wZXJ0aWVzW2ldKSk7CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLlR5cGVQ
cm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBUcmVlRWxlbWVudC5wcm90
b3R5cGU7CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9U
eXBlVG9rZW5WaWV3LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmNzcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuY3NzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisudHlwZS10b2tlbiB7
CisgICAgZGlzcGxheTogaW5saW5lOyAKKyAgICBib3JkZXItcmFkaXVzOiAxMHB4OworICAgIGJv
cmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CisgICAgcGFkZGluZy1sZWZ0OiA4cHg7CisgICAgcGFk
ZGluZy1yaWdodDogOHB4OworICAgIHBhZGRpbmctdG9wOiAxcHg7CisgICAgY29sb3I6IHdoaXRl
OworICAgIGZvbnQtc2l6ZTogOTIlOworICAgIG9wYWNpdHk6IDAuODU7Cit9CkluZGV4OiBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5
cGVUb2tlblZpZXcuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldyA9IGZ1
bmN0aW9uKHRva2VuQW5ub3RhdG9yLCBzaG91bGRIYXZlUmlnaHRNYXJnaW4sIHNob3VsZEhhdmVM
ZWZ0TWFyZ2luLCBwb3BvdmVyVGl0bGUpIAoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3QuY2Fs
bCh0aGlzKTsKKworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OworICAgIHNwYW4uY2xhc3NOYW1lID0gInR5cGUtdG9rZW4iOworICAgIHNwYW4uc3R5bGUubWFy
Z2luUmlnaHQgPSAoc2hvdWxkSGF2ZVJpZ2h0TWFyZ2luID8gIjVweCIgOiAiMHB4Iik7CisgICAg
c3Bhbi5zdHlsZS5tYXJnaW5MZWZ0ID0gKHNob3VsZEhhdmVMZWZ0TWFyZ2luID8gIjVweCIgOiAi
MHB4Iik7CisKKyAgICB0aGlzLmVsZW1lbnQgPSBzcGFuOworICAgIHRoaXMuX3Rva2VuQW5ub3Rh
dG9yID0gdG9rZW5Bbm5vdGF0b3I7CisgICAgdGhpcy5fdHlwZXMgPSBudWxsOworICAgIHRoaXMu
X3BvcG92ZXJUaXRsZSA9IHBvcG92ZXJUaXRsZTsKKworICAgIHRoaXMuX3NldFVwTW91c2VvdmVy
SGFuZGxlcnMoKTsKK307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9ycyA9IHsK
KyAgICBwdXJwbGUgOiAiI2NjM2JiZiIsCisgICAgYmx1ZTogIiMzYjcwZTIiLAorICAgIHJlZDog
IiNkZjM1MmUiLAorICAgIGdyZWVuOiAiIzc2YWUxZCIsCisgICAgZ3JheTogIiM3ZTdlN2UiLAor
ICAgIG9yYW5nZTogIiNlZDg0MDAiCit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5D
b2xvckZvclR5cGUgPSB7CisgICAgIlN0cmluZyI6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3
LkNvbG9ycy5yZWQsCisgICAgIkZ1bmN0aW9uIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcu
Q29sb3JzLnB1cnBsZSwgCisgICAgIk51bWJlciI6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3
LkNvbG9ycy5ibHVlLAorICAgICJJbnRlZ2VyIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcu
Q29sb3JzLmJsdWUsCisgICAgIlVuZGVmaW5lZCI6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3
LkNvbG9ycy5ncmF5LAorICAgICJOdWxsIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29s
b3JzLmdyYXksCisgICAgIig/KSI6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9ycy5n
cmF5LAorICAgICJCb29sZWFuIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JzLnB1
cnBsZSwKKyAgICAiKG1hbnkpIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JzLm9y
YW5nZQorfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuU2ltcGxlVHlwZSA9IHsKKyAg
ICAiU3RyaW5nIjogdHJ1ZSwKKyAgICAiTnVtYmVyIjogdHJ1ZSwKKyAgICAiSW50ZWdlciI6IHRy
dWUsCisgICAgIlVuZGVmaW5lZCI6IHRydWUsCisgICAgIk51bGwiOiB0cnVlLAorICAgICJCb29s
ZWFuIjogdHJ1ZSwKK307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnByb3RvdHlwZSA9
IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcsCisKKyAgICAv
LyBwdWJsaWMKKworICAgIHVwZGF0ZTogZnVuY3Rpb24odHlwZXMpCisgICAgeworICAgICAgICB2
YXIgdGl0bGUgPSB0eXBlcy5kaXNwbGF5VHlwZU5hbWU7CisgICAgICAgIHRoaXMuZWxlbWVudC50
ZXh0Q29udGVudCA9IHRpdGxlOworICAgICAgICB0aGlzLl90eXBlcyA9IHR5cGVzOworICAgICAg
ICB2YXIgaGFzaFN0cmluZyA9IHRpdGxlW3RpdGxlLmxlbmd0aCAtIDFdID09PSAiPyIgPyB0aXRs
ZS5zbGljZSgwLCB0aXRsZS5sZW5ndGggLSAxKSA6IHRpdGxlOworICAgICAgICB0aGlzLmVsZW1l
bnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29s
b3JGb3JUeXBlW2hhc2hTdHJpbmddIHx8IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9y
cy5ncmVlbjsKKyAgICB9LAorICAgIAorICAgIC8vIHByaXZhdGUKKyAgICAKKyAgICBfc2V0VXBN
b3VzZW92ZXJIYW5kbGVyczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0
aGlzOworICAgICAgICB2YXIgdGltZW91dElEID0gbnVsbDsKKworICAgICAgICB0aGlzLmVsZW1l
bnQub25tb3VzZW92ZXIgPSBmdW5jdGlvbigpIAorICAgICAgICB7CisgICAgICAgICAgICBmdW5j
dGlvbiBzaG93UG9wb3ZlckFmdGVyRGVsYXkoKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHRpbWVvdXRJRCA9IG51bGw7CisKKyAgICAgICAgICAgICAgICB2YXIgZG9tUmVjdCA9IHNl
bGYuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgICAgICAgICB2YXIg
Ym91bmRzID0gbmV3IFdlYkluc3BlY3Rvci5SZWN0KGRvbVJlY3QubGVmdCwgZG9tUmVjdC50b3As
IGRvbVJlY3Qud2lkdGgsIGRvbVJlY3QuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBzZWxmLl90
b2tlbkFubm90YXRvci5fc291cmNlQ29kZVRleHRFZGl0b3IuX3Nob3dQb3BvdmVyRm9yVHlwZXMo
c2VsZi5fdHlwZXMsIGJvdW5kcywgc2VsZi5fcG9wb3ZlclRpdGxlKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5TaW1wbGVUeXBl
W3NlbGYuX3R5cGVzLmRpc3BsYXlUeXBlTmFtZV0pCisgICAgICAgICAgICAgICAgdGltZW91dElE
ID0gc2V0VGltZW91dChzaG93UG9wb3ZlckFmdGVyRGVsYXksIDM1MCk7CisgICAgICAgIH0KKwor
ICAgICAgICB0aGlzLmVsZW1lbnQub25tb3VzZW91dCA9IGZ1bmN0aW9uKCkgCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICh0aW1lb3V0SUQgIT09IG51bGwpCisgICAgICAgICAgICAgICAgY2xl
YXJUaW1lb3V0KHRpbWVvdXRJRCk7CisgICAgICAgIH0KKyAgICB9CisKK307CisKK1dlYkluc3Bl
Y3Rvci5UeXBlVG9rZW5WaWV3LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2Jq
ZWN0LnByb3RvdHlwZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236298</attachid>
            <date>2014-08-08 12:40:19 -0700</date>
            <delta_ts>2014-08-12 19:45:49 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>45619</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJ
KHJldmlzaW9uIDE3MjM0OCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01haW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSw3IEBACiAgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9UaW1lbGluZVZpZXcuY3NzIj4KICAgICA8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1Rvb2xiYXIuY3NzIj4KICAgICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1RyZWVFbGVtZW50U3RhdHVzQnV0dG9uLmNzcyI+
CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9UeXBlVG9rZW5WaWV3LmNz
cyI+CiAKICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IkNvbnRyb2xsZXJzL0NvZGVN
aXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iQ29udHJvbGxlcnMvQ29kZU1pcnJvckRyYWdUb0FkanVzdE51bWJlckNvbnRyb2xs
ZXIuY3NzIj4KQEAgLTQ1Niw2ICs0NTgsOCBAQAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Ub29s
YmFyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHJlZUVsZW1lbnRTdGF0
dXNCdXR0b24uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UcmVlT3V0bGlu
ZURhdGFHcmlkU3luY2hyb25pemVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmll
d3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
Vmlld3MvVHlwZVRva2VuVmlldy5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQ29u
dHJvbGxlcnMvQ29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyLmpzIj48L3NjcmlwdD4KIApAQCAt
NDg3LDYgKzQ5MSw3IEBACiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1NvdXJjZU1hcE1h
bmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9TdG9yYWdl
TWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1RpbWVs
aW5lTWFuYWdlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1R5
cGVUb2tlbkFubm90YXRvci5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQmFzZS9N
YWluLmpzIj48L3NjcmlwdD4KIApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQmFzZS9NYWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwkocmV2aXNpb24gMTcyMzQ4KQorKysgU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjAsNiArMTYwLDEwIEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAKICAg
ICB0aGlzLnNob3dTaGFkb3dET01TZXR0aW5nID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5nKCJz
aG93LXNoYWRvdy1kb20iLCBmYWxzZSk7CiAgICAgdGhpcy5zaG93UmVwbGF5SW50ZXJmYWNlU2V0
dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygic2hvdy13ZWItcmVwbGF5IiwgZmFsc2Up
OworICAgIAorICAgIHRoaXMuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nID0g
bmV3IFdlYkluc3BlY3Rvci5TZXR0aW5nKCJzaG93LWphdmFzY3JpcHQtdHlwZS1pbmZvcm1hdGlv
biIsIGZhbHNlKTsKKyAgICBpZiAodGhpcy5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNl
dHRpbmcudmFsdWUpCisgICAgICAgIFJ1bnRpbWVBZ2VudC5lbmFibGVIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsaW5nKCk7CiAKICAgICB0aGlzLm1vdXNlQ29vcmRzID0gewogICAgICAgICB4OiAwLApJ
bmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29k
ZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRy
YWNraW5nQ29udHJvbGxlci5qcwkocmV2aXNpb24gMTcyMzQ4KQorKysgU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdD
b250cm9sbGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw4IEBAIFdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnQKICAgICBOb25lOiAibm9uZSIsCiAgICAgTm9u
U3ltYm9sVG9rZW5zOiAibm9uLXN5bWJvbC10b2tlbnMiLAogICAgIEphdmFTY3JpcHRFeHByZXNz
aW9uOiAiamF2YXNjcmlwdC1leHByZXNzaW9uIiwKLSAgICBNYXJrZWRUb2tlbnM6ICJtYXJrZWQt
dG9rZW5zIgorICAgIE1hcmtlZFRva2VuczogIm1hcmtlZC10b2tlbnMiLAorICAgIEphdmFTY3Jp
cHRUeXBlSW5mb3JtYXRpb246ICJqYXZhc2NyaXB0LXR5cGUtaW5mb3JtYXRpb24iCiB9CiAKIFdl
Ykluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0g
ewpAQCAtMzg5LDYgKzM5MCw3IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2lu
Z0NvbnQKICAgICAgICAgICAgIHRoaXMuX2NhbmRpZGF0ZSA9IHRoaXMuX3Byb2Nlc3NOb25TeW1i
b2xUb2tlbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNz
aW9uOgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOgogICAgICAgICAgICAgdGhp
cy5fY2FuZGlkYXRlID0gdGhpcy5fcHJvY2Vzc0phdmFTY3JpcHRFeHByZXNzaW9uKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2Vu
VHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTWFya2VkVG9rZW5zOgpJbmRleDogU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyU291cmNlTWFwLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5qcwkocmV2aXNpb24gMTcyMzQ4KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyU291cmNl
TWFwLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNSArNDUsMjcgQEAgV2ViSW5zcGVjdG9yLkZv
cm1hdHRlclNvdXJjZU1hcC5wcm90b3R5cAogICAgIG9yaWdpbmFsVG9Gb3JtYXR0ZWQ6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CiAgICAgICAgIHZhciBvcmlnaW5h
bFBvc2l0aW9uID0gdGhpcy5fbG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVu
ZGluZ3MsIGxpbmVOdW1iZXIgfHwgMCwgY29sdW1uTnVtYmVyIHx8IDApOworICAgICAgICByZXR1
cm4gdGhpcy5vcmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQob3JpZ2luYWxQb3NpdGlvbik7Cisg
ICAgfSwKKworICAgIG9yaWdpbmFsUG9zaXRpb25Ub0Zvcm1hdHRlZDogZnVuY3Rpb24ob3JpZ2lu
YWxQb3NpdGlvbikKKyAgICB7CiAgICAgICAgIHZhciBmb3JtYXR0ZWRQb3NpdGlvbiA9IHRoaXMu
X2NvbnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLm9yaWdpbmFsLCB0aGlzLl9tYXBwaW5nLmZv
cm1hdHRlZCwgb3JpZ2luYWxQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlv
blRvTG9jYXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGZvcm1hdHRlZFBvc2l0aW9u
KTsKICAgICB9LAogCisKICAgICBmb3JtYXR0ZWRUb09yaWdpbmFsOiBmdW5jdGlvbihsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIpCiAgICAgeworICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9
IHRoaXMuZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
OworICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0aW9uKHRoaXMuX29yaWdpbmFs
TGluZUVuZGluZ3MsIG9yaWdpbmFsUG9zaXRpb24pOworICAgIH0sCisKKyAgICBmb3JtYXR0ZWRU
b09yaWdpbmFsT2Zmc2V0OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAg
ewogICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9sb2NhdGlvblRvUG9zaXRp
b24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGxpbmVOdW1iZXIgfHwgMCwgY29sdW1uTnVt
YmVyIHx8IDApOwogICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMuX2NvbnZlcnRQ
b3NpdGlvbih0aGlzLl9tYXBwaW5nLmZvcm1hdHRlZCwgdGhpcy5fbWFwcGluZy5vcmlnaW5hbCwg
Zm9ybWF0dGVkUG9zaXRpb24pOwotICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0
aW9uKHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MsIG9yaWdpbmFsUG9zaXRpb24pOworICAgICAg
ICByZXR1cm4gb3JpZ2luYWxQb3NpdGlvbjsKICAgICB9LAogCiAgICAgLy8gUHJpdmF0ZQpJbmRl
eDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRv
a2VuQW5ub3RhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVU
b2tlbkFubm90YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IgPSBmdW5jdGlvbihzb3VyY2VD
b2RlVGV4dEVkaXRvciwgc2NyaXB0KSAKK3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwo
dGhpcyk7CisKKyAgICBjb25zb2xlLmFzc2VydChzb3VyY2VDb2RlVGV4dEVkaXRvciAmJiBzb3Vy
Y2VDb2RlVGV4dEVkaXRvciBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvciAmJiBzY3JpcHQpOworICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlwdDsKKyAgICB0aGlzLl9z
b3VyY2VDb2RlVGV4dEVkaXRvciA9IHNvdXJjZUNvZGVUZXh0RWRpdG9yOworICAgIHRoaXMuX3R5
cGVUb2tlbk5vZGVzID0gW107CisgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtzID0gW107Cisg
ICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgIHRoaXMuX2lzQWN0aXZlID0g
ZmFsc2U7Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZSA9
IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvciwKKyAg
ICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVi
bGljCisKKyAgICBnZXQgaXNBY3RpdmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lz
QWN0aXZlOworICAgIH0sCisKKyAgICBwYXVzZTogZnVuY3Rpb24oKSAKKyAgICB7CisgICAgICAg
IHRoaXMuX2NsZWFyVGltZW91dElmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX2lzQWN0aXZlID0g
ZmFsc2U7CisgICAgfSwKKworICAgIHJlc3VtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
dGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsKKyAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0
cnVlOworICAgICAgICB0aGlzLmluc2VydEFubm90YXRpb25zKCk7CisgICAgfSwKKworICAgIHJl
c2V0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRl
ZCgpOworICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIHRoaXMuX2NsZWFy
VHlwZVRva2VucygpOworICAgICAgICB0aGlzLmluc2VydEFubm90YXRpb25zKCk7CisgICAgfSwK
KworICAgIHRvZ2dsZVR5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuX2lzQWN0aXZlKSB7CisgICAgICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNl
OworICAgICAgICAgICAgdGhpcy5fY2xlYXJUeXBlVG9rZW5zKCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICB0aGlzLnJl
c2V0KCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpcy5faXNBY3RpdmU7CisgICAg
fSwKKworICAgIGluc2VydEFubm90YXRpb25zOiBmdW5jdGlvbigpIAorICAgIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9pc0FjdGl2ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIg
c2NyaXB0U3ludGF4VHJlZSA9IHRoaXMuX3NjcmlwdC5fc2NyaXB0U3ludGF4VHJlZTsKKyAgICAg
ICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc2NyaXB0LmlkOworICAgICAgICB2YXIgc2VsZiA9IHRo
aXM7CisKKyAgICAgICAgaWYgKCFzY3JpcHRTeW50YXhUcmVlKSB7CisgICAgICAgICAgICB0aGlz
Ll9zY3JpcHQucmVxdWVzdFNjcmlwdFN5bnRheFRyZWUoKS50aGVuKHRoaXMuaW5zZXJ0QW5ub3Rh
dGlvbnMuYmluZCh0aGlzKSk7CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9zY3JpcHQuY2FuUmVx
dWVzdENvbnRlbnRGcm9tQmFja2VuZCgpKQorICAgICAgICAgICAgICAgIHRoaXMuX3NjcmlwdC5y
ZXF1ZXN0Q29udGVudChmdW5jdGlvbigpIHt9KTsKKworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIGNvZGVNaXJyb3IgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVk
aXRvci5fY29kZU1pcnJvcjsKKyAgICAgICAgdmFyIHZpc2libGVSYW5nZSA9IGNvZGVNaXJyb3Iu
Z2V0Vmlld3BvcnQoKTsKKyAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gbnVsbDsKKyAgICAgICAg
dmFyIGVuZE9mZnNldCA9IG51bGw7CisgICAgICAgIHZhciBzb3VyY2VNYXAgPSB0aGlzLl9zb3Vy
Y2VDb2RlVGV4dEVkaXRvci5fZm9ybWF0dGVyU291cmNlTWFwOworCisgICAgICAgIGlmIChzb3Vy
Y2VNYXApIHsKKyAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gc291cmNlTWFwLmZvcm1hdHRlZFRv
T3JpZ2luYWxPZmZzZXQoTWF0aC5tYXgodmlzaWJsZVJhbmdlLmZyb20gLSAxLCAwKSwgMCk7Cisg
ICAgICAgICAgICBlbmRPZmZzZXQgPSBzb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNl
dCh2aXNpYmxlUmFuZ2UudG8gLSAxLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHN0YXJ0T2Zmc2V0ID0gY29kZU1pcnJvci5nZXREb2MoKS5pbmRleEZyb21Qb3MoeyBsaW5lOiB2
aXNpYmxlUmFuZ2UuZnJvbSwgY2g6IDAgfSk7CisgICAgICAgICAgICBlbmRPZmZzZXQgPSBjb2Rl
TWlycm9yLmdldERvYygpLmluZGV4RnJvbVBvcyh7IGxpbmU6IHZpc2libGVSYW5nZS50bywgY2g6
IDAgfSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTsK
KyAgICAgICAgdmFyIGFsbE5vZGVzSW5SYW5nZSA9IHNjcmlwdFN5bnRheFRyZWUuZmlsdGVyQnlS
YW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICAgICAgc2NyaXB0U3ludGF4VHJlZS51
cGRhdGVUeXBlcyhzb3VyY2VJRCwgYWxsTm9kZXNJblJhbmdlLCBmdW5jdGlvbiBhZnRlclR5cGVV
cGRhdGVzKCkgeworICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGlzIGlzIGFuIGFzeW5jaHJvbm91
cyBjYWxsLCB3ZSBjb3VsZCBoYXZlIGJlZW4gZGVhY3RpdmF0ZWQgYmVmb3JlIHRoZSBjYWxsYmFj
ayBmdW5jdGlvbiBpcyBjYWxsZWQuCisgICAgICAgICAgICBpZiAoIXNlbGYuX2lzQWN0aXZlKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgYWxsTm9kZXNJblJhbmdlLmZv
ckVhY2goc2VsZi5faW5zZXJ0VHlwZVRva2Vuc0ZvckVhY2hOb2RlLmJpbmQoc2VsZikpOworICAg
ICAgICAgICAgYWxsTm9kZXNJblJhbmdlLmZvckVhY2goc2VsZi5fdXBkYXRlVHlwZVRva2Vuc0Zv
ckVhY2hOb2RlKTsKKworICAgICAgICAgICAgdmFyIHRvdGFsVGltZSA9IERhdGUubm93KCkgLSBz
dGFydFRpbWU7CisgICAgICAgICAgICB2YXIgdGltZW91dFRpbWUgPSBNYXRoLm1pbihNYXRoLm1h
eCg3NTAwLCB0b3RhbFRpbWUpLCA4ICogdG90YWxUaW1lKTsKKworICAgICAgICAgICAgc2VsZi5f
dGltZW91dElkZW50aWZpZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIHRpbWVvdXRVcGRhdGUoKSB7
CisgICAgICAgICAgICAgICAgc2VsZi5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAg
ICAgICAgICAgIHNlbGYuaW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICAgICAgICAgIH0sIHRpbWVv
dXRUaW1lKTsKKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIF9p
bnNlcnRUeXBlVG9rZW5zRm9yRWFjaE5vZGU6IGZ1bmN0aW9uKG5vZGUpCisgICAgeworICAgICAg
ICB2YXIgVHlwZXMgPSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZTsKKyAg
ICAgICAgdmFyIHNjcmlwdFN5bnRheFRyZWUgPSB0aGlzLl9zY3JpcHQuX3NjcmlwdFN5bnRheFRy
ZWU7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICBzd2l0Y2gobm9kZS50eXBl
KSB7CisgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgY2Fz
ZSBUeXBlcy5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICBub2RlLnBhcmFtcy5mb3JF
YWNoKGZ1bmN0aW9uIChwYXJhbSkgeworICAgICAgICAgICAgICAgIGlmICghcGFyYW0uX2F0dGFj
aG1lbnRzLl90eXBlVG9rZW4gJiYgcGFyYW0uX2F0dGFjaG1lbnRzLl90eXBlcyAmJiBwYXJhbS5f
YXR0YWNobWVudHMuX3R5cGVzLmRpc3BsYXlUeXBlTmFtZSkgeworICAgICAgICAgICAgICAgICAg
ICBwYXJhbS5fYXR0YWNobWVudHMuX3R5cGVQb3BvdmVyVGl0bGUgPSAiVHlwZSBpbmZvcm1hdGlv
biBmb3IgdmFyaWFibGU6ICIgKyBwYXJhbS5uYW1lOworICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9pbnNlcnRUb2tlbihwYXJhbS5yYW5nZVswXSwgcGFyYW0sIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIElmIGEgZnVuY3Rpb24gZG9l
cyBub3QgaGF2ZSBhbiBleHBsaWNpdCByZXR1cm4gdHlwZSwgdGhlbiBkb24ndCBzaG93IGEgcmV0
dXJuIHR5cGUgdW5sZXNzIHdlIHRoaW5rIGl0J3MgYSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgICAg
IGlmICghbm9kZS5fYXR0YWNobWVudHMuX3R5cGVUb2tlbiAmJiBub2RlLl9hdHRhY2htZW50cy5f
cmV0dXJuVHlwZXMgJiYgbm9kZS5fYXR0YWNobWVudHMuX3JldHVyblR5cGVzLmRpc3BsYXlUeXBl
TmFtZSAmJiAoc2NyaXB0U3ludGF4VHJlZS5jb250YWluc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50
KG5vZGUuYm9keSkgfHwgbm9kZS5fYXR0YWNobWVudHMuX3JldHVyblR5cGVzLmRpc3BsYXlUeXBl
TmFtZSAhPT0gIlVuZGVmaW5lZCIpKSB7CisgICAgICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVu
dHMuX3R5cGVQb3BvdmVyVGl0bGUgPSAiUmV0dXJuIHR5cGUgaW5mb3JtYXRpb24gZm9yIGZ1bmN0
aW9uIiArIChub2RlLmlkID8gKCI6ICIgKyBub2RlLmlkLm5hbWUpIDogIiIpOworICAgICAgICAg
ICAgICAgIHNlbGYuX2luc2VydFRva2VuKG5vZGUuaXNHZXR0ZXJPclNldHRlciA/IG5vZGUuZ2V0
dGVyT3JTZXR0ZXJSYW5nZVswXSA6IG5vZGUucmFuZ2VbMF0sIG5vZGUsIHRydWUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVmFyaWFibGVE
ZWNsYXJhdG9yOgorICAgICAgICAgICAgaWYgKCFub2RlLl9hdHRhY2htZW50cy5fdHlwZVRva2Vu
ICYmIG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlcyAmJiBub2RlLl9hdHRhY2htZW50cy5fdHlwZXMu
ZGlzcGxheVR5cGVOYW1lKSB7CisgICAgICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3R5
cGVQb3BvdmVyVGl0bGUgPSAiVHlwZSBpbmZvcm1hdGlvbiBmb3IgdmFyaWFibGU6ICIgKyBub2Rl
LmlkLm5hbWU7CisgICAgICAgICAgICAgICAgc2VsZi5faW5zZXJ0VG9rZW4obm9kZS5pZC5yYW5n
ZVswXSwgbm9kZSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9LAorCisgICAgX2luc2VydFRva2VuOiBmdW5jdGlvbihvZmZzZXQsIG5v
ZGUsIGlzUmV0dXJuKQorICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZU1hcCA9IHRoaXMuX3NvdXJj
ZUNvZGVUZXh0RWRpdG9yLl9mb3JtYXR0ZXJTb3VyY2VNYXA7CisgICAgICAgIHZhciBjb2RlTWly
cm9yID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3IuX2NvZGVNaXJyb3I7CisgICAgICAgIHZh
ciBsb2NhdGlvbjsgCisgICAgICAgIHZhciBzdGFydDsgCisKKyAgICAgICAgaWYgKHNvdXJjZU1h
cCkgeworICAgICAgICAgICAgbG9jYXRpb24gPSBzb3VyY2VNYXAub3JpZ2luYWxQb3NpdGlvblRv
Rm9ybWF0dGVkKG9mZnNldCk7CisgICAgICAgICAgICBzdGFydCA9IHsgbGluZTogbG9jYXRpb24u
bGluZU51bWJlciwgY2g6IGxvY2F0aW9uLmNvbHVtbk51bWJlciB9OworICAgICAgICAgICAgb2Zm
c2V0ID0gY29kZU1pcnJvci5nZXREb2MoKS5pbmRleEZyb21Qb3Moc3RhcnQpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHN0YXJ0ID0gY29kZU1pcnJvci5nZXREb2MoKS5wb3NGcm9tSW5k
ZXgob2Zmc2V0KTsKKworICAgICAgICB2YXIgc291cmNlU3RyaW5nID0gY29kZU1pcnJvci5nZXRW
YWx1ZSgpOworICAgICAgICBpZiAoaXNSZXR1cm4pIHsKKyAgICAgICAgICAgIC8vIFRyYW5zbGF0
ZSB0aGUgcG9zaXRpb24gdG8gdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMgb2YgdGhlIGZ1bmN0aW9u
IGFyZ3VtZW50cy4KKyAgICAgICAgICAgIG9mZnNldCA9IHRoaXMuX2dldE5ld09mZnNldEZvclJl
dHVyblN0YXRlbWVudChub2RlLCBvZmZzZXQsIHNvdXJjZVN0cmluZyk7CisgICAgICAgICAgICBz
dGFydCA9IGNvZGVNaXJyb3IuZ2V0RG9jKCkucG9zRnJvbUluZGV4KG9mZnNldCk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBOb3RlOiBDb2RlTWlycm9yIGJvb2ttYXJrcyByZW5kZXIgdG8gdGhl
IGxlZnQgb2YgdGhlIGNoYXJhY3RlciB0aGV5J3JlIGJlaW5nIGRpc3BsYXllZCBuZXh0IHRvOyB0
aGF0IGlzIHdoeSByaWdodCBtYXJnaW4gY2hlY2tzIHRoZSBjdXJyZW50IG9mZnNldC4KKyAgICAg
ICAgdmFyIGlzU3BhY2VSZWdleHAgPSAvXHMvOworICAgICAgICB2YXIgc2hvdWxkSGF2ZUxlZnRN
YXJnaW4gPSBvZmZzZXQgIT09IDAgJiYgIWlzU3BhY2VSZWdleHAudGVzdChzb3VyY2VTdHJpbmdb
b2Zmc2V0IC0gMV0pOworICAgICAgICB2YXIgc2hvdWxkSGF2ZVJpZ2h0TWFyZ2luID0gIWlzU3Bh
Y2VSZWdleHAudGVzdChzb3VyY2VTdHJpbmdbb2Zmc2V0XSk7CisgICAgICAgIHZhciB0eXBlVG9r
ZW4gPSBuZXcgV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcodGhpcywgc2hvdWxkSGF2ZVJpZ2h0
TWFyZ2luLCBzaG91bGRIYXZlTGVmdE1hcmdpbiwgbm9kZS5fYXR0YWNobWVudHMuX3R5cGVQb3Bv
dmVyVGl0bGUpOworICAgICAgICB2YXIgYm9va21hcmsgPSBjb2RlTWlycm9yLnNldFVuaXF1ZUJv
b2ttYXJrKHN0YXJ0LCB7IHdpZGdldDogdHlwZVRva2VuLmVsZW1lbnQgfSk7CisgICAgICAgIG5v
ZGUuX2F0dGFjaG1lbnRzLl90eXBlVG9rZW4gPSB0eXBlVG9rZW47CisgICAgICAgIHRoaXMuX3R5
cGVUb2tlbk5vZGVzLnB1c2gobm9kZSk7CisgICAgICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJr
cy5wdXNoKGJvb2ttYXJrKTsKKyAgICB9LAorCisgICAgX3VwZGF0ZVR5cGVUb2tlbnNGb3JFYWNo
Tm9kZTogZnVuY3Rpb24obm9kZSkgCisgICAgeworICAgICAgICB2YXIgVHlwZXMgPSBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZTsKKworICAgICAgICBzd2l0Y2gobm9kZS50
eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAg
Y2FzZSBUeXBlcy5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICBub2RlLnBhcmFtcy5m
b3JFYWNoKGZ1bmN0aW9uKHBhcmFtKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtLl9hdHRh
Y2htZW50cy5fdHlwZVRva2VuKQorICAgICAgICAgICAgICAgICAgICBwYXJhbS5fYXR0YWNobWVu
dHMuX3R5cGVUb2tlbi51cGRhdGUocGFyYW0uX2F0dGFjaG1lbnRzLl90eXBlcyk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIGlmIChub2RlLl9hdHRhY2htZW50cy5fdHlwZVRva2VuKQor
ICAgICAgICAgICAgICAgIG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlVG9rZW4udXBkYXRlKG5vZGUu
X2F0dGFjaG1lbnRzLl9yZXR1cm5UeXBlcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAgICBpZiAobm9kZS5fYXR0
YWNobWVudHMuX3R5cGVUb2tlbikKKyAgICAgICAgICAgICAgICBub2RlLl9hdHRhY2htZW50cy5f
dHlwZVRva2VuLnVwZGF0ZShub2RlLl9hdHRhY2htZW50cy5fdHlwZXMpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2NsZWFyVHlwZVRva2VuczogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuTm9kZXMuZm9yRWFjaChmdW5jdGlv
bihub2RlKSB7CisgICAgICAgICAgICBub2RlLl9hdHRhY2htZW50cy5fdHlwZVRva2VuID0gbnVs
bDsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcy5mb3JFYWNo
KGZ1bmN0aW9uKGJvb2ttYXJrKSB7CisgICAgICAgICAgICBib29rbWFyay5jbGVhcigpOworICAg
ICAgICB9KTsKKworICAgICAgICB0aGlzLl90eXBlVG9rZW5Ob2RlcyA9IFtdOworICAgICAgICB0
aGlzLl90eXBlVG9rZW5Cb29rbWFya3MgPSBbXTsKKyAgICB9LAorCisgICAgX2dldE5ld09mZnNl
dEZvclJldHVyblN0YXRlbWVudDogZnVuY3Rpb24obm9kZSwgb2Zmc2V0LCBzb3VyY2VTdHJpbmcp
CisgICAgeworICAgICAgICAvLyBUaGUgYXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgd2UgZ2V0IHRo
ZSBvZmZzZXQgc3RhcnRpbmcgYXQgdGhlIGZ1bmN0aW9uIGtleXdvcmQgKG9yIGFmdGVyIHRoZSBn
ZXQvc2V0IGtleXdvcmRzKS4KKyAgICAgICAgLy8gV2Ugd2lsbCByZXR1cm4gdGhlIG9mZnNldCBm
b3IgdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMgaW4gdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgor
ICAgICAgICAvLyBBbGwgdGhpcyBjb2RlIGlzIGp1c3QgYSB3YXkgdG8gZmluZCB0aGlzIHBhcmVu
dGhlc2lzIHdoaWxlIGlnbm9yaW5nIGNvbW1lbnRzLgorCisgICAgICAgIHZhciBpc011bHRpTGlu
ZUNvbW1lbnQgPSBmYWxzZTsKKyAgICAgICAgdmFyIGlzU2luZ2xlTGluZUNvbW1lbnQgPSBmYWxz
ZTsKKyAgICAgICAgdmFyIHNob3VsZElnbm9yZSA9IGZhbHNlOworICAgICAgICB3aGlsZSAoKHNv
dXJjZVN0cmluZ1tvZmZzZXRdICE9PSAiKSIgfHwgc2hvdWxkSWdub3JlKSAmJiBvZmZzZXQgPCBz
b3VyY2VTdHJpbmcubGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoaXNTaW5nbGVMaW5lQ29tbWVu
dCAmJiAoc291cmNlU3RyaW5nW29mZnNldF0gPT09ICJcbiIgfHwgKHNvdXJjZVN0cmluZ1tvZmZz
ZXRdID09PSAiXHIiICYmIHNvdXJjZVN0cmluZ1tvZmZzZXQgKyAxXSA9PT0gIlxuIikpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHNvdXJjZVN0cmluZ1tvZmZzZXRdID09PSAiXHIiKQorICAgICAg
ICAgICAgICAgICAgICBvZmZzZXQrKzsKKyAgICAgICAgICAgICAgICBpc1NpbmdsZUxpbmVDb21t
ZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgc2hvdWxkSWdub3JlID0gZmFsc2U7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzTXVsdGlMaW5lQ29tbWVudCAmJiBzb3VyY2VTdHJpbmdbb2Zm
c2V0XSA9PT0gIioiICYmIHNvdXJjZVN0cmluZ1tvZmZzZXQgKyAxXSA9PT0gIi8iKSB7CisgICAg
ICAgICAgICAgICAgaXNNdWx0aUxpbmVDb21tZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
c2hvdWxkSWdub3JlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgb2Zmc2V0Kys7IAorICAgICAg
ICAgICAgfSBlbHNlIGlmICghc2hvdWxkSWdub3JlICYmIHNvdXJjZVN0cmluZ1tvZmZzZXRdID09
PSAiLyIpIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQrKzsKKyAgICAgICAgICAgICAgICBpZiAo
c291cmNlU3RyaW5nW29mZnNldF0gPT09ICIqIikKKyAgICAgICAgICAgICAgICAgICAgaXNNdWx0
aUxpbmVDb21tZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VTdHJp
bmdbb2Zmc2V0XSA9PT0gIi8iKQorICAgICAgICAgICAgICAgICAgICBpc1NpbmdsZUxpbmVDb21t
ZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiQmFkIHBhcnNpbmcuIENvdWxkbid0IHBhcnNlIGNvbW1lbnQgcHJlYW1i
bGUuIik7CisgICAgICAgICAgICAgICAgc2hvdWxkSWdub3JlID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgb2Zmc2V0Kys7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
b2Zmc2V0ICsgMTsKKyAgICB9LAorCisgICAgX2NsZWFyVGltZW91dElmTmVlZGVkOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fdGltZW91dElkZW50aWZpZXIpIHsKKyAgICAg
ICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWRlbnRpZmllcik7CisgICAgICAgICAg
ICB0aGlzLl90aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9OwpJ
bmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29k
ZVRleHRFZGl0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMJKHJldmlzaW9uIDE3MjM0OCkK
KysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVU
ZXh0RWRpdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvciA9IGZ1bmMKIAogICAgIFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yLmNhbGwodGhpcywgbnVsbCwgbnVsbCwgdGhpcyk7CiAKKyAgICB0aGlzLl90eXBlVG9rZW5B
bm5vdGF0b3IgPSBudWxsOyAKKyAgICB0aGlzLl9pc1RyYWNraW5nU2Nyb2xsRXZlbnRzRm9yVHlw
ZVRva2VuQW5ub3RhdG9yID0gZmFsc2U7CisKICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHRoaXMg
anVzdCBqdW1wcyBiZXR3ZWVuIHJlc291cmNlcyBhbmQgcmVsYXRlZCBzb3VyY2UgbWFwIHJlc291
cmNlcy4gSXQgZG9lc24ndCAianVtcCB0byBzeW1ib2wiIHlldC4KICAgICB0aGlzLl91cGRhdGVU
b2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKCk7CiAKQEAgLTU0LDYgKzU3LDcgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yID0gZnVuYwogCiAgICAgICAgIFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJN
YW5hZ2VyLkV2ZW50LlBhdXNlZCwgdGhpcy5fZGVidWdnZXJEaWRQYXVzZSwgdGhpcyk7CiAgICAg
ICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlJlc3VtZWQsIHRoaXMuX2RlYnVnZ2VyRGlkUmVz
dW1lLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQ2FsbEZyYW1lc0Rp
ZENoYW5nZSwgdGhpcy5fY2FsbEZyYW1lRGlkQ2hhbmdlLCB0aGlzKTsKICAgICAgICAgaWYgKFdl
Ykluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWN0aXZlQ2FsbEZyYW1lKQogICAgICAgICAgICAg
dGhpcy5fZGVidWdnZXJEaWRQYXVzZSgpOwogCkBAIC0xMDEsNiArMTA1LDE1IEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgcmV0dXJuIHRoaXMuX3Nv
dXJjZUNvZGU7CiAgICAgfSwKIAorICAgIHNob3duOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICAvL2NvbnNvbGUudHJhY2UoKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJv
dG90eXBlLnNob3duLmNhbGwodGhpcyk7CisKKyAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFu
bm90YXRvcikKKyAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZXN1bWUoKTsK
KyAgICB9LAorCiAgICAgaGlkZGVuOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuaGlkZGVuLmNhbGwodGhpcyk7CkBAIC0xMTAsNiAr
MTIzLDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAg
ICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOwogICAgICAgICAKICAgICAgICAgdGhpcy5fZGlzbWlz
c0VkaXRpbmdDb250cm9sbGVyKHRydWUpOworCisgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5B
bm5vdGF0b3IpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucGF1c2UoKTsK
ICAgICB9LAogCiAgICAgY2xvc2U6IGZ1bmN0aW9uKCkKQEAgLTIzNCw2ICsyNTAsMjUgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICAgICAgdGhpcy5f
dXBkYXRlRWRpdGFibGVNYXJrZXJzKHJhbmdlKTsKICAgICB9LAogCisgICAgdG9nZ2xlVHlwZUFu
bm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3R5cGVUb2tl
bkFubm90YXRvcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB2YXIgaXNB
Y3RpdmF0ZWQgPSB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IudG9nZ2xlVHlwZUFubm90YXRpb25z
KCk7CisgICAgICAgIGlmIChpc0FjdGl2YXRlZCkgeworICAgICAgICAgICAgUnVudGltZUFnZW50
LmVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoKTsKKyAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWUgPSB0cnVlOwor
ICAgICAgICAgICAgdGhpcy5fc2V0dXBTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3Io
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJ1bnRpbWVBZ2VudC5kaXNhYmxlSGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZygpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dK
YXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZSA9IGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOwor
ICAgICAgICByZXR1cm4gaXNBY3RpdmF0ZWQ7CisgICAgfSwKKwogICAgIC8vIFByaXZhdGUKIAog
ICAgIF91bmZvcm1hdHRlZExpbmVJbmZvRm9yRWRpdG9yTGluZUluZm86IGZ1bmN0aW9uKGxpbmVJ
bmZvKQpAQCAtMzU4LDYgKzM5MywxMCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IucHJvdG90CiAKICAgICAgICAgdGhpcy5fY29udGVudFdpbGxQb3B1bGF0ZShjb250ZW50KTsK
ICAgICAgICAgdGhpcy5zdHJpbmcgPSBjb250ZW50OworCisgICAgICAgIGlmICh0aGlzLl9jb2Rl
TWlycm9yLmdldE1vZGUoKS5uYW1lID09PSAiamF2YXNjcmlwdCIpCisgICAgICAgICAgICB0aGlz
Ll9tYWtlVHlwZVRva2VuQW5ub3RhdG9yKCk7CisKICAgICAgICAgdGhpcy5fY29udGVudERpZFBv
cHVsYXRlKCk7CiAgICAgfSwKIApAQCAtOTY3LDEyICsxMDA2LDIyIEBAIFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICBfZGVidWdnZXJEaWRQYXVzZTogZnVuY3Rp
b24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJv
bGxlclN0YXRlKCk7CisgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhp
cy5fdHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQorICAgICAgICAgICAgdGhpcy5fdHlwZVRv
a2VuQW5ub3RhdG9yLnJlc3VtZSgpOworICAgIH0sCisKKyAgICBfY2FsbEZyYW1lRGlkQ2hhbmdl
OiBmdW5jdGlvbihldmVudCkgCisgICAgeworICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5u
b3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAgICAg
IHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZXN1bWUoKTsKICAgICB9LAogCiAgICAgX2RlYnVn
Z2VyRGlkUmVzdW1lOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMuX3VwZGF0
ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKICAgICAgICAgdGhpcy5fZGlzbWlzc1Bv
cG92ZXIoKTsKKyAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90
eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5B
bm5vdGF0b3IucmVzdW1lKCk7CiAgICAgfSwKIAogICAgIF9zb3VyY2VDb2RlU291cmNlTWFwQWRk
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtOTg4LDYgKzEwMzcsOCBAQCBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIHZhciBtb2RlID0gV2ViSW5zcGVjdG9y
LkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk5vbmU7CiAgICAgICAgIGlm
IChXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnBhdXNlZCkKICAgICAgICAgICAgIG1vZGUg
PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2
YVNjcmlwdEV4cHJlc3Npb247CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90
YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUpCisgICAgICAgICAgICBt
b2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2Rl
LkphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb247CiAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2hhc0Nv
bG9yTWFya2VycygpKQogICAgICAgICAgICAgbW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9y
VG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5NYXJrZWRUb2tlbnM7CiAgICAgICAgIGVsc2Ug
aWYgKCh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJl
c291cmNlIHx8IHRoaXMuX3NvdXJjZUNvZGUuc291cmNlTWFwcy5sZW5ndGggIT09IDApICYmIFdl
Ykluc3BlY3Rvci5tb2RpZmllcktleXMubWV0YUtleSAmJiAhV2ViSW5zcGVjdG9yLm1vZGlmaWVy
S2V5cy5hbHRLZXkgJiYgIVdlYkluc3BlY3Rvci5tb2RpZmllcktleXMuc2hpZnRLZXkpCkBAIC0x
MDEwLDYgKzEwNjEsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
CiAgICAgICAgICAgICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJv
bGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9uOgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUlu
Zm9ybWF0aW9uOgogICAgICAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5tb3Vz
ZU92ZXJEZWxheUR1cmF0aW9uID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1
cmF0aW9uVG9Nb3VzZU92ZXJUb2tlblRvTWFrZUhvdmVyZWRUb2tlbjsKICAgICAgICAgICAgIHRo
aXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW91c2VPdXRSZWxlYXNlRGVsYXlEdXJhdGlvbiA9
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5EdXJhdGlvblRvTW91c2VPdXRPZkhv
dmVyZWRUb2tlblRvUmVsZWFzZTsKICAgICAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIuY2xhc3NOYW1lRm9ySGlnaGxpZ2h0ZWRSYW5nZSA9IFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlVGV4dEVkaXRvci5Ib3ZlcmVkRXhwcmVzc2lvbkhpZ2hsaWdodFN0eWxlQ2xhc3NOYW1lOwpA
QCAtMTA3NSw2ICsxMTI3LDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3QKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIGlmICh0aGlz
LnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vZGUgPT09IFdlYkluc3BlY3Rvci5Db2RlTWlycm9y
VG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uKSB7
CisgICAgICAgICAgICB0aGlzLl90b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2
YVNjcmlwdFR5cGVJbmZvcm1hdGlvbihjYW5kaWRhdGUpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKICAgICAgICAgaWYgKHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW9k
ZSA9PT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2Rl
Lk1hcmtlZFRva2VucykgewogICAgICAgICAgICAgdmFyIG1hcmtlcnMgPSB0aGlzLm1hcmtlcnNB
dFBvc2l0aW9uKGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZS5zdGFydCk7CiAgICAgICAgICAg
ICBpZiAobWFya2Vycy5sZW5ndGggPiAwKQpAQCAtMTEzMCwyNiArMTE4Nyw2OCBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIERlYnVnZ2VyQWdlbnQu
ZXZhbHVhdGVPbkNhbGxGcmFtZS5pbnZva2Uoe2NhbGxGcmFtZUlkOiBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZS5pZCwgZXhwcmVzc2lvbjogY2FuZGlkYXRlLmV4
cHJlc3Npb24sIG9iamVjdEdyb3VwOiAicG9wb3ZlciIsIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNB
bmRNdXRlQ29uc29sZTogdHJ1ZX0sIHBvcHVsYXRlLmJpbmQodGhpcykpOwogICAgIH0sCiAKLSAg
ICBfc2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGNvbnRlbnQpCisgICAgX3Rva2VuVHJhY2tpbmdDb250
cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOiBmdW5jdGlvbihjYW5k
aWRhdGUpCiAgICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnRva2VuVHJhY2tpbmdD
b250cm9sbGVyLmNhbmRpZGF0ZSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNhbmRpZGF0ZS5l
eHByZXNzaW9uKTsKIAotICAgICAgICB2YXIgY2FuZGlkYXRlID0gdGhpcy50b2tlblRyYWNraW5n
Q29udHJvbGxlci5jYW5kaWRhdGU7Ci0gICAgICAgIGlmICghY2FuZGlkYXRlKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB2YXIgc291cmNlQ29kZSA9IHRoaXMuX3NvdXJjZUNvZGU7Cisg
ICAgICAgIHZhciBzb3VyY2VJRCA9IHNvdXJjZUNvZGUuc2NyaXB0c1swXS5pZDsKKyAgICAgICAg
dmFyIHJhbmdlID0gY2FuZGlkYXRlLmhvdmVyZWRUb2tlblJhbmdlOworICAgICAgICB2YXIgb2Zm
c2V0OwogCi0gICAgICAgIGNvbnRlbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IuUG9wb3ZlckRlYnVnZ2VyQ29udGVudFN0eWxlQ2xhc3NOYW1lKTsKKyAg
ICAgICAgaWYgKHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcCkKKyAgICAgICAgICAgIG9mZnNldCA9
IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0KHJhbmdl
LnN0YXJ0LmxpbmUsIHJhbmdlLnN0YXJ0LmNoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
b2Zmc2V0ID0gdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5fY29kZU1pcnJvci5nZXREb2Mo
KS5pbmRleEZyb21Qb3MoeyBsaW5lIDogcmFuZ2Uuc3RhcnQubGluZSwgY2ggOiByYW5nZS5zdGFy
dC5jaCB9KTsKKworICAgICAgICB2YXIgYWxsUmVxdWVzdHMgPSBbeworICAgICAgICAgICAgdHlw
ZUluZm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuVHlw
ZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9y
bWFsLAorICAgICAgICAgICAgc291cmNlSUQ6IHNvdXJjZUlELAorICAgICAgICAgICAgZGl2b3Q6
IG9mZnNldAorICAgICAgICB9XTsKKworICAgICAgICBmdW5jdGlvbiBoYW5kbGVyKGVycm9yLCBh
bGxUeXBlcykgeworICAgICAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSAhPT0gdGhpcy50b2tlblRyYWNraW5nQ29u
dHJvbGxlci5jYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICBjb25zb2xlLmFzc2VydChhbGxUeXBlcy5sZW5ndGggPT09IDEpOworICAgICAgICAgICAgaWYg
KCFhbGxUeXBlcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
dmFyIHR5cGVzID0gYWxsVHlwZXNbMF07CisgICAgICAgICAgICBpZiAodHlwZXMuZGlzcGxheVR5
cGVOYW1lKQorICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyRm9yVHlwZXModHlwZXMs
IG51bGwsICJUeXBlIGluZm9ybWF0aW9uIGZvcjogIiArIGNhbmRpZGF0ZS5leHByZXNzaW9uKTsK
KyAgICAgICAgfQorICAgICAgICBSdW50aW1lQWdlbnQuZ2V0UnVudGltZVR5cGVzRm9yVmFyaWFi
bGVzQXRPZmZzZXRzKGFsbFJlcXVlc3RzLCBoYW5kbGVyLmJpbmQodGhpcykpOworCisgICAgfSwK
IAotICAgICAgICB2YXIgcmVjdHMgPSB0aGlzLnJlY3RzRm9yUmFuZ2UoY2FuZGlkYXRlLmhvdmVy
ZWRUb2tlblJhbmdlKTsKLSAgICAgICAgdmFyIGJvdW5kcyA9IFdlYkluc3BlY3Rvci5SZWN0LnVu
aW9uT2ZSZWN0cyhyZWN0cyk7CisgICAgX3Nob3dQb3BvdmVyOiBmdW5jdGlvbihjb250ZW50LCBi
b3VuZHMpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnRva2VuVHJhY2tpbmdD
b250cm9sbGVyLmNhbmRpZGF0ZSB8fCBib3VuZHMpOworCisgICAgICAgIC8vIFRoaXMgaXMgYSBw
b3BvdmVyIGludHJvZHVjZWQgZnJvbSBhIGhvdmVyIGV2ZW50LgorICAgICAgICBpZiAoIWJvdW5k
cykgeworICAgICAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IHRoaXMudG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIuY2FuZGlkYXRlOworICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgdmFyIHJlY3RzID0gdGhpcy5yZWN0c0ZvclJhbmdl
KGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZSk7CisgICAgICAgICAgICBib3VuZHMgPSBXZWJJ
bnNwZWN0b3IuUmVjdC51bmlvbk9mUmVjdHMocmVjdHMpOworICAgICAgICAgICAgdGhpcy50b2tl
blRyYWNraW5nQ29udHJvbGxlci5oaWdobGlnaHRSYW5nZShjYW5kaWRhdGUuZXhwcmVzc2lvblJh
bmdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRlbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuUG9wb3ZlckRlYnVnZ2VyQ29udGVudFN0eWxlQ2xh
c3NOYW1lKTsKIAotICAgICAgICB0aGlzLl9wb3BvdmVyID0gdGhpcy5fcG9wb3ZlciB8fCBuZXcg
V2ViSW5zcGVjdG9yLlBvcG92ZXIodGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9wb3BvdmVyKQor
ICAgICAgICAgICAgdGhpcy5fZGlzbWlzc1BvcG92ZXIoKTsKKyAgICAgICAgdGhpcy5fcG9wb3Zl
ciA9IG5ldyBXZWJJbnNwZWN0b3IuUG9wb3Zlcih0aGlzKTsKKyAgICAgICAgLy90aGlzLl9wb3Bv
dmVyID0gdGhpcy5fcG9wb3ZlciB8fCBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXIodGhpcyk7CiAg
ICAgICAgIHRoaXMuX3BvcG92ZXIuY29udGVudCA9IGNvbnRlbnQ7CiAgICAgICAgIHRoaXMuX3Bv
cG92ZXIucHJlc2VudChib3VuZHMucGFkKDUpLCBbV2ViSW5zcGVjdG9yLlJlY3RFZGdlLk1JTl9Z
LCBXZWJJbnNwZWN0b3IuUmVjdEVkZ2UuTUFYX1ksIFdlYkluc3BlY3Rvci5SZWN0RWRnZS5NQVhf
WF0pOwogCiAgICAgICAgIHRoaXMuX3RyYWNrUG9wb3ZlckV2ZW50cygpOwotCi0gICAgICAgIHRo
aXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuaGlnaGxpZ2h0UmFuZ2UoY2FuZGlkYXRlLmV4cHJl
c3Npb25SYW5nZSk7CiAgICAgfSwKIAogICAgIF9zaG93UG9wb3ZlckZvckZ1bmN0aW9uOiBmdW5j
dGlvbihkYXRhKQpAQCAtMTI2NCw2ICsxMzYzLDI0IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXIoY29udGVudCk7CiAg
ICAgfSwKIAorICAgIF9zaG93UG9wb3ZlckZvclR5cGVzOiBmdW5jdGlvbih0eXBlcywgYm91bmRz
LCB0aXRsZSkKKyAgICB7CisgICAgICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7CisgICAgICAgIGNvbnRlbnQuY2xhc3NOYW1lID0gIm9iamVjdCBleHBhbmRh
YmxlIjsKKworICAgICAgICB2YXIgdGl0bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7CisgICAgICAgIHRpdGxlRWxlbWVudC5jbGFzc05hbWUgPSAidGl0bGUiOworICAg
ICAgICB0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aXRsZTsKKyAgICAgICAgY29udGVudC5h
cHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpOworCisgICAgICAgIHZhciBzZWN0aW9uID0gbmV3IFdl
Ykluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24odHlwZXMpOworICAgICAgICBzZWN0aW9u
LmV4cGFuZGVkID0gdHJ1ZTsKKyAgICAgICAgc2VjdGlvbi5lbGVtZW50LmNsYXNzTGlzdC5hZGQo
ImJvZHkiKTsKKyAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChzZWN0aW9uLmVsZW1lbnQpOwor
CisgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyKGNvbnRlbnQsIGJvdW5kcyk7CisgICAgfSwKKwog
ICAgIHdpbGxEaXNtaXNzUG9wb3ZlcjogZnVuY3Rpb24ocG9wb3ZlcikKICAgICB7CiAgICAgICAg
IHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucmVtb3ZlSGlnaGxpZ2h0ZWRSYW5nZSgpOwpA
QCAtMTM4MCw2ICsxNDk3LDUwIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3QKICAgICAgICAgdGhpcy5faWdub3JlQ29udGVudERpZENoYW5nZS0tOwogCiAgICAgICAg
IGRlbGV0ZSB0aGlzLl9lZGl0aW5nQ29udHJvbGxlcjsKKyAgICB9LAorCisgICAgX3ByZXR0eVBy
aW50OiBmdW5jdGlvbihwcmV0dHkpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvci5wcm90b3R5cGUuX3ByZXR0eVByaW50LmNhbGwodGhpcywgcHJldHR5KTsKKworICAgICAg
ICBpZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRv
ci5pc0FjdGl2ZSkKKyAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZXNldCgp
OworICAgIH0sCisKKyAgICBfbWFrZVR5cGVUb2tlbkFubm90YXRvcjogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VDb2RlLnNjcmlwdHMubGVuZ3RoKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciA9IG5ldyBX
ZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yKHRoaXMsIHRoaXMuX3NvdXJjZUNvZGUuc2Ny
aXB0c1swXSk7CisgICAgICAgIGlmIChXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5m
b3JtYXRpb25TZXR0aW5nLnZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5v
dGF0b3IucmVzZXQoKTsKKyAgICAgICAgICAgIHRoaXMuX3NldHVwU2Nyb2xsRXZlbnRzRm9yVHlw
ZVRva2VuQW5ub3RhdG9yKCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3NldHVwU2Nyb2xs
RXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBp
ZiAodGhpcy5faXNUcmFja2luZ1Njcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFubm90YXRvcikKKyAg
ICAgICAgICAgIHJldHVybjsgCisKKyAgICAgICAgdGhpcy5faXNUcmFja2luZ1Njcm9sbEV2ZW50
c0ZvclR5cGVUb2tlbkFubm90YXRvciA9IHRydWU7CisKKyAgICAgICAgLy8gUGF1c2UgdXBkYXRp
bmcgdHlwZSB0b2tlbnMgd2hpbGUgc2Nyb2xsaW5nIHRvIHByZXZlbnQgZnJhbWUgbG9zcy4KKyAg
ICAgICAgdmFyIHR5cGVUb2tlbkFubm90YXRvciA9IHRoaXMuX3R5cGVUb2tlbkFubm90YXRvcjsK
KyAgICAgICAgdmFyIHRpbWVvdXRJZGVudGlmaWVyID0gbnVsbDsKKyAgICAgICAgLy8gRklYTUU6
IERvIEkgbmVlZCB0byBjYWxsIGNvZGVNb3Jyb3Iub2ZmKC4pLCBvciB3aWxsIGNvZGVNaXJyb3Ig
YmVpbmcgZGVzdHJveWVkIGhhbmRsZSBhbGwgcG90ZW50aWFsIG1lbW9yeSBsZWFrcy4KKyAgICAg
ICAgdGhpcy5fY29kZU1pcnJvci5vbigic2Nyb2xsIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICBpZiAodGltZW91dElkZW50aWZpZXIpCisgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRp
bWVvdXRJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0eXBl
VG9rZW5Bbm5vdGF0b3IucGF1c2UoKTsKKworICAgICAgICAgICAgdGltZW91dElkZW50aWZpZXIg
PSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRpbWVvdXRJZGVudGlm
aWVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1lKCk7
CisgICAgICAgICAgICB9LCAxMDApOworICAgICAgICB9KTsKICAgICB9CiB9OwogCkluZGV4OiBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250
ZW50Vmlldy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qcwkocmV2aXNpb24gMTcyMzQ4KQor
KysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dFJlc291cmNl
Q29udGVudFZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDE0IEBAIFdlYkluc3Bl
Y3Rvci5UZXh0UmVzb3VyY2VDb250ZW50VmlldyA9IGYKICAgICB0aGlzLl9wcmV0dHlQcmludEJ1
dHRvbk5hdmlnYXRpb25JdGVtID0gbmV3IFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmln
YXRpb25JdGVtKCJwcmV0dHktcHJpbnQiLCB0b29sVGlwLCBhY3RpdmF0ZWRUb29sVGlwLCBjdXJs
ZXlCcmFjZXNJbWFnZS5zcmMsIGN1cmxleUJyYWNlc0ltYWdlLndpZHRoLCBjdXJsZXlCcmFjZXNJ
bWFnZS5oZWlnaHQpOwogICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0u
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQu
Q2xpY2tlZCwgdGhpcy5fdG9nZ2xlUHJldHR5UHJpbnQsIHRoaXMpOwogICAgIHRoaXMuX3ByZXR0
eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IGZhbHNlOyAvLyBFbmFibGVkIHdo
ZW4gdGhlIHRleHQgZWRpdG9yIGlzIHBvcHVsYXRlZCB3aXRoIGNvbnRlbnQuCisKKyAgICB2YXIg
dG9vbFRpcFR5cGVzID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IHR5cGUgaW5mb3JtYXRp
b24iKTsKKyAgICB2YXIgYWN0aXZhdGVkVG9vbFRpcFR5cGVzID0gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJIaWRlIHR5cGUgaW5mb3JtYXRpb24iKTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25O
YXZpZ2F0aW9uSXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9u
SXRlbSgic2hvdy10eXBlczIiLCB0b29sVGlwVHlwZXMsIGFjdGl2YXRlZFRvb2xUaXBUeXBlcywg
IkltYWdlcy9OYXZpZ2F0aW9uSXRlbVRhdS5zdmciLCAxNiwgMTYpOworICAgIHRoaXMuX3Nob3dU
eXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJ1
dHRvbk5hdmlnYXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIHRoaXMuX3RvZ2dsZVR5cGVBbm5vdGF0
aW9ucywgdGhpcyk7CisgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5h
YmxlZCA9IGZhbHNlOworCisgICAgV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9y
bWF0aW9uU2V0dGluZy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5TZXR0aW5nLkV2ZW50
LkNoYW5nZWQsIHRoaXMuX3Nob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZ0NoYW5n
ZWQsIHRoaXMpOwogfTsKIAogV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LlN0
eWxlQ2xhc3NOYW1lID0gInRleHQiOwpAQCAtNjIsNyArNzAsNyBAQCBXZWJJbnNwZWN0b3IuVGV4
dFJlc291cmNlQ29udGVudFZpZXcucHJvCiAKICAgICBnZXQgbmF2aWdhdGlvbkl0ZW1zKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBbdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRl
bV07CisgICAgICAgIHJldHVybiBbdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRl
bSwgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW1dOwogICAgIH0sCiAKICAgICBn
ZXQgbWFuYWdlc093bklzc3VlcygpCkBAIC0yMDAsNiArMjA4LDggQEAgV2ViSW5zcGVjdG9yLlRl
eHRSZXNvdXJjZUNvbnRlbnRWaWV3LnBybwogICAgIF9jb250ZW50RGlkUG9wdWxhdGU6IGZ1bmN0
aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0
aW9uSXRlbS5lbmFibGVkID0gdGhpcy5fdGV4dEVkaXRvci5jYW5CZUZvcm1hdHRlZCgpOworICAg
ICAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gISF0aGlz
Ll90ZXh0RWRpdG9yLl90eXBlVG9rZW5Bbm5vdGF0b3I7CisgICAgICAgIHRoaXMuX3Nob3dUeXBl
c0J1dHRvbk5hdmlnYXRpb25JdGVtLmFjdGl2YXRlZCA9IFdlYkluc3BlY3Rvci5zaG93SmF2YVNj
cmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWU7CiAgICAgfSwKIAogICAgIF90b2dnbGVQ
cmV0dHlQcmludDogZnVuY3Rpb24oZXZlbnQpCkBAIC0yMDgsNiArMjE4LDE2IEBAIFdlYkluc3Bl
Y3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm8KICAgICAgICAgdGhpcy5fdGV4dEVkaXRv
ci5mb3JtYXR0ZWQgPSBhY3RpdmF0ZWQ7CiAgICAgfSwKIAorICAgIF90b2dnbGVUeXBlQW5ub3Rh
dGlvbnM6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci50
b2dnbGVUeXBlQW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAgX3Nob3dKYXZhU2NyaXB0VHlw
ZUluZm9ybWF0aW9uU2V0dGluZ0NoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAg
ICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gV2ViSW5z
cGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZTsKKyAgICB9
LAorCiAgICAgX3RleHRFZGl0b3JGb3JtYXR0aW5nRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkK
ICAgICB7CiAgICAgICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0
aXZhdGVkID0gdGhpcy5fdGV4dEVkaXRvci5mb3JtYXR0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlw
ZVByb3BlcnRpZXNTZWN0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlR5cGVQ
cm9wZXJ0aWVzU2VjdGlvbiA9IGZ1bmN0aW9uKHR5cGVzLCB0aXRsZSwgc3VidGl0bGUpCit7Cisg
ICAgdGhpcy5lbXB0eVBsYWNlaG9sZGVyID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJObyBQcm9w
ZXJ0aWVzIik7CisgICAgdGhpcy50eXBlcyA9IHR5cGVzOworCisgICAgV2ViSW5zcGVjdG9yLlBy
b3BlcnRpZXNTZWN0aW9uLmNhbGwodGhpcywgdGl0bGUsIHN1YnRpdGxlKTsKK307CisKK1dlYklu
c3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0geworICAgIGNvbnN0cnVj
dG9yOiBXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnRpZXNTZWN0aW9uLAorICAgIF9fcHJvdG9fXzog
V2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSwKKworICAgIG9ucG9wdWxh
dGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5l
LnJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICAgICAgdmFyIHByaW1pdGl2ZVR5cGVOYW1lcyA9IHRo
aXMudHlwZXMuZ2xvYmFsUHJpbWl0aXZlVHlwZU5hbWVzID8gdGhpcy50eXBlcy5nbG9iYWxQcmlt
aXRpdmVUeXBlTmFtZXMgOiB0aGlzLnR5cGVzLmxvY2FsUHJpbWl0aXZlVHlwZU5hbWVzOworICAg
ICAgICB2YXIgc3RydWN0dXJlcyA9IHRoaXMudHlwZXMuZ2xvYmFsU3RydWN0dXJlcyA/IHRoaXMu
dHlwZXMuZ2xvYmFsU3RydWN0dXJlcyA6IHRoaXMudHlwZXMubG9jYWxTdHJ1Y3R1cmVzOworICAg
ICAgICB2YXIgcHJvcGVydGllcyA9IFtdOworICAgICAgICBmb3IgKHZhciBzdHJ1Y3Qgb2Ygc3Ry
dWN0dXJlcykgeworICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHsKKyAgICAgICAgICAgICAg
ICBuYW1lOiBzdHJ1Y3QuY29uc3RydWN0b3JOYW1lLAorICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZTogc3RydWN0CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBw
cmltaXRpdmVOYW1lIG9mIHByaW1pdGl2ZVR5cGVOYW1lcykgeworICAgICAgICAgICAgcHJvcGVy
dGllcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBuYW1lOiBwcmltaXRpdmVOYW1lLAorICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZTogbnVsbAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKwor
ICAgICAgICBwcm9wZXJ0aWVzLnNvcnQoV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlv
bi5Qcm9wZXJ0eUNvbXBhcmF0b3IpOworICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBvZiBwcm9w
ZXJ0aWVzKQorICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hp
bGQobmV3IFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudChwcm9wZXJ0eSkpOwor
CisgICAgICAgIGlmICghdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuY2hpbGRyZW4ubGVuZ3Ro
KSB7CisgICAgICAgICAgICB2YXIgdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKKyAgICAgICAgICAgIHRpdGxlLmNsYXNzTmFtZSA9ICJpbmZvIjsKKyAgICAgICAgICAgIHRp
dGxlLnRleHRDb250ZW50ID0gdGhpcy5lbXB0eVBsYWNlaG9sZGVyOworICAgICAgICAgICAgdmFy
IGluZm9FbGVtZW50ID0gbmV3IFRyZWVFbGVtZW50KHRpdGxlLCBudWxsLCBmYWxzZSk7CisgICAg
ICAgICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5hcHBlbmRDaGlsZChpbmZvRWxlbWVu
dCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhX
ZWJJbnNwZWN0b3IuU2VjdGlvbi5FdmVudC5WaXNpYmxlQ29udGVudERpZENoYW5nZSk7CisKKyAg
ICAgICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09PSAxKQorICAgICAgICAgICAgdGhpcy5wcm9w
ZXJ0aWVzVHJlZU91dGxpbmUuY2hpbGRyZW5bMF0uZXhwYW5kUmVjdXJzaXZlbHkoKTsKKyAgICB9
Cit9OworCisKK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24uUHJvcGVydHlDb21w
YXJhdG9yID0gZnVuY3Rpb24ocHJvcGVydHlBLCBwcm9wZXJ0eUIpCit7CisgICAgdmFyIGEgPSBw
cm9wZXJ0eUEubmFtZTsKKyAgICB2YXIgYiA9IHByb3BlcnR5Qi5uYW1lOworICAgIGlmIChhLmlu
ZGV4T2YoIl9fcHJvdG9fXyIpICE9PSAtMSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgaWYgKGIu
aW5kZXhPZigiX19wcm90b19fIikgIT09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYg
KGEgPT09IGIpCisgICAgICAgIHJldHVybiAxOworCisgICAgLy8gaWYgdXNlZCBlbHNld2hlcmUg
bWFrZSBzdXJlIHRvCisgICAgLy8gIC0gY29udmVydCBhIGFuZCBiIHRvIHN0cmluZ3MgKG5vdCBu
ZWVkZWQgaGVyZSwgcHJvcGVydGllcyBhcmUgYWxsIHN0cmluZ3MpCisKKyAgICB2YXIgZGlmZiA9
IDA7CisgICAgdmFyIGNodW5rID0gL15cZCt8XlxEKy87CisgICAgdmFyIGNodW5rYSwgY2h1bmti
LCBhbnVtLCBibnVtOworICAgIHdoaWxlIChkaWZmID09PSAwKSB7CisgICAgICAgIGlmICghYSAm
JiBiKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoIWIgJiYgYSkKKyAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICBjaHVua2EgPSBhLm1hdGNoKGNodW5rKVswXTsKKyAg
ICAgICAgY2h1bmtiID0gYi5tYXRjaChjaHVuaylbMF07CisgICAgICAgIGFudW0gPSAhaXNOYU4o
Y2h1bmthKTsKKyAgICAgICAgYm51bSA9ICFpc05hTihjaHVua2IpOworICAgICAgICBpZiAoYW51
bSAmJiAhYm51bSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGJudW0gJiYg
IWFudW0pCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYgKGFudW0gJiYgYm51bSkg
eworICAgICAgICAgICAgZGlmZiA9IGNodW5rYSAtIGNodW5rYjsKKyAgICAgICAgICAgIGlmIChk
aWZmID09PSAwICYmIGNodW5rYS5sZW5ndGggIT09IGNodW5rYi5sZW5ndGgpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIStjaHVua2EgJiYgIStjaHVua2IpIC8vIGNodW5rcyBhcmUgc3RyaW5ncyBv
ZiBhbGwgMHMgKHNwZWNpYWwgY2FzZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5r
YS5sZW5ndGggLSBjaHVua2IubGVuZ3RoOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNodW5rYi5sZW5ndGggLSBjaHVua2EubGVuZ3RoOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGNodW5rYSAhPT0gY2h1bmtiKQorICAgICAgICAg
ICAgcmV0dXJuIChjaHVua2EgPCBjaHVua2IpID8gLTEgOiAxOworICAgICAgICBhID0gYS5zdWJz
dHJpbmcoY2h1bmthLmxlbmd0aCk7CisgICAgICAgIGIgPSBiLnN1YnN0cmluZyhjaHVua2IubGVu
Z3RoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlmZjsKK307CisKK1dlYkluc3BlY3Rvci5UeXBl
UHJvcGVydHlUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHByb3BlcnR5KQoreworICAgIHRoaXMucHJv
cGVydHkgPSBwcm9wZXJ0eTsKKworICAgIHRoaXMubmFtZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7CisgICAgdGhpcy5uYW1lRWxlbWVudC5jbGFzc05hbWUgPSAibmFt
ZSI7CisgICAgdGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMucHJvcGVydHkubmFt
ZTsKKworICAgIFRyZWVFbGVtZW50LmNhbGwodGhpcywgdGhpcy5uYW1lRWxlbWVudCwgbnVsbCwg
ZmFsc2UpOworCisgICAgdGhpcy50b2dnbGVPbkNsaWNrID0gdHJ1ZTsKKyAgICB0aGlzLmhhc0No
aWxkcmVuID0gISF0aGlzLnByb3BlcnR5LnN0cnVjdHVyZTsgCit9OworCitXZWJJbnNwZWN0b3Iu
VHlwZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBX
ZWJJbnNwZWN0b3IuVHlwZVByb3BlcnR5VHJlZUVsZW1lbnQsCisgICAgX19wcm90b19fOiBUcmVl
RWxlbWVudC5wcm90b3R5cGUsCisKKyAgICBvbnBvcHVsYXRlOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICAgICAgdmFyIHByb3BlcnRpZXMg
PSBbXTsKKyAgICAgICAgdmFyIGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnByb3Bl
cnR5LnN0cnVjdHVyZS5maWVsZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBuZXdQ
cm9wID0ge307CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gobmV3UHJvcCk7CisgICAgICAg
ICAgICBuZXdQcm9wLm5hbWUgPSB0aGlzLnByb3BlcnR5LnN0cnVjdHVyZS5maWVsZHNbaV07Cisg
ICAgICAgICAgICBuZXdQcm9wLnN0cnVjdHVyZSA9IG51bGw7CisgICAgICAgIH0KKworICAgICAg
ICBwcm9wZXJ0aWVzLnNvcnQoV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5Qcm9w
ZXJ0eUNvbXBhcmF0b3IpOworCisgICAgICAgIGlmICh0aGlzLnByb3BlcnR5LnN0cnVjdHVyZS5w
cm90b3R5cGVTdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIHZhciBjdG9yUHJvcCA9IHt9OworICAg
ICAgICAgICAgcHJvcGVydGllcy5wdXNoKGN0b3JQcm9wKTsKKyAgICAgICAgICAgIGN0b3JQcm9w
Lm5hbWUgPSB0aGlzLnByb3BlcnR5LnN0cnVjdHVyZS5wcm90b3R5cGVTdHJ1Y3R1cmUuY29uc3Ry
dWN0b3JOYW1lICsgIiAoUHJvdG90eXBlKSI7CisgICAgICAgICAgICBjdG9yUHJvcC5zdHJ1Y3R1
cmUgPSB0aGlzLnByb3BlcnR5LnN0cnVjdHVyZS5wcm90b3R5cGVTdHJ1Y3R1cmU7CisgICAgICAg
IH0KKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykKKyAg
ICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlU
cmVlRWxlbWVudChwcm9wZXJ0aWVzW2ldKSk7CisgICAgfQorfTsKKwpJbmRleDogU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5jc3MKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRv
a2VuVmlldy5jc3MJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmNzcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLnR5cGUtdG9rZW4geworICAgIGRpc3BsYXk6IGlubGluZTsg
CisgICAgYm9yZGVyLXJhZGl1czogMTBweDsKKyAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50
OworICAgIHBhZGRpbmctbGVmdDogOHB4OworICAgIHBhZGRpbmctcmlnaHQ6IDhweDsKKyAgICBw
YWRkaW5nLXRvcDogMXB4OworICAgIGNvbG9yOiB3aGl0ZTsKKyAgICBmb250LXNpemU6IDkyJTsK
KyAgICBvcGFjaXR5OiAwLjg1OworfQpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmpzCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRv
a2VuVmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcgPSBmdW5jdGlvbih0b2tlbkFubm90YXRvciwg
c2hvdWxkSGF2ZVJpZ2h0TWFyZ2luLCBzaG91bGRIYXZlTGVmdE1hcmdpbiwgcG9wb3ZlclRpdGxl
KSAKK3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisKKyAgICB2YXIgc3Bh
biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBzcGFuLmNsYXNzTmFtZSA9
ICJ0eXBlLXRva2VuIjsKKyAgICBzcGFuLnN0eWxlLm1hcmdpblJpZ2h0ID0gKHNob3VsZEhhdmVS
aWdodE1hcmdpbiA/ICI1cHgiIDogIjBweCIpOworICAgIHNwYW4uc3R5bGUubWFyZ2luTGVmdCA9
IChzaG91bGRIYXZlTGVmdE1hcmdpbiA/ICI1cHgiIDogIjBweCIpOworCisgICAgdGhpcy5lbGVt
ZW50ID0gc3BhbjsKKyAgICB0aGlzLl90b2tlbkFubm90YXRvciA9IHRva2VuQW5ub3RhdG9yOwor
ICAgIHRoaXMuX3R5cGVzID0gbnVsbDsKKyAgICB0aGlzLl9wb3BvdmVyVGl0bGUgPSBwb3BvdmVy
VGl0bGU7CisKKyAgICB0aGlzLl9zZXRVcE1vdXNlb3ZlckhhbmRsZXJzKCk7Cit9OworCitXZWJJ
bnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMgPSB7CisgICAgcHVycGxlIDogIiNjYzNiYmYi
LAorICAgIGJsdWU6ICIjM2I3MGUyIiwKKyAgICByZWQ6ICIjZGYzNTJlIiwKKyAgICBncmVlbjog
IiM3NmFlMWQiLAorICAgIGdyYXk6ICIjN2U3ZTdlIiwKKyAgICBvcmFuZ2U6ICIjZWQ4NDAwIgor
fTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JGb3JUeXBlID0geworICAgICJT
dHJpbmciOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMucmVkLAorICAgICJGdW5j
dGlvbiI6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9ycy5wdXJwbGUsIAorICAgICJO
dW1iZXIiOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMuYmx1ZSwKKyAgICAiSW50
ZWdlciI6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9ycy5ibHVlLAorICAgICJVbmRl
ZmluZWQiOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMuZ3JheSwKKyAgICAiTnVs
bCI6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9ycy5ncmF5LAorICAgICIoPykiOiBX
ZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMuZ3JheSwKKyAgICAiQm9vbGVhbiI6IFdl
Ykluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9ycy5wdXJwbGUsCisgICAgIihtYW55KSI6IFdl
Ykluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9ycy5vcmFuZ2UKK307CisKK1dlYkluc3BlY3Rv
ci5UeXBlVG9rZW5WaWV3LnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVj
dG9yLlR5cGVUb2tlblZpZXcsCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnBy
b3RvdHlwZSwKKworICAgIC8vIFB1YmxpYworCisgICAgdXBkYXRlOiBmdW5jdGlvbih0eXBlcykK
KyAgICB7CisgICAgICAgIHZhciB0aXRsZSA9IHR5cGVzLmRpc3BsYXlUeXBlTmFtZTsKKyAgICAg
ICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gdGl0bGU7CisgICAgICAgIHRoaXMuX3R5cGVz
ID0gdHlwZXM7CisgICAgICAgIHZhciBoYXNoU3RyaW5nID0gdGl0bGVbdGl0bGUubGVuZ3RoIC0g
MV0gPT09ICI/IiA/IHRpdGxlLnNsaWNlKDAsIHRpdGxlLmxlbmd0aCAtIDEpIDogdGl0bGU7Cisg
ICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBXZWJJbnNwZWN0b3Iu
VHlwZVRva2VuVmlldy5Db2xvckZvclR5cGVbaGFzaFN0cmluZ10gfHwgV2ViSW5zcGVjdG9yLlR5
cGVUb2tlblZpZXcuQ29sb3JzLmdyZWVuOworICAgIH0sCisgICAgCisgICAgLy8gUHJpdmF0ZQor
ICAgIAorICAgIF9zZXRVcE1vdXNlb3ZlckhhbmRsZXJzOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciB0aW1lb3V0SUQgPSBudWxsOworCisg
ICAgICAgIHRoaXMuZWxlbWVudC5vbm1vdXNlb3ZlciA9IGZ1bmN0aW9uKCkgCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZ1bmN0aW9uIHNob3dQb3BvdmVyQWZ0ZXJEZWxheSgpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdGltZW91dElEID0gbnVsbDsKKworICAgICAgICAgICAgICAg
IHZhciBkb21SZWN0ID0gc2VsZi5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAg
ICAgICAgICAgICAgIHZhciBib3VuZHMgPSBuZXcgV2ViSW5zcGVjdG9yLlJlY3QoZG9tUmVjdC5s
ZWZ0LCBkb21SZWN0LnRvcCwgZG9tUmVjdC53aWR0aCwgZG9tUmVjdC5oZWlnaHQpOworICAgICAg
ICAgICAgICAgIHNlbGYuX3Rva2VuQW5ub3RhdG9yLl9zb3VyY2VDb2RlVGV4dEVkaXRvci5fc2hv
d1BvcG92ZXJGb3JUeXBlcyhzZWxmLl90eXBlcywgYm91bmRzLCBzZWxmLl9wb3BvdmVyVGl0bGUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL2lmICghV2ViSW5zcGVjdG9yLlR5cGVU
b2tlblZpZXcuU2ltcGxlVHlwZVtzZWxmLl90eXBlcy5kaXNwbGF5VHlwZU5hbWVdKQorICAgICAg
ICAgICAgaWYgKHNlbGYuX3Nob3VsZFNob3dQb3BvdmVyKCkpCisgICAgICAgICAgICAgICAgdGlt
ZW91dElEID0gc2V0VGltZW91dChzaG93UG9wb3ZlckFmdGVyRGVsYXksIDM1MCk7CisgICAgICAg
IH0KKworICAgICAgICB0aGlzLmVsZW1lbnQub25tb3VzZW91dCA9IGZ1bmN0aW9uKCkgCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh0aW1lb3V0SUQgIT09IG51bGwpCisgICAgICAgICAgICAg
ICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3No
b3VsZFNob3dQb3BvdmVyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoKHRoaXMuX3R5
cGVzLmdsb2JhbFByaW1pdGl2ZVR5cGVOYW1lcyAmJiB0aGlzLl90eXBlcy5nbG9iYWxQcmltaXRp
dmVUeXBlTmFtZXMubGVuZ3RoID4gMSkgfHwgKHRoaXMuX3R5cGVzLmxvY2FsUHJpbWl0aXZlVHlw
ZU5hbWVzICYmIHRoaXMuX3R5cGVzLmxvY2FsUHJpbWl0aXZlVHlwZU5hbWVzLmxlbmd0aCA+IDEp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKCh0aGlzLl90eXBlcy5n
bG9iYWxTdHJ1Y3R1cmVzICYmIHRoaXMuX3R5cGVzLmdsb2JhbFN0cnVjdHVyZXMubGVuZ3RoKSB8
fCAodGhpcy5fdHlwZXMubG9jYWxTdHJ1Y3R1cmVzICYmIHRoaXMuX3R5cGVzLmxvY2FsU3RydWN0
dXJlcy5sZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK307Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236493</attachid>
            <date>2014-08-12 19:45:49 -0700</date>
            <delta_ts>2014-08-16 12:01:53 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>46740</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJ
KHJldmlzaW9uIDE3MjQwMykKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01haW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSw3IEBACiAgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9UaW1lbGluZVZpZXcuY3NzIj4KICAgICA8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1Rvb2xiYXIuY3NzIj4KICAgICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1RyZWVFbGVtZW50U3RhdHVzQnV0dG9uLmNzcyI+
CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9UeXBlVG9rZW5WaWV3LmNz
cyI+CiAKICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IkNvbnRyb2xsZXJzL0NvZGVN
aXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iQ29udHJvbGxlcnMvQ29kZU1pcnJvckRyYWdUb0FkanVzdE51bWJlckNvbnRyb2xs
ZXIuY3NzIj4KQEAgLTQ1Nyw2ICs0NTksOCBAQAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Ub29s
YmFyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHJlZUVsZW1lbnRTdGF0
dXNCdXR0b24uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UcmVlT3V0bGlu
ZURhdGFHcmlkU3luY2hyb25pemVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmll
d3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
Vmlld3MvVHlwZVRva2VuVmlldy5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQ29u
dHJvbGxlcnMvQ29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyLmpzIj48L3NjcmlwdD4KIApAQCAt
NDg4LDYgKzQ5Miw3IEBACiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1NvdXJjZU1hcE1h
bmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9TdG9yYWdl
TWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1RpbWVs
aW5lTWFuYWdlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1R5
cGVUb2tlbkFubm90YXRvci5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQmFzZS9N
YWluLmpzIj48L3NjcmlwdD4KIApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQmFzZS9NYWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwkocmV2aXNpb24gMTcyNDAzKQorKysgU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjAsNiArMTYwLDEwIEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAKICAg
ICB0aGlzLnNob3dTaGFkb3dET01TZXR0aW5nID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5nKCJz
aG93LXNoYWRvdy1kb20iLCBmYWxzZSk7CiAgICAgdGhpcy5zaG93UmVwbGF5SW50ZXJmYWNlU2V0
dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygic2hvdy13ZWItcmVwbGF5IiwgZmFsc2Up
OworICAgIAorICAgIHRoaXMuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nID0g
bmV3IFdlYkluc3BlY3Rvci5TZXR0aW5nKCJzaG93LWphdmFzY3JpcHQtdHlwZS1pbmZvcm1hdGlv
biIsIGZhbHNlKTsKKyAgICBpZiAodGhpcy5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNl
dHRpbmcudmFsdWUpCisgICAgICAgIFJ1bnRpbWVBZ2VudC5lbmFibGVIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsaW5nKCk7CiAKICAgICB0aGlzLm1vdXNlQ29vcmRzID0gewogICAgICAgICB4OiAwLApJ
bmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29k
ZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRy
YWNraW5nQ29udHJvbGxlci5qcwkocmV2aXNpb24gMTcyNDAzKQorKysgU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdD
b250cm9sbGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw4IEBAIFdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnQKICAgICBOb25lOiAibm9uZSIsCiAgICAgTm9u
U3ltYm9sVG9rZW5zOiAibm9uLXN5bWJvbC10b2tlbnMiLAogICAgIEphdmFTY3JpcHRFeHByZXNz
aW9uOiAiamF2YXNjcmlwdC1leHByZXNzaW9uIiwKLSAgICBNYXJrZWRUb2tlbnM6ICJtYXJrZWQt
dG9rZW5zIgorICAgIE1hcmtlZFRva2VuczogIm1hcmtlZC10b2tlbnMiLAorICAgIEphdmFTY3Jp
cHRUeXBlSW5mb3JtYXRpb246ICJqYXZhc2NyaXB0LXR5cGUtaW5mb3JtYXRpb24iCiB9CiAKIFdl
Ykluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0g
ewpAQCAtMzg5LDYgKzM5MCw3IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2lu
Z0NvbnQKICAgICAgICAgICAgIHRoaXMuX2NhbmRpZGF0ZSA9IHRoaXMuX3Byb2Nlc3NOb25TeW1i
b2xUb2tlbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNz
aW9uOgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOgogICAgICAgICAgICAgdGhp
cy5fY2FuZGlkYXRlID0gdGhpcy5fcHJvY2Vzc0phdmFTY3JpcHRFeHByZXNzaW9uKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2Vu
VHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTWFya2VkVG9rZW5zOgpJbmRleDogU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyU291cmNlTWFwLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5qcwkocmV2aXNpb24gMTcyNDAzKQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyU291cmNl
TWFwLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNSArNDUsMjcgQEAgV2ViSW5zcGVjdG9yLkZv
cm1hdHRlclNvdXJjZU1hcC5wcm90b3R5cAogICAgIG9yaWdpbmFsVG9Gb3JtYXR0ZWQ6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CiAgICAgICAgIHZhciBvcmlnaW5h
bFBvc2l0aW9uID0gdGhpcy5fbG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVu
ZGluZ3MsIGxpbmVOdW1iZXIgfHwgMCwgY29sdW1uTnVtYmVyIHx8IDApOworICAgICAgICByZXR1
cm4gdGhpcy5vcmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQob3JpZ2luYWxQb3NpdGlvbik7Cisg
ICAgfSwKKworICAgIG9yaWdpbmFsUG9zaXRpb25Ub0Zvcm1hdHRlZDogZnVuY3Rpb24ob3JpZ2lu
YWxQb3NpdGlvbikKKyAgICB7CiAgICAgICAgIHZhciBmb3JtYXR0ZWRQb3NpdGlvbiA9IHRoaXMu
X2NvbnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLm9yaWdpbmFsLCB0aGlzLl9tYXBwaW5nLmZv
cm1hdHRlZCwgb3JpZ2luYWxQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlv
blRvTG9jYXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGZvcm1hdHRlZFBvc2l0aW9u
KTsKICAgICB9LAogCisKICAgICBmb3JtYXR0ZWRUb09yaWdpbmFsOiBmdW5jdGlvbihsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIpCiAgICAgeworICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9
IHRoaXMuZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
OworICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0aW9uKHRoaXMuX29yaWdpbmFs
TGluZUVuZGluZ3MsIG9yaWdpbmFsUG9zaXRpb24pOworICAgIH0sCisKKyAgICBmb3JtYXR0ZWRU
b09yaWdpbmFsT2Zmc2V0OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAg
ewogICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9sb2NhdGlvblRvUG9zaXRp
b24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGxpbmVOdW1iZXIgfHwgMCwgY29sdW1uTnVt
YmVyIHx8IDApOwogICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMuX2NvbnZlcnRQ
b3NpdGlvbih0aGlzLl9tYXBwaW5nLmZvcm1hdHRlZCwgdGhpcy5fbWFwcGluZy5vcmlnaW5hbCwg
Zm9ybWF0dGVkUG9zaXRpb24pOwotICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0
aW9uKHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MsIG9yaWdpbmFsUG9zaXRpb24pOworICAgICAg
ICByZXR1cm4gb3JpZ2luYWxQb3NpdGlvbjsKICAgICB9LAogCiAgICAgLy8gUHJpdmF0ZQpJbmRl
eDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRv
a2VuQW5ub3RhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVU
b2tlbkFubm90YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IgPSBmdW5jdGlvbihzb3VyY2VD
b2RlVGV4dEVkaXRvciwgc2NyaXB0KSAKK3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwo
dGhpcyk7CisKKyAgICBjb25zb2xlLmFzc2VydChzb3VyY2VDb2RlVGV4dEVkaXRvciAmJiBzb3Vy
Y2VDb2RlVGV4dEVkaXRvciBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvciAmJiBzY3JpcHQpOworICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlwdDsKKyAgICB0aGlzLl9z
b3VyY2VDb2RlVGV4dEVkaXRvciA9IHNvdXJjZUNvZGVUZXh0RWRpdG9yOworICAgIHRoaXMuX3R5
cGVUb2tlbk5vZGVzID0gW107CisgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtzID0gW107Cisg
ICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgIHRoaXMuX2lzQWN0aXZlID0g
ZmFsc2U7Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZSA9
IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvciwKKyAg
ICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVi
bGljCisKKyAgICBnZXQgaXNBY3RpdmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lz
QWN0aXZlOworICAgIH0sCisKKyAgICBnZXQgc291cmNlQ29kZVRleHRFZGl0b3IoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yOworICAgIH0sCisKKyAg
ICBwYXVzZTogZnVuY3Rpb24oKSAKKyAgICB7CisgICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElm
TmVlZGVkKCk7CisgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7CisgICAgfSwKKworICAg
IHJlc3VtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZO
ZWVkZWQoKTsKKyAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOworICAgICAgICB0aGlzLl9p
bnNlcnRBbm5vdGF0aW9ucygpOworICAgIH0sCisKKyAgICByZXNldDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsKKyAgICAgICAgdGhpcy5f
aXNBY3RpdmUgPSB0cnVlOworICAgICAgICB0aGlzLl9jbGVhclR5cGVUb2tlbnMoKTsKKyAgICAg
ICAgdGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAgdG9nZ2xlVHlwZUFu
bm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5faXNBY3RpdmUp
IHsKKyAgICAgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7CisgICAgICAgICAgICB0aGlz
Ll9jbGVhclR5cGVUb2tlbnMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMu
X2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZTsKKyAgICB9LAorCisgICAgLy8gUHJpdmF0
ZQorCisgICAgX2luc2VydEFubm90YXRpb25zOiBmdW5jdGlvbigpIAorICAgIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9pc0FjdGl2ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIg
c2NyaXB0U3ludGF4VHJlZSA9IHRoaXMuX3NjcmlwdC5fc2NyaXB0U3ludGF4VHJlZTsKKyAgICAg
ICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc2NyaXB0LmlkOworICAgICAgICB2YXIgc2VsZiA9IHRo
aXM7CisKKyAgICAgICAgaWYgKCFzY3JpcHRTeW50YXhUcmVlKSB7CisgICAgICAgICAgICB0aGlz
Ll9zY3JpcHQucmVxdWVzdFNjcmlwdFN5bnRheFRyZWUoZnVuY3Rpb24oc3ludGF4VHJlZSkgewor
ICAgICAgICAgICAgICAgIC8vIEFmdGVyIHJlcXVlc3RpbmcgdGhlIHRyZWUsIHdlIHN0aWxsIG1p
Z2h0IGdldCBhIG51bGwgdHJlZSBmcm9tIGEgcGFyc2UgZXJyb3IuIERvbid0IHByb2NlZWQgaWYg
bnVsbC4KKyAgICAgICAgICAgICAgICBpZiAoc3ludGF4VHJlZSkKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgY29kZU1pcnJvciA9IHRoaXMu
X3NvdXJjZUNvZGVUZXh0RWRpdG9yLl9jb2RlTWlycm9yOworICAgICAgICB2YXIgdmlzaWJsZVJh
bmdlID0gY29kZU1pcnJvci5nZXRWaWV3cG9ydCgpOworICAgICAgICB2YXIgc3RhcnRPZmZzZXQg
PSBudWxsOworICAgICAgICB2YXIgZW5kT2Zmc2V0ID0gbnVsbDsKKyAgICAgICAgdmFyIHNvdXJj
ZU1hcCA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLl9mb3JtYXR0ZXJTb3VyY2VNYXA7CisK
KyAgICAgICAgaWYgKHNvdXJjZU1hcCkgeworICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBzb3Vy
Y2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldChNYXRoLm1heCh2aXNpYmxlUmFuZ2UuZnJv
bSAtIDEsIDApLCAwKTsKKyAgICAgICAgICAgIGVuZE9mZnNldCA9IHNvdXJjZU1hcC5mb3JtYXR0
ZWRUb09yaWdpbmFsT2Zmc2V0KHZpc2libGVSYW5nZS50byAtIDEsIDApOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBjb2RlTWlycm9yLmdldERvYygpLmluZGV4
RnJvbVBvcyh7IGxpbmU6IHZpc2libGVSYW5nZS5mcm9tLCBjaDogMCB9KTsKKyAgICAgICAgICAg
IGVuZE9mZnNldCA9IGNvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9zKHsgbGluZTogdmlz
aWJsZVJhbmdlLnRvLCBjaDogMCB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzdGFydFRp
bWUgPSBEYXRlLm5vdygpOworICAgICAgICB2YXIgYWxsTm9kZXNJblJhbmdlID0gc2NyaXB0U3lu
dGF4VHJlZS5maWx0ZXJCeVJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgICAgICBz
Y3JpcHRTeW50YXhUcmVlLnVwZGF0ZVR5cGVzKHNvdXJjZUlELCBhbGxOb2Rlc0luUmFuZ2UsIGZ1
bmN0aW9uIGFmdGVyVHlwZVVwZGF0ZXMoKSB7CisgICAgICAgICAgICAvLyBCZWNhdXNlIHRoaXMg
aXMgYW4gYXN5bmNocm9ub3VzIGNhbGwsIHdlIGNvdWxkIGhhdmUgYmVlbiBkZWFjdGl2YXRlZCBi
ZWZvcmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgICAgICAgICAgIGlmICgh
c2VsZi5faXNBY3RpdmUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBh
bGxOb2Rlc0luUmFuZ2UuZm9yRWFjaChzZWxmLl9pbnNlcnRUeXBlVG9rZW5zRm9yRWFjaE5vZGUu
YmluZChzZWxmKSk7CisgICAgICAgICAgICBhbGxOb2Rlc0luUmFuZ2UuZm9yRWFjaChzZWxmLl91
cGRhdGVUeXBlVG9rZW5zRm9yRWFjaE5vZGUpOworCisgICAgICAgICAgICB2YXIgdG90YWxUaW1l
ID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTsKKyAgICAgICAgICAgIHZhciB0aW1lb3V0VGltZSA9
IE1hdGgubWluKE1hdGgubWF4KDc1MDAsIHRvdGFsVGltZSksIDggKiB0b3RhbFRpbWUpOworCisg
ICAgICAgICAgICBzZWxmLl90aW1lb3V0SWRlbnRpZmllciA9IHNldFRpbWVvdXQoZnVuY3Rpb24g
dGltZW91dFVwZGF0ZSgpIHsKKyAgICAgICAgICAgICAgICBzZWxmLl90aW1lb3V0SWRlbnRpZmll
ciA9IG51bGw7CisgICAgICAgICAgICAgICAgc2VsZi5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAg
ICAgICAgICAgIH0sIHRpbWVvdXRUaW1lKTsKKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIF9p
bnNlcnRUeXBlVG9rZW5zRm9yRWFjaE5vZGU6IGZ1bmN0aW9uKG5vZGUpCisgICAgeworICAgICAg
ICB2YXIgVHlwZXMgPSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZTsKKyAg
ICAgICAgdmFyIHNjcmlwdFN5bnRheFRyZWUgPSB0aGlzLl9zY3JpcHQuX3NjcmlwdFN5bnRheFRy
ZWU7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICBzd2l0Y2ggKG5vZGUudHlw
ZSkgeworICAgICAgICBjYXNlIFR5cGVzLkZ1bmN0aW9uRGVjbGFyYXRpb246CisgICAgICAgIGNh
c2UgVHlwZXMuRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgbm9kZS5wYXJhbXMuZm9y
RWFjaChmdW5jdGlvbiAocGFyYW0pIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcmFtLl9hdHRh
Y2htZW50cy5fdHlwZVRva2VuICYmIHBhcmFtLl9hdHRhY2htZW50cy5fdHlwZXMgJiYgcGFyYW0u
X2F0dGFjaG1lbnRzLl90eXBlcy5kaXNwbGF5VHlwZU5hbWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcGFyYW0uX2F0dGFjaG1lbnRzLl90eXBlUG9wb3ZlclRpdGxlID0gIlR5cGUgaW5mb3JtYXRp
b24gZm9yIHZhcmlhYmxlOiAiICsgcGFyYW0ubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5faW5zZXJ0VG9rZW4ocGFyYW0ucmFuZ2VbMF0sIHBhcmFtLCBmYWxzZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyBJZiBhIGZ1bmN0aW9uIGRv
ZXMgbm90IGhhdmUgYW4gZXhwbGljaXQgcmV0dXJuIHR5cGUsIHRoZW4gZG9uJ3Qgc2hvdyBhIHJl
dHVybiB0eXBlIHVubGVzcyB3ZSB0aGluayBpdCdzIGEgY29uc3RydWN0b3IuCisgICAgICAgICAg
ICBpZiAoIW5vZGUuX2F0dGFjaG1lbnRzLl90eXBlVG9rZW4gJiYgbm9kZS5fYXR0YWNobWVudHMu
X3JldHVyblR5cGVzICYmIG5vZGUuX2F0dGFjaG1lbnRzLl9yZXR1cm5UeXBlcy5kaXNwbGF5VHlw
ZU5hbWUgJiYgKHNjcmlwdFN5bnRheFRyZWUuY29udGFpbnNOb25FbXB0eVJldHVyblN0YXRlbWVu
dChub2RlLmJvZHkpIHx8IG5vZGUuX2F0dGFjaG1lbnRzLl9yZXR1cm5UeXBlcy5kaXNwbGF5VHlw
ZU5hbWUgIT09ICJVbmRlZmluZWQiKSkgeworICAgICAgICAgICAgICAgIG5vZGUuX2F0dGFjaG1l
bnRzLl90eXBlUG9wb3ZlclRpdGxlID0gIlJldHVybiB0eXBlIGluZm9ybWF0aW9uIGZvciBmdW5j
dGlvbiIgKyAobm9kZS5pZCA/ICgiOiAiICsgbm9kZS5pZC5uYW1lKSA6ICIiKTsKKyAgICAgICAg
ICAgICAgICBzZWxmLl9pbnNlcnRUb2tlbihub2RlLmlzR2V0dGVyT3JTZXR0ZXIgPyBub2RlLmdl
dHRlck9yU2V0dGVyUmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdLCBub2RlLCB0cnVlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlZhcmlhYmxl
RGVjbGFyYXRvcjoKKyAgICAgICAgICAgIGlmICghbm9kZS5fYXR0YWNobWVudHMuX3R5cGVUb2tl
biAmJiBub2RlLl9hdHRhY2htZW50cy5fdHlwZXMgJiYgbm9kZS5fYXR0YWNobWVudHMuX3R5cGVz
LmRpc3BsYXlUeXBlTmFtZSkgeworICAgICAgICAgICAgICAgIG5vZGUuX2F0dGFjaG1lbnRzLl90
eXBlUG9wb3ZlclRpdGxlID0gIlR5cGUgaW5mb3JtYXRpb24gZm9yIHZhcmlhYmxlOiAiICsgbm9k
ZS5pZC5uYW1lOworICAgICAgICAgICAgICAgIHNlbGYuX2luc2VydFRva2VuKG5vZGUuaWQucmFu
Z2VbMF0sIG5vZGUsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfSwKKworICAgIF9pbnNlcnRUb2tlbjogZnVuY3Rpb24ob2Zmc2V0LCBu
b2RlLCBpc1JldHVybikKKyAgICB7CisgICAgICAgIHZhciBzb3VyY2VNYXAgPSB0aGlzLl9zb3Vy
Y2VDb2RlVGV4dEVkaXRvci5fZm9ybWF0dGVyU291cmNlTWFwOworICAgICAgICB2YXIgY29kZU1p
cnJvciA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLl9jb2RlTWlycm9yOworICAgICAgICB2
YXIgc3RhcnQgPSBudWxsOyAKKyAgICAgICAgdmFyIGxvY2F0aW9uOyAKKworICAgICAgICBpZiAo
c291cmNlTWFwKSB7CisgICAgICAgICAgICBsb2NhdGlvbiA9IHNvdXJjZU1hcC5vcmlnaW5hbFBv
c2l0aW9uVG9Gb3JtYXR0ZWQob2Zmc2V0KTsKKyAgICAgICAgICAgIHN0YXJ0ID0geyBsaW5lOiBs
b2NhdGlvbi5saW5lTnVtYmVyLCBjaDogbG9jYXRpb24uY29sdW1uTnVtYmVyIH07CisgICAgICAg
ICAgICBvZmZzZXQgPSBjb2RlTWlycm9yLmdldERvYygpLmluZGV4RnJvbVBvcyhzdGFydCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhcnQgPSBjb2RlTWlycm9yLmdldERvYygpLnBv
c0Zyb21JbmRleChvZmZzZXQpOworCisgICAgICAgIHZhciBzb3VyY2VTdHJpbmcgPSBjb2RlTWly
cm9yLmdldFZhbHVlKCk7CisgICAgICAgIGlmIChpc1JldHVybikgeworICAgICAgICAgICAgLy8g
VHJhbnNsYXRlIHRoZSBwb3NpdGlvbiB0byB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcyBvZiB0aGUg
ZnVuY3Rpb24gYXJndW1lbnRzLgorICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5fZ2V0TmV3T2Zm
c2V0Rm9yUmV0dXJuU3RhdGVtZW50KG5vZGUsIG9mZnNldCwgc291cmNlU3RyaW5nKTsKKyAgICAg
ICAgICAgIHN0YXJ0ID0gY29kZU1pcnJvci5nZXREb2MoKS5wb3NGcm9tSW5kZXgob2Zmc2V0KTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdGU6IENvZGVNaXJyb3IgYm9va21hcmtzIHJlbmRl
ciB0byB0aGUgbGVmdCBvZiB0aGUgY2hhcmFjdGVyIHRoZXkncmUgYmVpbmcgZGlzcGxheWVkIG5l
eHQgdG87IHRoYXQgaXMgd2h5IHJpZ2h0IG1hcmdpbiBjaGVja3MgdGhlIGN1cnJlbnQgb2Zmc2V0
LgorICAgICAgICB2YXIgaXNTcGFjZVJlZ2V4cCA9IC9ccy87CisgICAgICAgIHZhciBzaG91bGRI
YXZlTGVmdE1hcmdpbiA9IG9mZnNldCAhPT0gMCAmJiAhaXNTcGFjZVJlZ2V4cC50ZXN0KHNvdXJj
ZVN0cmluZ1tvZmZzZXQgLSAxXSk7CisgICAgICAgIHZhciBzaG91bGRIYXZlUmlnaHRNYXJnaW4g
PSAhaXNTcGFjZVJlZ2V4cC50ZXN0KHNvdXJjZVN0cmluZ1tvZmZzZXRdKTsKKyAgICAgICAgdmFy
IHR5cGVUb2tlbiA9IG5ldyBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldyh0aGlzLCBzaG91bGRI
YXZlUmlnaHRNYXJnaW4sIHNob3VsZEhhdmVMZWZ0TWFyZ2luLCBub2RlLl9hdHRhY2htZW50cy5f
dHlwZVBvcG92ZXJUaXRsZSk7CisgICAgICAgIHZhciBib29rbWFyayA9IGNvZGVNaXJyb3Iuc2V0
VW5pcXVlQm9va21hcmsoc3RhcnQsIHt3aWRnZXQ6IHR5cGVUb2tlbi5lbGVtZW50fSk7CisgICAg
ICAgIG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlVG9rZW4gPSB0eXBlVG9rZW47CisgICAgICAgIHRo
aXMuX3R5cGVUb2tlbk5vZGVzLnB1c2gobm9kZSk7CisgICAgICAgIHRoaXMuX3R5cGVUb2tlbkJv
b2ttYXJrcy5wdXNoKGJvb2ttYXJrKTsKKyAgICB9LAorCisgICAgX3VwZGF0ZVR5cGVUb2tlbnNG
b3JFYWNoTm9kZTogZnVuY3Rpb24obm9kZSkgCisgICAgeworICAgICAgICB2YXIgVHlwZXMgPSBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZTsKKworICAgICAgICBzd2l0Y2gg
KG5vZGUudHlwZSkgeworICAgICAgICBjYXNlIFR5cGVzLkZ1bmN0aW9uRGVjbGFyYXRpb246Cisg
ICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgbm9kZS5w
YXJhbXMuZm9yRWFjaChmdW5jdGlvbihwYXJhbSkgeworICAgICAgICAgICAgICAgIGlmIChwYXJh
bS5fYXR0YWNobWVudHMuX3R5cGVUb2tlbikKKyAgICAgICAgICAgICAgICAgICAgcGFyYW0uX2F0
dGFjaG1lbnRzLl90eXBlVG9rZW4udXBkYXRlKHBhcmFtLl9hdHRhY2htZW50cy5fdHlwZXMpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAobm9kZS5fYXR0YWNobWVudHMuX3R5cGVU
b2tlbikKKyAgICAgICAgICAgICAgICBub2RlLl9hdHRhY2htZW50cy5fdHlwZVRva2VuLnVwZGF0
ZShub2RlLl9hdHRhY2htZW50cy5fcmV0dXJuVHlwZXMpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVHlwZXMuVmFyaWFibGVEZWNsYXJhdG9yOgorICAgICAgICAgICAgaWYgKG5v
ZGUuX2F0dGFjaG1lbnRzLl90eXBlVG9rZW4pCisgICAgICAgICAgICAgICAgbm9kZS5fYXR0YWNo
bWVudHMuX3R5cGVUb2tlbi51cGRhdGUobm9kZS5fYXR0YWNobWVudHMuX3R5cGVzKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSwKKworICAgIF9jbGVhclR5cGVUb2tlbnM6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzLmZvckVhY2go
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3R5cGVUb2tl
biA9IG51bGw7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl90eXBlVG9rZW5Cb29rbWFya3Mu
Zm9yRWFjaChmdW5jdGlvbihib29rbWFyaykgeworICAgICAgICAgICAgYm9va21hcmsuY2xlYXIo
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuTm9kZXMgPSBbXTsKKyAg
ICAgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtzID0gW107CisgICAgfSwKKworICAgIF9nZXRO
ZXdPZmZzZXRGb3JSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uKG5vZGUsIG9mZnNldCwgc291cmNl
U3RyaW5nKQorICAgIHsKKyAgICAgICAgLy8gVGhlIGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IHdl
IGdldCB0aGUgb2Zmc2V0IHN0YXJ0aW5nIGF0IHRoZSBmdW5jdGlvbiBrZXl3b3JkIChvciBhZnRl
ciB0aGUgZ2V0L3NldCBrZXl3b3JkcykuCisgICAgICAgIC8vIFdlIHdpbGwgcmV0dXJuIHRoZSBv
ZmZzZXQgZm9yIHRoZSBjbG9zaW5nIHBhcmVudGhlc2lzIGluIHRoZSBmdW5jdGlvbiBkZWNsYXJh
dGlvbi4KKyAgICAgICAgLy8gQWxsIHRoaXMgY29kZSBpcyBqdXN0IGEgd2F5IHRvIGZpbmQgdGhp
cyBwYXJlbnRoZXNpcyB3aGlsZSBpZ25vcmluZyBjb21tZW50cy4KKworICAgICAgICB2YXIgaXNN
dWx0aUxpbmVDb21tZW50ID0gZmFsc2U7CisgICAgICAgIHZhciBpc1NpbmdsZUxpbmVDb21tZW50
ID0gZmFsc2U7CisgICAgICAgIHZhciBzaG91bGRJZ25vcmUgPSBmYWxzZTsKKyAgICAgICAgd2hp
bGUgKChzb3VyY2VTdHJpbmdbb2Zmc2V0XSAhPT0gIikiIHx8IHNob3VsZElnbm9yZSkgJiYgb2Zm
c2V0IDwgc291cmNlU3RyaW5nLmxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGlzU2luZ2xlTGlu
ZUNvbW1lbnQgJiYgKHNvdXJjZVN0cmluZ1tvZmZzZXRdID09PSAiXG4iIHx8IChzb3VyY2VTdHJp
bmdbb2Zmc2V0XSA9PT0gIlxyIiAmJiBzb3VyY2VTdHJpbmdbb2Zmc2V0ICsgMV0gPT09ICJcbiIp
KSkgeworICAgICAgICAgICAgICAgIGlmIChzb3VyY2VTdHJpbmdbb2Zmc2V0XSA9PT0gIlxyIikK
KyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Kys7CisgICAgICAgICAgICAgICAgaXNTaW5nbGVM
aW5lQ29tbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHNob3VsZElnbm9yZSA9IGZhbHNl
OworICAgICAgICAgICAgfSBlbHNlIGlmIChpc011bHRpTGluZUNvbW1lbnQgJiYgc291cmNlU3Ry
aW5nW29mZnNldF0gPT09ICIqIiAmJiBzb3VyY2VTdHJpbmdbb2Zmc2V0ICsgMV0gPT09ICIvIikg
eworICAgICAgICAgICAgICAgIGlzTXVsdGlMaW5lQ29tbWVudCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIHNob3VsZElnbm9yZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIG9mZnNldCsrOyAK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNob3VsZElnbm9yZSAmJiBzb3VyY2VTdHJpbmdbb2Zm
c2V0XSA9PT0gIi8iKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0Kys7CisgICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZVN0cmluZ1tvZmZzZXRdID09PSAiKiIpCisgICAgICAgICAgICAgICAgICAg
IGlzTXVsdGlMaW5lQ29tbWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc291
cmNlU3RyaW5nW29mZnNldF0gPT09ICIvIikKKyAgICAgICAgICAgICAgICAgICAgaXNTaW5nbGVM
aW5lQ29tbWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBwYXJzaW5nLiBDb3VsZG4ndCBwYXJzZSBjb21tZW50
IHByZWFtYmxlLiIpOworICAgICAgICAgICAgICAgIHNob3VsZElnbm9yZSA9IHRydWU7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG9mZnNldCsrOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIG9mZnNldCArIDE7CisgICAgfSwKKworICAgIF9jbGVhclRpbWVvdXRJZk5lZWRlZDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyKSB7
CisgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkZW50aWZpZXIpOworICAg
ICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICB9CisgICAg
fQorfTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9O
YXZpZ2F0aW9uSXRlbVR5cGVzLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1UeXBlcy5zdmcJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdh
dGlvbkl0ZW1UeXBlcy5zdmcJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiPz4KKzwhLS0gQ29weXJpZ2h0IMKpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLiAtLT4KKzxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNSAxNSI+CisgICAgPHJlY3QgY2xhc3M9InN0
cm9rZWQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIHg9IjAuNSIgeT0iMS41IiB3aWR0aD0i
MTQiIGhlaWdodD0iMTIiIHJ4PSIyIi8+CisgICAgPHBhdGggY2xhc3M9InN0cm9rZWQiIGZpbGw9
Im5vbmUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIGQ9Ik0gNy41IDQu
NSBMIDcuNSAxMC41IE0gNC41IDQuNSBMIDEwLjUgNC41Ii8+Cis8L3N2Zz4KSW5kZXg6IFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9y
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCShyZXZpc2lvbiAxNzI0MDMpCisrKyBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IgPSBmdW5jCiAKICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5jYWxsKHRo
aXMsIG51bGwsIG51bGwsIHRoaXMpOwogCisgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yID0g
bnVsbDsgCisgICAgdGhpcy5fY3VycmVudFR5cGVUb2tlblNjcm9sbEhhbmRsZXIgPSBudWxsOwor
CiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB0aGlzIGp1c3QganVtcHMgYmV0d2VlbiByZXNvdXJj
ZXMgYW5kIHJlbGF0ZWQgc291cmNlIG1hcCByZXNvdXJjZXMuIEl0IGRvZXNuJ3QgImp1bXAgdG8g
c3ltYm9sIiB5ZXQuCiAgICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0
ZSgpOwogCkBAIC0xMDEsNiArMTA0LDE0IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5wcm90b3QKICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZUNvZGU7CiAgICAgfSwKIAor
ICAgIHNob3duOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvci5wcm90b3R5cGUuc2hvd24uY2FsbCh0aGlzKTsKKworICAgICAgICBpZiAodGhpcy5fdHlw
ZVRva2VuQW5ub3RhdG9yKQorICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJl
c3VtZSgpOworICAgIH0sCisKICAgICBoaWRkZW46IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAg
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5oaWRkZW4uY2FsbCh0aGlzKTsKQEAg
LTExMCw2ICsxMjEsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
CiAgICAgICAgIHRoaXMuX2Rpc21pc3NQb3BvdmVyKCk7CiAgICAgICAgIAogICAgICAgICB0aGlz
Ll9kaXNtaXNzRWRpdGluZ0NvbnRyb2xsZXIodHJ1ZSk7CisKKyAgICAgICAgaWYgKHRoaXMuX3R5
cGVUb2tlbkFubm90YXRvcikKKyAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5w
YXVzZSgpOwogICAgIH0sCiAKICAgICBjbG9zZTogZnVuY3Rpb24oKQpAQCAtMTM1LDYgKzE0OSw5
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKIAogICAgICAgICBX
ZWJJbnNwZWN0b3Iubm90aWZpY2F0aW9ucy5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5Ob3RpZmljYXRpb24uR2xvYmFsTW9kaWZpZXJLZXlzRGlkQ2hhbmdlLCB0aGlzLl91cGRhdGVU
b2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlLCB0aGlzKTsKICAgICAgICAgdGhpcy5fc291cmNl
Q29kZS5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LlNv
dXJjZU1hcEFkZGVkLCB0aGlzLl9zb3VyY2VDb2RlU291cmNlTWFwQWRkZWQsIHRoaXMpOworCisg
ICAgICAgIGlmICh0aGlzLl9jdXJyZW50VHlwZVRva2VuU2Nyb2xsSGFuZGxlcikKKyAgICAgICAg
ICAgIHRoaXMuX2Rpc2FibGVTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKICAg
ICB9LAogCiAgICAgY2FuQmVGb3JtYXR0ZWQ6IGZ1bmN0aW9uKCkKQEAgLTIzNCw2ICsyNTEsNDcg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICAgICAg
dGhpcy5fdXBkYXRlRWRpdGFibGVNYXJrZXJzKHJhbmdlKTsKICAgICB9LAogCisgICAgdG9nZ2xl
VHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3R5
cGVUb2tlbkFubm90YXRvcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB2
YXIgaXNBY3RpdmF0ZWQgPSB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IudG9nZ2xlVHlwZUFubm90
YXRpb25zKCk7CisgICAgICAgIGlmIChpc0FjdGl2YXRlZCkgeworICAgICAgICAgICAgUnVudGlt
ZUFnZW50LmVuYWJsZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmcoKTsKKyAgICAgICAgICAgIFdl
Ykluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWUgPSB0
cnVlOworICAgICAgICAgICAgdGhpcy5fZW5hYmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5u
b3RhdG9yKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBkaXNhYmxlIHR5
cGVQcm9maWxpbmcgd2hlbiBleGl0aW5nIHRoZSBpbnNwZWN0b3IsIHNvIG5vIG5lZWQgdG8gY2Fs
bCBpdCBoZXJlLiBJZiB3ZSB3ZXJlCisgICAgICAgICAgICAvLyB0byBjYWxsIGl0IGhlcmUsIHdl
IHdvdWxkIGhhdmEgSmF2YVNjcmlwdENvcmUgY29tcGlsZSBvdXQgYWxsIHRoZSBuZWNlc2Vzc2Fy
eSB0eXBlIHByb2ZpaWxuZyBpbmZvcm1hdGlvbiwKKyAgICAgICAgICAgIC8vIHNvIGlmIGEgdXNl
ciB3ZXJlIHRvIHF1aWNrbHkgcHJlc3MgdGhlbiB1bnByZXNzIHRoZSBidXR0b24sIHdlIHdvdWxk
bid0IGJlIGFibGUgdG8gcmUtc2hvdyB0eXBlIGlmbm9ybWF0aW9uLgorICAgICAgICAgICAgdGhp
cy5fZGlzYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFubm90YXRvcigpOworICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1
ZSA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2lu
Z0NvbnRyb2xsZXJTdGF0ZSgpOworICAgICAgICByZXR1cm4gaXNBY3RpdmF0ZWQ7CisgICAgfSwK
KworICAgIHNob3dQb3BvdmVyRm9yVHlwZXM6IGZ1bmN0aW9uKHR5cGVzLCBib3VuZHMsIHRpdGxl
KQorICAgIHsKKyAgICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICAgICAgY29udGVudC5jbGFzc05hbWUgPSAib2JqZWN0IGV4cGFuZGFibGUiOwor
CisgICAgICAgIHZhciB0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKKyAgICAgICAgdGl0bGVFbGVtZW50LmNsYXNzTmFtZSA9ICJ0aXRsZSI7CisgICAgICAgIHRp
dGxlRWxlbWVudC50ZXh0Q29udGVudCA9IHRpdGxlOworICAgICAgICBjb250ZW50LmFwcGVuZENo
aWxkKHRpdGxlRWxlbWVudCk7CisKKyAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVj
dG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbih0eXBlcyk7CisgICAgICAgIHNlY3Rpb24uZXhwYW5k
ZWQgPSB0cnVlOworICAgICAgICBzZWN0aW9uLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiYm9keSIp
OworICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxlbWVudCk7CisKKyAgICAg
ICAgdGhpcy5fc2hvd1BvcG92ZXIoY29udGVudCwgYm91bmRzKTsKKyAgICB9LAorCisKICAgICAv
LyBQcml2YXRlCiAKICAgICBfdW5mb3JtYXR0ZWRMaW5lSW5mb0ZvckVkaXRvckxpbmVJbmZvOiBm
dW5jdGlvbihsaW5lSW5mbykKQEAgLTM1OCw2ICs0MTYsMTAgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogCiAgICAgICAgIHRoaXMuX2NvbnRlbnRXaWxsUG9wdWxh
dGUoY29udGVudCk7CiAgICAgICAgIHRoaXMuc3RyaW5nID0gY29udGVudDsKKworICAgICAgICBp
ZiAodGhpcy5fY29kZU1pcnJvci5nZXRNb2RlKCkubmFtZSA9PT0gImphdmFzY3JpcHQiKQorICAg
ICAgICAgICAgdGhpcy5fbWFrZVR5cGVUb2tlbkFubm90YXRvcigpOworCiAgICAgICAgIHRoaXMu
X2NvbnRlbnREaWRQb3B1bGF0ZSgpOwogICAgIH0sCiAKQEAgLTk2NywxMiArMTAyOSwxNiBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgX2RlYnVnZ2VyRGlk
UGF1c2U6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5U
cmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOworICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5u
b3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAgICAg
IHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZXN1bWUoKTsKICAgICB9LAogCiAgICAgX2RlYnVn
Z2VyRGlkUmVzdW1lOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMuX3VwZGF0
ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKICAgICAgICAgdGhpcy5fZGlzbWlzc1Bv
cG92ZXIoKTsKKyAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90
eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5B
bm5vdGF0b3IucmVzdW1lKCk7CiAgICAgfSwKIAogICAgIF9zb3VyY2VDb2RlU291cmNlTWFwQWRk
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtOTg4LDYgKzEwNTQsOCBAQCBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIHZhciBtb2RlID0gV2ViSW5zcGVjdG9y
LkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk5vbmU7CiAgICAgICAgIGlm
IChXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnBhdXNlZCkKICAgICAgICAgICAgIG1vZGUg
PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2
YVNjcmlwdEV4cHJlc3Npb247CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90
YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUpCisgICAgICAgICAgICBt
b2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2Rl
LkphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb247CiAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2hhc0Nv
bG9yTWFya2VycygpKQogICAgICAgICAgICAgbW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9y
VG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5NYXJrZWRUb2tlbnM7CiAgICAgICAgIGVsc2Ug
aWYgKCh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJl
c291cmNlIHx8IHRoaXMuX3NvdXJjZUNvZGUuc291cmNlTWFwcy5sZW5ndGggIT09IDApICYmIFdl
Ykluc3BlY3Rvci5tb2RpZmllcktleXMubWV0YUtleSAmJiAhV2ViSW5zcGVjdG9yLm1vZGlmaWVy
S2V5cy5hbHRLZXkgJiYgIVdlYkluc3BlY3Rvci5tb2RpZmllcktleXMuc2hpZnRLZXkpCkBAIC0x
MDEwLDYgKzEwNzgsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
CiAgICAgICAgICAgICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJv
bGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9uOgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUlu
Zm9ybWF0aW9uOgogICAgICAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5tb3Vz
ZU92ZXJEZWxheUR1cmF0aW9uID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1
cmF0aW9uVG9Nb3VzZU92ZXJUb2tlblRvTWFrZUhvdmVyZWRUb2tlbjsKICAgICAgICAgICAgIHRo
aXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW91c2VPdXRSZWxlYXNlRGVsYXlEdXJhdGlvbiA9
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5EdXJhdGlvblRvTW91c2VPdXRPZkhv
dmVyZWRUb2tlblRvUmVsZWFzZTsKICAgICAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIuY2xhc3NOYW1lRm9ySGlnaGxpZ2h0ZWRSYW5nZSA9IFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlVGV4dEVkaXRvci5Ib3ZlcmVkRXhwcmVzc2lvbkhpZ2hsaWdodFN0eWxlQ2xhc3NOYW1lOwpA
QCAtMTA3NSw2ICsxMTQ0LDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3QKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIGlmICh0aGlz
LnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vZGUgPT09IFdlYkluc3BlY3Rvci5Db2RlTWlycm9y
VG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uKSB7
CisgICAgICAgICAgICB0aGlzLl90b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2
YVNjcmlwdFR5cGVJbmZvcm1hdGlvbihjYW5kaWRhdGUpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKICAgICAgICAgaWYgKHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW9k
ZSA9PT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2Rl
Lk1hcmtlZFRva2VucykgewogICAgICAgICAgICAgdmFyIG1hcmtlcnMgPSB0aGlzLm1hcmtlcnNB
dFBvc2l0aW9uKGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZS5zdGFydCk7CiAgICAgICAgICAg
ICBpZiAobWFya2Vycy5sZW5ndGggPiAwKQpAQCAtMTEzMCwyNiArMTIwNCw3NiBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIERlYnVnZ2VyQWdlbnQu
ZXZhbHVhdGVPbkNhbGxGcmFtZS5pbnZva2Uoe2NhbGxGcmFtZUlkOiBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZS5pZCwgZXhwcmVzc2lvbjogY2FuZGlkYXRlLmV4
cHJlc3Npb24sIG9iamVjdEdyb3VwOiAicG9wb3ZlciIsIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNB
bmRNdXRlQ29uc29sZTogdHJ1ZX0sIHBvcHVsYXRlLmJpbmQodGhpcykpOwogICAgIH0sCiAKLSAg
ICBfc2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGNvbnRlbnQpCisgICAgX3Rva2VuVHJhY2tpbmdDb250
cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOiBmdW5jdGlvbihjYW5k
aWRhdGUpCiAgICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnRva2VuVHJhY2tpbmdD
b250cm9sbGVyLmNhbmRpZGF0ZSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNhbmRpZGF0ZS5l
eHByZXNzaW9uKTsKKworICAgICAgICB2YXIgc291cmNlQ29kZSA9IHRoaXMuX3NvdXJjZUNvZGU7
CisgICAgICAgIHZhciBzb3VyY2VJRCA9IHNvdXJjZUNvZGUuc2NyaXB0c1swXS5pZDsKKyAgICAg
ICAgdmFyIHJhbmdlID0gY2FuZGlkYXRlLmhvdmVyZWRUb2tlblJhbmdlOworICAgICAgICB2YXIg
b2Zmc2V0ID0gbnVsbDsKIAorICAgICAgICBpZiAodGhpcy5fZm9ybWF0dGVyU291cmNlTWFwKQor
ICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRv
T3JpZ2luYWxPZmZzZXQocmFuZ2Uuc3RhcnQubGluZSwgcmFuZ2Uuc3RhcnQuY2gpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVy
Ll9jb2RlTWlycm9yLmdldERvYygpLmluZGV4RnJvbVBvcyh7bGluZTogcmFuZ2Uuc3RhcnQubGlu
ZSwgY2g6IHJhbmdlLnN0YXJ0LmNofSk7CisKKyAgICAgICAgdmFyIGFsbFJlcXVlc3RzID0gW3sK
KyAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IuTm9ybWFsRXhwcmVzc2lv
biwKKyAgICAgICAgICAgIHNvdXJjZUlEOiBzb3VyY2VJRCwKKyAgICAgICAgICAgIGRpdm90OiBv
ZmZzZXQKKyAgICAgICAgfV07CisKKyAgICAgICAgZnVuY3Rpb24gaGFuZGxlcihlcnJvciwgYWxs
VHlwZXMpIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUgIT09IHRoaXMudG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIuY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
Y29uc29sZS5hc3NlcnQoYWxsVHlwZXMubGVuZ3RoID09PSAxKTsKKyAgICAgICAgICAgIGlmICgh
YWxsVHlwZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHZh
ciB0eXBlcyA9IGFsbFR5cGVzWzBdOworICAgICAgICAgICAgaWYgKHR5cGVzLmRpc3BsYXlUeXBl
TmFtZSkKKyAgICAgICAgICAgICAgICB0aGlzLnNob3dQb3BvdmVyRm9yVHlwZXModHlwZXMsIG51
bGwsICJUeXBlIGluZm9ybWF0aW9uIGZvcjogIiArIGNhbmRpZGF0ZS5leHByZXNzaW9uKTsKKyAg
ICAgICAgfQorICAgICAgICBSdW50aW1lQWdlbnQuZ2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVz
QXRPZmZzZXRzKGFsbFJlcXVlc3RzLCBoYW5kbGVyLmJpbmQodGhpcykpOworCisgICAgfSwKKwor
ICAgIF9zaG93UG9wb3ZlcjogZnVuY3Rpb24oY29udGVudCwgYm91bmRzKQorICAgIHsKKyAgICAg
ICAgY29uc29sZS5hc3NlcnQodGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5jYW5kaWRhdGUg
fHwgYm91bmRzKTsKKworICAgICAgICB2YXIgc2hvdWxkSGlnaGxpZ2h0UmFuZ2UgPSBmYWxzZTsK
ICAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2Fu
ZGlkYXRlOwotICAgICAgICBpZiAoIWNhbmRpZGF0ZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgLy8gSWYgYm91bmRzIGlzIGZhbHNleSwgdGhpcyBpcyBhIHBvcG92ZXIgaW50cm9kdWNl
ZCBmcm9tIGEgaG92ZXIgZXZlbnQuCisgICAgICAgIC8vIE90aGVyd2lzZSwgdGhpcyBpcyBjYWxs
ZWQgZnJvbSBUeXBlVG9rZW5Bbm5vdGF0b3IuCisgICAgICAgIGlmICghYm91bmRzKSB7CisgICAg
ICAgICAgICBpZiAoIWNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgY29udGVudC5jbGFzc0xpc3QuYWRkKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5Qb3BvdmVyRGVidWdnZXJDb250ZW50U3R5bGVDbGFzc05hbWUpOworICAgICAgICAgICAgdmFy
IHJlY3RzID0gdGhpcy5yZWN0c0ZvclJhbmdlKGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZSk7
CisgICAgICAgICAgICBib3VuZHMgPSBXZWJJbnNwZWN0b3IuUmVjdC51bmlvbk9mUmVjdHMocmVj
dHMpOworCisgICAgICAgICAgICBzaG91bGRIaWdobGlnaHRSYW5nZSA9IHRydWU7CisgICAgICAg
IH0KIAotICAgICAgICB2YXIgcmVjdHMgPSB0aGlzLnJlY3RzRm9yUmFuZ2UoY2FuZGlkYXRlLmhv
dmVyZWRUb2tlblJhbmdlKTsKLSAgICAgICAgdmFyIGJvdW5kcyA9IFdlYkluc3BlY3Rvci5SZWN0
LnVuaW9uT2ZSZWN0cyhyZWN0cyk7CiAKLSAgICAgICAgdGhpcy5fcG9wb3ZlciA9IHRoaXMuX3Bv
cG92ZXIgfHwgbmV3IFdlYkluc3BlY3Rvci5Qb3BvdmVyKHRoaXMpOworICAgICAgICBjb250ZW50
LmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLlBvcG92ZXJE
ZWJ1Z2dlckNvbnRlbnRTdHlsZUNsYXNzTmFtZSk7CisKKyAgICAgICAgaWYgKHRoaXMuX3BvcG92
ZXIpCisgICAgICAgICAgICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOworICAgICAgICB0aGlzLl9w
b3BvdmVyID0gbmV3IFdlYkluc3BlY3Rvci5Qb3BvdmVyKHRoaXMpOwogICAgICAgICB0aGlzLl9w
b3BvdmVyLmNvbnRlbnQgPSBjb250ZW50OwogICAgICAgICB0aGlzLl9wb3BvdmVyLnByZXNlbnQo
Ym91bmRzLnBhZCg1KSwgW1dlYkluc3BlY3Rvci5SZWN0RWRnZS5NSU5fWSwgV2ViSW5zcGVjdG9y
LlJlY3RFZGdlLk1BWF9ZLCBXZWJJbnNwZWN0b3IuUmVjdEVkZ2UuTUFYX1hdKTsKIAotICAgICAg
ICB0aGlzLl90cmFja1BvcG92ZXJFdmVudHMoKTsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBoaWdo
bGlnaHQgdGhlIHJhbmdlIGFmdGVyIGNyZWF0aW5nIHRoZSBuZXcgcG9wb3ZlciBiZWNhdXNlIGRp
c21pc3NpbmcgdGhlIG9sZCBwb3BvdmVyIHdpbGwgcmVtb3ZlIHRoZSBjdXJyZW50IGhpZ2hsaWdo
dC4KKyAgICAgICAgaWYgKHNob3VsZEhpZ2hsaWdodFJhbmdlKQorICAgICAgICAgICAgdGhpcy50
b2tlblRyYWNraW5nQ29udHJvbGxlci5oaWdobGlnaHRSYW5nZShjYW5kaWRhdGUuZXhwcmVzc2lv
blJhbmdlKTsKIAotICAgICAgICB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmhpZ2hsaWdo
dFJhbmdlKGNhbmRpZGF0ZS5leHByZXNzaW9uUmFuZ2UpOworICAgICAgICB0aGlzLl90cmFja1Bv
cG92ZXJFdmVudHMoKTsKICAgICB9LAogCiAgICAgX3Nob3dQb3BvdmVyRm9yRnVuY3Rpb246IGZ1
bmN0aW9uKGRhdGEpCkBAIC0xMzgwLDYgKzE1MDQsNjAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICB0aGlzLl9pZ25vcmVDb250ZW50RGlkQ2hhbmdl
LS07CiAKICAgICAgICAgZGVsZXRlIHRoaXMuX2VkaXRpbmdDb250cm9sbGVyOworICAgIH0sCisK
KyAgICBfcHJldHR5UHJpbnQ6IGZ1bmN0aW9uKHByZXR0eSkKKyAgICB7CisgICAgICAgIFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcHJldHR5UHJpbnQuY2FsbCh0aGlzLCBwcmV0
dHkpOworCisgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlw
ZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQorICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5u
b3RhdG9yLnJlc2V0KCk7CisgICAgfSwKKworICAgIF9tYWtlVHlwZVRva2VuQW5ub3RhdG9yOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZUNvZGUuc2NyaXB0cy5s
ZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5u
b3RhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IodGhpcywgdGhpcy5f
c291cmNlQ29kZS5zY3JpcHRzWzBdKTsKKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5zaG93SmF2
YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWUpIHsKKyAgICAgICAgICAgIHRoaXMu
X3R5cGVUb2tlbkFubm90YXRvci5yZXNldCgpOworICAgICAgICAgICAgdGhpcy5fZW5hYmxlU2Ny
b2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yKCk7CisgICAgICAgIH0KKyAgICB9LAorCisg
ICAgX2VuYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFubm90YXRvcjogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgLy8gUGF1c2UgdXBkYXRpbmcgdHlwZSB0b2tlbnMgd2hpbGUgc2Nyb2xs
aW5nIHRvIHByZXZlbnQgZnJhbWUgbG9zcy4KKyAgICAgICAgdmFyIHNjcm9sbEhhbmRsZXIgPSB0
aGlzLl9tYWtlVHlwZVRva2VuU2Nyb2xsRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIHRoaXMuX2N1
cnJlbnRUeXBlVG9rZW5TY3JvbGxIYW5kbGVyID0gc2Nyb2xsSGFuZGxlcjsKKyAgICAgICAgdGhp
cy5fY29kZU1pcnJvci5vbigic2Nyb2xsIiwgc2Nyb2xsSGFuZGxlcik7CisgICAgfSwKKworICAg
IF9kaXNhYmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yOmZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub2ZmKCJzY3JvbGwiLCB0aGlzLl9jdXJyZW50
VHlwZVRva2VuU2Nyb2xsSGFuZGxlcik7CisgICAgICAgIHRoaXMuX2N1cnJlbnRUeXBlVG9rZW5T
Y3JvbGxIYW5kbGVyID0gbnVsbDsKKyAgICB9LAorCisgICAgX21ha2VUeXBlVG9rZW5TY3JvbGxF
dmVudEhhbmRsZXI6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB0eXBlVG9rZW5Bbm5v
dGF0b3IgPSB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3I7CisgICAgICAgIHZhciB0aW1lb3V0SWRl
bnRpZmllciA9IG51bGw7CisgICAgICAgIGZ1bmN0aW9uIHNjcm9sbEhhbmRsZXIoKSAKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHRpbWVvdXRJZGVudGlmaWVyKQorICAgICAgICAgICAgICAg
IGNsZWFyVGltZW91dCh0aW1lb3V0SWRlbnRpZmllcik7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgdHlwZVRva2VuQW5ub3RhdG9yLnBhdXNlKCk7CisKKyAgICAgICAgICAgIHRp
bWVvdXRJZGVudGlmaWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICB0aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAgICAgICAgICAgdHlwZVRva2VuQW5u
b3RhdG9yLnJlc3VtZSgpOworICAgICAgICAgICAgfSwgMTAwKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBzY3JvbGxIYW5kbGVyOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzCShyZXZpc2lvbiAxNzI0MDMpCisrKyBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmll
dy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTQgQEAgV2ViSW5zcGVjdG9yLlRleHRS
ZXNvdXJjZUNvbnRlbnRWaWV3ID0gZgogICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdh
dGlvbkl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLkFjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0o
InByZXR0eS1wcmludCIsIHRvb2xUaXAsIGFjdGl2YXRlZFRvb2xUaXAsIGN1cmxleUJyYWNlc0lt
YWdlLnNyYywgY3VybGV5QnJhY2VzSW1hZ2Uud2lkdGgsIGN1cmxleUJyYWNlc0ltYWdlLmhlaWdo
dCk7CiAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCB0
aGlzLl90b2dnbGVQcmV0dHlQcmludCwgdGhpcyk7CiAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0
b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gZmFsc2U7IC8vIEVuYWJsZWQgd2hlbiB0aGUgdGV4
dCBlZGl0b3IgaXMgcG9wdWxhdGVkIHdpdGggY29udGVudC4KKworICAgIHZhciB0b29sVGlwVHlw
ZXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgdHlwZSBpbmZvcm1hdGlvbiIpOworICAg
IHZhciBhY3RpdmF0ZWRUb29sVGlwVHlwZXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhpZGUg
dHlwZSBpbmZvcm1hdGlvbiIpOworICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25J
dGVtID0gbmV3IFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtKCJzaG93
LXR5cGVzIiwgdG9vbFRpcFR5cGVzLCBhY3RpdmF0ZWRUb29sVGlwVHlwZXMsICJJbWFnZXMvTmF2
aWdhdGlvbkl0ZW1UeXBlcy5zdmciLCAxNiwgMTYpOworICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRv
bk5hdmlnYXRpb25JdGVtLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmln
YXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIHRoaXMuX3RvZ2dsZVR5cGVBbm5vdGF0aW9ucywgdGhp
cyk7CisgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IGZh
bHNlOworCisgICAgV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0
dGluZy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5TZXR0aW5nLkV2ZW50LkNoYW5nZWQs
IHRoaXMuX3Nob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZ0NoYW5nZWQsIHRoaXMp
OwogfTsKIAogV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LlN0eWxlQ2xhc3NO
YW1lID0gInRleHQiOwpAQCAtNjIsNyArNzAsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNl
Q29udGVudFZpZXcucHJvCiAKICAgICBnZXQgbmF2aWdhdGlvbkl0ZW1zKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBbdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbV07CisgICAg
ICAgIHJldHVybiBbdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbSwgdGhpcy5f
c2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW1dOwogICAgIH0sCiAKICAgICBnZXQgbWFuYWdl
c093bklzc3VlcygpCkBAIC0yMDAsNiArMjA4LDggQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJj
ZUNvbnRlbnRWaWV3LnBybwogICAgIF9jb250ZW50RGlkUG9wdWxhdGU6IGZ1bmN0aW9uKGV2ZW50
KQogICAgIHsKICAgICAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5l
bmFibGVkID0gdGhpcy5fdGV4dEVkaXRvci5jYW5CZUZvcm1hdHRlZCgpOworICAgICAgICB0aGlz
Ll9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gISF0aGlzLl90ZXh0RWRp
dG9yLl90eXBlVG9rZW5Bbm5vdGF0b3I7CisgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5h
dmlnYXRpb25JdGVtLmFjdGl2YXRlZCA9IFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJ
bmZvcm1hdGlvblNldHRpbmcudmFsdWU7CiAgICAgfSwKIAogICAgIF90b2dnbGVQcmV0dHlQcmlu
dDogZnVuY3Rpb24oZXZlbnQpCkBAIC0yMDgsNiArMjE4LDE2IEBAIFdlYkluc3BlY3Rvci5UZXh0
UmVzb3VyY2VDb250ZW50Vmlldy5wcm8KICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5mb3JtYXR0
ZWQgPSBhY3RpdmF0ZWQ7CiAgICAgfSwKIAorICAgIF90b2dnbGVUeXBlQW5ub3RhdGlvbnM6IGZ1
bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci50b2dnbGVUeXBl
QW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAgX3Nob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0
aW9uU2V0dGluZ0NoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5f
c2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gV2ViSW5zcGVjdG9yLnNo
b3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZTsKKyAgICB9LAorCiAgICAg
X3RleHRFZGl0b3JGb3JtYXR0aW5nRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAg
ICAgICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0g
dGhpcy5fdGV4dEVkaXRvci5mb3JtYXR0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVByb3BlcnRp
ZXNTZWN0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVz
U2VjdGlvbiA9IGZ1bmN0aW9uKHR5cGVzLCB0aXRsZSwgc3VidGl0bGUpCit7CisgICAgdGhpcy5l
bXB0eVBsYWNlaG9sZGVyID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJObyBQcm9wZXJ0aWVzIik7
CisgICAgdGhpcy50eXBlcyA9IHR5cGVzOworCisgICAgV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNT
ZWN0aW9uLmNhbGwodGhpcywgdGl0bGUsIHN1YnRpdGxlKTsKK307CisKK1dlYkluc3BlY3Rvci5U
eXBlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJ
bnNwZWN0b3IuVHlwZVByb3BlcnRpZXNTZWN0aW9uLAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVj
dG9yLlByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSwKKworICAgIG9ucG9wdWxhdGU6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLnJlbW92ZUNo
aWxkcmVuKCk7CisKKyAgICAgICAgdmFyIHByaW1pdGl2ZVR5cGVOYW1lcyA9IHRoaXMudHlwZXMu
Z2xvYmFsUHJpbWl0aXZlVHlwZU5hbWVzID8gdGhpcy50eXBlcy5nbG9iYWxQcmltaXRpdmVUeXBl
TmFtZXMgOiB0aGlzLnR5cGVzLmxvY2FsUHJpbWl0aXZlVHlwZU5hbWVzOworICAgICAgICB2YXIg
c3RydWN0dXJlcyA9IHRoaXMudHlwZXMuZ2xvYmFsU3RydWN0dXJlcyA/IHRoaXMudHlwZXMuZ2xv
YmFsU3RydWN0dXJlcyA6IHRoaXMudHlwZXMubG9jYWxTdHJ1Y3R1cmVzOworICAgICAgICB2YXIg
cHJvcGVydGllcyA9IFtdOworICAgICAgICBmb3IgKHZhciBzdHJ1Y3Qgb2Ygc3RydWN0dXJlcykg
eworICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBuYW1lOiBz
dHJ1Y3QuY29uc3RydWN0b3JOYW1lLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogc3RydWN0
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBwcmltaXRpdmVO
YW1lIG9mIHByaW1pdGl2ZVR5cGVOYW1lcykgeworICAgICAgICAgICAgcHJvcGVydGllcy5wdXNo
KHsKKyAgICAgICAgICAgICAgICBuYW1lOiBwcmltaXRpdmVOYW1lLAorICAgICAgICAgICAgICAg
IHN0cnVjdHVyZTogbnVsbAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBw
cm9wZXJ0aWVzLnNvcnQoV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5Qcm9wZXJ0
eUNvbXBhcmF0b3IpOworICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKQor
ICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQobmV3IFdl
Ykluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudChwcm9wZXJ0eSkpOworCisgICAgICAg
IGlmICghdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuY2hpbGRyZW4ubGVuZ3RoKSB7CisgICAg
ICAgICAgICB2YXIgdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgICAgIHRpdGxlLmNsYXNzTmFtZSA9ICJpbmZvIjsKKyAgICAgICAgICAgIHRpdGxlLnRleHRD
b250ZW50ID0gdGhpcy5lbXB0eVBsYWNlaG9sZGVyOworICAgICAgICAgICAgdmFyIGluZm9FbGVt
ZW50ID0gbmV3IFRyZWVFbGVtZW50KHRpdGxlLCBudWxsLCBmYWxzZSk7CisgICAgICAgICAgICB0
aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5hcHBlbmRDaGlsZChpbmZvRWxlbWVudCk7CisgICAg
ICAgIH0KKworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0
b3IuU2VjdGlvbi5FdmVudC5WaXNpYmxlQ29udGVudERpZENoYW5nZSk7CisKKyAgICAgICAgaWYg
KHByb3BlcnRpZXMubGVuZ3RoID09PSAxKQorICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJl
ZU91dGxpbmUuY2hpbGRyZW5bMF0uZXhwYW5kUmVjdXJzaXZlbHkoKTsKKyAgICB9Cit9OworCisv
LyBUaGlzIGlzIG1vc3RseSBpZGVudGljYWwgdG8gT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uY29t
cGFyZVByb3BlcnRpZXMuIAorLy8gQnV0IHRoaXMgY2hlY2tzIGZvciBlcXVhbGl0eSBiZWNhdXNl
IHdlIGNhbiBoYXZlIHR3byBvYmplY3RzIG5hbWVkIHRoZSBzYW1lIHRoaW5nLgorV2ViSW5zcGVj
dG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5Qcm9wZXJ0eUNvbXBhcmF0b3IgPSBmdW5jdGlvbihw
cm9wZXJ0eUEsIHByb3BlcnR5QikKK3sKKyAgICB2YXIgYSA9IHByb3BlcnR5QS5uYW1lOworICAg
IHZhciBiID0gcHJvcGVydHlCLm5hbWU7CisgICAgaWYgKGEuaW5kZXhPZigiX19wcm90b19fIikg
IT09IC0xKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoYi5pbmRleE9mKCJfX3Byb3RvX18i
KSAhPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoYSA9PT0gYikKKyAgICAgICAg
cmV0dXJuIDE7CisKKyAgICAvLyBpZiB1c2VkIGVsc2V3aGVyZSBtYWtlIHN1cmUgdG8KKyAgICAv
LyAgLSBjb252ZXJ0IGEgYW5kIGIgdG8gc3RyaW5ncyAobm90IG5lZWRlZCBoZXJlLCBwcm9wZXJ0
aWVzIGFyZSBhbGwgc3RyaW5ncykKKworICAgIHZhciBkaWZmID0gMDsKKyAgICB2YXIgY2h1bmsg
PSAvXlxkK3xeXEQrLzsKKyAgICB2YXIgY2h1bmthLCBjaHVua2IsIGFudW0sIGJudW07CisgICAg
d2hpbGUgKGRpZmYgPT09IDApIHsKKyAgICAgICAgaWYgKCFhICYmIGIpCisgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgIGlmICghYiAmJiBhKQorICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgIGNodW5rYSA9IGEubWF0Y2goY2h1bmspWzBdOworICAgICAgICBjaHVua2IgPSBiLm1h
dGNoKGNodW5rKVswXTsKKyAgICAgICAgYW51bSA9ICFpc05hTihjaHVua2EpOworICAgICAgICBi
bnVtID0gIWlzTmFOKGNodW5rYik7CisgICAgICAgIGlmIChhbnVtICYmICFibnVtKQorICAgICAg
ICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoYm51bSAmJiAhYW51bSkKKyAgICAgICAgICAg
IHJldHVybiAxOworICAgICAgICBpZiAoYW51bSAmJiBibnVtKSB7CisgICAgICAgICAgICBkaWZm
ID0gY2h1bmthIC0gY2h1bmtiOworICAgICAgICAgICAgaWYgKGRpZmYgPT09IDAgJiYgY2h1bmth
Lmxlbmd0aCAhPT0gY2h1bmtiLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGlmICghK2NodW5r
YSAmJiAhK2NodW5rYikgLy8gY2h1bmtzIGFyZSBzdHJpbmdzIG9mIGFsbCAwcyAoc3BlY2lhbCBj
YXNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2h1bmthLmxlbmd0aCAtIGNodW5rYi5s
ZW5ndGg7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y2h1bmtiLmxlbmd0aCAtIGNodW5rYS5sZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoY2h1bmthICE9PSBjaHVua2IpCisgICAgICAgICAgICByZXR1cm4gKGNodW5rYSA8
IGNodW5rYikgPyAtMSA6IDE7CisgICAgICAgIGEgPSBhLnN1YnN0cmluZyhjaHVua2EubGVuZ3Ro
KTsKKyAgICAgICAgYiA9IGIuc3Vic3RyaW5nKGNodW5rYi5sZW5ndGgpOworICAgIH0KKworICAg
IHJldHVybiBkaWZmOworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50
ID0gZnVuY3Rpb24ocHJvcGVydHkpCit7CisgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5Owor
CisgICAgdGhpcy5uYW1lRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsK
KyAgICB0aGlzLm5hbWVFbGVtZW50LmNsYXNzTmFtZSA9ICJuYW1lIjsKKyAgICB0aGlzLm5hbWVF
bGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5wcm9wZXJ0eS5uYW1lOworCisgICAgVHJlZUVsZW1l
bnQuY2FsbCh0aGlzLCB0aGlzLm5hbWVFbGVtZW50LCBudWxsLCBmYWxzZSk7CisKKyAgICB0aGlz
LnRvZ2dsZU9uQ2xpY2sgPSB0cnVlOworICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSAhIXRoaXMucHJv
cGVydHkuc3RydWN0dXJlOyAKK307CisKK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxl
bWVudC5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlUHJv
cGVydHlUcmVlRWxlbWVudCwKKyAgICBfX3Byb3RvX186IFRyZWVFbGVtZW50LnByb3RvdHlwZSwK
KworICAgIG9ucG9wdWxhdGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMucmVtb3Zl
Q2hpbGRyZW4oKTsKKworICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtdOworICAgICAgICBmb3Ig
KHZhciBmaWVsZE5hbWUgb2YgdGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUuZmllbGRzKSB7CisgICAg
ICAgICAgICBwcm9wZXJ0aWVzLnB1c2goeworICAgICAgICAgICAgICAgIG5hbWU6IGZpZWxkTmFt
ZSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IG51bGwKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisKKyAgICAgICAgcHJvcGVydGllcy5zb3J0KFdlYkluc3BlY3Rvci5UeXBlUHJvcGVy
dGllc1NlY3Rpb24uUHJvcGVydHlDb21wYXJhdG9yKTsKKworICAgICAgICBpZiAodGhpcy5wcm9w
ZXJ0eS5zdHJ1Y3R1cmUucHJvdG90eXBlU3RydWN0dXJlKSB7CisgICAgICAgICAgICBwcm9wZXJ0
aWVzLnB1c2goeworICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMucHJvcGVydHkuc3RydWN0dXJl
LnByb3RvdHlwZVN0cnVjdHVyZS5jb25zdHJ1Y3Rvck5hbWUgKyAiIChQcm90b3R5cGUpIiwKKyAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHRoaXMucHJvcGVydHkuc3RydWN0dXJlLnByb3RvdHlw
ZVN0cnVjdHVyZQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZh
ciBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKQorICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChu
ZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50KHByb3BlcnR5KSk7CisgICAg
fQorfTsKKwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
VHlwZVRva2VuVmlldy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5jc3MJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmNzcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLnR5cGUtdG9rZW4g
eworICAgIGRpc3BsYXk6IGlubGluZTsgCisgICAgYm9yZGVyLXJhZGl1czogMTBweDsKKyAgICBi
b3JkZXItY29sb3I6IHRyYW5zcGFyZW50OworICAgIHBhZGRpbmctbGVmdDogOHB4OworICAgIHBh
ZGRpbmctcmlnaHQ6IDhweDsKKyAgICBwYWRkaW5nLXRvcDogMXB4OworICAgIGNvbG9yOiB3aGl0
ZTsKKyAgICBmb250LXNpemU6IDkyJTsKKyAgICBvcGFjaXR5OiAwLjg1OworfQpJbmRleDogU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9U
eXBlVG9rZW5WaWV3LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3ID0gZnVu
Y3Rpb24odG9rZW5Bbm5vdGF0b3IsIHNob3VsZEhhdmVSaWdodE1hcmdpbiwgc2hvdWxkSGF2ZUxl
ZnRNYXJnaW4sIHBvcG92ZXJUaXRsZSkgCit7CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxs
KHRoaXMpOworCisgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7
CisgICAgc3Bhbi5jbGFzc05hbWUgPSAidHlwZS10b2tlbiI7CisgICAgc3Bhbi5zdHlsZS5tYXJn
aW5SaWdodCA9IChzaG91bGRIYXZlUmlnaHRNYXJnaW4gPyAiNXB4IiA6ICIwcHgiKTsKKyAgICBz
cGFuLnN0eWxlLm1hcmdpbkxlZnQgPSAoc2hvdWxkSGF2ZUxlZnRNYXJnaW4gPyAiNXB4IiA6ICIw
cHgiKTsKKworICAgIHRoaXMuZWxlbWVudCA9IHNwYW47CisgICAgdGhpcy5fdG9rZW5Bbm5vdGF0
b3IgPSB0b2tlbkFubm90YXRvcjsKKyAgICB0aGlzLl90eXBlcyA9IG51bGw7CisgICAgdGhpcy5f
cG9wb3ZlclRpdGxlID0gcG9wb3ZlclRpdGxlOworCisgICAgdGhpcy5fc2V0VXBNb3VzZW92ZXJI
YW5kbGVycygpOworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JzID0gewor
ICAgIHB1cnBsZSA6ICIjY2MzYmJmIiwKKyAgICBibHVlOiAiIzNiNzBlMiIsCisgICAgcmVkOiAi
I2RmMzUyZSIsCisgICAgZ3JlZW46ICIjNzZhZTFkIiwKKyAgICBncmF5OiAiIzdlN2U3ZSIsCisg
ICAgb3JhbmdlOiAiI2VkODQwMCIKK307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNv
bG9yRm9yVHlwZSA9IHsKKyAgICAiU3RyaW5nIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcu
Q29sb3JzLnJlZCwKKyAgICAiRnVuY3Rpb24iOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5D
b2xvcnMucHVycGxlLCAKKyAgICAiTnVtYmVyIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcu
Q29sb3JzLmJsdWUsCisgICAgIkludGVnZXIiOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5D
b2xvcnMuYmx1ZSwKKyAgICAiVW5kZWZpbmVkIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcu
Q29sb3JzLmdyYXksCisgICAgIk51bGwiOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xv
cnMuZ3JheSwKKyAgICAiKD8pIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JzLmdy
YXksCisgICAgIkJvb2xlYW4iOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMucHVy
cGxlLAorICAgICIobWFueSkiOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvcnMub3Jh
bmdlCit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5wcm90b3R5cGUgPSB7CisgICAg
Y29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LAorICAgIF9fcHJvdG9fXzog
V2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisKKyAgICAvLyBQdWJsaWMKKworICAgIHVw
ZGF0ZTogZnVuY3Rpb24odHlwZXMpCisgICAgeworICAgICAgICB2YXIgdGl0bGUgPSB0eXBlcy5k
aXNwbGF5VHlwZU5hbWU7CisgICAgICAgIHRoaXMuZWxlbWVudC50ZXh0Q29udGVudCA9IHRpdGxl
OworICAgICAgICB0aGlzLl90eXBlcyA9IHR5cGVzOworICAgICAgICB2YXIgaGFzaFN0cmluZyA9
IHRpdGxlW3RpdGxlLmxlbmd0aCAtIDFdID09PSAiPyIgPyB0aXRsZS5zbGljZSgwLCB0aXRsZS5s
ZW5ndGggLSAxKSA6IHRpdGxlOworICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3Vu
ZENvbG9yID0gV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JGb3JUeXBlW2hhc2hTdHJp
bmddIHx8IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9ycy5ncmVlbjsKKyAgICB9LAor
CisgICAgLy8gUHJpdmF0ZQorCisgICAgX3NldFVwTW91c2VvdmVySGFuZGxlcnM6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIHRpbWVvdXRJ
RCA9IG51bGw7CisKKyAgICAgICAgdGhpcy5lbGVtZW50Lm9ubW91c2VvdmVyID0gZnVuY3Rpb24o
KSAKKyAgICAgICAgeworICAgICAgICAgICAgZnVuY3Rpb24gc2hvd1BvcG92ZXJBZnRlckRlbGF5
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aW1lb3V0SUQgPSBudWxsOworCisg
ICAgICAgICAgICAgICAgdmFyIGRvbVJlY3QgPSBzZWxmLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7CisgICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG5ldyBXZWJJbnNwZWN0b3Iu
UmVjdChkb21SZWN0LmxlZnQsIGRvbVJlY3QudG9wLCBkb21SZWN0LndpZHRoLCBkb21SZWN0Lmhl
aWdodCk7CisgICAgICAgICAgICAgICAgc2VsZi5fdG9rZW5Bbm5vdGF0b3Iuc291cmNlQ29kZVRl
eHRFZGl0b3Iuc2hvd1BvcG92ZXJGb3JUeXBlcyhzZWxmLl90eXBlcywgYm91bmRzLCBzZWxmLl9w
b3BvdmVyVGl0bGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc2VsZi5fc2hv
dWxkU2hvd1BvcG92ZXIoKSkKKyAgICAgICAgICAgICAgICB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0
KHNob3dQb3BvdmVyQWZ0ZXJEZWxheSwgMzUwKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMu
ZWxlbWVudC5vbm1vdXNlb3V0ID0gZnVuY3Rpb24oKSAKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHRpbWVvdXRJRCAhPT0gbnVsbCkKKyAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGlt
ZW91dElEKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfc2hvdWxkU2hvd1BvcG92ZXI6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICgodGhpcy5fdHlwZXMuZ2xvYmFsUHJpbWl0aXZl
VHlwZU5hbWVzICYmIHRoaXMuX3R5cGVzLmdsb2JhbFByaW1pdGl2ZVR5cGVOYW1lcy5sZW5ndGgg
PiAxKSB8fCAodGhpcy5fdHlwZXMubG9jYWxQcmltaXRpdmVUeXBlTmFtZXMgJiYgdGhpcy5fdHlw
ZXMubG9jYWxQcmltaXRpdmVUeXBlTmFtZXMubGVuZ3RoID4gMSkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgICAgICBpZiAoKHRoaXMuX3R5cGVzLmdsb2JhbFN0cnVjdHVyZXMgJiYg
dGhpcy5fdHlwZXMuZ2xvYmFsU3RydWN0dXJlcy5sZW5ndGgpIHx8ICh0aGlzLl90eXBlcy5sb2Nh
bFN0cnVjdHVyZXMgJiYgdGhpcy5fdHlwZXMubG9jYWxTdHJ1Y3R1cmVzLmxlbmd0aCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236719</attachid>
            <date>2014-08-16 12:01:53 -0700</date>
            <delta_ts>2014-08-21 16:12:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>52950</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2Fs
aXplZFN0cmluZ3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2Fs
aXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwkocmV2aXNpb24gMTcyNjU0KQor
KysgU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVk
U3RyaW5ncy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjI3LDYgKzIyNyw3IEBACiAAbABvAGMAYQBs
AGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABpAGQAZQAgAHQAaABlACAAJQBzACAAZABlAHQA
YQBpAGwAcwAgAHMAaQBkAGUAYgBhAHIAIAAoACUAcwApACIAXQAgAD0AIAAiAEgAaQBkAGUAIAB0
AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBsAHMAIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiADsA
CiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABpAGQAZQAgAHQAaABlACAA
JQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBkAGUAYgBhAHIAIgBdACAAPQAgACIASABp
AGQAZQAgAHQAaABlACAAJQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBkAGUAYgBhAHIA
IgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAaQBkAGUAIAB0AGgA
ZQAgACUAcwAgAG4AYQB2AGkAZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAi
AF0AIAA9ACAAIgBIAGkAZABlACAAdABoAGUAIAAlAHMAIABuAGEAdgBpAGcAYQB0AGkAbwBuACAA
cwBpAGQAZQBiAGEAcgAgACgAJQBzACkAIgA7AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkA
bgBnAHMAWwAiAEgAaQBkAGUAIAB0AHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACIAXQAg
AD0AIAAiAEgAaQBkAGUAIAB0AHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACIAOwAKIABs
AG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBIAG8AcwB0ACIAXQAgAD0AIAAiAEgA
bwBzAHQAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEkAYwBvAG4A
IABPAG4AbAB5ACIAXQAgAD0AIAAiAEkAYwBvAG4AIABPAG4AbAB5ACIAOwAKIABsAG8AYwBhAGwA
aQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBJAGMAbwBuACAAYQBuAGQAIABUAGUAeAB0ACAAKABI
AG8AcgBpAHoAbwBuAHQAYQBsACkAIgBdACAAPQAgACIASQBjAG8AbgAgAGEAbgBkACAAVABlAHgA
dAAgACgASABvAHIAaQB6AG8AbgB0AGEAbAApACIAOwAKQEAgLTMzNCw2ICszMzUsNyBAQAogAGwA
bwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFAAcgBvAGMAZQBzAHMAaQBuAGcAIABJ
AG4AcwB0AHIAdQBjAHQAaQBvAG4AIgBdACAAPQAgACIAUAByAG8AYwBlAHMAcwBpAG4AZwAgAEkA
bgBzAHQAcgB1AGMAdABpAG8AbgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcA
cwBbACIAUAByAG8AZgBpAGwAZQAgACUAZAAiAF0AIAA9ACAAIgBQAHIAbwBmAGkAbABlACAAJQBk
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBQAHIAbwBwAGUAcgB0
AGkAZQBzACIAXQAgAD0AIAAiAFAAcgBvAHAAZQByAHQAaQBlAHMAIgA7AAorAGwAbwBjAGEAbABp
AHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFAAcgBvAHQAbwB0AHkAcABlACIAXQAgAD0AIAAiAFAA
cgBvAHQAbwB0AHkAcABlACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsA
IgBRAHUAZQByAHkAIABQAGEAcgBhAG0AZQB0AGUAcgBzACIAXQAgAD0AIAAiAFEAdQBlAHIAeQAg
AFAAYQByAGEAbQBlAHQAZQByAHMAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBn
AHMAWwAiAFEAdQBlAHIAeQAgAFMAdAByAGkAbgBnACIAXQAgAD0AIAAiAFEAdQBlAHIAeQAgAFMA
dAByAGkAbgBnACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGEA
ZABpAGEAbAAgAEcAcgBhAGQAaQBlAG4AdAAiAF0AIAA9ACAAIgBSAGEAZABpAGEAbAAgAEcAcgBh
AGQAaQBlAG4AdAAiADsACkBAIC0zNjQsNiArMzY2LDcgQEAKIABsAG8AYwBhAGwAaQB6AGUAZABT
AHQAcgBpAG4AZwBzAFsAIgBSAGUAcwBvAHUAcgBjAGUAcwAiAF0AIAA9ACAAIgBSAGUAcwBvAHUA
cgBjAGUAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHMA
cABvAG4AcwBlACIAXQAgAD0AIAAiAFIAZQBzAHAAbwBuAHMAZQAiADsACiAAbABvAGMAYQBsAGkA
egBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHMAcABvAG4AcwBlACAASABlAGEAZABlAHIAcwAi
AF0AIAA9ACAAIgBSAGUAcwBwAG8AbgBzAGUAIABIAGUAYQBkAGUAcgBzACIAOwAKKwBsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUAdAB1AHIAbgAgAHQAeQBwAGUAIABpAG4A
ZgBvAHIAbQBhAHQAaQBvAG4AIABmAG8AcgAgAGYAdQBuAGMAdABpAG8AbgAiAF0AIAA9ACAAIgBS
AGUAdAB1AHIAbgAgAHQAeQBwAGUAIABpAG4AZgBvAHIAbQBhAHQAaQBvAG4AIABmAG8AcgAgAGYA
dQBuAGMAdABpAG8AbgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIA
UgBlAHYAZQBhAGwAIABpAG4AIABEAE8ATQAgAFQAcgBlAGUAIgBdACAAPQAgACIAUgBlAHYAZQBh
AGwAIABpAG4AIABEAE8ATQAgAFQAcgBlAGUAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdABy
AGkAbgBnAHMAWwAiAFIAZQB2AGUAYQBsACAAaQBuACAARABlAGIAdQBnAGcAZQByACAATgBhAHYA
aQBnAGEAdABpAG8AbgAgAFMAaQBkAGUAYgBhAHIAIgBdACAAPQAgACIAUgBlAHYAZQBhAGwAIABp
AG4AIABEAGUAYgB1AGcAZwBlAHIAIABOAGEAdgBpAGcAYQB0AGkAbwBuACAAUwBpAGQAZQBiAGEA
cgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHYAZQBhAGwA
IABpAG4AIABPAHIAaQBnAGkAbgBhAGwAIABSAGUAcwBvAHUAcgBjAGUAIgBdACAAPQAgACIAUgBl
AHYAZQBhAGwAIABpAG4AIABPAHIAaQBnAGkAbgBhAGwAIABSAGUAcwBvAHUAcgBjAGUAIgA7AApA
QCAtNDAzLDYgKzQwNiw3IEBACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIA
UwBoAG8AdwAgAHQAaABlACAAJQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBkAGUAYgBh
AHIAIAAoACUAcwApACIAXQAgAD0AIAAiAFMAaABvAHcAIAB0AGgAZQAgACUAcwAgAG4AYQB2AGkA
ZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiADsACiAAbABvAGMAYQBsAGkA
egBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAgAHQAaQBtAGUAcwAgAGEAcwAgAGEAYgBz
AG8AbAB1AHQAZQAgAHQAaQBtAGUAcwAiAF0AIAA9ACAAIgBTAGgAbwB3ACAAdABpAG0AZQBzACAA
YQBzACAAYQBiAHMAbwBsAHUAdABlACAAdABpAG0AZQBzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUA
ZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAdABpAG0AZQBzACAAYQBzACAAcABlAHIAYwBl
AG4AdABhAGcAZQBzACIAXQAgAD0AIAAiAFMAaABvAHcAIAB0AGkAbQBlAHMAIABhAHMAIABwAGUA
cgBjAGUAbgB0AGEAZwBlAHMAIgA7AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMA
WwAiAFMAaABvAHcAIAB0AHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACIAXQAgAD0AIAAi
AFMAaABvAHcAIAB0AHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACIAOwAKIABsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGkAegBlACIAXQAgAD0AIAAiAFMAaQB6AGUA
IgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAbQBhAGwAbAAgAEkA
YwBvAG4AcwAiAF0AIAA9ACAAIgBTAG0AYQBsAGwAIABJAGMAbwBuAHMAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAbwBjAGsAZQB0ACIAXQAgAD0AIAAiAFMAbwBj
AGsAZQB0ACIAOwAKQEAgLTQ0OSw2ICs0NTMsNyBAQAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdABy
AGkAbgBnAHMAWwAiAFQAcgBhAG4AcwBmAGUAcgBlAGQAIgBdACAAPQAgACIAVAByAGEAbgBzAGYA
ZQByAGUAZAAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAVAB5AHAA
ZQAiAF0AIAA9ACAAIgBUAHkAcABlACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4A
ZwBzAFsAIgBUAHkAcABlACAASQBzAHMAdQBlACIAXQAgAD0AIAAiAFQAeQBwAGUAIABJAHMAcwB1
AGUAIgA7AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFQAeQBwAGUAIABp
AG4AZgBvAHIAbQBhAHQAaQBvAG4AIABmAG8AcgAgAHYAYQByAGkAYQBiAGwAZQAiAF0AIAA9ACAA
IgBUAHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACAAZgBvAHIAIAB2AGEAcgBpAGEAYgBs
AGUAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFUAbgBrAG4AbwB3
AG4AIABuAG8AZABlACIAXQAgAD0AIAAiAFUAbgBrAG4AbwB3AG4AIABuAG8AZABlACIAOwAKIABs
AG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBVAG4AdABpAHQAbABlAGQAIgBdACAA
PQAgACIAVQBuAHQAaQB0AGwAZQBkACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4A
ZwBzAFsAIgBVAHMAZQByACAAQQBnAGUAbgB0ACAAUwB0AHkAbABlAHMAaABlAGUAdAAiAF0AIAA9
ACAAIgBVAHMAZQByACAAQQBnAGUAbgB0ACAAUwB0AHkAbABlAHMAaABlAGUAdAAiADsACkluZGV4
OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCShyZXZp
c2lvbiAxNzI2NTQpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWlu
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsNyBAQAogICAgIDxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iVmlld3MvVGltZWxpbmVWaWV3LmNzcyI+CiAgICAgPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9Ub29sYmFyLmNzcyI+CiAgICAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSJWaWV3cy9UcmVlRWxlbWVudFN0YXR1c0J1dHRvbi5jc3MiPgorICAg
IDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvVHlwZVRva2VuVmlldy5jc3MiPgog
CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJDb250cm9sbGVycy9Db2RlTWlycm9y
Q29tcGxldGlvbkNvbnRyb2xsZXIuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9IkNvbnRyb2xsZXJzL0NvZGVNaXJyb3JEcmFnVG9BZGp1c3ROdW1iZXJDb250cm9sbGVyLmNz
cyI+CkBAIC00NjAsNiArNDYyLDggQEAKICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVG9vbGJhci5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1RyZWVFbGVtZW50U3RhdHVzQnV0
dG9uLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHJlZU91dGxpbmVEYXRh
R3JpZFN5bmNocm9uaXplci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1R5
cGVQcm9wZXJ0aWVzU2VjdGlvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpZXdz
L1R5cGVUb2tlblZpZXcuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xs
ZXJzL0NvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5qcyI+PC9zY3JpcHQ+CiAKQEAgLTQ5MSw2
ICs0OTUsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9Tb3VyY2VNYXBNYW5hZ2Vy
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvU3RvcmFnZU1hbmFn
ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9UaW1lbGluZU1h
bmFnZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9UeXBlVG9r
ZW5Bbm5vdGF0b3IuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkJhc2UvTWFpbi5q
cyI+PC9zY3JpcHQ+CiAKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0Jhc2UvTWFpbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9CYXNlL01haW4uanMJKHJldmlzaW9uIDE3MjY1NCkKKysrIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMTYx
LDYgKzE2MSwxMCBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogCiAgICAgdGhp
cy5zaG93U2hhZG93RE9NU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygic2hvdy1z
aGFkb3ctZG9tIiwgZmFsc2UpOwogICAgIHRoaXMuc2hvd1JlcGxheUludGVyZmFjZVNldHRpbmcg
PSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoInNob3ctd2ViLXJlcGxheSIsIGZhbHNlKTsKKyAg
ICAKKyAgICB0aGlzLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZyA9IG5ldyBX
ZWJJbnNwZWN0b3IuU2V0dGluZygic2hvdy1qYXZhc2NyaXB0LXR5cGUtaW5mb3JtYXRpb24iLCBm
YWxzZSk7CisgICAgaWYgKHRoaXMuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5n
LnZhbHVlKQorICAgICAgICBSdW50aW1lQWdlbnQuZW5hYmxlSGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZygpOwogCiAgICAgdGhpcy5tb3VzZUNvb3JkcyA9IHsKICAgICAgICAgeDogMCwKSW5kZXg6
IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJy
b3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yVG9rZW5UcmFja2lu
Z0NvbnRyb2xsZXIuanMJKHJldmlzaW9uIDE3MjY1NCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJv
bGxlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksOCBAQCBXZWJJbnNwZWN0b3IuQ29k
ZU1pcnJvclRva2VuVHJhY2tpbmdDb250CiAgICAgTm9uZTogIm5vbmUiLAogICAgIE5vblN5bWJv
bFRva2VuczogIm5vbi1zeW1ib2wtdG9rZW5zIiwKICAgICBKYXZhU2NyaXB0RXhwcmVzc2lvbjog
ImphdmFzY3JpcHQtZXhwcmVzc2lvbiIsCi0gICAgTWFya2VkVG9rZW5zOiAibWFya2VkLXRva2Vu
cyIKKyAgICBNYXJrZWRUb2tlbnM6ICJtYXJrZWQtdG9rZW5zIiwKKyAgICBKYXZhU2NyaXB0VHlw
ZUluZm9ybWF0aW9uOiAiamF2YXNjcmlwdC10eXBlLWluZm9ybWF0aW9uIgogfQogCiBXZWJJbnNw
ZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKQEAg
LTM4OSw2ICszOTAsNyBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250
CiAgICAgICAgICAgICB0aGlzLl9jYW5kaWRhdGUgPSB0aGlzLl9wcm9jZXNzTm9uU3ltYm9sVG9r
ZW4oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0RXhwcmVzc2lvbjoK
KyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9s
bGVyLk1vZGUuSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjoKICAgICAgICAgICAgIHRoaXMuX2Nh
bmRpZGF0ZSA9IHRoaXMuX3Byb2Nlc3NKYXZhU2NyaXB0RXhwcmVzc2lvbigpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNr
aW5nQ29udHJvbGxlci5Nb2RlLk1hcmtlZFRva2VuczoKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9Gb3JtYXR0ZXJTb3VyY2VNYXAuanMJKHJldmlzaW9uIDE3MjY1NCkKKysrIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5q
cwkod29ya2luZyBjb3B5KQpAQCAtNDUsMTUgKzQ1LDI3IEBAIFdlYkluc3BlY3Rvci5Gb3JtYXR0
ZXJTb3VyY2VNYXAucHJvdG90eXAKICAgICBvcmlnaW5hbFRvRm9ybWF0dGVkOiBmdW5jdGlvbihs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCiAgICAgewogICAgICAgICB2YXIgb3JpZ2luYWxQb3Np
dGlvbiA9IHRoaXMuX2xvY2F0aW9uVG9Qb3NpdGlvbih0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdz
LCBsaW5lTnVtYmVyIHx8IDAsIGNvbHVtbk51bWJlciB8fCAwKTsKKyAgICAgICAgcmV0dXJuIHRo
aXMub3JpZ2luYWxQb3NpdGlvblRvRm9ybWF0dGVkKG9yaWdpbmFsUG9zaXRpb24pOworICAgIH0s
CisKKyAgICBvcmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQ6IGZ1bmN0aW9uKG9yaWdpbmFsUG9z
aXRpb24pCisgICAgewogICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9jb252
ZXJ0UG9zaXRpb24odGhpcy5fbWFwcGluZy5vcmlnaW5hbCwgdGhpcy5fbWFwcGluZy5mb3JtYXR0
ZWQsIG9yaWdpbmFsUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xv
Y2F0aW9uKHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRQb3NpdGlvbik7CiAg
ICAgfSwKIAorCiAgICAgZm9ybWF0dGVkVG9PcmlnaW5hbDogZnVuY3Rpb24obGluZU51bWJlciwg
Y29sdW1uTnVtYmVyKQogICAgIHsKKyAgICAgICAgdmFyIG9yaWdpbmFsUG9zaXRpb24gPSB0aGlz
LmZvcm1hdHRlZFRvT3JpZ2luYWxPZmZzZXQobGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uVG9Mb2NhdGlvbih0aGlzLl9vcmlnaW5hbExpbmVF
bmRpbmdzLCBvcmlnaW5hbFBvc2l0aW9uKTsKKyAgICB9LAorCisgICAgZm9ybWF0dGVkVG9Pcmln
aW5hbE9mZnNldDogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAgIHsKICAg
ICAgICAgdmFyIGZvcm1hdHRlZFBvc2l0aW9uID0gdGhpcy5fbG9jYXRpb25Ub1Bvc2l0aW9uKHRo
aXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLCBsaW5lTnVtYmVyIHx8IDAsIGNvbHVtbk51bWJlciB8
fCAwKTsKICAgICAgICAgdmFyIG9yaWdpbmFsUG9zaXRpb24gPSB0aGlzLl9jb252ZXJ0UG9zaXRp
b24odGhpcy5fbWFwcGluZy5mb3JtYXR0ZWQsIHRoaXMuX21hcHBpbmcub3JpZ2luYWwsIGZvcm1h
dHRlZFBvc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uVG9Mb2NhdGlvbih0
aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzLCBvcmlnaW5hbFBvc2l0aW9uKTsKKyAgICAgICAgcmV0
dXJuIG9yaWdpbmFsUG9zaXRpb247CiAgICAgfSwKIAogICAgIC8vIFByaXZhdGUKSW5kZXg6IFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFu
bm90YXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5B
bm5vdGF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CitXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yID0gZnVuY3Rpb24oc291cmNlQ29kZVRl
eHRFZGl0b3IsIHNjcmlwdCkgCit7CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMp
OworCisgICAgY29uc29sZS5hc3NlcnQoc291cmNlQ29kZVRleHRFZGl0b3IgJiYgc291cmNlQ29k
ZVRleHRFZGl0b3IgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Is
IHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKKyAgICBjb25zb2xlLmFzc2VydChzY3JpcHQsIHNjcmlw
dCk7CisKKyAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7CisgICAgdGhpcy5fc291cmNlQ29kZVRl
eHRFZGl0b3IgPSBzb3VyY2VDb2RlVGV4dEVkaXRvcjsKKyAgICB0aGlzLl90eXBlVG9rZW5Ob2Rl
cyA9IFtdOworICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcyA9IFtdOworICAgIHRoaXMuX3Rp
bWVvdXRJZGVudGlmaWVyID0gbnVsbDsKKyAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOworfTsK
KworV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUgPSB7CisgICAgY29u
c3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IsCisgICAgX19wcm90b19f
OiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKworICAgIC8vIFB1YmxpYworCisgICAg
Z2V0IGlzQWN0aXZlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZTsKKyAg
ICB9LAorCisgICAgZ2V0IHNvdXJjZUNvZGVUZXh0RWRpdG9yKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvcjsKKyAgICB9LAorCisgICAgcGF1c2U6IGZ1
bmN0aW9uKCkgCisgICAgeworICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOwor
ICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOworICAgIH0sCisKKyAgICByZXN1bWU6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVlZGVkKCk7Cisg
ICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5faW5zZXJ0QW5ub3Rh
dGlvbnMoKTsKKyAgICB9LAorCisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHRoaXMuX2NsZWFyVGltZW91dElmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX2lzQWN0aXZlID0g
dHJ1ZTsKKyAgICAgICAgdGhpcy5fY2xlYXJUeXBlVG9rZW5zKCk7CisgICAgICAgIHRoaXMuX2lu
c2VydEFubm90YXRpb25zKCk7CisgICAgfSwKKworICAgIHRvZ2dsZVR5cGVBbm5vdGF0aW9uczog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2lzQWN0aXZlKSB7CisgICAgICAg
ICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fY2xlYXJUeXBl
VG9rZW5zKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9
IHRydWU7CisgICAgICAgICAgICB0aGlzLnJlc2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gdGhpcy5faXNBY3RpdmU7CisgICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIF9p
bnNlcnRBbm5vdGF0aW9uczogZnVuY3Rpb24oKSAKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5f
aXNBY3RpdmUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNjcmlwdFN5bnRh
eFRyZWUgPSB0aGlzLl9zY3JpcHQuX3NjcmlwdFN5bnRheFRyZWU7CisgICAgICAgIHZhciBzb3Vy
Y2VJRCA9IHRoaXMuX3NjcmlwdC5pZDsKKworICAgICAgICBpZiAoIXNjcmlwdFN5bnRheFRyZWUp
IHsKKyAgICAgICAgICAgIHRoaXMuX3NjcmlwdC5yZXF1ZXN0U2NyaXB0U3ludGF4VHJlZShmdW5j
dGlvbihzeW50YXhUcmVlKSB7CisgICAgICAgICAgICAgICAgLy8gQWZ0ZXIgcmVxdWVzdGluZyB0
aGUgdHJlZSwgd2Ugc3RpbGwgbWlnaHQgZ2V0IGEgbnVsbCB0cmVlIGZyb20gYSBwYXJzZSBlcnJv
ci4KKyAgICAgICAgICAgICAgICBpZiAoc3ludGF4VHJlZSkKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7CisK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc2NyaXB0U3lu
dGF4VHJlZS5wYXJzZWRTdWNjZXNzZnVsbHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdmFyIGNvZGVNaXJyb3IgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvci5fY29kZU1pcnJv
cjsKKyAgICAgICAgdmFyIHZpc2libGVSYW5nZSA9IGNvZGVNaXJyb3IuZ2V0Vmlld3BvcnQoKTsK
KyAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gbnVsbDsKKyAgICAgICAgdmFyIGVuZE9mZnNldCA9
IG51bGw7CisgICAgICAgIHZhciBzb3VyY2VNYXAgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRv
ci5mb3JtYXR0ZXJTb3VyY2VNYXA7CisKKyAgICAgICAgaWYgKHNvdXJjZU1hcCkgeworICAgICAg
ICAgICAgc3RhcnRPZmZzZXQgPSBzb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldChN
YXRoLm1heCh2aXNpYmxlUmFuZ2UuZnJvbSAtIDEsIDApLCAwKTsKKyAgICAgICAgICAgIGVuZE9m
ZnNldCA9IHNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0KHZpc2libGVSYW5nZS50
byAtIDEsIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBj
b2RlTWlycm9yLmdldERvYygpLmluZGV4RnJvbVBvcyh7bGluZTogdmlzaWJsZVJhbmdlLmZyb20s
IGNoOiAwfSk7CisgICAgICAgICAgICBlbmRPZmZzZXQgPSBjb2RlTWlycm9yLmdldERvYygpLmlu
ZGV4RnJvbVBvcyh7bGluZTogdmlzaWJsZVJhbmdlLnRvLCBjaDogMH0pOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7CisgICAgICAgIHZhciBhbGxOb2Rl
c0luUmFuZ2UgPSBzY3JpcHRTeW50YXhUcmVlLmZpbHRlckJ5UmFuZ2Uoc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCk7CisgICAgICAgIHNjcmlwdFN5bnRheFRyZWUudXBkYXRlVHlwZXMoc291cmNlSUQs
IGFsbE5vZGVzSW5SYW5nZSwgZnVuY3Rpb24gYWZ0ZXJUeXBlVXBkYXRlcygpIHsKKyAgICAgICAg
ICAgIC8vIEJlY2F1c2UgdGhpcyBpcyBhbiBhc3luY2hyb25vdXMgY2FsbCwgd2UgY291bGQgaGF2
ZSBiZWVuIGRlYWN0aXZhdGVkIGJlZm9yZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVk
LgorICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIGFsbE5vZGVzSW5SYW5nZS5mb3JFYWNoKHRoaXMuX2luc2VydFR5
cGVUb2tlbnNGb3JFYWNoTm9kZSwgdGhpcyk7CisgICAgICAgICAgICBhbGxOb2Rlc0luUmFuZ2Uu
Zm9yRWFjaCh0aGlzLl91cGRhdGVUeXBlVG9rZW5zRm9yRWFjaE5vZGUpOworCisgICAgICAgICAg
ICB2YXIgdG90YWxUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTsKKyAgICAgICAgICAgIHZh
ciB0aW1lb3V0VGltZSA9IE1hdGgubWluKE1hdGgubWF4KDc1MDAsIHRvdGFsVGltZSksIDggKiB0
b3RhbFRpbWUpOworCisgICAgICAgICAgICB0aGlzLl90aW1lb3V0SWRlbnRpZmllciA9IHNldFRp
bWVvdXQoZnVuY3Rpb24gdGltZW91dFVwZGF0ZSgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl90
aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0QW5u
b3RhdGlvbnMoKTsKKyAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgdGltZW91dFRpbWUpOworICAg
ICAgICB9LmJpbmQodGhpcykpOworICAgIH0sCisKKyAgICBfaW5zZXJ0VHlwZVRva2Vuc0ZvckVh
Y2hOb2RlOiBmdW5jdGlvbihub2RlKQorICAgIHsKKyAgICAgICAgdmFyIHNjcmlwdFN5bnRheFRy
ZWUgPSB0aGlzLl9zY3JpcHQuX3NjcmlwdFN5bnRheFRyZWU7CisKKyAgICAgICAgc3dpdGNoIChu
b2RlLnR5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5GdW5jdGlvbkRlY2xhcmF0aW9uOgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAgICAgICAg
IGZvciAodmFyIHBhcmFtIG9mIG5vZGUucGFyYW1zKSB7CisgICAgICAgICAgICAgICAgaWYgKCFw
YXJhbS5fYXR0YWNobWVudHMuX3R5cGVUb2tlbiAmJiBwYXJhbS5fYXR0YWNobWVudHMuX3R5cGVz
ICYmIHBhcmFtLl9hdHRhY2htZW50cy5fdHlwZXMuZGlzcGxheVR5cGVOYW1lKQorICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9pbnNlcnRUb2tlbihwYXJhbS5yYW5nZVswXSwgcGFyYW0sIGZhbHNl
LCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUudmFyaWFibGUsIHBhcmFtLm5h
bWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBhIGZ1bmN0aW9uIGRvZXMg
bm90IGhhdmUgYW4gZXhwbGljaXQgcmV0dXJuIHR5cGUsIHRoZW4gZG9uJ3Qgc2hvdyBhIHJldHVy
biB0eXBlIHVubGVzcyB3ZSB0aGluayBpdCdzIGEgY29uc3RydWN0b3IuCisgICAgICAgICAgICB2
YXIgZnVuY3Rpb25SZXR1cm5UeXBlID0gbm9kZS5fYXR0YWNobWVudHMuX3JldHVyblR5cGVzOwor
ICAgICAgICAgICAgaWYgKG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlVG9rZW4gfHwgIWZ1bmN0aW9u
UmV0dXJuVHlwZSB8fCAhZnVuY3Rpb25SZXR1cm5UeXBlLmRpc3BsYXlUeXBlTmFtZSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKHNjcmlwdFN5bnRheFRyZWUuY29u
dGFpbnNOb25FbXB0eVJldHVyblN0YXRlbWVudChub2RlLmJvZHkpIHx8IGZ1bmN0aW9uUmV0dXJu
VHlwZS5kaXNwbGF5VHlwZU5hbWUgIT09ICJVbmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAg
dmFyIGZ1bmN0aW9uTmFtZSA9IG5vZGUuaWQgPyBub2RlLmlkLm5hbWUgOiBudWxsOworICAgICAg
ICAgICAgICAgIHRoaXMuX2luc2VydFRva2VuKG5vZGUuaXNHZXR0ZXJPclNldHRlciA/IG5vZGUu
Z2V0dGVyT3JTZXR0ZXJSYW5nZVswXSA6IG5vZGUucmFuZ2VbMF0sIG5vZGUsIAorICAgICAgICAg
ICAgICAgICAgICB0cnVlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUucmV0
dXJuU3RhdGVtZW50LCBmdW5jdGlvbk5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuVmFyaWFibGVEZWNsYXJhdG9yOgorICAgICAgICAgICAgaWYgKCFub2RlLl9hdHRhY2htZW50
cy5fdHlwZVRva2VuICYmIG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlcyAmJiBub2RlLl9hdHRhY2ht
ZW50cy5fdHlwZXMuZGlzcGxheVR5cGVOYW1lKQorICAgICAgICAgICAgICAgIHRoaXMuX2luc2Vy
dFRva2VuKG5vZGUuaWQucmFuZ2VbMF0sIG5vZGUsIGZhbHNlLCBXZWJJbnNwZWN0b3IuVHlwZVRv
a2VuVmlldy5UaXRsZVR5cGUudmFyaWFibGUsIG5vZGUuaWQubmFtZSk7CisKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfSwKKworICAgIF9pbnNlcnRUb2tlbjogZnVuY3Rpb24o
b2Zmc2V0LCBub2RlLCBzaG91bGRUcmFuc2xhdGVPZmZzZXRUb0FmdGVyUGFyYW1ldGVyTGlzdCwg
dHlwZVRva2VuVGl0bGVUeXBlLCBmdW5jdGlvbk9yVmFyaWFibGVOYW1lKQorICAgIHsKKyAgICAg
ICAgdmFyIHNvdXJjZU1hcCA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLmZvcm1hdHRlclNv
dXJjZU1hcDsKKyAgICAgICAgdmFyIGNvZGVNaXJyb3IgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVk
aXRvci5fY29kZU1pcnJvcjsKKyAgICAgICAgdmFyIHN0YXJ0ID0gbnVsbDsgCisgICAgICAgIHZh
ciBsb2NhdGlvbjsgCisKKyAgICAgICAgaWYgKHNvdXJjZU1hcCkgeworICAgICAgICAgICAgbG9j
YXRpb24gPSBzb3VyY2VNYXAub3JpZ2luYWxQb3NpdGlvblRvRm9ybWF0dGVkKG9mZnNldCk7Cisg
ICAgICAgICAgICBzdGFydCA9IHsgbGluZTogbG9jYXRpb24ubGluZU51bWJlciwgY2g6IGxvY2F0
aW9uLmNvbHVtbk51bWJlciB9OworICAgICAgICAgICAgb2Zmc2V0ID0gY29kZU1pcnJvci5nZXRE
b2MoKS5pbmRleEZyb21Qb3Moc3RhcnQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0
YXJ0ID0gY29kZU1pcnJvci5nZXREb2MoKS5wb3NGcm9tSW5kZXgob2Zmc2V0KTsKKworICAgICAg
ICB2YXIgc291cmNlU3RyaW5nID0gY29kZU1pcnJvci5nZXRWYWx1ZSgpOworICAgICAgICBpZiAo
c2hvdWxkVHJhbnNsYXRlT2Zmc2V0VG9BZnRlclBhcmFtZXRlckxpc3QpIHsKKyAgICAgICAgICAg
IC8vIFRyYW5zbGF0ZSB0aGUgcG9zaXRpb24gdG8gdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMgb2Yg
dGhlIGZ1bmN0aW9uIGFyZ3VtZW50czoKKyAgICAgICAgICAgIC8vIHRyYW5zbGF0ZSBmcm9tOiBb
dHlwZS10b2tlbl0gZnVuY3Rpb24gZm9vKCkge30gPT4gdG86IGZ1bmN0aW9uIGZvbygpIFt0eXBl
LXRva2VuXSB7fQorICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5fdHJhbnNsYXRlVG9PZmZzZXRB
ZnRlckZ1bmN0aW9uUGFyYW1ldGVyTGlzdChub2RlLCBvZmZzZXQsIHNvdXJjZVN0cmluZyk7Cisg
ICAgICAgICAgICBzdGFydCA9IGNvZGVNaXJyb3IuZ2V0RG9jKCkucG9zRnJvbUluZGV4KG9mZnNl
dCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3RlOiBDb2RlTWlycm9yIGJvb2ttYXJrcyBy
ZW5kZXIgdG8gdGhlIGxlZnQgb2YgdGhlIGNoYXJhY3RlciB0aGV5J3JlIGJlaW5nIGRpc3BsYXll
ZCBuZXh0IHRvLiAKKyAgICAgICAgLy8gVGhpcyBpcyB3aHkgcmlnaHQgbWFyZ2luIGNoZWNrcyB0
aGUgY3VycmVudCBvZmZzZXQuIEFuZCB0aGlzIGlzIG9rYXkgdG8gZG8gYmVjYXVzZSBKYXZhU2Ny
aXB0IGNhbid0IGJlIHdyaXR0ZW4gcmlnaHQtdG8tbGVmdC4KKyAgICAgICAgdmFyIGlzU3BhY2VS
ZWdleHAgPSAvXHMvOworICAgICAgICB2YXIgc2hvdWxkSGF2ZUxlZnRNYXJnaW4gPSBvZmZzZXQg
IT09IDAgJiYgIWlzU3BhY2VSZWdleHAudGVzdChzb3VyY2VTdHJpbmdbb2Zmc2V0IC0gMV0pOwor
ICAgICAgICB2YXIgc2hvdWxkSGF2ZVJpZ2h0TWFyZ2luID0gIWlzU3BhY2VSZWdleHAudGVzdChz
b3VyY2VTdHJpbmdbb2Zmc2V0XSk7CisgICAgICAgIHZhciB0eXBlVG9rZW4gPSBuZXcgV2ViSW5z
cGVjdG9yLlR5cGVUb2tlblZpZXcodGhpcywgc2hvdWxkSGF2ZVJpZ2h0TWFyZ2luLCBzaG91bGRI
YXZlTGVmdE1hcmdpbiwgdHlwZVRva2VuVGl0bGVUeXBlLCBmdW5jdGlvbk9yVmFyaWFibGVOYW1l
KTsKKyAgICAgICAgdmFyIGJvb2ttYXJrID0gY29kZU1pcnJvci5zZXRVbmlxdWVCb29rbWFyayhz
dGFydCwge3dpZGdldDogdHlwZVRva2VuLmVsZW1lbnR9KTsKKyAgICAgICAgbm9kZS5fYXR0YWNo
bWVudHMuX3R5cGVUb2tlbiA9IHR5cGVUb2tlbjsKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuTm9k
ZXMucHVzaChub2RlKTsKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtzLnB1c2goYm9v
a21hcmspOworICAgIH0sCisKKyAgICBfdXBkYXRlVHlwZVRva2Vuc0ZvckVhY2hOb2RlOiBmdW5j
dGlvbihub2RlKSAKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25EZWNs
YXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2Rl
VHlwZS5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICBub2RlLnBhcmFtcy5mb3JFYWNo
KGZ1bmN0aW9uKHBhcmFtKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtLl9hdHRhY2htZW50
cy5fdHlwZVRva2VuKQorICAgICAgICAgICAgICAgICAgICBwYXJhbS5fYXR0YWNobWVudHMuX3R5
cGVUb2tlbi51cGRhdGUocGFyYW0uX2F0dGFjaG1lbnRzLl90eXBlcyk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIGlmIChub2RlLl9hdHRhY2htZW50cy5fdHlwZVRva2VuKQorICAgICAg
ICAgICAgICAgIG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlVG9rZW4udXBkYXRlKG5vZGUuX2F0dGFj
aG1lbnRzLl9yZXR1cm5UeXBlcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0b3I6
CisgICAgICAgICAgICBpZiAobm9kZS5fYXR0YWNobWVudHMuX3R5cGVUb2tlbikKKyAgICAgICAg
ICAgICAgICBub2RlLl9hdHRhY2htZW50cy5fdHlwZVRva2VuLnVwZGF0ZShub2RlLl9hdHRhY2ht
ZW50cy5fdHlwZXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9LAorCisg
ICAgX3RyYW5zbGF0ZVRvT2Zmc2V0QWZ0ZXJGdW5jdGlvblBhcmFtZXRlckxpc3Q6IGZ1bmN0aW9u
KG5vZGUsIG9mZnNldCwgc291cmNlU3RyaW5nKQorICAgIHsKKyAgICAgICAgLy8gVGhlIGFzc3Vt
cHRpb24gaGVyZSBpcyB0aGF0IHdlIGdldCB0aGUgb2Zmc2V0IHN0YXJ0aW5nIGF0IHRoZSBmdW5j
dGlvbiBrZXl3b3JkIChvciBhZnRlciB0aGUgZ2V0L3NldCBrZXl3b3JkcykuCisgICAgICAgIC8v
IFdlIHdpbGwgcmV0dXJuIHRoZSBvZmZzZXQgZm9yIHRoZSBjbG9zaW5nIHBhcmVudGhlc2lzIGlu
IHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KKyAgICAgICAgLy8gQWxsIHRoaXMgY29kZSBpcyBq
dXN0IGEgd2F5IHRvIGZpbmQgdGhpcyBwYXJlbnRoZXNpcyB3aGlsZSBpZ25vcmluZyBjb21tZW50
cy4KKworICAgICAgICB2YXIgaXNNdWx0aUxpbmVDb21tZW50ID0gZmFsc2U7CisgICAgICAgIHZh
ciBpc1NpbmdsZUxpbmVDb21tZW50ID0gZmFsc2U7CisgICAgICAgIHZhciBzaG91bGRJZ25vcmUg
PSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKChzb3VyY2VTdHJpbmdbb2Zmc2V0XSAhPT0gIikiIHx8
IHNob3VsZElnbm9yZSkgJiYgb2Zmc2V0IDwgc291cmNlU3RyaW5nLmxlbmd0aCkgeworICAgICAg
ICAgICAgaWYgKGlzU2luZ2xlTGluZUNvbW1lbnQgJiYgKHNvdXJjZVN0cmluZ1tvZmZzZXRdID09
PSAiXG4iIHx8IChzb3VyY2VTdHJpbmdbb2Zmc2V0XSA9PT0gIlxyIiAmJiBzb3VyY2VTdHJpbmdb
b2Zmc2V0ICsgMV0gPT09ICJcbiIpKSkgeworICAgICAgICAgICAgICAgIGlmIChzb3VyY2VTdHJp
bmdbb2Zmc2V0XSA9PT0gIlxyIikKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Kys7CisgICAg
ICAgICAgICAgICAgaXNTaW5nbGVMaW5lQ29tbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IHNob3VsZElnbm9yZSA9IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc011bHRpTGlu
ZUNvbW1lbnQgJiYgc291cmNlU3RyaW5nW29mZnNldF0gPT09ICIqIiAmJiBzb3VyY2VTdHJpbmdb
b2Zmc2V0ICsgMV0gPT09ICIvIikgeworICAgICAgICAgICAgICAgIGlzTXVsdGlMaW5lQ29tbWVu
dCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHNob3VsZElnbm9yZSA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIG9mZnNldCsrOyAKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNob3VsZElnbm9y
ZSAmJiBzb3VyY2VTdHJpbmdbb2Zmc2V0XSA9PT0gIi8iKSB7CisgICAgICAgICAgICAgICAgb2Zm
c2V0Kys7CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVN0cmluZ1tvZmZzZXRdID09PSAiKiIp
CisgICAgICAgICAgICAgICAgICAgIGlzTXVsdGlMaW5lQ29tbWVudCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoc291cmNlU3RyaW5nW29mZnNldF0gPT09ICIvIikKKyAgICAgICAg
ICAgICAgICAgICAgaXNTaW5nbGVMaW5lQ29tbWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBwYXJzaW5nLiBD
b3VsZG4ndCBwYXJzZSBjb21tZW50IHByZWFtYmxlLiIpOworICAgICAgICAgICAgICAgIHNob3Vs
ZElnbm9yZSA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9mZnNldCsrOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG9mZnNldCArIDE7CisgICAgfSwKKworICAgIF9j
bGVhclR5cGVUb2tlbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3R5cGVUb2tl
bk5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgbm9kZS5fYXR0YWNo
bWVudHMuX3R5cGVUb2tlbiA9IG51bGw7CisgICAgICAgIH0pOworICAgICAgICB0aGlzLl90eXBl
VG9rZW5Cb29rbWFya3MuZm9yRWFjaChmdW5jdGlvbihib29rbWFyaykgeworICAgICAgICAgICAg
Ym9va21hcmsuY2xlYXIoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5fdHlwZVRva2Vu
Tm9kZXMgPSBbXTsKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtzID0gW107CisgICAg
fSwKKworICAgIF9jbGVhclRpbWVvdXRJZk5lZWRlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyKSB7CisgICAgICAgICAgICBjbGVhclRpbWVv
dXQodGhpcy5fdGltZW91dElkZW50aWZpZXIpOworICAgICAgICAgICAgdGhpcy5fdGltZW91dElk
ZW50aWZpZXIgPSBudWxsOworICAgICAgICB9CisgICAgfQorfTsKSW5kZXg6IFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbVR5cGVzLnN2Zwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMv
TmF2aWdhdGlvbkl0ZW1UeXBlcy5zdmcJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1UeXBlcy5zdmcJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhLS0gQ29w
eXJpZ2h0IMKpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAtLT4KKzxzdmcg
dmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9
IjAgMCAxNSAxNSI+CisgICAgPHJlY3QgY2xhc3M9InN0cm9rZWQiIGZpbGw9Im5vbmUiIHN0cm9r
ZT0iYmxhY2siIHg9IjAuNSIgeT0iMS41IiB3aWR0aD0iMTQiIGhlaWdodD0iMTIiIHJ4PSIyIi8+
CisgICAgPHBhdGggY2xhc3M9InN0cm9rZWQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIHN0
cm9rZS1saW5lY2FwPSJzcXVhcmUiIGQ9Ik0gNy41IDQuNSBMIDcuNSAxMC41IE0gNC41IDQuNSBM
IDEwLjUgNC41Ii8+Cis8L3N2Zz4KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9y
LmpzCShyZXZpc2lvbiAxNzI2NTQpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYs
NiArMzYsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IgPSBmdW5jCiAKICAg
ICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5jYWxsKHRoaXMsIG51bGwsIG51bGwsIHRoaXMpOwog
CisgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yID0gbnVsbDsgCisgICAgdGhpcy5fY3VycmVu
dFR5cGVUb2tlblNjcm9sbEhhbmRsZXIgPSBudWxsOworCiAgICAgLy8gRklYTUU6IEN1cnJlbnRs
eSB0aGlzIGp1c3QganVtcHMgYmV0d2VlbiByZXNvdXJjZXMgYW5kIHJlbGF0ZWQgc291cmNlIG1h
cCByZXNvdXJjZXMuIEl0IGRvZXNuJ3QgImp1bXAgdG8gc3ltYm9sIiB5ZXQuCiAgICAgdGhpcy5f
dXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOwogCkBAIC0xMDEsNiArMTA0LDE0
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgcmV0
dXJuIHRoaXMuX3NvdXJjZUNvZGU7CiAgICAgfSwKIAorICAgIHNob3duOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2hvd24uY2Fs
bCh0aGlzKTsKKworICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQorICAgICAg
ICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlc3VtZSgpOworICAgIH0sCisKICAgICBo
aWRkZW46IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
LnByb3RvdHlwZS5oaWRkZW4uY2FsbCh0aGlzKTsKQEAgLTExMCw2ICsxMjEsOSBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIHRoaXMuX2Rpc21pc3NQ
b3BvdmVyKCk7CiAgICAgICAgIAogICAgICAgICB0aGlzLl9kaXNtaXNzRWRpdGluZ0NvbnRyb2xs
ZXIodHJ1ZSk7CisKKyAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvcikKKyAgICAg
ICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5wYXVzZSgpOwogICAgIH0sCiAKICAgICBj
bG9zZTogZnVuY3Rpb24oKQpAQCAtMTM1LDYgKzE0OSw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlVGV4dEVkaXRvci5wcm90b3QKIAogICAgICAgICBXZWJJbnNwZWN0b3Iubm90aWZpY2F0aW9u
cy5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Ob3RpZmljYXRpb24uR2xvYmFsTW9k
aWZpZXJLZXlzRGlkQ2hhbmdlLCB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0
YXRlLCB0aGlzKTsKICAgICAgICAgdGhpcy5fc291cmNlQ29kZS5yZW1vdmVFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LlNvdXJjZU1hcEFkZGVkLCB0aGlzLl9zb3Vy
Y2VDb2RlU291cmNlTWFwQWRkZWQsIHRoaXMpOworCisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50
VHlwZVRva2VuU2Nyb2xsSGFuZGxlcikKKyAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVTY3JvbGxF
dmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKICAgICB9LAogCiAgICAgY2FuQmVGb3JtYXR0
ZWQ6IGZ1bmN0aW9uKCkKQEAgLTIzNCw2ICsyNTEsNDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVNYXJr
ZXJzKHJhbmdlKTsKICAgICB9LAogCisgICAgdG9nZ2xlVHlwZUFubm90YXRpb25zOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3R5cGVUb2tlbkFubm90YXRvcikKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB2YXIgaXNBY3RpdmF0ZWQgPSB0aGlzLl90
eXBlVG9rZW5Bbm5vdGF0b3IudG9nZ2xlVHlwZUFubm90YXRpb25zKCk7CisgICAgICAgIGlmIChp
c0FjdGl2YXRlZCkgeworICAgICAgICAgICAgUnVudGltZUFnZW50LmVuYWJsZUhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmcoKTsKKyAgICAgICAgICAgIHRoaXMuX2VuYWJsZVNjcm9sbEV2ZW50c0Zv
clR5cGVUb2tlbkFubm90YXRvcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
V2UgZGlzYWJsZSB0eXBlUHJvZmlsaW5nIHdoZW4gZXhpdGluZyB0aGUgaW5zcGVjdG9yLCBzbyBu
byBuZWVkIHRvIGNhbGwgaXQgaGVyZS4gSWYgd2Ugd2VyZQorICAgICAgICAgICAgLy8gdG8gY2Fs
bCBpdCBoZXJlLCB3ZSB3b3VsZCBoYXZlIEphdmFTY3JpcHRDb3JlIGNvbXBpbGUgb3V0IGFsbCB0
aGUgbmVjZXNzYXJ5IHR5cGUgcHJvZmlsaW5nIGluZm9ybWF0aW9uLAorICAgICAgICAgICAgLy8g
c28gaWYgYSB1c2VyIHdlcmUgdG8gcXVpY2tseSBwcmVzcyB0aGVuIHVucHJlc3MgdGhlIGJ1dHRv
biwgd2Ugd291bGRuJ3QgYmUgYWJsZSB0byByZS1zaG93IHR5cGUgaW5mb3JtYXRpb24uCisgICAg
ICAgICAgICB0aGlzLl9kaXNhYmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yKCk7
CisgICAgICAgIH0KKyAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9y
bWF0aW9uU2V0dGluZy52YWx1ZSA9IGlzQWN0aXZhdGVkOworCisgICAgICAgIHRoaXMuX3VwZGF0
ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuIGlzQWN0aXZh
dGVkOworICAgIH0sCisKKyAgICBzaG93UG9wb3ZlckZvclR5cGVzOiBmdW5jdGlvbih0eXBlcywg
Ym91bmRzLCB0aXRsZSkKKyAgICB7CisgICAgICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGNvbnRlbnQuY2xhc3NOYW1lID0gIm9iamVjdCBl
eHBhbmRhYmxlIjsKKworICAgICAgICB2YXIgdGl0bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7CisgICAgICAgIHRpdGxlRWxlbWVudC5jbGFzc05hbWUgPSAidGl0bGUi
OworICAgICAgICB0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aXRsZTsKKyAgICAgICAgY29u
dGVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpOworCisgICAgICAgIHZhciBzZWN0aW9uID0g
bmV3IFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24odHlwZXMpOworICAgICAgICBz
ZWN0aW9uLmV4cGFuZGVkID0gdHJ1ZTsKKyAgICAgICAgc2VjdGlvbi5lbGVtZW50LmNsYXNzTGlz
dC5hZGQoImJvZHkiKTsKKyAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChzZWN0aW9uLmVsZW1l
bnQpOworCisgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyKGNvbnRlbnQsIGJvdW5kcyk7CisgICAg
fSwKKworCiAgICAgLy8gUHJpdmF0ZQogCiAgICAgX3VuZm9ybWF0dGVkTGluZUluZm9Gb3JFZGl0
b3JMaW5lSW5mbzogZnVuY3Rpb24obGluZUluZm8pCkBAIC0zNTgsNiArNDE1LDEwIEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKIAogICAgICAgICB0aGlzLl9jb250
ZW50V2lsbFBvcHVsYXRlKGNvbnRlbnQpOwogICAgICAgICB0aGlzLnN0cmluZyA9IGNvbnRlbnQ7
CisKKyAgICAgICAgaWYgKHRoaXMuX2NvZGVNaXJyb3IuZ2V0TW9kZSgpLm5hbWUgPT09ICJqYXZh
c2NyaXB0IikKKyAgICAgICAgICAgIHRoaXMuX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKwog
ICAgICAgICB0aGlzLl9jb250ZW50RGlkUG9wdWxhdGUoKTsKICAgICB9LAogCkBAIC05NjcsMTIg
KzEwMjgsMTYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAg
IF9kZWJ1Z2dlckRpZFBhdXNlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMu
X3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKKyAgICAgICAgaWYgKHRoaXMu
X3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUp
CisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1lKCk7CiAgICAgfSwK
IAogICAgIF9kZWJ1Z2dlckRpZFJlc3VtZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAg
ICB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKCk7CiAgICAgICAgIHRo
aXMuX2Rpc21pc3NQb3BvdmVyKCk7CisgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0
b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQorICAgICAgICAgICAgdGhp
cy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlc3VtZSgpOwogICAgIH0sCiAKICAgICBfc291cmNlQ29k
ZVNvdXJjZU1hcEFkZGVkOiBmdW5jdGlvbihldmVudCkKQEAgLTk4OCw2ICsxMDUzLDggQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICB2YXIgbW9kZSA9
IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5Ob25l
OwogICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5wYXVzZWQpCiAgICAg
ICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJv
bGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9uOworICAgICAgICBlbHNlIGlmICh0aGlzLl90
eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQor
ICAgICAgICAgICAgbW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOwogICAgICAgICBlbHNlIGlm
ICh0aGlzLl9oYXNDb2xvck1hcmtlcnMoKSkKICAgICAgICAgICAgIG1vZGUgPSBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTWFya2VkVG9rZW5zOwog
ICAgICAgICBlbHNlIGlmICgodGhpcy5fc291cmNlQ29kZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rv
ci5Tb3VyY2VNYXBSZXNvdXJjZSB8fCB0aGlzLl9zb3VyY2VDb2RlLnNvdXJjZU1hcHMubGVuZ3Ro
ICE9PSAwKSAmJiBXZWJJbnNwZWN0b3IubW9kaWZpZXJLZXlzLm1ldGFLZXkgJiYgIVdlYkluc3Bl
Y3Rvci5tb2RpZmllcktleXMuYWx0S2V5ICYmICFXZWJJbnNwZWN0b3IubW9kaWZpZXJLZXlzLnNo
aWZ0S2V5KQpAQCAtMTAxMCw2ICsxMDc3LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0
RWRpdG9yLnByb3RvdAogICAgICAgICAgICAgdGhpcy5fZGlzbWlzc1BvcG92ZXIoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5U
cmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0RXhwcmVzc2lvbjoKKyAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2
YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjoKICAgICAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIubW91c2VPdmVyRGVsYXlEdXJhdGlvbiA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5EdXJhdGlvblRvTW91c2VPdmVyVG9rZW5Ub01ha2VIb3ZlcmVkVG9rZW47CiAg
ICAgICAgICAgICB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vdXNlT3V0UmVsZWFzZURl
bGF5RHVyYXRpb24gPSBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25U
b01vdXNlT3V0T2ZIb3ZlcmVkVG9rZW5Ub1JlbGVhc2U7CiAgICAgICAgICAgICB0aGlzLnRva2Vu
VHJhY2tpbmdDb250cm9sbGVyLmNsYXNzTmFtZUZvckhpZ2hsaWdodGVkUmFuZ2UgPSBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuSG92ZXJlZEV4cHJlc3Npb25IaWdobGlnaHRTdHls
ZUNsYXNzTmFtZTsKQEAgLTEwNzUsNiArMTE0MywxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAg
ICAgICBpZiAodGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5tb2RlID09PSBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2YVNjcmlwdFR5cGVJ
bmZvcm1hdGlvbikgeworICAgICAgICAgICAgdGhpcy5fdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJI
aWdobGlnaHRlZEphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb24oY2FuZGlkYXRlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICh0aGlzLnRva2VuVHJhY2tpbmdD
b250cm9sbGVyLm1vZGUgPT09IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIuTW9kZS5NYXJrZWRUb2tlbnMpIHsKICAgICAgICAgICAgIHZhciBtYXJrZXJzID0g
dGhpcy5tYXJrZXJzQXRQb3NpdGlvbihjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2Uuc3RhcnQp
OwogICAgICAgICAgICAgaWYgKG1hcmtlcnMubGVuZ3RoID4gMCkKQEAgLTExMzAsMjYgKzEyMDMs
NzkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICBE
ZWJ1Z2dlckFnZW50LmV2YWx1YXRlT25DYWxsRnJhbWUuaW52b2tlKHtjYWxsRnJhbWVJZDogV2Vi
SW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWUuaWQsIGV4cHJlc3Npb246
IGNhbmRpZGF0ZS5leHByZXNzaW9uLCBvYmplY3RHcm91cDogInBvcG92ZXIiLCBkb05vdFBhdXNl
T25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGU6IHRydWV9LCBwb3B1bGF0ZS5iaW5kKHRoaXMpKTsK
ICAgICB9LAogCi0gICAgX3Nob3dQb3BvdmVyOiBmdW5jdGlvbihjb250ZW50KQorICAgIF90b2tl
blRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjog
ZnVuY3Rpb24oY2FuZGlkYXRlKQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy50
b2tlblRyYWNraW5nQ29udHJvbGxlci5jYW5kaWRhdGUpOworICAgICAgICBjb25zb2xlLmFzc2Vy
dChjYW5kaWRhdGUuZXhwcmVzc2lvbik7CisKKyAgICAgICAgdmFyIHNvdXJjZUNvZGUgPSB0aGlz
Ll9zb3VyY2VDb2RlOworICAgICAgICB2YXIgc291cmNlSUQgPSBzb3VyY2VDb2RlLnNjcmlwdHNb
MF0uaWQ7CisgICAgICAgIHZhciByYW5nZSA9IGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZTsK
KyAgICAgICAgdmFyIG9mZnNldCA9IG51bGw7CisKKyAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdHRl
clNvdXJjZU1hcCkKKyAgICAgICAgICAgIG9mZnNldCA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1h
cC5mb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0KHJhbmdlLnN0YXJ0LmxpbmUsIHJhbmdlLnN0YXJ0
LmNoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy50b2tlblRyYWNr
aW5nQ29udHJvbGxlci5fY29kZU1pcnJvci5nZXREb2MoKS5pbmRleEZyb21Qb3Moe2xpbmU6IHJh
bmdlLnN0YXJ0LmxpbmUsIGNoOiByYW5nZS5zdGFydC5jaH0pOwogCisgICAgICAgIHZhciBhbGxS
ZXF1ZXN0cyA9IFt7CisgICAgICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yOiBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLk5v
cm1hbEV4cHJlc3Npb24sCisgICAgICAgICAgICBzb3VyY2VJRDogc291cmNlSUQsCisgICAgICAg
ICAgICBkaXZvdDogb2Zmc2V0CisgICAgICAgIH1dOworCisgICAgICAgIGZ1bmN0aW9uIGhhbmRs
ZXIoZXJyb3IsIGFsbFR5cGVzKSB7CisgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlICE9PSB0aGlzLnRva2Vu
VHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGFsbFR5cGVzLmxlbmd0aCA9PT0gMSk7CisgICAg
ICAgICAgICBpZiAoIWFsbFR5cGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB2YXIgdHlwZXMgPSBhbGxUeXBlc1swXTsKKyAgICAgICAgICAgIGlmICh0eXBl
cy5kaXNwbGF5VHlwZU5hbWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcG9wb3ZlclRpdGxlID0g
V2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcudGl0bGVGb3JQb3BvdmVyKFdlYkluc3BlY3Rvci5U
eXBlVG9rZW5WaWV3LlRpdGxlVHlwZS52YXJpYWJsZSwgY2FuZGlkYXRlLmV4cHJlc3Npb24pOwor
ICAgICAgICAgICAgICAgIHRoaXMuc2hvd1BvcG92ZXJGb3JUeXBlcyh0eXBlcywgbnVsbCwgcG9w
b3ZlclRpdGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFJ1bnRpbWVB
Z2VudC5nZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoYWxsUmVxdWVzdHMsIGhh
bmRsZXIuYmluZCh0aGlzKSk7CisKKyAgICB9LAorCisgICAgX3Nob3dQb3BvdmVyOiBmdW5jdGlv
bihjb250ZW50LCBib3VuZHMpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnRv
a2VuVHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZSB8fCBib3VuZHMpOworCisgICAgICAgIHZh
ciBzaG91bGRIaWdobGlnaHRSYW5nZSA9IGZhbHNlOwogICAgICAgICB2YXIgY2FuZGlkYXRlID0g
dGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5jYW5kaWRhdGU7Ci0gICAgICAgIGlmICghY2Fu
ZGlkYXRlKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBJZiBib3VuZHMgaXMgZmFs
c2V5LCB0aGlzIGlzIGEgcG9wb3ZlciBpbnRyb2R1Y2VkIGZyb20gYSBob3ZlciBldmVudC4KKyAg
ICAgICAgLy8gT3RoZXJ3aXNlLCB0aGlzIGlzIGNhbGxlZCBmcm9tIFR5cGVUb2tlbkFubm90YXRv
ci4KKyAgICAgICAgaWYgKCFib3VuZHMpIHsKKyAgICAgICAgICAgIGlmICghY2FuZGlkYXRlKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgdmFyIHJlY3RzID0gdGhpcy5y
ZWN0c0ZvclJhbmdlKGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZSk7CisgICAgICAgICAgICBi
b3VuZHMgPSBXZWJJbnNwZWN0b3IuUmVjdC51bmlvbk9mUmVjdHMocmVjdHMpOworCisgICAgICAg
ICAgICBzaG91bGRIaWdobGlnaHRSYW5nZSA9IHRydWU7CisgICAgICAgIH0KIAotICAgICAgICBj
b250ZW50LmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLlBv
cG92ZXJEZWJ1Z2dlckNvbnRlbnRTdHlsZUNsYXNzTmFtZSk7CiAKLSAgICAgICAgdmFyIHJlY3Rz
ID0gdGhpcy5yZWN0c0ZvclJhbmdlKGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZSk7Ci0gICAg
ICAgIHZhciBib3VuZHMgPSBXZWJJbnNwZWN0b3IuUmVjdC51bmlvbk9mUmVjdHMocmVjdHMpOwor
ICAgICAgICBjb250ZW50LmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0
RWRpdG9yLlBvcG92ZXJEZWJ1Z2dlckNvbnRlbnRTdHlsZUNsYXNzTmFtZSk7CiAKLSAgICAgICAg
dGhpcy5fcG9wb3ZlciA9IHRoaXMuX3BvcG92ZXIgfHwgbmV3IFdlYkluc3BlY3Rvci5Qb3BvdmVy
KHRoaXMpOworICAgICAgICBpZiAodGhpcy5fcG9wb3ZlcikKKyAgICAgICAgICAgIHRoaXMuX2Rp
c21pc3NQb3BvdmVyKCk7CisgICAgICAgIHRoaXMuX3BvcG92ZXIgPSBuZXcgV2ViSW5zcGVjdG9y
LlBvcG92ZXIodGhpcyk7CiAgICAgICAgIHRoaXMuX3BvcG92ZXIuY29udGVudCA9IGNvbnRlbnQ7
CiAgICAgICAgIHRoaXMuX3BvcG92ZXIucHJlc2VudChib3VuZHMucGFkKDUpLCBbV2ViSW5zcGVj
dG9yLlJlY3RFZGdlLk1JTl9ZLCBXZWJJbnNwZWN0b3IuUmVjdEVkZ2UuTUFYX1ksIFdlYkluc3Bl
Y3Rvci5SZWN0RWRnZS5NQVhfWF0pOwogCi0gICAgICAgIHRoaXMuX3RyYWNrUG9wb3ZlckV2ZW50
cygpOworICAgICAgICAvLyBXZSBuZWVkIHRvIGhpZ2hsaWdodCB0aGUgcmFuZ2UgYWZ0ZXIgY3Jl
YXRpbmcgdGhlIG5ldyBwb3BvdmVyIGJlY2F1c2UgZGlzbWlzc2luZyB0aGUgb2xkIHBvcG92ZXIg
d2lsbCByZW1vdmUgdGhlIGN1cnJlbnQgaGlnaGxpZ2h0LgorICAgICAgICBpZiAoc2hvdWxkSGln
aGxpZ2h0UmFuZ2UpCisgICAgICAgICAgICB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmhp
Z2hsaWdodFJhbmdlKGNhbmRpZGF0ZS5leHByZXNzaW9uUmFuZ2UpOwogCi0gICAgICAgIHRoaXMu
dG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuaGlnaGxpZ2h0UmFuZ2UoY2FuZGlkYXRlLmV4cHJlc3Np
b25SYW5nZSk7CisgICAgICAgIHRoaXMuX3RyYWNrUG9wb3ZlckV2ZW50cygpOwogICAgIH0sCiAK
ICAgICBfc2hvd1BvcG92ZXJGb3JGdW5jdGlvbjogZnVuY3Rpb24oZGF0YSkKQEAgLTEzODAsNiAr
MTUwNiw2MCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAg
ICAgIHRoaXMuX2lnbm9yZUNvbnRlbnREaWRDaGFuZ2UtLTsKIAogICAgICAgICBkZWxldGUgdGhp
cy5fZWRpdGluZ0NvbnRyb2xsZXI7CisgICAgfSwKKworICAgIF9wcmV0dHlQcmludDogZnVuY3Rp
b24ocHJldHR5KQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90
eXBlLl9wcmV0dHlQcmludC5jYWxsKHRoaXMsIHByZXR0eSk7CisKKyAgICAgICAgaWYgKHRoaXMu
X3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUp
CisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzZXQoKTsKKyAgICB9LAor
CisgICAgX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3I6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IGlmICghdGhpcy5fc291cmNlQ29kZS5zY3JpcHRzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgPSBuZXcgV2ViSW5zcGVjdG9y
LlR5cGVUb2tlbkFubm90YXRvcih0aGlzLCB0aGlzLl9zb3VyY2VDb2RlLnNjcmlwdHNbMF0pOwor
ICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0
dGluZy52YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlc2V0
KCk7CisgICAgICAgICAgICB0aGlzLl9lbmFibGVTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5v
dGF0b3IoKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfZW5hYmxlU2Nyb2xsRXZlbnRzRm9y
VHlwZVRva2VuQW5ub3RhdG9yOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICAvLyBQYXVzZSB1
cGRhdGluZyB0eXBlIHRva2VucyB3aGlsZSBzY3JvbGxpbmcgdG8gcHJldmVudCBmcmFtZSBsb3Nz
LgorICAgICAgICB2YXIgc2Nyb2xsSGFuZGxlciA9IHRoaXMuX21ha2VUeXBlVG9rZW5TY3JvbGxF
dmVudEhhbmRsZXIoKTsKKyAgICAgICAgdGhpcy5fY3VycmVudFR5cGVUb2tlblNjcm9sbEhhbmRs
ZXIgPSBzY3JvbGxIYW5kbGVyOworICAgICAgICB0aGlzLl9jb2RlTWlycm9yLm9uKCJzY3JvbGwi
LCBzY3JvbGxIYW5kbGVyKTsKKyAgICB9LAorCisgICAgX2Rpc2FibGVTY3JvbGxFdmVudHNGb3JU
eXBlVG9rZW5Bbm5vdGF0b3I6ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY29kZU1p
cnJvci5vZmYoInNjcm9sbCIsIHRoaXMuX2N1cnJlbnRUeXBlVG9rZW5TY3JvbGxIYW5kbGVyKTsK
KyAgICAgICAgdGhpcy5fY3VycmVudFR5cGVUb2tlblNjcm9sbEhhbmRsZXIgPSBudWxsOworICAg
IH0sCisKKyAgICBfbWFrZVR5cGVUb2tlblNjcm9sbEV2ZW50SGFuZGxlcjogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdmFyIHR5cGVUb2tlbkFubm90YXRvciA9IHRoaXMuX3R5cGVUb2tlbkFu
bm90YXRvcjsKKyAgICAgICAgdmFyIHRpbWVvdXRJZGVudGlmaWVyID0gbnVsbDsKKyAgICAgICAg
ZnVuY3Rpb24gc2Nyb2xsSGFuZGxlcigpIAorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGlt
ZW91dElkZW50aWZpZXIpCisgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZGVu
dGlmaWVyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0eXBlVG9rZW5Bbm5v
dGF0b3IucGF1c2UoKTsKKworICAgICAgICAgICAgdGltZW91dElkZW50aWZpZXIgPSBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRpbWVvdXRJZGVudGlmaWVyID0gbnVs
bDsKKyAgICAgICAgICAgICAgICB0eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1lKCk7CisgICAgICAg
ICAgICB9LCAxMDApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNjcm9sbEhhbmRsZXI7
CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dFJlc291cmNlQ29udGVudFZpZXcu
anMJKHJldmlzaW9uIDE3MjY1NCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw2ICs1MSwxNCBAQCBXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcgPSBmCiAg
ICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbSA9IG5ldyBXZWJJbnNwZWN0
b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbSgicHJldHR5LXByaW50IiwgdG9vbFRpcCwg
YWN0aXZhdGVkVG9vbFRpcCwgY3VybGV5QnJhY2VzSW1hZ2Uuc3JjLCBjdXJsZXlCcmFjZXNJbWFn
ZS53aWR0aCwgY3VybGV5QnJhY2VzSW1hZ2UuaGVpZ2h0KTsKICAgICB0aGlzLl9wcmV0dHlQcmlu
dEJ1dHRvbk5hdmlnYXRpb25JdGVtLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJ1dHRv
bk5hdmlnYXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIHRoaXMuX3RvZ2dsZVByZXR0eVByaW50LCB0
aGlzKTsKICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQg
PSBmYWxzZTsgLy8gRW5hYmxlZCB3aGVuIHRoZSB0ZXh0IGVkaXRvciBpcyBwb3B1bGF0ZWQgd2l0
aCBjb250ZW50LgorCisgICAgdmFyIHRvb2xUaXBUeXBlcyA9IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiU2hvdyB0eXBlIGluZm9ybWF0aW9uIik7CisgICAgdmFyIGFjdGl2YXRlZFRvb2xUaXBUeXBl
cyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiSGlkZSB0eXBlIGluZm9ybWF0aW9uIik7CisgICAg
dGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLkFj
dGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0oInNob3ctdHlwZXMiLCB0b29sVGlwVHlwZXMsIGFj
dGl2YXRlZFRvb2xUaXBUeXBlcywgIkltYWdlcy9OYXZpZ2F0aW9uSXRlbVR5cGVzLnN2ZyIsIDE2
LCAxNik7CisgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwg
dGhpcy5fdG9nZ2xlVHlwZUFubm90YXRpb25zLCB0aGlzKTsKKyAgICB0aGlzLl9zaG93VHlwZXNC
dXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gZmFsc2U7CisKKyAgICBXZWJJbnNwZWN0b3Iu
c2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLlNldHRpbmcuRXZlbnQuQ2hhbmdlZCwgdGhpcy5fc2hvd0phdmFTY3JpcHRUeXBl
SW5mb3JtYXRpb25TZXR0aW5nQ2hhbmdlZCwgdGhpcyk7CiB9OwogCiBXZWJJbnNwZWN0b3IuVGV4
dFJlc291cmNlQ29udGVudFZpZXcuU3R5bGVDbGFzc05hbWUgPSAidGV4dCI7CkBAIC02Miw3ICs3
MCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm8KIAogICAgIGdl
dCBuYXZpZ2F0aW9uSXRlbXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFt0aGlzLl9wcmV0dHlQ
cmludEJ1dHRvbk5hdmlnYXRpb25JdGVtXTsKKyAgICAgICAgcmV0dXJuIFt0aGlzLl9wcmV0dHlQ
cmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLCB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9u
SXRlbV07CiAgICAgfSwKIAogICAgIGdldCBtYW5hZ2VzT3duSXNzdWVzKCkKQEAgLTIwMCw2ICsy
MDgsOCBAQCBXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvCiAgICAgX2Nv
bnRlbnREaWRQb3B1bGF0ZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl9w
cmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSB0aGlzLl90ZXh0RWRpdG9y
LmNhbkJlRm9ybWF0dGVkKCk7CisgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRp
b25JdGVtLmVuYWJsZWQgPSAhIXRoaXMuX3RleHRFZGl0b3IuX3R5cGVUb2tlbkFubm90YXRvcjsK
KyAgICAgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0g
V2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZTsK
ICAgICB9LAogCiAgICAgX3RvZ2dsZVByZXR0eVByaW50OiBmdW5jdGlvbihldmVudCkKQEAgLTIw
OCw2ICsyMTgsMTYgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnBybwog
ICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLmZvcm1hdHRlZCA9IGFjdGl2YXRlZDsKICAgICB9LAog
CisgICAgX3RvZ2dsZVR5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAg
ICAgICB0aGlzLl90ZXh0RWRpdG9yLnRvZ2dsZVR5cGVBbm5vdGF0aW9ucygpOworICAgIH0sCisK
KyAgICBfc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nQ2hhbmdlZDogZnVuY3Rp
b24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9u
SXRlbS5hY3RpdmF0ZWQgPSBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRp
b25TZXR0aW5nLnZhbHVlOworICAgIH0sCisKICAgICBfdGV4dEVkaXRvckZvcm1hdHRpbmdEaWRD
aGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fcHJldHR5UHJpbnRC
dXR0b25OYXZpZ2F0aW9uSXRlbS5hY3RpdmF0ZWQgPSB0aGlzLl90ZXh0RWRpdG9yLmZvcm1hdHRl
ZDsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVQ
cm9wZXJ0aWVzU2VjdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlUHJvcGVy
dGllc1NlY3Rpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCitXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnRpZXNTZWN0aW9uID0gZnVuY3Rpb24odHlwZXMs
IHRpdGxlLCBzdWJ0aXRsZSkKK3sKKyAgICB0aGlzLmVtcHR5UGxhY2Vob2xkZXIgPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIk5vIFByb3BlcnRpZXMiKTsKKyAgICB0aGlzLnR5cGVzID0gdHlwZXM7
CisKKyAgICBXZWJJbnNwZWN0b3IuUHJvcGVydGllc1NlY3Rpb24uY2FsbCh0aGlzLCB0aXRsZSwg
c3VidGl0bGUpOworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90
b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1Nl
Y3Rpb24sCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJvcGVydGllc1NlY3Rpb24ucHJv
dG90eXBlLAorCisgICAgb25wb3B1bGF0ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhp
cy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUucmVtb3ZlQ2hpbGRyZW4oKTsKKworICAgICAgICB2YXIg
cHJpbWl0aXZlVHlwZU5hbWVzID0gdGhpcy50eXBlcy5nbG9iYWxQcmltaXRpdmVUeXBlTmFtZXMg
fHwgdGhpcy50eXBlcy5sb2NhbFByaW1pdGl2ZVR5cGVOYW1lczsKKyAgICAgICAgdmFyIHN0cnVj
dHVyZXMgPSB0aGlzLnR5cGVzLmdsb2JhbFN0cnVjdHVyZXMgfHwgdGhpcy50eXBlcy5sb2NhbFN0
cnVjdHVyZXM7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW107CisgICAgICAgIGZvciAodmFy
IHN0cnVjdCBvZiBzdHJ1Y3R1cmVzKSB7CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goewor
ICAgICAgICAgICAgICAgIG5hbWU6IHN0cnVjdC5jb25zdHJ1Y3Rvck5hbWUsCisgICAgICAgICAg
ICAgICAgc3RydWN0dXJlOiBzdHJ1Y3QKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
ICAgIGZvciAodmFyIHByaW1pdGl2ZU5hbWUgb2YgcHJpbWl0aXZlVHlwZU5hbWVzKSB7CisgICAg
ICAgICAgICBwcm9wZXJ0aWVzLnB1c2goeworICAgICAgICAgICAgICAgIG5hbWU6IHByaW1pdGl2
ZU5hbWUsCisgICAgICAgICAgICAgICAgc3RydWN0dXJlOiBudWxsCisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorCisgICAgICAgIHByb3BlcnRpZXMuc29ydChXZWJJbnNwZWN0b3IuVHlwZVBy
b3BlcnRpZXNTZWN0aW9uLlByb3BlcnR5Q29tcGFyYXRvcik7CisgICAgICAgIGZvciAodmFyIHBy
b3BlcnR5IG9mIHByb3BlcnRpZXMpCisgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0
bGluZS5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50
KHByb3BlcnR5KSk7CisKKyAgICAgICAgaWYgKCF0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5j
aGlsZHJlbi5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciB0aXRsZSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgdGl0bGUuY2xhc3NOYW1lID0gImluZm8iOwor
ICAgICAgICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSB0aGlzLmVtcHR5UGxhY2Vob2xkZXI7Cisg
ICAgICAgICAgICB2YXIgaW5mb0VsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQodGl0bGUsIG51bGws
IGZhbHNlKTsKKyAgICAgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmFwcGVuZENo
aWxkKGluZm9FbGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5TZWN0aW9uLkV2ZW50LlZpc2libGVDb250ZW50RGlk
Q2hhbmdlKTsKKworICAgICAgICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDEpCisgICAgICAg
ICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5jaGlsZHJlblswXS5leHBhbmRSZWN1cnNp
dmVseSgpOworICAgIH0KK307CisKKy8vIFRoaXMgaXMgbW9zdGx5IGlkZW50aWNhbCB0byBPYmpl
Y3RQcm9wZXJ0aWVzU2VjdGlvbi5jb21wYXJlUHJvcGVydGllcy4gCisvLyBCdXQgdGhpcyBjaGVj
a3MgZm9yIGVxdWFsaXR5IGJlY2F1c2Ugd2UgY2FuIGhhdmUgdHdvIG9iamVjdHMgbmFtZWQgdGhl
IHNhbWUgdGhpbmcuCitXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnRpZXNTZWN0aW9uLlByb3BlcnR5
Q29tcGFyYXRvciA9IGZ1bmN0aW9uKHByb3BlcnR5QSwgcHJvcGVydHlCKQoreworICAgIHZhciBh
ID0gcHJvcGVydHlBLm5hbWU7CisgICAgdmFyIGIgPSBwcm9wZXJ0eUIubmFtZTsKKyAgICBpZiAo
YS5pbmRleE9mKCJfX3Byb3RvX18iKSAhPT0gLTEpCisgICAgICAgIHJldHVybiAxOworICAgIGlm
IChiLmluZGV4T2YoIl9fcHJvdG9fXyIpICE9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworICAg
IGlmIChhID09PSBiKQorICAgICAgICByZXR1cm4gMTsKKworICAgIC8vIGlmIHVzZWQgZWxzZXdo
ZXJlIG1ha2Ugc3VyZSB0bworICAgIC8vICAtIGNvbnZlcnQgYSBhbmQgYiB0byBzdHJpbmdzIChu
b3QgbmVlZGVkIGhlcmUsIHByb3BlcnRpZXMgYXJlIGFsbCBzdHJpbmdzKQorCisgICAgdmFyIGRp
ZmYgPSAwOworICAgIHZhciBjaHVuayA9IC9eXGQrfF5cRCsvOworICAgIHZhciBjaHVua2EsIGNo
dW5rYiwgYW51bSwgYm51bTsKKyAgICB3aGlsZSAoZGlmZiA9PT0gMCkgeworICAgICAgICBpZiAo
IWEgJiYgYikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKCFiICYmIGEpCisg
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2h1bmthID0gYS5tYXRjaChjaHVuaylbMF07
CisgICAgICAgIGNodW5rYiA9IGIubWF0Y2goY2h1bmspWzBdOworICAgICAgICBhbnVtID0gIWlz
TmFOKGNodW5rYSk7CisgICAgICAgIGJudW0gPSAhaXNOYU4oY2h1bmtiKTsKKyAgICAgICAgaWYg
KGFudW0gJiYgIWJudW0pCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChibnVt
ICYmICFhbnVtKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChhbnVtICYmIGJu
dW0pIHsKKyAgICAgICAgICAgIGRpZmYgPSBjaHVua2EgLSBjaHVua2I7CisgICAgICAgICAgICBp
ZiAoZGlmZiA9PT0gMCAmJiBjaHVua2EubGVuZ3RoICE9PSBjaHVua2IubGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCErY2h1bmthICYmICErY2h1bmtiKSAvLyBjaHVua3MgYXJlIHN0cmlu
Z3Mgb2YgYWxsIDBzIChzcGVjaWFsIGNhc2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
aHVua2EubGVuZ3RoIC0gY2h1bmtiLmxlbmd0aDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjaHVua2IubGVuZ3RoIC0gY2h1bmthLmxlbmd0aDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjaHVua2EgIT09IGNodW5rYikKKyAgICAg
ICAgICAgIHJldHVybiAoY2h1bmthIDwgY2h1bmtiKSA/IC0xIDogMTsKKyAgICAgICAgYSA9IGEu
c3Vic3RyaW5nKGNodW5rYS5sZW5ndGgpOworICAgICAgICBiID0gYi5zdWJzdHJpbmcoY2h1bmti
Lmxlbmd0aCk7CisgICAgfQorCisgICAgcmV0dXJuIGRpZmY7Cit9OworCitXZWJJbnNwZWN0b3Iu
VHlwZVByb3BlcnR5VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihwcm9wZXJ0eSkKK3sKKyAgICB0aGlz
LnByb3BlcnR5ID0gcHJvcGVydHk7CisKKyAgICB0aGlzLm5hbWVFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgIHRoaXMubmFtZUVsZW1lbnQuY2xhc3NOYW1lID0g
Im5hbWUiOworICAgIHRoaXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLnByb3BlcnR5
Lm5hbWU7CisKKyAgICBUcmVlRWxlbWVudC5jYWxsKHRoaXMsIHRoaXMubmFtZUVsZW1lbnQsIG51
bGwsIGZhbHNlKTsKKworICAgIHRoaXMudG9nZ2xlT25DbGljayA9IHRydWU7CisgICAgdGhpcy5o
YXNDaGlsZHJlbiA9ICEhdGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmU7IAorfTsKKworV2ViSW5zcGVj
dG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3Rv
cjogV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50LAorICAgIF9fcHJvdG9fXzog
VHJlZUVsZW1lbnQucHJvdG90eXBlLAorCisgICAgb25wb3B1bGF0ZTogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOworCisgICAgICAgIHZhciBwcm9wZXJ0
aWVzID0gW107CisgICAgICAgIGZvciAodmFyIGZpZWxkTmFtZSBvZiB0aGlzLnByb3BlcnR5LnN0
cnVjdHVyZS5maWVsZHMpIHsKKyAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh7CisgICAgICAg
ICAgICAgICAgbmFtZTogZmllbGROYW1lLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogbnVs
bAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBwcm9wZXJ0aWVzLnNvcnQo
V2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5Qcm9wZXJ0eUNvbXBhcmF0b3IpOwor
CisgICAgICAgIGlmICh0aGlzLnByb3BlcnR5LnN0cnVjdHVyZS5wcm90b3R5cGVTdHJ1Y3R1cmUp
IHsKKyAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh7CisgICAgICAgICAgICAgICAgbmFtZTog
dGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUucHJvdG90eXBlU3RydWN0dXJlLmNvbnN0cnVjdG9yTmFt
ZSArICIgKCIgKyBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlByb3RvdHlwZSIpICsgIikiLAorICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZTogdGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUucHJvdG90eXBl
U3RydWN0dXJlCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFy
IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpCisgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKG5l
dyBXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnR5VHJlZUVsZW1lbnQocHJvcGVydHkpKTsKKyAgICB9
Cit9OworCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9U
eXBlVG9rZW5WaWV3LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmNzcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuY3NzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisudHlwZS10b2tlbiB7
CisgICAgZGlzcGxheTogaW5saW5lOyAKKyAgICBib3JkZXItcmFkaXVzOiAxMHB4OworICAgIGJv
cmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CisgICAgcGFkZGluZy1sZWZ0OiA4cHg7CisgICAgcGFk
ZGluZy1yaWdodDogOHB4OworICAgIHBhZGRpbmctdG9wOiAxcHg7CisgICAgY29sb3I6IHdoaXRl
OworICAgIGZvbnQtc2l6ZTogOTIlOworICAgIG9wYWNpdHk6IDAuODU7Cit9CkluZGV4OiBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5
cGVUb2tlblZpZXcuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcgPSBmdW5j
dGlvbih0b2tlbkFubm90YXRvciwgc2hvdWxkSGF2ZVJpZ2h0TWFyZ2luLCBzaG91bGRIYXZlTGVm
dE1hcmdpbiwgdGl0bGVUeXBlLCBmdW5jdGlvbk9yVmFyaWFibGVOYW1lKSAKK3sKKyAgICBjb25z
b2xlLmFzc2VydCh0aXRsZVR5cGUgPT09IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxl
VHlwZS52YXJpYWJsZSAgfHwgdGl0bGVUeXBlID09PSBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmll
dy5UaXRsZVR5cGUucmV0dXJuU3RhdGVtZW50KTsKKworICAgIFdlYkluc3BlY3Rvci5PYmplY3Qu
Y2FsbCh0aGlzKTsKKworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpOworICAgIHNwYW4uY2xhc3NOYW1lID0gInR5cGUtdG9rZW4iOworICAgIHNwYW4uc3R5bGUu
bWFyZ2luUmlnaHQgPSAoc2hvdWxkSGF2ZVJpZ2h0TWFyZ2luID8gIjVweCIgOiAiMHB4Iik7Cisg
ICAgc3Bhbi5zdHlsZS5tYXJnaW5MZWZ0ID0gKHNob3VsZEhhdmVMZWZ0TWFyZ2luID8gIjVweCIg
OiAiMHB4Iik7CisKKyAgICB0aGlzLmVsZW1lbnQgPSBzcGFuOworICAgIHRoaXMuX3Rva2VuQW5u
b3RhdG9yID0gdG9rZW5Bbm5vdGF0b3I7CisgICAgdGhpcy5fdHlwZXMgPSBudWxsOworCisKKyAg
ICB0aGlzLl9wb3BvdmVyVGl0bGUgPSBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy50aXRsZUZv
clBvcG92ZXIodGl0bGVUeXBlLCBmdW5jdGlvbk9yVmFyaWFibGVOYW1lKTsKKworICAgIHRoaXMu
X3NldFVwTW91c2VvdmVySGFuZGxlcnMoKTsKK307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5W
aWV3LnRpdGxlRm9yUG9wb3ZlciA9IGZ1bmN0aW9uKHRpdGxlVHlwZSwgZnVuY3Rpb25PclZhcmlh
YmxlTmFtZSkKK3sKKyAgICB2YXIgdGl0bGVTdHJpbmcgPSBudWxsOworICAgIGlmICh0aXRsZVR5
cGUgPT09IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS52YXJpYWJsZSkKKyAg
ICAgICAgdGl0bGVTdHJpbmcgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlR5cGUgaW5mb3JtYXRp
b24gZm9yIHZhcmlhYmxlIikgKyAiOiAiICsgZnVuY3Rpb25PclZhcmlhYmxlTmFtZTsKKyAgICBl
bHNlIHsKKyAgICAgICAgdGl0bGVTdHJpbmcgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJldHVy
biB0eXBlIGluZm9ybWF0aW9uIGZvciBmdW5jdGlvbiIpOworICAgICAgICBpZiAoZnVuY3Rpb25P
clZhcmlhYmxlTmFtZSkKKyAgICAgICAgICAgIHRpdGxlU3RyaW5nICs9ICI6ICIgKyBmdW5jdGlv
bk9yVmFyaWFibGVOYW1lOworICAgIH0KKworICAgIHJldHVybiB0aXRsZVN0cmluZzsKK307CisK
K1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZSA9IHsKKyAgICB2YXJpYWJsZTog
InRpdGxlLXR5cGUtdmFyaWFibGUiLAorICAgIHJldHVyblN0YXRlbWVudDogInRpdGxlLXR5cGUt
cmV0dXJuLXN0YXRlbWVudCIKK307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9y
cyA9IHsKKyAgICBwdXJwbGU6ICIjY2MzYmJmIiwKKyAgICBibHVlOiAiIzNiNzBlMiIsCisgICAg
cmVkOiAiI2RmMzUyZSIsCisgICAgZ3JlZW46ICIjNzZhZTFkIiwKKyAgICBncmF5OiAiIzdlN2U3
ZSIsCisgICAgb3JhbmdlOiAiI2VkODQwMCIKK307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5W
aWV3LkNvbG9yRm9yVHlwZSA9IHsKKyAgICAiU3RyaW5nIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tl
blZpZXcuQ29sb3JzLnJlZCwKKyAgICAiRnVuY3Rpb24iOiBXZWJJbnNwZWN0b3IuVHlwZVRva2Vu
Vmlldy5Db2xvcnMucHVycGxlLCAKKyAgICAiTnVtYmVyIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tl
blZpZXcuQ29sb3JzLmJsdWUsCisgICAgIkludGVnZXIiOiBXZWJJbnNwZWN0b3IuVHlwZVRva2Vu
Vmlldy5Db2xvcnMuYmx1ZSwKKyAgICAiVW5kZWZpbmVkIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tl
blZpZXcuQ29sb3JzLmdyYXksCisgICAgIk51bGwiOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmll
dy5Db2xvcnMuZ3JheSwKKyAgICAiKD8pIjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29s
b3JzLmdyYXksCisgICAgIkJvb2xlYW4iOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xv
cnMucHVycGxlLAorICAgICIobWFueSkiOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xv
cnMub3JhbmdlCit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5wcm90b3R5cGUgPSB7
CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LAorICAgIF9fcHJv
dG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisKKyAgICAvLyBQdWJsaWMKKwor
ICAgIHVwZGF0ZTogZnVuY3Rpb24odHlwZXMpCisgICAgeworICAgICAgICB2YXIgdGl0bGUgPSB0
eXBlcy5kaXNwbGF5VHlwZU5hbWU7CisgICAgICAgIHRoaXMuZWxlbWVudC50ZXh0Q29udGVudCA9
IHRpdGxlOworICAgICAgICB0aGlzLl90eXBlcyA9IHR5cGVzOworICAgICAgICB2YXIgaGFzaFN0
cmluZyA9IHRpdGxlW3RpdGxlLmxlbmd0aCAtIDFdID09PSAiPyIgPyB0aXRsZS5zbGljZSgwLCB0
aXRsZS5sZW5ndGggLSAxKSA6IHRpdGxlOworICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFj
a2dyb3VuZENvbG9yID0gV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JGb3JUeXBlW2hh
c2hTdHJpbmddIHx8IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9ycy5ncmVlbjsKKyAg
ICB9LAorCisgICAgLy8gUHJpdmF0ZQorCisgICAgX3NldFVwTW91c2VvdmVySGFuZGxlcnM6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIHRp
bWVvdXRJRCA9IG51bGw7CisKKyAgICAgICAgdGhpcy5lbGVtZW50Lm9ubW91c2VvdmVyID0gZnVu
Y3Rpb24oKSAKKyAgICAgICAgeworICAgICAgICAgICAgZnVuY3Rpb24gc2hvd1BvcG92ZXJBZnRl
ckRlbGF5KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aW1lb3V0SUQgPSBudWxs
OworCisgICAgICAgICAgICAgICAgdmFyIGRvbVJlY3QgPSBzZWxmLmVsZW1lbnQuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCk7CisgICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG5ldyBXZWJJbnNw
ZWN0b3IuUmVjdChkb21SZWN0LmxlZnQsIGRvbVJlY3QudG9wLCBkb21SZWN0LndpZHRoLCBkb21S
ZWN0LmhlaWdodCk7CisgICAgICAgICAgICAgICAgc2VsZi5fdG9rZW5Bbm5vdGF0b3Iuc291cmNl
Q29kZVRleHRFZGl0b3Iuc2hvd1BvcG92ZXJGb3JUeXBlcyhzZWxmLl90eXBlcywgYm91bmRzLCBz
ZWxmLl9wb3BvdmVyVGl0bGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc2Vs
Zi5fc2hvdWxkU2hvd1BvcG92ZXIoKSkKKyAgICAgICAgICAgICAgICB0aW1lb3V0SUQgPSBzZXRU
aW1lb3V0KHNob3dQb3BvdmVyQWZ0ZXJEZWxheSwgMzUwKTsKKyAgICAgICAgfQorCisgICAgICAg
IHRoaXMuZWxlbWVudC5vbm1vdXNlb3V0ID0gZnVuY3Rpb24oKSAKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHRpbWVvdXRJRCkKKyAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91
dElEKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfc2hvdWxkU2hvd1BvcG92ZXI6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIGlmICgodGhpcy5fdHlwZXMuZ2xvYmFsUHJpbWl0aXZlVHlw
ZU5hbWVzICYmIHRoaXMuX3R5cGVzLmdsb2JhbFByaW1pdGl2ZVR5cGVOYW1lcy5sZW5ndGggPiAx
KSB8fCAodGhpcy5fdHlwZXMubG9jYWxQcmltaXRpdmVUeXBlTmFtZXMgJiYgdGhpcy5fdHlwZXMu
bG9jYWxQcmltaXRpdmVUeXBlTmFtZXMubGVuZ3RoID4gMSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgICAgICBpZiAoKHRoaXMuX3R5cGVzLmdsb2JhbFN0cnVjdHVyZXMgJiYgdGhp
cy5fdHlwZXMuZ2xvYmFsU3RydWN0dXJlcy5sZW5ndGgpIHx8ICh0aGlzLl90eXBlcy5sb2NhbFN0
cnVjdHVyZXMgJiYgdGhpcy5fdHlwZXMubG9jYWxTdHJ1Y3R1cmVzLmxlbmd0aCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236942</attachid>
            <date>2014-08-21 16:12:34 -0700</date>
            <delta_ts>2014-08-21 18:11:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>73463</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2Fs
aXplZFN0cmluZ3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2Fs
aXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwkocmV2aXNpb24gMTcyODMwKQor
KysgU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVk
U3RyaW5ncy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjI3LDYgKzIyNyw3IEBACiAAbABvAGMAYQBs
AGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABpAGQAZQAgAHQAaABlACAAJQBzACAAZABlAHQA
YQBpAGwAcwAgAHMAaQBkAGUAYgBhAHIAIAAoACUAcwApACIAXQAgAD0AIAAiAEgAaQBkAGUAIAB0
AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBsAHMAIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiADsA
CiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABpAGQAZQAgAHQAaABlACAA
JQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBkAGUAYgBhAHIAIgBdACAAPQAgACIASABp
AGQAZQAgAHQAaABlACAAJQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBkAGUAYgBhAHIA
IgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAaQBkAGUAIAB0AGgA
ZQAgACUAcwAgAG4AYQB2AGkAZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAi
AF0AIAA9ACAAIgBIAGkAZABlACAAdABoAGUAIAAlAHMAIABuAGEAdgBpAGcAYQB0AGkAbwBuACAA
cwBpAGQAZQBiAGEAcgAgACgAJQBzACkAIgA7AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkA
bgBnAHMAWwAiAEgAaQBkAGUAIAB0AHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACIAXQAg
AD0AIAAiAEgAaQBkAGUAIAB0AHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACIAOwAKIABs
AG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBIAG8AcwB0ACIAXQAgAD0AIAAiAEgA
bwBzAHQAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEkAYwBvAG4A
IABPAG4AbAB5ACIAXQAgAD0AIAAiAEkAYwBvAG4AIABPAG4AbAB5ACIAOwAKIABsAG8AYwBhAGwA
aQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBJAGMAbwBuACAAYQBuAGQAIABUAGUAeAB0ACAAKABI
AG8AcgBpAHoAbwBuAHQAYQBsACkAIgBdACAAPQAgACIASQBjAG8AbgAgAGEAbgBkACAAVABlAHgA
dAAgACgASABvAHIAaQB6AG8AbgB0AGEAbAApACIAOwAKQEAgLTMzNCw2ICszMzUsNyBAQAogAGwA
bwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFAAcgBvAGMAZQBzAHMAaQBuAGcAIABJ
AG4AcwB0AHIAdQBjAHQAaQBvAG4AIgBdACAAPQAgACIAUAByAG8AYwBlAHMAcwBpAG4AZwAgAEkA
bgBzAHQAcgB1AGMAdABpAG8AbgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcA
cwBbACIAUAByAG8AZgBpAGwAZQAgACUAZAAiAF0AIAA9ACAAIgBQAHIAbwBmAGkAbABlACAAJQBk
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBQAHIAbwBwAGUAcgB0
AGkAZQBzACIAXQAgAD0AIAAiAFAAcgBvAHAAZQByAHQAaQBlAHMAIgA7AAorAGwAbwBjAGEAbABp
AHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFAAcgBvAHQAbwB0AHkAcABlACIAXQAgAD0AIAAiAFAA
cgBvAHQAbwB0AHkAcABlACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsA
IgBRAHUAZQByAHkAIABQAGEAcgBhAG0AZQB0AGUAcgBzACIAXQAgAD0AIAAiAFEAdQBlAHIAeQAg
AFAAYQByAGEAbQBlAHQAZQByAHMAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBn
AHMAWwAiAFEAdQBlAHIAeQAgAFMAdAByAGkAbgBnACIAXQAgAD0AIAAiAFEAdQBlAHIAeQAgAFMA
dAByAGkAbgBnACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGEA
ZABpAGEAbAAgAEcAcgBhAGQAaQBlAG4AdAAiAF0AIAA9ACAAIgBSAGEAZABpAGEAbAAgAEcAcgBh
AGQAaQBlAG4AdAAiADsACkBAIC0zNjQsNiArMzY2LDggQEAKIABsAG8AYwBhAGwAaQB6AGUAZABT
AHQAcgBpAG4AZwBzAFsAIgBSAGUAcwBvAHUAcgBjAGUAcwAiAF0AIAA9ACAAIgBSAGUAcwBvAHUA
cgBjAGUAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHMA
cABvAG4AcwBlACIAXQAgAD0AIAAiAFIAZQBzAHAAbwBuAHMAZQAiADsACiAAbABvAGMAYQBsAGkA
egBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHMAcABvAG4AcwBlACAASABlAGEAZABlAHIAcwAi
AF0AIAA9ACAAIgBSAGUAcwBwAG8AbgBzAGUAIABIAGUAYQBkAGUAcgBzACIAOwAKKwBsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUAdAB1AHIAbgAgAHQAeQBwAGUAIABpAG4A
ZgBvAHIAbQBhAHQAaQBvAG4AIABmAG8AcgAgAGYAdQBuAGMAdABpAG8AbgAiAF0AIAA9ACAAIgBS
AGUAdAB1AHIAbgAgAHQAeQBwAGUAIABpAG4AZgBvAHIAbQBhAHQAaQBvAG4AIABmAG8AcgAgAGYA
dQBuAGMAdABpAG8AbgAiADsACisAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIA
UgBlAHQAdQByAG4AIAB0AHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACAAZgBvAHIAIABm
AHUAbgBjAHQAaQBvAG4AOgAgACUAcwAiAF0AIAA9ACAAIgBSAGUAdAB1AHIAbgAgAHQAeQBwAGUA
IABpAG4AZgBvAHIAbQBhAHQAaQBvAG4AIABmAG8AcgAgAGYAdQBuAGMAdABpAG8AbgA6ACAAJQBz
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUAdgBlAGEAbAAg
AGkAbgAgAEQATwBNACAAVAByAGUAZQAiAF0AIAA9ACAAIgBSAGUAdgBlAGEAbAAgAGkAbgAgAEQA
TwBNACAAVAByAGUAZQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIA
UgBlAHYAZQBhAGwAIABpAG4AIABEAGUAYgB1AGcAZwBlAHIAIABOAGEAdgBpAGcAYQB0AGkAbwBu
ACAAUwBpAGQAZQBiAGEAcgAiAF0AIAA9ACAAIgBSAGUAdgBlAGEAbAAgAGkAbgAgAEQAZQBiAHUA
ZwBnAGUAcgAgAE4AYQB2AGkAZwBhAHQAaQBvAG4AIABTAGkAZABlAGIAYQByACIAOwAKIABsAG8A
YwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUAdgBlAGEAbAAgAGkAbgAgAE8AcgBp
AGcAaQBuAGEAbAAgAFIAZQBzAG8AdQByAGMAZQAiAF0AIAA9ACAAIgBSAGUAdgBlAGEAbAAgAGkA
bgAgAE8AcgBpAGcAaQBuAGEAbAAgAFIAZQBzAG8AdQByAGMAZQAiADsACkBAIC00MDMsNiArNDA3
LDcgQEAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAdABo
AGUAIAAlAHMAIABuAGEAdgBpAGcAYQB0AGkAbwBuACAAcwBpAGQAZQBiAGEAcgAgACgAJQBzACkA
IgBdACAAPQAgACIAUwBoAG8AdwAgAHQAaABlACAAJQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAg
AHMAaQBkAGUAYgBhAHIAIAAoACUAcwApACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBp
AG4AZwBzAFsAIgBTAGgAbwB3ACAAdABpAG0AZQBzACAAYQBzACAAYQBiAHMAbwBsAHUAdABlACAA
dABpAG0AZQBzACIAXQAgAD0AIAAiAFMAaABvAHcAIAB0AGkAbQBlAHMAIABhAHMAIABhAGIAcwBv
AGwAdQB0AGUAIAB0AGkAbQBlAHMAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBn
AHMAWwAiAFMAaABvAHcAIAB0AGkAbQBlAHMAIABhAHMAIABwAGUAcgBjAGUAbgB0AGEAZwBlAHMA
IgBdACAAPQAgACIAUwBoAG8AdwAgAHQAaQBtAGUAcwAgAGEAcwAgAHAAZQByAGMAZQBuAHQAYQBn
AGUAcwAiADsACisAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAg
AHQAeQBwAGUAIABpAG4AZgBvAHIAbQBhAHQAaQBvAG4AIgBdACAAPQAgACIAUwBoAG8AdwAgAHQA
eQBwAGUAIABpAG4AZgBvAHIAbQBhAHQAaQBvAG4AIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMA
dAByAGkAbgBnAHMAWwAiAFMAaQB6AGUAIgBdACAAPQAgACIAUwBpAHoAZQAiADsACiAAbABvAGMA
YQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBtAGEAbABsACAASQBjAG8AbgBzACIAXQAg
AD0AIAAiAFMAbQBhAGwAbAAgAEkAYwBvAG4AcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0
AHIAaQBuAGcAcwBbACIAUwBvAGMAawBlAHQAIgBdACAAPQAgACIAUwBvAGMAawBlAHQAIgA7AApA
QCAtNDQ5LDYgKzQ1NCw3IEBACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIA
VAByAGEAbgBzAGYAZQByAGUAZAAiAF0AIAA9ACAAIgBUAHIAYQBuAHMAZgBlAHIAZQBkACIAOwAK
IABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBUAHkAcABlACIAXQAgAD0AIAAi
AFQAeQBwAGUAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFQAeQBw
AGUAIABJAHMAcwB1AGUAIgBdACAAPQAgACIAVAB5AHAAZQAgAEkAcwBzAHUAZQAiADsACisAbABv
AGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAVAB5AHAAZQAgAGkAbgBmAG8AcgBtAGEA
dABpAG8AbgAgAGYAbwByACAAdgBhAHIAaQBhAGIAbABlADoAIAAlAHMAIgBdACAAPQAgACIAVAB5
AHAAZQAgAGkAbgBmAG8AcgBtAGEAdABpAG8AbgAgAGYAbwByACAAdgBhAHIAaQBhAGIAbABlADoA
IAAlAHMAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFUAbgBrAG4A
bwB3AG4AIABuAG8AZABlACIAXQAgAD0AIAAiAFUAbgBrAG4AbwB3AG4AIABuAG8AZABlACIAOwAK
IABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBVAG4AdABpAHQAbABlAGQAIgBd
ACAAPQAgACIAVQBuAHQAaQB0AGwAZQBkACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBp
AG4AZwBzAFsAIgBVAHMAZQByACAAQQBnAGUAbgB0ACAAUwB0AHkAbABlAHMAaABlAGUAdAAiAF0A
IAA9ACAAIgBVAHMAZQByACAAQQBnAGUAbgB0ACAAUwB0AHkAbABlAHMAaABlAGUAdAAiADsACklu
ZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCShy
ZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9N
YWluLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsNyBAQAogICAgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvVGltZWxpbmVWaWV3LmNzcyI+CiAgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9Ub29sYmFyLmNzcyI+CiAgICAgPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9UcmVlRWxlbWVudFN0YXR1c0J1dHRvbi5jc3MiPgor
ICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvVHlwZVRva2VuVmlldy5jc3Mi
PgogCiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJDb250cm9sbGVycy9Db2RlTWly
cm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9IkNvbnRyb2xsZXJzL0NvZGVNaXJyb3JEcmFnVG9BZGp1c3ROdW1iZXJDb250cm9sbGVy
LmNzcyI+CkBAIC00NjEsNiArNDYyLDggQEAKICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVG9vbGJh
ci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1RyZWVFbGVtZW50U3RhdHVz
QnV0dG9uLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHJlZU91dGxpbmVE
YXRhR3JpZFN5bmNocm9uaXplci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpZXdz
L1R5cGVQcm9wZXJ0aWVzU2VjdGlvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZp
ZXdzL1R5cGVUb2tlblZpZXcuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkNvbnRy
b2xsZXJzL0NvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5qcyI+PC9zY3JpcHQ+CiAKQEAgLTQ5
Miw2ICs0OTUsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9Tb3VyY2VNYXBNYW5h
Z2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvU3RvcmFnZU1h
bmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9UaW1lbGlu
ZU1hbmFnZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9UeXBl
VG9rZW5Bbm5vdGF0b3IuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkJhc2UvTWFp
bi5qcyI+PC9zY3JpcHQ+CiAKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0Jhc2UvTWFpbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9CYXNlL01haW4uanMJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwkod29ya2luZyBjb3B5KQpAQCAt
MTYxLDYgKzE2MSwxMCBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogCiAgICAg
dGhpcy5zaG93U2hhZG93RE9NU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygic2hv
dy1zaGFkb3ctZG9tIiwgZmFsc2UpOwogICAgIHRoaXMuc2hvd1JlcGxheUludGVyZmFjZVNldHRp
bmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoInNob3ctd2ViLXJlcGxheSIsIGZhbHNlKTsK
KyAgICAKKyAgICB0aGlzLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZyA9IG5l
dyBXZWJJbnNwZWN0b3IuU2V0dGluZygic2hvdy1qYXZhc2NyaXB0LXR5cGUtaW5mb3JtYXRpb24i
LCBmYWxzZSk7CisgICAgaWYgKHRoaXMuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0
aW5nLnZhbHVlKQorICAgICAgICBSdW50aW1lQWdlbnQuZW5hYmxlVHlwZVByb2ZpbGVyKCk7CiAK
ICAgICB0aGlzLm1vdXNlQ29vcmRzID0gewogICAgICAgICB4OiAwLApJbmRleDogU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJh
Y2tpbmdDb250cm9sbGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxl
ci5qcwkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnQKICAgICBOb25lOiAibm9uZSIsCiAgICAgTm9uU3ltYm9sVG9rZW5zOiAi
bm9uLXN5bWJvbC10b2tlbnMiLAogICAgIEphdmFTY3JpcHRFeHByZXNzaW9uOiAiamF2YXNjcmlw
dC1leHByZXNzaW9uIiwKKyAgICBKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOiAiamF2YXNjcmlw
dC10eXBlLWluZm9ybWF0aW9uIiwKICAgICBNYXJrZWRUb2tlbnM6ICJtYXJrZWQtdG9rZW5zIgog
fQogCkBAIC0zODksNiArMzkwLDcgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNr
aW5nQ29udAogICAgICAgICAgICAgdGhpcy5fY2FuZGlkYXRlID0gdGhpcy5fcHJvY2Vzc05vblN5
bWJvbFRva2VuKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2YVNjcmlwdEV4cHJl
c3Npb246CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5n
Q29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb246CiAgICAgICAgICAgICB0
aGlzLl9jYW5kaWRhdGUgPSB0aGlzLl9wcm9jZXNzSmF2YVNjcmlwdEV4cHJlc3Npb24oKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5NYXJrZWRUb2tlbnM6CkluZGV4OiBTb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJTb3VyY2VNYXAu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvRm9ybWF0dGVyU291cmNlTWFwLmpzCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJTb3Vy
Y2VNYXAuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE1ICs0NSwyNyBAQCBXZWJJbnNwZWN0b3Iu
Rm9ybWF0dGVyU291cmNlTWFwLnByb3RvdHlwCiAgICAgb3JpZ2luYWxUb0Zvcm1hdHRlZDogZnVu
Y3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQogICAgIHsKICAgICAgICAgdmFyIG9yaWdp
bmFsUG9zaXRpb24gPSB0aGlzLl9sb2NhdGlvblRvUG9zaXRpb24odGhpcy5fb3JpZ2luYWxMaW5l
RW5kaW5ncywgbGluZU51bWJlciB8fCAwLCBjb2x1bW5OdW1iZXIgfHwgMCk7CisgICAgICAgIHJl
dHVybiB0aGlzLm9yaWdpbmFsUG9zaXRpb25Ub0Zvcm1hdHRlZChvcmlnaW5hbFBvc2l0aW9uKTsK
KyAgICB9LAorCisgICAgb3JpZ2luYWxQb3NpdGlvblRvRm9ybWF0dGVkOiBmdW5jdGlvbihvcmln
aW5hbFBvc2l0aW9uKQorICAgIHsKICAgICAgICAgdmFyIGZvcm1hdHRlZFBvc2l0aW9uID0gdGhp
cy5fY29udmVydFBvc2l0aW9uKHRoaXMuX21hcHBpbmcub3JpZ2luYWwsIHRoaXMuX21hcHBpbmcu
Zm9ybWF0dGVkLCBvcmlnaW5hbFBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0
aW9uVG9Mb2NhdGlvbih0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncywgZm9ybWF0dGVkUG9zaXRp
b24pOwogICAgIH0sCiAKKwogICAgIGZvcm1hdHRlZFRvT3JpZ2luYWw6IGZ1bmN0aW9uKGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CisgICAgICAgIHZhciBvcmlnaW5hbFBvc2l0aW9u
ID0gdGhpcy5mb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJl
cik7CisgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblRvTG9jYXRpb24odGhpcy5fb3JpZ2lu
YWxMaW5lRW5kaW5ncywgb3JpZ2luYWxQb3NpdGlvbik7CisgICAgfSwKKworICAgIGZvcm1hdHRl
ZFRvT3JpZ2luYWxPZmZzZXQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAg
ICB7CiAgICAgICAgIHZhciBmb3JtYXR0ZWRQb3NpdGlvbiA9IHRoaXMuX2xvY2F0aW9uVG9Qb3Np
dGlvbih0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncywgbGluZU51bWJlciB8fCAwLCBjb2x1bW5O
dW1iZXIgfHwgMCk7CiAgICAgICAgIHZhciBvcmlnaW5hbFBvc2l0aW9uID0gdGhpcy5fY29udmVy
dFBvc2l0aW9uKHRoaXMuX21hcHBpbmcuZm9ybWF0dGVkLCB0aGlzLl9tYXBwaW5nLm9yaWdpbmFs
LCBmb3JtYXR0ZWRQb3NpdGlvbik7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblRvTG9j
YXRpb24odGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncywgb3JpZ2luYWxQb3NpdGlvbik7CisgICAg
ICAgIHJldHVybiBvcmlnaW5hbFBvc2l0aW9uOwogICAgIH0sCiAKICAgICAvLyBQcml2YXRlCklu
ZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBl
VG9rZW5Bbm5vdGF0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlw
ZVRva2VuQW5ub3RhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjc0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvciA9IGZ1bmN0aW9uKHNvdXJj
ZUNvZGVUZXh0RWRpdG9yLCBzY3JpcHQpCit7CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxs
KHRoaXMpOworCisgICAgY29uc29sZS5hc3NlcnQoc291cmNlQ29kZVRleHRFZGl0b3IgJiYgc291
cmNlQ29kZVRleHRFZGl0b3IgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IsIHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKKyAgICBjb25zb2xlLmFzc2VydChzY3JpcHQs
IHNjcmlwdCk7CisKKyAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7CisgICAgdGhpcy5fc291cmNl
Q29kZVRleHRFZGl0b3IgPSBzb3VyY2VDb2RlVGV4dEVkaXRvcjsKKyAgICB0aGlzLl90eXBlVG9r
ZW5Ob2RlcyA9IFtdOworICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcyA9IFtdOworICAgIHRo
aXMuX3RpbWVvdXRJZGVudGlmaWVyID0gbnVsbDsKKyAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNl
OworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUgPSB7Cisg
ICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IsCisgICAgX19w
cm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKworICAgIC8vIFB1YmxpYwor
CisgICAgZ2V0IGlzQWN0aXZlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9pc0FjdGl2
ZTsKKyAgICB9LAorCisgICAgZ2V0IHNvdXJjZUNvZGVUZXh0RWRpdG9yKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvcjsKKyAgICB9LAorCisgICAgcGF1
c2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVlZGVk
KCk7CisgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7CisgICAgfSwKKworICAgIHJlc3Vt
ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQo
KTsKKyAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOworICAgICAgICB0aGlzLl9pbnNlcnRB
bm5vdGF0aW9ucygpOworICAgIH0sCisKKyAgICByZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsKKyAgICAgICAgdGhpcy5faXNBY3Rp
dmUgPSB0cnVlOworICAgICAgICB0aGlzLl9jbGVhclR5cGVUb2tlbnMoKTsKKyAgICAgICAgdGhp
cy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAgdG9nZ2xlVHlwZUFubm90YXRp
b25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5faXNBY3RpdmUpIHsKKyAg
ICAgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLl9jbGVh
clR5cGVUb2tlbnMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2lzQWN0
aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZTsKKyAgICB9LAorCisgICAgLy8gUHJpdmF0ZQorCisg
ICAgX2luc2VydEFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRo
aXMuX2lzQWN0aXZlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzY3JpcHRT
eW50YXhUcmVlID0gdGhpcy5fc2NyaXB0LnNjcmlwdFN5bnRheFRyZWU7CisKKyAgICAgICAgaWYg
KCFzY3JpcHRTeW50YXhUcmVlKSB7CisgICAgICAgICAgICB0aGlzLl9zY3JpcHQucmVxdWVzdFNj
cmlwdFN5bnRheFRyZWUoZnVuY3Rpb24oc3ludGF4VHJlZSkgeworICAgICAgICAgICAgICAgIC8v
IEFmdGVyIHJlcXVlc3RpbmcgdGhlIHRyZWUsIHdlIHN0aWxsIG1pZ2h0IGdldCBhIG51bGwgdHJl
ZSBmcm9tIGEgcGFyc2UgZXJyb3IuCisgICAgICAgICAgICAgICAgaWYgKHN5bnRheFRyZWUpCisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydEFubm90YXRpb25zKCk7CisgICAgICAgICAg
ICB9LmJpbmQodGhpcykpOworCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXNjcmlwdFN5bnRheFRyZWUucGFyc2VkU3VjY2Vzc2Z1bGx5KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHZhciBzdGFydE9mZnNldCA9IHRoaXMuX3NvdXJjZUNvZGVU
ZXh0RWRpdG9yLnZpc2libGVSYW5nZVN0YXJ0T2Zmc2V0KCk7CisgICAgICAgIHZhciBlbmRPZmZz
ZXQgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvci52aXNpYmxlUmFuZ2VFbmRPZmZzZXQoKTsK
KworICAgICAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKKyAgICAgICAgdmFyIGFsbE5v
ZGVzSW5SYW5nZSA9IHNjcmlwdFN5bnRheFRyZWUuZmlsdGVyQnlSYW5nZShzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0KTsKKyAgICAgICAgc2NyaXB0U3ludGF4VHJlZS51cGRhdGVUeXBlcyhhbGxOb2Rl
c0luUmFuZ2UsIGZ1bmN0aW9uIGFmdGVyVHlwZVVwZGF0ZXMoKSB7CisgICAgICAgICAgICAvLyBC
ZWNhdXNlIHRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIGNhbGwsIHdlIGNvdWxkIGhhdmUgYmVlbiBk
ZWFjdGl2YXRlZCBiZWZvcmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgICAg
ICAgICAgIGlmICghdGhpcy5faXNBY3RpdmUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBhbGxOb2Rlc0luUmFuZ2UuZm9yRWFjaCh0aGlzLl9pbnNlcnRUeXBlVG9rZW5z
Rm9yRWFjaE5vZGUsIHRoaXMpOworICAgICAgICAgICAgYWxsTm9kZXNJblJhbmdlLmZvckVhY2go
dGhpcy5fdXBkYXRlVHlwZVRva2Vuc0ZvckVhY2hOb2RlLCB0aGlzKTsKKworICAgICAgICAgICAg
dmFyIHRvdGFsVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7CisgICAgICAgICAgICB2YXIg
dGltZW91dFRpbWUgPSBNYXRoLm1pbihNYXRoLm1heCg3NTAwLCB0b3RhbFRpbWUpLCA4ICogdG90
YWxUaW1lKTsKKworICAgICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBzZXRUaW1l
b3V0KGZ1bmN0aW9uIHRpbWVvdXRVcGRhdGUoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGlt
ZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydEFubm90
YXRpb25zKCk7CisgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWVvdXRUaW1lKTsKKyAgICAg
ICAgfS5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgX2luc2VydFR5cGVUb2tlbnNGb3JFYWNo
Tm9kZTogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIHZhciBzY3JpcHRTeW50YXhUcmVl
ID0gdGhpcy5fc2NyaXB0Ll9zY3JpcHRTeW50YXhUcmVlOworCisgICAgICAgIHN3aXRjaCAobm9k
ZS50eXBlKSB7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICBm
b3IgKHZhciBwYXJhbSBvZiBub2RlLnBhcmFtcykgeworICAgICAgICAgICAgICAgIGlmICghcGFy
YW0uYXR0YWNobWVudHMuX190eXBlVG9rZW4gJiYgcGFyYW0uYXR0YWNobWVudHMudHlwZXMgJiYg
cGFyYW0uYXR0YWNobWVudHMudHlwZXMuZGlzcGxheVR5cGVOYW1lKQorICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9pbnNlcnRUb2tlbihwYXJhbS5yYW5nZVswXSwgcGFyYW0sIGZhbHNlLCBXZWJJ
bnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuVmFyaWFibGUsIHBhcmFtLm5hbWUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBhIGZ1bmN0aW9uIGRvZXMgbm90IGhh
dmUgYW4gZXhwbGljaXQgcmV0dXJuIHR5cGUsIHRoZW4gZG9uJ3Qgc2hvdyBhIHJldHVybiB0eXBl
IHVubGVzcyB3ZSB0aGluayBpdCdzIGEgY29uc3RydWN0b3IuCisgICAgICAgICAgICB2YXIgZnVu
Y3Rpb25SZXR1cm5UeXBlID0gbm9kZS5hdHRhY2htZW50cy5yZXR1cm5UeXBlczsKKyAgICAgICAg
ICAgIGlmIChub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuIHx8ICFmdW5jdGlvblJldHVyblR5
cGUgfHwgIWZ1bmN0aW9uUmV0dXJuVHlwZS5kaXNwbGF5VHlwZU5hbWUpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmIChzY3JpcHRTeW50YXhUcmVlLmNvbnRhaW5zTm9u
RW1wdHlSZXR1cm5TdGF0ZW1lbnQobm9kZS5ib2R5KSB8fCBmdW5jdGlvblJldHVyblR5cGUuZGlz
cGxheVR5cGVOYW1lICE9PSAiVW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAgIHZhciBmdW5j
dGlvbk5hbWUgPSBub2RlLmlkID8gbm9kZS5pZC5uYW1lIDogbnVsbDsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9pbnNlcnRUb2tlbihub2RlLmlzR2V0dGVyT3JTZXR0ZXIgPyBub2RlLmdldHRlck9y
U2V0dGVyUmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdLCBub2RlLAorICAgICAgICAgICAgICAgICAg
ICB0cnVlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuUmV0dXJuU3RhdGVt
ZW50LCBmdW5jdGlvbk5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFi
bGVEZWNsYXJhdG9yOgorICAgICAgICAgICAgaWYgKCFub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRv
a2VuICYmIG5vZGUuYXR0YWNobWVudHMudHlwZXMgJiYgbm9kZS5hdHRhY2htZW50cy50eXBlcy5k
aXNwbGF5VHlwZU5hbWUpCisgICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0VG9rZW4obm9kZS5p
ZC5yYW5nZVswXSwgbm9kZSwgZmFsc2UsIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxl
VHlwZS5WYXJpYWJsZSwgbm9kZS5pZC5uYW1lKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9LAorCisgICAgX2luc2VydFRva2VuOiBmdW5jdGlvbihvcmlnaW5hbE9mZnNl
dCwgbm9kZSwgc2hvdWxkVHJhbnNsYXRlT2Zmc2V0VG9BZnRlclBhcmFtZXRlckxpc3QsIHR5cGVU
b2tlblRpdGxlVHlwZSwgZnVuY3Rpb25PclZhcmlhYmxlTmFtZSkKKyAgICB7CisgICAgICAgIHZh
ciB0b2tlblBvc2l0aW9uID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3Iub3JpZ2luYWxPZmZz
ZXRUb0N1cnJlbnRQb3NpdGlvbihvcmlnaW5hbE9mZnNldCk7CisgICAgICAgIHZhciBjdXJyZW50
T2Zmc2V0ID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3IuY3VycmVudFBvc2l0aW9uVG9DdXJy
ZW50T2Zmc2V0KHRva2VuUG9zaXRpb24pOworICAgICAgICB2YXIgc291cmNlU3RyaW5nID0gdGhp
cy5fc291cmNlQ29kZVRleHRFZGl0b3Iuc3RyaW5nOworCisgICAgICAgIGlmIChzaG91bGRUcmFu
c2xhdGVPZmZzZXRUb0FmdGVyUGFyYW1ldGVyTGlzdCkgeworICAgICAgICAgICAgLy8gVHJhbnNs
YXRlIHRoZSBwb3NpdGlvbiB0byB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcyBvZiB0aGUgZnVuY3Rp
b24gYXJndW1lbnRzOgorICAgICAgICAgICAgLy8gdHJhbnNsYXRlIGZyb206IFt0eXBlLXRva2Vu
XSBmdW5jdGlvbiBmb28oKSB7fSA9PiB0bzogZnVuY3Rpb24gZm9vKCkgW3R5cGUtdG9rZW5dIHt9
CisgICAgICAgICAgICBjdXJyZW50T2Zmc2V0ID0gdGhpcy5fdHJhbnNsYXRlVG9PZmZzZXRBZnRl
ckZ1bmN0aW9uUGFyYW1ldGVyTGlzdChub2RlLCBjdXJyZW50T2Zmc2V0LCBzb3VyY2VTdHJpbmcp
OworICAgICAgICAgICAgdG9rZW5Qb3NpdGlvbiA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9y
LmN1cnJlbnRPZmZzZXRUb0N1cnJlbnRQb3NpdGlvbihjdXJyZW50T2Zmc2V0KTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIE5vdGU6IGJvb2ttYXJrcyByZW5kZXIgdG8gdGhlIGxlZnQgb2YgdGhl
IGNoYXJhY3RlciB0aGV5J3JlIGJlaW5nIGRpc3BsYXllZCBuZXh0IHRvLgorICAgICAgICAvLyBU
aGlzIGlzIHdoeSByaWdodCBtYXJnaW4gY2hlY2tzIHRoZSBjdXJyZW50IG9mZnNldC4gQW5kIHRo
aXMgaXMgb2theSB0byBkbyBiZWNhdXNlIEphdmFTY3JpcHQgY2FuJ3QgYmUgd3JpdHRlbiByaWdo
dC10by1sZWZ0LgorICAgICAgICB2YXIgaXNTcGFjZVJlZ2V4cCA9IC9ccy87CisgICAgICAgIHZh
ciBzaG91bGRIYXZlTGVmdE1hcmdpbiA9IGN1cnJlbnRPZmZzZXQgIT09IDAgJiYgIWlzU3BhY2VS
ZWdleHAudGVzdChzb3VyY2VTdHJpbmdbY3VycmVudE9mZnNldCAtIDFdKTsKKyAgICAgICAgdmFy
IHNob3VsZEhhdmVSaWdodE1hcmdpbiA9ICFpc1NwYWNlUmVnZXhwLnRlc3Qoc291cmNlU3RyaW5n
W2N1cnJlbnRPZmZzZXRdKTsKKyAgICAgICAgdmFyIHR5cGVUb2tlbiA9IG5ldyBXZWJJbnNwZWN0
b3IuVHlwZVRva2VuVmlldyh0aGlzLCBzaG91bGRIYXZlUmlnaHRNYXJnaW4sIHNob3VsZEhhdmVM
ZWZ0TWFyZ2luLCB0eXBlVG9rZW5UaXRsZVR5cGUsIGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpOwor
ICAgICAgICB2YXIgYm9va21hcmsgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvci5zZXRVbmlx
dWVCb29rbWFyayh0b2tlblBvc2l0aW9uLCB0eXBlVG9rZW4uZWxlbWVudCk7CisgICAgICAgIG5v
ZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4gPSB0eXBlVG9rZW47CisgICAgICAgIHRoaXMuX3R5
cGVUb2tlbk5vZGVzLnB1c2gobm9kZSk7CisgICAgICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJr
cy5wdXNoKGJvb2ttYXJrKTsKKyAgICB9LAorCisgICAgX3VwZGF0ZVR5cGVUb2tlbnNGb3JFYWNo
Tm9kZTogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7
CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVu
Y3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICBub2RlLnBhcmFt
cy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtLmF0
dGFjaG1lbnRzLl9fdHlwZVRva2VuKQorICAgICAgICAgICAgICAgICAgICBwYXJhbS5hdHRhY2ht
ZW50cy5fX3R5cGVUb2tlbi51cGRhdGUocGFyYW0uYXR0YWNobWVudHMudHlwZXMpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBpZiAobm9kZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbikK
KyAgICAgICAgICAgICAgICBub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuLnVwZGF0ZShub2Rl
LmF0dGFjaG1lbnRzLnJldHVyblR5cGVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFy
YXRvcjoKKyAgICAgICAgICAgIGlmIChub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuKQorICAg
ICAgICAgICAgICAgIG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4udXBkYXRlKG5vZGUuYXR0
YWNobWVudHMudHlwZXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9LAor
CisgICAgX3RyYW5zbGF0ZVRvT2Zmc2V0QWZ0ZXJGdW5jdGlvblBhcmFtZXRlckxpc3Q6IGZ1bmN0
aW9uKG5vZGUsIG9mZnNldCwgc291cmNlU3RyaW5nKQorICAgIHsKKyAgICAgICAgLy8gVGhlIGFz
c3VtcHRpb24gaGVyZSBpcyB0aGF0IHdlIGdldCB0aGUgb2Zmc2V0IHN0YXJ0aW5nIGF0IHRoZSBm
dW5jdGlvbiBrZXl3b3JkIChvciBhZnRlciB0aGUgZ2V0L3NldCBrZXl3b3JkcykuCisgICAgICAg
IC8vIFdlIHdpbGwgcmV0dXJuIHRoZSBvZmZzZXQgZm9yIHRoZSBjbG9zaW5nIHBhcmVudGhlc2lz
IGluIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KKyAgICAgICAgLy8gQWxsIHRoaXMgY29kZSBp
cyBqdXN0IGEgd2F5IHRvIGZpbmQgdGhpcyBwYXJlbnRoZXNpcyB3aGlsZSBpZ25vcmluZyBjb21t
ZW50cy4KKworICAgICAgICB2YXIgaXNNdWx0aUxpbmVDb21tZW50ID0gZmFsc2U7CisgICAgICAg
IHZhciBpc1NpbmdsZUxpbmVDb21tZW50ID0gZmFsc2U7CisgICAgICAgIHZhciBzaG91bGRJZ25v
cmUgPSBmYWxzZTsKKworICAgICAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoYXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBFY21hU2NyaXB0IDUgZ3JhbW1hciBm
b3Igc2luZ2xlIGxpbmUgY29tbWVudHMgYW5kIGxpbmUgdGVybWluYXRvcnM6CisgICAgICAgICAg
ICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMt
Ny4zCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNt
YS0yNjIvNS4xLyNzZWMtNy40CisgICAgICAgICAgICByZXR1cm4gY2hhciA9PT0gIlxuIiB8fCBj
aGFyID09PSAiXHIiIHx8IGNoYXIgPT09ICJcdTIwMjgiIHx8IGNoYXIgPT09ICJcdTIwMjkiOwor
ICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKChzb3VyY2VTdHJpbmdbb2Zmc2V0XSAhPT0gIiki
IHx8IHNob3VsZElnbm9yZSkgJiYgb2Zmc2V0IDwgc291cmNlU3RyaW5nLmxlbmd0aCkgeworICAg
ICAgICAgICAgaWYgKGlzU2luZ2xlTGluZUNvbW1lbnQgJiYgaXNMaW5lVGVybWluYXRvcihzb3Vy
Y2VTdHJpbmdbb2Zmc2V0XSkpIHsKKyAgICAgICAgICAgICAgICBpc1NpbmdsZUxpbmVDb21tZW50
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgc2hvdWxkSWdub3JlID0gZmFsc2U7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzTXVsdGlMaW5lQ29tbWVudCAmJiBzb3VyY2VTdHJpbmdbb2Zmc2V0
XSA9PT0gIioiICYmIHNvdXJjZVN0cmluZ1tvZmZzZXQgKyAxXSA9PT0gIi8iKSB7CisgICAgICAg
ICAgICAgICAgaXNNdWx0aUxpbmVDb21tZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgc2hv
dWxkSWdub3JlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgb2Zmc2V0Kys7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKCFzaG91bGRJZ25vcmUgJiYgc291cmNlU3RyaW5nW29mZnNldF0gPT09ICIv
IikgeworICAgICAgICAgICAgICAgIG9mZnNldCsrOworICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2VTdHJpbmdbb2Zmc2V0XSA9PT0gIioiKQorICAgICAgICAgICAgICAgICAgICBpc011bHRpTGlu
ZUNvbW1lbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZVN0cmluZ1tv
ZmZzZXRdID09PSAiLyIpCisgICAgICAgICAgICAgICAgICAgIGlzU2luZ2xlTGluZUNvbW1lbnQg
PSB0cnVlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJCYWQgcGFyc2luZy4gQ291bGRuJ3QgcGFyc2UgY29tbWVudCBwcmVhbWJsZS4i
KTsKKyAgICAgICAgICAgICAgICBzaG91bGRJZ25vcmUgPSB0cnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBvZmZzZXQrKzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBvZmZz
ZXQgKyAxOworICAgIH0sCisKKyAgICBfY2xlYXJUeXBlVG9rZW5zOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB0aGlzLl90eXBlVG9rZW5Ob2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHsK
KyAgICAgICAgICAgIG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4gPSBudWxsOworICAgICAg
ICB9KTsKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtzLmZvckVhY2goZnVuY3Rpb24o
Ym9va21hcmspIHsKKyAgICAgICAgICAgIGJvb2ttYXJrLmNsZWFyKCk7CisgICAgICAgIH0pOwor
CisgICAgICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzID0gW107CisgICAgICAgIHRoaXMuX3R5cGVU
b2tlbkJvb2ttYXJrcyA9IFtdOworICAgIH0sCisKKyAgICBfY2xlYXJUaW1lb3V0SWZOZWVkZWQ6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl90aW1lb3V0SWRlbnRpZmllcikg
eworICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyKTsKKyAg
ICAgICAgICAgIHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyID0gbnVsbDsKKyAgICAgICAgfQorICAg
IH0KK307CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMv
TmF2aWdhdGlvbkl0ZW1UeXBlcy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtVHlwZXMuc3ZnCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmln
YXRpb25JdGVtVHlwZXMuc3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIj8+Cis8IS0tIENvcHlyaWdodCDCqSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gLS0+Cis8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTUgMTUiPgorICAgIDxyZWN0IGNsYXNzPSJz
dHJva2VkIiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiB4PSIwLjUiIHk9IjEuNSIgd2lkdGg9
IjE0IiBoZWlnaHQ9IjEyIiByeD0iMiIvPgorICAgIDxwYXRoIGNsYXNzPSJzdHJva2VkIiBmaWxs
PSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBkPSJNIDcuNSA0
LjUgTCA3LjUgMTAuNSBNIDQuNSA0LjUgTCAxMC41IDQuNSIvPgorPC9zdmc+CkluZGV4OiBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQu
anMJKHJldmlzaW9uIDE3MjgzMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01vZGVscy9TY3JpcHQuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsMTEgQEAg
V2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9y
ZXNvdXJjZTsKICAgICB9LAogCisgICAgZ2V0IHNjcmlwdFN5bnRheFRyZWUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3NjcmlwdFN5bnRheFRyZWU7CisgICAgfSwKKwogICAgIGNhblJl
cXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIC8vIFdl
IGNhbiByZXF1ZXN0IGNvbnRlbnQgaWYgd2UgaGF2ZSBhbiBpZC4KSW5kZXg6IFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3Jp
cHRTeW50YXhUcmVlLmpzCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMTcyLDggKzE3Miw4IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3Rv
dHlwZSAKICAgICAgICAgaWYgKCF0aGlzLl9wYXJzZWRTdWNjZXNzZnVsbHkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKHN0YXJ0Tm9kZS5fYXR0YWNobWVudHMuX2hh
c05vbkVtcHR5UmV0dXJuU3RhdGVtZW50ICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAgICByZXR1
cm4gc3RhcnROb2RlLl9hdHRhY2htZW50cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQ7Cisg
ICAgICAgIGlmIChzdGFydE5vZGUuYXR0YWNobWVudHMuX2hhc05vbkVtcHR5UmV0dXJuU3RhdGVt
ZW50ICE9PSB1bmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm4gc3RhcnROb2RlLmF0dGFjaG1l
bnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRlbWVudDsKIAogICAgICAgICBmdW5jdGlvbiByZW1v
dmVGdW5jdGlvbnNGaWx0ZXIobm9kZSkKICAgICAgICAgewpAQCAtMTkxLDE5ICsxOTEsMjIgQEAg
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlIAogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgICAKLSAgICAgICAgc3RhcnROb2RlLl9hdHRhY2htZW50cy5faGFz
Tm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQgPSBoYXNOb25FbXB0eVJldHVyblN0YXRlbWVudDsKKyAg
ICAgICAgc3RhcnROb2RlLmF0dGFjaG1lbnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRlbWVudCA9
IGhhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50OwogCiAgICAgICAgIHJldHVybiBoYXNOb25FbXB0
eVJldHVyblN0YXRlbWVudDsKICAgICB9LAogCi0gICAgdXBkYXRlVHlwZXM6IGZ1bmN0aW9uKHNv
dXJjZUlELCBub2Rlc1RvVXBkYXRlLCBjYWxsYmFjaykgCisgICAgdXBkYXRlVHlwZXM6IGZ1bmN0
aW9uKG5vZGVzVG9VcGRhdGUsIGNhbGxiYWNrKSAKICAgICB7CisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KFJ1bnRpbWVBZ2VudC5nZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMpOwog
ICAgICAgICBjb25zb2xlLmFzc2VydChBcnJheS5pc0FycmF5KG5vZGVzVG9VcGRhdGUpICYmIHRo
aXMuX3BhcnNlZFN1Y2Nlc3NmdWxseSk7CisKICAgICAgICAgaWYgKCF0aGlzLl9wYXJzZWRTdWNj
ZXNzZnVsbHkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFyIGFsbFJlcXVlc3Rz
ID0gW107CiAgICAgICAgIHZhciBhbGxSZXF1ZXN0Tm9kZXMgPSBbXTsKKyAgICAgICAgdmFyIHNv
dXJjZUlEID0gdGhpcy5fc2NyaXB0LmlkOwogCiAgICAgICAgIGZvciAodmFyIG5vZGUgb2Ygbm9k
ZXNUb1VwZGF0ZSkgewogICAgICAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsKQEAgLTI0OSw5
ICsyNTIsOSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUgCiAgICAg
ICAgICAgICAgICAgdmFyIG5vZGUgPSBhbGxSZXF1ZXN0Tm9kZXNbaV07CiAgICAgICAgICAgICAg
ICAgdmFyIHR5cGVJbmZvcm1hdGlvbiA9IHR5cGVJbmZvcm1hdGlvbkFycmF5W2ldOwogICAgICAg
ICAgICAgICAgIGlmIChhbGxSZXF1ZXN0c1tpXS50eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yID09
PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlw
dG9yLkZ1bmN0aW9uUmV0dXJuKQotICAgICAgICAgICAgICAgICAgICBub2RlLl9hdHRhY2htZW50
cy5fcmV0dXJuVHlwZXMgPSB0eXBlSW5mb3JtYXRpb247CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUuYXR0YWNobWVudHMucmV0dXJuVHlwZXMgPSB0eXBlSW5mb3JtYXRpb247CiAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBub2RlLl9hdHRhY2htZW50cy5fdHlwZXMg
PSB0eXBlSW5mb3JtYXRpb247CisgICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNobWVudHMu
dHlwZXMgPSB0eXBlSW5mb3JtYXRpb247CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNh
bGxiYWNrKCk7CkBAIC03NzUsNyArNzc4LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUucHJvdG90eXBlIAogICAgICAgICAKICAgICAgICAgcmVzdWx0LnJhbmdlID0gbm9kZS5yYW5n
ZTsKICAgICAgICAgLy8gVGhpcyBpcyBhbiBvYmplY3QgZm9yIHdoaWNoIHlvdSBjYW4gYWRkIGZp
ZWxkcyB0byBhbiBBU1Qgbm9kZSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHBvbGx1dGluZyB0aGUg
c3ludGF4LXJlbGF0ZWQgZmllbGRzIG9mIHRoZSBub2RlLgotICAgICAgICByZXN1bHQuX2F0dGFj
aG1lbnRzID0ge307IAorICAgICAgICByZXN1bHQuYXR0YWNobWVudHMgPSB7fTsgCiAKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVk
aXRvci5qcwkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDYgKzM2LDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yID0gZnVuYwog
CiAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuY2FsbCh0aGlzLCBudWxsLCBudWxsLCB0aGlz
KTsKIAorICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciA9IG51bGw7CisKICAgICAvLyBGSVhN
RTogQ3VycmVudGx5IHRoaXMganVzdCBqdW1wcyBiZXR3ZWVuIHJlc291cmNlcyBhbmQgcmVsYXRl
ZCBzb3VyY2UgbWFwIHJlc291cmNlcy4gSXQgZG9lc24ndCAianVtcCB0byBzeW1ib2wiIHlldC4K
ICAgICB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKCk7CiAKQEAgLTEw
MSw2ICsxMDMsMTQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAog
ICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29kZTsKICAgICB9LAogCisgICAgc2hvd246IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlw
ZS5zaG93bi5jYWxsKHRoaXMpOworCisgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0
b3IpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1lKCk7CisgICAg
fSwKKwogICAgIGhpZGRlbjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3IucHJvdG90eXBlLmhpZGRlbi5jYWxsKHRoaXMpOwpAQCAtMTEwLDYgKzEyMCw5
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgdGhp
cy5fZGlzbWlzc1BvcG92ZXIoKTsKICAgICAgICAgCiAgICAgICAgIHRoaXMuX2Rpc21pc3NFZGl0
aW5nQ29udHJvbGxlcih0cnVlKTsKKworICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5ub3Rh
dG9yKQorICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnBhdXNlKCk7CiAgICAg
fSwKIAogICAgIGNsb3NlOiBmdW5jdGlvbigpCkBAIC0xMzUsNiArMTQ4LDggQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogCiAgICAgICAgIFdlYkluc3BlY3Rvci5u
b3RpZmljYXRpb25zLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLk5vdGlmaWNhdGlv
bi5HbG9iYWxNb2RpZmllcktleXNEaWRDaGFuZ2UsIHRoaXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdD
b250cm9sbGVyU3RhdGUsIHRoaXMpOwogICAgICAgICB0aGlzLl9zb3VyY2VDb2RlLnJlbW92ZUV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuU291cmNlTWFwQWRkZWQs
IHRoaXMuX3NvdXJjZUNvZGVTb3VyY2VNYXBBZGRlZCwgdGhpcyk7CisKKyAgICAgICAgdGhpcy5f
ZGlzYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFubm90YXRvcigpOwogICAgIH0sCiAKICAg
ICBjYW5CZUZvcm1hdHRlZDogZnVuY3Rpb24oKQpAQCAtMTQ5LDYgKzE2NCwxMSBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIHJldHVybiBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuY2FuQmVGb3JtYXR0ZWQuY2FsbCh0aGlzKTsKICAg
ICB9LAogCisgICAgY2FuU2hvd1R5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEhdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yOworICAgIH0sCisKICAgICBj
dXN0b21QZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSkKICAgICB7CiAgICAgICAgIGZ1bmN0
aW9uIHNlYXJjaFJlc3VsdENhbGxiYWNrKGVycm9yLCBtYXRjaGVzKQpAQCAtMjM0LDYgKzI1NCw1
NSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgICAg
ICB0aGlzLl91cGRhdGVFZGl0YWJsZU1hcmtlcnMocmFuZ2UpOwogICAgIH0sCiAKKyAgICB0b2dn
bGVUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5f
dHlwZVRva2VuQW5ub3RhdG9yKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IHZhciBpc0FjdGl2YXRlZCA9IHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci50b2dnbGVUeXBlQW5u
b3RhdGlvbnMoKTsKKyAgICAgICAgaWYgKGlzQWN0aXZhdGVkKSB7CisgICAgICAgICAgICBSdW50
aW1lQWdlbnQuZW5hYmxlVHlwZVByb2ZpbGVyKCk7CisgICAgICAgICAgICB0aGlzLl9lbmFibGVT
Y3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIFdlIGRpc2FibGUgdHlwZSBwcm9maWxpbmcgd2hlbiBleGl0aW5nIHRoZSBp
bnNwZWN0b3IsIHNvIG5vIG5lZWQgdG8gY2FsbCBpdCBoZXJlLiBJZiB3ZSB3ZXJlCisgICAgICAg
ICAgICAvLyB0byBjYWxsIGl0IGhlcmUsIHdlIHdvdWxkIGhhdmUgSmF2YVNjcmlwdENvcmUgY29t
cGlsZSBvdXQgYWxsIHRoZSBuZWNlc3NhcnkgdHlwZSBwcm9maWxpbmcgaW5mb3JtYXRpb24sCisg
ICAgICAgICAgICAvLyBzbyBpZiBhIHVzZXIgd2VyZSB0byBxdWlja2x5IHByZXNzIHRoZW4gdW5w
cmVzcyB0aGUgYnV0dG9uLCB3ZSB3b3VsZG4ndCBiZSBhYmxlIHRvIHJlLXNob3cgdHlwZSBpbmZv
cm1hdGlvbi4KKyAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVTY3JvbGxFdmVudHNGb3JUeXBlVG9r
ZW5Bbm5vdGF0b3IoKTsKKyAgICAgICAgfQorICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd0phdmFT
Y3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLnZhbHVlID0gaXNBY3RpdmF0ZWQ7CisKKyAgICAg
ICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOworICAgICAgICBy
ZXR1cm4gaXNBY3RpdmF0ZWQ7CisgICAgfSwKKworICAgIHNob3dQb3BvdmVyRm9yVHlwZXM6IGZ1
bmN0aW9uKHR5cGVzLCBib3VuZHMsIHRpdGxlKQorICAgIHsKKyAgICAgICAgdmFyIGNvbnRlbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgY29udGVudC5jbGFzc05h
bWUgPSAib2JqZWN0IGV4cGFuZGFibGUiOworCisgICAgICAgIHZhciB0aXRsZUVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGl0bGVFbGVtZW50LmNsYXNz
TmFtZSA9ICJ0aXRsZSI7CisgICAgICAgIHRpdGxlRWxlbWVudC50ZXh0Q29udGVudCA9IHRpdGxl
OworICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbWVudCk7CisKKyAgICAgICAg
dmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbih0eXBl
cyk7CisgICAgICAgIHNlY3Rpb24uZXhwYW5kZWQgPSB0cnVlOworICAgICAgICBzZWN0aW9uLmVs
ZW1lbnQuY2xhc3NMaXN0LmFkZCgiYm9keSIpOworICAgICAgICBjb250ZW50LmFwcGVuZENoaWxk
KHNlY3Rpb24uZWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXIoY29udGVudCwg
Ym91bmRzKTsKKyAgICB9LAorCisgICAgLy8gUHJvdGVjdGVkCisKKyAgICBwcmV0dHlQcmludDog
ZnVuY3Rpb24ocHJldHR5KQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3Iu
cHJvdG90eXBlLnByZXR0eVByaW50LmNhbGwodGhpcywgcHJldHR5KTsKKworICAgICAgICBpZiAo
dGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0Fj
dGl2ZSkKKyAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZXNldCgpOworICAg
IH0sCisKICAgICAvLyBQcml2YXRlCiAKICAgICBfdW5mb3JtYXR0ZWRMaW5lSW5mb0ZvckVkaXRv
ckxpbmVJbmZvOiBmdW5jdGlvbihsaW5lSW5mbykKQEAgLTM1OCw2ICs0MjcsOSBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAKICAgICAgICAgdGhpcy5fY29udGVu
dFdpbGxQb3B1bGF0ZShjb250ZW50KTsKICAgICAgICAgdGhpcy5zdHJpbmcgPSBjb250ZW50Owor
CisgICAgICAgIHRoaXMuX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKwogICAgICAgICB0aGlz
Ll9jb250ZW50RGlkUG9wdWxhdGUoKTsKICAgICB9LAogCkBAIC05NjcsMTIgKzEwMzksMTYgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgIF9kZWJ1Z2dlckRp
ZFBhdXNlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMuX3VwZGF0ZVRva2Vu
VHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKKyAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFu
bm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUpCisgICAgICAgICAg
ICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1lKCk7CiAgICAgfSwKIAogICAgIF9kZWJ1
Z2dlckRpZFJlc3VtZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl91cGRh
dGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKCk7CiAgICAgICAgIHRoaXMuX2Rpc21pc3NQ
b3BvdmVyKCk7CisgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5f
dHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQorICAgICAgICAgICAgdGhpcy5fdHlwZVRva2Vu
QW5ub3RhdG9yLnJlc3VtZSgpOwogICAgIH0sCiAKICAgICBfc291cmNlQ29kZVNvdXJjZU1hcEFk
ZGVkOiBmdW5jdGlvbihldmVudCkKQEAgLTk4OCw2ICsxMDY0LDggQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICB2YXIgbW9kZSA9IFdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5Ob25lOwogICAgICAgICBp
ZiAoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5wYXVzZWQpCiAgICAgICAgICAgICBtb2Rl
ID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkph
dmFTY3JpcHRFeHByZXNzaW9uOworICAgICAgICBlbHNlIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5v
dGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQorICAgICAgICAgICAg
bW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9k
ZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOwogICAgICAgICBlbHNlIGlmICh0aGlzLl9oYXND
b2xvck1hcmtlcnMoKSkKICAgICAgICAgICAgIG1vZGUgPSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJv
clRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTWFya2VkVG9rZW5zOwogICAgICAgICBlbHNl
IGlmICgodGhpcy5fc291cmNlQ29kZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBS
ZXNvdXJjZSB8fCB0aGlzLl9zb3VyY2VDb2RlLnNvdXJjZU1hcHMubGVuZ3RoICE9PSAwKSAmJiBX
ZWJJbnNwZWN0b3IubW9kaWZpZXJLZXlzLm1ldGFLZXkgJiYgIVdlYkluc3BlY3Rvci5tb2RpZmll
cktleXMuYWx0S2V5ICYmICFXZWJJbnNwZWN0b3IubW9kaWZpZXJLZXlzLnNoaWZ0S2V5KQpAQCAt
MTAxMCw2ICsxMDg4LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3Rv
dAogICAgICAgICAgICAgdGhpcy5fZGlzbWlzc1BvcG92ZXIoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIuTW9kZS5KYXZhU2NyaXB0RXhwcmVzc2lvbjoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2YVNjcmlwdFR5cGVJ
bmZvcm1hdGlvbjoKICAgICAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW91
c2VPdmVyRGVsYXlEdXJhdGlvbiA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5E
dXJhdGlvblRvTW91c2VPdmVyVG9rZW5Ub01ha2VIb3ZlcmVkVG9rZW47CiAgICAgICAgICAgICB0
aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vdXNlT3V0UmVsZWFzZURlbGF5RHVyYXRpb24g
PSBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub01vdXNlT3V0T2ZI
b3ZlcmVkVG9rZW5Ub1JlbGVhc2U7CiAgICAgICAgICAgICB0aGlzLnRva2VuVHJhY2tpbmdDb250
cm9sbGVyLmNsYXNzTmFtZUZvckhpZ2hsaWdodGVkUmFuZ2UgPSBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IuSG92ZXJlZEV4cHJlc3Npb25IaWdobGlnaHRTdHlsZUNsYXNzTmFtZTsK
QEAgLTEwNzUsNiArMTE1NCwxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBpZiAodGhp
cy50b2tlblRyYWNraW5nQ29udHJvbGxlci5tb2RlID09PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJv
clRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbikg
eworICAgICAgICAgICAgdGhpcy5fdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZEph
dmFTY3JpcHRUeXBlSW5mb3JtYXRpb24oY2FuZGlkYXRlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCiAgICAgICAgIGlmICh0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1v
ZGUgPT09IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9k
ZS5NYXJrZWRUb2tlbnMpIHsKICAgICAgICAgICAgIHZhciBtYXJrZXJzID0gdGhpcy5tYXJrZXJz
QXRQb3NpdGlvbihjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2Uuc3RhcnQpOwogICAgICAgICAg
ICAgaWYgKG1hcmtlcnMubGVuZ3RoID4gMCkKQEAgLTExMzAsMjYgKzEyMTQsNzMgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICBEZWJ1Z2dlckFnZW50
LmV2YWx1YXRlT25DYWxsRnJhbWUuaW52b2tlKHtjYWxsRnJhbWVJZDogV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWUuaWQsIGV4cHJlc3Npb246IGNhbmRpZGF0ZS5l
eHByZXNzaW9uLCBvYmplY3RHcm91cDogInBvcG92ZXIiLCBkb05vdFBhdXNlT25FeGNlcHRpb25z
QW5kTXV0ZUNvbnNvbGU6IHRydWV9LCBwb3B1bGF0ZS5iaW5kKHRoaXMpKTsKICAgICB9LAogCi0g
ICAgX3Nob3dQb3BvdmVyOiBmdW5jdGlvbihjb250ZW50KQorICAgIF90b2tlblRyYWNraW5nQ29u
dHJvbGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjogZnVuY3Rpb24oY2Fu
ZGlkYXRlKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoY2FuZGlkYXRlLmV4cHJlc3Np
b24pOworCisgICAgICAgIHZhciBzb3VyY2VDb2RlID0gdGhpcy5fc291cmNlQ29kZTsKKyAgICAg
ICAgdmFyIHNvdXJjZUlEID0gc291cmNlQ29kZS5zY3JpcHRzWzBdLmlkOworICAgICAgICB2YXIg
cmFuZ2UgPSBjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2U7CisgICAgICAgIHZhciBvZmZzZXQg
PSB0aGlzLmN1cnJlbnRQb3NpdGlvblRvT3JpZ2luYWxPZmZzZXQoe2xpbmU6IHJhbmdlLnN0YXJ0
LmxpbmUsIGNoOiByYW5nZS5zdGFydC5jaH0pOworCisgICAgICAgIHZhciBhbGxSZXF1ZXN0cyA9
IFt7CisgICAgICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yOiBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLk5vcm1hbEV4cHJl
c3Npb24sCisgICAgICAgICAgICBzb3VyY2VJRDogc291cmNlSUQsCisgICAgICAgICAgICBkaXZv
dDogb2Zmc2V0CisgICAgICAgIH1dOworCisgICAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoZXJyb3Is
IGFsbFR5cGVzKSB7CisgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlICE9PSB0aGlzLnRva2VuVHJhY2tpbmdD
b250cm9sbGVyLmNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KGFsbFR5cGVzLmxlbmd0aCA9PT0gMSk7CisgICAgICAgICAgICBp
ZiAoIWFsbFR5cGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB2YXIgdHlwZXMgPSBhbGxUeXBlc1swXTsKKyAgICAgICAgICAgIGlmICh0eXBlcy5kaXNwbGF5
VHlwZU5hbWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcG9wb3ZlclRpdGxlID0gV2ViSW5zcGVj
dG9yLlR5cGVUb2tlblZpZXcudGl0bGVGb3JQb3BvdmVyKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5W
aWV3LlRpdGxlVHlwZS5WYXJpYWJsZSwgY2FuZGlkYXRlLmV4cHJlc3Npb24pOworICAgICAgICAg
ICAgICAgIHRoaXMuc2hvd1BvcG92ZXJGb3JUeXBlcyh0eXBlcywgbnVsbCwgcG9wb3ZlclRpdGxl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFJ1bnRpbWVBZ2VudC5nZXRS
dW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoYWxsUmVxdWVzdHMsIGhhbmRsZXIuYmlu
ZCh0aGlzKSk7CisgICAgfSwKKworICAgIF9zaG93UG9wb3ZlcjogZnVuY3Rpb24oY29udGVudCwg
Ym91bmRzKQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy50b2tlblRyYWNraW5n
Q29udHJvbGxlci5jYW5kaWRhdGUpOworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnRva2Vu
VHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZSB8fCBib3VuZHMpOwogCisgICAgICAgIHZhciBz
aG91bGRIaWdobGlnaHRSYW5nZSA9IGZhbHNlOwogICAgICAgICB2YXIgY2FuZGlkYXRlID0gdGhp
cy50b2tlblRyYWNraW5nQ29udHJvbGxlci5jYW5kaWRhdGU7Ci0gICAgICAgIGlmICghY2FuZGlk
YXRlKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBJZiBib3VuZHMgaXMgZmFsc2V5
LCB0aGlzIGlzIGEgcG9wb3ZlciBpbnRyb2R1Y2VkIGZyb20gYSBob3ZlciBldmVudC4KKyAgICAg
ICAgLy8gT3RoZXJ3aXNlLCB0aGlzIGlzIGNhbGxlZCBmcm9tIFR5cGVUb2tlbkFubm90YXRvci4K
KyAgICAgICAgaWYgKCFib3VuZHMpIHsKKyAgICAgICAgICAgIGlmICghY2FuZGlkYXRlKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBjb250ZW50LmNsYXNzTGlzdC5hZGQoV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLlBvcG92ZXJEZWJ1Z2dlckNvbnRlbnRTdHls
ZUNsYXNzTmFtZSk7CisgICAgICAgICAgICB2YXIgcmVjdHMgPSB0aGlzLnJlY3RzRm9yUmFuZ2Uo
Y2FuZGlkYXRlLmhvdmVyZWRUb2tlblJhbmdlKTsKKyAgICAgICAgICAgIGJvdW5kcyA9IFdlYklu
c3BlY3Rvci5SZWN0LnVuaW9uT2ZSZWN0cyhyZWN0cyk7CisKKyAgICAgICAgICAgIHNob3VsZEhp
Z2hsaWdodFJhbmdlID0gdHJ1ZTsKKyAgICAgICAgfQogCi0gICAgICAgIHZhciByZWN0cyA9IHRo
aXMucmVjdHNGb3JSYW5nZShjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2UpOwotICAgICAgICB2
YXIgYm91bmRzID0gV2ViSW5zcGVjdG9yLlJlY3QudW5pb25PZlJlY3RzKHJlY3RzKTsKIAotICAg
ICAgICB0aGlzLl9wb3BvdmVyID0gdGhpcy5fcG9wb3ZlciB8fCBuZXcgV2ViSW5zcGVjdG9yLlBv
cG92ZXIodGhpcyk7CisgICAgICAgIGNvbnRlbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZVRleHRFZGl0b3IuUG9wb3ZlckRlYnVnZ2VyQ29udGVudFN0eWxlQ2xhc3NOYW1l
KTsKKworICAgICAgICBpZiAodGhpcy5fcG9wb3ZlcikKKyAgICAgICAgICAgIHRoaXMuX2Rpc21p
c3NQb3BvdmVyKCk7CisgICAgICAgIHRoaXMuX3BvcG92ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlBv
cG92ZXIodGhpcyk7CiAgICAgICAgIHRoaXMuX3BvcG92ZXIuY29udGVudCA9IGNvbnRlbnQ7CiAg
ICAgICAgIHRoaXMuX3BvcG92ZXIucHJlc2VudChib3VuZHMucGFkKDUpLCBbV2ViSW5zcGVjdG9y
LlJlY3RFZGdlLk1JTl9ZLCBXZWJJbnNwZWN0b3IuUmVjdEVkZ2UuTUFYX1ksIFdlYkluc3BlY3Rv
ci5SZWN0RWRnZS5NQVhfWF0pOwogCi0gICAgICAgIHRoaXMuX3RyYWNrUG9wb3ZlckV2ZW50cygp
OworICAgICAgICAvLyBXZSBuZWVkIHRvIGhpZ2hsaWdodCB0aGUgcmFuZ2UgYWZ0ZXIgY3JlYXRp
bmcgdGhlIG5ldyBwb3BvdmVyIGJlY2F1c2UgZGlzbWlzc2luZyB0aGUgb2xkIHBvcG92ZXIgd2ls
bCByZW1vdmUgdGhlIGN1cnJlbnQgaGlnaGxpZ2h0LgorICAgICAgICBpZiAoc2hvdWxkSGlnaGxp
Z2h0UmFuZ2UpCisgICAgICAgICAgICB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmhpZ2hs
aWdodFJhbmdlKGNhbmRpZGF0ZS5leHByZXNzaW9uUmFuZ2UpOwogCi0gICAgICAgIHRoaXMudG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIuaGlnaGxpZ2h0UmFuZ2UoY2FuZGlkYXRlLmV4cHJlc3Npb25S
YW5nZSk7CisgICAgICAgIHRoaXMuX3RyYWNrUG9wb3ZlckV2ZW50cygpOwogICAgIH0sCiAKICAg
ICBfc2hvd1BvcG92ZXJGb3JGdW5jdGlvbjogZnVuY3Rpb24oZGF0YSkKQEAgLTEzODAsNiArMTUx
MSw2MCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAg
IHRoaXMuX2lnbm9yZUNvbnRlbnREaWRDaGFuZ2UtLTsKIAogICAgICAgICBkZWxldGUgdGhpcy5f
ZWRpdGluZ0NvbnRyb2xsZXI7CisgICAgfSwKKworICAgIF9tYWtlVHlwZVRva2VuQW5ub3RhdG9y
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICAvLyBNYWtlIHN1cmUgSmF2YVNjcmlwdENvcmUg
c3VwcG9ydHMgdHlwZSBwcm9maWxpbmcuCisgICAgICAgIGlmICghUnVudGltZUFnZW50LmdldFJ1
bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cykKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB2YXIgc2NyaXB0ID0gbnVsbDsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMg
dG8gbWUgbW9kaWZpZWQgdG8gd29yayB3aXRoIEhUTUwgZmlsZXMgd2l0aCBpbmxpbmUgc2NyaXB0
IHRhZ3MuCisgICAgICAgIGlmICh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVj
dG9yLlNjcmlwdCkKKyAgICAgICAgICAgIHNjcmlwdCA9IHRoaXMuX3NvdXJjZUNvZGU7CisgICAg
ICAgIGVsc2UgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVz
b3VyY2UgJiYgdGhpcy5fc291cmNlQ29kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2Uu
VHlwZS5TY3JpcHQgJiYgdGhpcy5fc291cmNlQ29kZS5zY3JpcHRzLmxlbmd0aCkKKyAgICAgICAg
ICAgIHNjcmlwdCA9IHRoaXMuX3NvdXJjZUNvZGUuc2NyaXB0c1swXTsKKworICAgICAgICBpZiAo
IXNjcmlwdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl90eXBlVG9rZW5B
bm5vdGF0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvcih0aGlzLCB0aGlz
Ll9zb3VyY2VDb2RlLnNjcmlwdHNbMF0pOworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnNob3dK
YXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZSkgeworICAgICAgICAgICAgdGhp
cy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlc2V0KCk7CisgICAgICAgICAgICB0aGlzLl9lbmFibGVT
Y3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKyAgICAgICAgfQorICAgIH0sCisK
KyAgICBfZW5hYmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICAvLyBQYXVzZSB1cGRhdGluZyB0eXBlIHRva2VucyB3aGlsZSBzY3Jv
bGxpbmcgdG8gcHJldmVudCBmcmFtZSBsb3NzLgorICAgICAgICB0aGlzLmFkZFNjcm9sbEhhbmRs
ZXIodGhpcy5fbWFrZVR5cGVUb2tlblNjcm9sbEV2ZW50SGFuZGxlcigpKTsKKyAgICB9LAorCisg
ICAgX2Rpc2FibGVTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3I6ZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdGhpcy5yZW1vdmVTY3JvbGxIYW5kbGVyKCk7CisgICAgfSwKKworICAg
IF9tYWtlVHlwZVRva2VuU2Nyb2xsRXZlbnRIYW5kbGVyOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICB2YXIgdHlwZVRva2VuQW5ub3RhdG9yID0gdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yOwor
ICAgICAgICB2YXIgdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICBmdW5jdGlvbiBz
Y3JvbGxIYW5kbGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRpbWVvdXRJZGVudGlm
aWVyKQorICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWRlbnRpZmllcik7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdHlwZVRva2VuQW5ub3RhdG9yLnBhdXNl
KCk7CisKKyAgICAgICAgICAgIHRpbWVvdXRJZGVudGlmaWVyID0gc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICB0aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAg
ICAgICAgICAgdHlwZVRva2VuQW5ub3RhdG9yLnJlc3VtZSgpOworICAgICAgICAgICAgfSwgMTAw
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzY3JvbGxIYW5kbGVyOwogICAgIH0KIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRF
ZGl0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvVGV4dEVkaXRvci5qcwkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dEVkaXRvci5qcwkod29ya2luZyBjb3B5
KQpAQCAtNjYsNiArNjYsOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvciA9IGZ1bmN0aW9uKGVs
ZW1lCiAgICAgdGhpcy5fZm9ybWF0dGVkID0gZmFsc2U7CiAgICAgdGhpcy5fZm9ybWF0dGVyU291
cmNlTWFwID0gbnVsbDsKIAorICAgIHRoaXMuX2NvZGVNaXJyb3JTY3JvbGxIYW5kbGVyID0gbnVs
bDsKKwogICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGUgfHwgbnVsbDsKIH07CiAKQEAgLTE2
Nyw3ICsxNjksNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgdGhpcy5faWdub3JlQ29kZU1pcnJvckNvbnRlbnRE
aWRDaGFuZ2VFdmVudCsrOwotICAgICAgICB0aGlzLl9wcmV0dHlQcmludChmb3JtYXR0ZWQpOwor
ICAgICAgICB0aGlzLnByZXR0eVByaW50KGZvcm1hdHRlZCk7CiAgICAgICAgIHRoaXMuX2lnbm9y
ZUNvZGVNaXJyb3JDb250ZW50RGlkQ2hhbmdlRXZlbnQtLTsKICAgICAgICAgY29uc29sZS5hc3Nl
cnQodGhpcy5faWdub3JlQ29kZU1pcnJvckNvbnRlbnREaWRDaGFuZ2VFdmVudCA+PSAwKTsKIApA
QCAtMTk4LDYgKzIwMCwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHJldHVybiB0aGlzLmhhc0Zvcm1hdHRlcigpOwogICAgIH0sCiAKKyAgICBjYW5T
aG93VHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfSwKKwogICAgIGdldCBzZWxlY3RlZFRleHRSYW5nZSgpCiAgICAgewogICAgICAg
ICB2YXIgc3RhcnQgPSB0aGlzLl9jb2RlTWlycm9yLmdldEN1cnNvcih0cnVlKTsKQEAgLTYzOSw2
ICs2NDYsMTg4IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgfQogICAgIH0sCiAKKyAgICB2aXNpYmxlUmFuZ2VTdGFydE9mZnNldDogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gbnVsbDsKKyAgICAgICAgdmFyIHZpc2li
bGVSYW5nZSA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Vmlld3BvcnQoKTsKKworICAgICAgICBpZiAo
dGhpcy5fZm9ybWF0dGVyU291cmNlTWFwKQorICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlz
Ll9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldChNYXRoLm1heCh2
aXNpYmxlUmFuZ2UuZnJvbSAtIDEsIDApLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
c3RhcnRPZmZzZXQgPSB0aGlzLl9jb2RlTWlycm9yLmdldERvYygpLmluZGV4RnJvbVBvcyh7bGlu
ZTogdmlzaWJsZVJhbmdlLmZyb20sIGNoOiAwfSk7CisKKyAgICAgICAgcmV0dXJuIHN0YXJ0T2Zm
c2V0OworICAgIH0sCisKKyAgICB2aXNpYmxlUmFuZ2VFbmRPZmZzZXQ6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHZhciBlbmRPZmZzZXQgPSBudWxsOworICAgICAgICB2YXIgdmlzaWJsZVJh
bmdlID0gdGhpcy5fY29kZU1pcnJvci5nZXRWaWV3cG9ydCgpOworCisgICAgICAgIGlmICh0aGlz
Ll9mb3JtYXR0ZXJTb3VyY2VNYXApCisgICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl9mb3Jt
YXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldCh2aXNpYmxlUmFuZ2UudG8g
LSAxLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW5kT2Zmc2V0ID0gdGhpcy5fY29k
ZU1pcnJvci5nZXREb2MoKS5pbmRleEZyb21Qb3Moe2xpbmU6IHZpc2libGVSYW5nZS50bywgY2g6
IDB9KTsKKworICAgICAgICByZXR1cm4gZW5kT2Zmc2V0OworICAgIH0sCisKKyAgICBvcmlnaW5h
bE9mZnNldFRvQ3VycmVudFBvc2l0aW9uOiBmdW5jdGlvbihvZmZzZXQpCisgICAgeworICAgICAg
ICB2YXIgcG9zaXRpb24gPSBudWxsOworICAgICAgICBpZiAodGhpcy5fZm9ybWF0dGVyU291cmNl
TWFwKSB7CisgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VN
YXAub3JpZ2luYWxQb3NpdGlvblRvRm9ybWF0dGVkKG9mZnNldCk7CisgICAgICAgICAgICBwb3Np
dGlvbiA9IHtsaW5lOiBsb2NhdGlvbi5saW5lTnVtYmVyLCBjaDogbG9jYXRpb24uY29sdW1uTnVt
YmVyfTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMuX2NvZGVN
aXJyb3IuZ2V0RG9jKCkucG9zRnJvbUluZGV4KG9mZnNldCk7CisKKyAgICAgICAgcmV0dXJuIHBv
c2l0aW9uOworICAgIH0sCisKKyAgICBjdXJyZW50T2Zmc2V0VG9DdXJyZW50UG9zaXRpb246IGZ1
bmN0aW9uKG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yLmdl
dERvYygpLnBvc0Zyb21JbmRleChvZmZzZXQpOworICAgIH0sCisKKyAgICBjdXJyZW50UG9zaXRp
b25Ub09yaWdpbmFsT2Zmc2V0OiBmdW5jdGlvbihwb3NpdGlvbikKKyAgICB7CisgICAgICAgIHZh
ciBvZmZzZXQgPSBudWxsOworICAgICAgICBpZiAodGhpcy5fZm9ybWF0dGVyU291cmNlTWFwKQor
ICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRv
T3JpZ2luYWxPZmZzZXQocG9zaXRpb24ubGluZSwgcG9zaXRpb24uY2gpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLl9jb2Rl
TWlycm9yLmdldERvYygpLmluZGV4RnJvbVBvcyhwb3NpdGlvbik7CisKKyAgICAgICAgcmV0dXJu
IG9mZnNldDsKKyAgICB9LAorCisgICAgY3VycmVudFBvc2l0aW9uVG9DdXJyZW50T2Zmc2V0OiBm
dW5jdGlvbihwb3NpdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9y
LmdldERvYygpLmluZGV4RnJvbVBvcyhwb3NpdGlvbik7CisgICAgfSwKKworICAgIHNldFVuaXF1
ZUJvb2ttYXJrOiBmdW5jdGlvbihwb3NpdGlvbiwgaW5saW5lRWxlbWVudCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yLnNldFVuaXF1ZUJvb2ttYXJrKHBvc2l0aW9uLCB7
d2lkZ2V0OiBpbmxpbmVFbGVtZW50fSk7CisgICAgfSwKKworICAgIGFkZFNjcm9sbEhhbmRsZXI6
IGZ1bmN0aW9uKGhhbmRsZXIpCisgICAgeworICAgICAgICB0aGlzLnJlbW92ZVNjcm9sbEhhbmRs
ZXIoKTsKKworICAgICAgICB0aGlzLl9jb2RlTWlycm9yU2Nyb2xsSGFuZGxlciA9IGhhbmRsZXI7
CisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oInNjcm9sbCIsIHRoaXMuX2NvZGVNaXJyb3JT
Y3JvbGxIYW5kbGVyKTsKKyAgICB9LAorCisgICAgcmVtb3ZlU2Nyb2xsSGFuZGxlcjogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2NvZGVNaXJyb3JTY3JvbGxIYW5kbGVyKSB7
CisgICAgICAgICAgICB0aGlzLl9jb2RlTWlycm9yLm9mZigic2Nyb2xsIiwgdGhpcy5fY29kZU1p
cnJvclNjcm9sbEhhbmRsZXIpOworICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJvclNjcm9sbEhh
bmRsZXIgPSBudWxsOworICAgICAgICB9CisgICAgfSwKKworICAgIC8vIFByb3RlY3RlZAorCisg
ICAgcHJldHR5UHJpbnQ6IGZ1bmN0aW9uKHByZXR0eSkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9u
IHByZXR0eVByaW50QW5kVXBkYXRlRWRpdG9yKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
c3Qgc3RhcnQgPSB7bGluZTogMCwgY2g6IDB9OworICAgICAgICAgICAgY29uc3QgZW5kID0ge2xp
bmU6IHRoaXMuX2NvZGVNaXJyb3IubGluZUNvdW50KCkgLSAxfTsKKworICAgICAgICAgICAgdmFy
IG9sZFNlbGVjdGlvbkFuY2hvciA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKCJhbmNob3Ii
KTsKKyAgICAgICAgICAgIHZhciBvbGRTZWxlY3Rpb25IZWFkID0gdGhpcy5fY29kZU1pcnJvci5n
ZXRDdXJzb3IoImhlYWQiKTsKKyAgICAgICAgICAgIHZhciBuZXdTZWxlY3Rpb25BbmNob3IsIG5l
d1NlbGVjdGlvbkhlYWQ7CisgICAgICAgICAgICB2YXIgbmV3RXhlY3V0aW9uTG9jYXRpb24gPSBu
dWxsOworCisgICAgICAgICAgICBpZiAocHJldHR5KSB7CisgICAgICAgICAgICAgICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzEwNTkzOTQ4PiBQcm92aWRlIGEgd2F5IHRvIGNoYW5nZSB0aGUgdGFiIHdp
ZHRoIGluIHRoZSBXZWIgSW5zcGVjdG9yCisgICAgICAgICAgICAgICAgY29uc3QgaW5kZW50U3Ry
aW5nID0gIiAgICAiOworICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbExpbmVFbmRpbmdzID0g
W107CisgICAgICAgICAgICAgICAgdmFyIGZvcm1hdHRlZExpbmVFbmRpbmdzID0gW107CisgICAg
ICAgICAgICAgICAgdmFyIG1hcHBpbmcgPSB7b3JpZ2luYWw6IFswXSwgZm9ybWF0dGVkOiBbMF19
OworICAgICAgICAgICAgICAgIHZhciBidWlsZGVyID0gbmV3IEZvcm1hdHRlckNvbnRlbnRCdWls
ZGVyKG1hcHBpbmcsIG9yaWdpbmFsTGluZUVuZGluZ3MsIGZvcm1hdHRlZExpbmVFbmRpbmdzLCAw
LCAwLCBpbmRlbnRTdHJpbmcpOworICAgICAgICAgICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcg
Rm9ybWF0dGVyKHRoaXMuX2NvZGVNaXJyb3IsIGJ1aWxkZXIpOworICAgICAgICAgICAgICAgIGZv
cm1hdHRlci5mb3JtYXQoc3RhcnQsIGVuZCk7CisKKyAgICAgICAgICAgICAgICB0aGlzLl9mb3Jt
YXR0ZXJTb3VyY2VNYXAgPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwLmZyb21CdWls
ZGVyKGJ1aWxkZXIpOworCisgICAgICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zZXRWYWx1
ZShidWlsZGVyLmZvcm1hdHRlZENvbnRlbnQpOworCisgICAgICAgICAgICAgICAgaWYgKHRoaXMu
X3Bvc2l0aW9uVG9SZXZlYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1JldmVhbFBv
c2l0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQodGhp
cy5fcG9zaXRpb25Ub1JldmVhbC5saW5lTnVtYmVyLCB0aGlzLl9wb3NpdGlvblRvUmV2ZWFsLmNv
bHVtbk51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwg
PSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVQb3NpdGlvbihuZXdSZXZlYWxQb3NpdGlvbi5s
aW5lTnVtYmVyLCBuZXdSZXZlYWxQb3NpdGlvbi5jb2x1bW5OdW1iZXIpOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdCkgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uU3RhcnQgPSB0aGlz
Ll9mb3JtYXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zvcm1hdHRlZCh0aGlzLl90ZXh0UmFuZ2VU
b1NlbGVjdC5zdGFydExpbmUsIHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0LnN0YXJ0Q29sdW1uKTsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIG1hcHBlZFJldmVhbFNlbGVjdGlvbkVuZCA9IHRoaXMu
X2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX3RleHRSYW5nZVRv
U2VsZWN0LmVuZExpbmUsIHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0LmVuZENvbHVtbik7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0ID0gbmV3IFdlYkluc3BlY3Rv
ci5UZXh0UmFuZ2UobWFwcGVkUmV2ZWFsU2VsZWN0aW9uU3RhcnQubGluZU51bWJlciwgbWFwcGVk
UmV2ZWFsU2VsZWN0aW9uU3RhcnQuY29sdW1uTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25F
bmQubGluZU51bWJlciwgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kLmNvbHVtbk51bWJlcik7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFpc05hTih0aGlzLl9leGVj
dXRpb25MaW5lTnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmFzc2VydCgh
aXNOYU4odGhpcy5fZXhlY3V0aW9uQ29sdW1uTnVtYmVyKSk7CisgICAgICAgICAgICAgICAgICAg
IG5ld0V4ZWN1dGlvbkxvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFs
VG9Gb3JtYXR0ZWQodGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciwgdGhpcy5fZXhlY3V0aW9uQ29s
dW1uTnVtYmVyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgbWFw
cGVkQW5jaG9yTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zv
cm1hdHRlZChvbGRTZWxlY3Rpb25BbmNob3IubGluZSwgb2xkU2VsZWN0aW9uQW5jaG9yLmNoKTsK
KyAgICAgICAgICAgICAgICB2YXIgbWFwcGVkSGVhZExvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVy
U291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQob2xkU2VsZWN0aW9uSGVhZC5saW5lLCBvbGRT
ZWxlY3Rpb25IZWFkLmNoKTsKKyAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25BbmNob3IgPSB7
bGluZTptYXBwZWRBbmNob3JMb2NhdGlvbi5saW5lTnVtYmVyLCBjaDptYXBwZWRBbmNob3JMb2Nh
dGlvbi5jb2x1bW5OdW1iZXJ9OworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkhlYWQgPSB7
bGluZTptYXBwZWRIZWFkTG9jYXRpb24ubGluZU51bWJlciwgY2g6bWFwcGVkSGVhZExvY2F0aW9u
LmNvbHVtbk51bWJlcn07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRo
aXMuX2NvZGVNaXJyb3IudW5kbygpOworCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Bvc2l0
aW9uVG9SZXZlYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1JldmVhbFBvc2l0aW9u
ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwodGhpcy5fcG9z
aXRpb25Ub1JldmVhbC5saW5lTnVtYmVyLCB0aGlzLl9wb3NpdGlvblRvUmV2ZWFsLmNvbHVtbk51
bWJlcik7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwgPSBuZXcg
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVQb3NpdGlvbihuZXdSZXZlYWxQb3NpdGlvbi5saW5lTnVt
YmVyLCBuZXdSZXZlYWxQb3NpdGlvbi5jb2x1bW5OdW1iZXIpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdCkgeworICAgICAg
ICAgICAgICAgICAgICB2YXIgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uU3RhcnQgPSB0aGlzLl9mb3Jt
YXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbCh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVj
dC5zdGFydExpbmUsIHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0LnN0YXJ0Q29sdW1uKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIG1hcHBlZFJldmVhbFNlbGVjdGlvbkVuZCA9IHRoaXMuX2Zvcm1h
dHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0
LmVuZExpbmUsIHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0LmVuZENvbHVtbik7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0ID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0
UmFuZ2UobWFwcGVkUmV2ZWFsU2VsZWN0aW9uU3RhcnQubGluZU51bWJlciwgbWFwcGVkUmV2ZWFs
U2VsZWN0aW9uU3RhcnQuY29sdW1uTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQubGlu
ZU51bWJlciwgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kLmNvbHVtbk51bWJlcik7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFpc05hTih0aGlzLl9leGVjdXRpb25M
aW5lTnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmFzc2VydCghaXNOYU4o
dGhpcy5fZXhlY3V0aW9uQ29sdW1uTnVtYmVyKSk7CisgICAgICAgICAgICAgICAgICAgIG5ld0V4
ZWN1dGlvbkxvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3Jp
Z2luYWwodGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciwgdGhpcy5fZXhlY3V0aW9uQ29sdW1uTnVt
YmVyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgbWFwcGVkQW5j
aG9yTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5h
bChvbGRTZWxlY3Rpb25BbmNob3IubGluZSwgb2xkU2VsZWN0aW9uQW5jaG9yLmNoKTsKKyAgICAg
ICAgICAgICAgICB2YXIgbWFwcGVkSGVhZExvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNl
TWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwob2xkU2VsZWN0aW9uSGVhZC5saW5lLCBvbGRTZWxlY3Rp
b25IZWFkLmNoKTsKKyAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25BbmNob3IgPSB7bGluZTpt
YXBwZWRBbmNob3JMb2NhdGlvbi5saW5lTnVtYmVyLCBjaDptYXBwZWRBbmNob3JMb2NhdGlvbi5j
b2x1bW5OdW1iZXJ9OworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkhlYWQgPSB7bGluZTpt
YXBwZWRIZWFkTG9jYXRpb24ubGluZU51bWJlciwgY2g6bWFwcGVkSGVhZExvY2F0aW9uLmNvbHVt
bk51bWJlcn07CisKKyAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAgPSBu
dWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLl9zY3JvbGxJbnRvVmlld0Nl
bnRlcmVkKG5ld1NlbGVjdGlvbkFuY2hvcik7CisgICAgICAgICAgICB0aGlzLl9jb2RlTWlycm9y
LnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb25BbmNob3IsIG5ld1NlbGVjdGlvbkhlYWQpOworCisg
ICAgICAgICAgICBpZiAobmV3RXhlY3V0aW9uTG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICBk
ZWxldGUgdGhpcy5fZXhlY3V0aW9uTGluZUhhbmRsZTsKKyAgICAgICAgICAgICAgICB0aGlzLmV4
ZWN1dGlvbkNvbHVtbk51bWJlciA9IG5ld0V4ZWN1dGlvbkxvY2F0aW9uLmNvbHVtbk51bWJlcjsK
KyAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGlvbkxpbmVOdW1iZXIgPSBuZXdFeGVjdXRpb25M
b2NhdGlvbi5saW5lTnVtYmVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzEzMTI5OTU1PiBGaW5kQmFubmVyOiBOZXcgc2VhcmNoZXMgc2hv
dWxkIG5vdCBsb3NlIHNlYXJjaCBwb3NpdGlvbiAoc3RhcnQgZnJvbSBjdXJyZW50IHNlbGVjdGlv
bi9jYXJldCkKKyAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTZWFyY2hRdWVyeSkgeworICAg
ICAgICAgICAgICAgIHZhciBzZWFyY2hRdWVyeSA9IHRoaXMuY3VycmVudFNlYXJjaFF1ZXJ5Owor
ICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoQ2xlYXJlZCgpOworICAgICAgICAgICAgICAgIC8v
IFNldCB0aW1lb3V0IHNvIHRoYXQgdGhpcyBoYXBwZW5zIGFmdGVyIHRoZSBjdXJyZW50IENvZGVN
aXJyb3Igb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgIC8vIFRoZSBlZGl0b3IgaGFzIHRvIHVw
ZGF0ZSBmb3IgdGhlIHZhbHVlIGFuZCBzZWxlY3Rpb24gY2hhbmdlcy4KKyAgICAgICAgICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKHF1ZXJ5KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
cGVyZm9ybVNlYXJjaChzZWFyY2hRdWVyeSk7CisgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMp
LCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlICYm
IHR5cGVvZiB0aGlzLl9kZWxlZ2F0ZS50ZXh0RWRpdG9yVXBkYXRlZEZvcm1hdHRpbmcgPT09ICJm
dW5jdGlvbiIpCisgICAgICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUudGV4dEVkaXRvclVwZGF0
ZWRGb3JtYXR0aW5nKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fY29kZU1pcnJv
ci5vcGVyYXRpb24ocHJldHR5UHJpbnRBbmRVcGRhdGVFZGl0b3IuYmluZCh0aGlzKSk7CisgICAg
fSwKKwogICAgIC8vIFByaXZhdGUKIAogICAgIF9jb250ZW50Q2hhbmdlZDogZnVuY3Rpb24oY29k
ZU1pcnJvciwgY2hhbmdlKQpAQCAtMTIzNSwxMDYgKzE0MjQsNiBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBsaW5lSGVpZ2h0ID0gTWF0aC5jZWls
KHRoaXMuX2NvZGVNaXJyb3IuZGVmYXVsdFRleHRIZWlnaHQoKSk7CiAgICAgICAgIHZhciBtYXJn
aW4gPSBNYXRoLmZsb29yKChzY3JvbGxJbmZvLmNsaWVudEhlaWdodCAtIGxpbmVIZWlnaHQpIC8g
Mik7CiAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iuc2Nyb2xsSW50b1ZpZXcocG9zaXRpb24sIG1h
cmdpbik7Ci0gICAgfSwKLQotICAgIF9wcmV0dHlQcmludDogZnVuY3Rpb24ocHJldHR5KQotICAg
IHsKLSAgICAgICAgZnVuY3Rpb24gcHJldHR5UHJpbnRBbmRVcGRhdGVFZGl0b3IoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjb25zdCBzdGFydCA9IHtsaW5lOiAwLCBjaDogMH07Ci0gICAgICAg
ICAgICBjb25zdCBlbmQgPSB7bGluZTogdGhpcy5fY29kZU1pcnJvci5saW5lQ291bnQoKSAtIDF9
OwotCi0gICAgICAgICAgICB2YXIgb2xkU2VsZWN0aW9uQW5jaG9yID0gdGhpcy5fY29kZU1pcnJv
ci5nZXRDdXJzb3IoImFuY2hvciIpOwotICAgICAgICAgICAgdmFyIG9sZFNlbGVjdGlvbkhlYWQg
PSB0aGlzLl9jb2RlTWlycm9yLmdldEN1cnNvcigiaGVhZCIpOwotICAgICAgICAgICAgdmFyIG5l
d1NlbGVjdGlvbkFuY2hvciwgbmV3U2VsZWN0aW9uSGVhZDsKLSAgICAgICAgICAgIHZhciBuZXdF
eGVjdXRpb25Mb2NhdGlvbiA9IG51bGw7Ci0KLSAgICAgICAgICAgIGlmIChwcmV0dHkpIHsKLSAg
ICAgICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMTA1OTM5NDg+IFByb3ZpZGUgYSB3YXkg
dG8gY2hhbmdlIHRoZSB0YWIgd2lkdGggaW4gdGhlIFdlYiBJbnNwZWN0b3IKLSAgICAgICAgICAg
ICAgICBjb25zdCBpbmRlbnRTdHJpbmcgPSAiICAgICI7Ci0gICAgICAgICAgICAgICAgdmFyIG9y
aWdpbmFsTGluZUVuZGluZ3MgPSBbXTsKLSAgICAgICAgICAgICAgICB2YXIgZm9ybWF0dGVkTGlu
ZUVuZGluZ3MgPSBbXTsKLSAgICAgICAgICAgICAgICB2YXIgbWFwcGluZyA9IHtvcmlnaW5hbDog
WzBdLCBmb3JtYXR0ZWQ6IFswXX07Ci0gICAgICAgICAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcg
Rm9ybWF0dGVyQ29udGVudEJ1aWxkZXIobWFwcGluZywgb3JpZ2luYWxMaW5lRW5kaW5ncywgZm9y
bWF0dGVkTGluZUVuZGluZ3MsIDAsIDAsIGluZGVudFN0cmluZyk7Ci0gICAgICAgICAgICAgICAg
dmFyIGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIodGhpcy5fY29kZU1pcnJvciwgYnVpbGRlcik7
Ci0gICAgICAgICAgICAgICAgZm9ybWF0dGVyLmZvcm1hdChzdGFydCwgZW5kKTsKLQotICAgICAg
ICAgICAgICAgIHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcCA9IFdlYkluc3BlY3Rvci5Gb3JtYXR0
ZXJTb3VyY2VNYXAuZnJvbUJ1aWxkZXIoYnVpbGRlcik7Ci0KLSAgICAgICAgICAgICAgICB0aGlz
Ll9jb2RlTWlycm9yLnNldFZhbHVlKGJ1aWxkZXIuZm9ybWF0dGVkQ29udGVudCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fcG9zaXRpb25Ub1JldmVhbCkgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgbmV3UmV2ZWFsUG9zaXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3Jp
Z2luYWxUb0Zvcm1hdHRlZCh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsLmxpbmVOdW1iZXIsIHRoaXMu
X3Bvc2l0aW9uVG9SZXZlYWwuY29sdW1uTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5fcG9zaXRpb25Ub1JldmVhbCA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBvc2l0aW9u
KG5ld1JldmVhbFBvc2l0aW9uLmxpbmVOdW1iZXIsIG5ld1JldmVhbFBvc2l0aW9uLmNvbHVtbk51
bWJlcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Rl
eHRSYW5nZVRvU2VsZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRSZXZlYWxT
ZWxlY3Rpb25TdGFydCA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0
dGVkKHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0LnN0YXJ0TGluZSwgdGhpcy5fdGV4dFJhbmdlVG9T
ZWxlY3Quc3RhcnRDb2x1bW4pOwotICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGVkUmV2ZWFs
U2VsZWN0aW9uRW5kID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0
ZWQodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QuZW5kTGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxl
Y3QuZW5kQ29sdW1uKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dFJhbmdlVG9TZWxl
Y3QgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFy
dC5saW5lTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5jb2x1bW5OdW1iZXIsIG1h
cHBlZFJldmVhbFNlbGVjdGlvbkVuZC5saW5lTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25F
bmQuY29sdW1uTnVtYmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIWlzTmFOKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KCFpc05hTih0aGlzLl9leGVjdXRpb25Db2x1bW5OdW1iZXIpKTsK
LSAgICAgICAgICAgICAgICAgICAgbmV3RXhlY3V0aW9uTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0
ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zvcm1hdHRlZCh0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVy
LCB0aGlzLl9leGVjdXRpb25Db2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHZhciBtYXBwZWRBbmNob3JMb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNv
dXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKG9sZFNlbGVjdGlvbkFuY2hvci5saW5lLCBvbGRT
ZWxlY3Rpb25BbmNob3IuY2gpOwotICAgICAgICAgICAgICAgIHZhciBtYXBwZWRIZWFkTG9jYXRp
b24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zvcm1hdHRlZChvbGRTZWxl
Y3Rpb25IZWFkLmxpbmUsIG9sZFNlbGVjdGlvbkhlYWQuY2gpOwotICAgICAgICAgICAgICAgIG5l
d1NlbGVjdGlvbkFuY2hvciA9IHtsaW5lOm1hcHBlZEFuY2hvckxvY2F0aW9uLmxpbmVOdW1iZXIs
IGNoOm1hcHBlZEFuY2hvckxvY2F0aW9uLmNvbHVtbk51bWJlcn07Ci0gICAgICAgICAgICAgICAg
bmV3U2VsZWN0aW9uSGVhZCA9IHtsaW5lOm1hcHBlZEhlYWRMb2NhdGlvbi5saW5lTnVtYmVyLCBj
aDptYXBwZWRIZWFkTG9jYXRpb24uY29sdW1uTnVtYmVyfTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJvci51bmRvKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5fcG9zaXRpb25Ub1JldmVhbCkgewotICAgICAgICAgICAgICAgICAgICB2
YXIgbmV3UmV2ZWFsUG9zaXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVk
VG9PcmlnaW5hbCh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsLmxpbmVOdW1iZXIsIHRoaXMuX3Bvc2l0
aW9uVG9SZXZlYWwuY29sdW1uTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9z
aXRpb25Ub1JldmVhbCA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBvc2l0aW9uKG5ld1Jl
dmVhbFBvc2l0aW9uLmxpbmVOdW1iZXIsIG5ld1JldmVhbFBvc2l0aW9uLmNvbHVtbk51bWJlcik7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRSYW5n
ZVRvU2VsZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRSZXZlYWxTZWxlY3Rp
b25TdGFydCA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKHRo
aXMuX3RleHRSYW5nZVRvU2VsZWN0LnN0YXJ0TGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Qu
c3RhcnRDb2x1bW4pOwotICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGVkUmV2ZWFsU2VsZWN0
aW9uRW5kID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwodGhp
cy5fdGV4dFJhbmdlVG9TZWxlY3QuZW5kTGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QuZW5k
Q29sdW1uKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QgPSBu
ZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5saW5l
TnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5jb2x1bW5OdW1iZXIsIG1hcHBlZFJl
dmVhbFNlbGVjdGlvbkVuZC5saW5lTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQuY29s
dW1uTnVtYmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWlz
TmFOKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KCFpc05hTih0aGlzLl9leGVjdXRpb25Db2x1bW5OdW1iZXIpKTsKLSAgICAg
ICAgICAgICAgICAgICAgbmV3RXhlY3V0aW9uTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3Vy
Y2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbCh0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyLCB0aGlz
Ll9leGVjdXRpb25Db2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHZhciBtYXBwZWRBbmNob3JMb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1h
cC5mb3JtYXR0ZWRUb09yaWdpbmFsKG9sZFNlbGVjdGlvbkFuY2hvci5saW5lLCBvbGRTZWxlY3Rp
b25BbmNob3IuY2gpOwotICAgICAgICAgICAgICAgIHZhciBtYXBwZWRIZWFkTG9jYXRpb24gPSB0
aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbChvbGRTZWxlY3Rpb25I
ZWFkLmxpbmUsIG9sZFNlbGVjdGlvbkhlYWQuY2gpOwotICAgICAgICAgICAgICAgIG5ld1NlbGVj
dGlvbkFuY2hvciA9IHtsaW5lOm1hcHBlZEFuY2hvckxvY2F0aW9uLmxpbmVOdW1iZXIsIGNoOm1h
cHBlZEFuY2hvckxvY2F0aW9uLmNvbHVtbk51bWJlcn07Ci0gICAgICAgICAgICAgICAgbmV3U2Vs
ZWN0aW9uSGVhZCA9IHtsaW5lOm1hcHBlZEhlYWRMb2NhdGlvbi5saW5lTnVtYmVyLCBjaDptYXBw
ZWRIZWFkTG9jYXRpb24uY29sdW1uTnVtYmVyfTsKLQotICAgICAgICAgICAgICAgIHRoaXMuX2Zv
cm1hdHRlclNvdXJjZU1hcCA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRo
aXMuX3Njcm9sbEludG9WaWV3Q2VudGVyZWQobmV3U2VsZWN0aW9uQW5jaG9yKTsKLSAgICAgICAg
ICAgIHRoaXMuX2NvZGVNaXJyb3Iuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbkFuY2hvciwgbmV3
U2VsZWN0aW9uSGVhZCk7Ci0KLSAgICAgICAgICAgIGlmIChuZXdFeGVjdXRpb25Mb2NhdGlvbikg
ewotICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9leGVjdXRpb25MaW5lSGFuZGxlOwotICAg
ICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uQ29sdW1uTnVtYmVyID0gbmV3RXhlY3V0aW9uTG9j
YXRpb24uY29sdW1uTnVtYmVyOwotICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uTGluZU51
bWJlciA9IG5ld0V4ZWN1dGlvbkxvY2F0aW9uLmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMTMxMjk5NTU+IEZpbmRCYW5u
ZXI6IE5ldyBzZWFyY2hlcyBzaG91bGQgbm90IGxvc2Ugc2VhcmNoIHBvc2l0aW9uIChzdGFydCBm
cm9tIGN1cnJlbnQgc2VsZWN0aW9uL2NhcmV0KQotICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVu
dFNlYXJjaFF1ZXJ5KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNlYXJjaFF1ZXJ5ID0gdGhpcy5j
dXJyZW50U2VhcmNoUXVlcnk7Ci0gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hDbGVhcmVkKCk7
Ci0gICAgICAgICAgICAgICAgLy8gU2V0IHRpbWVvdXQgc28gdGhhdCB0aGlzIGhhcHBlbnMgYWZ0
ZXIgdGhlIGN1cnJlbnQgQ29kZU1pcnJvciBvcGVyYXRpb24uCi0gICAgICAgICAgICAgICAgLy8g
VGhlIGVkaXRvciBoYXMgdG8gdXBkYXRlIGZvciB0aGUgdmFsdWUgYW5kIHNlbGVjdGlvbiBjaGFu
Z2VzLgotICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24ocXVlcnkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKHNlYXJjaFF1ZXJ5KTsKLSAgICAgICAg
ICAgICAgICB9LmJpbmQodGhpcyksIDApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLnRleHRFZGl0b3JVcGRh
dGVkRm9ybWF0dGluZyA9PT0gImZ1bmN0aW9uIikKLSAgICAgICAgICAgICAgICB0aGlzLl9kZWxl
Z2F0ZS50ZXh0RWRpdG9yVXBkYXRlZEZvcm1hdHRpbmcodGhpcyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0aGlzLl9jb2RlTWlycm9yLm9wZXJhdGlvbihwcmV0dHlQcmludEFuZFVwZGF0ZUVkaXRv
ci5iaW5kKHRoaXMpKTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3Vy
Y2VDb250ZW50Vmlldy5qcwkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanMJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDYgKzUxLDE0IEBAIFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250
ZW50VmlldyA9IGYKICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtID0g
bmV3IFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtKCJwcmV0dHktcHJp
bnQiLCB0b29sVGlwLCBhY3RpdmF0ZWRUb29sVGlwLCBjdXJsZXlCcmFjZXNJbWFnZS5zcmMsIGN1
cmxleUJyYWNlc0ltYWdlLndpZHRoLCBjdXJsZXlCcmFjZXNJbWFnZS5oZWlnaHQpOwogICAgIHRo
aXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgdGhpcy5fdG9nZ2xl
UHJldHR5UHJpbnQsIHRoaXMpOwogICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlv
bkl0ZW0uZW5hYmxlZCA9IGZhbHNlOyAvLyBFbmFibGVkIHdoZW4gdGhlIHRleHQgZWRpdG9yIGlz
IHBvcHVsYXRlZCB3aXRoIGNvbnRlbnQuCisKKyAgICB2YXIgdG9vbFRpcFR5cGVzID0gV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJTaG93IHR5cGUgaW5mb3JtYXRpb24iKTsKKyAgICB2YXIgYWN0aXZh
dGVkVG9vbFRpcFR5cGVzID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJIaWRlIHR5cGUgaW5mb3Jt
YXRpb24iKTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbSA9IG5ldyBX
ZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbSgic2hvdy10eXBlcyIsIHRv
b2xUaXBUeXBlcywgYWN0aXZhdGVkVG9vbFRpcFR5cGVzLCAiSW1hZ2VzL05hdmlnYXRpb25JdGVt
VHlwZXMuc3ZnIiwgMTYsIDE2KTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9u
SXRlbS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5F
dmVudC5DbGlja2VkLCB0aGlzLl90b2dnbGVUeXBlQW5ub3RhdGlvbnMsIHRoaXMpOworICAgIHRo
aXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSBmYWxzZTsKKworICAg
IFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU2V0dGluZy5FdmVudC5DaGFuZ2VkLCB0aGlzLl9zaG93
SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmdDaGFuZ2VkLCB0aGlzKTsKIH07CiAKIFdl
Ykluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5TdHlsZUNsYXNzTmFtZSA9ICJ0ZXh0
IjsKQEAgLTYyLDcgKzcwLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3
LnBybwogCiAgICAgZ2V0IG5hdmlnYXRpb25JdGVtcygpCiAgICAgewotICAgICAgICByZXR1cm4g
W3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW1dOworICAgICAgICByZXR1cm4g
W3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0sIHRoaXMuX3Nob3dUeXBlc0J1
dHRvbk5hdmlnYXRpb25JdGVtXTsKICAgICB9LAogCiAgICAgZ2V0IG1hbmFnZXNPd25Jc3N1ZXMo
KQpAQCAtMjAwLDYgKzIwOCw4IEBAIFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmll
dy5wcm8KICAgICBfY29udGVudERpZFBvcHVsYXRlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAg
ICAgICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IHRo
aXMuX3RleHRFZGl0b3IuY2FuQmVGb3JtYXR0ZWQoKTsKKyAgICAgICAgdGhpcy5fc2hvd1R5cGVz
QnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IHRoaXMuX3RleHRFZGl0b3IuY2FuU2hvd1R5
cGVBbm5vdGF0aW9ucygpOworICAgICAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9u
SXRlbS5hY3RpdmF0ZWQgPSBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRp
b25TZXR0aW5nLnZhbHVlOwogICAgIH0sCiAKICAgICBfdG9nZ2xlUHJldHR5UHJpbnQ6IGZ1bmN0
aW9uKGV2ZW50KQpAQCAtMjA4LDYgKzIxOCwxNiBAQCBXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNl
Q29udGVudFZpZXcucHJvCiAgICAgICAgIHRoaXMuX3RleHRFZGl0b3IuZm9ybWF0dGVkID0gYWN0
aXZhdGVkOwogICAgIH0sCiAKKyAgICBfdG9nZ2xlVHlwZUFubm90YXRpb25zOiBmdW5jdGlvbihl
dmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IudG9nZ2xlVHlwZUFubm90YXRp
b25zKCk7CisgICAgfSwKKworICAgIF9zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRp
bmdDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX3Nob3dUeXBl
c0J1dHRvbk5hdmlnYXRpb25JdGVtLmFjdGl2YXRlZCA9IFdlYkluc3BlY3Rvci5zaG93SmF2YVNj
cmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWU7CisgICAgfSwKKwogICAgIF90ZXh0RWRp
dG9yRm9ybWF0dGluZ0RpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0
aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLmFjdGl2YXRlZCA9IHRoaXMuX3Rl
eHRFZGl0b3IuZm9ybWF0dGVkOwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVQcm9wZXJ0aWVzU2VjdGlv
bi5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1R5cGVQcm9wZXJ0aWVzU2VjdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24g
PSBmdW5jdGlvbih0eXBlcywgdGl0bGUsIHN1YnRpdGxlKQoreworICAgIHRoaXMuZW1wdHlQbGFj
ZWhvbGRlciA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTm8gUHJvcGVydGllcyIpOworICAgIHRo
aXMudHlwZXMgPSB0eXBlczsKKworICAgIFdlYkluc3BlY3Rvci5Qcm9wZXJ0aWVzU2VjdGlvbi5j
YWxsKHRoaXMsIHRpdGxlLCBzdWJ0aXRsZSk7Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVByb3Bl
cnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9y
LlR5cGVQcm9wZXJ0aWVzU2VjdGlvbiwKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Qcm9w
ZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUsCisKKyAgICBvbnBvcHVsYXRlOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5yZW1vdmVDaGlsZHJlbigp
OworCisgICAgICAgIHZhciBwcmltaXRpdmVUeXBlTmFtZXMgPSB0aGlzLnR5cGVzLmdsb2JhbFBy
aW1pdGl2ZVR5cGVOYW1lcyB8fCB0aGlzLnR5cGVzLmxvY2FsUHJpbWl0aXZlVHlwZU5hbWVzOwor
ICAgICAgICB2YXIgc3RydWN0dXJlcyA9IHRoaXMudHlwZXMuZ2xvYmFsU3RydWN0dXJlcyB8fCB0
aGlzLnR5cGVzLmxvY2FsU3RydWN0dXJlczsKKyAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXTsK
KyAgICAgICAgZm9yICh2YXIgc3RydWN0IG9mIHN0cnVjdHVyZXMpIHsKKyAgICAgICAgICAgIHBy
b3BlcnRpZXMucHVzaCh7CisgICAgICAgICAgICAgICAgbmFtZTogc3RydWN0LmNvbnN0cnVjdG9y
TmFtZSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdAorICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgcHJpbWl0aXZlTmFtZSBvZiBwcmltaXRpdmVU
eXBlTmFtZXMpIHsKKyAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh7CisgICAgICAgICAgICAg
ICAgbmFtZTogcHJpbWl0aXZlTmFtZSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IG51bGwK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcHJvcGVydGllcy5zb3J0KFdl
Ykluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24uUHJvcGVydHlDb21wYXJhdG9yKTsKKyAg
ICAgICAgZm9yICh2YXIgcHJvcGVydHkgb2YgcHJvcGVydGllcykKKyAgICAgICAgICAgIHRoaXMu
cHJvcGVydGllc1RyZWVPdXRsaW5lLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuVHlwZVBy
b3BlcnR5VHJlZUVsZW1lbnQocHJvcGVydHkpKTsKKworICAgICAgICBpZiAoIXRoaXMucHJvcGVy
dGllc1RyZWVPdXRsaW5lLmNoaWxkcmVuLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIHRpdGxl
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICB0aXRsZS5jbGFz
c05hbWUgPSAiaW5mbyI7CisgICAgICAgICAgICB0aXRsZS50ZXh0Q29udGVudCA9IHRoaXMuZW1w
dHlQbGFjZWhvbGRlcjsKKyAgICAgICAgICAgIHZhciBpbmZvRWxlbWVudCA9IG5ldyBUcmVlRWxl
bWVudCh0aXRsZSwgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJl
ZU91dGxpbmUuYXBwZW5kQ2hpbGQoaW5mb0VsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNlY3Rpb24uRXZlbnQu
VmlzaWJsZUNvbnRlbnREaWRDaGFuZ2UpOworCisgICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0
aCA9PT0gMSkKKyAgICAgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmNoaWxkcmVu
WzBdLmV4cGFuZFJlY3Vyc2l2ZWx5KCk7CisgICAgfQorfTsKKworLy8gVGhpcyBpcyBtb3N0bHkg
aWRlbnRpY2FsIHRvIE9iamVjdFByb3BlcnRpZXNTZWN0aW9uLmNvbXBhcmVQcm9wZXJ0aWVzLgor
Ly8gQnV0IHRoaXMgY2hlY2tzIGZvciBlcXVhbGl0eSBiZWNhdXNlIHdlIGNhbiBoYXZlIHR3byBv
YmplY3RzIG5hbWVkIHRoZSBzYW1lIHRoaW5nLgorV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVz
U2VjdGlvbi5Qcm9wZXJ0eUNvbXBhcmF0b3IgPSBmdW5jdGlvbihwcm9wZXJ0eUEsIHByb3BlcnR5
QikKK3sKKyAgICB2YXIgYSA9IHByb3BlcnR5QS5uYW1lOworICAgIHZhciBiID0gcHJvcGVydHlC
Lm5hbWU7CisgICAgaWYgKGEuaW5kZXhPZigiX19wcm90b19fIikgIT09IC0xKQorICAgICAgICBy
ZXR1cm4gMTsKKyAgICBpZiAoYi5pbmRleE9mKCJfX3Byb3RvX18iKSAhPT0gLTEpCisgICAgICAg
IHJldHVybiAtMTsKKyAgICBpZiAoYSA9PT0gYikKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICB2
YXIgZGlmZiA9IDA7CisgICAgdmFyIGNodW5rID0gL15cZCt8XlxEKy87CisgICAgdmFyIGNodW5r
YSwgY2h1bmtiLCBhbnVtLCBibnVtOworICAgIHdoaWxlIChkaWZmID09PSAwKSB7CisgICAgICAg
IGlmICghYSAmJiBiKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoIWIgJiYg
YSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjaHVua2EgPSBhLm1hdGNoKGNodW5r
KVswXTsKKyAgICAgICAgY2h1bmtiID0gYi5tYXRjaChjaHVuaylbMF07CisgICAgICAgIGFudW0g
PSAhaXNOYU4oY2h1bmthKTsKKyAgICAgICAgYm51bSA9ICFpc05hTihjaHVua2IpOworICAgICAg
ICBpZiAoYW51bSAmJiAhYm51bSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYg
KGJudW0gJiYgIWFudW0pCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYgKGFudW0g
JiYgYm51bSkgeworICAgICAgICAgICAgZGlmZiA9IGNodW5rYSAtIGNodW5rYjsKKyAgICAgICAg
ICAgIGlmIChkaWZmID09PSAwICYmIGNodW5rYS5sZW5ndGggIT09IGNodW5rYi5sZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIStjaHVua2EgJiYgIStjaHVua2IpIC8vIGNodW5rcyBhcmUg
c3RyaW5ncyBvZiBhbGwgMHMgKHNwZWNpYWwgY2FzZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNodW5rYS5sZW5ndGggLSBjaHVua2IubGVuZ3RoOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5rYi5sZW5ndGggLSBjaHVua2EubGVuZ3Ro
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGNodW5rYSAhPT0gY2h1bmtiKQor
ICAgICAgICAgICAgcmV0dXJuIChjaHVua2EgPCBjaHVua2IpID8gLTEgOiAxOworICAgICAgICBh
ID0gYS5zdWJzdHJpbmcoY2h1bmthLmxlbmd0aCk7CisgICAgICAgIGIgPSBiLnN1YnN0cmluZyhj
aHVua2IubGVuZ3RoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlmZjsKK307CisKK1dlYkluc3Bl
Y3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHByb3BlcnR5KQoreworICAg
IHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsKKworICAgIHRoaXMubmFtZUVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgdGhpcy5uYW1lRWxlbWVudC5jbGFzc05h
bWUgPSAibmFtZSI7CisgICAgdGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMucHJv
cGVydHkubmFtZTsKKworICAgIFRyZWVFbGVtZW50LmNhbGwodGhpcywgdGhpcy5uYW1lRWxlbWVu
dCwgbnVsbCwgZmFsc2UpOworCisgICAgdGhpcy50b2dnbGVPbkNsaWNrID0gdHJ1ZTsKKyAgICB0
aGlzLmhhc0NoaWxkcmVuID0gISF0aGlzLnByb3BlcnR5LnN0cnVjdHVyZTsKK307CisKK1dlYklu
c3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CisgICAgY29uc3Ry
dWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudCwKKyAgICBfX3Byb3Rv
X186IFRyZWVFbGVtZW50LnByb3RvdHlwZSwKKworICAgIG9ucG9wdWxhdGU6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTsKKworICAgICAgICB2YXIgcHJv
cGVydGllcyA9IFtdOworICAgICAgICBmb3IgKHZhciBmaWVsZE5hbWUgb2YgdGhpcy5wcm9wZXJ0
eS5zdHJ1Y3R1cmUuZmllbGRzKSB7CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goeworICAg
ICAgICAgICAgICAgIG5hbWU6IGZpZWxkTmFtZSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6
IG51bGwKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcHJvcGVydGllcy5z
b3J0KFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24uUHJvcGVydHlDb21wYXJhdG9y
KTsKKworICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUucHJvdG90eXBlU3RydWN0
dXJlKSB7CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goeworICAgICAgICAgICAgICAgIG5h
bWU6IHRoaXMucHJvcGVydHkuc3RydWN0dXJlLnByb3RvdHlwZVN0cnVjdHVyZS5jb25zdHJ1Y3Rv
ck5hbWUgKyAiICgiICsgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQcm90b3R5cGUiKSArICIpIiwK
KyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHRoaXMucHJvcGVydHkuc3RydWN0dXJlLnByb3Rv
dHlwZVN0cnVjdHVyZQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KHZhciBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKQorICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGls
ZChuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50KHByb3BlcnR5KSk7Cisg
ICAgfQorfTsKKwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvVHlwZVRva2VuVmlldy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5jc3MJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmNz
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLnR5cGUtdG9r
ZW4geworICAgIGRpc3BsYXk6IGlubGluZTsKKyAgICBib3JkZXItcmFkaXVzOiAxMHB4OworICAg
IGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CisgICAgcGFkZGluZy1sZWZ0OiA4cHg7CisgICAg
cGFkZGluZy1yaWdodDogOHB4OworICAgIHBhZGRpbmctdG9wOiAxcHg7CisgICAgY29sb3I6IHdo
aXRlOworICAgIGZvbnQtc2l6ZTogMTBweDsKKyAgICBvcGFjaXR5OiAwLjg1OworfQorCisudHlw
ZS10b2tlbi1sZWZ0LXNwYWNpbmcgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7Cit9CisKKy50eXBl
LXRva2VuLXJpZ2h0LXNwYWNpbmcgeworICAgIG1hcmdpbi1yaWdodDogNXB4OworfQorCisudHlw
ZS10b2tlbi1mdW5jdGlvbiwgLnR5cGUtdG9rZW4tYm9vbGVhbiB7CisgICAgLyogUHVycGxlICov
CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgNTksIDE5MSk7Cit9CisKKy50eXBlLXRv
a2VuLW51bWJlciB7CisgICAgLyogQmx1ZSAqLworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYig1
OSwgMTEyLCAyMjYpOworfQorCisudHlwZS10b2tlbi1zdHJpbmcgeworICAgIC8qIFJlZCAqLwor
ICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMjMsIDUzLCA0Nik7Cit9CisKKy50eXBlLXRva2Vu
LWRlZmF1bHQgeworICAgIC8qIEdyZWVuICovCisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEx
OCwgMTc0LCAyOSk7Cit9CisKKy50eXBlLXRva2VuLWVtcHR5IHsKKyAgICAvKiBHcmF5ICovCisg
ICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEyNiwgMTI2LCAxMjYpOworfQorCisudHlwZS10b2tl
bi1tYW55IHsKKyAgICAvKiBHcmVlbiAqLworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMzcs
IDEzMiwgMCk7Cit9CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9UeXBlVG9rZW5WaWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuanMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVj
dG9yLlR5cGVUb2tlblZpZXcgPSBmdW5jdGlvbih0b2tlbkFubm90YXRvciwgc2hvdWxkSGF2ZVJp
Z2h0TWFyZ2luLCBzaG91bGRIYXZlTGVmdE1hcmdpbiwgdGl0bGVUeXBlLCBmdW5jdGlvbk9yVmFy
aWFibGVOYW1lKQoreworICAgIGNvbnNvbGUuYXNzZXJ0KHRpdGxlVHlwZSA9PT0gV2ViSW5zcGVj
dG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlZhcmlhYmxlICB8fCB0aXRsZVR5cGUgPT09IFdl
Ykluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5SZXR1cm5TdGF0ZW1lbnQpOworCisg
ICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworCisgICAgdmFyIHNwYW4gPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKCJ0eXBl
LXRva2VuIik7CisgICAgaWYgKHNob3VsZEhhdmVSaWdodE1hcmdpbikKKyAgICAgICAgc3Bhbi5j
bGFzc0xpc3QuYWRkKCJ0eXBlLXRva2VuLXJpZ2h0LXNwYWNpbmciKTsKKyAgICBpZiAoc2hvdWxk
SGF2ZUxlZnRNYXJnaW4pCisgICAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZCgidHlwZS10b2tlbi1s
ZWZ0LXNwYWNpbmciKTsKKworICAgIHRoaXMuZWxlbWVudCA9IHNwYW47CisgICAgdGhpcy5fdG9r
ZW5Bbm5vdGF0b3IgPSB0b2tlbkFubm90YXRvcjsKKyAgICB0aGlzLl90eXBlcyA9IG51bGw7Cisg
ICAgdGhpcy5fY29sb3JDbGFzcyA9IG51bGw7CisKKworICAgIHRoaXMuX3BvcG92ZXJUaXRsZSA9
IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnRpdGxlRm9yUG9wb3Zlcih0aXRsZVR5cGUsIGZ1
bmN0aW9uT3JWYXJpYWJsZU5hbWUpOworCisgICAgdGhpcy5fc2V0VXBNb3VzZW92ZXJIYW5kbGVy
cygpOworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcudGl0bGVGb3JQb3BvdmVyID0g
ZnVuY3Rpb24odGl0bGVUeXBlLCBmdW5jdGlvbk9yVmFyaWFibGVOYW1lKQoreworICAgIHZhciB0
aXRsZVN0cmluZyA9IG51bGw7CisgICAgaWYgKHRpdGxlVHlwZSA9PT0gV2ViSW5zcGVjdG9yLlR5
cGVUb2tlblZpZXcuVGl0bGVUeXBlLlZhcmlhYmxlKQorICAgICAgICB0aXRsZVN0cmluZyA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiVHlwZSBpbmZvcm1hdGlvbiBmb3IgdmFyaWFibGU6ICVzIiku
Zm9ybWF0KGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpOworICAgIGVsc2UgeworICAgICAgICBpZiAo
ZnVuY3Rpb25PclZhcmlhYmxlTmFtZSkKKyAgICAgICAgICAgIHRpdGxlU3RyaW5nID0gV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJSZXR1cm4gdHlwZSBpbmZvcm1hdGlvbiBmb3IgZnVuY3Rpb246ICVz
IikuZm9ybWF0KGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB0aXRsZVN0cmluZyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmV0dXJuIHR5cGUgaW5m
b3JtYXRpb24gZm9yIGZ1bmN0aW9uIik7CisgICAgfQorCisgICAgcmV0dXJuIHRpdGxlU3RyaW5n
OworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlID0geworICAgIFZh
cmlhYmxlOiAidGl0bGUtdHlwZS12YXJpYWJsZSIsCisgICAgUmV0dXJuU3RhdGVtZW50OiAidGl0
bGUtdHlwZS1yZXR1cm4tc3RhdGVtZW50IgorfTsKKworLy8gVGhlc2UgdHlwZSBzdHJpbmdzIHNo
b3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0eXBlIGluZm9ybWF0aW9uIGluIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9y
Q2xhc3NGb3JUeXBlID0geworICAgICJTdHJpbmciOiAidHlwZS10b2tlbi1zdHJpbmciLAorICAg
ICJGdW5jdGlvbiI6ICJ0eXBlLXRva2VuLWZ1bmN0aW9uIiwKKyAgICAiTnVtYmVyIjogInR5cGUt
dG9rZW4tbnVtYmVyIiwKKyAgICAiSW50ZWdlciI6ICJ0eXBlLXRva2VuLW51bWJlciIsCisgICAg
IlVuZGVmaW5lZCI6ICJ0eXBlLXRva2VuLWVtcHR5IiwKKyAgICAiTnVsbCI6ICJ0eXBlLXRva2Vu
LWVtcHR5IiwKKyAgICAiKD8pIjogInR5cGUtdG9rZW4tZW1wdHkiLAorICAgICJCb29sZWFuIjog
InR5cGUtdG9rZW4tYm9vbGVhbiIsCisgICAgIihtYW55KSI6ICJ0eXBlLXRva2VuLW1hbnkiCit9
OworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5EZWxheUhvdmVyVGltZSA9IDM1MDsKKwor
V2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9y
OiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldywKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rv
ci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVibGljCisKKyAgICB1cGRhdGU6IGZ1bmN0
aW9uKHR5cGVzKQorICAgIHsKKyAgICAgICAgdmFyIHRpdGxlID0gdHlwZXMuZGlzcGxheVR5cGVO
YW1lOworICAgICAgICB0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQgPSB0aXRsZTsKKyAgICAgICAg
dGhpcy5fdHlwZXMgPSB0eXBlczsKKyAgICAgICAgdmFyIGhhc2hTdHJpbmcgPSB0aXRsZVt0aXRs
ZS5sZW5ndGggLSAxXSA9PT0gIj8iID8gdGl0bGUuc2xpY2UoMCwgdGl0bGUubGVuZ3RoIC0gMSkg
OiB0aXRsZTsKKworICAgICAgICBpZiAodGhpcy5fY29sb3JDbGFzcykKKyAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2NvbG9yQ2xhc3MpOworCisgICAgICAg
IHRoaXMuX2NvbG9yQ2xhc3MgPSBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvckNsYXNz
Rm9yVHlwZVtoYXNoU3RyaW5nXSB8fCAidHlwZS10b2tlbi1kZWZhdWx0IjsKKyAgICAgICAgdGhp
cy5lbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5fY29sb3JDbGFzcyk7CisgICAgfSwKKworICAg
IC8vIFByaXZhdGUKKworICAgIF9zZXRVcE1vdXNlb3ZlckhhbmRsZXJzOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB2YXIgdGltZW91dElEID0gbnVsbDsKKworICAgICAgICB0aGlzLmVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICBmdW5jdGlvbiBzaG93UG9wb3ZlckFmdGVyRGVsYXkoKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHRpbWVvdXRJRCA9IG51bGw7CisKKyAgICAgICAgICAgICAgICB2YXIgZG9tUmVj
dCA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgICAgICAg
ICB2YXIgYm91bmRzID0gbmV3IFdlYkluc3BlY3Rvci5SZWN0KGRvbVJlY3QubGVmdCwgZG9tUmVj
dC50b3AsIGRvbVJlY3Qud2lkdGgsIGRvbVJlY3QuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB0
aGlzLl90b2tlbkFubm90YXRvci5zb3VyY2VDb2RlVGV4dEVkaXRvci5zaG93UG9wb3ZlckZvclR5
cGVzKHRoaXMuX3R5cGVzLCBib3VuZHMsIHRoaXMuX3BvcG92ZXJUaXRsZSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9zaG91bGRTaG93UG9wb3ZlcigpKQorICAgICAg
ICAgICAgICAgIHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoc2hvd1BvcG92ZXJBZnRlckRlbGF5LmJp
bmQodGhpcyksIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkRlbGF5SG92ZXJUaW1lKTsKKyAg
ICAgICAgfS5iaW5kKHRoaXMpKTsKKworICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2VvdXQiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICh0aW1lb3V0SUQp
CisgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7CisgICAgICAgIH0uYmlu
ZCh0aGlzKSk7CisgICAgfSwKKworICAgIF9zaG91bGRTaG93UG9wb3ZlcjogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgaWYgKCh0aGlzLl90eXBlcy5nbG9iYWxQcmltaXRpdmVUeXBlTmFtZXMg
JiYgdGhpcy5fdHlwZXMuZ2xvYmFsUHJpbWl0aXZlVHlwZU5hbWVzLmxlbmd0aCA+IDEpIHx8ICh0
aGlzLl90eXBlcy5sb2NhbFByaW1pdGl2ZVR5cGVOYW1lcyAmJiB0aGlzLl90eXBlcy5sb2NhbFBy
aW1pdGl2ZVR5cGVOYW1lcy5sZW5ndGggPiAxKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgICAgIGlmICgodGhpcy5fdHlwZXMuZ2xvYmFsU3RydWN0dXJlcyAmJiB0aGlzLl90eXBl
cy5nbG9iYWxTdHJ1Y3R1cmVzLmxlbmd0aCkgfHwgKHRoaXMuX3R5cGVzLmxvY2FsU3RydWN0dXJl
cyAmJiB0aGlzLl90eXBlcy5sb2NhbFN0cnVjdHVyZXMubGVuZ3RoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236951</attachid>
            <date>2014-08-21 18:11:26 -0700</date>
            <delta_ts>2014-08-26 17:01:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>77109</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2Fs
aXplZFN0cmluZ3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2Fs
aXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwkocmV2aXNpb24gMTcyODMwKQor
KysgU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVk
U3RyaW5ncy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjI3LDYgKzIyNyw3IEBACiAAbABvAGMAYQBs
AGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABpAGQAZQAgAHQAaABlACAAJQBzACAAZABlAHQA
YQBpAGwAcwAgAHMAaQBkAGUAYgBhAHIAIAAoACUAcwApACIAXQAgAD0AIAAiAEgAaQBkAGUAIAB0
AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBsAHMAIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiADsA
CiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABpAGQAZQAgAHQAaABlACAA
JQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBkAGUAYgBhAHIAIgBdACAAPQAgACIASABp
AGQAZQAgAHQAaABlACAAJQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBkAGUAYgBhAHIA
IgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAaQBkAGUAIAB0AGgA
ZQAgACUAcwAgAG4AYQB2AGkAZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAi
AF0AIAA9ACAAIgBIAGkAZABlACAAdABoAGUAIAAlAHMAIABuAGEAdgBpAGcAYQB0AGkAbwBuACAA
cwBpAGQAZQBiAGEAcgAgACgAJQBzACkAIgA7AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkA
bgBnAHMAWwAiAEgAaQBkAGUAIAB0AHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACIAXQAg
AD0AIAAiAEgAaQBkAGUAIAB0AHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACIAOwAKIABs
AG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBIAG8AcwB0ACIAXQAgAD0AIAAiAEgA
bwBzAHQAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEkAYwBvAG4A
IABPAG4AbAB5ACIAXQAgAD0AIAAiAEkAYwBvAG4AIABPAG4AbAB5ACIAOwAKIABsAG8AYwBhAGwA
aQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBJAGMAbwBuACAAYQBuAGQAIABUAGUAeAB0ACAAKABI
AG8AcgBpAHoAbwBuAHQAYQBsACkAIgBdACAAPQAgACIASQBjAG8AbgAgAGEAbgBkACAAVABlAHgA
dAAgACgASABvAHIAaQB6AG8AbgB0AGEAbAApACIAOwAKQEAgLTMzNCw2ICszMzUsNyBAQAogAGwA
bwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFAAcgBvAGMAZQBzAHMAaQBuAGcAIABJ
AG4AcwB0AHIAdQBjAHQAaQBvAG4AIgBdACAAPQAgACIAUAByAG8AYwBlAHMAcwBpAG4AZwAgAEkA
bgBzAHQAcgB1AGMAdABpAG8AbgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcA
cwBbACIAUAByAG8AZgBpAGwAZQAgACUAZAAiAF0AIAA9ACAAIgBQAHIAbwBmAGkAbABlACAAJQBk
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBQAHIAbwBwAGUAcgB0
AGkAZQBzACIAXQAgAD0AIAAiAFAAcgBvAHAAZQByAHQAaQBlAHMAIgA7AAorAGwAbwBjAGEAbABp
AHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFAAcgBvAHQAbwB0AHkAcABlACIAXQAgAD0AIAAiAFAA
cgBvAHQAbwB0AHkAcABlACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsA
IgBRAHUAZQByAHkAIABQAGEAcgBhAG0AZQB0AGUAcgBzACIAXQAgAD0AIAAiAFEAdQBlAHIAeQAg
AFAAYQByAGEAbQBlAHQAZQByAHMAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBn
AHMAWwAiAFEAdQBlAHIAeQAgAFMAdAByAGkAbgBnACIAXQAgAD0AIAAiAFEAdQBlAHIAeQAgAFMA
dAByAGkAbgBnACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGEA
ZABpAGEAbAAgAEcAcgBhAGQAaQBlAG4AdAAiAF0AIAA9ACAAIgBSAGEAZABpAGEAbAAgAEcAcgBh
AGQAaQBlAG4AdAAiADsACkBAIC0zNjQsNiArMzY2LDggQEAKIABsAG8AYwBhAGwAaQB6AGUAZABT
AHQAcgBpAG4AZwBzAFsAIgBSAGUAcwBvAHUAcgBjAGUAcwAiAF0AIAA9ACAAIgBSAGUAcwBvAHUA
cgBjAGUAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHMA
cABvAG4AcwBlACIAXQAgAD0AIAAiAFIAZQBzAHAAbwBuAHMAZQAiADsACiAAbABvAGMAYQBsAGkA
egBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHMAcABvAG4AcwBlACAASABlAGEAZABlAHIAcwAi
AF0AIAA9ACAAIgBSAGUAcwBwAG8AbgBzAGUAIABIAGUAYQBkAGUAcgBzACIAOwAKKwBsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUAdAB1AHIAbgAgAHQAeQBwAGUAIABmAG8A
cgAgAGEAbgBvAG4AeQBtAG8AdQBzACAAZgB1AG4AYwB0AGkAbwBuACIAXQAgAD0AIAAiAFIAZQB0
AHUAcgBuACAAdAB5AHAAZQAgAGYAbwByACAAYQBuAG8AbgB5AG0AbwB1AHMAIABmAHUAbgBjAHQA
aQBvAG4AIgA7AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFIAZQB0AHUA
cgBuACAAdAB5AHAAZQAgAGYAbwByACAAZgB1AG4AYwB0AGkAbwBuADoAIAAlAHMAIgBdACAAPQAg
ACIAUgBlAHQAdQByAG4AIAB0AHkAcABlACAAZgBvAHIAIABmAHUAbgBjAHQAaQBvAG4AOgAgACUA
cwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHYAZQBhAGwA
IABpAG4AIABEAE8ATQAgAFQAcgBlAGUAIgBdACAAPQAgACIAUgBlAHYAZQBhAGwAIABpAG4AIABE
AE8ATQAgAFQAcgBlAGUAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAi
AFIAZQB2AGUAYQBsACAAaQBuACAARABlAGIAdQBnAGcAZQByACAATgBhAHYAaQBnAGEAdABpAG8A
bgAgAFMAaQBkAGUAYgBhAHIAIgBdACAAPQAgACIAUgBlAHYAZQBhAGwAIABpAG4AIABEAGUAYgB1
AGcAZwBlAHIAIABOAGEAdgBpAGcAYQB0AGkAbwBuACAAUwBpAGQAZQBiAGEAcgAiADsACiAAbABv
AGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHYAZQBhAGwAIABpAG4AIABPAHIA
aQBnAGkAbgBhAGwAIABSAGUAcwBvAHUAcgBjAGUAIgBdACAAPQAgACIAUgBlAHYAZQBhAGwAIABp
AG4AIABPAHIAaQBnAGkAbgBhAGwAIABSAGUAcwBvAHUAcgBjAGUAIgA7AApAQCAtNDAzLDYgKzQw
Nyw3IEBACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAgAHQA
aABlACAAJQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBkAGUAYgBhAHIAIAAoACUAcwAp
ACIAXQAgAD0AIAAiAFMAaABvAHcAIAB0AGgAZQAgACUAcwAgAG4AYQB2AGkAZwBhAHQAaQBvAG4A
IABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIA
aQBuAGcAcwBbACIAUwBoAG8AdwAgAHQAaQBtAGUAcwAgAGEAcwAgAGEAYgBzAG8AbAB1AHQAZQAg
AHQAaQBtAGUAcwAiAF0AIAA9ACAAIgBTAGgAbwB3ACAAdABpAG0AZQBzACAAYQBzACAAYQBiAHMA
bwBsAHUAdABlACAAdABpAG0AZQBzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4A
ZwBzAFsAIgBTAGgAbwB3ACAAdABpAG0AZQBzACAAYQBzACAAcABlAHIAYwBlAG4AdABhAGcAZQBz
ACIAXQAgAD0AIAAiAFMAaABvAHcAIAB0AGkAbQBlAHMAIABhAHMAIABwAGUAcgBjAGUAbgB0AGEA
ZwBlAHMAIgA7AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcA
IAB0AHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACIAXQAgAD0AIAAiAFMAaABvAHcAIAB0
AHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABT
AHQAcgBpAG4AZwBzAFsAIgBTAGkAegBlACIAXQAgAD0AIAAiAFMAaQB6AGUAIgA7AAogAGwAbwBj
AGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAbQBhAGwAbAAgAEkAYwBvAG4AcwAiAF0A
IAA9ACAAIgBTAG0AYQBsAGwAIABJAGMAbwBuAHMAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMA
dAByAGkAbgBnAHMAWwAiAFMAbwBjAGsAZQB0ACIAXQAgAD0AIAAiAFMAbwBjAGsAZQB0ACIAOwAK
QEAgLTQ0OSw2ICs0NTQsNyBAQAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAi
AFQAcgBhAG4AcwBmAGUAcgBlAGQAIgBdACAAPQAgACIAVAByAGEAbgBzAGYAZQByAGUAZAAiADsA
CiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAVAB5AHAAZQAiAF0AIAA9ACAA
IgBUAHkAcABlACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBUAHkA
cABlACAASQBzAHMAdQBlACIAXQAgAD0AIAAiAFQAeQBwAGUAIABJAHMAcwB1AGUAIgA7AAorAGwA
bwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFQAeQBwAGUAIABpAG4AZgBvAHIAbQBh
AHQAaQBvAG4AIABmAG8AcgAgAHYAYQByAGkAYQBiAGwAZQA6ACAAJQBzACIAXQAgAD0AIAAiAFQA
eQBwAGUAIABpAG4AZgBvAHIAbQBhAHQAaQBvAG4AIABmAG8AcgAgAHYAYQByAGkAYQBiAGwAZQA6
ACAAJQBzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBVAG4AawBu
AG8AdwBuACAAbgBvAGQAZQAiAF0AIAA9ACAAIgBVAG4AawBuAG8AdwBuACAAbgBvAGQAZQAiADsA
CiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAVQBuAHQAaQB0AGwAZQBkACIA
XQAgAD0AIAAiAFUAbgB0AGkAdABsAGUAZAAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIA
aQBuAGcAcwBbACIAVQBzAGUAcgAgAEEAZwBlAG4AdAAgAFMAdAB5AGwAZQBzAGgAZQBlAHQAIgBd
ACAAPQAgACIAVQBzAGUAcgAgAEEAZwBlAG4AdAAgAFMAdAB5AGwAZQBzAGgAZQBlAHQAIgA7AApJ
bmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAko
cmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TWFpbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNiArMTM2LDcgQEAKICAgICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1RpbWVsaW5lVmlldy5jc3MiPgogICAgIDxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvVG9vbGJhci5jc3MiPgogICAgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvVHJlZUVsZW1lbnRTdGF0dXNCdXR0b24uY3NzIj4K
KyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1R5cGVUb2tlblZpZXcuY3Nz
Ij4KIAogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iQ29udHJvbGxlcnMvQ29kZU1p
cnJvckNvbXBsZXRpb25Db250cm9sbGVyLmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSJDb250cm9sbGVycy9Db2RlTWlycm9yRHJhZ1RvQWRqdXN0TnVtYmVyQ29udHJvbGxl
ci5jc3MiPgpAQCAtNDYxLDYgKzQ2Miw4IEBACiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1Rvb2xi
YXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UcmVlRWxlbWVudFN0YXR1
c0J1dHRvbi5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1RyZWVPdXRsaW5l
RGF0YUdyaWRTeW5jaHJvbml6ZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWaWV3
cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJW
aWV3cy9UeXBlVG9rZW5WaWV3LmpzIj48L3NjcmlwdD4KIAogICAgIDxzY3JpcHQgc3JjPSJDb250
cm9sbGVycy9Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIuanMiPjwvc2NyaXB0PgogCkBAIC00
OTIsNiArNDk1LDcgQEAKICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvU291cmNlTWFwTWFu
YWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1N0b3JhZ2VN
YW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvVGltZWxp
bmVNYW5hZ2VyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvVHlw
ZVRva2VuQW5ub3RhdG9yLmpzIj48L3NjcmlwdD4KIAogICAgIDxzY3JpcHQgc3JjPSJCYXNlL01h
aW4uanMiPjwvc2NyaXB0PgogCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9CYXNlL01haW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMJKHdvcmtpbmcgY29weSkKQEAg
LTE2Miw2ICsxNjIsMTAgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICB0
aGlzLnNob3dTaGFkb3dET01TZXR0aW5nID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5nKCJzaG93
LXNoYWRvdy1kb20iLCBmYWxzZSk7CiAgICAgdGhpcy5zaG93UmVwbGF5SW50ZXJmYWNlU2V0dGlu
ZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygic2hvdy13ZWItcmVwbGF5IiwgZmFsc2UpOwog
CisgICAgdGhpcy5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcgPSBuZXcgV2Vi
SW5zcGVjdG9yLlNldHRpbmcoInNob3ctamF2YXNjcmlwdC10eXBlLWluZm9ybWF0aW9uIiwgZmFs
c2UpOworICAgIGlmICh0aGlzLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52
YWx1ZSkKKyAgICAgICAgUnVudGltZUFnZW50LmVuYWJsZVR5cGVQcm9maWxlcigpOworCiAgICAg
dGhpcy5tb3VzZUNvb3JkcyA9IHsKICAgICAgICAgeDogMCwKICAgICAgICAgeTogMApJbmRleDog
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJv
clRva2VuVHJhY2tpbmdDb250cm9sbGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5n
Q29udHJvbGxlci5qcwkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9s
bGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yVG9rZW5UcmFja2luZ0NvbnQKICAgICBOb25lOiAibm9uZSIsCiAgICAgTm9uU3ltYm9s
VG9rZW5zOiAibm9uLXN5bWJvbC10b2tlbnMiLAogICAgIEphdmFTY3JpcHRFeHByZXNzaW9uOiAi
amF2YXNjcmlwdC1leHByZXNzaW9uIiwKKyAgICBKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOiAi
amF2YXNjcmlwdC10eXBlLWluZm9ybWF0aW9uIiwKICAgICBNYXJrZWRUb2tlbnM6ICJtYXJrZWQt
dG9rZW5zIgogfQogCkBAIC0zODksNiArMzkwLDcgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JU
b2tlblRyYWNraW5nQ29udAogICAgICAgICAgICAgdGhpcy5fY2FuZGlkYXRlID0gdGhpcy5fcHJv
Y2Vzc05vblN5bWJvbFRva2VuKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2YVNj
cmlwdEV4cHJlc3Npb246CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tl
blRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb246CiAgICAg
ICAgICAgICB0aGlzLl9jYW5kaWRhdGUgPSB0aGlzLl9wcm9jZXNzSmF2YVNjcmlwdEV4cHJlc3Np
b24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5NYXJrZWRUb2tlbnM6CkluZGV4OiBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJT
b3VyY2VNYXAuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyU291cmNlTWFwLmpzCShyZXZpc2lvbiAxNzI4MzAp
CisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3Jt
YXR0ZXJTb3VyY2VNYXAuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE1ICs0NSwyNyBAQCBXZWJJ
bnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwLnByb3RvdHlwCiAgICAgb3JpZ2luYWxUb0Zvcm1h
dHRlZDogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQogICAgIHsKICAgICAgICAg
dmFyIG9yaWdpbmFsUG9zaXRpb24gPSB0aGlzLl9sb2NhdGlvblRvUG9zaXRpb24odGhpcy5fb3Jp
Z2luYWxMaW5lRW5kaW5ncywgbGluZU51bWJlciB8fCAwLCBjb2x1bW5OdW1iZXIgfHwgMCk7Cisg
ICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsUG9zaXRpb25Ub0Zvcm1hdHRlZChvcmlnaW5hbFBv
c2l0aW9uKTsKKyAgICB9LAorCisgICAgb3JpZ2luYWxQb3NpdGlvblRvRm9ybWF0dGVkOiBmdW5j
dGlvbihvcmlnaW5hbFBvc2l0aW9uKQorICAgIHsKICAgICAgICAgdmFyIGZvcm1hdHRlZFBvc2l0
aW9uID0gdGhpcy5fY29udmVydFBvc2l0aW9uKHRoaXMuX21hcHBpbmcub3JpZ2luYWwsIHRoaXMu
X21hcHBpbmcuZm9ybWF0dGVkLCBvcmlnaW5hbFBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHRo
aXMuX3Bvc2l0aW9uVG9Mb2NhdGlvbih0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncywgZm9ybWF0
dGVkUG9zaXRpb24pOwogICAgIH0sCiAKKwogICAgIGZvcm1hdHRlZFRvT3JpZ2luYWw6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CisgICAgICAgIHZhciBvcmlnaW5h
bFBvc2l0aW9uID0gdGhpcy5mb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0KGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlcik7CisgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblRvTG9jYXRpb24odGhp
cy5fb3JpZ2luYWxMaW5lRW5kaW5ncywgb3JpZ2luYWxQb3NpdGlvbik7CisgICAgfSwKKworICAg
IGZvcm1hdHRlZFRvT3JpZ2luYWxPZmZzZXQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51
bWJlcikKKyAgICB7CiAgICAgICAgIHZhciBmb3JtYXR0ZWRQb3NpdGlvbiA9IHRoaXMuX2xvY2F0
aW9uVG9Qb3NpdGlvbih0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncywgbGluZU51bWJlciB8fCAw
LCBjb2x1bW5OdW1iZXIgfHwgMCk7CiAgICAgICAgIHZhciBvcmlnaW5hbFBvc2l0aW9uID0gdGhp
cy5fY29udmVydFBvc2l0aW9uKHRoaXMuX21hcHBpbmcuZm9ybWF0dGVkLCB0aGlzLl9tYXBwaW5n
Lm9yaWdpbmFsLCBmb3JtYXR0ZWRQb3NpdGlvbik7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wb3Np
dGlvblRvTG9jYXRpb24odGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncywgb3JpZ2luYWxQb3NpdGlv
bik7CisgICAgICAgIHJldHVybiBvcmlnaW5hbFBvc2l0aW9uOwogICAgIH0sCiAKICAgICAvLyBQ
cml2YXRlCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjc0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvciA9IGZ1bmN0
aW9uKHNvdXJjZUNvZGVUZXh0RWRpdG9yLCBzY3JpcHQpCit7CisgICAgV2ViSW5zcGVjdG9yLk9i
amVjdC5jYWxsKHRoaXMpOworCisgICAgY29uc29sZS5hc3NlcnQoc291cmNlQ29kZVRleHRFZGl0
b3IgJiYgc291cmNlQ29kZVRleHRFZGl0b3IgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IsIHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKKyAgICBjb25zb2xlLmFzc2Vy
dChzY3JpcHQsIHNjcmlwdCk7CisKKyAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7CisgICAgdGhp
cy5fc291cmNlQ29kZVRleHRFZGl0b3IgPSBzb3VyY2VDb2RlVGV4dEVkaXRvcjsKKyAgICB0aGlz
Ll90eXBlVG9rZW5Ob2RlcyA9IFtdOworICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcyA9IFtd
OworICAgIHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyID0gbnVsbDsKKyAgICB0aGlzLl9pc0FjdGl2
ZSA9IGZhbHNlOworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5
cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3Is
CisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKworICAgIC8v
IFB1YmxpYworCisgICAgZ2V0IGlzQWN0aXZlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9pc0FjdGl2ZTsKKyAgICB9LAorCisgICAgZ2V0IHNvdXJjZUNvZGVUZXh0RWRpdG9yKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvcjsKKyAgICB9LAor
CisgICAgcGF1c2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NsZWFyVGltZW91
dElmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7CisgICAgfSwKKwor
ICAgIHJlc3VtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0
SWZOZWVkZWQoKTsKKyAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOworICAgICAgICB0aGlz
Ll9pbnNlcnRBbm5vdGF0aW9ucygpOworICAgIH0sCisKKyAgICByZXNldDogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsKKyAgICAgICAgdGhp
cy5faXNBY3RpdmUgPSB0cnVlOworICAgICAgICB0aGlzLl9jbGVhclR5cGVUb2tlbnMoKTsKKyAg
ICAgICAgdGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAgdG9nZ2xlVHlw
ZUFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5faXNBY3Rp
dmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7CisgICAgICAgICAgICB0
aGlzLl9jbGVhclR5cGVUb2tlbnMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRo
aXMuX2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZTsKKyAgICB9LAorCisgICAgLy8gUHJp
dmF0ZQorCisgICAgX2luc2VydEFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICBpZiAoIXRoaXMuX2lzQWN0aXZlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZh
ciBzY3JpcHRTeW50YXhUcmVlID0gdGhpcy5fc2NyaXB0LnNjcmlwdFN5bnRheFRyZWU7CisKKyAg
ICAgICAgaWYgKCFzY3JpcHRTeW50YXhUcmVlKSB7CisgICAgICAgICAgICB0aGlzLl9zY3JpcHQu
cmVxdWVzdFNjcmlwdFN5bnRheFRyZWUoZnVuY3Rpb24oc3ludGF4VHJlZSkgeworICAgICAgICAg
ICAgICAgIC8vIEFmdGVyIHJlcXVlc3RpbmcgdGhlIHRyZWUsIHdlIHN0aWxsIG1pZ2h0IGdldCBh
IG51bGwgdHJlZSBmcm9tIGEgcGFyc2UgZXJyb3IuCisgICAgICAgICAgICAgICAgaWYgKHN5bnRh
eFRyZWUpCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydEFubm90YXRpb25zKCk7Cisg
ICAgICAgICAgICB9LmJpbmQodGhpcykpOworCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIXNjcmlwdFN5bnRheFRyZWUucGFyc2VkU3VjY2Vzc2Z1bGx5KQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzdGFydE9mZnNldCA9IHRoaXMuX3Nv
dXJjZUNvZGVUZXh0RWRpdG9yLnZpc2libGVSYW5nZVN0YXJ0T2Zmc2V0KCk7CisgICAgICAgIHZh
ciBlbmRPZmZzZXQgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvci52aXNpYmxlUmFuZ2VFbmRP
ZmZzZXQoKTsKKworICAgICAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKKyAgICAgICAg
dmFyIGFsbE5vZGVzSW5SYW5nZSA9IHNjcmlwdFN5bnRheFRyZWUuZmlsdGVyQnlSYW5nZShzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICAgICAgc2NyaXB0U3ludGF4VHJlZS51cGRhdGVUeXBl
cyhhbGxOb2Rlc0luUmFuZ2UsIGZ1bmN0aW9uIGFmdGVyVHlwZVVwZGF0ZXMoKSB7CisgICAgICAg
ICAgICAvLyBCZWNhdXNlIHRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIGNhbGwsIHdlIGNvdWxkIGhh
dmUgYmVlbiBkZWFjdGl2YXRlZCBiZWZvcmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxl
ZC4KKyAgICAgICAgICAgIGlmICghdGhpcy5faXNBY3RpdmUpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBhbGxOb2Rlc0luUmFuZ2UuZm9yRWFjaCh0aGlzLl9pbnNlcnRU
eXBlVG9rZW5zRm9yRWFjaE5vZGUsIHRoaXMpOworICAgICAgICAgICAgYWxsTm9kZXNJblJhbmdl
LmZvckVhY2godGhpcy5fdXBkYXRlVHlwZVRva2Vuc0ZvckVhY2hOb2RlLCB0aGlzKTsKKworICAg
ICAgICAgICAgdmFyIHRvdGFsVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7CisgICAgICAg
ICAgICB2YXIgdGltZW91dFRpbWUgPSBNYXRoLm1pbihNYXRoLm1heCg3NTAwLCB0b3RhbFRpbWUp
LCA4ICogdG90YWxUaW1lKTsKKworICAgICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIg
PSBzZXRUaW1lb3V0KGZ1bmN0aW9uIHRpbWVvdXRVcGRhdGUoKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICAgICAgICAgIHRoaXMuX2lu
c2VydEFubm90YXRpb25zKCk7CisgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWVvdXRUaW1l
KTsKKyAgICAgICAgfS5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgX2luc2VydFR5cGVUb2tl
bnNGb3JFYWNoTm9kZTogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIHZhciBzY3JpcHRT
eW50YXhUcmVlID0gdGhpcy5fc2NyaXB0Ll9zY3JpcHRTeW50YXhUcmVlOworCisgICAgICAgIHN3
aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb246CisgICAg
ICAgICAgICBmb3IgKHZhciBwYXJhbSBvZiBub2RlLnBhcmFtcykgeworICAgICAgICAgICAgICAg
IGlmICghcGFyYW0uYXR0YWNobWVudHMuX190eXBlVG9rZW4gJiYgcGFyYW0uYXR0YWNobWVudHMu
dHlwZXMgJiYgcGFyYW0uYXR0YWNobWVudHMudHlwZXMuZGlzcGxheVR5cGVOYW1lKQorICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRUb2tlbihwYXJhbS5yYW5nZVswXSwgcGFyYW0sIGZh
bHNlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuVmFyaWFibGUsIHBhcmFt
Lm5hbWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBhIGZ1bmN0aW9uIGRv
ZXMgbm90IGhhdmUgYW4gZXhwbGljaXQgcmV0dXJuIHR5cGUsIHRoZW4gZG9uJ3Qgc2hvdyBhIHJl
dHVybiB0eXBlIHVubGVzcyB3ZSB0aGluayBpdCdzIGEgY29uc3RydWN0b3IuCisgICAgICAgICAg
ICB2YXIgZnVuY3Rpb25SZXR1cm5UeXBlID0gbm9kZS5hdHRhY2htZW50cy5yZXR1cm5UeXBlczsK
KyAgICAgICAgICAgIGlmIChub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuIHx8ICFmdW5jdGlv
blJldHVyblR5cGUgfHwgIWZ1bmN0aW9uUmV0dXJuVHlwZS5kaXNwbGF5VHlwZU5hbWUpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmIChzY3JpcHRTeW50YXhUcmVlLmNv
bnRhaW5zTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQobm9kZS5ib2R5KSB8fCBmdW5jdGlvblJldHVy
blR5cGUuZGlzcGxheVR5cGVOYW1lICE9PSAiVW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAg
IHZhciBmdW5jdGlvbk5hbWUgPSBub2RlLmlkID8gbm9kZS5pZC5uYW1lIDogbnVsbDsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9pbnNlcnRUb2tlbihub2RlLmlzR2V0dGVyT3JTZXR0ZXIgPyBub2Rl
LmdldHRlck9yU2V0dGVyUmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdLCBub2RlLAorICAgICAgICAg
ICAgICAgICAgICB0cnVlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuUmV0
dXJuU3RhdGVtZW50LCBmdW5jdGlvbk5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuVmFyaWFibGVEZWNsYXJhdG9yOgorICAgICAgICAgICAgaWYgKCFub2RlLmF0dGFjaG1lbnRz
Ll9fdHlwZVRva2VuICYmIG5vZGUuYXR0YWNobWVudHMudHlwZXMgJiYgbm9kZS5hdHRhY2htZW50
cy50eXBlcy5kaXNwbGF5VHlwZU5hbWUpCisgICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0VG9r
ZW4obm9kZS5pZC5yYW5nZVswXSwgbm9kZSwgZmFsc2UsIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5W
aWV3LlRpdGxlVHlwZS5WYXJpYWJsZSwgbm9kZS5pZC5uYW1lKTsKKworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2luc2VydFRva2VuOiBmdW5jdGlvbihvcmln
aW5hbE9mZnNldCwgbm9kZSwgc2hvdWxkVHJhbnNsYXRlT2Zmc2V0VG9BZnRlclBhcmFtZXRlckxp
c3QsIHR5cGVUb2tlblRpdGxlVHlwZSwgZnVuY3Rpb25PclZhcmlhYmxlTmFtZSkKKyAgICB7Cisg
ICAgICAgIHZhciB0b2tlblBvc2l0aW9uID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3Iub3Jp
Z2luYWxPZmZzZXRUb0N1cnJlbnRQb3NpdGlvbihvcmlnaW5hbE9mZnNldCk7CisgICAgICAgIHZh
ciBjdXJyZW50T2Zmc2V0ID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3IuY3VycmVudFBvc2l0
aW9uVG9DdXJyZW50T2Zmc2V0KHRva2VuUG9zaXRpb24pOworICAgICAgICB2YXIgc291cmNlU3Ry
aW5nID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3Iuc3RyaW5nOworCisgICAgICAgIGlmIChz
aG91bGRUcmFuc2xhdGVPZmZzZXRUb0FmdGVyUGFyYW1ldGVyTGlzdCkgeworICAgICAgICAgICAg
Ly8gVHJhbnNsYXRlIHRoZSBwb3NpdGlvbiB0byB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcyBvZiB0
aGUgZnVuY3Rpb24gYXJndW1lbnRzOgorICAgICAgICAgICAgLy8gdHJhbnNsYXRlIGZyb206IFt0
eXBlLXRva2VuXSBmdW5jdGlvbiBmb28oKSB7fSA9PiB0bzogZnVuY3Rpb24gZm9vKCkgW3R5cGUt
dG9rZW5dIHt9CisgICAgICAgICAgICBjdXJyZW50T2Zmc2V0ID0gdGhpcy5fdHJhbnNsYXRlVG9P
ZmZzZXRBZnRlckZ1bmN0aW9uUGFyYW1ldGVyTGlzdChub2RlLCBjdXJyZW50T2Zmc2V0LCBzb3Vy
Y2VTdHJpbmcpOworICAgICAgICAgICAgdG9rZW5Qb3NpdGlvbiA9IHRoaXMuX3NvdXJjZUNvZGVU
ZXh0RWRpdG9yLmN1cnJlbnRPZmZzZXRUb0N1cnJlbnRQb3NpdGlvbihjdXJyZW50T2Zmc2V0KTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdGU6IGJvb2ttYXJrcyByZW5kZXIgdG8gdGhlIGxl
ZnQgb2YgdGhlIGNoYXJhY3RlciB0aGV5J3JlIGJlaW5nIGRpc3BsYXllZCBuZXh0IHRvLgorICAg
ICAgICAvLyBUaGlzIGlzIHdoeSByaWdodCBtYXJnaW4gY2hlY2tzIHRoZSBjdXJyZW50IG9mZnNl
dC4gQW5kIHRoaXMgaXMgb2theSB0byBkbyBiZWNhdXNlIEphdmFTY3JpcHQgY2FuJ3QgYmUgd3Jp
dHRlbiByaWdodC10by1sZWZ0LgorICAgICAgICB2YXIgaXNTcGFjZVJlZ2V4cCA9IC9ccy87Cisg
ICAgICAgIHZhciBzaG91bGRIYXZlTGVmdE1hcmdpbiA9IGN1cnJlbnRPZmZzZXQgIT09IDAgJiYg
IWlzU3BhY2VSZWdleHAudGVzdChzb3VyY2VTdHJpbmdbY3VycmVudE9mZnNldCAtIDFdKTsKKyAg
ICAgICAgdmFyIHNob3VsZEhhdmVSaWdodE1hcmdpbiA9ICFpc1NwYWNlUmVnZXhwLnRlc3Qoc291
cmNlU3RyaW5nW2N1cnJlbnRPZmZzZXRdKTsKKyAgICAgICAgdmFyIHR5cGVUb2tlbiA9IG5ldyBX
ZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldyh0aGlzLCBzaG91bGRIYXZlUmlnaHRNYXJnaW4sIHNo
b3VsZEhhdmVMZWZ0TWFyZ2luLCB0eXBlVG9rZW5UaXRsZVR5cGUsIGZ1bmN0aW9uT3JWYXJpYWJs
ZU5hbWUpOworICAgICAgICB2YXIgYm9va21hcmsgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRv
ci5zZXRVbmlxdWVCb29rbWFyayh0b2tlblBvc2l0aW9uLCB0eXBlVG9rZW4uZWxlbWVudCk7Cisg
ICAgICAgIG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4gPSB0eXBlVG9rZW47CisgICAgICAg
IHRoaXMuX3R5cGVUb2tlbk5vZGVzLnB1c2gobm9kZSk7CisgICAgICAgIHRoaXMuX3R5cGVUb2tl
bkJvb2ttYXJrcy5wdXNoKGJvb2ttYXJrKTsKKyAgICB9LAorCisgICAgX3VwZGF0ZVR5cGVUb2tl
bnNGb3JFYWNoTm9kZTogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobm9k
ZS50eXBlKSB7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICBu
b2RlLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtKSB7CisgICAgICAgICAgICAgICAgaWYg
KHBhcmFtLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuKQorICAgICAgICAgICAgICAgICAgICBwYXJh
bS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbi51cGRhdGUocGFyYW0uYXR0YWNobWVudHMudHlwZXMp
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAobm9kZS5hdHRhY2htZW50cy5fX3R5
cGVUb2tlbikKKyAgICAgICAgICAgICAgICBub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuLnVw
ZGF0ZShub2RlLmF0dGFjaG1lbnRzLnJldHVyblR5cGVzKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlh
YmxlRGVjbGFyYXRvcjoKKyAgICAgICAgICAgIGlmIChub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRv
a2VuKQorICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4udXBkYXRl
KG5vZGUuYXR0YWNobWVudHMudHlwZXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9LAorCisgICAgX3RyYW5zbGF0ZVRvT2Zmc2V0QWZ0ZXJGdW5jdGlvblBhcmFtZXRlckxp
c3Q6IGZ1bmN0aW9uKG5vZGUsIG9mZnNldCwgc291cmNlU3RyaW5nKQorICAgIHsKKyAgICAgICAg
Ly8gVGhlIGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IHdlIGdldCB0aGUgb2Zmc2V0IHN0YXJ0aW5n
IGF0IHRoZSBmdW5jdGlvbiBrZXl3b3JkIChvciBhZnRlciB0aGUgZ2V0L3NldCBrZXl3b3Jkcyku
CisgICAgICAgIC8vIFdlIHdpbGwgcmV0dXJuIHRoZSBvZmZzZXQgZm9yIHRoZSBjbG9zaW5nIHBh
cmVudGhlc2lzIGluIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KKyAgICAgICAgLy8gQWxsIHRo
aXMgY29kZSBpcyBqdXN0IGEgd2F5IHRvIGZpbmQgdGhpcyBwYXJlbnRoZXNpcyB3aGlsZSBpZ25v
cmluZyBjb21tZW50cy4KKworICAgICAgICB2YXIgaXNNdWx0aUxpbmVDb21tZW50ID0gZmFsc2U7
CisgICAgICAgIHZhciBpc1NpbmdsZUxpbmVDb21tZW50ID0gZmFsc2U7CisgICAgICAgIHZhciBz
aG91bGRJZ25vcmUgPSBmYWxzZTsKKworICAgICAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9y
KGNoYXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBFY21hU2NyaXB0IDUg
Z3JhbW1hciBmb3Igc2luZ2xlIGxpbmUgY29tbWVudHMgYW5kIGxpbmUgdGVybWluYXRvcnM6Cisg
ICAgICAgICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIv
NS4xLyNzZWMtNy4zCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25h
bC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtNy40CisgICAgICAgICAgICByZXR1cm4gY2hhciA9PT0g
IlxuIiB8fCBjaGFyID09PSAiXHIiIHx8IGNoYXIgPT09ICJcdTIwMjgiIHx8IGNoYXIgPT09ICJc
dTIwMjkiOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKChzb3VyY2VTdHJpbmdbb2Zmc2V0
XSAhPT0gIikiIHx8IHNob3VsZElnbm9yZSkgJiYgb2Zmc2V0IDwgc291cmNlU3RyaW5nLmxlbmd0
aCkgeworICAgICAgICAgICAgaWYgKGlzU2luZ2xlTGluZUNvbW1lbnQgJiYgaXNMaW5lVGVybWlu
YXRvcihzb3VyY2VTdHJpbmdbb2Zmc2V0XSkpIHsKKyAgICAgICAgICAgICAgICBpc1NpbmdsZUxp
bmVDb21tZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgc2hvdWxkSWdub3JlID0gZmFsc2U7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTXVsdGlMaW5lQ29tbWVudCAmJiBzb3VyY2VTdHJp
bmdbb2Zmc2V0XSA9PT0gIioiICYmIHNvdXJjZVN0cmluZ1tvZmZzZXQgKyAxXSA9PT0gIi8iKSB7
CisgICAgICAgICAgICAgICAgaXNNdWx0aUxpbmVDb21tZW50ID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgc2hvdWxkSWdub3JlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgb2Zmc2V0Kys7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKCFzaG91bGRJZ25vcmUgJiYgc291cmNlU3RyaW5nW29mZnNl
dF0gPT09ICIvIikgeworICAgICAgICAgICAgICAgIG9mZnNldCsrOworICAgICAgICAgICAgICAg
IGlmIChzb3VyY2VTdHJpbmdbb2Zmc2V0XSA9PT0gIioiKQorICAgICAgICAgICAgICAgICAgICBp
c011bHRpTGluZUNvbW1lbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJj
ZVN0cmluZ1tvZmZzZXRdID09PSAiLyIpCisgICAgICAgICAgICAgICAgICAgIGlzU2luZ2xlTGlu
ZUNvbW1lbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcGFyc2luZy4gQ291bGRuJ3QgcGFyc2UgY29tbWVudCBw
cmVhbWJsZS4iKTsKKyAgICAgICAgICAgICAgICBzaG91bGRJZ25vcmUgPSB0cnVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBvZmZzZXQrKzsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBvZmZzZXQgKyAxOworICAgIH0sCisKKyAgICBfY2xlYXJUeXBlVG9rZW5zOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB0aGlzLl90eXBlVG9rZW5Ob2Rlcy5mb3JFYWNoKGZ1bmN0aW9u
KG5vZGUpIHsKKyAgICAgICAgICAgIG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4gPSBudWxs
OworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtzLmZvckVhY2go
ZnVuY3Rpb24oYm9va21hcmspIHsKKyAgICAgICAgICAgIGJvb2ttYXJrLmNsZWFyKCk7CisgICAg
ICAgIH0pOworCisgICAgICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzID0gW107CisgICAgICAgIHRo
aXMuX3R5cGVUb2tlbkJvb2ttYXJrcyA9IFtdOworICAgIH0sCisKKyAgICBfY2xlYXJUaW1lb3V0
SWZOZWVkZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl90aW1lb3V0SWRl
bnRpZmllcikgeworICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZGVudGlm
aWVyKTsKKyAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyID0gbnVsbDsKKyAgICAg
ICAgfQorICAgIH0KK307CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1UeXBlcy5zdmcKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtVHlwZXMuc3Zn
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1h
Z2VzL05hdmlnYXRpb25JdGVtVHlwZXMuc3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBA
QAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tIENvcHlyaWdodCDCqSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gLS0+Cis8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTQgMTQiPgorICAgIDxyZWN0
IGNsYXNzPSJzdHJva2VkIiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiB4PSIwLjUiIHk9IjEu
MCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIvPgorICAgIDxwYXRoIGNsYXNzPSJzdHJv
a2VkIiBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBk
PSJNIDYuNSA1LjUgTCA2LjUgOS41IE0gNC4wIDQuNSBMIDkuMCA0LjUiLz4KKzwvc3ZnPgpJbmRl
eDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
U2NyaXB0LmpzCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1
LDExIEBAIFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4g
dGhpcy5fcmVzb3VyY2U7CiAgICAgfSwKIAorICAgIGdldCBzY3JpcHRTeW50YXhUcmVlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zY3JpcHRTeW50YXhUcmVlOworICAgIH0sCisKICAg
ICBjYW5SZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kOiBmdW5jdGlvbigpCiAgICAgewogICAgICAg
ICAvLyBXZSBjYW4gcmVxdWVzdCBjb250ZW50IGlmIHdlIGhhdmUgYW4gaWQuCkluZGV4OiBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvU2NyaXB0U3ludGF4VHJlZS5qcwkocmV2aXNpb24gMTcyODMwKQorKysgU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanMJKHdvcmtp
bmcgY29weSkKQEAgLTE3Miw4ICsxNzIsOCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5wcm90b3R5cGUgCiAgICAgICAgIGlmICghdGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5KQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChzdGFydE5vZGUuX2F0dGFjaG1l
bnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRlbWVudCAhPT0gdW5kZWZpbmVkKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXJ0Tm9kZS5fYXR0YWNobWVudHMuX2hhc05vbkVtcHR5UmV0dXJuU3RhdGVt
ZW50OworICAgICAgICBpZiAoc3RhcnROb2RlLmF0dGFjaG1lbnRzLl9oYXNOb25FbXB0eVJldHVy
blN0YXRlbWVudCAhPT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuIHN0YXJ0Tm9kZS5h
dHRhY2htZW50cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQ7CiAKICAgICAgICAgZnVuY3Rp
b24gcmVtb3ZlRnVuY3Rpb25zRmlsdGVyKG5vZGUpCiAgICAgICAgIHsKQEAgLTE5MSwxOSArMTkx
LDIyIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZSAKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAgCi0gICAgICAgIHN0YXJ0Tm9kZS5fYXR0YWNobWVu
dHMuX2hhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50ID0gaGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1l
bnQ7CisgICAgICAgIHN0YXJ0Tm9kZS5hdHRhY2htZW50cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0
ZW1lbnQgPSBoYXNOb25FbXB0eVJldHVyblN0YXRlbWVudDsKIAogICAgICAgICByZXR1cm4gaGFz
Tm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQ7CiAgICAgfSwKIAotICAgIHVwZGF0ZVR5cGVzOiBmdW5j
dGlvbihzb3VyY2VJRCwgbm9kZXNUb1VwZGF0ZSwgY2FsbGJhY2spIAorICAgIHVwZGF0ZVR5cGVz
OiBmdW5jdGlvbihub2Rlc1RvVXBkYXRlLCBjYWxsYmFjaykKICAgICB7CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KFJ1bnRpbWVBZ2VudC5nZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNl
dHMpOwogICAgICAgICBjb25zb2xlLmFzc2VydChBcnJheS5pc0FycmF5KG5vZGVzVG9VcGRhdGUp
ICYmIHRoaXMuX3BhcnNlZFN1Y2Nlc3NmdWxseSk7CisKICAgICAgICAgaWYgKCF0aGlzLl9wYXJz
ZWRTdWNjZXNzZnVsbHkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFyIGFsbFJl
cXVlc3RzID0gW107CiAgICAgICAgIHZhciBhbGxSZXF1ZXN0Tm9kZXMgPSBbXTsKKyAgICAgICAg
dmFyIHNvdXJjZUlEID0gdGhpcy5fc2NyaXB0LmlkOwogCiAgICAgICAgIGZvciAodmFyIG5vZGUg
b2Ygbm9kZXNUb1VwZGF0ZSkgewogICAgICAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsKQEAg
LTI0OSw5ICsyNTIsOSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUg
CiAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBhbGxSZXF1ZXN0Tm9kZXNbaV07CiAgICAgICAg
ICAgICAgICAgdmFyIHR5cGVJbmZvcm1hdGlvbiA9IHR5cGVJbmZvcm1hdGlvbkFycmF5W2ldOwog
ICAgICAgICAgICAgICAgIGlmIChhbGxSZXF1ZXN0c1tpXS50eXBlSW5mb3JtYXRpb25EZXNjcmlw
dG9yID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hE
ZXNjcmlwdG9yLkZ1bmN0aW9uUmV0dXJuKQotICAgICAgICAgICAgICAgICAgICBub2RlLl9hdHRh
Y2htZW50cy5fcmV0dXJuVHlwZXMgPSB0eXBlSW5mb3JtYXRpb247CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUuYXR0YWNobWVudHMucmV0dXJuVHlwZXMgPSB0eXBlSW5mb3JtYXRpb247CiAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBub2RlLl9hdHRhY2htZW50cy5f
dHlwZXMgPSB0eXBlSW5mb3JtYXRpb247CisgICAgICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNo
bWVudHMudHlwZXMgPSB0eXBlSW5mb3JtYXRpb247CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGNhbGxiYWNrKCk7CkBAIC03NzUsNyArNzc4LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFN5
bnRheFRyZWUucHJvdG90eXBlIAogICAgICAgICAKICAgICAgICAgcmVzdWx0LnJhbmdlID0gbm9k
ZS5yYW5nZTsKICAgICAgICAgLy8gVGhpcyBpcyBhbiBvYmplY3QgZm9yIHdoaWNoIHlvdSBjYW4g
YWRkIGZpZWxkcyB0byBhbiBBU1Qgbm9kZSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHBvbGx1dGlu
ZyB0aGUgc3ludGF4LXJlbGF0ZWQgZmllbGRzIG9mIHRoZSBub2RlLgotICAgICAgICByZXN1bHQu
X2F0dGFjaG1lbnRzID0ge307IAorICAgICAgICByZXN1bHQuYXR0YWNobWVudHMgPSB7fTsKIAog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NjcmlwdENvbnRlbnRWaWV3LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NjcmlwdENvbnRlbnRW
aWV3LmpzCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9TY3JpcHRDb250ZW50Vmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTks
NiArNTksMTYgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3ID0gZnVuY3RpbwogICAg
IHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9y
LkFjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0oInByZXR0eS1wcmludCIsIHRvb2xUaXAsIGFj
dGl2YXRlZFRvb2xUaXAsIGN1cmxleUJyYWNlc0ltYWdlLnNyYywgY3VybGV5QnJhY2VzSW1hZ2Uu
d2lkdGgsIGN1cmxleUJyYWNlc0ltYWdlLmhlaWdodCk7CiAgICAgdGhpcy5fcHJldHR5UHJpbnRC
dXR0b25OYXZpZ2F0aW9uSXRlbS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CdXR0b25O
YXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCB0aGlzLl90b2dnbGVQcmV0dHlQcmludCwgdGhp
cyk7CiAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0g
ZmFsc2U7IC8vIEVuYWJsZWQgd2hlbiB0aGUgdGV4dCBlZGl0b3IgaXMgcG9wdWxhdGVkIHdpdGgg
Y29udGVudC4KKworICAgIHZhciBzaG93VHlwZXNJbWFnZVNpemUgPSAoV2ViSW5zcGVjdG9yLlBs
YXRmb3JtLmlzTGVnYWN5TWFjT1MgPyAxNSA6IDE2KTsKKyAgICB2YXIgdG9vbFRpcFR5cGVzID0g
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IHR5cGUgaW5mb3JtYXRpb24iKTsKKyAgICB2YXIg
YWN0aXZhdGVkVG9vbFRpcFR5cGVzID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJIaWRlIHR5cGUg
aW5mb3JtYXRpb24iKTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbSA9
IG5ldyBXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbSgic2hvdy10eXBl
cyIsIHRvb2xUaXBUeXBlcywgCisgICAgICAgIGFjdGl2YXRlZFRvb2xUaXBUeXBlcywgIkltYWdl
cy9OYXZpZ2F0aW9uSXRlbVR5cGVzLnN2ZyIsIHNob3dUeXBlc0ltYWdlU2l6ZSwgc2hvd1R5cGVz
SW1hZ2VTaXplKTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlj
a2VkLCB0aGlzLl90b2dnbGVUeXBlQW5ub3RhdGlvbnMsIHRoaXMpOworICAgIHRoaXMuX3Nob3dU
eXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSBmYWxzZTsKKworICAgIFdlYkluc3Bl
Y3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuU2V0dGluZy5FdmVudC5DaGFuZ2VkLCB0aGlzLl9zaG93SmF2YVNjcmlw
dFR5cGVJbmZvcm1hdGlvblNldHRpbmdDaGFuZ2VkLCB0aGlzKTsKIH07CiAKIFdlYkluc3BlY3Rv
ci5TY3JpcHRDb250ZW50Vmlldy5TdHlsZUNsYXNzTmFtZSA9ICJzY3JpcHQiOwpAQCAtNzAsNyAr
ODAsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlCiAKICAgICBn
ZXQgbmF2aWdhdGlvbkl0ZW1zKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBbdGhpcy5fcHJldHR5
UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbV07CisgICAgICAgIHJldHVybiBbdGhpcy5fcHJldHR5
UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbSwgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlv
bkl0ZW1dOwogICAgIH0sCiAKICAgICBnZXQgc2NyaXB0KCkKQEAgLTIwNCw2ICsyMTQsOCBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlCiAgICAgX2NvbnRlbnREaWRQ
b3B1bGF0ZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl9wcmV0dHlQcmlu
dEJ1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSB0aGlzLl90ZXh0RWRpdG9yLmNhbkJlRm9y
bWF0dGVkKCk7CisgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmVu
YWJsZWQgPSB0aGlzLl90ZXh0RWRpdG9yLmNhblNob3dUeXBlQW5ub3RhdGlvbnMoKTsKKyAgICAg
ICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gV2ViSW5z
cGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZTsKICAgICB9
LAogCiAgICAgX3RvZ2dsZVByZXR0eVByaW50OiBmdW5jdGlvbihldmVudCkKQEAgLTIxMiw2ICsy
MjQsMTYgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZQogICAgICAg
ICB0aGlzLl90ZXh0RWRpdG9yLmZvcm1hdHRlZCA9IGFjdGl2YXRlZDsKICAgICB9LAogCisgICAg
X3RvZ2dsZVR5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0
aGlzLl90ZXh0RWRpdG9yLnRvZ2dsZVR5cGVBbm5vdGF0aW9ucygpOworICAgIH0sCisKKyAgICBf
c2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nQ2hhbmdlZDogZnVuY3Rpb24oZXZl
bnQpCisgICAgeworICAgICAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5h
Y3RpdmF0ZWQgPSBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0
aW5nLnZhbHVlOworICAgIH0sCisKICAgICBfdGV4dEVkaXRvckZvcm1hdHRpbmdEaWRDaGFuZ2U6
IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25O
YXZpZ2F0aW9uSXRlbS5hY3RpdmF0ZWQgPSB0aGlzLl90ZXh0RWRpdG9yLmZvcm1hdHRlZDsKSW5k
ZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVU
ZXh0RWRpdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCShyZXZpc2lvbiAxNzI4MzApCisr
KyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4
dEVkaXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZVRleHRFZGl0b3IgPSBmdW5jCiAKICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ci5jYWxsKHRoaXMsIG51bGwsIG51bGwsIHRoaXMpOwogCisgICAgdGhpcy5fdHlwZVRva2VuQW5u
b3RhdG9yID0gbnVsbDsKKwogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgdGhpcyBqdXN0IGp1bXBz
IGJldHdlZW4gcmVzb3VyY2VzIGFuZCByZWxhdGVkIHNvdXJjZSBtYXAgcmVzb3VyY2VzLiBJdCBk
b2Vzbid0ICJqdW1wIHRvIHN5bWJvbCIgeWV0LgogICAgIHRoaXMuX3VwZGF0ZVRva2VuVHJhY2tp
bmdDb250cm9sbGVyU3RhdGUoKTsKIApAQCAtODMsNiArODUsNyBAQCBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZVRleHRFZGl0b3IuUG9wb3ZlCiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IuSG92ZXJlZEV4cHJlc3Npb25IaWdobGlnaHRTdHlsZUNsYXNzTmFtZSA9ICJob3ZlcmVkLWV4
cHJlc3Npb24taGlnaGxpZ2h0IjsKIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5E
dXJhdGlvblRvTW91c2VPdmVyVG9rZW5Ub01ha2VIb3ZlcmVkVG9rZW4gPSA1MDA7CiBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub01vdXNlT3V0T2ZIb3ZlcmVkVG9r
ZW5Ub1JlbGVhc2UgPSAxMDAwOworV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1
cmF0aW9uVG9VcGRhdGVUeXBlVG9rZW5zQWZ0ZXJTY3JvbGxpbmcgPSAxMDA7CiAKIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5BdXRvRm9ybWF0TWluaW11bUxpbmVMZW5ndGggPSA1
MDA7CiAKQEAgLTEwMSw2ICsxMDQsMTQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yLnByb3RvdAogICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29kZTsKICAgICB9LAogCisg
ICAgc2hvd246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yLnByb3RvdHlwZS5zaG93bi5jYWxsKHRoaXMpOworCisgICAgICAgIGlmICh0aGlzLl90eXBl
VG9rZW5Bbm5vdGF0b3IpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVz
dW1lKCk7CisgICAgfSwKKwogICAgIGhpZGRlbjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmhpZGRlbi5jYWxsKHRoaXMpOwpAQCAt
MTEwLDYgKzEyMSw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QK
ICAgICAgICAgdGhpcy5fZGlzbWlzc1BvcG92ZXIoKTsKICAgICAgICAgCiAgICAgICAgIHRoaXMu
X2Rpc21pc3NFZGl0aW5nQ29udHJvbGxlcih0cnVlKTsKKworICAgICAgICBpZiAodGhpcy5fdHlw
ZVRva2VuQW5ub3RhdG9yKQorICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnBh
dXNlKCk7CiAgICAgfSwKIAogICAgIGNsb3NlOiBmdW5jdGlvbigpCkBAIC0xMzUsNiArMTQ5LDgg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogCiAgICAgICAgIFdl
Ykluc3BlY3Rvci5ub3RpZmljYXRpb25zLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
Lk5vdGlmaWNhdGlvbi5HbG9iYWxNb2RpZmllcktleXNEaWRDaGFuZ2UsIHRoaXMuX3VwZGF0ZVRv
a2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUsIHRoaXMpOwogICAgICAgICB0aGlzLl9zb3VyY2VD
b2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuU291
cmNlTWFwQWRkZWQsIHRoaXMuX3NvdXJjZUNvZGVTb3VyY2VNYXBBZGRlZCwgdGhpcyk7CisKKyAg
ICAgICAgdGhpcy5fZGlzYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFubm90YXRvcigpOwog
ICAgIH0sCiAKICAgICBjYW5CZUZvcm1hdHRlZDogZnVuY3Rpb24oKQpAQCAtMTQ5LDYgKzE2NSwx
MSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIHJl
dHVybiBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuY2FuQmVGb3JtYXR0ZWQuY2Fs
bCh0aGlzKTsKICAgICB9LAogCisgICAgY2FuU2hvd1R5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yOworICAg
IH0sCisKICAgICBjdXN0b21QZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSkKICAgICB7CiAg
ICAgICAgIGZ1bmN0aW9uIHNlYXJjaFJlc3VsdENhbGxiYWNrKGVycm9yLCBtYXRjaGVzKQpAQCAt
MjM0LDYgKzI1NSw1NSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
CiAgICAgICAgICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZU1hcmtlcnMocmFuZ2UpOwogICAgIH0s
CiAKKyAgICB0b2dnbGVUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IGlmICghdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIHZhciBpc0FjdGl2YXRlZCA9IHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci50
b2dnbGVUeXBlQW5ub3RhdGlvbnMoKTsKKyAgICAgICAgaWYgKGlzQWN0aXZhdGVkKSB7CisgICAg
ICAgICAgICBSdW50aW1lQWdlbnQuZW5hYmxlVHlwZVByb2ZpbGVyKCk7CisgICAgICAgICAgICB0
aGlzLl9lbmFibGVTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGRpc2FibGUgdHlwZSBwcm9maWxpbmcgd2hlbiBl
eGl0aW5nIHRoZSBpbnNwZWN0b3IsIHNvIG5vIG5lZWQgdG8gY2FsbCBpdCBoZXJlLiBJZiB3ZSB3
ZXJlCisgICAgICAgICAgICAvLyB0byBjYWxsIGl0IGhlcmUsIHdlIHdvdWxkIGhhdmUgSmF2YVNj
cmlwdENvcmUgY29tcGlsZSBvdXQgYWxsIHRoZSBuZWNlc3NhcnkgdHlwZSBwcm9maWxpbmcgaW5m
b3JtYXRpb24sCisgICAgICAgICAgICAvLyBzbyBpZiBhIHVzZXIgd2VyZSB0byBxdWlja2x5IHBy
ZXNzIHRoZW4gdW5wcmVzcyB0aGUgYnV0dG9uLCB3ZSB3b3VsZG4ndCBiZSBhYmxlIHRvIHJlLXNo
b3cgdHlwZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVTY3JvbGxFdmVu
dHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKyAgICAgICAgfQorICAgICAgICBXZWJJbnNwZWN0
b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLnZhbHVlID0gaXNBY3RpdmF0
ZWQ7CisKKyAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgp
OworICAgICAgICByZXR1cm4gaXNBY3RpdmF0ZWQ7CisgICAgfSwKKworICAgIHNob3dQb3BvdmVy
Rm9yVHlwZXM6IGZ1bmN0aW9uKHR5cGVzLCBib3VuZHMsIHRpdGxlKQorICAgIHsKKyAgICAgICAg
dmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgY29u
dGVudC5jbGFzc05hbWUgPSAib2JqZWN0IGV4cGFuZGFibGUiOworCisgICAgICAgIHZhciB0aXRs
ZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGl0bGVF
bGVtZW50LmNsYXNzTmFtZSA9ICJ0aXRsZSI7CisgICAgICAgIHRpdGxlRWxlbWVudC50ZXh0Q29u
dGVudCA9IHRpdGxlOworICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbWVudCk7
CisKKyAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVz
U2VjdGlvbih0eXBlcyk7CisgICAgICAgIHNlY3Rpb24uZXhwYW5kZWQgPSB0cnVlOworICAgICAg
ICBzZWN0aW9uLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiYm9keSIpOworICAgICAgICBjb250ZW50
LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5fc2hvd1BvcG92
ZXIoY29udGVudCwgYm91bmRzKTsKKyAgICB9LAorCisgICAgLy8gUHJvdGVjdGVkCisKKyAgICBw
cmV0dHlQcmludDogZnVuY3Rpb24ocHJldHR5KQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3IucHJvdG90eXBlLnByZXR0eVByaW50LmNhbGwodGhpcywgcHJldHR5KTsKKwor
ICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFu
bm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5y
ZXNldCgpOworICAgIH0sCisKICAgICAvLyBQcml2YXRlCiAKICAgICBfdW5mb3JtYXR0ZWRMaW5l
SW5mb0ZvckVkaXRvckxpbmVJbmZvOiBmdW5jdGlvbihsaW5lSW5mbykKQEAgLTM1OCw2ICs0Mjgs
OSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAKICAgICAgICAg
dGhpcy5fY29udGVudFdpbGxQb3B1bGF0ZShjb250ZW50KTsKICAgICAgICAgdGhpcy5zdHJpbmcg
PSBjb250ZW50OworCisgICAgICAgIHRoaXMuX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKwog
ICAgICAgICB0aGlzLl9jb250ZW50RGlkUG9wdWxhdGUoKTsKICAgICB9LAogCkBAIC05NjcsMTIg
KzEwNDAsMTYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAg
IF9kZWJ1Z2dlckRpZFBhdXNlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMu
X3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKKyAgICAgICAgaWYgKHRoaXMu
X3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUp
CisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1lKCk7CiAgICAgfSwK
IAogICAgIF9kZWJ1Z2dlckRpZFJlc3VtZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAg
ICB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKCk7CiAgICAgICAgIHRo
aXMuX2Rpc21pc3NQb3BvdmVyKCk7CisgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0
b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQorICAgICAgICAgICAgdGhp
cy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlc3VtZSgpOwogICAgIH0sCiAKICAgICBfc291cmNlQ29k
ZVNvdXJjZU1hcEFkZGVkOiBmdW5jdGlvbihldmVudCkKQEAgLTk4OCw2ICsxMDY1LDggQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICB2YXIgbW9kZSA9
IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5Ob25l
OwogICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5wYXVzZWQpCiAgICAg
ICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJv
bGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9uOworICAgICAgICBlbHNlIGlmICh0aGlzLl90
eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQor
ICAgICAgICAgICAgbW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOwogICAgICAgICBlbHNlIGlm
ICh0aGlzLl9oYXNDb2xvck1hcmtlcnMoKSkKICAgICAgICAgICAgIG1vZGUgPSBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTWFya2VkVG9rZW5zOwog
ICAgICAgICBlbHNlIGlmICgodGhpcy5fc291cmNlQ29kZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rv
ci5Tb3VyY2VNYXBSZXNvdXJjZSB8fCB0aGlzLl9zb3VyY2VDb2RlLnNvdXJjZU1hcHMubGVuZ3Ro
ICE9PSAwKSAmJiBXZWJJbnNwZWN0b3IubW9kaWZpZXJLZXlzLm1ldGFLZXkgJiYgIVdlYkluc3Bl
Y3Rvci5tb2RpZmllcktleXMuYWx0S2V5ICYmICFXZWJJbnNwZWN0b3IubW9kaWZpZXJLZXlzLnNo
aWZ0S2V5KQpAQCAtMTAxMCw2ICsxMDg5LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0
RWRpdG9yLnByb3RvdAogICAgICAgICAgICAgdGhpcy5fZGlzbWlzc1BvcG92ZXIoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5U
cmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0RXhwcmVzc2lvbjoKKyAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2
YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjoKICAgICAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIubW91c2VPdmVyRGVsYXlEdXJhdGlvbiA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5EdXJhdGlvblRvTW91c2VPdmVyVG9rZW5Ub01ha2VIb3ZlcmVkVG9rZW47CiAg
ICAgICAgICAgICB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vdXNlT3V0UmVsZWFzZURl
bGF5RHVyYXRpb24gPSBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25U
b01vdXNlT3V0T2ZIb3ZlcmVkVG9rZW5Ub1JlbGVhc2U7CiAgICAgICAgICAgICB0aGlzLnRva2Vu
VHJhY2tpbmdDb250cm9sbGVyLmNsYXNzTmFtZUZvckhpZ2hsaWdodGVkUmFuZ2UgPSBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuSG92ZXJlZEV4cHJlc3Npb25IaWdobGlnaHRTdHls
ZUNsYXNzTmFtZTsKQEAgLTEwNzUsNiArMTE1NSwxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAg
ICAgICBpZiAodGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5tb2RlID09PSBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2YVNjcmlwdFR5cGVJ
bmZvcm1hdGlvbikgeworICAgICAgICAgICAgdGhpcy5fdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJI
aWdobGlnaHRlZEphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb24oY2FuZGlkYXRlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICh0aGlzLnRva2VuVHJhY2tpbmdD
b250cm9sbGVyLm1vZGUgPT09IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIuTW9kZS5NYXJrZWRUb2tlbnMpIHsKICAgICAgICAgICAgIHZhciBtYXJrZXJzID0g
dGhpcy5tYXJrZXJzQXRQb3NpdGlvbihjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2Uuc3RhcnQp
OwogICAgICAgICAgICAgaWYgKG1hcmtlcnMubGVuZ3RoID4gMCkKQEAgLTExMzAsMjYgKzEyMTUs
NzMgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICBE
ZWJ1Z2dlckFnZW50LmV2YWx1YXRlT25DYWxsRnJhbWUuaW52b2tlKHtjYWxsRnJhbWVJZDogV2Vi
SW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hY3RpdmVDYWxsRnJhbWUuaWQsIGV4cHJlc3Npb246
IGNhbmRpZGF0ZS5leHByZXNzaW9uLCBvYmplY3RHcm91cDogInBvcG92ZXIiLCBkb05vdFBhdXNl
T25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGU6IHRydWV9LCBwb3B1bGF0ZS5iaW5kKHRoaXMpKTsK
ICAgICB9LAogCi0gICAgX3Nob3dQb3BvdmVyOiBmdW5jdGlvbihjb250ZW50KQorICAgIF90b2tl
blRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjog
ZnVuY3Rpb24oY2FuZGlkYXRlKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoY2FuZGlk
YXRlLmV4cHJlc3Npb24pOworCisgICAgICAgIHZhciBzb3VyY2VDb2RlID0gdGhpcy5fc291cmNl
Q29kZTsKKyAgICAgICAgdmFyIHNvdXJjZUlEID0gc291cmNlQ29kZS5zY3JpcHRzWzBdLmlkOwor
ICAgICAgICB2YXIgcmFuZ2UgPSBjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2U7CisgICAgICAg
IHZhciBvZmZzZXQgPSB0aGlzLmN1cnJlbnRQb3NpdGlvblRvT3JpZ2luYWxPZmZzZXQoe2xpbmU6
IHJhbmdlLnN0YXJ0LmxpbmUsIGNoOiByYW5nZS5zdGFydC5jaH0pOworCisgICAgICAgIHZhciBh
bGxSZXF1ZXN0cyA9IFt7CisgICAgICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yOiBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9y
Lk5vcm1hbEV4cHJlc3Npb24sCisgICAgICAgICAgICBzb3VyY2VJRDogc291cmNlSUQsCisgICAg
ICAgICAgICBkaXZvdDogb2Zmc2V0CisgICAgICAgIH1dOworCisgICAgICAgIGZ1bmN0aW9uIGhh
bmRsZXIoZXJyb3IsIGFsbFR5cGVzKSB7CisgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlICE9PSB0aGlzLnRv
a2VuVHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGFsbFR5cGVzLmxlbmd0aCA9PT0gMSk7Cisg
ICAgICAgICAgICBpZiAoIWFsbFR5cGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB2YXIgdHlwZXMgPSBhbGxUeXBlc1swXTsKKyAgICAgICAgICAgIGlmICh0
eXBlcy5kaXNwbGF5VHlwZU5hbWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcG9wb3ZlclRpdGxl
ID0gV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcudGl0bGVGb3JQb3BvdmVyKFdlYkluc3BlY3Rv
ci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5WYXJpYWJsZSwgY2FuZGlkYXRlLmV4cHJlc3Npb24p
OworICAgICAgICAgICAgICAgIHRoaXMuc2hvd1BvcG92ZXJGb3JUeXBlcyh0eXBlcywgbnVsbCwg
cG9wb3ZlclRpdGxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFJ1bnRp
bWVBZ2VudC5nZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoYWxsUmVxdWVzdHMs
IGhhbmRsZXIuYmluZCh0aGlzKSk7CisgICAgfSwKKworICAgIF9zaG93UG9wb3ZlcjogZnVuY3Rp
b24oY29udGVudCwgYm91bmRzKQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy50
b2tlblRyYWNraW5nQ29udHJvbGxlci5jYW5kaWRhdGUpOworICAgICAgICBjb25zb2xlLmFzc2Vy
dCh0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZSB8fCBib3VuZHMpOwogCisg
ICAgICAgIHZhciBzaG91bGRIaWdobGlnaHRSYW5nZSA9IGZhbHNlOwogICAgICAgICB2YXIgY2Fu
ZGlkYXRlID0gdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5jYW5kaWRhdGU7Ci0gICAgICAg
IGlmICghY2FuZGlkYXRlKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBJZiBib3Vu
ZHMgaXMgZmFsc2V5LCB0aGlzIGlzIGEgcG9wb3ZlciBpbnRyb2R1Y2VkIGZyb20gYSBob3ZlciBl
dmVudC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGlzIGlzIGNhbGxlZCBmcm9tIFR5cGVUb2tl
bkFubm90YXRvci4KKyAgICAgICAgaWYgKCFib3VuZHMpIHsKKyAgICAgICAgICAgIGlmICghY2Fu
ZGlkYXRlKQorICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBjb250ZW50LmNsYXNz
TGlzdC5hZGQoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLlBvcG92ZXJEZWJ1Z2dl
ckNvbnRlbnRTdHlsZUNsYXNzTmFtZSk7CisgICAgICAgICAgICB2YXIgcmVjdHMgPSB0aGlzLnJl
Y3RzRm9yUmFuZ2UoY2FuZGlkYXRlLmhvdmVyZWRUb2tlblJhbmdlKTsKKyAgICAgICAgICAgIGJv
dW5kcyA9IFdlYkluc3BlY3Rvci5SZWN0LnVuaW9uT2ZSZWN0cyhyZWN0cyk7CisKKyAgICAgICAg
ICAgIHNob3VsZEhpZ2hsaWdodFJhbmdlID0gdHJ1ZTsKKyAgICAgICAgfQogCi0gICAgICAgIHZh
ciByZWN0cyA9IHRoaXMucmVjdHNGb3JSYW5nZShjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2Up
OwotICAgICAgICB2YXIgYm91bmRzID0gV2ViSW5zcGVjdG9yLlJlY3QudW5pb25PZlJlY3RzKHJl
Y3RzKTsKIAotICAgICAgICB0aGlzLl9wb3BvdmVyID0gdGhpcy5fcG9wb3ZlciB8fCBuZXcgV2Vi
SW5zcGVjdG9yLlBvcG92ZXIodGhpcyk7CisgICAgICAgIGNvbnRlbnQuY2xhc3NMaXN0LmFkZChX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuUG9wb3ZlckRlYnVnZ2VyQ29udGVudFN0
eWxlQ2xhc3NOYW1lKTsKKworICAgICAgICBpZiAodGhpcy5fcG9wb3ZlcikKKyAgICAgICAgICAg
IHRoaXMuX2Rpc21pc3NQb3BvdmVyKCk7CisgICAgICAgIHRoaXMuX3BvcG92ZXIgPSBuZXcgV2Vi
SW5zcGVjdG9yLlBvcG92ZXIodGhpcyk7CiAgICAgICAgIHRoaXMuX3BvcG92ZXIuY29udGVudCA9
IGNvbnRlbnQ7CiAgICAgICAgIHRoaXMuX3BvcG92ZXIucHJlc2VudChib3VuZHMucGFkKDUpLCBb
V2ViSW5zcGVjdG9yLlJlY3RFZGdlLk1JTl9ZLCBXZWJJbnNwZWN0b3IuUmVjdEVkZ2UuTUFYX1ks
IFdlYkluc3BlY3Rvci5SZWN0RWRnZS5NQVhfWF0pOwogCi0gICAgICAgIHRoaXMuX3RyYWNrUG9w
b3ZlckV2ZW50cygpOworICAgICAgICAvLyBXZSBuZWVkIHRvIGhpZ2hsaWdodCB0aGUgcmFuZ2Ug
YWZ0ZXIgY3JlYXRpbmcgdGhlIG5ldyBwb3BvdmVyIGJlY2F1c2UgZGlzbWlzc2luZyB0aGUgb2xk
IHBvcG92ZXIgd2lsbCByZW1vdmUgdGhlIGN1cnJlbnQgaGlnaGxpZ2h0LgorICAgICAgICBpZiAo
c2hvdWxkSGlnaGxpZ2h0UmFuZ2UpCisgICAgICAgICAgICB0aGlzLnRva2VuVHJhY2tpbmdDb250
cm9sbGVyLmhpZ2hsaWdodFJhbmdlKGNhbmRpZGF0ZS5leHByZXNzaW9uUmFuZ2UpOwogCi0gICAg
ICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuaGlnaGxpZ2h0UmFuZ2UoY2FuZGlkYXRl
LmV4cHJlc3Npb25SYW5nZSk7CisgICAgICAgIHRoaXMuX3RyYWNrUG9wb3ZlckV2ZW50cygpOwog
ICAgIH0sCiAKICAgICBfc2hvd1BvcG92ZXJGb3JGdW5jdGlvbjogZnVuY3Rpb24oZGF0YSkKQEAg
LTEzODAsNiArMTUxMiw2MCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJv
dG90CiAgICAgICAgIHRoaXMuX2lnbm9yZUNvbnRlbnREaWRDaGFuZ2UtLTsKIAogICAgICAgICBk
ZWxldGUgdGhpcy5fZWRpdGluZ0NvbnRyb2xsZXI7CisgICAgfSwKKworICAgIF9tYWtlVHlwZVRv
a2VuQW5ub3RhdG9yOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICAvLyBNYWtlIHN1cmUgSmF2
YVNjcmlwdENvcmUgc3VwcG9ydHMgdHlwZSBwcm9maWxpbmcuCisgICAgICAgIGlmICghUnVudGlt
ZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cykKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB2YXIgc2NyaXB0ID0gbnVsbDsKKyAgICAgICAgLy8gRklYTUU6
IFRoaXMgbmVlZHMgdG8gbWUgbW9kaWZpZWQgdG8gd29yayB3aXRoIEhUTUwgZmlsZXMgd2l0aCBp
bmxpbmUgc2NyaXB0IHRhZ3MuCisgICAgICAgIGlmICh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNl
b2YgV2ViSW5zcGVjdG9yLlNjcmlwdCkKKyAgICAgICAgICAgIHNjcmlwdCA9IHRoaXMuX3NvdXJj
ZUNvZGU7CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJ
bnNwZWN0b3IuUmVzb3VyY2UgJiYgdGhpcy5fc291cmNlQ29kZS50eXBlID09PSBXZWJJbnNwZWN0
b3IuUmVzb3VyY2UuVHlwZS5TY3JpcHQgJiYgdGhpcy5fc291cmNlQ29kZS5zY3JpcHRzLmxlbmd0
aCkKKyAgICAgICAgICAgIHNjcmlwdCA9IHRoaXMuX3NvdXJjZUNvZGUuc2NyaXB0c1swXTsKKwor
ICAgICAgICBpZiAoIXNjcmlwdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlz
Ll90eXBlVG9rZW5Bbm5vdGF0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRv
cih0aGlzLCBzY3JpcHQpOworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0
VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZSkgeworICAgICAgICAgICAgdGhpcy5fdHlwZVRv
a2VuQW5ub3RhdG9yLnJlc2V0KCk7CisgICAgICAgICAgICB0aGlzLl9lbmFibGVTY3JvbGxFdmVu
dHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfZW5h
YmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICAvLyBQYXVzZSB1cGRhdGluZyB0eXBlIHRva2VucyB3aGlsZSBzY3JvbGxpbmcgdG8g
cHJldmVudCBmcmFtZSBsb3NzLgorICAgICAgICB0aGlzLmFkZFNjcm9sbEhhbmRsZXIodGhpcy5f
bWFrZVR5cGVUb2tlblNjcm9sbEV2ZW50SGFuZGxlcigpKTsKKyAgICB9LAorCisgICAgX2Rpc2Fi
bGVTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3I6ZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdGhpcy5yZW1vdmVTY3JvbGxIYW5kbGVyKCk7CisgICAgfSwKKworICAgIF9tYWtlVHlw
ZVRva2VuU2Nyb2xsRXZlbnRIYW5kbGVyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIg
dHlwZVRva2VuQW5ub3RhdG9yID0gdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yOworICAgICAgICB2
YXIgdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICBmdW5jdGlvbiBzY3JvbGxIYW5k
bGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRpbWVvdXRJZGVudGlmaWVyKQorICAg
ICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWRlbnRpZmllcik7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgdHlwZVRva2VuQW5ub3RhdG9yLnBhdXNlKCk7CisKKyAg
ICAgICAgICAgIHRpbWVvdXRJZGVudGlmaWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICB0aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAgICAgICAgICAg
dHlwZVRva2VuQW5ub3RhdG9yLnJlc3VtZSgpOworICAgICAgICAgICAgfSwgV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1cmF0aW9uVG9VcGRhdGVUeXBlVG9rZW5zQWZ0ZXJTY3Jv
bGxpbmcpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNjcm9sbEhhbmRsZXI7CiAgICAg
fQogfTsKIApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
VGV4dEVkaXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UZXh0RWRpdG9yLmpzCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0RWRpdG9yLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw2ICs2Niw4IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yID0gZnVuY3Rp
b24oZWxlbWUKICAgICB0aGlzLl9mb3JtYXR0ZWQgPSBmYWxzZTsKICAgICB0aGlzLl9mb3JtYXR0
ZXJTb3VyY2VNYXAgPSBudWxsOwogCisgICAgdGhpcy5fY29kZU1pcnJvclNjcm9sbEhhbmRsZXIg
PSBudWxsOworCiAgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZSB8fCBudWxsOwogfTsKIApA
QCAtMTY3LDcgKzE2OSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB0aGlzLl9pZ25vcmVDb2RlTWlycm9yQ29u
dGVudERpZENoYW5nZUV2ZW50Kys7Ci0gICAgICAgIHRoaXMuX3ByZXR0eVByaW50KGZvcm1hdHRl
ZCk7CisgICAgICAgIHRoaXMucHJldHR5UHJpbnQoZm9ybWF0dGVkKTsKICAgICAgICAgdGhpcy5f
aWdub3JlQ29kZU1pcnJvckNvbnRlbnREaWRDaGFuZ2VFdmVudC0tOwogICAgICAgICBjb25zb2xl
LmFzc2VydCh0aGlzLl9pZ25vcmVDb2RlTWlycm9yQ29udGVudERpZENoYW5nZUV2ZW50ID49IDAp
OwogCkBAIC0xOTgsNiArMjAwLDExIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuaGFzRm9ybWF0dGVyKCk7CiAgICAgfSwKIAorICAg
IGNhblNob3dUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9LAorCiAgICAgZ2V0IHNlbGVjdGVkVGV4dFJhbmdlKCkKICAgICB7CiAg
ICAgICAgIHZhciBzdGFydCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKHRydWUpOwpAQCAt
NjM5LDYgKzY0NiwxODggQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewog
ICAgICAgICB9CiAgICAgfSwKIAorICAgIHZpc2libGVSYW5nZVN0YXJ0T2Zmc2V0OiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSBudWxsOworICAgICAgICB2YXIg
dmlzaWJsZVJhbmdlID0gdGhpcy5fY29kZU1pcnJvci5nZXRWaWV3cG9ydCgpOworCisgICAgICAg
IGlmICh0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXApCisgICAgICAgICAgICBzdGFydE9mZnNldCA9
IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0KE1hdGgu
bWF4KHZpc2libGVSYW5nZS5mcm9tIC0gMSwgMCksIDApOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzdGFydE9mZnNldCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9z
KHtsaW5lOiB2aXNpYmxlUmFuZ2UuZnJvbSwgY2g6IDB9KTsKKworICAgICAgICByZXR1cm4gc3Rh
cnRPZmZzZXQ7CisgICAgfSwKKworICAgIHZpc2libGVSYW5nZUVuZE9mZnNldDogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdmFyIGVuZE9mZnNldCA9IG51bGw7CisgICAgICAgIHZhciB2aXNp
YmxlUmFuZ2UgPSB0aGlzLl9jb2RlTWlycm9yLmdldFZpZXdwb3J0KCk7CisKKyAgICAgICAgaWYg
KHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcCkKKyAgICAgICAgICAgIGVuZE9mZnNldCA9IHRoaXMu
X2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0KHZpc2libGVSYW5n
ZS50byAtIDEsIDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlz
Ll9jb2RlTWlycm9yLmdldERvYygpLmluZGV4RnJvbVBvcyh7bGluZTogdmlzaWJsZVJhbmdlLnRv
LCBjaDogMH0pOworCisgICAgICAgIHJldHVybiBlbmRPZmZzZXQ7CisgICAgfSwKKworICAgIG9y
aWdpbmFsT2Zmc2V0VG9DdXJyZW50UG9zaXRpb246IGZ1bmN0aW9uKG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIHZhciBwb3NpdGlvbiA9IG51bGw7CisgICAgICAgIGlmICh0aGlzLl9mb3JtYXR0ZXJT
b3VyY2VNYXApIHsKKyAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNv
dXJjZU1hcC5vcmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQob2Zmc2V0KTsKKyAgICAgICAgICAg
IHBvc2l0aW9uID0ge2xpbmU6IGxvY2F0aW9uLmxpbmVOdW1iZXIsIGNoOiBsb2NhdGlvbi5jb2x1
bW5OdW1iZXJ9OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5f
Y29kZU1pcnJvci5nZXREb2MoKS5wb3NGcm9tSW5kZXgob2Zmc2V0KTsKKworICAgICAgICByZXR1
cm4gcG9zaXRpb247CisgICAgfSwKKworICAgIGN1cnJlbnRPZmZzZXRUb0N1cnJlbnRQb3NpdGlv
bjogZnVuY3Rpb24ob2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVNaXJy
b3IuZ2V0RG9jKCkucG9zRnJvbUluZGV4KG9mZnNldCk7CisgICAgfSwKKworICAgIGN1cnJlbnRQ
b3NpdGlvblRvT3JpZ2luYWxPZmZzZXQ6IGZ1bmN0aW9uKHBvc2l0aW9uKQorICAgIHsKKyAgICAg
ICAgdmFyIG9mZnNldCA9IG51bGw7CisgICAgICAgIGlmICh0aGlzLl9mb3JtYXR0ZXJTb3VyY2VN
YXApCisgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0
dGVkVG9PcmlnaW5hbE9mZnNldChwb3NpdGlvbi5saW5lLCBwb3NpdGlvbi5jaCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIu
X2NvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9zKHBvc2l0aW9uKTsKKworICAgICAgICBy
ZXR1cm4gb2Zmc2V0OworICAgIH0sCisKKyAgICBjdXJyZW50UG9zaXRpb25Ub0N1cnJlbnRPZmZz
ZXQ6IGZ1bmN0aW9uKHBvc2l0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVN
aXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9zKHBvc2l0aW9uKTsKKyAgICB9LAorCisgICAgc2V0
VW5pcXVlQm9va21hcms6IGZ1bmN0aW9uKHBvc2l0aW9uLCBpbmxpbmVFbGVtZW50KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVNaXJyb3Iuc2V0VW5pcXVlQm9va21hcmsocG9zaXRp
b24sIHt3aWRnZXQ6IGlubGluZUVsZW1lbnR9KTsKKyAgICB9LAorCisgICAgYWRkU2Nyb2xsSGFu
ZGxlcjogZnVuY3Rpb24oaGFuZGxlcikKKyAgICB7CisgICAgICAgIHRoaXMucmVtb3ZlU2Nyb2xs
SGFuZGxlcigpOworCisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3JTY3JvbGxIYW5kbGVyID0gaGFu
ZGxlcjsKKyAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vbigic2Nyb2xsIiwgdGhpcy5fY29kZU1p
cnJvclNjcm9sbEhhbmRsZXIpOworICAgIH0sCisKKyAgICByZW1vdmVTY3JvbGxIYW5kbGVyOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fY29kZU1pcnJvclNjcm9sbEhhbmRs
ZXIpIHsKKyAgICAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub2ZmKCJzY3JvbGwiLCB0aGlzLl9j
b2RlTWlycm9yU2Nyb2xsSGFuZGxlcik7CisgICAgICAgICAgICB0aGlzLl9jb2RlTWlycm9yU2Ny
b2xsSGFuZGxlciA9IG51bGw7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gUHJvdGVjdGVk
CisKKyAgICBwcmV0dHlQcmludDogZnVuY3Rpb24ocHJldHR5KQorICAgIHsKKyAgICAgICAgZnVu
Y3Rpb24gcHJldHR5UHJpbnRBbmRVcGRhdGVFZGl0b3IoKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zdCBzdGFydCA9IHtsaW5lOiAwLCBjaDogMH07CisgICAgICAgICAgICBjb25zdCBlbmQg
PSB7bGluZTogdGhpcy5fY29kZU1pcnJvci5saW5lQ291bnQoKSAtIDF9OworCisgICAgICAgICAg
ICB2YXIgb2xkU2VsZWN0aW9uQW5jaG9yID0gdGhpcy5fY29kZU1pcnJvci5nZXRDdXJzb3IoImFu
Y2hvciIpOworICAgICAgICAgICAgdmFyIG9sZFNlbGVjdGlvbkhlYWQgPSB0aGlzLl9jb2RlTWly
cm9yLmdldEN1cnNvcigiaGVhZCIpOworICAgICAgICAgICAgdmFyIG5ld1NlbGVjdGlvbkFuY2hv
ciwgbmV3U2VsZWN0aW9uSGVhZDsKKyAgICAgICAgICAgIHZhciBuZXdFeGVjdXRpb25Mb2NhdGlv
biA9IG51bGw7CisKKyAgICAgICAgICAgIGlmIChwcmV0dHkpIHsKKyAgICAgICAgICAgICAgICAv
LyA8cmRhcjovL3Byb2JsZW0vMTA1OTM5NDg+IFByb3ZpZGUgYSB3YXkgdG8gY2hhbmdlIHRoZSB0
YWIgd2lkdGggaW4gdGhlIFdlYiBJbnNwZWN0b3IKKyAgICAgICAgICAgICAgICBjb25zdCBpbmRl
bnRTdHJpbmcgPSAiICAgICI7CisgICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsTGluZUVuZGlu
Z3MgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgZm9ybWF0dGVkTGluZUVuZGluZ3MgPSBbXTsK
KyAgICAgICAgICAgICAgICB2YXIgbWFwcGluZyA9IHtvcmlnaW5hbDogWzBdLCBmb3JtYXR0ZWQ6
IFswXX07CisgICAgICAgICAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgRm9ybWF0dGVyQ29udGVu
dEJ1aWxkZXIobWFwcGluZywgb3JpZ2luYWxMaW5lRW5kaW5ncywgZm9ybWF0dGVkTGluZUVuZGlu
Z3MsIDAsIDAsIGluZGVudFN0cmluZyk7CisgICAgICAgICAgICAgICAgdmFyIGZvcm1hdHRlciA9
IG5ldyBGb3JtYXR0ZXIodGhpcy5fY29kZU1pcnJvciwgYnVpbGRlcik7CisgICAgICAgICAgICAg
ICAgZm9ybWF0dGVyLmZvcm1hdChzdGFydCwgZW5kKTsKKworICAgICAgICAgICAgICAgIHRoaXMu
X2Zvcm1hdHRlclNvdXJjZU1hcCA9IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAuZnJv
bUJ1aWxkZXIoYnVpbGRlcik7CisKKyAgICAgICAgICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnNl
dFZhbHVlKGJ1aWxkZXIuZm9ybWF0dGVkQ29udGVudCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fcG9zaXRpb25Ub1JldmVhbCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UmV2
ZWFsUG9zaXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zvcm1hdHRl
ZCh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsLmxpbmVOdW1iZXIsIHRoaXMuX3Bvc2l0aW9uVG9SZXZl
YWwuY29sdW1uTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25Ub1Jl
dmVhbCA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBvc2l0aW9uKG5ld1JldmVhbFBvc2l0
aW9uLmxpbmVOdW1iZXIsIG5ld1JldmVhbFBvc2l0aW9uLmNvbHVtbk51bWJlcik7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydCA9
IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX3RleHRS
YW5nZVRvU2VsZWN0LnN0YXJ0TGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRDb2x1
bW4pOworICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kID0g
dGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQodGhpcy5fdGV4dFJh
bmdlVG9TZWxlY3QuZW5kTGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QuZW5kQ29sdW1uKTsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QgPSBuZXcgV2ViSW5z
cGVjdG9yLlRleHRSYW5nZShtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5saW5lTnVtYmVyLCBt
YXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5jb2x1bW5OdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVj
dGlvbkVuZC5saW5lTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQuY29sdW1uTnVtYmVy
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHRoaXMu
X2V4ZWN1dGlvbkxpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KCFpc05hTih0aGlzLl9leGVjdXRpb25Db2x1bW5OdW1iZXIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbmV3RXhlY3V0aW9uTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3Jp
Z2luYWxUb0Zvcm1hdHRlZCh0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyLCB0aGlzLl9leGVjdXRp
b25Db2x1bW5OdW1iZXIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZh
ciBtYXBwZWRBbmNob3JMb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5h
bFRvRm9ybWF0dGVkKG9sZFNlbGVjdGlvbkFuY2hvci5saW5lLCBvbGRTZWxlY3Rpb25BbmNob3Iu
Y2gpOworICAgICAgICAgICAgICAgIHZhciBtYXBwZWRIZWFkTG9jYXRpb24gPSB0aGlzLl9mb3Jt
YXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zvcm1hdHRlZChvbGRTZWxlY3Rpb25IZWFkLmxpbmUs
IG9sZFNlbGVjdGlvbkhlYWQuY2gpOworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkFuY2hv
ciA9IHtsaW5lOm1hcHBlZEFuY2hvckxvY2F0aW9uLmxpbmVOdW1iZXIsIGNoOm1hcHBlZEFuY2hv
ckxvY2F0aW9uLmNvbHVtbk51bWJlcn07CisgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uSGVh
ZCA9IHtsaW5lOm1hcHBlZEhlYWRMb2NhdGlvbi5saW5lTnVtYmVyLCBjaDptYXBwZWRIZWFkTG9j
YXRpb24uY29sdW1uTnVtYmVyfTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fY29kZU1pcnJvci51bmRvKCk7CisKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5f
cG9zaXRpb25Ub1JldmVhbCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UmV2ZWFsUG9z
aXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbCh0aGlz
Ll9wb3NpdGlvblRvUmV2ZWFsLmxpbmVOdW1iZXIsIHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwuY29s
dW1uTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25Ub1JldmVhbCA9
IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBvc2l0aW9uKG5ld1JldmVhbFBvc2l0aW9uLmxp
bmVOdW1iZXIsIG5ld1JldmVhbFBvc2l0aW9uLmNvbHVtbk51bWJlcik7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydCA9IHRoaXMu
X2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKHRoaXMuX3RleHRSYW5nZVRv
U2VsZWN0LnN0YXJ0TGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRDb2x1bW4pOwor
ICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kID0gdGhpcy5f
Zm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwodGhpcy5fdGV4dFJhbmdlVG9T
ZWxlY3QuZW5kTGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QuZW5kQ29sdW1uKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QgPSBuZXcgV2ViSW5zcGVjdG9y
LlRleHRSYW5nZShtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5saW5lTnVtYmVyLCBtYXBwZWRS
ZXZlYWxTZWxlY3Rpb25TdGFydC5jb2x1bW5OdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvbkVu
ZC5saW5lTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQuY29sdW1uTnVtYmVyKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHRoaXMuX2V4ZWN1
dGlvbkxpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFp
c05hTih0aGlzLl9leGVjdXRpb25Db2x1bW5OdW1iZXIpKTsKKyAgICAgICAgICAgICAgICAgICAg
bmV3RXhlY3V0aW9uTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVk
VG9PcmlnaW5hbCh0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyLCB0aGlzLl9leGVjdXRpb25Db2x1
bW5OdW1iZXIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciBtYXBw
ZWRBbmNob3JMb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09y
aWdpbmFsKG9sZFNlbGVjdGlvbkFuY2hvci5saW5lLCBvbGRTZWxlY3Rpb25BbmNob3IuY2gpOwor
ICAgICAgICAgICAgICAgIHZhciBtYXBwZWRIZWFkTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJT
b3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbChvbGRTZWxlY3Rpb25IZWFkLmxpbmUsIG9sZFNl
bGVjdGlvbkhlYWQuY2gpOworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkFuY2hvciA9IHts
aW5lOm1hcHBlZEFuY2hvckxvY2F0aW9uLmxpbmVOdW1iZXIsIGNoOm1hcHBlZEFuY2hvckxvY2F0
aW9uLmNvbHVtbk51bWJlcn07CisgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uSGVhZCA9IHts
aW5lOm1hcHBlZEhlYWRMb2NhdGlvbi5saW5lTnVtYmVyLCBjaDptYXBwZWRIZWFkTG9jYXRpb24u
Y29sdW1uTnVtYmVyfTsKKworICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1h
cCA9IG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuX3Njcm9sbEludG9W
aWV3Q2VudGVyZWQobmV3U2VsZWN0aW9uQW5jaG9yKTsKKyAgICAgICAgICAgIHRoaXMuX2NvZGVN
aXJyb3Iuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbkFuY2hvciwgbmV3U2VsZWN0aW9uSGVhZCk7
CisKKyAgICAgICAgICAgIGlmIChuZXdFeGVjdXRpb25Mb2NhdGlvbikgeworICAgICAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLl9leGVjdXRpb25MaW5lSGFuZGxlOworICAgICAgICAgICAgICAgIHRo
aXMuZXhlY3V0aW9uQ29sdW1uTnVtYmVyID0gbmV3RXhlY3V0aW9uTG9jYXRpb24uY29sdW1uTnVt
YmVyOworICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uTGluZU51bWJlciA9IG5ld0V4ZWN1
dGlvbkxvY2F0aW9uLmxpbmVOdW1iZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMTMxMjk5NTU+IEZpbmRCYW5uZXI6IE5ldyBzZWFyY2hl
cyBzaG91bGQgbm90IGxvc2Ugc2VhcmNoIHBvc2l0aW9uIChzdGFydCBmcm9tIGN1cnJlbnQgc2Vs
ZWN0aW9uL2NhcmV0KQorICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNlYXJjaFF1ZXJ5KSB7
CisgICAgICAgICAgICAgICAgdmFyIHNlYXJjaFF1ZXJ5ID0gdGhpcy5jdXJyZW50U2VhcmNoUXVl
cnk7CisgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hDbGVhcmVkKCk7CisgICAgICAgICAgICAg
ICAgLy8gU2V0IHRpbWVvdXQgc28gdGhhdCB0aGlzIGhhcHBlbnMgYWZ0ZXIgdGhlIGN1cnJlbnQg
Q29kZU1pcnJvciBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgLy8gVGhlIGVkaXRvciBoYXMg
dG8gdXBkYXRlIGZvciB0aGUgdmFsdWUgYW5kIHNlbGVjdGlvbiBjaGFuZ2VzLgorICAgICAgICAg
ICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24ocXVlcnkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5wZXJmb3JtU2VhcmNoKHNlYXJjaFF1ZXJ5KTsKKyAgICAgICAgICAgICAgICB9LmJpbmQo
dGhpcyksIDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGhpcy5fZGVsZWdh
dGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLnRleHRFZGl0b3JVcGRhdGVkRm9ybWF0dGluZyA9
PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS50ZXh0RWRpdG9y
VXBkYXRlZEZvcm1hdHRpbmcodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9jb2Rl
TWlycm9yLm9wZXJhdGlvbihwcmV0dHlQcmludEFuZFVwZGF0ZUVkaXRvci5iaW5kKHRoaXMpKTsK
KyAgICB9LAorCiAgICAgLy8gUHJpdmF0ZQogCiAgICAgX2NvbnRlbnRDaGFuZ2VkOiBmdW5jdGlv
bihjb2RlTWlycm9yLCBjaGFuZ2UpCkBAIC0xMjM1LDEwNiArMTQyNCw2IEBAIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGxpbmVIZWlnaHQgPSBNYXRo
LmNlaWwodGhpcy5fY29kZU1pcnJvci5kZWZhdWx0VGV4dEhlaWdodCgpKTsKICAgICAgICAgdmFy
IG1hcmdpbiA9IE1hdGguZmxvb3IoKHNjcm9sbEluZm8uY2xpZW50SGVpZ2h0IC0gbGluZUhlaWdo
dCkgLyAyKTsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zY3JvbGxJbnRvVmlldyhwb3NpdGlv
biwgbWFyZ2luKTsKLSAgICB9LAotCi0gICAgX3ByZXR0eVByaW50OiBmdW5jdGlvbihwcmV0dHkp
Ci0gICAgewotICAgICAgICBmdW5jdGlvbiBwcmV0dHlQcmludEFuZFVwZGF0ZUVkaXRvcigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0ge2xpbmU6IDAsIGNoOiAwfTsKLSAg
ICAgICAgICAgIGNvbnN0IGVuZCA9IHtsaW5lOiB0aGlzLl9jb2RlTWlycm9yLmxpbmVDb3VudCgp
IC0gMX07Ci0KLSAgICAgICAgICAgIHZhciBvbGRTZWxlY3Rpb25BbmNob3IgPSB0aGlzLl9jb2Rl
TWlycm9yLmdldEN1cnNvcigiYW5jaG9yIik7Ci0gICAgICAgICAgICB2YXIgb2xkU2VsZWN0aW9u
SGVhZCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKCJoZWFkIik7Ci0gICAgICAgICAgICB2
YXIgbmV3U2VsZWN0aW9uQW5jaG9yLCBuZXdTZWxlY3Rpb25IZWFkOwotICAgICAgICAgICAgdmFy
IG5ld0V4ZWN1dGlvbkxvY2F0aW9uID0gbnVsbDsKLQotICAgICAgICAgICAgaWYgKHByZXR0eSkg
ewotICAgICAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMDU5Mzk0OD4gUHJvdmlkZSBh
IHdheSB0byBjaGFuZ2UgdGhlIHRhYiB3aWR0aCBpbiB0aGUgV2ViIEluc3BlY3RvcgotICAgICAg
ICAgICAgICAgIGNvbnN0IGluZGVudFN0cmluZyA9ICIgICAgIjsKLSAgICAgICAgICAgICAgICB2
YXIgb3JpZ2luYWxMaW5lRW5kaW5ncyA9IFtdOwotICAgICAgICAgICAgICAgIHZhciBmb3JtYXR0
ZWRMaW5lRW5kaW5ncyA9IFtdOwotICAgICAgICAgICAgICAgIHZhciBtYXBwaW5nID0ge29yaWdp
bmFsOiBbMF0sIGZvcm1hdHRlZDogWzBdfTsKLSAgICAgICAgICAgICAgICB2YXIgYnVpbGRlciA9
IG5ldyBGb3JtYXR0ZXJDb250ZW50QnVpbGRlcihtYXBwaW5nLCBvcmlnaW5hbExpbmVFbmRpbmdz
LCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywgMCwgMCwgaW5kZW50U3RyaW5nKTsKLSAgICAgICAgICAg
ICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih0aGlzLl9jb2RlTWlycm9yLCBidWls
ZGVyKTsKLSAgICAgICAgICAgICAgICBmb3JtYXR0ZXIuZm9ybWF0KHN0YXJ0LCBlbmQpOwotCi0g
ICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwID0gV2ViSW5zcGVjdG9yLkZv
cm1hdHRlclNvdXJjZU1hcC5mcm9tQnVpbGRlcihidWlsZGVyKTsKLQotICAgICAgICAgICAgICAg
IHRoaXMuX2NvZGVNaXJyb3Iuc2V0VmFsdWUoYnVpbGRlci5mb3JtYXR0ZWRDb250ZW50KTsKLQot
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBuZXdSZXZlYWxQb3NpdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1h
cC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwubGluZU51bWJlciwg
dGhpcy5fcG9zaXRpb25Ub1JldmVhbC5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9wb3NpdGlvblRvUmV2ZWFsID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUG9z
aXRpb24obmV3UmV2ZWFsUG9zaXRpb24ubGluZU51bWJlciwgbmV3UmV2ZWFsUG9zaXRpb24uY29s
dW1uTnVtYmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhp
cy5fdGV4dFJhbmdlVG9TZWxlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1hcHBlZFJl
dmVhbFNlbGVjdGlvblN0YXJ0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9G
b3JtYXR0ZWQodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRMaW5lLCB0aGlzLl90ZXh0UmFu
Z2VUb1NlbGVjdC5zdGFydENvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRS
ZXZlYWxTZWxlY3Rpb25FbmQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zv
cm1hdHRlZCh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5lbmRMaW5lLCB0aGlzLl90ZXh0UmFuZ2VU
b1NlbGVjdC5lbmRDb2x1bW4pOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0UmFuZ2VU
b1NlbGVjdCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKG1hcHBlZFJldmVhbFNlbGVjdGlv
blN0YXJ0LmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0LmNvbHVtbk51bWJl
ciwgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kLmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVj
dGlvbkVuZC5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICghaXNOYU4odGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcikpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29uc29sZS5hc3NlcnQoIWlzTmFOKHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJl
cikpOwotICAgICAgICAgICAgICAgICAgICBuZXdFeGVjdXRpb25Mb2NhdGlvbiA9IHRoaXMuX2Zv
cm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX2V4ZWN1dGlvbkxpbmVO
dW1iZXIsIHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJlcik7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgdmFyIG1hcHBlZEFuY2hvckxvY2F0aW9uID0gdGhpcy5fZm9ybWF0
dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQob2xkU2VsZWN0aW9uQW5jaG9yLmxpbmUs
IG9sZFNlbGVjdGlvbkFuY2hvci5jaCk7Ci0gICAgICAgICAgICAgICAgdmFyIG1hcHBlZEhlYWRM
b2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKG9s
ZFNlbGVjdGlvbkhlYWQubGluZSwgb2xkU2VsZWN0aW9uSGVhZC5jaCk7Ci0gICAgICAgICAgICAg
ICAgbmV3U2VsZWN0aW9uQW5jaG9yID0ge2xpbmU6bWFwcGVkQW5jaG9yTG9jYXRpb24ubGluZU51
bWJlciwgY2g6bWFwcGVkQW5jaG9yTG9jYXRpb24uY29sdW1uTnVtYmVyfTsKLSAgICAgICAgICAg
ICAgICBuZXdTZWxlY3Rpb25IZWFkID0ge2xpbmU6bWFwcGVkSGVhZExvY2F0aW9uLmxpbmVOdW1i
ZXIsIGNoOm1hcHBlZEhlYWRMb2NhdGlvbi5jb2x1bW5OdW1iZXJ9OwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnVuZG8oKTsKLQotICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBuZXdSZXZlYWxQb3NpdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3Jt
YXR0ZWRUb09yaWdpbmFsKHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwubGluZU51bWJlciwgdGhpcy5f
cG9zaXRpb25Ub1JldmVhbC5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9wb3NpdGlvblRvUmV2ZWFsID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUG9zaXRpb24o
bmV3UmV2ZWFsUG9zaXRpb24ubGluZU51bWJlciwgbmV3UmV2ZWFsUG9zaXRpb24uY29sdW1uTnVt
YmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGV4
dFJhbmdlVG9TZWxlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1hcHBlZFJldmVhbFNl
bGVjdGlvblN0YXJ0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2lu
YWwodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRMaW5lLCB0aGlzLl90ZXh0UmFuZ2VUb1Nl
bGVjdC5zdGFydENvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRSZXZlYWxT
ZWxlY3Rpb25FbmQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5h
bCh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5lbmRMaW5lLCB0aGlzLl90ZXh0UmFuZ2VUb1NlbGVj
dC5lbmRDb2x1bW4pOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0UmFuZ2VUb1NlbGVj
dCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0
LmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0LmNvbHVtbk51bWJlciwgbWFw
cGVkUmV2ZWFsU2VsZWN0aW9uRW5kLmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvbkVu
ZC5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
ICghaXNOYU4odGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcikpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc29sZS5hc3NlcnQoIWlzTmFOKHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJlcikpOwot
ICAgICAgICAgICAgICAgICAgICBuZXdFeGVjdXRpb25Mb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRl
clNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIs
IHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJlcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgdmFyIG1hcHBlZEFuY2hvckxvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291
cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwob2xkU2VsZWN0aW9uQW5jaG9yLmxpbmUsIG9sZFNl
bGVjdGlvbkFuY2hvci5jaCk7Ci0gICAgICAgICAgICAgICAgdmFyIG1hcHBlZEhlYWRMb2NhdGlv
biA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKG9sZFNlbGVj
dGlvbkhlYWQubGluZSwgb2xkU2VsZWN0aW9uSGVhZC5jaCk7Ci0gICAgICAgICAgICAgICAgbmV3
U2VsZWN0aW9uQW5jaG9yID0ge2xpbmU6bWFwcGVkQW5jaG9yTG9jYXRpb24ubGluZU51bWJlciwg
Y2g6bWFwcGVkQW5jaG9yTG9jYXRpb24uY29sdW1uTnVtYmVyfTsKLSAgICAgICAgICAgICAgICBu
ZXdTZWxlY3Rpb25IZWFkID0ge2xpbmU6bWFwcGVkSGVhZExvY2F0aW9uLmxpbmVOdW1iZXIsIGNo
Om1hcHBlZEhlYWRMb2NhdGlvbi5jb2x1bW5OdW1iZXJ9OwotCi0gICAgICAgICAgICAgICAgdGhp
cy5fZm9ybWF0dGVyU291cmNlTWFwID0gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgdGhpcy5fc2Nyb2xsSW50b1ZpZXdDZW50ZXJlZChuZXdTZWxlY3Rpb25BbmNob3IpOwotICAg
ICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uQW5jaG9y
LCBuZXdTZWxlY3Rpb25IZWFkKTsKLQotICAgICAgICAgICAgaWYgKG5ld0V4ZWN1dGlvbkxvY2F0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2V4ZWN1dGlvbkxpbmVIYW5kbGU7
Ci0gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRpb25Db2x1bW5OdW1iZXIgPSBuZXdFeGVjdXRp
b25Mb2NhdGlvbi5jb2x1bW5OdW1iZXI7Ci0gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRpb25M
aW5lTnVtYmVyID0gbmV3RXhlY3V0aW9uTG9jYXRpb24ubGluZU51bWJlcjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8xMzEyOTk1NT4gRmlu
ZEJhbm5lcjogTmV3IHNlYXJjaGVzIHNob3VsZCBub3QgbG9zZSBzZWFyY2ggcG9zaXRpb24gKHN0
YXJ0IGZyb20gY3VycmVudCBzZWxlY3Rpb24vY2FyZXQpCi0gICAgICAgICAgICBpZiAodGhpcy5j
dXJyZW50U2VhcmNoUXVlcnkpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2VhcmNoUXVlcnkgPSB0
aGlzLmN1cnJlbnRTZWFyY2hRdWVyeTsKLSAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaENsZWFy
ZWQoKTsKLSAgICAgICAgICAgICAgICAvLyBTZXQgdGltZW91dCBzbyB0aGF0IHRoaXMgaGFwcGVu
cyBhZnRlciB0aGUgY3VycmVudCBDb2RlTWlycm9yIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAg
ICAvLyBUaGUgZWRpdG9yIGhhcyB0byB1cGRhdGUgZm9yIHRoZSB2YWx1ZSBhbmQgc2VsZWN0aW9u
IGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbihxdWVyeSkgewot
ICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goc2VhcmNoUXVlcnkpOwotICAg
ICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhpcy5fZGVsZWdhdGUudGV4dEVkaXRv
clVwZGF0ZWRGb3JtYXR0aW5nID09PSAiZnVuY3Rpb24iKQotICAgICAgICAgICAgICAgIHRoaXMu
X2RlbGVnYXRlLnRleHRFZGl0b3JVcGRhdGVkRm9ybWF0dGluZyh0aGlzKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub3BlcmF0aW9uKHByZXR0eVByaW50QW5kVXBkYXRl
RWRpdG9yLmJpbmQodGhpcykpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRS
ZXNvdXJjZUNvbnRlbnRWaWV3LmpzCShyZXZpc2lvbiAxNzI4MzApCisrKyBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qcwko
d29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTYgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJj
ZUNvbnRlbnRWaWV3ID0gZgogICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0
ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLkFjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0oInByZXR0
eS1wcmludCIsIHRvb2xUaXAsIGFjdGl2YXRlZFRvb2xUaXAsIGN1cmxleUJyYWNlc0ltYWdlLnNy
YywgY3VybGV5QnJhY2VzSW1hZ2Uud2lkdGgsIGN1cmxleUJyYWNlc0ltYWdlLmhlaWdodCk7CiAg
ICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCB0aGlzLl90
b2dnbGVQcmV0dHlQcmludCwgdGhpcyk7CiAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZp
Z2F0aW9uSXRlbS5lbmFibGVkID0gZmFsc2U7IC8vIEVuYWJsZWQgd2hlbiB0aGUgdGV4dCBlZGl0
b3IgaXMgcG9wdWxhdGVkIHdpdGggY29udGVudC4KKworICAgIHZhciBzaG93VHlwZXNJbWFnZVNp
emUgPSAoV2ViSW5zcGVjdG9yLlBsYXRmb3JtLmlzTGVnYWN5TWFjT1MgPyAxNSA6IDE2KTsKKyAg
ICB2YXIgdG9vbFRpcFR5cGVzID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IHR5cGUgaW5m
b3JtYXRpb24iKTsKKyAgICB2YXIgYWN0aXZhdGVkVG9vbFRpcFR5cGVzID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJIaWRlIHR5cGUgaW5mb3JtYXRpb24iKTsKKyAgICB0aGlzLl9zaG93VHlwZXNC
dXR0b25OYXZpZ2F0aW9uSXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZp
Z2F0aW9uSXRlbSgic2hvdy10eXBlcyIsIHRvb2xUaXBUeXBlcywgCisgICAgICAgIGFjdGl2YXRl
ZFRvb2xUaXBUeXBlcywgIkltYWdlcy9OYXZpZ2F0aW9uSXRlbVR5cGVzLnN2ZyIsIHNob3dUeXBl
c0ltYWdlU2l6ZSwgc2hvd1R5cGVzSW1hZ2VTaXplKTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0
b25OYXZpZ2F0aW9uSXRlbS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CdXR0b25OYXZp
Z2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCB0aGlzLl90b2dnbGVUeXBlQW5ub3RhdGlvbnMsIHRo
aXMpOworICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSBm
YWxzZTsKKworICAgIFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNl
dHRpbmcuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU2V0dGluZy5FdmVudC5DaGFuZ2Vk
LCB0aGlzLl9zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmdDaGFuZ2VkLCB0aGlz
KTsKIH07CiAKIFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5TdHlsZUNsYXNz
TmFtZSA9ICJ0ZXh0IjsKQEAgLTYyLDcgKzcyLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJj
ZUNvbnRlbnRWaWV3LnBybwogCiAgICAgZ2V0IG5hdmlnYXRpb25JdGVtcygpCiAgICAgewotICAg
ICAgICByZXR1cm4gW3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW1dOworICAg
ICAgICByZXR1cm4gW3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0sIHRoaXMu
X3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtXTsKICAgICB9LAogCiAgICAgZ2V0IG1hbmFn
ZXNPd25Jc3N1ZXMoKQpAQCAtMjAwLDYgKzIxMCw4IEBAIFdlYkluc3BlY3Rvci5UZXh0UmVzb3Vy
Y2VDb250ZW50Vmlldy5wcm8KICAgICBfY29udGVudERpZFBvcHVsYXRlOiBmdW5jdGlvbihldmVu
dCkKICAgICB7CiAgICAgICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0u
ZW5hYmxlZCA9IHRoaXMuX3RleHRFZGl0b3IuY2FuQmVGb3JtYXR0ZWQoKTsKKyAgICAgICAgdGhp
cy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IHRoaXMuX3RleHRFZGl0
b3IuY2FuU2hvd1R5cGVBbm5vdGF0aW9ucygpOworICAgICAgICB0aGlzLl9zaG93VHlwZXNCdXR0
b25OYXZpZ2F0aW9uSXRlbS5hY3RpdmF0ZWQgPSBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRU
eXBlSW5mb3JtYXRpb25TZXR0aW5nLnZhbHVlOwogICAgIH0sCiAKICAgICBfdG9nZ2xlUHJldHR5
UHJpbnQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtMjA4LDYgKzIyMCwxNiBAQCBXZWJJbnNwZWN0b3Iu
VGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvCiAgICAgICAgIHRoaXMuX3RleHRFZGl0b3IuZm9y
bWF0dGVkID0gYWN0aXZhdGVkOwogICAgIH0sCiAKKyAgICBfdG9nZ2xlVHlwZUFubm90YXRpb25z
OiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IudG9nZ2xl
VHlwZUFubm90YXRpb25zKCk7CisgICAgfSwKKworICAgIF9zaG93SmF2YVNjcmlwdFR5cGVJbmZv
cm1hdGlvblNldHRpbmdDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHRo
aXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmFjdGl2YXRlZCA9IFdlYkluc3BlY3Rv
ci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWU7CisgICAgfSwKKwog
ICAgIF90ZXh0RWRpdG9yRm9ybWF0dGluZ0RpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCiAgICAg
ewogICAgICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLmFjdGl2YXRl
ZCA9IHRoaXMuX3RleHRFZGl0b3IuZm9ybWF0dGVkOwpJbmRleDogU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVQcm9w
ZXJ0aWVzU2VjdGlvbi5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVQcm9wZXJ0aWVzU2VjdGlvbi5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVy
dGllc1NlY3Rpb24gPSBmdW5jdGlvbih0eXBlcywgdGl0bGUsIHN1YnRpdGxlKQoreworICAgIHRo
aXMuZW1wdHlQbGFjZWhvbGRlciA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTm8gUHJvcGVydGll
cyIpOworICAgIHRoaXMudHlwZXMgPSB0eXBlczsKKworICAgIFdlYkluc3BlY3Rvci5Qcm9wZXJ0
aWVzU2VjdGlvbi5jYWxsKHRoaXMsIHRpdGxlLCBzdWJ0aXRsZSk7Cit9OworCitXZWJJbnNwZWN0
b3IuVHlwZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3Rvcjog
V2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbiwKKyAgICBfX3Byb3RvX186IFdlYklu
c3BlY3Rvci5Qcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUsCisKKyAgICBvbnBvcHVsYXRlOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5yZW1v
dmVDaGlsZHJlbigpOworCisgICAgICAgIHZhciBwcmltaXRpdmVUeXBlTmFtZXMgPSB0aGlzLnR5
cGVzLmdsb2JhbFByaW1pdGl2ZVR5cGVOYW1lcyB8fCB0aGlzLnR5cGVzLmxvY2FsUHJpbWl0aXZl
VHlwZU5hbWVzOworICAgICAgICB2YXIgc3RydWN0dXJlcyA9IHRoaXMudHlwZXMuZ2xvYmFsU3Ry
dWN0dXJlcyB8fCB0aGlzLnR5cGVzLmxvY2FsU3RydWN0dXJlczsKKyAgICAgICAgdmFyIHByb3Bl
cnRpZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgc3RydWN0IG9mIHN0cnVjdHVyZXMpIHsKKyAg
ICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh7CisgICAgICAgICAgICAgICAgbmFtZTogc3RydWN0
LmNvbnN0cnVjdG9yTmFtZSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdAorICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgcHJpbWl0aXZlTmFtZSBv
ZiBwcmltaXRpdmVUeXBlTmFtZXMpIHsKKyAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh7Cisg
ICAgICAgICAgICAgICAgbmFtZTogcHJpbWl0aXZlTmFtZSwKKyAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmU6IG51bGwKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcHJvcGVy
dGllcy5zb3J0KFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24uUHJvcGVydHlDb21w
YXJhdG9yKTsKKyAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgb2YgcHJvcGVydGllcykKKyAgICAg
ICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNw
ZWN0b3IuVHlwZVByb3BlcnR5VHJlZUVsZW1lbnQocHJvcGVydHkpKTsKKworICAgICAgICBpZiAo
IXRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmNoaWxkcmVuLmxlbmd0aCkgeworICAgICAgICAg
ICAgdmFyIHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAg
ICB0aXRsZS5jbGFzc05hbWUgPSAiaW5mbyI7CisgICAgICAgICAgICB0aXRsZS50ZXh0Q29udGVu
dCA9IHRoaXMuZW1wdHlQbGFjZWhvbGRlcjsKKyAgICAgICAgICAgIHZhciBpbmZvRWxlbWVudCA9
IG5ldyBUcmVlRWxlbWVudCh0aXRsZSwgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5w
cm9wZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQoaW5mb0VsZW1lbnQpOworICAgICAgICB9
CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNl
Y3Rpb24uRXZlbnQuVmlzaWJsZUNvbnRlbnREaWRDaGFuZ2UpOworCisgICAgICAgIGlmIChwcm9w
ZXJ0aWVzLmxlbmd0aCA9PT0gMSkKKyAgICAgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRs
aW5lLmNoaWxkcmVuWzBdLmV4cGFuZFJlY3Vyc2l2ZWx5KCk7CisgICAgfQorfTsKKworLy8gVGhp
cyBpcyBtb3N0bHkgaWRlbnRpY2FsIHRvIE9iamVjdFByb3BlcnRpZXNTZWN0aW9uLmNvbXBhcmVQ
cm9wZXJ0aWVzLgorLy8gQnV0IHRoaXMgY2hlY2tzIGZvciBlcXVhbGl0eSBiZWNhdXNlIHdlIGNh
biBoYXZlIHR3byBvYmplY3RzIG5hbWVkIHRoZSBzYW1lIHRoaW5nLgorV2ViSW5zcGVjdG9yLlR5
cGVQcm9wZXJ0aWVzU2VjdGlvbi5Qcm9wZXJ0eUNvbXBhcmF0b3IgPSBmdW5jdGlvbihwcm9wZXJ0
eUEsIHByb3BlcnR5QikKK3sKKyAgICB2YXIgYSA9IHByb3BlcnR5QS5uYW1lOworICAgIHZhciBi
ID0gcHJvcGVydHlCLm5hbWU7CisgICAgaWYgKGEuaW5kZXhPZigiX19wcm90b19fIikgIT09IC0x
KQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoYi5pbmRleE9mKCJfX3Byb3RvX18iKSAhPT0g
LTEpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoYSA9PT0gYikKKyAgICAgICAgcmV0dXJu
IDE7CisKKyAgICB2YXIgZGlmZiA9IDA7CisgICAgdmFyIGNodW5rID0gL15cZCt8XlxEKy87Cisg
ICAgdmFyIGNodW5rYSwgY2h1bmtiLCBhbnVtLCBibnVtOworICAgIHdoaWxlIChkaWZmID09PSAw
KSB7CisgICAgICAgIGlmICghYSAmJiBiKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg
ICBpZiAoIWIgJiYgYSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjaHVua2EgPSBh
Lm1hdGNoKGNodW5rKVswXTsKKyAgICAgICAgY2h1bmtiID0gYi5tYXRjaChjaHVuaylbMF07Cisg
ICAgICAgIGFudW0gPSAhaXNOYU4oY2h1bmthKTsKKyAgICAgICAgYm51bSA9ICFpc05hTihjaHVu
a2IpOworICAgICAgICBpZiAoYW51bSAmJiAhYm51bSkKKyAgICAgICAgICAgIHJldHVybiAtMTsK
KyAgICAgICAgaWYgKGJudW0gJiYgIWFudW0pCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgaWYgKGFudW0gJiYgYm51bSkgeworICAgICAgICAgICAgZGlmZiA9IGNodW5rYSAtIGNodW5r
YjsKKyAgICAgICAgICAgIGlmIChkaWZmID09PSAwICYmIGNodW5rYS5sZW5ndGggIT09IGNodW5r
Yi5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIStjaHVua2EgJiYgIStjaHVua2IpIC8v
IGNodW5rcyBhcmUgc3RyaW5ncyBvZiBhbGwgMHMgKHNwZWNpYWwgY2FzZSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNodW5rYS5sZW5ndGggLSBjaHVua2IubGVuZ3RoOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5rYi5sZW5ndGggLSBj
aHVua2EubGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGNodW5rYSAh
PT0gY2h1bmtiKQorICAgICAgICAgICAgcmV0dXJuIChjaHVua2EgPCBjaHVua2IpID8gLTEgOiAx
OworICAgICAgICBhID0gYS5zdWJzdHJpbmcoY2h1bmthLmxlbmd0aCk7CisgICAgICAgIGIgPSBi
LnN1YnN0cmluZyhjaHVua2IubGVuZ3RoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlmZjsKK307
CisKK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHByb3Bl
cnR5KQoreworICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsKKworICAgIHRoaXMubmFtZUVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgdGhpcy5uYW1lRWxl
bWVudC5jbGFzc05hbWUgPSAibmFtZSI7CisgICAgdGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVu
dCA9IHRoaXMucHJvcGVydHkubmFtZTsKKworICAgIFRyZWVFbGVtZW50LmNhbGwodGhpcywgdGhp
cy5uYW1lRWxlbWVudCwgbnVsbCwgZmFsc2UpOworCisgICAgdGhpcy50b2dnbGVPbkNsaWNrID0g
dHJ1ZTsKKyAgICB0aGlzLmhhc0NoaWxkcmVuID0gISF0aGlzLnByb3BlcnR5LnN0cnVjdHVyZTsK
K307CisKK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7
CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudCwK
KyAgICBfX3Byb3RvX186IFRyZWVFbGVtZW50LnByb3RvdHlwZSwKKworICAgIG9ucG9wdWxhdGU6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTsKKworICAg
ICAgICB2YXIgcHJvcGVydGllcyA9IFtdOworICAgICAgICBmb3IgKHZhciBmaWVsZE5hbWUgb2Yg
dGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUuZmllbGRzKSB7CisgICAgICAgICAgICBwcm9wZXJ0aWVz
LnB1c2goeworICAgICAgICAgICAgICAgIG5hbWU6IGZpZWxkTmFtZSwKKyAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmU6IG51bGwKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAg
cHJvcGVydGllcy5zb3J0KFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24uUHJvcGVy
dHlDb21wYXJhdG9yKTsKKworICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUucHJv
dG90eXBlU3RydWN0dXJlKSB7CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goeworICAgICAg
ICAgICAgICAgIG5hbWU6IHRoaXMucHJvcGVydHkuc3RydWN0dXJlLnByb3RvdHlwZVN0cnVjdHVy
ZS5jb25zdHJ1Y3Rvck5hbWUgKyAiICgiICsgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQcm90b3R5
cGUiKSArICIpIiwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHRoaXMucHJvcGVydHkuc3Ry
dWN0dXJlLnByb3RvdHlwZVN0cnVjdHVyZQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKwor
ICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKQorICAgICAgICAgICAgdGhp
cy5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50KHBy
b3BlcnR5KSk7CisgICAgfQorfTsKKwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5jc3MJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBl
VG9rZW5WaWV3LmNzcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLnR5cGUtdG9rZW4geworICAgIGRpc3BsYXk6IGlubGluZTsKKyAgICBib3JkZXItcmFkaXVz
OiAxMHB4OworICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CisgICAgcGFkZGluZy1sZWZ0
OiA4cHg7CisgICAgcGFkZGluZy1yaWdodDogOHB4OworICAgIHBhZGRpbmctdG9wOiAxcHg7Cisg
ICAgY29sb3I6IHdoaXRlOworICAgIGZvbnQtc2l6ZTogMTBweDsKKyAgICBvcGFjaXR5OiAwLjg1
OworfQorCisudHlwZS10b2tlbi1sZWZ0LXNwYWNpbmcgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7
Cit9CisKKy50eXBlLXRva2VuLXJpZ2h0LXNwYWNpbmcgeworICAgIG1hcmdpbi1yaWdodDogNXB4
OworfQorCisudHlwZS10b2tlbi1mdW5jdGlvbiwgLnR5cGUtdG9rZW4tYm9vbGVhbiB7CisgICAg
LyogUHVycGxlICovCisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgNTksIDE5MSk7Cit9
CisKKy50eXBlLXRva2VuLW51bWJlciB7CisgICAgLyogQmx1ZSAqLworICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYig1OSwgMTEyLCAyMjYpOworfQorCisudHlwZS10b2tlbi1zdHJpbmcgeworICAg
IC8qIFJlZCAqLworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMjMsIDUzLCA0Nik7Cit9CisK
Ky50eXBlLXRva2VuLWRlZmF1bHQgeworICAgIC8qIEdyZWVuICovCisgICAgYmFja2dyb3VuZC1j
b2xvcjogcmdiKDExOCwgMTc0LCAyOSk7Cit9CisKKy50eXBlLXRva2VuLWVtcHR5IHsKKyAgICAv
KiBHcmF5ICovCisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEyNiwgMTI2LCAxMjYpOworfQor
CisudHlwZS10b2tlbi1tYW55IHsKKyAgICAvKiBHcmVlbiAqLworICAgIGJhY2tncm91bmQtY29s
b3I6IHJnYigyMzcsIDEzMiwgMCk7Cit9CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuanMJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBl
VG9rZW5WaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcgPSBmdW5jdGlvbih0b2tlbkFubm90YXRvciwg
c2hvdWxkSGF2ZVJpZ2h0TWFyZ2luLCBzaG91bGRIYXZlTGVmdE1hcmdpbiwgdGl0bGVUeXBlLCBm
dW5jdGlvbk9yVmFyaWFibGVOYW1lKQoreworICAgIGNvbnNvbGUuYXNzZXJ0KHRpdGxlVHlwZSA9
PT0gV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlZhcmlhYmxlICB8fCB0aXRs
ZVR5cGUgPT09IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5SZXR1cm5TdGF0
ZW1lbnQpOworCisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworCisgICAgdmFy
IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgc3Bhbi5jbGFzc0xp
c3QuYWRkKCJ0eXBlLXRva2VuIik7CisgICAgaWYgKHNob3VsZEhhdmVSaWdodE1hcmdpbikKKyAg
ICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKCJ0eXBlLXRva2VuLXJpZ2h0LXNwYWNpbmciKTsKKyAg
ICBpZiAoc2hvdWxkSGF2ZUxlZnRNYXJnaW4pCisgICAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZCgi
dHlwZS10b2tlbi1sZWZ0LXNwYWNpbmciKTsKKworICAgIHRoaXMuZWxlbWVudCA9IHNwYW47Cisg
ICAgdGhpcy5fdG9rZW5Bbm5vdGF0b3IgPSB0b2tlbkFubm90YXRvcjsKKyAgICB0aGlzLl90eXBl
cyA9IG51bGw7CisgICAgdGhpcy5fY29sb3JDbGFzcyA9IG51bGw7CisKKworICAgIHRoaXMuX3Bv
cG92ZXJUaXRsZSA9IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnRpdGxlRm9yUG9wb3Zlcih0
aXRsZVR5cGUsIGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpOworCisgICAgdGhpcy5fc2V0VXBNb3Vz
ZW92ZXJIYW5kbGVycygpOworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcudGl0bGVG
b3JQb3BvdmVyID0gZnVuY3Rpb24odGl0bGVUeXBlLCBmdW5jdGlvbk9yVmFyaWFibGVOYW1lKQor
eworICAgIHZhciB0aXRsZVN0cmluZyA9IG51bGw7CisgICAgaWYgKHRpdGxlVHlwZSA9PT0gV2Vi
SW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlZhcmlhYmxlKQorICAgICAgICB0aXRs
ZVN0cmluZyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVHlwZSBpbmZvcm1hdGlvbiBmb3IgdmFy
aWFibGU6ICVzIikuZm9ybWF0KGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpOworICAgIGVsc2Ugewor
ICAgICAgICBpZiAoZnVuY3Rpb25PclZhcmlhYmxlTmFtZSkKKyAgICAgICAgICAgIHRpdGxlU3Ry
aW5nID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXR1cm4gdHlwZSBmb3IgZnVuY3Rpb246ICVz
IikuZm9ybWF0KGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB0aXRsZVN0cmluZyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmV0dXJuIHR5cGUgZm9y
IGFub255bW91cyBmdW5jdGlvbiIpOworICAgIH0KKworICAgIHJldHVybiB0aXRsZVN0cmluZzsK
K307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZSA9IHsKKyAgICBWYXJp
YWJsZTogInRpdGxlLXR5cGUtdmFyaWFibGUiLAorICAgIFJldHVyblN0YXRlbWVudDogInRpdGxl
LXR5cGUtcmV0dXJuLXN0YXRlbWVudCIKK307CisKKy8vIFRoZXNlIHR5cGUgc3RyaW5ncyBzaG91
bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdHlwZSBpbmZvcm1hdGlvbiBpbiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVTZXQuY3BwCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvckNs
YXNzRm9yVHlwZSA9IHsKKyAgICAiU3RyaW5nIjogInR5cGUtdG9rZW4tc3RyaW5nIiwKKyAgICAi
RnVuY3Rpb24iOiAidHlwZS10b2tlbi1mdW5jdGlvbiIsCisgICAgIk51bWJlciI6ICJ0eXBlLXRv
a2VuLW51bWJlciIsCisgICAgIkludGVnZXIiOiAidHlwZS10b2tlbi1udW1iZXIiLAorICAgICJV
bmRlZmluZWQiOiAidHlwZS10b2tlbi1lbXB0eSIsCisgICAgIk51bGwiOiAidHlwZS10b2tlbi1l
bXB0eSIsCisgICAgIig/KSI6ICJ0eXBlLXRva2VuLWVtcHR5IiwKKyAgICAiQm9vbGVhbiI6ICJ0
eXBlLXRva2VuLWJvb2xlYW4iLAorICAgICIobWFueSkiOiAidHlwZS10b2tlbi1tYW55IgorfTsK
KworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuRGVsYXlIb3ZlclRpbWUgPSAzNTA7CisKK1dl
Ykluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3Rvcjog
V2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcsCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3Iu
T2JqZWN0LnByb3RvdHlwZSwKKworICAgIC8vIFB1YmxpYworCisgICAgdXBkYXRlOiBmdW5jdGlv
bih0eXBlcykKKyAgICB7CisgICAgICAgIHZhciB0aXRsZSA9IHR5cGVzLmRpc3BsYXlUeXBlTmFt
ZTsKKyAgICAgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gdGl0bGU7CisgICAgICAgIHRo
aXMuX3R5cGVzID0gdHlwZXM7CisgICAgICAgIHZhciBoYXNoU3RyaW5nID0gdGl0bGVbdGl0bGUu
bGVuZ3RoIC0gMV0gPT09ICI/IiA/IHRpdGxlLnNsaWNlKDAsIHRpdGxlLmxlbmd0aCAtIDEpIDog
dGl0bGU7CisKKyAgICAgICAgaWYgKHRoaXMuX2NvbG9yQ2xhc3MpCisgICAgICAgICAgICB0aGlz
LmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9jb2xvckNsYXNzKTsKKworICAgICAgICB0
aGlzLl9jb2xvckNsYXNzID0gV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JDbGFzc0Zv
clR5cGVbaGFzaFN0cmluZ10gfHwgInR5cGUtdG9rZW4tZGVmYXVsdCI7CisgICAgICAgIHRoaXMu
ZWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuX2NvbG9yQ2xhc3MpOworICAgIH0sCisKKyAgICAv
LyBQcml2YXRlCisKKyAgICBfc2V0VXBNb3VzZW92ZXJIYW5kbGVyczogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdmFyIHRpbWVvdXRJRCA9IG51bGw7CisKKyAgICAgICAgdGhpcy5lbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ZnVuY3Rpb24gc2hvd1BvcG92ZXJBZnRlckRlbGF5KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB0aW1lb3V0SUQgPSBudWxsOworCisgICAgICAgICAgICAgICAgdmFyIGRvbVJlY3Qg
PSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgICAgICAgICAg
dmFyIGJvdW5kcyA9IG5ldyBXZWJJbnNwZWN0b3IuUmVjdChkb21SZWN0LmxlZnQsIGRvbVJlY3Qu
dG9wLCBkb21SZWN0LndpZHRoLCBkb21SZWN0LmhlaWdodCk7CisgICAgICAgICAgICAgICAgdGhp
cy5fdG9rZW5Bbm5vdGF0b3Iuc291cmNlQ29kZVRleHRFZGl0b3Iuc2hvd1BvcG92ZXJGb3JUeXBl
cyh0aGlzLl90eXBlcywgYm91bmRzLCB0aGlzLl9wb3BvdmVyVGl0bGUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkU2hvd1BvcG92ZXIoKSkKKyAgICAgICAg
ICAgICAgICB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KHNob3dQb3BvdmVyQWZ0ZXJEZWxheS5iaW5k
KHRoaXMpLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5EZWxheUhvdmVyVGltZSk7CisgICAg
ICAgIH0uYmluZCh0aGlzKSk7CisKKyAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoIm1vdXNlb3V0IiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAodGltZW91dElEKQor
ICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SUQpOworICAgICAgICB9LmJpbmQo
dGhpcykpOworICAgIH0sCisKKyAgICBfc2hvdWxkU2hvd1BvcG92ZXI6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIGlmICgodGhpcy5fdHlwZXMuZ2xvYmFsUHJpbWl0aXZlVHlwZU5hbWVzICYm
IHRoaXMuX3R5cGVzLmdsb2JhbFByaW1pdGl2ZVR5cGVOYW1lcy5sZW5ndGggPiAxKSB8fCAodGhp
cy5fdHlwZXMubG9jYWxQcmltaXRpdmVUeXBlTmFtZXMgJiYgdGhpcy5fdHlwZXMubG9jYWxQcmlt
aXRpdmVUeXBlTmFtZXMubGVuZ3RoID4gMSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgICAgICBpZiAoKHRoaXMuX3R5cGVzLmdsb2JhbFN0cnVjdHVyZXMgJiYgdGhpcy5fdHlwZXMu
Z2xvYmFsU3RydWN0dXJlcy5sZW5ndGgpIHx8ICh0aGlzLl90eXBlcy5sb2NhbFN0cnVjdHVyZXMg
JiYgdGhpcy5fdHlwZXMubG9jYWxTdHJ1Y3R1cmVzLmxlbmd0aCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237185</attachid>
            <date>2014-08-26 17:01:43 -0700</date>
            <delta_ts>2014-08-26 17:03:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>81387</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTcyOTY5KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDE0LTA4LTI2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IENyZWF0ZSBhIFVJIGZvciBkaXNwbGF5aW5nIEphdmFTY3JpcHQgdHlw
ZSBpbmZvcm1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1MTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSmF2YVNjcmlwdENvcmUgbm93IGhhcyBhIHR5cGUgcHJvZmlsZXIuIFRoaXMgcGF0Y2gg
cHJvdmlkZXMgYSBmcm9udGVuZAorICAgICAgICB1c2VyIGludGVyZmFjZSBmb3IgZGlzcGxheWlu
ZyB0aGlzIHR5cGUgaW5mb3JtYXRpb24gaW4gdGhlIFdlYiBJbnNwZWN0b3IuCisgICAgICAgIFRo
ZSB1c2VyIGludGVyZmFjZSB3b3JrcyBieSBwbGFjaW5nIGlubGluZSAidHlwZSB0b2tlbnMiIG5l
eHQgdG8gaW1wb3J0YW50CisgICAgICAgIEphdmFTY3JpcHQgZXhwcmVzc2lvbnM6IGZ1bmN0aW9u
IGFyZ3VtZW50cywgZnVuY3Rpb24gcmV0dXJuIHR5cGVzLCBhbmQgCisgICAgICAgIHZhcmlhYmxl
IGRlY2xhcmF0aW9ucy4gVHlwZSBpbmZvcm1hdGlvbiBjYW4gYWxzbyBiZSBzZWVuIGZvciBhbG1v
c3QgZXZlcnkKKyAgICAgICAgSmF2YVNjaXB0IGV4cHJlc3Npb24ganVzdCBieSBob3ZlcmluZyBv
dmVyIGl0IHdoaWxlIHZpZXdpbmcgYSBKYXZhU2NyaXB0IGZpbGUuCisKKyAgICAgICAgQ3VycmVu
dGx5LCB0dXJuaW5nIG9uIHRoZSB0eXBlIHByb2ZpbGVyIGlzIGV4cGVuc2l2ZSwgc28gdGhlIGlu
c3BlY3RvcgorICAgICAgICBlbnN1cmVzIHRvIG5ldmVyIHR1cm4gb24gdHlwZSBwcm9maWxpbmcg
dW50aWwgdGhlIHVzZXIgc3BlY2lmaWNhbGx5IGFza3MgCisgICAgICAgIGZvciB0eXBlIGluZm9y
bWF0aW9uIHRvIGJlIHR1cm5lZCBvbi4KKworICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHBy
b2ovbG9jYWxpemVkU3RyaW5ncy5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Jhc2UvTWFp
bi5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tl
blRyYWNraW5nQ29udHJvbGxlci5qczoKKyAgICAgICAgQWRkZWQgYSBuZXcgdHlwZSBwcm9maWxp
bmcgbW9kZS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVy
U291cmNlTWFwLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRv
a2VuQW5ub3RhdG9yLmpzOiBBZGRlZC4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyByZXNwb25zaWJs
ZSBmb3IgYW5ub3RhaW5nIHByb2R1Y2luZyB0aGUgaW5saW5lCisgICAgICAgICJ0eXBlIHRva2Vu
IiBhbm5vdGF0aW9ucy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRp
b25JdGVtVHlwZXMuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRt
bDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanM6CisgICAgICAgICog
VXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qczoKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL1NjcmlwdENvbnRlbnRWaWV3LmpzOgorICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CisgICAgICAgIElzIHJlc3BvbnNp
YmxlIGZvciB0aGUgbWFuYWdlbWVudCBvZiBUeXBlVG9rZW5Bbm5vdGF0b3IuCisKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRDb250ZW50Vmlldy5qczoKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL1RleHRFZGl0b3IuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9W
aWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L1ZpZXdzL1R5cGVQcm9wZXJ0aWVzU2VjdGlvbi5qczogQWRkZWQuCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmNzczogQWRkZWQuCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmpzOiBBZGRlZC4KKyAgICAgICAgVGhlIHZpZXcg
Zm9yIGRpc3BsYXlpbmcgdGhlIGlubGluZSAidHlwZSB0b2tlbnMiLgorCiAyMDE0LTA4LTI1ICBC
cmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIFBhc3Mg
T0ZGSUNJQUxfQlVJTEQgZmxhZyB0byBXZWJJbnNwZWN0b3JVSSBidWlsZCBwcm9jZXNzCkluZGV4
OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRT
dHJpbmdzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRp
b25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMJKHJldmlzaW9uIDE3Mjk2OSkKKysrIFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmlu
Z3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw2ICsyMjksNyBAQAogAGwAbwBjAGEAbABpAHoA
ZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAaQBkAGUAIAB0AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBs
AHMAIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiAF0AIAA9ACAAIgBIAGkAZABlACAAdABoAGUA
IAAlAHMAIABkAGUAdABhAGkAbABzACAAcwBpAGQAZQBiAGEAcgAgACgAJQBzACkAIgA7AAogAGwA
bwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAaQBkAGUAIAB0AGgAZQAgACUAcwAg
AG4AYQB2AGkAZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACIAXQAgAD0AIAAiAEgAaQBkAGUA
IAB0AGgAZQAgACUAcwAgAG4AYQB2AGkAZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACIAOwAK
IABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBIAGkAZABlACAAdABoAGUAIAAl
AHMAIABuAGEAdgBpAGcAYQB0AGkAbwBuACAAcwBpAGQAZQBiAGEAcgAgACgAJQBzACkAIgBdACAA
PQAgACIASABpAGQAZQAgAHQAaABlACAAJQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBk
AGUAYgBhAHIAIAAoACUAcwApACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBz
AFsAIgBIAGkAZABlACAAdAB5AHAAZQAgAGkAbgBmAG8AcgBtAGEAdABpAG8AbgAiAF0AIAA9ACAA
IgBIAGkAZABlACAAdAB5AHAAZQAgAGkAbgBmAG8AcgBtAGEAdABpAG8AbgAiADsACiAAbABvAGMA
YQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABvAHMAdAAiAF0AIAA9ACAAIgBIAG8AcwB0
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBJAGMAbwBuACAATwBu
AGwAeQAiAF0AIAA9ACAAIgBJAGMAbwBuACAATwBuAGwAeQAiADsACiAAbABvAGMAYQBsAGkAegBl
AGQAUwB0AHIAaQBuAGcAcwBbACIASQBjAG8AbgAgAGEAbgBkACAAVABlAHgAdAAgACgASABvAHIA
aQB6AG8AbgB0AGEAbAApACIAXQAgAD0AIAAiAEkAYwBvAG4AIABhAG4AZAAgAFQAZQB4AHQAIAAo
AEgAbwByAGkAegBvAG4AdABhAGwAKQAiADsACkBAIC0zMzYsNiArMzM3LDcgQEAKIABsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBQAHIAbwBjAGUAcwBzAGkAbgBnACAASQBuAHMA
dAByAHUAYwB0AGkAbwBuACIAXQAgAD0AIAAiAFAAcgBvAGMAZQBzAHMAaQBuAGcAIABJAG4AcwB0
AHIAdQBjAHQAaQBvAG4AIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAi
AFAAcgBvAGYAaQBsAGUAIAAlAGQAIgBdACAAPQAgACIAUAByAG8AZgBpAGwAZQAgACUAZAAiADsA
CiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUAByAG8AcABlAHIAdABpAGUA
cwAiAF0AIAA9ACAAIgBQAHIAbwBwAGUAcgB0AGkAZQBzACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUA
ZABTAHQAcgBpAG4AZwBzAFsAIgBQAHIAbwB0AG8AdAB5AHAAZQAiAF0AIAA9ACAAIgBQAHIAbwB0
AG8AdAB5AHAAZQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUQB1
AGUAcgB5ACAAUABhAHIAYQBtAGUAdABlAHIAcwAiAF0AIAA9ACAAIgBRAHUAZQByAHkAIABQAGEA
cgBhAG0AZQB0AGUAcgBzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsA
IgBRAHUAZQByAHkAIABTAHQAcgBpAG4AZwAiAF0AIAA9ACAAIgBRAHUAZQByAHkAIABTAHQAcgBp
AG4AZwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBhAGQAaQBh
AGwAIABHAHIAYQBkAGkAZQBuAHQAIgBdACAAPQAgACIAUgBhAGQAaQBhAGwAIABHAHIAYQBkAGkA
ZQBuAHQAIgA7AApAQCAtMzY2LDYgKzM2OCw4IEBACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIA
aQBuAGcAcwBbACIAUgBlAHMAbwB1AHIAYwBlAHMAIgBdACAAPQAgACIAUgBlAHMAbwB1AHIAYwBl
AHMAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFIAZQBzAHAAbwBu
AHMAZQAiAF0AIAA9ACAAIgBSAGUAcwBwAG8AbgBzAGUAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBk
AFMAdAByAGkAbgBnAHMAWwAiAFIAZQBzAHAAbwBuAHMAZQAgAEgAZQBhAGQAZQByAHMAIgBdACAA
PQAgACIAUgBlAHMAcABvAG4AcwBlACAASABlAGEAZABlAHIAcwAiADsACisAbABvAGMAYQBsAGkA
egBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHQAdQByAG4AIAB0AHkAcABlACAAZgBvAHIAIABh
AG4AbwBuAHkAbQBvAHUAcwAgAGYAdQBuAGMAdABpAG8AbgAiAF0AIAA9ACAAIgBSAGUAdAB1AHIA
bgAgAHQAeQBwAGUAIABmAG8AcgAgAGEAbgBvAG4AeQBtAG8AdQBzACAAZgB1AG4AYwB0AGkAbwBu
ACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUAdAB1AHIAbgAg
AHQAeQBwAGUAIABmAG8AcgAgAGYAdQBuAGMAdABpAG8AbgA6ACAAJQBzACIAXQAgAD0AIAAiAFIA
ZQB0AHUAcgBuACAAdAB5AHAAZQAgAGYAbwByACAAZgB1AG4AYwB0AGkAbwBuADoAIAAlAHMAIgA7
AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFIAZQB2AGUAYQBsACAAaQBu
ACAARABPAE0AIABUAHIAZQBlACIAXQAgAD0AIAAiAFIAZQB2AGUAYQBsACAAaQBuACAARABPAE0A
IABUAHIAZQBlACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUA
dgBlAGEAbAAgAGkAbgAgAEQAZQBiAHUAZwBnAGUAcgAgAE4AYQB2AGkAZwBhAHQAaQBvAG4AIABT
AGkAZABlAGIAYQByACIAXQAgAD0AIAAiAFIAZQB2AGUAYQBsACAAaQBuACAARABlAGIAdQBnAGcA
ZQByACAATgBhAHYAaQBnAGEAdABpAG8AbgAgAFMAaQBkAGUAYgBhAHIAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFIAZQB2AGUAYQBsACAAaQBuACAATwByAGkAZwBp
AG4AYQBsACAAUgBlAHMAbwB1AHIAYwBlACIAXQAgAD0AIAAiAFIAZQB2AGUAYQBsACAAaQBuACAA
TwByAGkAZwBpAG4AYQBsACAAUgBlAHMAbwB1AHIAYwBlACIAOwAKQEAgLTQwNSw2ICs0MDksNyBA
QAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIAB0AGgAZQAg
ACUAcwAgAG4AYQB2AGkAZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiAF0A
IAA9ACAAIgBTAGgAbwB3ACAAdABoAGUAIAAlAHMAIABuAGEAdgBpAGcAYQB0AGkAbwBuACAAcwBp
AGQAZQBiAGEAcgAgACgAJQBzACkAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBn
AHMAWwAiAFMAaABvAHcAIAB0AGkAbQBlAHMAIABhAHMAIABhAGIAcwBvAGwAdQB0AGUAIAB0AGkA
bQBlAHMAIgBdACAAPQAgACIAUwBoAG8AdwAgAHQAaQBtAGUAcwAgAGEAcwAgAGEAYgBzAG8AbAB1
AHQAZQAgAHQAaQBtAGUAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBb
ACIAUwBoAG8AdwAgAHQAaQBtAGUAcwAgAGEAcwAgAHAAZQByAGMAZQBuAHQAYQBnAGUAcwAiAF0A
IAA9ACAAIgBTAGgAbwB3ACAAdABpAG0AZQBzACAAYQBzACAAcABlAHIAYwBlAG4AdABhAGcAZQBz
ACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAdAB5
AHAAZQAgAGkAbgBmAG8AcgBtAGEAdABpAG8AbgAiAF0AIAA9ACAAIgBTAGgAbwB3ACAAdAB5AHAA
ZQAgAGkAbgBmAG8AcgBtAGEAdABpAG8AbgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIA
aQBuAGcAcwBbACIAUwBpAHoAZQAiAF0AIAA9ACAAIgBTAGkAegBlACIAOwAKIABsAG8AYwBhAGwA
aQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAG0AYQBsAGwAIABJAGMAbwBuAHMAIgBdACAAPQAg
ACIAUwBtAGEAbABsACAASQBjAG8AbgBzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBp
AG4AZwBzAFsAIgBTAG8AYwBrAGUAdAAiAF0AIAA9ACAAIgBTAG8AYwBrAGUAdAAiADsACkBAIC00
NTEsNiArNDU2LDcgQEAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBUAHIA
YQBuAHMAZgBlAHIAZQBkACIAXQAgAD0AIAAiAFQAcgBhAG4AcwBmAGUAcgBlAGQAIgA7AAogAGwA
bwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFQAeQBwAGUAIgBdACAAPQAgACIAVAB5
AHAAZQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAVAB5AHAAZQAg
AEkAcwBzAHUAZQAiAF0AIAA9ACAAIgBUAHkAcABlACAASQBzAHMAdQBlACIAOwAKKwBsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBUAHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkA
bwBuACAAZgBvAHIAIAB2AGEAcgBpAGEAYgBsAGUAOgAgACUAcwAiAF0AIAA9ACAAIgBUAHkAcABl
ACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACAAZgBvAHIAIAB2AGEAcgBpAGEAYgBsAGUAOgAgACUA
cwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAVQBuAGsAbgBvAHcA
bgAgAG4AbwBkAGUAIgBdACAAPQAgACIAVQBuAGsAbgBvAHcAbgAgAG4AbwBkAGUAIgA7AAogAGwA
bwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFUAbgB0AGkAdABsAGUAZAAiAF0AIAA9
ACAAIgBVAG4AdABpAHQAbABlAGQAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBn
AHMAWwAiAFUAcwBlAHIAIABBAGcAZQBuAHQAIABTAHQAeQBsAGUAcwBoAGUAZQB0ACIAXQAgAD0A
IAAiAFUAcwBlAHIAIABBAGcAZQBuAHQAIABTAHQAeQBsAGUAcwBoAGUAZQB0ACIAOwAKSW5kZXg6
IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJKHJldmlz
aW9uIDE3Mjk2OSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4u
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDYgKzEzNiw3IEBACiAgICAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSJWaWV3cy9UaW1lbGluZVZpZXcuY3NzIj4KICAgICA8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1Rvb2xiYXIuY3NzIj4KICAgICA8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1RyZWVFbGVtZW50U3RhdHVzQnV0dG9uLmNzcyI+CisgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9UeXBlVG9rZW5WaWV3LmNzcyI+CiAK
ICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IkNvbnRyb2xsZXJzL0NvZGVNaXJyb3JD
b21wbGV0aW9uQ29udHJvbGxlci5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iQ29udHJvbGxlcnMvQ29kZU1pcnJvckRyYWdUb0FkanVzdE51bWJlckNvbnRyb2xsZXIuY3Nz
Ij4KQEAgLTQ2MSw2ICs0NjIsOCBAQAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Ub29sYmFyLmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHJlZUVsZW1lbnRTdGF0dXNCdXR0
b24uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UcmVlT3V0bGluZURhdGFH
cmlkU3luY2hyb25pemVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHlw
ZVByb3BlcnRpZXNTZWN0aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlld3Mv
VHlwZVRva2VuVmlldy5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxl
cnMvQ29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyLmpzIj48L3NjcmlwdD4KIApAQCAtNDkyLDYg
KzQ5NSw3IEBACiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1NvdXJjZU1hcE1hbmFnZXIu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9TdG9yYWdlTWFuYWdl
ci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1RpbWVsaW5lTWFu
YWdlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1R5cGVUb2tl
bkFubm90YXRvci5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQmFzZS9NYWluLmpz
Ij48L3NjcmlwdD4KIApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
QmFzZS9NYWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0Jhc2UvTWFpbi5qcwkocmV2aXNpb24gMTcyOTY5KQorKysgU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIs
NiArMTYyLDEwIEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5z
aG93U2hhZG93RE9NU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygic2hvdy1zaGFk
b3ctZG9tIiwgZmFsc2UpOwogICAgIHRoaXMuc2hvd1JlcGxheUludGVyZmFjZVNldHRpbmcgPSBu
ZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoInNob3ctd2ViLXJlcGxheSIsIGZhbHNlKTsKIAorICAg
IHRoaXMuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nID0gbmV3IFdlYkluc3Bl
Y3Rvci5TZXR0aW5nKCJzaG93LWphdmFzY3JpcHQtdHlwZS1pbmZvcm1hdGlvbiIsIGZhbHNlKTsK
KyAgICBpZiAodGhpcy5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWUp
CisgICAgICAgIFJ1bnRpbWVBZ2VudC5lbmFibGVUeXBlUHJvZmlsZXIoKTsKKwogICAgIHRoaXMu
bW91c2VDb29yZHMgPSB7CiAgICAgICAgIHg6IDAsCiAgICAgICAgIHk6IDAKSW5kZXg6IFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tl
blRyYWNraW5nQ29udHJvbGxlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIuanMJKHJldmlzaW9uIDE3Mjk2OSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJv
clRva2VuVHJhY2tpbmdDb250CiAgICAgTm9uZTogIm5vbmUiLAogICAgIE5vblN5bWJvbFRva2Vu
czogIm5vbi1zeW1ib2wtdG9rZW5zIiwKICAgICBKYXZhU2NyaXB0RXhwcmVzc2lvbjogImphdmFz
Y3JpcHQtZXhwcmVzc2lvbiIsCisgICAgSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjogImphdmFz
Y3JpcHQtdHlwZS1pbmZvcm1hdGlvbiIsCiAgICAgTWFya2VkVG9rZW5zOiAibWFya2VkLXRva2Vu
cyIKIH0KIApAQCAtMTkzLDcgKzE5NCw2IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5U
cmFja2luZ0NvbnQKIAogICAgIF9zdGFydFRyYWNraW5nOiBmdW5jdGlvbigpCiAgICAgewotICAg
ICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5fdHJhY2tpbmcpOwogICAgICAgICBpZiAodGhpcy5f
dHJhY2tpbmcpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTM4OSw2ICszODksNyBAQCBXZWJJ
bnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250CiAgICAgICAgICAgICB0aGlzLl9j
YW5kaWRhdGUgPSB0aGlzLl9wcm9jZXNzTm9uU3ltYm9sVG9rZW4oKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0RXhwcmVzc2lvbjoKKyAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2YVNjcmlwdFR5
cGVJbmZvcm1hdGlvbjoKICAgICAgICAgICAgIHRoaXMuX2NhbmRpZGF0ZSA9IHRoaXMuX3Byb2Nl
c3NKYXZhU2NyaXB0RXhwcmVzc2lvbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk1h
cmtlZFRva2VuczoKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJTb3VyY2VNYXAu
anMJKHJldmlzaW9uIDE3Mjk2OSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5qcwkod29ya2luZyBjb3B5KQpAQCAt
NDUsMTUgKzQ1LDI3IEBAIFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAucHJvdG90eXAK
ICAgICBvcmlnaW5hbFRvRm9ybWF0dGVkOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1i
ZXIpCiAgICAgewogICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMuX2xvY2F0aW9u
VG9Qb3NpdGlvbih0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzLCBsaW5lTnVtYmVyIHx8IDAsIGNv
bHVtbk51bWJlciB8fCAwKTsKKyAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxQb3NpdGlvblRv
Rm9ybWF0dGVkKG9yaWdpbmFsUG9zaXRpb24pOworICAgIH0sCisKKyAgICBvcmlnaW5hbFBvc2l0
aW9uVG9Gb3JtYXR0ZWQ6IGZ1bmN0aW9uKG9yaWdpbmFsUG9zaXRpb24pCisgICAgewogICAgICAg
ICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9jb252ZXJ0UG9zaXRpb24odGhpcy5fbWFw
cGluZy5vcmlnaW5hbCwgdGhpcy5fbWFwcGluZy5mb3JtYXR0ZWQsIG9yaWdpbmFsUG9zaXRpb24p
OwogICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0aW9uKHRoaXMuX2Zvcm1hdHRl
ZExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRQb3NpdGlvbik7CiAgICAgfSwKIAorCiAgICAgZm9ybWF0
dGVkVG9PcmlnaW5hbDogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQogICAgIHsK
KyAgICAgICAgdmFyIG9yaWdpbmFsUG9zaXRpb24gPSB0aGlzLmZvcm1hdHRlZFRvT3JpZ2luYWxP
ZmZzZXQobGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Bv
c2l0aW9uVG9Mb2NhdGlvbih0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzLCBvcmlnaW5hbFBvc2l0
aW9uKTsKKyAgICB9LAorCisgICAgZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldDogZnVuY3Rpb24o
bGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAgIHsKICAgICAgICAgdmFyIGZvcm1hdHRlZFBv
c2l0aW9uID0gdGhpcy5fbG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRp
bmdzLCBsaW5lTnVtYmVyIHx8IDAsIGNvbHVtbk51bWJlciB8fCAwKTsKICAgICAgICAgdmFyIG9y
aWdpbmFsUG9zaXRpb24gPSB0aGlzLl9jb252ZXJ0UG9zaXRpb24odGhpcy5fbWFwcGluZy5mb3Jt
YXR0ZWQsIHRoaXMuX21hcHBpbmcub3JpZ2luYWwsIGZvcm1hdHRlZFBvc2l0aW9uKTsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uVG9Mb2NhdGlvbih0aGlzLl9vcmlnaW5hbExpbmVFbmRp
bmdzLCBvcmlnaW5hbFBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG9yaWdpbmFsUG9zaXRpb247
CiAgICAgfSwKIAogICAgIC8vIFByaXZhdGUKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBl
VG9rZW5Bbm5vdGF0b3IuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuVHlwZVRv
a2VuQW5ub3RhdG9yID0gZnVuY3Rpb24oc291cmNlQ29kZVRleHRFZGl0b3IsIHNjcmlwdCkKK3sK
KyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisKKyAgICBjb25zb2xlLmFzc2Vy
dChzb3VyY2VDb2RlVGV4dEVkaXRvciAmJiBzb3VyY2VDb2RlVGV4dEVkaXRvciBpbnN0YW5jZW9m
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvciwgc291cmNlQ29kZVRleHRFZGl0b3Ip
OworICAgIGNvbnNvbGUuYXNzZXJ0KHNjcmlwdCwgc2NyaXB0KTsKKworICAgIHRoaXMuX3Njcmlw
dCA9IHNjcmlwdDsKKyAgICB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvciA9IHNvdXJjZUNvZGVU
ZXh0RWRpdG9yOworICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzID0gW107CisgICAgdGhpcy5fdHlw
ZVRva2VuQm9va21hcmtzID0gW107CisgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxs
OworICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRv
a2VuQW5ub3RhdG9yLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9y
LlR5cGVUb2tlbkFubm90YXRvciwKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3Qu
cHJvdG90eXBlLAorCisgICAgLy8gUHVibGljCisKKyAgICBnZXQgaXNBY3RpdmUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2lzQWN0aXZlOworICAgIH0sCisKKyAgICBnZXQgc291cmNl
Q29kZVRleHRFZGl0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZUNvZGVU
ZXh0RWRpdG9yOworICAgIH0sCisKKyAgICBwYXVzZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsKKyAgICAgICAgdGhpcy5faXNBY3RpdmUg
PSBmYWxzZTsKKyAgICB9LAorCisgICAgcmVzdW1lOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOworICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9
IHRydWU7CisgICAgICAgIHRoaXMuX2luc2VydEFubm90YXRpb25zKCk7CisgICAgfSwKKworICAg
IHJlZnJlc2g6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMu
X2lzQWN0aXZlKTsKKyAgICAgICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOworICAgICAgICB0
aGlzLl9pbnNlcnRBbm5vdGF0aW9ucygpOworICAgIH0sCisKKyAgICByZXNldDogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsKKyAgICAgICAg
dGhpcy5faXNBY3RpdmUgPSB0cnVlOworICAgICAgICB0aGlzLl9jbGVhclR5cGVUb2tlbnMoKTsK
KyAgICAgICAgdGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAgdG9nZ2xl
VHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5faXNB
Y3RpdmUpIHsKKyAgICAgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7CisgICAgICAgICAg
ICB0aGlzLl9jbGVhclR5cGVUb2tlbnMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZTsKKyAgICB9LAorCisgICAgLy8g
UHJpdmF0ZQorCisgICAgX2luc2VydEFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHZhciBzY3JpcHRTeW50YXhUcmVlID0gdGhpcy5fc2NyaXB0LnNjcmlwdFN5bnRheFRyZWU7CisK
KyAgICAgICAgaWYgKCFzY3JpcHRTeW50YXhUcmVlKSB7CisgICAgICAgICAgICB0aGlzLl9zY3Jp
cHQucmVxdWVzdFNjcmlwdFN5bnRheFRyZWUoZnVuY3Rpb24oc3ludGF4VHJlZSkgeworICAgICAg
ICAgICAgICAgIC8vIEFmdGVyIHJlcXVlc3RpbmcgdGhlIHRyZWUsIHdlIHN0aWxsIG1pZ2h0IGdl
dCBhIG51bGwgdHJlZSBmcm9tIGEgcGFyc2UgZXJyb3IuCisgICAgICAgICAgICAgICAgaWYgKHN5
bnRheFRyZWUpCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydEFubm90YXRpb25zKCk7
CisgICAgICAgICAgICB9LmJpbmQodGhpcykpOworCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIXNjcmlwdFN5bnRheFRyZWUucGFyc2VkU3VjY2Vzc2Z1bGx5
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciB7c3RhcnRPZmZzZXQsIGVuZE9m
ZnNldH0gPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvci52aXNpYmxlUmFuZ2VPZmZzZXRzKCk7
CisKKyAgICAgICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7CisgICAgICAgIHZhciBhbGxO
b2Rlc0luUmFuZ2UgPSBzY3JpcHRTeW50YXhUcmVlLmZpbHRlckJ5UmFuZ2Uoc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCk7CisgICAgICAgIHNjcmlwdFN5bnRheFRyZWUudXBkYXRlVHlwZXMoYWxsTm9k
ZXNJblJhbmdlLCBmdW5jdGlvbiBhZnRlclR5cGVVcGRhdGVzKCkgeworICAgICAgICAgICAgLy8g
QmVjYXVzZSB0aGlzIGlzIGFuIGFzeW5jaHJvbm91cyBjYWxsLCB3ZSBjb3VsZCBoYXZlIGJlZW4g
ZGVhY3RpdmF0ZWQgYmVmb3JlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQuCisgICAg
ICAgICAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgYWxsTm9kZXNJblJhbmdlLmZvckVhY2godGhpcy5faW5zZXJ0VHlwZVRva2Vu
c0ZvckVhY2hOb2RlLCB0aGlzKTsKKyAgICAgICAgICAgIGFsbE5vZGVzSW5SYW5nZS5mb3JFYWNo
KHRoaXMuX3VwZGF0ZVR5cGVUb2tlbnNGb3JFYWNoTm9kZSwgdGhpcyk7CisKKyAgICAgICAgICAg
IHZhciB0b3RhbFRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lOworICAgICAgICAgICAgdmFy
IHRpbWVvdXRUaW1lID0gTWF0aC5taW4oTWF0aC5tYXgoNzUwMCwgdG90YWxUaW1lKSwgOCAqIHRv
dGFsVGltZSk7CisKKyAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyID0gc2V0VGlt
ZW91dChmdW5jdGlvbiB0aW1lb3V0VXBkYXRlKCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3Rp
bWVvdXRJZGVudGlmaWVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRBbm5v
dGF0aW9ucygpOworICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aW1lb3V0VGltZSk7CisgICAg
ICAgIH0uYmluZCh0aGlzKSk7CisgICAgfSwKKworICAgIF9pbnNlcnRUeXBlVG9rZW5zRm9yRWFj
aE5vZGU6IGZ1bmN0aW9uKG5vZGUpCisgICAgeworICAgICAgICB2YXIgc2NyaXB0U3ludGF4VHJl
ZSA9IHRoaXMuX3NjcmlwdC5fc2NyaXB0U3ludGF4VHJlZTsKKworICAgICAgICBzd2l0Y2ggKG5v
ZGUudHlwZSkgeworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb246CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAg
Zm9yICh2YXIgcGFyYW0gb2Ygbm9kZS5wYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBh
cmFtLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuICYmIHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzICYm
IHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzLmRpc3BsYXlUeXBlTmFtZSkKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5faW5zZXJ0VG9rZW4ocGFyYW0ucmFuZ2VbMF0sIHBhcmFtLCBmYWxzZSwgV2Vi
SW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlZhcmlhYmxlLCBwYXJhbS5uYW1lKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgYSBmdW5jdGlvbiBkb2VzIG5vdCBo
YXZlIGFuIGV4cGxpY2l0IHJldHVybiB0eXBlLCB0aGVuIGRvbid0IHNob3cgYSByZXR1cm4gdHlw
ZSB1bmxlc3Mgd2UgdGhpbmsgaXQncyBhIGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgdmFyIGZ1
bmN0aW9uUmV0dXJuVHlwZSA9IG5vZGUuYXR0YWNobWVudHMucmV0dXJuVHlwZXM7CisgICAgICAg
ICAgICBpZiAobm9kZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbiB8fCAhZnVuY3Rpb25SZXR1cm5U
eXBlIHx8ICFmdW5jdGlvblJldHVyblR5cGUuZGlzcGxheVR5cGVOYW1lKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoc2NyaXB0U3ludGF4VHJlZS5jb250YWluc05v
bkVtcHR5UmV0dXJuU3RhdGVtZW50KG5vZGUuYm9keSkgfHwgZnVuY3Rpb25SZXR1cm5UeXBlLmRp
c3BsYXlUeXBlTmFtZSAhPT0gIlVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICB2YXIgZnVu
Y3Rpb25OYW1lID0gbm9kZS5pZCA/IG5vZGUuaWQubmFtZSA6IG51bGw7CisgICAgICAgICAgICAg
ICAgdGhpcy5faW5zZXJ0VG9rZW4obm9kZS5pc0dldHRlck9yU2V0dGVyID8gbm9kZS5nZXR0ZXJP
clNldHRlclJhbmdlWzBdIDogbm9kZS5yYW5nZVswXSwgbm9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgdHJ1ZSwgV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlJldHVyblN0YXRl
bWVudCwgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlh
YmxlRGVjbGFyYXRvcjoKKyAgICAgICAgICAgIGlmICghbm9kZS5hdHRhY2htZW50cy5fX3R5cGVU
b2tlbiAmJiBub2RlLmF0dGFjaG1lbnRzLnR5cGVzICYmIG5vZGUuYXR0YWNobWVudHMudHlwZXMu
ZGlzcGxheVR5cGVOYW1lKQorICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydFRva2VuKG5vZGUu
aWQucmFuZ2VbMF0sIG5vZGUsIGZhbHNlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRs
ZVR5cGUuVmFyaWFibGUsIG5vZGUuaWQubmFtZSk7CisKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfSwKKworICAgIF9pbnNlcnRUb2tlbjogZnVuY3Rpb24ob3JpZ2luYWxPZmZz
ZXQsIG5vZGUsIHNob3VsZFRyYW5zbGF0ZU9mZnNldFRvQWZ0ZXJQYXJhbWV0ZXJMaXN0LCB0eXBl
VG9rZW5UaXRsZVR5cGUsIGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpCisgICAgeworICAgICAgICB2
YXIgdG9rZW5Qb3NpdGlvbiA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLm9yaWdpbmFsT2Zm
c2V0VG9DdXJyZW50UG9zaXRpb24ob3JpZ2luYWxPZmZzZXQpOworICAgICAgICB2YXIgY3VycmVu
dE9mZnNldCA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLmN1cnJlbnRQb3NpdGlvblRvQ3Vy
cmVudE9mZnNldCh0b2tlblBvc2l0aW9uKTsKKyAgICAgICAgdmFyIHNvdXJjZVN0cmluZyA9IHRo
aXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLnN0cmluZzsKKworICAgICAgICBpZiAoc2hvdWxkVHJh
bnNsYXRlT2Zmc2V0VG9BZnRlclBhcmFtZXRlckxpc3QpIHsKKyAgICAgICAgICAgIC8vIFRyYW5z
bGF0ZSB0aGUgcG9zaXRpb24gdG8gdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMgb2YgdGhlIGZ1bmN0
aW9uIGFyZ3VtZW50czoKKyAgICAgICAgICAgIC8vIHRyYW5zbGF0ZSBmcm9tOiBbdHlwZS10b2tl
bl0gZnVuY3Rpb24gZm9vKCkge30gPT4gdG86IGZ1bmN0aW9uIGZvbygpIFt0eXBlLXRva2VuXSB7
fQorICAgICAgICAgICAgY3VycmVudE9mZnNldCA9IHRoaXMuX3RyYW5zbGF0ZVRvT2Zmc2V0QWZ0
ZXJGdW5jdGlvblBhcmFtZXRlckxpc3Qobm9kZSwgY3VycmVudE9mZnNldCwgc291cmNlU3RyaW5n
KTsKKyAgICAgICAgICAgIHRva2VuUG9zaXRpb24gPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRv
ci5jdXJyZW50T2Zmc2V0VG9DdXJyZW50UG9zaXRpb24oY3VycmVudE9mZnNldCk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBOb3RlOiBib29rbWFya3MgcmVuZGVyIHRvIHRoZSBsZWZ0IG9mIHRo
ZSBjaGFyYWN0ZXIgdGhleSdyZSBiZWluZyBkaXNwbGF5ZWQgbmV4dCB0by4KKyAgICAgICAgLy8g
VGhpcyBpcyB3aHkgcmlnaHQgbWFyZ2luIGNoZWNrcyB0aGUgY3VycmVudCBvZmZzZXQuIEFuZCB0
aGlzIGlzIG9rYXkgdG8gZG8gYmVjYXVzZSBKYXZhU2NyaXB0IGNhbid0IGJlIHdyaXR0ZW4gcmln
aHQtdG8tbGVmdC4KKyAgICAgICAgdmFyIGlzU3BhY2VSZWdleHAgPSAvXHMvOworICAgICAgICB2
YXIgc2hvdWxkSGF2ZUxlZnRNYXJnaW4gPSBjdXJyZW50T2Zmc2V0ICE9PSAwICYmICFpc1NwYWNl
UmVnZXhwLnRlc3Qoc291cmNlU3RyaW5nW2N1cnJlbnRPZmZzZXQgLSAxXSk7CisgICAgICAgIHZh
ciBzaG91bGRIYXZlUmlnaHRNYXJnaW4gPSAhaXNTcGFjZVJlZ2V4cC50ZXN0KHNvdXJjZVN0cmlu
Z1tjdXJyZW50T2Zmc2V0XSk7CisgICAgICAgIHZhciB0eXBlVG9rZW4gPSBuZXcgV2ViSW5zcGVj
dG9yLlR5cGVUb2tlblZpZXcodGhpcywgc2hvdWxkSGF2ZVJpZ2h0TWFyZ2luLCBzaG91bGRIYXZl
TGVmdE1hcmdpbiwgdHlwZVRva2VuVGl0bGVUeXBlLCBmdW5jdGlvbk9yVmFyaWFibGVOYW1lKTsK
KyAgICAgICAgdmFyIGJvb2ttYXJrID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3Iuc2V0SW5s
aW5lV2lkZ2V0KHRva2VuUG9zaXRpb24sIHR5cGVUb2tlbi5lbGVtZW50KTsKKyAgICAgICAgbm9k
ZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbiA9IHR5cGVUb2tlbjsKKyAgICAgICAgdGhpcy5fdHlw
ZVRva2VuTm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtz
LnB1c2goYm9va21hcmspOworICAgIH0sCisKKyAgICBfdXBkYXRlVHlwZVRva2Vuc0ZvckVhY2hO
b2RlOiBmdW5jdGlvbihub2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsK
KyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5j
dGlvbkRlY2xhcmF0aW9uOgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIG5vZGUucGFyYW1z
LmZvckVhY2goZnVuY3Rpb24ocGFyYW0pIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyYW0uYXR0
YWNobWVudHMuX190eXBlVG9rZW4pCisgICAgICAgICAgICAgICAgICAgIHBhcmFtLmF0dGFjaG1l
bnRzLl9fdHlwZVRva2VuLnVwZGF0ZShwYXJhbS5hdHRhY2htZW50cy50eXBlcyk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIGlmIChub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuKQor
ICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4udXBkYXRlKG5vZGUu
YXR0YWNobWVudHMucmV0dXJuVHlwZXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJh
dG9yOgorICAgICAgICAgICAgaWYgKG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4pCisgICAg
ICAgICAgICAgICAgbm9kZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbi51cGRhdGUobm9kZS5hdHRh
Y2htZW50cy50eXBlcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0sCisK
KyAgICBfdHJhbnNsYXRlVG9PZmZzZXRBZnRlckZ1bmN0aW9uUGFyYW1ldGVyTGlzdDogZnVuY3Rp
b24obm9kZSwgb2Zmc2V0LCBzb3VyY2VTdHJpbmcpCisgICAgeworICAgICAgICAvLyBUaGUgYXNz
dW1wdGlvbiBoZXJlIGlzIHRoYXQgd2UgZ2V0IHRoZSBvZmZzZXQgc3RhcnRpbmcgYXQgdGhlIGZ1
bmN0aW9uIGtleXdvcmQgKG9yIGFmdGVyIHRoZSBnZXQvc2V0IGtleXdvcmRzKS4KKyAgICAgICAg
Ly8gV2Ugd2lsbCByZXR1cm4gdGhlIG9mZnNldCBmb3IgdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMg
aW4gdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorICAgICAgICAvLyBBbGwgdGhpcyBjb2RlIGlz
IGp1c3QgYSB3YXkgdG8gZmluZCB0aGlzIHBhcmVudGhlc2lzIHdoaWxlIGlnbm9yaW5nIGNvbW1l
bnRzLgorCisgICAgICAgIHZhciBpc011bHRpTGluZUNvbW1lbnQgPSBmYWxzZTsKKyAgICAgICAg
dmFyIGlzU2luZ2xlTGluZUNvbW1lbnQgPSBmYWxzZTsKKyAgICAgICAgdmFyIHNob3VsZElnbm9y
ZSA9IGZhbHNlOworCisgICAgICAgIGZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoY2hhcikKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gUmVmZXJlbmNlIEVjbWFTY3JpcHQgNSBncmFtbWFyIGZv
ciBzaW5nbGUgbGluZSBjb21tZW50cyBhbmQgbGluZSB0ZXJtaW5hdG9yczoKKyAgICAgICAgICAg
IC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy03
LjMKKyAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21h
LTI2Mi81LjEvI3NlYy03LjQKKyAgICAgICAgICAgIHJldHVybiBjaGFyID09PSAiXG4iIHx8IGNo
YXIgPT09ICJcciIgfHwgY2hhciA9PT0gIlx1MjAyOCIgfHwgY2hhciA9PT0gIlx1MjAyOSI7Cisg
ICAgICAgIH0KKworICAgICAgICB3aGlsZSAoKHNvdXJjZVN0cmluZ1tvZmZzZXRdICE9PSAiKSIg
fHwgc2hvdWxkSWdub3JlKSAmJiBvZmZzZXQgPCBzb3VyY2VTdHJpbmcubGVuZ3RoKSB7CisgICAg
ICAgICAgICBpZiAoaXNTaW5nbGVMaW5lQ29tbWVudCAmJiBpc0xpbmVUZXJtaW5hdG9yKHNvdXJj
ZVN0cmluZ1tvZmZzZXRdKSkgeworICAgICAgICAgICAgICAgIGlzU2luZ2xlTGluZUNvbW1lbnQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBzaG91bGRJZ25vcmUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoaXNNdWx0aUxpbmVDb21tZW50ICYmIHNvdXJjZVN0cmluZ1tvZmZzZXRd
ID09PSAiKiIgJiYgc291cmNlU3RyaW5nW29mZnNldCArIDFdID09PSAiLyIpIHsKKyAgICAgICAg
ICAgICAgICBpc011bHRpTGluZUNvbW1lbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBzaG91
bGRJZ25vcmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBvZmZzZXQrKzsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoIXNob3VsZElnbm9yZSAmJiBzb3VyY2VTdHJpbmdbb2Zmc2V0XSA9PT0gIi8i
KSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0Kys7CisgICAgICAgICAgICAgICAgaWYgKHNvdXJj
ZVN0cmluZ1tvZmZzZXRdID09PSAiKiIpCisgICAgICAgICAgICAgICAgICAgIGlzTXVsdGlMaW5l
Q29tbWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc291cmNlU3RyaW5nW29m
ZnNldF0gPT09ICIvIikKKyAgICAgICAgICAgICAgICAgICAgaXNTaW5nbGVMaW5lQ29tbWVudCA9
IHRydWU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkJhZCBwYXJzaW5nLiBDb3VsZG4ndCBwYXJzZSBjb21tZW50IHByZWFtYmxlLiIp
OworICAgICAgICAgICAgICAgIHNob3VsZElnbm9yZSA9IHRydWU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIG9mZnNldCsrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG9mZnNl
dCArIDE7CisgICAgfSwKKworICAgIF9jbGVhclR5cGVUb2tlbnM6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgewor
ICAgICAgICAgICAgbm9kZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbiA9IG51bGw7CisgICAgICAg
IH0pOworICAgICAgICB0aGlzLl90eXBlVG9rZW5Cb29rbWFya3MuZm9yRWFjaChmdW5jdGlvbihi
b29rbWFyaykgeworICAgICAgICAgICAgYm9va21hcmsuY2xlYXIoKTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgdGhpcy5fdHlwZVRva2VuTm9kZXMgPSBbXTsKKyAgICAgICAgdGhpcy5fdHlwZVRv
a2VuQm9va21hcmtzID0gW107CisgICAgfSwKKworICAgIF9jbGVhclRpbWVvdXRJZk5lZWRlZDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyKSB7
CisgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkZW50aWZpZXIpOworICAg
ICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICB9CisgICAg
fQorfTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9O
YXZpZ2F0aW9uSXRlbVR5cGVzLnN2Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdhdGlvbkl0ZW1UeXBlcy5zdmcJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMvTmF2aWdh
dGlvbkl0ZW1UeXBlcy5zdmcJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2IEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiPz4KKzwhLS0gQ29weXJpZ2h0IMKpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLiAtLT4KKzxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNCAxNCI+CisgICAgPHJlY3QgY2xhc3M9InN0
cm9rZWQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIHg9IjAuNSIgeT0iMS4wIiB3aWR0aD0i
MTIiIGhlaWdodD0iMTIiIHJ4PSIyIi8+CisgICAgPHBhdGggY2xhc3M9InN0cm9rZWQiIGZpbGw9
Im5vbmUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIGQ9Ik0gNi41IDUu
NSBMIDYuNSA5LjUgTSA0LjAgNC41IEwgOS4wIDQuNSIvPgorPC9zdmc+CkluZGV4OiBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMJ
KHJldmlzaW9uIDE3Mjk2OSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01vZGVscy9TY3JpcHQuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsMTEgQEAgV2Vi
SW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9yZXNv
dXJjZTsKICAgICB9LAogCisgICAgZ2V0IHNjcmlwdFN5bnRheFRyZWUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX3NjcmlwdFN5bnRheFRyZWU7CisgICAgfSwKKwogICAgIGNhblJlcXVl
c3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIC8vIFdlIGNh
biByZXF1ZXN0IGNvbnRlbnQgaWYgd2UgaGF2ZSBhbiBpZC4KSW5kZXg6IFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHRT
eW50YXhUcmVlLmpzCShyZXZpc2lvbiAxNzI5NjkpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMTcyLDggKzE3Miw4IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlw
ZSAKICAgICAgICAgaWYgKCF0aGlzLl9wYXJzZWRTdWNjZXNzZnVsbHkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKHN0YXJ0Tm9kZS5fYXR0YWNobWVudHMuX2hhc05v
bkVtcHR5UmV0dXJuU3RhdGVtZW50ICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAgICByZXR1cm4g
c3RhcnROb2RlLl9hdHRhY2htZW50cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQ7CisgICAg
ICAgIGlmIChzdGFydE5vZGUuYXR0YWNobWVudHMuX2hhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50
ICE9PSB1bmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm4gc3RhcnROb2RlLmF0dGFjaG1lbnRz
Ll9oYXNOb25FbXB0eVJldHVyblN0YXRlbWVudDsKIAogICAgICAgICBmdW5jdGlvbiByZW1vdmVG
dW5jdGlvbnNGaWx0ZXIobm9kZSkKICAgICAgICAgewpAQCAtMTkxLDE5ICsxOTEsMjIgQEAgV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlIAogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgICAKLSAgICAgICAgc3RhcnROb2RlLl9hdHRhY2htZW50cy5faGFzTm9u
RW1wdHlSZXR1cm5TdGF0ZW1lbnQgPSBoYXNOb25FbXB0eVJldHVyblN0YXRlbWVudDsKKyAgICAg
ICAgc3RhcnROb2RlLmF0dGFjaG1lbnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRlbWVudCA9IGhh
c05vbkVtcHR5UmV0dXJuU3RhdGVtZW50OwogCiAgICAgICAgIHJldHVybiBoYXNOb25FbXB0eVJl
dHVyblN0YXRlbWVudDsKICAgICB9LAogCi0gICAgdXBkYXRlVHlwZXM6IGZ1bmN0aW9uKHNvdXJj
ZUlELCBub2Rlc1RvVXBkYXRlLCBjYWxsYmFjaykgCisgICAgdXBkYXRlVHlwZXM6IGZ1bmN0aW9u
KG5vZGVzVG9VcGRhdGUsIGNhbGxiYWNrKQogICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQo
UnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk7CiAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KEFycmF5LmlzQXJyYXkobm9kZXNUb1VwZGF0ZSkgJiYgdGhpcy5f
cGFyc2VkU3VjY2Vzc2Z1bGx5KTsKKwogICAgICAgICBpZiAoIXRoaXMuX3BhcnNlZFN1Y2Nlc3Nm
dWxseSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB2YXIgYWxsUmVxdWVzdHMgPSBb
XTsKICAgICAgICAgdmFyIGFsbFJlcXVlc3ROb2RlcyA9IFtdOworICAgICAgICB2YXIgc291cmNl
SUQgPSB0aGlzLl9zY3JpcHQuaWQ7CiAKICAgICAgICAgZm9yICh2YXIgbm9kZSBvZiBub2Rlc1Rv
VXBkYXRlKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgewpAQCAtMjQ5LDkgKzI1
Miw5IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZSAKICAgICAgICAg
ICAgICAgICB2YXIgbm9kZSA9IGFsbFJlcXVlc3ROb2Rlc1tpXTsKICAgICAgICAgICAgICAgICB2
YXIgdHlwZUluZm9ybWF0aW9uID0gdHlwZUluZm9ybWF0aW9uQXJyYXlbaV07CiAgICAgICAgICAg
ICAgICAgaWYgKGFsbFJlcXVlc3RzW2ldLnR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3IgPT09IFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3Iu
RnVuY3Rpb25SZXR1cm4pCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuX2F0dGFjaG1lbnRzLl9y
ZXR1cm5UeXBlcyA9IHR5cGVJbmZvcm1hdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5h
dHRhY2htZW50cy5yZXR1cm5UeXBlcyA9IHR5cGVJbmZvcm1hdGlvbjsKICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlcyA9IHR5
cGVJbmZvcm1hdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5hdHRhY2htZW50cy50eXBl
cyA9IHR5cGVJbmZvcm1hdGlvbjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FsbGJh
Y2soKTsKQEAgLTc3NSw3ICs3NzgsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5w
cm90b3R5cGUgCiAgICAgICAgIAogICAgICAgICByZXN1bHQucmFuZ2UgPSBub2RlLnJhbmdlOwog
ICAgICAgICAvLyBUaGlzIGlzIGFuIG9iamVjdCBmb3Igd2hpY2ggeW91IGNhbiBhZGQgZmllbGRz
IHRvIGFuIEFTVCBub2RlIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgcG9sbHV0aW5nIHRoZSBzeW50
YXgtcmVsYXRlZCBmaWVsZHMgb2YgdGhlIG5vZGUuCi0gICAgICAgIHJlc3VsdC5fYXR0YWNobWVu
dHMgPSB7fTsgCisgICAgICAgIHJlc3VsdC5hdHRhY2htZW50cyA9IHt9OwogCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvU2NyaXB0Q29udGVudFZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2NyaXB0Q29udGVudFZpZXcuanMJKHJl
dmlzaW9uIDE3Mjk2OSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1NjcmlwdENvbnRlbnRWaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSwxNSBA
QCBXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcgPSBmdW5jdGlvCiAgICAgdGhpcy5fcHJl
dHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuQWN0aXZhdGVC
dXR0b25OYXZpZ2F0aW9uSXRlbSgicHJldHR5LXByaW50IiwgdG9vbFRpcCwgYWN0aXZhdGVkVG9v
bFRpcCwgY3VybGV5QnJhY2VzSW1hZ2Uuc3JjLCBjdXJsZXlCcmFjZXNJbWFnZS53aWR0aCwgY3Vy
bGV5QnJhY2VzSW1hZ2UuaGVpZ2h0KTsKICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmln
YXRpb25JdGVtLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25J
dGVtLkV2ZW50LkNsaWNrZWQsIHRoaXMuX3RvZ2dsZVByZXR0eVByaW50LCB0aGlzKTsKICAgICB0
aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSBmYWxzZTsgLy8g
RW5hYmxlZCB3aGVuIHRoZSB0ZXh0IGVkaXRvciBpcyBwb3B1bGF0ZWQgd2l0aCBjb250ZW50Lgor
CisgICAgdmFyIHNob3dUeXBlc0ltYWdlU2l6ZSA9IChXZWJJbnNwZWN0b3IuUGxhdGZvcm0uaXNM
ZWdhY3lNYWNPUyA/IDE1IDogMTYpOworICAgIHZhciB0b29sVGlwVHlwZXMgPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlNob3cgdHlwZSBpbmZvcm1hdGlvbiIpOworICAgIHZhciBhY3RpdmF0ZWRU
b29sVGlwVHlwZXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhpZGUgdHlwZSBpbmZvcm1hdGlv
biIpOworICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtID0gbmV3IFdlYklu
c3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtKCJzaG93LXR5cGVzIiwgdG9vbFRp
cFR5cGVzLCBhY3RpdmF0ZWRUb29sVGlwVHlwZXMsICJJbWFnZXMvTmF2aWdhdGlvbkl0ZW1UeXBl
cy5zdmciLCBzaG93VHlwZXNJbWFnZVNpemUsIHNob3dUeXBlc0ltYWdlU2l6ZSk7CisgICAgdGhp
cy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgdGhpcy5fdG9nZ2xlVHlw
ZUFubm90YXRpb25zLCB0aGlzKTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9u
SXRlbS5lbmFibGVkID0gZmFsc2U7CisKKyAgICBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRU
eXBlSW5mb3JtYXRpb25TZXR0aW5nLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNldHRp
bmcuRXZlbnQuQ2hhbmdlZCwgdGhpcy5fc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0
aW5nQ2hhbmdlZCwgdGhpcyk7CiB9OwogCiBXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcu
U3R5bGVDbGFzc05hbWUgPSAic2NyaXB0IjsKQEAgLTcwLDcgKzc5LDcgQEAgV2ViSW5zcGVjdG9y
LlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZQogCiAgICAgZ2V0IG5hdmlnYXRpb25JdGVtcygp
CiAgICAgewotICAgICAgICByZXR1cm4gW3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlv
bkl0ZW1dOworICAgICAgICByZXR1cm4gW3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlv
bkl0ZW0sIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtXTsKICAgICB9LAogCiAg
ICAgZ2V0IHNjcmlwdCgpCkBAIC0yMDQsNiArMjEzLDggQEAgV2ViSW5zcGVjdG9yLlNjcmlwdENv
bnRlbnRWaWV3LnByb3RvdHlwZQogICAgIF9jb250ZW50RGlkUG9wdWxhdGU6IGZ1bmN0aW9uKGV2
ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRl
bS5lbmFibGVkID0gdGhpcy5fdGV4dEVkaXRvci5jYW5CZUZvcm1hdHRlZCgpOworICAgICAgICB0
aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gdGhpcy5fdGV4dEVk
aXRvci5jYW5TaG93VHlwZUFubm90YXRpb25zKCk7CisgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1
dHRvbk5hdmlnYXRpb25JdGVtLmFjdGl2YXRlZCA9IFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlw
dFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWU7CiAgICAgfSwKIAogICAgIF90b2dnbGVQcmV0
dHlQcmludDogZnVuY3Rpb24oZXZlbnQpCkBAIC0yMTIsNiArMjIzLDE2IEBAIFdlYkluc3BlY3Rv
ci5TY3JpcHRDb250ZW50Vmlldy5wcm90b3R5cGUKICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5m
b3JtYXR0ZWQgPSBhY3RpdmF0ZWQ7CiAgICAgfSwKIAorICAgIF90b2dnbGVUeXBlQW5ub3RhdGlv
bnM6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci50b2dn
bGVUeXBlQW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAgX3Nob3dKYXZhU2NyaXB0VHlwZUlu
Zm9ybWF0aW9uU2V0dGluZ0NoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAg
dGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gV2ViSW5zcGVj
dG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZTsKKyAgICB9LAor
CiAgICAgX3RleHRFZGl0b3JGb3JtYXR0aW5nRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKICAg
ICB7CiAgICAgICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZh
dGVkID0gdGhpcy5fdGV4dEVkaXRvci5mb3JtYXR0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VD
b2RlVGV4dEVkaXRvci5qcwkocmV2aXNpb24gMTcyOTY5KQorKysgU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDYgKzM2LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9y
ID0gZnVuYwogCiAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuY2FsbCh0aGlzLCBudWxsLCBu
dWxsLCB0aGlzKTsKIAorICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciA9IG51bGw7CisgICAg
dGhpcy5fdHlwZVRva2VuU2Nyb2xsSGFuZGxlciA9IG51bGw7CisKICAgICAvLyBGSVhNRTogQ3Vy
cmVudGx5IHRoaXMganVzdCBqdW1wcyBiZXR3ZWVuIHJlc291cmNlcyBhbmQgcmVsYXRlZCBzb3Vy
Y2UgbWFwIHJlc291cmNlcy4gSXQgZG9lc24ndCAianVtcCB0byBzeW1ib2wiIHlldC4KICAgICB0
aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKCk7CiAKQEAgLTgzLDYgKzg2
LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLlBvcG92ZQogV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkhvdmVyZWRFeHByZXNzaW9uSGlnaGxpZ2h0U3R5bGVD
bGFzc05hbWUgPSAiaG92ZXJlZC1leHByZXNzaW9uLWhpZ2hsaWdodCI7CiBXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub01vdXNlT3ZlclRva2VuVG9NYWtlSG92ZXJl
ZFRva2VuID0gNTAwOwogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1cmF0aW9u
VG9Nb3VzZU91dE9mSG92ZXJlZFRva2VuVG9SZWxlYXNlID0gMTAwMDsKK1dlYkluc3BlY3Rvci5T
b3VyY2VDb2RlVGV4dEVkaXRvci5EdXJhdGlvblRvVXBkYXRlVHlwZVRva2Vuc0FmdGVyU2Nyb2xs
aW5nID0gMTAwOwogCiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuQXV0b0Zvcm1h
dE1pbmltdW1MaW5lTGVuZ3RoID0gNTAwOwogCkBAIC0xMDEsNiArMTA1LDE0IEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgcmV0dXJuIHRoaXMuX3Nv
dXJjZUNvZGU7CiAgICAgfSwKIAorICAgIHNob3duOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2hvd24uY2FsbCh0aGlzKTsKKwor
ICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQorICAgICAgICAgICAgdGhpcy5f
dHlwZVRva2VuQW5ub3RhdG9yLnJlc3VtZSgpOworICAgIH0sCisKICAgICBoaWRkZW46IGZ1bmN0
aW9uKCkKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5o
aWRkZW4uY2FsbCh0aGlzKTsKQEAgLTExMCw2ICsxMjIsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIHRoaXMuX2Rpc21pc3NQb3BvdmVyKCk7CiAg
ICAgICAgIAogICAgICAgICB0aGlzLl9kaXNtaXNzRWRpdGluZ0NvbnRyb2xsZXIodHJ1ZSk7CisK
KyAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvcikKKyAgICAgICAgICAgIHRoaXMu
X3R5cGVUb2tlbkFubm90YXRvci5wYXVzZSgpOwogICAgIH0sCiAKICAgICBjbG9zZTogZnVuY3Rp
b24oKQpAQCAtMTM1LDYgKzE1MCw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5wcm90b3QKIAogICAgICAgICBXZWJJbnNwZWN0b3Iubm90aWZpY2F0aW9ucy5yZW1vdmVFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5Ob3RpZmljYXRpb24uR2xvYmFsTW9kaWZpZXJLZXlzRGlk
Q2hhbmdlLCB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlLCB0aGlzKTsK
ICAgICAgICAgdGhpcy5fc291cmNlQ29kZS5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlLkV2ZW50LlNvdXJjZU1hcEFkZGVkLCB0aGlzLl9zb3VyY2VDb2RlU291cmNl
TWFwQWRkZWQsIHRoaXMpOworCisgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5TY3JvbGxIYW5k
bGVyKQorICAgICAgICAgICAgdGhpcy5fZGlzYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFu
bm90YXRvcigpOwogICAgIH0sCiAKICAgICBjYW5CZUZvcm1hdHRlZDogZnVuY3Rpb24oKQpAQCAt
MTQ5LDYgKzE2NywxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
CiAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuY2FuQmVG
b3JtYXR0ZWQuY2FsbCh0aGlzKTsKICAgICB9LAogCisgICAgY2FuU2hvd1R5cGVBbm5vdGF0aW9u
czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhdGhpcy5fdHlwZVRva2VuQW5u
b3RhdG9yOworICAgIH0sCisKICAgICBjdXN0b21QZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVy
eSkKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIHNlYXJjaFJlc3VsdENhbGxiYWNrKGVycm9yLCBt
YXRjaGVzKQpAQCAtMjM0LDYgKzI1Nyw1NSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IucHJvdG90CiAgICAgICAgICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZU1hcmtlcnMocmFu
Z2UpOwogICAgIH0sCiAKKyAgICB0b2dnbGVUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIGlmICghdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIHZhciBpc0FjdGl2YXRlZCA9IHRoaXMuX3R5cGVUb2tl
bkFubm90YXRvci50b2dnbGVUeXBlQW5ub3RhdGlvbnMoKTsKKyAgICAgICAgaWYgKGlzQWN0aXZh
dGVkKSB7CisgICAgICAgICAgICBSdW50aW1lQWdlbnQuZW5hYmxlVHlwZVByb2ZpbGVyKCk7Cisg
ICAgICAgICAgICB0aGlzLl9lbmFibGVTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3Io
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGRpc2FibGUgdHlwZSBwcm9m
aWxpbmcgd2hlbiBleGl0aW5nIHRoZSBpbnNwZWN0b3IsIHNvIG5vIG5lZWQgdG8gY2FsbCBpdCBo
ZXJlLiBJZiB3ZSB3ZXJlCisgICAgICAgICAgICAvLyB0byBjYWxsIGl0IGhlcmUsIHdlIHdvdWxk
IGhhdmUgSmF2YVNjcmlwdENvcmUgY29tcGlsZSBvdXQgYWxsIHRoZSBuZWNlc3NhcnkgdHlwZSBw
cm9maWxpbmcgaW5mb3JtYXRpb24sCisgICAgICAgICAgICAvLyBzbyBpZiBhIHVzZXIgd2VyZSB0
byBxdWlja2x5IHByZXNzIHRoZW4gdW5wcmVzcyB0aGUgYnV0dG9uLCB3ZSB3b3VsZG4ndCBiZSBh
YmxlIHRvIHJlLXNob3cgdHlwZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIHRoaXMuX2Rpc2Fi
bGVTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKyAgICAgICAgfQorICAgICAg
ICBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLnZhbHVl
ID0gaXNBY3RpdmF0ZWQ7CisKKyAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRy
b2xsZXJTdGF0ZSgpOworICAgICAgICByZXR1cm4gaXNBY3RpdmF0ZWQ7CisgICAgfSwKKworICAg
IHNob3dQb3BvdmVyRm9yVHlwZXM6IGZ1bmN0aW9uKHR5cGVzLCBib3VuZHMsIHRpdGxlKQorICAg
IHsKKyAgICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
KyAgICAgICAgY29udGVudC5jbGFzc05hbWUgPSAib2JqZWN0IGV4cGFuZGFibGUiOworCisgICAg
ICAgIHZhciB0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAg
ICAgICAgdGl0bGVFbGVtZW50LmNsYXNzTmFtZSA9ICJ0aXRsZSI7CisgICAgICAgIHRpdGxlRWxl
bWVudC50ZXh0Q29udGVudCA9IHRpdGxlOworICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKHRp
dGxlRWxlbWVudCk7CisKKyAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlR5
cGVQcm9wZXJ0aWVzU2VjdGlvbih0eXBlcyk7CisgICAgICAgIHNlY3Rpb24uZXhwYW5kZWQgPSB0
cnVlOworICAgICAgICBzZWN0aW9uLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiYm9keSIpOworICAg
ICAgICBjb250ZW50LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxlbWVudCk7CisKKyAgICAgICAgdGhp
cy5fc2hvd1BvcG92ZXIoY29udGVudCwgYm91bmRzKTsKKyAgICB9LAorCisgICAgLy8gUHJvdGVj
dGVkCisKKyAgICBwcmV0dHlQcmludDogZnVuY3Rpb24ocHJldHR5KQorICAgIHsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnByZXR0eVByaW50LmNhbGwodGhpcywg
cHJldHR5KTsKKworICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yICYmIHRoaXMu
X3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tl
bkFubm90YXRvci5yZXNldCgpOworICAgIH0sCisKICAgICAvLyBQcml2YXRlCiAKICAgICBfdW5m
b3JtYXR0ZWRMaW5lSW5mb0ZvckVkaXRvckxpbmVJbmZvOiBmdW5jdGlvbihsaW5lSW5mbykKQEAg
LTM1OCw2ICs0MzAsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
CiAKICAgICAgICAgdGhpcy5fY29udGVudFdpbGxQb3B1bGF0ZShjb250ZW50KTsKICAgICAgICAg
dGhpcy5zdHJpbmcgPSBjb250ZW50OworCisgICAgICAgIHRoaXMuX21ha2VUeXBlVG9rZW5Bbm5v
dGF0b3IoKTsKKwogICAgICAgICB0aGlzLl9jb250ZW50RGlkUG9wdWxhdGUoKTsKICAgICB9LAog
CkBAIC05NjcsMTIgKzEwNDIsMTYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9y
LnByb3RvdAogICAgIF9kZWJ1Z2dlckRpZFBhdXNlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAg
ICAgICAgIHRoaXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKKyAgICAg
ICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0
b3IuaXNBY3RpdmUpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVmcmVz
aCgpOwogICAgIH0sCiAKICAgICBfZGVidWdnZXJEaWRSZXN1bWU6IGZ1bmN0aW9uKGV2ZW50KQog
ICAgIHsKICAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgp
OwogICAgICAgICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOworICAgICAgICBpZiAodGhpcy5fdHlw
ZVRva2VuQW5ub3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkKKyAg
ICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZWZyZXNoKCk7CiAgICAgfSwKIAog
ICAgIF9zb3VyY2VDb2RlU291cmNlTWFwQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtOTg4LDYg
KzEwNjcsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAg
ICAgIHZhciBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJv
bGxlci5Nb2RlLk5vbmU7CiAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2Vy
LnBhdXNlZCkKICAgICAgICAgICAgIG1vZGUgPSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2Vu
VHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2YVNjcmlwdEV4cHJlc3Npb247CisgICAgICAgIGVs
c2UgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0
b3IuaXNBY3RpdmUpCisgICAgICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JU
b2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb247CiAg
ICAgICAgIGVsc2UgaWYgKHRoaXMuX2hhc0NvbG9yTWFya2VycygpKQogICAgICAgICAgICAgbW9k
ZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5N
YXJrZWRUb2tlbnM7CiAgICAgICAgIGVsc2UgaWYgKCh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNl
b2YgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlIHx8IHRoaXMuX3NvdXJjZUNvZGUuc291
cmNlTWFwcy5sZW5ndGggIT09IDApICYmIFdlYkluc3BlY3Rvci5tb2RpZmllcktleXMubWV0YUtl
eSAmJiAhV2ViSW5zcGVjdG9yLm1vZGlmaWVyS2V5cy5hbHRLZXkgJiYgIVdlYkluc3BlY3Rvci5t
b2RpZmllcktleXMuc2hpZnRLZXkpCkBAIC0xMDEwLDYgKzEwOTEsNyBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgICAgICB0aGlzLl9kaXNtaXNzUG9w
b3ZlcigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9u
OgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOgogICAgICAgICAgICAgdGhpcy50
b2tlblRyYWNraW5nQ29udHJvbGxlci5tb3VzZU92ZXJEZWxheUR1cmF0aW9uID0gV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1cmF0aW9uVG9Nb3VzZU92ZXJUb2tlblRvTWFrZUhv
dmVyZWRUb2tlbjsKICAgICAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW91
c2VPdXRSZWxlYXNlRGVsYXlEdXJhdGlvbiA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5EdXJhdGlvblRvTW91c2VPdXRPZkhvdmVyZWRUb2tlblRvUmVsZWFzZTsKICAgICAgICAg
ICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2xhc3NOYW1lRm9ySGlnaGxpZ2h0ZWRS
YW5nZSA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5Ib3ZlcmVkRXhwcmVzc2lv
bkhpZ2hsaWdodFN0eWxlQ2xhc3NOYW1lOwpAQCAtMTA3NSw2ICsxMTU3LDExIEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCisgICAgICAgIGlmICh0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vZGUg
PT09IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5K
YXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl90b2tlblRyYWNr
aW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbihjYW5kaWRh
dGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgaWYgKHRoaXMu
dG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW9kZSA9PT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JU
b2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk1hcmtlZFRva2VucykgewogICAgICAgICAgICAg
dmFyIG1hcmtlcnMgPSB0aGlzLm1hcmtlcnNBdFBvc2l0aW9uKGNhbmRpZGF0ZS5ob3ZlcmVkVG9r
ZW5SYW5nZS5zdGFydCk7CiAgICAgICAgICAgICBpZiAobWFya2Vycy5sZW5ndGggPiAwKQpAQCAt
MTEzMCwyNiArMTIxNyw3MyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJv
dG90CiAgICAgICAgIERlYnVnZ2VyQWdlbnQuZXZhbHVhdGVPbkNhbGxGcmFtZS5pbnZva2Uoe2Nh
bGxGcmFtZUlkOiBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZS5p
ZCwgZXhwcmVzc2lvbjogY2FuZGlkYXRlLmV4cHJlc3Npb24sIG9iamVjdEdyb3VwOiAicG9wb3Zl
ciIsIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZTogdHJ1ZX0sIHBvcHVsYXRl
LmJpbmQodGhpcykpOwogICAgIH0sCiAKLSAgICBfc2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGNvbnRl
bnQpCisgICAgX3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0VHlw
ZUluZm9ybWF0aW9uOiBmdW5jdGlvbihjYW5kaWRhdGUpCisgICAgeworICAgICAgICBjb25zb2xl
LmFzc2VydChjYW5kaWRhdGUuZXhwcmVzc2lvbik7CisKKyAgICAgICAgdmFyIHNvdXJjZUNvZGUg
PSB0aGlzLl9zb3VyY2VDb2RlOworICAgICAgICB2YXIgc291cmNlSUQgPSBzb3VyY2VDb2RlLnNj
cmlwdHNbMF0uaWQ7CisgICAgICAgIHZhciByYW5nZSA9IGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5S
YW5nZTsKKyAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuY3VycmVudFBvc2l0aW9uVG9PcmlnaW5h
bE9mZnNldCh7bGluZTogcmFuZ2Uuc3RhcnQubGluZSwgY2g6IHJhbmdlLnN0YXJ0LmNofSk7CisK
KyAgICAgICAgdmFyIGFsbFJlcXVlc3RzID0gW3sKKyAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlv
bkRlc2NyaXB0b3I6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNl
YXJjaERlc2NyaXB0b3IuTm9ybWFsRXhwcmVzc2lvbiwKKyAgICAgICAgICAgIHNvdXJjZUlEOiBz
b3VyY2VJRCwKKyAgICAgICAgICAgIGRpdm90OiBvZmZzZXQKKyAgICAgICAgfV07CisKKyAgICAg
ICAgZnVuY3Rpb24gaGFuZGxlcihlcnJvciwgYWxsVHlwZXMpIHsKKyAgICAgICAgICAgIGlmIChl
cnJvcikKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChjYW5kaWRh
dGUgIT09IHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2FuZGlkYXRlKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoYWxsVHlwZXMubGVu
Z3RoID09PSAxKTsKKyAgICAgICAgICAgIGlmICghYWxsVHlwZXMubGVuZ3RoKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHZhciB0eXBlcyA9IGFsbFR5cGVzWzBdOworICAg
ICAgICAgICAgaWYgKHR5cGVzLmRpc3BsYXlUeXBlTmFtZSkgeworICAgICAgICAgICAgICAgIHZh
ciBwb3BvdmVyVGl0bGUgPSBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy50aXRsZUZvclBvcG92
ZXIoV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlZhcmlhYmxlLCBjYW5kaWRh
dGUuZXhwcmVzc2lvbik7CisgICAgICAgICAgICAgICAgdGhpcy5zaG93UG9wb3ZlckZvclR5cGVz
KHR5cGVzLCBudWxsLCBwb3BvdmVyVGl0bGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgUnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0
cyhhbGxSZXF1ZXN0cywgaGFuZGxlci5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgX3Nob3dQ
b3BvdmVyOiBmdW5jdGlvbihjb250ZW50LCBib3VuZHMpCiAgICAgewotICAgICAgICBjb25zb2xl
LmFzc2VydCh0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZSk7CisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2FuZGlkYXRlIHx8
IGJvdW5kcyk7CiAKKyAgICAgICAgdmFyIHNob3VsZEhpZ2hsaWdodFJhbmdlID0gZmFsc2U7CiAg
ICAgICAgIHZhciBjYW5kaWRhdGUgPSB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmNhbmRp
ZGF0ZTsKLSAgICAgICAgaWYgKCFjYW5kaWRhdGUpCi0gICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIC8vIElmIGJvdW5kcyBpcyBmYWxzZXksIHRoaXMgaXMgYSBwb3BvdmVyIGludHJvZHVjZWQg
ZnJvbSBhIGhvdmVyIGV2ZW50LgorICAgICAgICAvLyBPdGhlcndpc2UsIHRoaXMgaXMgY2FsbGVk
IGZyb20gVHlwZVRva2VuQW5ub3RhdG9yLgorICAgICAgICBpZiAoIWJvdW5kcykgeworICAgICAg
ICAgICAgaWYgKCFjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IGNvbnRlbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
UG9wb3ZlckRlYnVnZ2VyQ29udGVudFN0eWxlQ2xhc3NOYW1lKTsKKyAgICAgICAgICAgIHZhciBy
ZWN0cyA9IHRoaXMucmVjdHNGb3JSYW5nZShjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2UpOwor
ICAgICAgICAgICAgYm91bmRzID0gV2ViSW5zcGVjdG9yLlJlY3QudW5pb25PZlJlY3RzKHJlY3Rz
KTsKKworICAgICAgICAgICAgc2hvdWxkSGlnaGxpZ2h0UmFuZ2UgPSB0cnVlOworICAgICAgICB9
CiAKLSAgICAgICAgdmFyIHJlY3RzID0gdGhpcy5yZWN0c0ZvclJhbmdlKGNhbmRpZGF0ZS5ob3Zl
cmVkVG9rZW5SYW5nZSk7Ci0gICAgICAgIHZhciBib3VuZHMgPSBXZWJJbnNwZWN0b3IuUmVjdC51
bmlvbk9mUmVjdHMocmVjdHMpOwogCi0gICAgICAgIHRoaXMuX3BvcG92ZXIgPSB0aGlzLl9wb3Bv
dmVyIHx8IG5ldyBXZWJJbnNwZWN0b3IuUG9wb3Zlcih0aGlzKTsKKyAgICAgICAgY29udGVudC5j
bGFzc0xpc3QuYWRkKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5Qb3BvdmVyRGVi
dWdnZXJDb250ZW50U3R5bGVDbGFzc05hbWUpOworCisgICAgICAgIGlmICh0aGlzLl9wb3BvdmVy
KQorICAgICAgICAgICAgdGhpcy5fZGlzbWlzc1BvcG92ZXIoKTsKKyAgICAgICAgdGhpcy5fcG9w
b3ZlciA9IG5ldyBXZWJJbnNwZWN0b3IuUG9wb3Zlcih0aGlzKTsKICAgICAgICAgdGhpcy5fcG9w
b3Zlci5jb250ZW50ID0gY29udGVudDsKICAgICAgICAgdGhpcy5fcG9wb3Zlci5wcmVzZW50KGJv
dW5kcy5wYWQoNSksIFtXZWJJbnNwZWN0b3IuUmVjdEVkZ2UuTUlOX1ksIFdlYkluc3BlY3Rvci5S
ZWN0RWRnZS5NQVhfWSwgV2ViSW5zcGVjdG9yLlJlY3RFZGdlLk1BWF9YXSk7CiAKLSAgICAgICAg
dGhpcy5fdHJhY2tQb3BvdmVyRXZlbnRzKCk7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gaGlnaGxp
Z2h0IHRoZSByYW5nZSBhZnRlciBjcmVhdGluZyB0aGUgbmV3IHBvcG92ZXIgYmVjYXVzZSBkaXNt
aXNzaW5nIHRoZSBvbGQgcG9wb3ZlciB3aWxsIHJlbW92ZSB0aGUgY3VycmVudCBoaWdobGlnaHQu
CisgICAgICAgIGlmIChzaG91bGRIaWdobGlnaHRSYW5nZSkKKyAgICAgICAgICAgIHRoaXMudG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIuaGlnaGxpZ2h0UmFuZ2UoY2FuZGlkYXRlLmV4cHJlc3Npb25S
YW5nZSk7CiAKLSAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5oaWdobGlnaHRS
YW5nZShjYW5kaWRhdGUuZXhwcmVzc2lvblJhbmdlKTsKKyAgICAgICAgdGhpcy5fdHJhY2tQb3Bv
dmVyRXZlbnRzKCk7CiAgICAgfSwKIAogICAgIF9zaG93UG9wb3ZlckZvckZ1bmN0aW9uOiBmdW5j
dGlvbihkYXRhKQpAQCAtMTM4MCw2ICsxNTE0LDYxIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgdGhpcy5faWdub3JlQ29udGVudERpZENoYW5nZS0t
OwogCiAgICAgICAgIGRlbGV0ZSB0aGlzLl9lZGl0aW5nQ29udHJvbGxlcjsKKyAgICB9LAorCisg
ICAgX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3I6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlm
ICghUnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgc2NyaXB0ID0gbnVsbDsKKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgbmVlZHMgdG8gbWUgbW9kaWZpZWQgdG8gd29yayB3aXRoIEhUTUwgZmls
ZXMgd2l0aCBpbmxpbmUgc2NyaXB0IHRhZ3MuCisgICAgICAgIGlmICh0aGlzLl9zb3VyY2VDb2Rl
IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNjcmlwdCkKKyAgICAgICAgICAgIHNjcmlwdCA9IHRo
aXMuX3NvdXJjZUNvZGU7CisgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFu
Y2VvZiBXZWJJbnNwZWN0b3IuUmVzb3VyY2UgJiYgdGhpcy5fc291cmNlQ29kZS50eXBlID09PSBX
ZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5TY3JpcHQgJiYgdGhpcy5fc291cmNlQ29kZS5zY3Jp
cHRzLmxlbmd0aCkKKyAgICAgICAgICAgIHNjcmlwdCA9IHRoaXMuX3NvdXJjZUNvZGUuc2NyaXB0
c1swXTsKKworICAgICAgICBpZiAoIXNjcmlwdCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLlR5cGVUb2tl
bkFubm90YXRvcih0aGlzLCBzY3JpcHQpOworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnNob3dK
YXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZSkgeworICAgICAgICAgICAgdGhp
cy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlc2V0KCk7CisgICAgICAgICAgICB0aGlzLl9lbmFibGVT
Y3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKyAgICAgICAgfQorICAgIH0sCisK
KyAgICBfZW5hYmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICAvLyBQYXVzZSB1cGRhdGluZyB0eXBlIHRva2VucyB3aGlsZSBzY3Jv
bGxpbmcgdG8gcHJldmVudCBmcmFtZSBsb3NzLgorICAgICAgICB0aGlzLl90eXBlVG9rZW5TY3Jv
bGxIYW5kbGVyID0gdGhpcy5fbWFrZVR5cGVUb2tlblNjcm9sbEV2ZW50SGFuZGxlcigpOworICAg
ICAgICB0aGlzLmFkZFNjcm9sbEhhbmRsZXIodGhpcy5fdHlwZVRva2VuU2Nyb2xsSGFuZGxlcik7
CisgICAgfSwKKworICAgIF9kaXNhYmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9y
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLnJlbW92ZVNjcm9sbEhhbmRsZXIodGhp
cy5fdHlwZVRva2VuU2Nyb2xsSGFuZGxlcik7CisgICAgICAgIHRoaXMuX3R5cGVUb2tlblNjcm9s
bEhhbmRsZXIgPSBudWxsOworICAgIH0sCisKKyAgICBfbWFrZVR5cGVUb2tlblNjcm9sbEV2ZW50
SGFuZGxlcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHR5cGVUb2tlbkFubm90YXRv
ciA9IHRoaXMuX3R5cGVUb2tlbkFubm90YXRvcjsKKyAgICAgICAgdmFyIHRpbWVvdXRJZGVudGlm
aWVyID0gbnVsbDsKKyAgICAgICAgZnVuY3Rpb24gc2Nyb2xsSGFuZGxlcigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICh0aW1lb3V0SWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICBjbGVh
clRpbWVvdXQodGltZW91dElkZW50aWZpZXIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHR5cGVUb2tlbkFubm90YXRvci5wYXVzZSgpOworCisgICAgICAgICAgICB0aW1lb3V0
SWRlbnRpZmllciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGlt
ZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICAgICAgICAgIHR5cGVUb2tlbkFubm90YXRv
ci5yZXN1bWUoKTsKKyAgICAgICAgICAgIH0sIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5EdXJhdGlvblRvVXBkYXRlVHlwZVRva2Vuc0FmdGVyU2Nyb2xsaW5nKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBzY3JvbGxIYW5kbGVyOwogICAgIH0KIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRDb250ZW50Vmlldy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9UZXh0Q29udGVudFZpZXcuanMJKHJldmlzaW9uIDE3Mjk2OSkKKysrIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRDb250ZW50Vmlldy5qcwkod29ya2luZyBj
b3B5KQpAQCAtNTAsNiArNTAsMTUgQEAgV2ViSW5zcGVjdG9yLlRleHRDb250ZW50VmlldyA9IGZ1
bmN0aW9uKAogICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0gPSBuZXcg
V2ViSW5zcGVjdG9yLkFjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0oInByZXR0eS1wcmludCIs
IHRvb2xUaXAsIGFjdGl2YXRlZFRvb2xUaXAsIGN1cmxleUJyYWNlc0ltYWdlLnNyYywgY3VybGV5
QnJhY2VzSW1hZ2Uud2lkdGgsIGN1cmxleUJyYWNlc0ltYWdlLmhlaWdodCk7CiAgICAgdGhpcy5f
cHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCB0aGlzLl90b2dnbGVQcmV0
dHlQcmludCwgdGhpcyk7CiAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRl
bS5lbmFibGVkID0gdGhpcy5fdGV4dEVkaXRvci5jYW5CZUZvcm1hdHRlZCgpOworCisgICAgdmFy
IHNob3dUeXBlc0ltYWdlU2l6ZSA9IChXZWJJbnNwZWN0b3IuUGxhdGZvcm0uaXNMZWdhY3lNYWNP
UyA/IDE1IDogMTYpOworICAgIHZhciB0b29sVGlwVHlwZXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIlNob3cgdHlwZSBpbmZvcm1hdGlvbiIpOworICAgIHZhciBhY3RpdmF0ZWRUb29sVGlwVHlw
ZXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhpZGUgdHlwZSBpbmZvcm1hdGlvbiIpOworICAg
IHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtID0gbmV3IFdlYkluc3BlY3Rvci5B
Y3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtKCJzaG93LXR5cGVzIiwgdG9vbFRpcFR5cGVzLCBh
Y3RpdmF0ZWRUb29sVGlwVHlwZXMsICJJbWFnZXMvTmF2aWdhdGlvbkl0ZW1UeXBlcy5zdmciLCBz
aG93VHlwZXNJbWFnZVNpemUsIHNob3dUeXBlc0ltYWdlU2l6ZSk7CisgICAgdGhpcy5fc2hvd1R5
cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnV0
dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgZnVuY3Rpb24oKSB7fSwgdGhpcyk7Cisg
ICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IGZhbHNlOwor
CisgICAgV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5TZXR0aW5nLkV2ZW50LkNoYW5nZWQsIHRoaXMu
X3Nob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZ0NoYW5nZWQsIHRoaXMpOwogfTsK
IAogV2ViSW5zcGVjdG9yLlRleHRDb250ZW50Vmlldy5TdHlsZUNsYXNzTmFtZSA9ICJ0ZXh0IjsK
QEAgLTY2LDcgKzc1LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRDb250ZW50Vmlldy5wcm90b3R5cGUg
PQogCiAgICAgZ2V0IG5hdmlnYXRpb25JdGVtcygpCiAgICAgewotICAgICAgICByZXR1cm4gW3Ro
aXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW1dOworICAgICAgICByZXR1cm4gW3Ro
aXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0sIHRoaXMuX3Nob3dUeXBlc0J1dHRv
bk5hdmlnYXRpb25JdGVtXTsKICAgICB9LAogCiAgICAgcmV2ZWFsUG9zaXRpb246IGZ1bmN0aW9u
KHBvc2l0aW9uLCB0ZXh0UmFuZ2VUb1NlbGVjdCwgZm9yY2VVbmZvcm1hdHRlZCkKSW5kZXg6IFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRFZGl0b3IuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4
dEVkaXRvci5qcwkocmV2aXNpb24gMTcyOTY5KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvVGV4dEVkaXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTY3LDcg
KzE2Nyw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICB0aGlzLl9pZ25vcmVDb2RlTWlycm9yQ29udGVudERpZENo
YW5nZUV2ZW50Kys7Ci0gICAgICAgIHRoaXMuX3ByZXR0eVByaW50KGZvcm1hdHRlZCk7CisgICAg
ICAgIHRoaXMucHJldHR5UHJpbnQoZm9ybWF0dGVkKTsKICAgICAgICAgdGhpcy5faWdub3JlQ29k
ZU1pcnJvckNvbnRlbnREaWRDaGFuZ2VFdmVudC0tOwogICAgICAgICBjb25zb2xlLmFzc2VydCh0
aGlzLl9pZ25vcmVDb2RlTWlycm9yQ29udGVudERpZENoYW5nZUV2ZW50ID49IDApOwogCkBAIC0x
OTgsNiArMTk4LDExIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgcmV0dXJuIHRoaXMuaGFzRm9ybWF0dGVyKCk7CiAgICAgfSwKIAorICAgIGNhblNob3dU
eXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9LAorCiAgICAgZ2V0IHNlbGVjdGVkVGV4dFJhbmdlKCkKICAgICB7CiAgICAgICAgIHZh
ciBzdGFydCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKHRydWUpOwpAQCAtNjM5LDYgKzY0
NCwxNzMgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB9
CiAgICAgfSwKIAorICAgIHZpc2libGVSYW5nZU9mZnNldHM6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHZhciBzdGFydE9mZnNldCA9IG51bGw7CisgICAgICAgIHZhciBlbmRPZmZzZXQgPSBu
dWxsOworICAgICAgICB2YXIgdmlzaWJsZVJhbmdlID0gdGhpcy5fY29kZU1pcnJvci5nZXRWaWV3
cG9ydCgpOworCisgICAgICAgIGlmICh0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXApIHsKKyAgICAg
ICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRv
T3JpZ2luYWxPZmZzZXQoTWF0aC5tYXgodmlzaWJsZVJhbmdlLmZyb20gLSAxLCAwKSwgMCk7Cisg
ICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVk
VG9PcmlnaW5hbE9mZnNldCh2aXNpYmxlUmFuZ2UudG8gLSAxLCAwKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGhpcy5fY29kZU1pcnJvci5nZXREb2MoKS5p
bmRleEZyb21Qb3Moe2xpbmU6IHZpc2libGVSYW5nZS5mcm9tLCBjaDogMH0pOworICAgICAgICAg
ICAgZW5kT2Zmc2V0ID0gdGhpcy5fY29kZU1pcnJvci5nZXREb2MoKS5pbmRleEZyb21Qb3Moe2xp
bmU6IHZpc2libGVSYW5nZS50bywgY2g6IDB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB7c3RhcnRPZmZzZXQ6IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQ6IGVuZE9mZnNldH07CisgICAg
fSwKKworICAgIG9yaWdpbmFsT2Zmc2V0VG9DdXJyZW50UG9zaXRpb246IGZ1bmN0aW9uKG9mZnNl
dCkKKyAgICB7CisgICAgICAgIHZhciBwb3NpdGlvbiA9IG51bGw7CisgICAgICAgIGlmICh0aGlz
Ll9mb3JtYXR0ZXJTb3VyY2VNYXApIHsKKyAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IHRoaXMu
X2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQob2Zmc2V0KTsK
KyAgICAgICAgICAgIHBvc2l0aW9uID0ge2xpbmU6IGxvY2F0aW9uLmxpbmVOdW1iZXIsIGNoOiBs
b2NhdGlvbi5jb2x1bW5OdW1iZXJ9OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBvc2l0
aW9uID0gdGhpcy5fY29kZU1pcnJvci5nZXREb2MoKS5wb3NGcm9tSW5kZXgob2Zmc2V0KTsKKwor
ICAgICAgICByZXR1cm4gcG9zaXRpb247CisgICAgfSwKKworICAgIGN1cnJlbnRPZmZzZXRUb0N1
cnJlbnRQb3NpdGlvbjogZnVuY3Rpb24ob2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2NvZGVNaXJyb3IuZ2V0RG9jKCkucG9zRnJvbUluZGV4KG9mZnNldCk7CisgICAgfSwKKwor
ICAgIGN1cnJlbnRQb3NpdGlvblRvT3JpZ2luYWxPZmZzZXQ6IGZ1bmN0aW9uKHBvc2l0aW9uKQor
ICAgIHsKKyAgICAgICAgdmFyIG9mZnNldCA9IG51bGw7CisgICAgICAgIGlmICh0aGlzLl9mb3Jt
YXR0ZXJTb3VyY2VNYXApCisgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLl9mb3JtYXR0ZXJTb3Vy
Y2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldChwb3NpdGlvbi5saW5lLCBwb3NpdGlvbi5j
aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9rZW5UcmFja2lu
Z0NvbnRyb2xsZXIuX2NvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9zKHBvc2l0aW9uKTsK
KworICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgIH0sCisKKyAgICBjdXJyZW50UG9zaXRpb25U
b0N1cnJlbnRPZmZzZXQ6IGZ1bmN0aW9uKHBvc2l0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2NvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9zKHBvc2l0aW9uKTsKKyAgICB9
LAorCisgICAgc2V0SW5saW5lV2lkZ2V0OiBmdW5jdGlvbihwb3NpdGlvbiwgaW5saW5lRWxlbWVu
dCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yLnNldFVuaXF1ZUJvb2tt
YXJrKHBvc2l0aW9uLCB7d2lkZ2V0OiBpbmxpbmVFbGVtZW50fSk7CisgICAgfSwKKworICAgIGFk
ZFNjcm9sbEhhbmRsZXI6IGZ1bmN0aW9uKGhhbmRsZXIpCisgICAgeworICAgICAgICB0aGlzLl9j
b2RlTWlycm9yLm9uKCJzY3JvbGwiLCBoYW5kbGVyKTsKKyAgICB9LAorCisgICAgcmVtb3ZlU2Ny
b2xsSGFuZGxlcjogZnVuY3Rpb24oaGFuZGxlcikKKyAgICB7CisgICAgICAgIHRoaXMuX2NvZGVN
aXJyb3Iub2ZmKCJzY3JvbGwiLCBoYW5kbGVyKTsKKyAgICB9LAorCisgICAgLy8gUHJvdGVjdGVk
CisKKyAgICBwcmV0dHlQcmludDogZnVuY3Rpb24ocHJldHR5KQorICAgIHsKKyAgICAgICAgZnVu
Y3Rpb24gcHJldHR5UHJpbnRBbmRVcGRhdGVFZGl0b3IoKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zdCBzdGFydCA9IHtsaW5lOiAwLCBjaDogMH07CisgICAgICAgICAgICBjb25zdCBlbmQg
PSB7bGluZTogdGhpcy5fY29kZU1pcnJvci5saW5lQ291bnQoKSAtIDF9OworCisgICAgICAgICAg
ICB2YXIgb2xkU2VsZWN0aW9uQW5jaG9yID0gdGhpcy5fY29kZU1pcnJvci5nZXRDdXJzb3IoImFu
Y2hvciIpOworICAgICAgICAgICAgdmFyIG9sZFNlbGVjdGlvbkhlYWQgPSB0aGlzLl9jb2RlTWly
cm9yLmdldEN1cnNvcigiaGVhZCIpOworICAgICAgICAgICAgdmFyIG5ld1NlbGVjdGlvbkFuY2hv
ciwgbmV3U2VsZWN0aW9uSGVhZDsKKyAgICAgICAgICAgIHZhciBuZXdFeGVjdXRpb25Mb2NhdGlv
biA9IG51bGw7CisKKyAgICAgICAgICAgIGlmIChwcmV0dHkpIHsKKyAgICAgICAgICAgICAgICAv
LyA8cmRhcjovL3Byb2JsZW0vMTA1OTM5NDg+IFByb3ZpZGUgYSB3YXkgdG8gY2hhbmdlIHRoZSB0
YWIgd2lkdGggaW4gdGhlIFdlYiBJbnNwZWN0b3IKKyAgICAgICAgICAgICAgICBjb25zdCBpbmRl
bnRTdHJpbmcgPSAiICAgICI7CisgICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsTGluZUVuZGlu
Z3MgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgZm9ybWF0dGVkTGluZUVuZGluZ3MgPSBbXTsK
KyAgICAgICAgICAgICAgICB2YXIgbWFwcGluZyA9IHtvcmlnaW5hbDogWzBdLCBmb3JtYXR0ZWQ6
IFswXX07CisgICAgICAgICAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgRm9ybWF0dGVyQ29udGVu
dEJ1aWxkZXIobWFwcGluZywgb3JpZ2luYWxMaW5lRW5kaW5ncywgZm9ybWF0dGVkTGluZUVuZGlu
Z3MsIDAsIDAsIGluZGVudFN0cmluZyk7CisgICAgICAgICAgICAgICAgdmFyIGZvcm1hdHRlciA9
IG5ldyBGb3JtYXR0ZXIodGhpcy5fY29kZU1pcnJvciwgYnVpbGRlcik7CisgICAgICAgICAgICAg
ICAgZm9ybWF0dGVyLmZvcm1hdChzdGFydCwgZW5kKTsKKworICAgICAgICAgICAgICAgIHRoaXMu
X2Zvcm1hdHRlclNvdXJjZU1hcCA9IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAuZnJv
bUJ1aWxkZXIoYnVpbGRlcik7CisKKyAgICAgICAgICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnNl
dFZhbHVlKGJ1aWxkZXIuZm9ybWF0dGVkQ29udGVudCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fcG9zaXRpb25Ub1JldmVhbCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UmV2
ZWFsUG9zaXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zvcm1hdHRl
ZCh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsLmxpbmVOdW1iZXIsIHRoaXMuX3Bvc2l0aW9uVG9SZXZl
YWwuY29sdW1uTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25Ub1Jl
dmVhbCA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBvc2l0aW9uKG5ld1JldmVhbFBvc2l0
aW9uLmxpbmVOdW1iZXIsIG5ld1JldmVhbFBvc2l0aW9uLmNvbHVtbk51bWJlcik7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydCA9
IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX3RleHRS
YW5nZVRvU2VsZWN0LnN0YXJ0TGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRDb2x1
bW4pOworICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kID0g
dGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQodGhpcy5fdGV4dFJh
bmdlVG9TZWxlY3QuZW5kTGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QuZW5kQ29sdW1uKTsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QgPSBuZXcgV2ViSW5z
cGVjdG9yLlRleHRSYW5nZShtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5saW5lTnVtYmVyLCBt
YXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5jb2x1bW5OdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVj
dGlvbkVuZC5saW5lTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQuY29sdW1uTnVtYmVy
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHRoaXMu
X2V4ZWN1dGlvbkxpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KCFpc05hTih0aGlzLl9leGVjdXRpb25Db2x1bW5OdW1iZXIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbmV3RXhlY3V0aW9uTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3Jp
Z2luYWxUb0Zvcm1hdHRlZCh0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyLCB0aGlzLl9leGVjdXRp
b25Db2x1bW5OdW1iZXIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZh
ciBtYXBwZWRBbmNob3JMb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5h
bFRvRm9ybWF0dGVkKG9sZFNlbGVjdGlvbkFuY2hvci5saW5lLCBvbGRTZWxlY3Rpb25BbmNob3Iu
Y2gpOworICAgICAgICAgICAgICAgIHZhciBtYXBwZWRIZWFkTG9jYXRpb24gPSB0aGlzLl9mb3Jt
YXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zvcm1hdHRlZChvbGRTZWxlY3Rpb25IZWFkLmxpbmUs
IG9sZFNlbGVjdGlvbkhlYWQuY2gpOworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkFuY2hv
ciA9IHtsaW5lOm1hcHBlZEFuY2hvckxvY2F0aW9uLmxpbmVOdW1iZXIsIGNoOm1hcHBlZEFuY2hv
ckxvY2F0aW9uLmNvbHVtbk51bWJlcn07CisgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uSGVh
ZCA9IHtsaW5lOm1hcHBlZEhlYWRMb2NhdGlvbi5saW5lTnVtYmVyLCBjaDptYXBwZWRIZWFkTG9j
YXRpb24uY29sdW1uTnVtYmVyfTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fY29kZU1pcnJvci51bmRvKCk7CisKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5f
cG9zaXRpb25Ub1JldmVhbCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UmV2ZWFsUG9z
aXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbCh0aGlz
Ll9wb3NpdGlvblRvUmV2ZWFsLmxpbmVOdW1iZXIsIHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwuY29s
dW1uTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25Ub1JldmVhbCA9
IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBvc2l0aW9uKG5ld1JldmVhbFBvc2l0aW9uLmxp
bmVOdW1iZXIsIG5ld1JldmVhbFBvc2l0aW9uLmNvbHVtbk51bWJlcik7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydCA9IHRoaXMu
X2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKHRoaXMuX3RleHRSYW5nZVRv
U2VsZWN0LnN0YXJ0TGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRDb2x1bW4pOwor
ICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kID0gdGhpcy5f
Zm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwodGhpcy5fdGV4dFJhbmdlVG9T
ZWxlY3QuZW5kTGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QuZW5kQ29sdW1uKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QgPSBuZXcgV2ViSW5zcGVjdG9y
LlRleHRSYW5nZShtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5saW5lTnVtYmVyLCBtYXBwZWRS
ZXZlYWxTZWxlY3Rpb25TdGFydC5jb2x1bW5OdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvbkVu
ZC5saW5lTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQuY29sdW1uTnVtYmVyKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHRoaXMuX2V4ZWN1
dGlvbkxpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFp
c05hTih0aGlzLl9leGVjdXRpb25Db2x1bW5OdW1iZXIpKTsKKyAgICAgICAgICAgICAgICAgICAg
bmV3RXhlY3V0aW9uTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVk
VG9PcmlnaW5hbCh0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyLCB0aGlzLl9leGVjdXRpb25Db2x1
bW5OdW1iZXIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciBtYXBw
ZWRBbmNob3JMb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09y
aWdpbmFsKG9sZFNlbGVjdGlvbkFuY2hvci5saW5lLCBvbGRTZWxlY3Rpb25BbmNob3IuY2gpOwor
ICAgICAgICAgICAgICAgIHZhciBtYXBwZWRIZWFkTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJT
b3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbChvbGRTZWxlY3Rpb25IZWFkLmxpbmUsIG9sZFNl
bGVjdGlvbkhlYWQuY2gpOworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkFuY2hvciA9IHts
aW5lOm1hcHBlZEFuY2hvckxvY2F0aW9uLmxpbmVOdW1iZXIsIGNoOm1hcHBlZEFuY2hvckxvY2F0
aW9uLmNvbHVtbk51bWJlcn07CisgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uSGVhZCA9IHts
aW5lOm1hcHBlZEhlYWRMb2NhdGlvbi5saW5lTnVtYmVyLCBjaDptYXBwZWRIZWFkTG9jYXRpb24u
Y29sdW1uTnVtYmVyfTsKKworICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1h
cCA9IG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuX3Njcm9sbEludG9W
aWV3Q2VudGVyZWQobmV3U2VsZWN0aW9uQW5jaG9yKTsKKyAgICAgICAgICAgIHRoaXMuX2NvZGVN
aXJyb3Iuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbkFuY2hvciwgbmV3U2VsZWN0aW9uSGVhZCk7
CisKKyAgICAgICAgICAgIGlmIChuZXdFeGVjdXRpb25Mb2NhdGlvbikgeworICAgICAgICAgICAg
ICAgIGRlbGV0ZSB0aGlzLl9leGVjdXRpb25MaW5lSGFuZGxlOworICAgICAgICAgICAgICAgIHRo
aXMuZXhlY3V0aW9uQ29sdW1uTnVtYmVyID0gbmV3RXhlY3V0aW9uTG9jYXRpb24uY29sdW1uTnVt
YmVyOworICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uTGluZU51bWJlciA9IG5ld0V4ZWN1
dGlvbkxvY2F0aW9uLmxpbmVOdW1iZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMTMxMjk5NTU+IEZpbmRCYW5uZXI6IE5ldyBzZWFyY2hl
cyBzaG91bGQgbm90IGxvc2Ugc2VhcmNoIHBvc2l0aW9uIChzdGFydCBmcm9tIGN1cnJlbnQgc2Vs
ZWN0aW9uL2NhcmV0KQorICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNlYXJjaFF1ZXJ5KSB7
CisgICAgICAgICAgICAgICAgdmFyIHNlYXJjaFF1ZXJ5ID0gdGhpcy5jdXJyZW50U2VhcmNoUXVl
cnk7CisgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hDbGVhcmVkKCk7CisgICAgICAgICAgICAg
ICAgLy8gU2V0IHRpbWVvdXQgc28gdGhhdCB0aGlzIGhhcHBlbnMgYWZ0ZXIgdGhlIGN1cnJlbnQg
Q29kZU1pcnJvciBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgLy8gVGhlIGVkaXRvciBoYXMg
dG8gdXBkYXRlIGZvciB0aGUgdmFsdWUgYW5kIHNlbGVjdGlvbiBjaGFuZ2VzLgorICAgICAgICAg
ICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24ocXVlcnkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5wZXJmb3JtU2VhcmNoKHNlYXJjaFF1ZXJ5KTsKKyAgICAgICAgICAgICAgICB9LmJpbmQo
dGhpcyksIDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGhpcy5fZGVsZWdh
dGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLnRleHRFZGl0b3JVcGRhdGVkRm9ybWF0dGluZyA9
PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS50ZXh0RWRpdG9y
VXBkYXRlZEZvcm1hdHRpbmcodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9jb2Rl
TWlycm9yLm9wZXJhdGlvbihwcmV0dHlQcmludEFuZFVwZGF0ZUVkaXRvci5iaW5kKHRoaXMpKTsK
KyAgICB9LAorCiAgICAgLy8gUHJpdmF0ZQogCiAgICAgX2NvbnRlbnRDaGFuZ2VkOiBmdW5jdGlv
bihjb2RlTWlycm9yLCBjaGFuZ2UpCkBAIC0xMjM1LDEwNiArMTQwNyw2IEBAIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGxpbmVIZWlnaHQgPSBNYXRo
LmNlaWwodGhpcy5fY29kZU1pcnJvci5kZWZhdWx0VGV4dEhlaWdodCgpKTsKICAgICAgICAgdmFy
IG1hcmdpbiA9IE1hdGguZmxvb3IoKHNjcm9sbEluZm8uY2xpZW50SGVpZ2h0IC0gbGluZUhlaWdo
dCkgLyAyKTsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zY3JvbGxJbnRvVmlldyhwb3NpdGlv
biwgbWFyZ2luKTsKLSAgICB9LAotCi0gICAgX3ByZXR0eVByaW50OiBmdW5jdGlvbihwcmV0dHkp
Ci0gICAgewotICAgICAgICBmdW5jdGlvbiBwcmV0dHlQcmludEFuZFVwZGF0ZUVkaXRvcigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0ge2xpbmU6IDAsIGNoOiAwfTsKLSAg
ICAgICAgICAgIGNvbnN0IGVuZCA9IHtsaW5lOiB0aGlzLl9jb2RlTWlycm9yLmxpbmVDb3VudCgp
IC0gMX07Ci0KLSAgICAgICAgICAgIHZhciBvbGRTZWxlY3Rpb25BbmNob3IgPSB0aGlzLl9jb2Rl
TWlycm9yLmdldEN1cnNvcigiYW5jaG9yIik7Ci0gICAgICAgICAgICB2YXIgb2xkU2VsZWN0aW9u
SGVhZCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKCJoZWFkIik7Ci0gICAgICAgICAgICB2
YXIgbmV3U2VsZWN0aW9uQW5jaG9yLCBuZXdTZWxlY3Rpb25IZWFkOwotICAgICAgICAgICAgdmFy
IG5ld0V4ZWN1dGlvbkxvY2F0aW9uID0gbnVsbDsKLQotICAgICAgICAgICAgaWYgKHByZXR0eSkg
ewotICAgICAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMDU5Mzk0OD4gUHJvdmlkZSBh
IHdheSB0byBjaGFuZ2UgdGhlIHRhYiB3aWR0aCBpbiB0aGUgV2ViIEluc3BlY3RvcgotICAgICAg
ICAgICAgICAgIGNvbnN0IGluZGVudFN0cmluZyA9ICIgICAgIjsKLSAgICAgICAgICAgICAgICB2
YXIgb3JpZ2luYWxMaW5lRW5kaW5ncyA9IFtdOwotICAgICAgICAgICAgICAgIHZhciBmb3JtYXR0
ZWRMaW5lRW5kaW5ncyA9IFtdOwotICAgICAgICAgICAgICAgIHZhciBtYXBwaW5nID0ge29yaWdp
bmFsOiBbMF0sIGZvcm1hdHRlZDogWzBdfTsKLSAgICAgICAgICAgICAgICB2YXIgYnVpbGRlciA9
IG5ldyBGb3JtYXR0ZXJDb250ZW50QnVpbGRlcihtYXBwaW5nLCBvcmlnaW5hbExpbmVFbmRpbmdz
LCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywgMCwgMCwgaW5kZW50U3RyaW5nKTsKLSAgICAgICAgICAg
ICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih0aGlzLl9jb2RlTWlycm9yLCBidWls
ZGVyKTsKLSAgICAgICAgICAgICAgICBmb3JtYXR0ZXIuZm9ybWF0KHN0YXJ0LCBlbmQpOwotCi0g
ICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwID0gV2ViSW5zcGVjdG9yLkZv
cm1hdHRlclNvdXJjZU1hcC5mcm9tQnVpbGRlcihidWlsZGVyKTsKLQotICAgICAgICAgICAgICAg
IHRoaXMuX2NvZGVNaXJyb3Iuc2V0VmFsdWUoYnVpbGRlci5mb3JtYXR0ZWRDb250ZW50KTsKLQot
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciBuZXdSZXZlYWxQb3NpdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1h
cC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwubGluZU51bWJlciwg
dGhpcy5fcG9zaXRpb25Ub1JldmVhbC5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9wb3NpdGlvblRvUmV2ZWFsID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUG9z
aXRpb24obmV3UmV2ZWFsUG9zaXRpb24ubGluZU51bWJlciwgbmV3UmV2ZWFsUG9zaXRpb24uY29s
dW1uTnVtYmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhp
cy5fdGV4dFJhbmdlVG9TZWxlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1hcHBlZFJl
dmVhbFNlbGVjdGlvblN0YXJ0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9G
b3JtYXR0ZWQodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRMaW5lLCB0aGlzLl90ZXh0UmFu
Z2VUb1NlbGVjdC5zdGFydENvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRS
ZXZlYWxTZWxlY3Rpb25FbmQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zv
cm1hdHRlZCh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5lbmRMaW5lLCB0aGlzLl90ZXh0UmFuZ2VU
b1NlbGVjdC5lbmRDb2x1bW4pOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0UmFuZ2VU
b1NlbGVjdCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKG1hcHBlZFJldmVhbFNlbGVjdGlv
blN0YXJ0LmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0LmNvbHVtbk51bWJl
ciwgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kLmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVj
dGlvbkVuZC5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICghaXNOYU4odGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcikpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29uc29sZS5hc3NlcnQoIWlzTmFOKHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJl
cikpOwotICAgICAgICAgICAgICAgICAgICBuZXdFeGVjdXRpb25Mb2NhdGlvbiA9IHRoaXMuX2Zv
cm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX2V4ZWN1dGlvbkxpbmVO
dW1iZXIsIHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJlcik7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgdmFyIG1hcHBlZEFuY2hvckxvY2F0aW9uID0gdGhpcy5fZm9ybWF0
dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQob2xkU2VsZWN0aW9uQW5jaG9yLmxpbmUs
IG9sZFNlbGVjdGlvbkFuY2hvci5jaCk7Ci0gICAgICAgICAgICAgICAgdmFyIG1hcHBlZEhlYWRM
b2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKG9s
ZFNlbGVjdGlvbkhlYWQubGluZSwgb2xkU2VsZWN0aW9uSGVhZC5jaCk7Ci0gICAgICAgICAgICAg
ICAgbmV3U2VsZWN0aW9uQW5jaG9yID0ge2xpbmU6bWFwcGVkQW5jaG9yTG9jYXRpb24ubGluZU51
bWJlciwgY2g6bWFwcGVkQW5jaG9yTG9jYXRpb24uY29sdW1uTnVtYmVyfTsKLSAgICAgICAgICAg
ICAgICBuZXdTZWxlY3Rpb25IZWFkID0ge2xpbmU6bWFwcGVkSGVhZExvY2F0aW9uLmxpbmVOdW1i
ZXIsIGNoOm1hcHBlZEhlYWRMb2NhdGlvbi5jb2x1bW5OdW1iZXJ9OwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnVuZG8oKTsKLQotICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciBuZXdSZXZlYWxQb3NpdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3Jt
YXR0ZWRUb09yaWdpbmFsKHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwubGluZU51bWJlciwgdGhpcy5f
cG9zaXRpb25Ub1JldmVhbC5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9wb3NpdGlvblRvUmV2ZWFsID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUG9zaXRpb24o
bmV3UmV2ZWFsUG9zaXRpb24ubGluZU51bWJlciwgbmV3UmV2ZWFsUG9zaXRpb24uY29sdW1uTnVt
YmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGV4
dFJhbmdlVG9TZWxlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1hcHBlZFJldmVhbFNl
bGVjdGlvblN0YXJ0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2lu
YWwodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRMaW5lLCB0aGlzLl90ZXh0UmFuZ2VUb1Nl
bGVjdC5zdGFydENvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRSZXZlYWxT
ZWxlY3Rpb25FbmQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5h
bCh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5lbmRMaW5lLCB0aGlzLl90ZXh0UmFuZ2VUb1NlbGVj
dC5lbmRDb2x1bW4pOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0UmFuZ2VUb1NlbGVj
dCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0
LmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0LmNvbHVtbk51bWJlciwgbWFw
cGVkUmV2ZWFsU2VsZWN0aW9uRW5kLmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvbkVu
ZC5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
ICghaXNOYU4odGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcikpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc29sZS5hc3NlcnQoIWlzTmFOKHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJlcikpOwot
ICAgICAgICAgICAgICAgICAgICBuZXdFeGVjdXRpb25Mb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRl
clNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIs
IHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJlcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgdmFyIG1hcHBlZEFuY2hvckxvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291
cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwob2xkU2VsZWN0aW9uQW5jaG9yLmxpbmUsIG9sZFNl
bGVjdGlvbkFuY2hvci5jaCk7Ci0gICAgICAgICAgICAgICAgdmFyIG1hcHBlZEhlYWRMb2NhdGlv
biA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKG9sZFNlbGVj
dGlvbkhlYWQubGluZSwgb2xkU2VsZWN0aW9uSGVhZC5jaCk7Ci0gICAgICAgICAgICAgICAgbmV3
U2VsZWN0aW9uQW5jaG9yID0ge2xpbmU6bWFwcGVkQW5jaG9yTG9jYXRpb24ubGluZU51bWJlciwg
Y2g6bWFwcGVkQW5jaG9yTG9jYXRpb24uY29sdW1uTnVtYmVyfTsKLSAgICAgICAgICAgICAgICBu
ZXdTZWxlY3Rpb25IZWFkID0ge2xpbmU6bWFwcGVkSGVhZExvY2F0aW9uLmxpbmVOdW1iZXIsIGNo
Om1hcHBlZEhlYWRMb2NhdGlvbi5jb2x1bW5OdW1iZXJ9OwotCi0gICAgICAgICAgICAgICAgdGhp
cy5fZm9ybWF0dGVyU291cmNlTWFwID0gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgdGhpcy5fc2Nyb2xsSW50b1ZpZXdDZW50ZXJlZChuZXdTZWxlY3Rpb25BbmNob3IpOwotICAg
ICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uQW5jaG9y
LCBuZXdTZWxlY3Rpb25IZWFkKTsKLQotICAgICAgICAgICAgaWYgKG5ld0V4ZWN1dGlvbkxvY2F0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2V4ZWN1dGlvbkxpbmVIYW5kbGU7
Ci0gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRpb25Db2x1bW5OdW1iZXIgPSBuZXdFeGVjdXRp
b25Mb2NhdGlvbi5jb2x1bW5OdW1iZXI7Ci0gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRpb25M
aW5lTnVtYmVyID0gbmV3RXhlY3V0aW9uTG9jYXRpb24ubGluZU51bWJlcjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8xMzEyOTk1NT4gRmlu
ZEJhbm5lcjogTmV3IHNlYXJjaGVzIHNob3VsZCBub3QgbG9zZSBzZWFyY2ggcG9zaXRpb24gKHN0
YXJ0IGZyb20gY3VycmVudCBzZWxlY3Rpb24vY2FyZXQpCi0gICAgICAgICAgICBpZiAodGhpcy5j
dXJyZW50U2VhcmNoUXVlcnkpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2VhcmNoUXVlcnkgPSB0
aGlzLmN1cnJlbnRTZWFyY2hRdWVyeTsKLSAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaENsZWFy
ZWQoKTsKLSAgICAgICAgICAgICAgICAvLyBTZXQgdGltZW91dCBzbyB0aGF0IHRoaXMgaGFwcGVu
cyBhZnRlciB0aGUgY3VycmVudCBDb2RlTWlycm9yIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAg
ICAvLyBUaGUgZWRpdG9yIGhhcyB0byB1cGRhdGUgZm9yIHRoZSB2YWx1ZSBhbmQgc2VsZWN0aW9u
IGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbihxdWVyeSkgewot
ICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goc2VhcmNoUXVlcnkpOwotICAg
ICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhpcy5fZGVsZWdhdGUudGV4dEVkaXRv
clVwZGF0ZWRGb3JtYXR0aW5nID09PSAiZnVuY3Rpb24iKQotICAgICAgICAgICAgICAgIHRoaXMu
X2RlbGVnYXRlLnRleHRFZGl0b3JVcGRhdGVkRm9ybWF0dGluZyh0aGlzKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub3BlcmF0aW9uKHByZXR0eVByaW50QW5kVXBkYXRl
RWRpdG9yLmJpbmQodGhpcykpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRS
ZXNvdXJjZUNvbnRlbnRWaWV3LmpzCShyZXZpc2lvbiAxNzI5NjkpCisrKyBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qcwko
d29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTUgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJj
ZUNvbnRlbnRWaWV3ID0gZgogICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0
ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLkFjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0ZW0oInByZXR0
eS1wcmludCIsIHRvb2xUaXAsIGFjdGl2YXRlZFRvb2xUaXAsIGN1cmxleUJyYWNlc0ltYWdlLnNy
YywgY3VybGV5QnJhY2VzSW1hZ2Uud2lkdGgsIGN1cmxleUJyYWNlc0ltYWdlLmhlaWdodCk7CiAg
ICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCB0aGlzLl90
b2dnbGVQcmV0dHlQcmludCwgdGhpcyk7CiAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZp
Z2F0aW9uSXRlbS5lbmFibGVkID0gZmFsc2U7IC8vIEVuYWJsZWQgd2hlbiB0aGUgdGV4dCBlZGl0
b3IgaXMgcG9wdWxhdGVkIHdpdGggY29udGVudC4KKworICAgIHZhciBzaG93VHlwZXNJbWFnZVNp
emUgPSAoV2ViSW5zcGVjdG9yLlBsYXRmb3JtLmlzTGVnYWN5TWFjT1MgPyAxNSA6IDE2KTsKKyAg
ICB2YXIgdG9vbFRpcFR5cGVzID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IHR5cGUgaW5m
b3JtYXRpb24iKTsKKyAgICB2YXIgYWN0aXZhdGVkVG9vbFRpcFR5cGVzID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJIaWRlIHR5cGUgaW5mb3JtYXRpb24iKTsKKyAgICB0aGlzLl9zaG93VHlwZXNC
dXR0b25OYXZpZ2F0aW9uSXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZp
Z2F0aW9uSXRlbSgic2hvdy10eXBlcyIsIHRvb2xUaXBUeXBlcywgYWN0aXZhdGVkVG9vbFRpcFR5
cGVzLCAiSW1hZ2VzL05hdmlnYXRpb25JdGVtVHlwZXMuc3ZnIiwgc2hvd1R5cGVzSW1hZ2VTaXpl
LCBzaG93VHlwZXNJbWFnZVNpemUpOworICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRp
b25JdGVtLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVt
LkV2ZW50LkNsaWNrZWQsIHRoaXMuX3RvZ2dsZVR5cGVBbm5vdGF0aW9ucywgdGhpcyk7CisgICAg
dGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IGZhbHNlOworCisg
ICAgV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5TZXR0aW5nLkV2ZW50LkNoYW5nZWQsIHRoaXMuX3No
b3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZ0NoYW5nZWQsIHRoaXMpOwogfTsKIAog
V2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LlN0eWxlQ2xhc3NOYW1lID0gInRl
eHQiOwpAQCAtNjIsNyArNzEsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZp
ZXcucHJvCiAKICAgICBnZXQgbmF2aWdhdGlvbkl0ZW1zKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBbdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbV07CisgICAgICAgIHJldHVy
biBbdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbSwgdGhpcy5fc2hvd1R5cGVz
QnV0dG9uTmF2aWdhdGlvbkl0ZW1dOwogICAgIH0sCiAKICAgICBnZXQgbWFuYWdlc093bklzc3Vl
cygpCkBAIC0yMDAsNiArMjA5LDggQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRW
aWV3LnBybwogICAgIF9jb250ZW50RGlkUG9wdWxhdGU6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsK
ICAgICAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0g
dGhpcy5fdGV4dEVkaXRvci5jYW5CZUZvcm1hdHRlZCgpOworICAgICAgICB0aGlzLl9zaG93VHlw
ZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gdGhpcy5fdGV4dEVkaXRvci5jYW5TaG93
VHlwZUFubm90YXRpb25zKCk7CisgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRp
b25JdGVtLmFjdGl2YXRlZCA9IFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1h
dGlvblNldHRpbmcudmFsdWU7CiAgICAgfSwKIAogICAgIF90b2dnbGVQcmV0dHlQcmludDogZnVu
Y3Rpb24oZXZlbnQpCkBAIC0yMDgsNiArMjE5LDE2IEBAIFdlYkluc3BlY3Rvci5UZXh0UmVzb3Vy
Y2VDb250ZW50Vmlldy5wcm8KICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5mb3JtYXR0ZWQgPSBh
Y3RpdmF0ZWQ7CiAgICAgfSwKIAorICAgIF90b2dnbGVUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9u
KGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci50b2dnbGVUeXBlQW5ub3Rh
dGlvbnMoKTsKKyAgICB9LAorCisgICAgX3Nob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0
dGluZ0NoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fc2hvd1R5
cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gV2ViSW5zcGVjdG9yLnNob3dKYXZh
U2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZTsKKyAgICB9LAorCiAgICAgX3RleHRF
ZGl0b3JGb3JtYXR0aW5nRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAg
IHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gdGhpcy5f
dGV4dEVkaXRvci5mb3JtYXR0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVByb3BlcnRpZXNTZWN0
aW9uLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlv
biA9IGZ1bmN0aW9uKHR5cGVzLCB0aXRsZSwgc3VidGl0bGUpCit7CisgICAgdGhpcy5lbXB0eVBs
YWNlaG9sZGVyID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJObyBQcm9wZXJ0aWVzIik7CisgICAg
dGhpcy50eXBlcyA9IHR5cGVzOworCisgICAgV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTZWN0aW9u
LmNhbGwodGhpcywgdGl0bGUsIHN1YnRpdGxlKTsKK307CisKK1dlYkluc3BlY3Rvci5UeXBlUHJv
cGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0
b3IuVHlwZVByb3BlcnRpZXNTZWN0aW9uLAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlBy
b3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSwKKworICAgIG9ucG9wdWxhdGU6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLnJlbW92ZUNoaWxkcmVu
KCk7CisKKyAgICAgICAgdmFyIHByaW1pdGl2ZVR5cGVOYW1lcyA9IHRoaXMudHlwZXMuZ2xvYmFs
UHJpbWl0aXZlVHlwZU5hbWVzIHx8IHRoaXMudHlwZXMubG9jYWxQcmltaXRpdmVUeXBlTmFtZXM7
CisgICAgICAgIHZhciBzdHJ1Y3R1cmVzID0gdGhpcy50eXBlcy5nbG9iYWxTdHJ1Y3R1cmVzIHx8
IHRoaXMudHlwZXMubG9jYWxTdHJ1Y3R1cmVzOworICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtd
OworICAgICAgICBmb3IgKHZhciBzdHJ1Y3Qgb2Ygc3RydWN0dXJlcykgeworICAgICAgICAgICAg
cHJvcGVydGllcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBuYW1lOiBzdHJ1Y3QuY29uc3RydWN0
b3JOYW1lLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogc3RydWN0CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBwcmltaXRpdmVOYW1lIG9mIHByaW1pdGl2
ZVR5cGVOYW1lcykgeworICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHsKKyAgICAgICAgICAg
ICAgICBuYW1lOiBwcmltaXRpdmVOYW1lLAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogbnVs
bAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBwcm9wZXJ0aWVzLnNvcnQo
V2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5Qcm9wZXJ0eUNvbXBhcmF0b3IpOwor
ICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKQorICAgICAgICAgICAgdGhp
cy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5UeXBl
UHJvcGVydHlUcmVlRWxlbWVudChwcm9wZXJ0eSkpOworCisgICAgICAgIGlmICghdGhpcy5wcm9w
ZXJ0aWVzVHJlZU91dGxpbmUuY2hpbGRyZW4ubGVuZ3RoKSB7CisgICAgICAgICAgICB2YXIgdGl0
bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgIHRpdGxlLmNs
YXNzTmFtZSA9ICJpbmZvIjsKKyAgICAgICAgICAgIHRpdGxlLnRleHRDb250ZW50ID0gdGhpcy5l
bXB0eVBsYWNlaG9sZGVyOworICAgICAgICAgICAgdmFyIGluZm9FbGVtZW50ID0gbmV3IFRyZWVF
bGVtZW50KHRpdGxlLCBudWxsLCBmYWxzZSk7CisgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXNU
cmVlT3V0bGluZS5hcHBlbmRDaGlsZChpbmZvRWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU2VjdGlvbi5FdmVu
dC5WaXNpYmxlQ29udGVudERpZENoYW5nZSk7CisKKyAgICAgICAgaWYgKHByb3BlcnRpZXMubGVu
Z3RoID09PSAxKQorICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuY2hpbGRy
ZW5bMF0uZXhwYW5kUmVjdXJzaXZlbHkoKTsKKyAgICB9Cit9OworCisvLyBUaGlzIGlzIG1vc3Rs
eSBpZGVudGljYWwgdG8gT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uY29tcGFyZVByb3BlcnRpZXMu
CisvLyBCdXQgdGhpcyBjaGVja3MgZm9yIGVxdWFsaXR5IGJlY2F1c2Ugd2UgY2FuIGhhdmUgdHdv
IG9iamVjdHMgbmFtZWQgdGhlIHNhbWUgdGhpbmcuCitXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnRp
ZXNTZWN0aW9uLlByb3BlcnR5Q29tcGFyYXRvciA9IGZ1bmN0aW9uKHByb3BlcnR5QSwgcHJvcGVy
dHlCKQoreworICAgIHZhciBhID0gcHJvcGVydHlBLm5hbWU7CisgICAgdmFyIGIgPSBwcm9wZXJ0
eUIubmFtZTsKKyAgICBpZiAoYS5pbmRleE9mKCJfX3Byb3RvX18iKSAhPT0gLTEpCisgICAgICAg
IHJldHVybiAxOworICAgIGlmIChiLmluZGV4T2YoIl9fcHJvdG9fXyIpICE9PSAtMSkKKyAgICAg
ICAgcmV0dXJuIC0xOworICAgIGlmIChhID09PSBiKQorICAgICAgICByZXR1cm4gMTsKKworICAg
IHZhciBkaWZmID0gMDsKKyAgICB2YXIgY2h1bmsgPSAvXlxkK3xeXEQrLzsKKyAgICB2YXIgY2h1
bmthLCBjaHVua2IsIGFudW0sIGJudW07CisgICAgd2hpbGUgKGRpZmYgPT09IDApIHsKKyAgICAg
ICAgaWYgKCFhICYmIGIpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmICghYiAm
JiBhKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNodW5rYSA9IGEubWF0Y2goY2h1
bmspWzBdOworICAgICAgICBjaHVua2IgPSBiLm1hdGNoKGNodW5rKVswXTsKKyAgICAgICAgYW51
bSA9ICFpc05hTihjaHVua2EpOworICAgICAgICBibnVtID0gIWlzTmFOKGNodW5rYik7CisgICAg
ICAgIGlmIChhbnVtICYmICFibnVtKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBp
ZiAoYm51bSAmJiAhYW51bSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBpZiAoYW51
bSAmJiBibnVtKSB7CisgICAgICAgICAgICBkaWZmID0gY2h1bmthIC0gY2h1bmtiOworICAgICAg
ICAgICAgaWYgKGRpZmYgPT09IDAgJiYgY2h1bmthLmxlbmd0aCAhPT0gY2h1bmtiLmxlbmd0aCkg
eworICAgICAgICAgICAgICAgIGlmICghK2NodW5rYSAmJiAhK2NodW5rYikgLy8gY2h1bmtzIGFy
ZSBzdHJpbmdzIG9mIGFsbCAwcyAoc3BlY2lhbCBjYXNlKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY2h1bmthLmxlbmd0aCAtIGNodW5rYi5sZW5ndGg7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2h1bmtiLmxlbmd0aCAtIGNodW5rYS5sZW5n
dGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY2h1bmthICE9PSBjaHVua2Ip
CisgICAgICAgICAgICByZXR1cm4gKGNodW5rYSA8IGNodW5rYikgPyAtMSA6IDE7CisgICAgICAg
IGEgPSBhLnN1YnN0cmluZyhjaHVua2EubGVuZ3RoKTsKKyAgICAgICAgYiA9IGIuc3Vic3RyaW5n
KGNodW5rYi5sZW5ndGgpOworICAgIH0KKworICAgIHJldHVybiBkaWZmOworfTsKKworV2ViSW5z
cGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50ID0gZnVuY3Rpb24ocHJvcGVydHkpCit7Cisg
ICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5OworCisgICAgdGhpcy5uYW1lRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICB0aGlzLm5hbWVFbGVtZW50LmNsYXNz
TmFtZSA9ICJuYW1lIjsKKyAgICB0aGlzLm5hbWVFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5w
cm9wZXJ0eS5uYW1lOworCisgICAgVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCB0aGlzLm5hbWVFbGVt
ZW50LCBudWxsLCBmYWxzZSk7CisKKyAgICB0aGlzLnRvZ2dsZU9uQ2xpY2sgPSB0cnVlOworICAg
IHRoaXMuaGFzQ2hpbGRyZW4gPSAhIXRoaXMucHJvcGVydHkuc3RydWN0dXJlOworfTsKKworV2Vi
SW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKKyAgICBjb25z
dHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50LAorICAgIF9fcHJv
dG9fXzogVHJlZUVsZW1lbnQucHJvdG90eXBlLAorCisgICAgb25wb3B1bGF0ZTogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOworCisgICAgICAgIHZhciBw
cm9wZXJ0aWVzID0gW107CisgICAgICAgIGZvciAodmFyIGZpZWxkTmFtZSBvZiB0aGlzLnByb3Bl
cnR5LnN0cnVjdHVyZS5maWVsZHMpIHsKKyAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh7Cisg
ICAgICAgICAgICAgICAgbmFtZTogZmllbGROYW1lLAorICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZTogbnVsbAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBwcm9wZXJ0aWVz
LnNvcnQoV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5Qcm9wZXJ0eUNvbXBhcmF0
b3IpOworCisgICAgICAgIGlmICh0aGlzLnByb3BlcnR5LnN0cnVjdHVyZS5wcm90b3R5cGVTdHJ1
Y3R1cmUpIHsKKyAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh7CisgICAgICAgICAgICAgICAg
bmFtZTogdGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUucHJvdG90eXBlU3RydWN0dXJlLmNvbnN0cnVj
dG9yTmFtZSArICIgKCIgKyBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlByb3RvdHlwZSIpICsgIiki
LAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogdGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUucHJv
dG90eXBlU3RydWN0dXJlCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAodmFyIHByb3BlcnR5IG9mIHByb3BlcnRpZXMpCisgICAgICAgICAgICB0aGlzLmFwcGVuZENo
aWxkKG5ldyBXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnR5VHJlZUVsZW1lbnQocHJvcGVydHkpKTsK
KyAgICB9Cit9OworCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9UeXBlVG9rZW5WaWV3LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmNzcwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcu
Y3NzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisudHlwZS10
b2tlbiB7CisgICAgZGlzcGxheTogaW5saW5lOworICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7Cisg
ICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgICBwYWRkaW5nLWxlZnQ6IDhweDsKKyAg
ICBwYWRkaW5nLXJpZ2h0OiA4cHg7CisgICAgcGFkZGluZy10b3A6IDFweDsKKyAgICBjb2xvcjog
d2hpdGU7CisgICAgZm9udC1zaXplOiAxMHB4OworICAgIG9wYWNpdHk6IDAuODU7Cit9CisKKy50
eXBlLXRva2VuLWxlZnQtc3BhY2luZyB7CisgICAgbWFyZ2luLWxlZnQ6IDVweDsKK30KKworLnR5
cGUtdG9rZW4tcmlnaHQtc3BhY2luZyB7CisgICAgbWFyZ2luLXJpZ2h0OiA1cHg7Cit9CisKKy50
eXBlLXRva2VuLWZ1bmN0aW9uLCAudHlwZS10b2tlbi1ib29sZWFuIHsKKyAgICBiYWNrZ3JvdW5k
LWNvbG9yOiByZ2IoMjA0LCA1OSwgMTkxKTsKK30KKworLnR5cGUtdG9rZW4tbnVtYmVyIHsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNTksIDExMiwgMjI2KTsKK30KKworLnR5cGUtdG9rZW4t
c3RyaW5nIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjIzLCA1MywgNDYpOworfQorCisu
dHlwZS10b2tlbi1kZWZhdWx0IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTE4LCAxNzQs
IDI5KTsKK30KKworLnR5cGUtdG9rZW4tZW1wdHkgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJn
YigxMjYsIDEyNiwgMTI2KTsKK30KKworLnR5cGUtdG9rZW4tbWFueSB7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogcmdiKDIzNywgMTMyLCAwKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L1R5cGVUb2tlblZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldyA9IGZ1bmN0aW9uKHRva2VuQW5ub3Rh
dG9yLCBzaG91bGRIYXZlUmlnaHRNYXJnaW4sIHNob3VsZEhhdmVMZWZ0TWFyZ2luLCB0aXRsZVR5
cGUsIGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpCit7CisgICAgY29uc29sZS5hc3NlcnQodGl0bGVU
eXBlID09PSBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuVmFyaWFibGUgIHx8
IHRpdGxlVHlwZSA9PT0gV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlJldHVy
blN0YXRlbWVudCk7CisKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisKKyAg
ICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBzcGFuLmNs
YXNzTGlzdC5hZGQoInR5cGUtdG9rZW4iKTsKKyAgICBpZiAoc2hvdWxkSGF2ZVJpZ2h0TWFyZ2lu
KQorICAgICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoInR5cGUtdG9rZW4tcmlnaHQtc3BhY2luZyIp
OworICAgIGlmIChzaG91bGRIYXZlTGVmdE1hcmdpbikKKyAgICAgICAgc3Bhbi5jbGFzc0xpc3Qu
YWRkKCJ0eXBlLXRva2VuLWxlZnQtc3BhY2luZyIpOworCisgICAgdGhpcy5lbGVtZW50ID0gc3Bh
bjsKKyAgICB0aGlzLl90b2tlbkFubm90YXRvciA9IHRva2VuQW5ub3RhdG9yOworICAgIHRoaXMu
X3R5cGVzID0gbnVsbDsKKyAgICB0aGlzLl9jb2xvckNsYXNzID0gbnVsbDsKKworICAgIHRoaXMu
X3BvcG92ZXJUaXRsZSA9IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnRpdGxlRm9yUG9wb3Zl
cih0aXRsZVR5cGUsIGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpOworCisgICAgdGhpcy5fc2V0VXBN
b3VzZW92ZXJIYW5kbGVycygpOworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcudGl0
bGVGb3JQb3BvdmVyID0gZnVuY3Rpb24odGl0bGVUeXBlLCBmdW5jdGlvbk9yVmFyaWFibGVOYW1l
KQoreworICAgIHZhciB0aXRsZVN0cmluZyA9IG51bGw7CisgICAgaWYgKHRpdGxlVHlwZSA9PT0g
V2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlZhcmlhYmxlKQorICAgICAgICB0
aXRsZVN0cmluZyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVHlwZSBpbmZvcm1hdGlvbiBmb3Ig
dmFyaWFibGU6ICVzIikuZm9ybWF0KGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpOworICAgIGVsc2Ug
eworICAgICAgICBpZiAoZnVuY3Rpb25PclZhcmlhYmxlTmFtZSkKKyAgICAgICAgICAgIHRpdGxl
U3RyaW5nID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXR1cm4gdHlwZSBmb3IgZnVuY3Rpb246
ICVzIikuZm9ybWF0KGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0aXRsZVN0cmluZyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmV0dXJuIHR5cGUg
Zm9yIGFub255bW91cyBmdW5jdGlvbiIpOworICAgIH0KKworICAgIHJldHVybiB0aXRsZVN0cmlu
ZzsKK307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZSA9IHsKKyAgICBW
YXJpYWJsZTogInRpdGxlLXR5cGUtdmFyaWFibGUiLAorICAgIFJldHVyblN0YXRlbWVudDogInRp
dGxlLXR5cGUtcmV0dXJuLXN0YXRlbWVudCIKK307CisKKy8vIFRoZXNlIHR5cGUgc3RyaW5ncyBz
aG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdHlwZSBpbmZvcm1hdGlvbiBpbiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xv
ckNsYXNzRm9yVHlwZSA9IHsKKyAgICAiU3RyaW5nIjogInR5cGUtdG9rZW4tc3RyaW5nIiwKKyAg
ICAiRnVuY3Rpb24iOiAidHlwZS10b2tlbi1mdW5jdGlvbiIsCisgICAgIk51bWJlciI6ICJ0eXBl
LXRva2VuLW51bWJlciIsCisgICAgIkludGVnZXIiOiAidHlwZS10b2tlbi1udW1iZXIiLAorICAg
ICJVbmRlZmluZWQiOiAidHlwZS10b2tlbi1lbXB0eSIsCisgICAgIk51bGwiOiAidHlwZS10b2tl
bi1lbXB0eSIsCisgICAgIig/KSI6ICJ0eXBlLXRva2VuLWVtcHR5IiwKKyAgICAiQm9vbGVhbiI6
ICJ0eXBlLXRva2VuLWJvb2xlYW4iLAorICAgICIobWFueSkiOiAidHlwZS10b2tlbi1tYW55Igor
fTsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuRGVsYXlIb3ZlclRpbWUgPSAzNTA7CisK
K1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3Rv
cjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcsCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0
b3IuT2JqZWN0LnByb3RvdHlwZSwKKworICAgIC8vIFB1YmxpYworCisgICAgdXBkYXRlOiBmdW5j
dGlvbih0eXBlcykKKyAgICB7CisgICAgICAgIHZhciB0aXRsZSA9IHR5cGVzLmRpc3BsYXlUeXBl
TmFtZTsKKyAgICAgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gdGl0bGU7CisgICAgICAg
IHRoaXMuX3R5cGVzID0gdHlwZXM7CisgICAgICAgIHZhciBoYXNoU3RyaW5nID0gdGl0bGVbdGl0
bGUubGVuZ3RoIC0gMV0gPT09ICI/IiA/IHRpdGxlLnNsaWNlKDAsIHRpdGxlLmxlbmd0aCAtIDEp
IDogdGl0bGU7CisKKyAgICAgICAgaWYgKHRoaXMuX2NvbG9yQ2xhc3MpCisgICAgICAgICAgICB0
aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9jb2xvckNsYXNzKTsKKworICAgICAg
ICB0aGlzLl9jb2xvckNsYXNzID0gV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JDbGFz
c0ZvclR5cGVbaGFzaFN0cmluZ10gfHwgInR5cGUtdG9rZW4tZGVmYXVsdCI7CisgICAgICAgIHRo
aXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuX2NvbG9yQ2xhc3MpOworICAgIH0sCisKKyAg
ICAvLyBQcml2YXRlCisKKyAgICBfc2V0VXBNb3VzZW92ZXJIYW5kbGVyczogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdmFyIHRpbWVvdXRJRCA9IG51bGw7CisKKyAgICAgICAgdGhpcy5lbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgZnVuY3Rpb24gc2hvd1BvcG92ZXJBZnRlckRlbGF5KCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB0aW1lb3V0SUQgPSBudWxsOworCisgICAgICAgICAgICAgICAgdmFyIGRvbVJl
Y3QgPSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgICAgICAg
ICAgdmFyIGJvdW5kcyA9IG5ldyBXZWJJbnNwZWN0b3IuUmVjdChkb21SZWN0LmxlZnQsIGRvbVJl
Y3QudG9wLCBkb21SZWN0LndpZHRoLCBkb21SZWN0LmhlaWdodCk7CisgICAgICAgICAgICAgICAg
dGhpcy5fdG9rZW5Bbm5vdGF0b3Iuc291cmNlQ29kZVRleHRFZGl0b3Iuc2hvd1BvcG92ZXJGb3JU
eXBlcyh0aGlzLl90eXBlcywgYm91bmRzLCB0aGlzLl9wb3BvdmVyVGl0bGUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkU2hvd1BvcG92ZXIoKSkKKyAgICAg
ICAgICAgICAgICB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KHNob3dQb3BvdmVyQWZ0ZXJEZWxheS5i
aW5kKHRoaXMpLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5EZWxheUhvdmVyVGltZSk7Cisg
ICAgICAgIH0uYmluZCh0aGlzKSk7CisKKyAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoIm1vdXNlb3V0IiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAodGltZW91dElE
KQorICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SUQpOworICAgICAgICB9LmJp
bmQodGhpcykpOworICAgIH0sCisKKyAgICBfc2hvdWxkU2hvd1BvcG92ZXI6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIGlmICgodGhpcy5fdHlwZXMuZ2xvYmFsUHJpbWl0aXZlVHlwZU5hbWVz
ICYmIHRoaXMuX3R5cGVzLmdsb2JhbFByaW1pdGl2ZVR5cGVOYW1lcy5sZW5ndGggPiAxKSB8fCAo
dGhpcy5fdHlwZXMubG9jYWxQcmltaXRpdmVUeXBlTmFtZXMgJiYgdGhpcy5fdHlwZXMubG9jYWxQ
cmltaXRpdmVUeXBlTmFtZXMubGVuZ3RoID4gMSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgICAgICBpZiAoKHRoaXMuX3R5cGVzLmdsb2JhbFN0cnVjdHVyZXMgJiYgdGhpcy5fdHlw
ZXMuZ2xvYmFsU3RydWN0dXJlcy5sZW5ndGgpIHx8ICh0aGlzLl90eXBlcy5sb2NhbFN0cnVjdHVy
ZXMgJiYgdGhpcy5fdHlwZXMubG9jYWxTdHJ1Y3R1cmVzLmxlbmd0aCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237186</attachid>
            <date>2014-08-26 17:03:58 -0700</date>
            <delta_ts>2014-08-29 22:41:23 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>81191</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTcyOTY5KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDE0LTA4LTI2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IENyZWF0ZSBhIFVJIGZvciBkaXNwbGF5aW5nIEphdmFTY3JpcHQgdHlw
ZSBpbmZvcm1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1MTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSmF2YVNjcmlwdENvcmUgbm93IGhhcyBhIHR5cGUgcHJvZmlsZXIuIFRoaXMgcGF0Y2gg
cHJvdmlkZXMgYSBmcm9udGVuZAorICAgICAgICB1c2VyIGludGVyZmFjZSBmb3IgZGlzcGxheWlu
ZyB0aGlzIHR5cGUgaW5mb3JtYXRpb24gaW4gdGhlIFdlYiBJbnNwZWN0b3IuCisgICAgICAgIFRo
ZSB1c2VyIGludGVyZmFjZSB3b3JrcyBieSBwbGFjaW5nIGlubGluZSAidHlwZSB0b2tlbnMiIG5l
eHQgdG8gaW1wb3J0YW50CisgICAgICAgIEphdmFTY3JpcHQgZXhwcmVzc2lvbnM6IGZ1bmN0aW9u
IGFyZ3VtZW50cywgZnVuY3Rpb24gcmV0dXJuIHR5cGVzLCBhbmQgCisgICAgICAgIHZhcmlhYmxl
IGRlY2xhcmF0aW9ucy4gVHlwZSBpbmZvcm1hdGlvbiBjYW4gYWxzbyBiZSBzZWVuIGZvciBhbG1v
c3QgZXZlcnkKKyAgICAgICAgSmF2YVNjaXB0IGV4cHJlc3Npb24ganVzdCBieSBob3ZlcmluZyBv
dmVyIGl0IHdoaWxlIHZpZXdpbmcgYSBKYXZhU2NyaXB0IGZpbGUuCisKKyAgICAgICAgQ3VycmVu
dGx5LCB0dXJuaW5nIG9uIHRoZSB0eXBlIHByb2ZpbGVyIGlzIGV4cGVuc2l2ZSwgc28gdGhlIGlu
c3BlY3RvcgorICAgICAgICBlbnN1cmVzIHRvIG5ldmVyIHR1cm4gb24gdHlwZSBwcm9maWxpbmcg
dW50aWwgdGhlIHVzZXIgc3BlY2lmaWNhbGx5IGFza3MgCisgICAgICAgIGZvciB0eXBlIGluZm9y
bWF0aW9uIHRvIGJlIHR1cm5lZCBvbi4KKworICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4ubHBy
b2ovbG9jYWxpemVkU3RyaW5ncy5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Jhc2UvTWFp
bi5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tl
blRyYWNraW5nQ29udHJvbGxlci5qczoKKyAgICAgICAgQWRkZWQgYSBuZXcgdHlwZSBwcm9maWxp
bmcgbW9kZS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVy
U291cmNlTWFwLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRv
a2VuQW5ub3RhdG9yLmpzOiBBZGRlZC4KKyAgICAgICAgVGhpcyBjbGFzcyBpcyByZXNwb25zaWJs
ZSBmb3IgYW5ub3RhaW5nIHByb2R1Y2luZyB0aGUgaW5saW5lCisgICAgICAgICJ0eXBlIHRva2Vu
IiBhbm5vdGF0aW9ucy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRp
b25JdGVtVHlwZXMuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRt
bDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanM6CisgICAgICAgICog
VXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qczoKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL1NjcmlwdENvbnRlbnRWaWV3LmpzOgorICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CisgICAgICAgIElzIHJlc3BvbnNp
YmxlIGZvciB0aGUgbWFuYWdlbWVudCBvZiBUeXBlVG9rZW5Bbm5vdGF0b3IuCisKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRDb250ZW50Vmlldy5qczoKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL1RleHRFZGl0b3IuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9W
aWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L1ZpZXdzL1R5cGVQcm9wZXJ0aWVzU2VjdGlvbi5qczogQWRkZWQuCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmNzczogQWRkZWQuCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmpzOiBBZGRlZC4KKyAgICAgICAgVGhlIHZpZXcg
Zm9yIGRpc3BsYXlpbmcgdGhlIGlubGluZSAidHlwZSB0b2tlbnMiLgorCiAyMDE0LTA4LTI1ICBC
cmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIFBhc3Mg
T0ZGSUNJQUxfQlVJTEQgZmxhZyB0byBXZWJJbnNwZWN0b3JVSSBidWlsZCBwcm9jZXNzCkluZGV4
OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRT
dHJpbmdzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRp
b25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMJKHJldmlzaW9uIDE3Mjk2OSkKKysrIFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmlu
Z3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw2ICsyMjksNyBAQAogAGwAbwBjAGEAbABpAHoA
ZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAaQBkAGUAIAB0AGgAZQAgACUAcwAgAGQAZQB0AGEAaQBs
AHMAIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiAF0AIAA9ACAAIgBIAGkAZABlACAAdABoAGUA
IAAlAHMAIABkAGUAdABhAGkAbABzACAAcwBpAGQAZQBiAGEAcgAgACgAJQBzACkAIgA7AAogAGwA
bwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAaQBkAGUAIAB0AGgAZQAgACUAcwAg
AG4AYQB2AGkAZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACIAXQAgAD0AIAAiAEgAaQBkAGUA
IAB0AGgAZQAgACUAcwAgAG4AYQB2AGkAZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACIAOwAK
IABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBIAGkAZABlACAAdABoAGUAIAAl
AHMAIABuAGEAdgBpAGcAYQB0AGkAbwBuACAAcwBpAGQAZQBiAGEAcgAgACgAJQBzACkAIgBdACAA
PQAgACIASABpAGQAZQAgAHQAaABlACAAJQBzACAAbgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBk
AGUAYgBhAHIAIAAoACUAcwApACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBz
AFsAIgBIAGkAZABlACAAdAB5AHAAZQAgAGkAbgBmAG8AcgBtAGEAdABpAG8AbgAiAF0AIAA9ACAA
IgBIAGkAZABlACAAdAB5AHAAZQAgAGkAbgBmAG8AcgBtAGEAdABpAG8AbgAiADsACiAAbABvAGMA
YQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIASABvAHMAdAAiAF0AIAA9ACAAIgBIAG8AcwB0
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBJAGMAbwBuACAATwBu
AGwAeQAiAF0AIAA9ACAAIgBJAGMAbwBuACAATwBuAGwAeQAiADsACiAAbABvAGMAYQBsAGkAegBl
AGQAUwB0AHIAaQBuAGcAcwBbACIASQBjAG8AbgAgAGEAbgBkACAAVABlAHgAdAAgACgASABvAHIA
aQB6AG8AbgB0AGEAbAApACIAXQAgAD0AIAAiAEkAYwBvAG4AIABhAG4AZAAgAFQAZQB4AHQAIAAo
AEgAbwByAGkAegBvAG4AdABhAGwAKQAiADsACkBAIC0zMzYsNiArMzM3LDcgQEAKIABsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBQAHIAbwBjAGUAcwBzAGkAbgBnACAASQBuAHMA
dAByAHUAYwB0AGkAbwBuACIAXQAgAD0AIAAiAFAAcgBvAGMAZQBzAHMAaQBuAGcAIABJAG4AcwB0
AHIAdQBjAHQAaQBvAG4AIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAi
AFAAcgBvAGYAaQBsAGUAIAAlAGQAIgBdACAAPQAgACIAUAByAG8AZgBpAGwAZQAgACUAZAAiADsA
CiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUAByAG8AcABlAHIAdABpAGUA
cwAiAF0AIAA9ACAAIgBQAHIAbwBwAGUAcgB0AGkAZQBzACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUA
ZABTAHQAcgBpAG4AZwBzAFsAIgBQAHIAbwB0AG8AdAB5AHAAZQAiAF0AIAA9ACAAIgBQAHIAbwB0
AG8AdAB5AHAAZQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUQB1
AGUAcgB5ACAAUABhAHIAYQBtAGUAdABlAHIAcwAiAF0AIAA9ACAAIgBRAHUAZQByAHkAIABQAGEA
cgBhAG0AZQB0AGUAcgBzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsA
IgBRAHUAZQByAHkAIABTAHQAcgBpAG4AZwAiAF0AIAA9ACAAIgBRAHUAZQByAHkAIABTAHQAcgBp
AG4AZwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBhAGQAaQBh
AGwAIABHAHIAYQBkAGkAZQBuAHQAIgBdACAAPQAgACIAUgBhAGQAaQBhAGwAIABHAHIAYQBkAGkA
ZQBuAHQAIgA7AApAQCAtMzY2LDYgKzM2OCw4IEBACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIA
aQBuAGcAcwBbACIAUgBlAHMAbwB1AHIAYwBlAHMAIgBdACAAPQAgACIAUgBlAHMAbwB1AHIAYwBl
AHMAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFIAZQBzAHAAbwBu
AHMAZQAiAF0AIAA9ACAAIgBSAGUAcwBwAG8AbgBzAGUAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBk
AFMAdAByAGkAbgBnAHMAWwAiAFIAZQBzAHAAbwBuAHMAZQAgAEgAZQBhAGQAZQByAHMAIgBdACAA
PQAgACIAUgBlAHMAcABvAG4AcwBlACAASABlAGEAZABlAHIAcwAiADsACisAbABvAGMAYQBsAGkA
egBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHQAdQByAG4AIAB0AHkAcABlACAAZgBvAHIAIABh
AG4AbwBuAHkAbQBvAHUAcwAgAGYAdQBuAGMAdABpAG8AbgAiAF0AIAA9ACAAIgBSAGUAdAB1AHIA
bgAgAHQAeQBwAGUAIABmAG8AcgAgAGEAbgBvAG4AeQBtAG8AdQBzACAAZgB1AG4AYwB0AGkAbwBu
ACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUAdAB1AHIAbgAg
AHQAeQBwAGUAIABmAG8AcgAgAGYAdQBuAGMAdABpAG8AbgA6ACAAJQBzACIAXQAgAD0AIAAiAFIA
ZQB0AHUAcgBuACAAdAB5AHAAZQAgAGYAbwByACAAZgB1AG4AYwB0AGkAbwBuADoAIAAlAHMAIgA7
AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFIAZQB2AGUAYQBsACAAaQBu
ACAARABPAE0AIABUAHIAZQBlACIAXQAgAD0AIAAiAFIAZQB2AGUAYQBsACAAaQBuACAARABPAE0A
IABUAHIAZQBlACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUA
dgBlAGEAbAAgAGkAbgAgAEQAZQBiAHUAZwBnAGUAcgAgAE4AYQB2AGkAZwBhAHQAaQBvAG4AIABT
AGkAZABlAGIAYQByACIAXQAgAD0AIAAiAFIAZQB2AGUAYQBsACAAaQBuACAARABlAGIAdQBnAGcA
ZQByACAATgBhAHYAaQBnAGEAdABpAG8AbgAgAFMAaQBkAGUAYgBhAHIAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFIAZQB2AGUAYQBsACAAaQBuACAATwByAGkAZwBp
AG4AYQBsACAAUgBlAHMAbwB1AHIAYwBlACIAXQAgAD0AIAAiAFIAZQB2AGUAYQBsACAAaQBuACAA
TwByAGkAZwBpAG4AYQBsACAAUgBlAHMAbwB1AHIAYwBlACIAOwAKQEAgLTQwNSw2ICs0MDksNyBA
QAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIAB0AGgAZQAg
ACUAcwAgAG4AYQB2AGkAZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiAF0A
IAA9ACAAIgBTAGgAbwB3ACAAdABoAGUAIAAlAHMAIABuAGEAdgBpAGcAYQB0AGkAbwBuACAAcwBp
AGQAZQBiAGEAcgAgACgAJQBzACkAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBn
AHMAWwAiAFMAaABvAHcAIAB0AGkAbQBlAHMAIABhAHMAIABhAGIAcwBvAGwAdQB0AGUAIAB0AGkA
bQBlAHMAIgBdACAAPQAgACIAUwBoAG8AdwAgAHQAaQBtAGUAcwAgAGEAcwAgAGEAYgBzAG8AbAB1
AHQAZQAgAHQAaQBtAGUAcwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBb
ACIAUwBoAG8AdwAgAHQAaQBtAGUAcwAgAGEAcwAgAHAAZQByAGMAZQBuAHQAYQBnAGUAcwAiAF0A
IAA9ACAAIgBTAGgAbwB3ACAAdABpAG0AZQBzACAAYQBzACAAcABlAHIAYwBlAG4AdABhAGcAZQBz
ACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAdAB5
AHAAZQAgAGkAbgBmAG8AcgBtAGEAdABpAG8AbgAiAF0AIAA9ACAAIgBTAGgAbwB3ACAAdAB5AHAA
ZQAgAGkAbgBmAG8AcgBtAGEAdABpAG8AbgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIA
aQBuAGcAcwBbACIAUwBpAHoAZQAiAF0AIAA9ACAAIgBTAGkAegBlACIAOwAKIABsAG8AYwBhAGwA
aQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAG0AYQBsAGwAIABJAGMAbwBuAHMAIgBdACAAPQAg
ACIAUwBtAGEAbABsACAASQBjAG8AbgBzACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBp
AG4AZwBzAFsAIgBTAG8AYwBrAGUAdAAiAF0AIAA9ACAAIgBTAG8AYwBrAGUAdAAiADsACkBAIC00
NTEsNiArNDU2LDcgQEAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBUAHIA
YQBuAHMAZgBlAHIAZQBkACIAXQAgAD0AIAAiAFQAcgBhAG4AcwBmAGUAcgBlAGQAIgA7AAogAGwA
bwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFQAeQBwAGUAIgBdACAAPQAgACIAVAB5
AHAAZQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAVAB5AHAAZQAg
AEkAcwBzAHUAZQAiAF0AIAA9ACAAIgBUAHkAcABlACAASQBzAHMAdQBlACIAOwAKKwBsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBUAHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkA
bwBuACAAZgBvAHIAIAB2AGEAcgBpAGEAYgBsAGUAOgAgACUAcwAiAF0AIAA9ACAAIgBUAHkAcABl
ACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACAAZgBvAHIAIAB2AGEAcgBpAGEAYgBsAGUAOgAgACUA
cwAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAVQBuAGsAbgBvAHcA
bgAgAG4AbwBkAGUAIgBdACAAPQAgACIAVQBuAGsAbgBvAHcAbgAgAG4AbwBkAGUAIgA7AAogAGwA
bwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFUAbgB0AGkAdABsAGUAZAAiAF0AIAA9
ACAAIgBVAG4AdABpAHQAbABlAGQAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBn
AHMAWwAiAFUAcwBlAHIAIABBAGcAZQBuAHQAIABTAHQAeQBsAGUAcwBoAGUAZQB0ACIAXQAgAD0A
IAAiAFUAcwBlAHIAIABBAGcAZQBuAHQAIABTAHQAeQBsAGUAcwBoAGUAZQB0ACIAOwAKSW5kZXg6
IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJKHJldmlz
aW9uIDE3Mjk2OSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4u
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDYgKzEzNiw3IEBACiAgICAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSJWaWV3cy9UaW1lbGluZVZpZXcuY3NzIj4KICAgICA8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1Rvb2xiYXIuY3NzIj4KICAgICA8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1RyZWVFbGVtZW50U3RhdHVzQnV0dG9uLmNzcyI+CisgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9UeXBlVG9rZW5WaWV3LmNzcyI+CiAK
ICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IkNvbnRyb2xsZXJzL0NvZGVNaXJyb3JD
b21wbGV0aW9uQ29udHJvbGxlci5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iQ29udHJvbGxlcnMvQ29kZU1pcnJvckRyYWdUb0FkanVzdE51bWJlckNvbnRyb2xsZXIuY3Nz
Ij4KQEAgLTQ2MSw2ICs0NjIsOCBAQAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Ub29sYmFyLmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHJlZUVsZW1lbnRTdGF0dXNCdXR0
b24uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UcmVlT3V0bGluZURhdGFH
cmlkU3luY2hyb25pemVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHlw
ZVByb3BlcnRpZXNTZWN0aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlld3Mv
VHlwZVRva2VuVmlldy5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxl
cnMvQ29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyLmpzIj48L3NjcmlwdD4KIApAQCAtNDkyLDYg
KzQ5NSw3IEBACiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1NvdXJjZU1hcE1hbmFnZXIu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9TdG9yYWdlTWFuYWdl
ci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1RpbWVsaW5lTWFu
YWdlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1R5cGVUb2tl
bkFubm90YXRvci5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQmFzZS9NYWluLmpz
Ij48L3NjcmlwdD4KIApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
QmFzZS9NYWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0Jhc2UvTWFpbi5qcwkocmV2aXNpb24gMTcyOTY5KQorKysgU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIs
NiArMTYyLDEwIEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5z
aG93U2hhZG93RE9NU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygic2hvdy1zaGFk
b3ctZG9tIiwgZmFsc2UpOwogICAgIHRoaXMuc2hvd1JlcGxheUludGVyZmFjZVNldHRpbmcgPSBu
ZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoInNob3ctd2ViLXJlcGxheSIsIGZhbHNlKTsKIAorICAg
IHRoaXMuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nID0gbmV3IFdlYkluc3Bl
Y3Rvci5TZXR0aW5nKCJzaG93LWphdmFzY3JpcHQtdHlwZS1pbmZvcm1hdGlvbiIsIGZhbHNlKTsK
KyAgICBpZiAodGhpcy5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWUp
CisgICAgICAgIFJ1bnRpbWVBZ2VudC5lbmFibGVUeXBlUHJvZmlsZXIoKTsKKwogICAgIHRoaXMu
bW91c2VDb29yZHMgPSB7CiAgICAgICAgIHg6IDAsCiAgICAgICAgIHk6IDAKSW5kZXg6IFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tl
blRyYWNraW5nQ29udHJvbGxlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIuanMJKHJldmlzaW9uIDE3Mjk2OSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJv
clRva2VuVHJhY2tpbmdDb250CiAgICAgTm9uZTogIm5vbmUiLAogICAgIE5vblN5bWJvbFRva2Vu
czogIm5vbi1zeW1ib2wtdG9rZW5zIiwKICAgICBKYXZhU2NyaXB0RXhwcmVzc2lvbjogImphdmFz
Y3JpcHQtZXhwcmVzc2lvbiIsCisgICAgSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjogImphdmFz
Y3JpcHQtdHlwZS1pbmZvcm1hdGlvbiIsCiAgICAgTWFya2VkVG9rZW5zOiAibWFya2VkLXRva2Vu
cyIKIH0KIApAQCAtMzg5LDYgKzM5MCw3IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5U
cmFja2luZ0NvbnQKICAgICAgICAgICAgIHRoaXMuX2NhbmRpZGF0ZSA9IHRoaXMuX3Byb2Nlc3NO
b25TeW1ib2xUb2tlbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRF
eHByZXNzaW9uOgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFj
a2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOgogICAgICAgICAg
ICAgdGhpcy5fY2FuZGlkYXRlID0gdGhpcy5fcHJvY2Vzc0phdmFTY3JpcHRFeHByZXNzaW9uKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJv
clRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTWFya2VkVG9rZW5zOgpJbmRleDogU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyU291cmNl
TWFwLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5qcwkocmV2aXNpb24gMTcyOTY5KQorKysg
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVy
U291cmNlTWFwLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNSArNDUsMjcgQEAgV2ViSW5zcGVj
dG9yLkZvcm1hdHRlclNvdXJjZU1hcC5wcm90b3R5cAogICAgIG9yaWdpbmFsVG9Gb3JtYXR0ZWQ6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CiAgICAgICAgIHZhciBv
cmlnaW5hbFBvc2l0aW9uID0gdGhpcy5fbG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX29yaWdpbmFs
TGluZUVuZGluZ3MsIGxpbmVOdW1iZXIgfHwgMCwgY29sdW1uTnVtYmVyIHx8IDApOworICAgICAg
ICByZXR1cm4gdGhpcy5vcmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQob3JpZ2luYWxQb3NpdGlv
bik7CisgICAgfSwKKworICAgIG9yaWdpbmFsUG9zaXRpb25Ub0Zvcm1hdHRlZDogZnVuY3Rpb24o
b3JpZ2luYWxQb3NpdGlvbikKKyAgICB7CiAgICAgICAgIHZhciBmb3JtYXR0ZWRQb3NpdGlvbiA9
IHRoaXMuX2NvbnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLm9yaWdpbmFsLCB0aGlzLl9tYXBw
aW5nLmZvcm1hdHRlZCwgb3JpZ2luYWxQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiB0aGlzLl9w
b3NpdGlvblRvTG9jYXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGZvcm1hdHRlZFBv
c2l0aW9uKTsKICAgICB9LAogCisKICAgICBmb3JtYXR0ZWRUb09yaWdpbmFsOiBmdW5jdGlvbihs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCiAgICAgeworICAgICAgICB2YXIgb3JpZ2luYWxQb3Np
dGlvbiA9IHRoaXMuZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldChsaW5lTnVtYmVyLCBjb2x1bW5O
dW1iZXIpOworICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0aW9uKHRoaXMuX29y
aWdpbmFsTGluZUVuZGluZ3MsIG9yaWdpbmFsUG9zaXRpb24pOworICAgIH0sCisKKyAgICBmb3Jt
YXR0ZWRUb09yaWdpbmFsT2Zmc2V0OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
CisgICAgewogICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9sb2NhdGlvblRv
UG9zaXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGxpbmVOdW1iZXIgfHwgMCwgY29s
dW1uTnVtYmVyIHx8IDApOwogICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMuX2Nv
bnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLmZvcm1hdHRlZCwgdGhpcy5fbWFwcGluZy5vcmln
aW5hbCwgZm9ybWF0dGVkUG9zaXRpb24pOwotICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25U
b0xvY2F0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MsIG9yaWdpbmFsUG9zaXRpb24pOwor
ICAgICAgICByZXR1cm4gb3JpZ2luYWxQb3NpdGlvbjsKICAgICB9LAogCiAgICAgLy8gUHJpdmF0
ZQpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMv
VHlwZVRva2VuQW5ub3RhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L1R5cGVUb2tlbkFubm90YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IgPSBmdW5jdGlvbihz
b3VyY2VDb2RlVGV4dEVkaXRvciwgc2NyaXB0KQoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3Qu
Y2FsbCh0aGlzKTsKKworICAgIGNvbnNvbGUuYXNzZXJ0KHNvdXJjZUNvZGVUZXh0RWRpdG9yICYm
IHNvdXJjZUNvZGVUZXh0RWRpdG9yIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVU
ZXh0RWRpdG9yLCBzb3VyY2VDb2RlVGV4dEVkaXRvcik7CisgICAgY29uc29sZS5hc3NlcnQoc2Ny
aXB0LCBzY3JpcHQpOworCisgICAgdGhpcy5fc2NyaXB0ID0gc2NyaXB0OworICAgIHRoaXMuX3Nv
dXJjZUNvZGVUZXh0RWRpdG9yID0gc291cmNlQ29kZVRleHRFZGl0b3I7CisgICAgdGhpcy5fdHlw
ZVRva2VuTm9kZXMgPSBbXTsKKyAgICB0aGlzLl90eXBlVG9rZW5Cb29rbWFya3MgPSBbXTsKKyAg
ICB0aGlzLl90aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgdGhpcy5faXNBY3RpdmUgPSBm
YWxzZTsKK307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlID0g
eworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLAorICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisKKyAgICAvLyBQdWJs
aWMKKworICAgIGdldCBpc0FjdGl2ZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5faXNB
Y3RpdmU7CisgICAgfSwKKworICAgIGdldCBzb3VyY2VDb2RlVGV4dEVkaXRvcigpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3I7CisgICAgfSwKKworICAg
IHBhdXNlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5l
ZWRlZCgpOworICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOworICAgIH0sCisKKyAgICBy
ZXN1bWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVl
ZGVkKCk7CisgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5faW5z
ZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAgcmVmcmVzaDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5faXNBY3RpdmUpOworICAgICAgICBpZiAo
IXRoaXMuX2lzQWN0aXZlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2Ns
ZWFyVGltZW91dElmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX2luc2VydEFubm90YXRpb25zKCk7
CisgICAgfSwKKworICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9j
bGVhclRpbWVvdXRJZk5lZWRlZCgpOworICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7Cisg
ICAgICAgIHRoaXMuX2NsZWFyVHlwZVRva2VucygpOworICAgICAgICB0aGlzLl9pbnNlcnRBbm5v
dGF0aW9ucygpOworICAgIH0sCisKKyAgICB0b2dnbGVUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9pc0FjdGl2ZSkgeworICAgICAgICAgICAgdGhp
cy5faXNBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2NsZWFyVHlwZVRva2Vucygp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOwor
ICAgICAgICAgICAgdGhpcy5yZXNldCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2lzQWN0aXZlOworICAgIH0sCisKKyAgICAvLyBQcml2YXRlCisKKyAgICBfaW5zZXJ0QW5u
b3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5faXNBY3RpdmUp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNjcmlwdFN5bnRheFRyZWUgPSB0
aGlzLl9zY3JpcHQuc2NyaXB0U3ludGF4VHJlZTsKKworICAgICAgICBpZiAoIXNjcmlwdFN5bnRh
eFRyZWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjcmlwdC5yZXF1ZXN0U2NyaXB0U3ludGF4VHJl
ZShmdW5jdGlvbihzeW50YXhUcmVlKSB7CisgICAgICAgICAgICAgICAgLy8gQWZ0ZXIgcmVxdWVz
dGluZyB0aGUgdHJlZSwgd2Ugc3RpbGwgbWlnaHQgZ2V0IGEgbnVsbCB0cmVlIGZyb20gYSBwYXJz
ZSBlcnJvci4KKyAgICAgICAgICAgICAgICBpZiAoc3ludGF4VHJlZSkKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICAgICAgICAgIH0uYmluZCh0aGlz
KSk7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc2Ny
aXB0U3ludGF4VHJlZS5wYXJzZWRTdWNjZXNzZnVsbHkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdmFyIHtzdGFydE9mZnNldCwgZW5kT2Zmc2V0fSA9IHRoaXMuX3NvdXJjZUNvZGVU
ZXh0RWRpdG9yLnZpc2libGVSYW5nZU9mZnNldHMoKTsKKworICAgICAgICB2YXIgc3RhcnRUaW1l
ID0gRGF0ZS5ub3coKTsKKyAgICAgICAgdmFyIGFsbE5vZGVzSW5SYW5nZSA9IHNjcmlwdFN5bnRh
eFRyZWUuZmlsdGVyQnlSYW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICAgICAgc2Ny
aXB0U3ludGF4VHJlZS51cGRhdGVUeXBlcyhhbGxOb2Rlc0luUmFuZ2UsIGZ1bmN0aW9uIGFmdGVy
VHlwZVVwZGF0ZXMoKSB7CisgICAgICAgICAgICAvLyBCZWNhdXNlIHRoaXMgaXMgYW4gYXN5bmNo
cm9ub3VzIGNhbGwsIHdlIGNvdWxkIGhhdmUgYmVlbiBkZWFjdGl2YXRlZCBiZWZvcmUgdGhlIGNh
bGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgICAgICAgICAgIGlmICghdGhpcy5faXNBY3Rp
dmUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBhbGxOb2Rlc0luUmFu
Z2UuZm9yRWFjaCh0aGlzLl9pbnNlcnRUeXBlVG9rZW5zRm9yRWFjaE5vZGUsIHRoaXMpOworICAg
ICAgICAgICAgYWxsTm9kZXNJblJhbmdlLmZvckVhY2godGhpcy5fdXBkYXRlVHlwZVRva2Vuc0Zv
ckVhY2hOb2RlLCB0aGlzKTsKKworICAgICAgICAgICAgdmFyIHRvdGFsVGltZSA9IERhdGUubm93
KCkgLSBzdGFydFRpbWU7CisgICAgICAgICAgICB2YXIgdGltZW91dFRpbWUgPSBNYXRoLm1pbihN
YXRoLm1heCg3NTAwLCB0b3RhbFRpbWUpLCA4ICogdG90YWxUaW1lKTsKKworICAgICAgICAgICAg
dGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIHRpbWVvdXRVcGRh
dGUoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOwor
ICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydEFubm90YXRpb25zKCk7CisgICAgICAgICAgICB9
LmJpbmQodGhpcyksIHRpbWVvdXRUaW1lKTsKKyAgICAgICAgfS5iaW5kKHRoaXMpKTsKKyAgICB9
LAorCisgICAgX2luc2VydFR5cGVUb2tlbnNGb3JFYWNoTm9kZTogZnVuY3Rpb24obm9kZSkKKyAg
ICB7CisgICAgICAgIHZhciBzY3JpcHRTeW50YXhUcmVlID0gdGhpcy5fc2NyaXB0Ll9zY3JpcHRT
eW50YXhUcmVlOworCisgICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlv
bjoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5G
dW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICBmb3IgKHZhciBwYXJhbSBvZiBub2RlLnBh
cmFtcykgeworICAgICAgICAgICAgICAgIGlmICghcGFyYW0uYXR0YWNobWVudHMuX190eXBlVG9r
ZW4gJiYgcGFyYW0uYXR0YWNobWVudHMudHlwZXMgJiYgcGFyYW0uYXR0YWNobWVudHMudHlwZXMu
ZGlzcGxheVR5cGVOYW1lKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRUb2tlbihw
YXJhbS5yYW5nZVswXSwgcGFyYW0sIGZhbHNlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5U
aXRsZVR5cGUuVmFyaWFibGUsIHBhcmFtLm5hbWUpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBJZiBhIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXhwbGljaXQgcmV0dXJuIHR5
cGUsIHRoZW4gZG9uJ3Qgc2hvdyBhIHJldHVybiB0eXBlIHVubGVzcyB3ZSB0aGluayBpdCdzIGEg
Y29uc3RydWN0b3IuCisgICAgICAgICAgICB2YXIgZnVuY3Rpb25SZXR1cm5UeXBlID0gbm9kZS5h
dHRhY2htZW50cy5yZXR1cm5UeXBlczsKKyAgICAgICAgICAgIGlmIChub2RlLmF0dGFjaG1lbnRz
Ll9fdHlwZVRva2VuIHx8ICFmdW5jdGlvblJldHVyblR5cGUgfHwgIWZ1bmN0aW9uUmV0dXJuVHlw
ZS5kaXNwbGF5VHlwZU5hbWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGlmIChzY3JpcHRTeW50YXhUcmVlLmNvbnRhaW5zTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQobm9k
ZS5ib2R5KSB8fCBmdW5jdGlvblJldHVyblR5cGUuZGlzcGxheVR5cGVOYW1lICE9PSAiVW5kZWZp
bmVkIikgeworICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBub2RlLmlkID8gbm9k
ZS5pZC5uYW1lIDogbnVsbDsKKyAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRUb2tlbihub2Rl
LmlzR2V0dGVyT3JTZXR0ZXIgPyBub2RlLmdldHRlck9yU2V0dGVyUmFuZ2VbMF0gOiBub2RlLnJh
bmdlWzBdLCBub2RlLAorICAgICAgICAgICAgICAgICAgICB0cnVlLCBXZWJJbnNwZWN0b3IuVHlw
ZVRva2VuVmlldy5UaXRsZVR5cGUuUmV0dXJuU3RhdGVtZW50LCBmdW5jdGlvbk5hbWUpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9yOgorICAgICAgICAg
ICAgaWYgKCFub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuICYmIG5vZGUuYXR0YWNobWVudHMu
dHlwZXMgJiYgbm9kZS5hdHRhY2htZW50cy50eXBlcy5kaXNwbGF5VHlwZU5hbWUpCisgICAgICAg
ICAgICAgICAgdGhpcy5faW5zZXJ0VG9rZW4obm9kZS5pZC5yYW5nZVswXSwgbm9kZSwgZmFsc2Us
IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5WYXJpYWJsZSwgbm9kZS5pZC5u
YW1lKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2lu
c2VydFRva2VuOiBmdW5jdGlvbihvcmlnaW5hbE9mZnNldCwgbm9kZSwgc2hvdWxkVHJhbnNsYXRl
T2Zmc2V0VG9BZnRlclBhcmFtZXRlckxpc3QsIHR5cGVUb2tlblRpdGxlVHlwZSwgZnVuY3Rpb25P
clZhcmlhYmxlTmFtZSkKKyAgICB7CisgICAgICAgIHZhciB0b2tlblBvc2l0aW9uID0gdGhpcy5f
c291cmNlQ29kZVRleHRFZGl0b3Iub3JpZ2luYWxPZmZzZXRUb0N1cnJlbnRQb3NpdGlvbihvcmln
aW5hbE9mZnNldCk7CisgICAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gdGhpcy5fc291cmNlQ29k
ZVRleHRFZGl0b3IuY3VycmVudFBvc2l0aW9uVG9DdXJyZW50T2Zmc2V0KHRva2VuUG9zaXRpb24p
OworICAgICAgICB2YXIgc291cmNlU3RyaW5nID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3Iu
c3RyaW5nOworCisgICAgICAgIGlmIChzaG91bGRUcmFuc2xhdGVPZmZzZXRUb0FmdGVyUGFyYW1l
dGVyTGlzdCkgeworICAgICAgICAgICAgLy8gVHJhbnNsYXRlIHRoZSBwb3NpdGlvbiB0byB0aGUg
Y2xvc2luZyBwYXJlbnRoZXNpcyBvZiB0aGUgZnVuY3Rpb24gYXJndW1lbnRzOgorICAgICAgICAg
ICAgLy8gdHJhbnNsYXRlIGZyb206IFt0eXBlLXRva2VuXSBmdW5jdGlvbiBmb28oKSB7fSA9PiB0
bzogZnVuY3Rpb24gZm9vKCkgW3R5cGUtdG9rZW5dIHt9CisgICAgICAgICAgICBjdXJyZW50T2Zm
c2V0ID0gdGhpcy5fdHJhbnNsYXRlVG9PZmZzZXRBZnRlckZ1bmN0aW9uUGFyYW1ldGVyTGlzdChu
b2RlLCBjdXJyZW50T2Zmc2V0LCBzb3VyY2VTdHJpbmcpOworICAgICAgICAgICAgdG9rZW5Qb3Np
dGlvbiA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLmN1cnJlbnRPZmZzZXRUb0N1cnJlbnRQ
b3NpdGlvbihjdXJyZW50T2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdGU6IGJv
b2ttYXJrcyByZW5kZXIgdG8gdGhlIGxlZnQgb2YgdGhlIGNoYXJhY3RlciB0aGV5J3JlIGJlaW5n
IGRpc3BsYXllZCBuZXh0IHRvLgorICAgICAgICAvLyBUaGlzIGlzIHdoeSByaWdodCBtYXJnaW4g
Y2hlY2tzIHRoZSBjdXJyZW50IG9mZnNldC4gQW5kIHRoaXMgaXMgb2theSB0byBkbyBiZWNhdXNl
IEphdmFTY3JpcHQgY2FuJ3QgYmUgd3JpdHRlbiByaWdodC10by1sZWZ0LgorICAgICAgICB2YXIg
aXNTcGFjZVJlZ2V4cCA9IC9ccy87CisgICAgICAgIHZhciBzaG91bGRIYXZlTGVmdE1hcmdpbiA9
IGN1cnJlbnRPZmZzZXQgIT09IDAgJiYgIWlzU3BhY2VSZWdleHAudGVzdChzb3VyY2VTdHJpbmdb
Y3VycmVudE9mZnNldCAtIDFdKTsKKyAgICAgICAgdmFyIHNob3VsZEhhdmVSaWdodE1hcmdpbiA9
ICFpc1NwYWNlUmVnZXhwLnRlc3Qoc291cmNlU3RyaW5nW2N1cnJlbnRPZmZzZXRdKTsKKyAgICAg
ICAgdmFyIHR5cGVUb2tlbiA9IG5ldyBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldyh0aGlzLCBz
aG91bGRIYXZlUmlnaHRNYXJnaW4sIHNob3VsZEhhdmVMZWZ0TWFyZ2luLCB0eXBlVG9rZW5UaXRs
ZVR5cGUsIGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpOworICAgICAgICB2YXIgYm9va21hcmsgPSB0
aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvci5zZXRJbmxpbmVXaWRnZXQodG9rZW5Qb3NpdGlvbiwg
dHlwZVRva2VuLmVsZW1lbnQpOworICAgICAgICBub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2Vu
ID0gdHlwZVRva2VuOworICAgICAgICB0aGlzLl90eXBlVG9rZW5Ob2Rlcy5wdXNoKG5vZGUpOwor
ICAgICAgICB0aGlzLl90eXBlVG9rZW5Cb29rbWFya3MucHVzaChib29rbWFyayk7CisgICAgfSwK
KworICAgIF91cGRhdGVUeXBlVG9rZW5zRm9yRWFjaE5vZGU6IGZ1bmN0aW9uKG5vZGUpCisgICAg
eworICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgeworICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb246CisgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHBy
ZXNzaW9uOgorICAgICAgICAgICAgbm9kZS5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihwYXJhbSkg
eworICAgICAgICAgICAgICAgIGlmIChwYXJhbS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbikKKyAg
ICAgICAgICAgICAgICAgICAgcGFyYW0uYXR0YWNobWVudHMuX190eXBlVG9rZW4udXBkYXRlKHBh
cmFtLmF0dGFjaG1lbnRzLnR5cGVzKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYg
KG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4pCisgICAgICAgICAgICAgICAgbm9kZS5hdHRh
Y2htZW50cy5fX3R5cGVUb2tlbi51cGRhdGUobm9kZS5hdHRhY2htZW50cy5yZXR1cm5UeXBlcyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAgICBpZiAobm9k
ZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbikKKyAgICAgICAgICAgICAgICBub2RlLmF0dGFjaG1l
bnRzLl9fdHlwZVRva2VuLnVwZGF0ZShub2RlLmF0dGFjaG1lbnRzLnR5cGVzKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSwKKworICAgIF90cmFuc2xhdGVUb09mZnNldEFm
dGVyRnVuY3Rpb25QYXJhbWV0ZXJMaXN0OiBmdW5jdGlvbihub2RlLCBvZmZzZXQsIHNvdXJjZVN0
cmluZykKKyAgICB7CisgICAgICAgIC8vIFRoZSBhc3N1bXB0aW9uIGhlcmUgaXMgdGhhdCB3ZSBn
ZXQgdGhlIG9mZnNldCBzdGFydGluZyBhdCB0aGUgZnVuY3Rpb24ga2V5d29yZCAob3IgYWZ0ZXIg
dGhlIGdldC9zZXQga2V5d29yZHMpLgorICAgICAgICAvLyBXZSB3aWxsIHJldHVybiB0aGUgb2Zm
c2V0IGZvciB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcyBpbiB0aGUgZnVuY3Rpb24gZGVjbGFyYXRp
b24uCisgICAgICAgIC8vIEFsbCB0aGlzIGNvZGUgaXMganVzdCBhIHdheSB0byBmaW5kIHRoaXMg
cGFyZW50aGVzaXMgd2hpbGUgaWdub3JpbmcgY29tbWVudHMuCisKKyAgICAgICAgdmFyIGlzTXVs
dGlMaW5lQ29tbWVudCA9IGZhbHNlOworICAgICAgICB2YXIgaXNTaW5nbGVMaW5lQ29tbWVudCA9
IGZhbHNlOworICAgICAgICB2YXIgc2hvdWxkSWdub3JlID0gZmFsc2U7CisKKyAgICAgICAgZnVu
Y3Rpb24gaXNMaW5lVGVybWluYXRvcihjaGFyKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBS
ZWZlcmVuY2UgRWNtYVNjcmlwdCA1IGdyYW1tYXIgZm9yIHNpbmdsZSBsaW5lIGNvbW1lbnRzIGFu
ZCBsaW5lIHRlcm1pbmF0b3JzOgorICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVy
bmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTcuMworICAgICAgICAgICAgLy8gaHR0cDov
L3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTcuNAorICAgICAg
ICAgICAgcmV0dXJuIGNoYXIgPT09ICJcbiIgfHwgY2hhciA9PT0gIlxyIiB8fCBjaGFyID09PSAi
XHUyMDI4IiB8fCBjaGFyID09PSAiXHUyMDI5IjsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxl
ICgoc291cmNlU3RyaW5nW29mZnNldF0gIT09ICIpIiB8fCBzaG91bGRJZ25vcmUpICYmIG9mZnNl
dCA8IHNvdXJjZVN0cmluZy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChpc1NpbmdsZUxpbmVD
b21tZW50ICYmIGlzTGluZVRlcm1pbmF0b3Ioc291cmNlU3RyaW5nW29mZnNldF0pKSB7CisgICAg
ICAgICAgICAgICAgaXNTaW5nbGVMaW5lQ29tbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IHNob3VsZElnbm9yZSA9IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc011bHRpTGlu
ZUNvbW1lbnQgJiYgc291cmNlU3RyaW5nW29mZnNldF0gPT09ICIqIiAmJiBzb3VyY2VTdHJpbmdb
b2Zmc2V0ICsgMV0gPT09ICIvIikgeworICAgICAgICAgICAgICAgIGlzTXVsdGlMaW5lQ29tbWVu
dCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHNob3VsZElnbm9yZSA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIG9mZnNldCsrOworICAgICAgICAgICAgfSBlbHNlIGlmICghc2hvdWxkSWdub3Jl
ICYmIHNvdXJjZVN0cmluZ1tvZmZzZXRdID09PSAiLyIpIHsKKyAgICAgICAgICAgICAgICBvZmZz
ZXQrKzsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlU3RyaW5nW29mZnNldF0gPT09ICIqIikK
KyAgICAgICAgICAgICAgICAgICAgaXNNdWx0aUxpbmVDb21tZW50ID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChzb3VyY2VTdHJpbmdbb2Zmc2V0XSA9PT0gIi8iKQorICAgICAgICAg
ICAgICAgICAgICBpc1NpbmdsZUxpbmVDb21tZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHBhcnNpbmcuIENv
dWxkbid0IHBhcnNlIGNvbW1lbnQgcHJlYW1ibGUuIik7CisgICAgICAgICAgICAgICAgc2hvdWxk
SWdub3JlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb2Zmc2V0Kys7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMTsKKyAgICB9LAorCisgICAgX2Ns
ZWFyVHlwZVRva2VuczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fdHlwZVRva2Vu
Tm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBub2RlLmF0dGFjaG1l
bnRzLl9fdHlwZVRva2VuID0gbnVsbDsKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMuX3R5cGVU
b2tlbkJvb2ttYXJrcy5mb3JFYWNoKGZ1bmN0aW9uKGJvb2ttYXJrKSB7CisgICAgICAgICAgICBi
b29rbWFyay5jbGVhcigpOworICAgICAgICB9KTsKKworICAgICAgICB0aGlzLl90eXBlVG9rZW5O
b2RlcyA9IFtdOworICAgICAgICB0aGlzLl90eXBlVG9rZW5Cb29rbWFya3MgPSBbXTsKKyAgICB9
LAorCisgICAgX2NsZWFyVGltZW91dElmTmVlZGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICBpZiAodGhpcy5fdGltZW91dElkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGNsZWFyVGltZW91
dCh0aGlzLl90aW1lb3V0SWRlbnRpZmllcik7CisgICAgICAgICAgICB0aGlzLl90aW1lb3V0SWRl
bnRpZmllciA9IG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9OwpJbmRleDogU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtVHlwZXMuc3ZnCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9O
YXZpZ2F0aW9uSXRlbVR5cGVzLnN2ZwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbVR5cGVzLnN2Zwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCEtLSBDb3B5
cmlnaHQgwqkgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIC0tPgorPHN2ZyB2
ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0i
MCAwIDE0IDE0Ij4KKyAgICA8cmVjdCBjbGFzcz0ic3Ryb2tlZCIgZmlsbD0ibm9uZSIgc3Ryb2tl
PSJibGFjayIgeD0iMC41IiB5PSIxLjAiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiLz4K
KyAgICA8cGF0aCBjbGFzcz0ic3Ryb2tlZCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgc3Ry
b2tlLWxpbmVjYXA9InNxdWFyZSIgZD0iTSA2LjUgNS41IEwgNi41IDkuNSBNIDQuMCA0LjUgTCA5
LjAgNC41Ii8+Cis8L3N2Zz4KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01vZGVscy9TY3JpcHQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qcwkocmV2aXNpb24gMTcyOTY5KQorKysgU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSwxMSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlOwogICAgIH0sCiAKKyAgICBnZXQg
c2NyaXB0U3ludGF4VHJlZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2NyaXB0U3lu
dGF4VHJlZTsKKyAgICB9LAorCiAgICAgY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZDogZnVu
Y3Rpb24oKQogICAgIHsKICAgICAgICAgLy8gV2UgY2FuIHJlcXVlc3QgY29udGVudCBpZiB3ZSBo
YXZlIGFuIGlkLgpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL1NjcmlwdFN5bnRheFRyZWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanMJKHJldmlzaW9uIDE3
Mjk2OSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3Jp
cHRTeW50YXhUcmVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsOCArMTcyLDggQEAgV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlIAogICAgICAgICBpZiAoIXRoaXMuX3Bh
cnNlZFN1Y2Nlc3NmdWxseSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBp
ZiAoc3RhcnROb2RlLl9hdHRhY2htZW50cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQgIT09
IHVuZGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVybiBzdGFydE5vZGUuX2F0dGFjaG1lbnRzLl9o
YXNOb25FbXB0eVJldHVyblN0YXRlbWVudDsKKyAgICAgICAgaWYgKHN0YXJ0Tm9kZS5hdHRhY2ht
ZW50cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQgIT09IHVuZGVmaW5lZCkKKyAgICAgICAg
ICAgIHJldHVybiBzdGFydE5vZGUuYXR0YWNobWVudHMuX2hhc05vbkVtcHR5UmV0dXJuU3RhdGVt
ZW50OwogCiAgICAgICAgIGZ1bmN0aW9uIHJlbW92ZUZ1bmN0aW9uc0ZpbHRlcihub2RlKQogICAg
ICAgICB7CkBAIC0xOTEsMTkgKzE5MSwyMiBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5wcm90b3R5cGUgCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgIAotICAgICAg
ICBzdGFydE5vZGUuX2F0dGFjaG1lbnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRlbWVudCA9IGhh
c05vbkVtcHR5UmV0dXJuU3RhdGVtZW50OworICAgICAgICBzdGFydE5vZGUuYXR0YWNobWVudHMu
X2hhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50ID0gaGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQ7
CiAKICAgICAgICAgcmV0dXJuIGhhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50OwogICAgIH0sCiAK
LSAgICB1cGRhdGVUeXBlczogZnVuY3Rpb24oc291cmNlSUQsIG5vZGVzVG9VcGRhdGUsIGNhbGxi
YWNrKSAKKyAgICB1cGRhdGVUeXBlczogZnVuY3Rpb24obm9kZXNUb1VwZGF0ZSwgY2FsbGJhY2sp
CiAgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChSdW50aW1lQWdlbnQuZ2V0UnVudGltZVR5
cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoQXJyYXku
aXNBcnJheShub2Rlc1RvVXBkYXRlKSAmJiB0aGlzLl9wYXJzZWRTdWNjZXNzZnVsbHkpOworCiAg
ICAgICAgIGlmICghdGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5KQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIHZhciBhbGxSZXF1ZXN0cyA9IFtdOwogICAgICAgICB2YXIgYWxsUmVxdWVz
dE5vZGVzID0gW107CisgICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NjcmlwdC5pZDsKIAog
ICAgICAgICBmb3IgKHZhciBub2RlIG9mIG5vZGVzVG9VcGRhdGUpIHsKICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS50eXBlKSB7CkBAIC0yNDksOSArMjUyLDkgQEAgV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUucHJvdG90eXBlIAogICAgICAgICAgICAgICAgIHZhciBub2RlID0gYWxsUmVx
dWVzdE5vZGVzW2ldOwogICAgICAgICAgICAgICAgIHZhciB0eXBlSW5mb3JtYXRpb24gPSB0eXBl
SW5mb3JtYXRpb25BcnJheVtpXTsKICAgICAgICAgICAgICAgICBpZiAoYWxsUmVxdWVzdHNbaV0u
dHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5GdW5jdGlvblJldHVybikKLSAgICAgICAg
ICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3JldHVyblR5cGVzID0gdHlwZUluZm9ybWF0
aW9uOworICAgICAgICAgICAgICAgICAgICBub2RlLmF0dGFjaG1lbnRzLnJldHVyblR5cGVzID0g
dHlwZUluZm9ybWF0aW9uOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZS5fYXR0YWNobWVudHMuX3R5cGVzID0gdHlwZUluZm9ybWF0aW9uOworICAgICAgICAg
ICAgICAgICAgICBub2RlLmF0dGFjaG1lbnRzLnR5cGVzID0gdHlwZUluZm9ybWF0aW9uOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFjaygpOwpAQCAtNzc1LDcgKzc3OCw3IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZSAKICAgICAgICAgCiAgICAg
ICAgIHJlc3VsdC5yYW5nZSA9IG5vZGUucmFuZ2U7CiAgICAgICAgIC8vIFRoaXMgaXMgYW4gb2Jq
ZWN0IGZvciB3aGljaCB5b3UgY2FuIGFkZCBmaWVsZHMgdG8gYW4gQVNUIG5vZGUgd2l0aG91dCB3
b3JyeWluZyBhYm91dCBwb2xsdXRpbmcgdGhlIHN5bnRheC1yZWxhdGVkIGZpZWxkcyBvZiB0aGUg
bm9kZS4KLSAgICAgICAgcmVzdWx0Ll9hdHRhY2htZW50cyA9IHt9OyAKKyAgICAgICAgcmVzdWx0
LmF0dGFjaG1lbnRzID0ge307CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TY3JpcHRDb250ZW50
Vmlldy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9TY3JpcHRDb250ZW50Vmlldy5qcwkocmV2aXNpb24gMTcyOTY5KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2NyaXB0Q29udGVudFZpZXcuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDE1IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRDb250
ZW50VmlldyA9IGZ1bmN0aW8KICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25J
dGVtID0gbmV3IFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtKCJwcmV0
dHktcHJpbnQiLCB0b29sVGlwLCBhY3RpdmF0ZWRUb29sVGlwLCBjdXJsZXlCcmFjZXNJbWFnZS5z
cmMsIGN1cmxleUJyYWNlc0ltYWdlLndpZHRoLCBjdXJsZXlCcmFjZXNJbWFnZS5oZWlnaHQpOwog
ICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgdGhpcy5f
dG9nZ2xlUHJldHR5UHJpbnQsIHRoaXMpOwogICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2
aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IGZhbHNlOyAvLyBFbmFibGVkIHdoZW4gdGhlIHRleHQgZWRp
dG9yIGlzIHBvcHVsYXRlZCB3aXRoIGNvbnRlbnQuCisKKyAgICB2YXIgc2hvd1R5cGVzSW1hZ2VT
aXplID0gKFdlYkluc3BlY3Rvci5QbGF0Zm9ybS5pc0xlZ2FjeU1hY09TID8gMTUgOiAxNik7Cisg
ICAgdmFyIHRvb2xUaXBUeXBlcyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyB0eXBlIGlu
Zm9ybWF0aW9uIik7CisgICAgdmFyIGFjdGl2YXRlZFRvb2xUaXBUeXBlcyA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiSGlkZSB0eXBlIGluZm9ybWF0aW9uIik7CisgICAgdGhpcy5fc2hvd1R5cGVz
QnV0dG9uTmF2aWdhdGlvbkl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLkFjdGl2YXRlQnV0dG9uTmF2
aWdhdGlvbkl0ZW0oInNob3ctdHlwZXMiLCB0b29sVGlwVHlwZXMsIGFjdGl2YXRlZFRvb2xUaXBU
eXBlcywgIkltYWdlcy9OYXZpZ2F0aW9uSXRlbVR5cGVzLnN2ZyIsIHNob3dUeXBlc0ltYWdlU2l6
ZSwgc2hvd1R5cGVzSW1hZ2VTaXplKTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0
aW9uSXRlbS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRl
bS5FdmVudC5DbGlja2VkLCB0aGlzLl90b2dnbGVUeXBlQW5ub3RhdGlvbnMsIHRoaXMpOworICAg
IHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSBmYWxzZTsKKwor
ICAgIFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU2V0dGluZy5FdmVudC5DaGFuZ2VkLCB0aGlzLl9z
aG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmdDaGFuZ2VkLCB0aGlzKTsKIH07CiAK
IFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50Vmlldy5TdHlsZUNsYXNzTmFtZSA9ICJzY3JpcHQi
OwpAQCAtNzAsNyArNzksNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90
eXBlCiAKICAgICBnZXQgbmF2aWdhdGlvbkl0ZW1zKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBb
dGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbV07CisgICAgICAgIHJldHVybiBb
dGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbSwgdGhpcy5fc2hvd1R5cGVzQnV0
dG9uTmF2aWdhdGlvbkl0ZW1dOwogICAgIH0sCiAKICAgICBnZXQgc2NyaXB0KCkKQEAgLTIwNCw2
ICsyMTMsOCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlCiAgICAg
X2NvbnRlbnREaWRQb3B1bGF0ZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlz
Ll9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSB0aGlzLl90ZXh0RWRp
dG9yLmNhbkJlRm9ybWF0dGVkKCk7CisgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmln
YXRpb25JdGVtLmVuYWJsZWQgPSB0aGlzLl90ZXh0RWRpdG9yLmNhblNob3dUeXBlQW5ub3RhdGlv
bnMoKTsKKyAgICAgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZh
dGVkID0gV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52
YWx1ZTsKICAgICB9LAogCiAgICAgX3RvZ2dsZVByZXR0eVByaW50OiBmdW5jdGlvbihldmVudCkK
QEAgLTIxMiw2ICsyMjMsMTYgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3Rv
dHlwZQogICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLmZvcm1hdHRlZCA9IGFjdGl2YXRlZDsKICAg
ICB9LAogCisgICAgX3RvZ2dsZVR5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24oZXZlbnQpCisgICAg
eworICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLnRvZ2dsZVR5cGVBbm5vdGF0aW9ucygpOworICAg
IH0sCisKKyAgICBfc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nQ2hhbmdlZDog
ZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZp
Z2F0aW9uSXRlbS5hY3RpdmF0ZWQgPSBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5m
b3JtYXRpb25TZXR0aW5nLnZhbHVlOworICAgIH0sCisKICAgICBfdGV4dEVkaXRvckZvcm1hdHRp
bmdEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fcHJldHR5
UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5hY3RpdmF0ZWQgPSB0aGlzLl90ZXh0RWRpdG9yLmZv
cm1hdHRlZDsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCShyZXZpc2lv
biAxNzI5NjkpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9T
b3VyY2VDb2RlVGV4dEVkaXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOSBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IgPSBmdW5jCiAKICAgICBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5jYWxsKHRoaXMsIG51bGwsIG51bGwsIHRoaXMpOwogCisgICAgdGhpcy5f
dHlwZVRva2VuQW5ub3RhdG9yID0gbnVsbDsKKyAgICB0aGlzLl90eXBlVG9rZW5TY3JvbGxIYW5k
bGVyID0gbnVsbDsKKwogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgdGhpcyBqdXN0IGp1bXBzIGJl
dHdlZW4gcmVzb3VyY2VzIGFuZCByZWxhdGVkIHNvdXJjZSBtYXAgcmVzb3VyY2VzLiBJdCBkb2Vz
bid0ICJqdW1wIHRvIHN5bWJvbCIgeWV0LgogICAgIHRoaXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdD
b250cm9sbGVyU3RhdGUoKTsKIApAQCAtODMsNiArODYsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IuUG9wb3ZlCiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
SG92ZXJlZEV4cHJlc3Npb25IaWdobGlnaHRTdHlsZUNsYXNzTmFtZSA9ICJob3ZlcmVkLWV4cHJl
c3Npb24taGlnaGxpZ2h0IjsKIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5EdXJh
dGlvblRvTW91c2VPdmVyVG9rZW5Ub01ha2VIb3ZlcmVkVG9rZW4gPSA1MDA7CiBXZWJJbnNwZWN0
b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub01vdXNlT3V0T2ZIb3ZlcmVkVG9rZW5U
b1JlbGVhc2UgPSAxMDAwOworV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1cmF0
aW9uVG9VcGRhdGVUeXBlVG9rZW5zQWZ0ZXJTY3JvbGxpbmcgPSAxMDA7CiAKIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5BdXRvRm9ybWF0TWluaW11bUxpbmVMZW5ndGggPSA1MDA7
CiAKQEAgLTEwMSw2ICsxMDUsMTQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9y
LnByb3RvdAogICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29kZTsKICAgICB9LAogCisgICAg
c2hvd246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
LnByb3RvdHlwZS5zaG93bi5jYWxsKHRoaXMpOworCisgICAgICAgIGlmICh0aGlzLl90eXBlVG9r
ZW5Bbm5vdGF0b3IpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1l
KCk7CisgICAgfSwKKwogICAgIGhpZGRlbjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmhpZGRlbi5jYWxsKHRoaXMpOwpAQCAtMTEw
LDYgKzEyMiw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAg
ICAgICAgdGhpcy5fZGlzbWlzc1BvcG92ZXIoKTsKICAgICAgICAgCiAgICAgICAgIHRoaXMuX2Rp
c21pc3NFZGl0aW5nQ29udHJvbGxlcih0cnVlKTsKKworICAgICAgICBpZiAodGhpcy5fdHlwZVRv
a2VuQW5ub3RhdG9yKQorICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnBhdXNl
KCk7CiAgICAgfSwKIAogICAgIGNsb3NlOiBmdW5jdGlvbigpCkBAIC0xMzUsNiArMTUwLDkgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogCiAgICAgICAgIFdlYklu
c3BlY3Rvci5ub3RpZmljYXRpb25zLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLk5v
dGlmaWNhdGlvbi5HbG9iYWxNb2RpZmllcktleXNEaWRDaGFuZ2UsIHRoaXMuX3VwZGF0ZVRva2Vu
VHJhY2tpbmdDb250cm9sbGVyU3RhdGUsIHRoaXMpOwogICAgICAgICB0aGlzLl9zb3VyY2VDb2Rl
LnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuU291cmNl
TWFwQWRkZWQsIHRoaXMuX3NvdXJjZUNvZGVTb3VyY2VNYXBBZGRlZCwgdGhpcyk7CisKKyAgICAg
ICAgaWYgKHRoaXMuX3R5cGVUb2tlblNjcm9sbEhhbmRsZXIpCisgICAgICAgICAgICB0aGlzLl9k
aXNhYmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yKCk7CiAgICAgfSwKIAogICAg
IGNhbkJlRm9ybWF0dGVkOiBmdW5jdGlvbigpCkBAIC0xNDksNiArMTY3LDExIEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgcmV0dXJuIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5jYW5CZUZvcm1hdHRlZC5jYWxsKHRoaXMpOwogICAg
IH0sCiAKKyAgICBjYW5TaG93VHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICByZXR1cm4gISF0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3I7CisgICAgfSwKKwogICAgIGN1
c3RvbVBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5KQogICAgIHsKICAgICAgICAgZnVuY3Rp
b24gc2VhcmNoUmVzdWx0Q2FsbGJhY2soZXJyb3IsIG1hdGNoZXMpCkBAIC0yMzQsNiArMjU3LDU1
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgICAg
IHRoaXMuX3VwZGF0ZUVkaXRhYmxlTWFya2VycyhyYW5nZSk7CiAgICAgfSwKIAorICAgIHRvZ2ds
ZVR5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl90
eXBlVG9rZW5Bbm5vdGF0b3IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
dmFyIGlzQWN0aXZhdGVkID0gdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnRvZ2dsZVR5cGVBbm5v
dGF0aW9ucygpOworICAgICAgICBpZiAoaXNBY3RpdmF0ZWQpIHsKKyAgICAgICAgICAgIFJ1bnRp
bWVBZ2VudC5lbmFibGVUeXBlUHJvZmlsZXIoKTsKKyAgICAgICAgICAgIHRoaXMuX2VuYWJsZVNj
cm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFubm90YXRvcigpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gV2UgZGlzYWJsZSB0eXBlIHByb2ZpbGluZyB3aGVuIGV4aXRpbmcgdGhlIGlu
c3BlY3Rvciwgc28gbm8gbmVlZCB0byBjYWxsIGl0IGhlcmUuIElmIHdlIHdlcmUKKyAgICAgICAg
ICAgIC8vIHRvIGNhbGwgaXQgaGVyZSwgd2Ugd291bGQgaGF2ZSBKYXZhU2NyaXB0Q29yZSBjb21w
aWxlIG91dCBhbGwgdGhlIG5lY2Vzc2FyeSB0eXBlIHByb2ZpbGluZyBpbmZvcm1hdGlvbiwKKyAg
ICAgICAgICAgIC8vIHNvIGlmIGEgdXNlciB3ZXJlIHRvIHF1aWNrbHkgcHJlc3MgdGhlbiB1bnBy
ZXNzIHRoZSBidXR0b24sIHdlIHdvdWxkbid0IGJlIGFibGUgdG8gcmUtc2hvdyB0eXBlIGluZm9y
bWF0aW9uLgorICAgICAgICAgICAgdGhpcy5fZGlzYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tl
bkFubm90YXRvcigpOworICAgICAgICB9CisgICAgICAgIFdlYkluc3BlY3Rvci5zaG93SmF2YVNj
cmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWUgPSBpc0FjdGl2YXRlZDsKKworICAgICAg
ICB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKCk7CisgICAgICAgIHJl
dHVybiBpc0FjdGl2YXRlZDsKKyAgICB9LAorCisgICAgc2hvd1BvcG92ZXJGb3JUeXBlczogZnVu
Y3Rpb24odHlwZXMsIGJvdW5kcywgdGl0bGUpCisgICAgeworICAgICAgICB2YXIgY29udGVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBjb250ZW50LmNsYXNzTmFt
ZSA9ICJvYmplY3QgZXhwYW5kYWJsZSI7CisKKyAgICAgICAgdmFyIHRpdGxlRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICB0aXRsZUVsZW1lbnQuY2xhc3NO
YW1lID0gInRpdGxlIjsKKyAgICAgICAgdGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGl0bGU7
CisgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQodGl0bGVFbGVtZW50KTsKKworICAgICAgICB2
YXIgc2VjdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnRpZXNTZWN0aW9uKHR5cGVz
KTsKKyAgICAgICAgc2VjdGlvbi5leHBhbmRlZCA9IHRydWU7CisgICAgICAgIHNlY3Rpb24uZWxl
bWVudC5jbGFzc0xpc3QuYWRkKCJib2R5Iik7CisgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQo
c2VjdGlvbi5lbGVtZW50KTsKKworICAgICAgICB0aGlzLl9zaG93UG9wb3Zlcihjb250ZW50LCBi
b3VuZHMpOworICAgIH0sCisKKyAgICAvLyBQcm90ZWN0ZWQKKworICAgIHByZXR0eVByaW50OiBm
dW5jdGlvbihwcmV0dHkpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5w
cm90b3R5cGUucHJldHR5UHJpbnQuY2FsbCh0aGlzLCBwcmV0dHkpOworCisgICAgICAgIGlmICh0
aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0
aXZlKQorICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlc2V0KCk7CisgICAg
fSwKKwogICAgIC8vIFByaXZhdGUKIAogICAgIF91bmZvcm1hdHRlZExpbmVJbmZvRm9yRWRpdG9y
TGluZUluZm86IGZ1bmN0aW9uKGxpbmVJbmZvKQpAQCAtMzU4LDYgKzQzMCw5IEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKIAogICAgICAgICB0aGlzLl9jb250ZW50
V2lsbFBvcHVsYXRlKGNvbnRlbnQpOwogICAgICAgICB0aGlzLnN0cmluZyA9IGNvbnRlbnQ7CisK
KyAgICAgICAgdGhpcy5fbWFrZVR5cGVUb2tlbkFubm90YXRvcigpOworCiAgICAgICAgIHRoaXMu
X2NvbnRlbnREaWRQb3B1bGF0ZSgpOwogICAgIH0sCiAKQEAgLTk2NywxMiArMTA0MiwxNiBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgX2RlYnVnZ2VyRGlk
UGF1c2U6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5U
cmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOworICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5u
b3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAgICAg
IHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZWZyZXNoKCk7CiAgICAgfSwKIAogICAgIF9kZWJ1
Z2dlckRpZFJlc3VtZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl91cGRh
dGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKCk7CiAgICAgICAgIHRoaXMuX2Rpc21pc3NQ
b3BvdmVyKCk7CisgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5f
dHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQorICAgICAgICAgICAgdGhpcy5fdHlwZVRva2Vu
QW5ub3RhdG9yLnJlZnJlc2goKTsKICAgICB9LAogCiAgICAgX3NvdXJjZUNvZGVTb3VyY2VNYXBB
ZGRlZDogZnVuY3Rpb24oZXZlbnQpCkBAIC05ODgsNiArMTA2Nyw4IEBAIFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgdmFyIG1vZGUgPSBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTm9uZTsKICAgICAgICAg
aWYgKFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VkKQogICAgICAgICAgICAgbW9k
ZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5K
YXZhU2NyaXB0RXhwcmVzc2lvbjsKKyAgICAgICAgZWxzZSBpZiAodGhpcy5fdHlwZVRva2VuQW5u
b3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAgICAg
IG1vZGUgPSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1v
ZGUuSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjsKICAgICAgICAgZWxzZSBpZiAodGhpcy5faGFz
Q29sb3JNYXJrZXJzKCkpCiAgICAgICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk1hcmtlZFRva2VuczsKICAgICAgICAgZWxz
ZSBpZiAoKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU291cmNlTWFw
UmVzb3VyY2UgfHwgdGhpcy5fc291cmNlQ29kZS5zb3VyY2VNYXBzLmxlbmd0aCAhPT0gMCkgJiYg
V2ViSW5zcGVjdG9yLm1vZGlmaWVyS2V5cy5tZXRhS2V5ICYmICFXZWJJbnNwZWN0b3IubW9kaWZp
ZXJLZXlzLmFsdEtleSAmJiAhV2ViSW5zcGVjdG9yLm1vZGlmaWVyS2V5cy5zaGlmdEtleSkKQEAg
LTEwMTAsNiArMTA5MSw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90
b3QKICAgICAgICAgICAgIHRoaXMuX2Rpc21pc3NQb3BvdmVyKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250
cm9sbGVyLk1vZGUuSmF2YVNjcmlwdEV4cHJlc3Npb246CisgICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRUeXBl
SW5mb3JtYXRpb246CiAgICAgICAgICAgICB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1v
dXNlT3ZlckRlbGF5RHVyYXRpb24gPSBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
RHVyYXRpb25Ub01vdXNlT3ZlclRva2VuVG9NYWtlSG92ZXJlZFRva2VuOwogICAgICAgICAgICAg
dGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5tb3VzZU91dFJlbGVhc2VEZWxheUR1cmF0aW9u
ID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1cmF0aW9uVG9Nb3VzZU91dE9m
SG92ZXJlZFRva2VuVG9SZWxlYXNlOwogICAgICAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29u
dHJvbGxlci5jbGFzc05hbWVGb3JIaWdobGlnaHRlZFJhbmdlID0gV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLkhvdmVyZWRFeHByZXNzaW9uSGlnaGxpZ2h0U3R5bGVDbGFzc05hbWU7
CkBAIC0xMDc1LDYgKzExNTcsMTEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9y
LnByb3RvdAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHRo
aXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW9kZSA9PT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb24p
IHsKKyAgICAgICAgICAgIHRoaXMuX3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRK
YXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKwogICAgICAgICBpZiAodGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5t
b2RlID09PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1v
ZGUuTWFya2VkVG9rZW5zKSB7CiAgICAgICAgICAgICB2YXIgbWFya2VycyA9IHRoaXMubWFya2Vy
c0F0UG9zaXRpb24oY2FuZGlkYXRlLmhvdmVyZWRUb2tlblJhbmdlLnN0YXJ0KTsKICAgICAgICAg
ICAgIGlmIChtYXJrZXJzLmxlbmd0aCA+IDApCkBAIC0xMTMwLDI2ICsxMjE3LDczIEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgRGVidWdnZXJBZ2Vu
dC5ldmFsdWF0ZU9uQ2FsbEZyYW1lLmludm9rZSh7Y2FsbEZyYW1lSWQ6IFdlYkluc3BlY3Rvci5k
ZWJ1Z2dlck1hbmFnZXIuYWN0aXZlQ2FsbEZyYW1lLmlkLCBleHByZXNzaW9uOiBjYW5kaWRhdGUu
ZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXA6ICJwb3BvdmVyIiwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9u
c0FuZE11dGVDb25zb2xlOiB0cnVlfSwgcG9wdWxhdGUuYmluZCh0aGlzKSk7CiAgICAgfSwKIAot
ICAgIF9zaG93UG9wb3ZlcjogZnVuY3Rpb24oY29udGVudCkKKyAgICBfdG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXJIaWdobGlnaHRlZEphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb246IGZ1bmN0aW9uKGNh
bmRpZGF0ZSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNhbmRpZGF0ZS5leHByZXNz
aW9uKTsKKworICAgICAgICB2YXIgc291cmNlQ29kZSA9IHRoaXMuX3NvdXJjZUNvZGU7CisgICAg
ICAgIHZhciBzb3VyY2VJRCA9IHNvdXJjZUNvZGUuc2NyaXB0c1swXS5pZDsKKyAgICAgICAgdmFy
IHJhbmdlID0gY2FuZGlkYXRlLmhvdmVyZWRUb2tlblJhbmdlOworICAgICAgICB2YXIgb2Zmc2V0
ID0gdGhpcy5jdXJyZW50UG9zaXRpb25Ub09yaWdpbmFsT2Zmc2V0KHtsaW5lOiByYW5nZS5zdGFy
dC5saW5lLCBjaDogcmFuZ2Uuc3RhcnQuY2h9KTsKKworICAgICAgICB2YXIgYWxsUmVxdWVzdHMg
PSBbeworICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5Ob3JtYWxFeHBy
ZXNzaW9uLAorICAgICAgICAgICAgc291cmNlSUQ6IHNvdXJjZUlELAorICAgICAgICAgICAgZGl2
b3Q6IG9mZnNldAorICAgICAgICB9XTsKKworICAgICAgICBmdW5jdGlvbiBoYW5kbGVyKGVycm9y
LCBhbGxUeXBlcykgeworICAgICAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSAhPT0gdGhpcy50b2tlblRyYWNraW5n
Q29udHJvbGxlci5jYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBjb25zb2xlLmFzc2VydChhbGxUeXBlcy5sZW5ndGggPT09IDEpOworICAgICAgICAgICAg
aWYgKCFhbGxUeXBlcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgdmFyIHR5cGVzID0gYWxsVHlwZXNbMF07CisgICAgICAgICAgICBpZiAodHlwZXMuZGlzcGxh
eVR5cGVOYW1lKSB7CisgICAgICAgICAgICAgICAgdmFyIHBvcG92ZXJUaXRsZSA9IFdlYkluc3Bl
Y3Rvci5UeXBlVG9rZW5WaWV3LnRpdGxlRm9yUG9wb3ZlcihXZWJJbnNwZWN0b3IuVHlwZVRva2Vu
Vmlldy5UaXRsZVR5cGUuVmFyaWFibGUsIGNhbmRpZGF0ZS5leHByZXNzaW9uKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLnNob3dQb3BvdmVyRm9yVHlwZXModHlwZXMsIG51bGwsIHBvcG92ZXJUaXRs
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBSdW50aW1lQWdlbnQuZ2V0
UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKGFsbFJlcXVlc3RzLCBoYW5kbGVyLmJp
bmQodGhpcykpOworICAgIH0sCisKKyAgICBfc2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGNvbnRlbnQs
IGJvdW5kcykKICAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMudG9rZW5UcmFja2lu
Z0NvbnRyb2xsZXIuY2FuZGlkYXRlKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy50b2tl
blRyYWNraW5nQ29udHJvbGxlci5jYW5kaWRhdGUgfHwgYm91bmRzKTsKIAorICAgICAgICB2YXIg
c2hvdWxkSGlnaGxpZ2h0UmFuZ2UgPSBmYWxzZTsKICAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IHRo
aXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2FuZGlkYXRlOwotICAgICAgICBpZiAoIWNhbmRp
ZGF0ZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gSWYgYm91bmRzIGlzIGZhbHNl
eSwgdGhpcyBpcyBhIHBvcG92ZXIgaW50cm9kdWNlZCBmcm9tIGEgaG92ZXIgZXZlbnQuCisgICAg
ICAgIC8vIE90aGVyd2lzZSwgdGhpcyBpcyBjYWxsZWQgZnJvbSBUeXBlVG9rZW5Bbm5vdGF0b3Iu
CisgICAgICAgIGlmICghYm91bmRzKSB7CisgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgY29udGVudC5jbGFzc0xpc3QuYWRkKFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5Qb3BvdmVyRGVidWdnZXJDb250ZW50U3R5
bGVDbGFzc05hbWUpOworICAgICAgICAgICAgdmFyIHJlY3RzID0gdGhpcy5yZWN0c0ZvclJhbmdl
KGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZSk7CisgICAgICAgICAgICBib3VuZHMgPSBXZWJJ
bnNwZWN0b3IuUmVjdC51bmlvbk9mUmVjdHMocmVjdHMpOworCisgICAgICAgICAgICBzaG91bGRI
aWdobGlnaHRSYW5nZSA9IHRydWU7CisgICAgICAgIH0KIAotICAgICAgICB2YXIgcmVjdHMgPSB0
aGlzLnJlY3RzRm9yUmFuZ2UoY2FuZGlkYXRlLmhvdmVyZWRUb2tlblJhbmdlKTsKLSAgICAgICAg
dmFyIGJvdW5kcyA9IFdlYkluc3BlY3Rvci5SZWN0LnVuaW9uT2ZSZWN0cyhyZWN0cyk7CiAKLSAg
ICAgICAgdGhpcy5fcG9wb3ZlciA9IHRoaXMuX3BvcG92ZXIgfHwgbmV3IFdlYkluc3BlY3Rvci5Q
b3BvdmVyKHRoaXMpOworICAgICAgICBjb250ZW50LmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLlBvcG92ZXJEZWJ1Z2dlckNvbnRlbnRTdHlsZUNsYXNzTmFt
ZSk7CisKKyAgICAgICAgaWYgKHRoaXMuX3BvcG92ZXIpCisgICAgICAgICAgICB0aGlzLl9kaXNt
aXNzUG9wb3ZlcigpOworICAgICAgICB0aGlzLl9wb3BvdmVyID0gbmV3IFdlYkluc3BlY3Rvci5Q
b3BvdmVyKHRoaXMpOwogICAgICAgICB0aGlzLl9wb3BvdmVyLmNvbnRlbnQgPSBjb250ZW50Owog
ICAgICAgICB0aGlzLl9wb3BvdmVyLnByZXNlbnQoYm91bmRzLnBhZCg1KSwgW1dlYkluc3BlY3Rv
ci5SZWN0RWRnZS5NSU5fWSwgV2ViSW5zcGVjdG9yLlJlY3RFZGdlLk1BWF9ZLCBXZWJJbnNwZWN0
b3IuUmVjdEVkZ2UuTUFYX1hdKTsKIAotICAgICAgICB0aGlzLl90cmFja1BvcG92ZXJFdmVudHMo
KTsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBoaWdobGlnaHQgdGhlIHJhbmdlIGFmdGVyIGNyZWF0
aW5nIHRoZSBuZXcgcG9wb3ZlciBiZWNhdXNlIGRpc21pc3NpbmcgdGhlIG9sZCBwb3BvdmVyIHdp
bGwgcmVtb3ZlIHRoZSBjdXJyZW50IGhpZ2hsaWdodC4KKyAgICAgICAgaWYgKHNob3VsZEhpZ2hs
aWdodFJhbmdlKQorICAgICAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5oaWdo
bGlnaHRSYW5nZShjYW5kaWRhdGUuZXhwcmVzc2lvblJhbmdlKTsKIAotICAgICAgICB0aGlzLnRv
a2VuVHJhY2tpbmdDb250cm9sbGVyLmhpZ2hsaWdodFJhbmdlKGNhbmRpZGF0ZS5leHByZXNzaW9u
UmFuZ2UpOworICAgICAgICB0aGlzLl90cmFja1BvcG92ZXJFdmVudHMoKTsKICAgICB9LAogCiAg
ICAgX3Nob3dQb3BvdmVyRm9yRnVuY3Rpb246IGZ1bmN0aW9uKGRhdGEpCkBAIC0xMzgwLDYgKzE1
MTQsNjEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAg
ICB0aGlzLl9pZ25vcmVDb250ZW50RGlkQ2hhbmdlLS07CiAKICAgICAgICAgZGVsZXRlIHRoaXMu
X2VkaXRpbmdDb250cm9sbGVyOworICAgIH0sCisKKyAgICBfbWFrZVR5cGVUb2tlbkFubm90YXRv
cjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCFSdW50aW1lQWdlbnQuZ2V0UnVudGlt
ZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHZhciBzY3JpcHQgPSBudWxsOworICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBt
ZSBtb2RpZmllZCB0byB3b3JrIHdpdGggSFRNTCBmaWxlcyB3aXRoIGlubGluZSBzY3JpcHQgdGFn
cy4KKyAgICAgICAgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3Iu
U2NyaXB0KQorICAgICAgICAgICAgc2NyaXB0ID0gdGhpcy5fc291cmNlQ29kZTsKKyAgICAgICAg
ZWxzZSBpZiAodGhpcy5fc291cmNlQ29kZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5SZXNvdXJj
ZSAmJiB0aGlzLl9zb3VyY2VDb2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBl
LlNjcmlwdCAmJiB0aGlzLl9zb3VyY2VDb2RlLnNjcmlwdHMubGVuZ3RoKQorICAgICAgICAgICAg
c2NyaXB0ID0gdGhpcy5fc291cmNlQ29kZS5zY3JpcHRzWzBdOworCisgICAgICAgIGlmICghc2Ny
aXB0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90
YXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yKHRoaXMsIHNjcmlwdCk7
CisgICAgICAgIGlmIChXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25T
ZXR0aW5nLnZhbHVlKSB7CisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVz
ZXQoKTsKKyAgICAgICAgICAgIHRoaXMuX2VuYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFu
bm90YXRvcigpOworICAgICAgICB9CisgICAgfSwKKworICAgIF9lbmFibGVTY3JvbGxFdmVudHNG
b3JUeXBlVG9rZW5Bbm5vdGF0b3I6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIFBhdXNl
IHVwZGF0aW5nIHR5cGUgdG9rZW5zIHdoaWxlIHNjcm9sbGluZyB0byBwcmV2ZW50IGZyYW1lIGxv
c3MuCisgICAgICAgIHRoaXMuX3R5cGVUb2tlblNjcm9sbEhhbmRsZXIgPSB0aGlzLl9tYWtlVHlw
ZVRva2VuU2Nyb2xsRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIHRoaXMuYWRkU2Nyb2xsSGFuZGxl
cih0aGlzLl90eXBlVG9rZW5TY3JvbGxIYW5kbGVyKTsKKyAgICB9LAorCisgICAgX2Rpc2FibGVT
Y3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3I6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHRoaXMucmVtb3ZlU2Nyb2xsSGFuZGxlcih0aGlzLl90eXBlVG9rZW5TY3JvbGxIYW5kbGVy
KTsKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuU2Nyb2xsSGFuZGxlciA9IG51bGw7CisgICAgfSwK
KworICAgIF9tYWtlVHlwZVRva2VuU2Nyb2xsRXZlbnRIYW5kbGVyOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB2YXIgdHlwZVRva2VuQW5ub3RhdG9yID0gdGhpcy5fdHlwZVRva2VuQW5ub3Rh
dG9yOworICAgICAgICB2YXIgdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICBmdW5j
dGlvbiBzY3JvbGxIYW5kbGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRpbWVvdXRJ
ZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWRlbnRpZmll
cik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdHlwZVRva2VuQW5ub3RhdG9y
LnBhdXNlKCk7CisKKyAgICAgICAgICAgIHRpbWVvdXRJZGVudGlmaWVyID0gc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0aW1lb3V0SWRlbnRpZmllciA9IG51bGw7Cisg
ICAgICAgICAgICAgICAgdHlwZVRva2VuQW5ub3RhdG9yLnJlc3VtZSgpOworICAgICAgICAgICAg
fSwgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1cmF0aW9uVG9VcGRhdGVUeXBl
VG9rZW5zQWZ0ZXJTY3JvbGxpbmcpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNjcm9s
bEhhbmRsZXI7CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvVGV4dENvbnRlbnRWaWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRDb250ZW50Vmlldy5qcwkocmV2
aXNpb24gMTcyOTY5KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvVGV4dENvbnRlbnRWaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwxNSBAQCBX
ZWJJbnNwZWN0b3IuVGV4dENvbnRlbnRWaWV3ID0gZnVuY3Rpb24oCiAgICAgdGhpcy5fcHJldHR5
UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0
b25OYXZpZ2F0aW9uSXRlbSgicHJldHR5LXByaW50IiwgdG9vbFRpcCwgYWN0aXZhdGVkVG9vbFRp
cCwgY3VybGV5QnJhY2VzSW1hZ2Uuc3JjLCBjdXJsZXlCcmFjZXNJbWFnZS53aWR0aCwgY3VybGV5
QnJhY2VzSW1hZ2UuaGVpZ2h0KTsKICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRp
b25JdGVtLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVt
LkV2ZW50LkNsaWNrZWQsIHRoaXMuX3RvZ2dsZVByZXR0eVByaW50LCB0aGlzKTsKICAgICB0aGlz
Ll9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSB0aGlzLl90ZXh0RWRp
dG9yLmNhbkJlRm9ybWF0dGVkKCk7CisKKyAgICB2YXIgc2hvd1R5cGVzSW1hZ2VTaXplID0gKFdl
Ykluc3BlY3Rvci5QbGF0Zm9ybS5pc0xlZ2FjeU1hY09TID8gMTUgOiAxNik7CisgICAgdmFyIHRv
b2xUaXBUeXBlcyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyB0eXBlIGluZm9ybWF0aW9u
Iik7CisgICAgdmFyIGFjdGl2YXRlZFRvb2xUaXBUeXBlcyA9IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiSGlkZSB0eXBlIGluZm9ybWF0aW9uIik7CisgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2
aWdhdGlvbkl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLkFjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0
ZW0oInNob3ctdHlwZXMiLCB0b29sVGlwVHlwZXMsIGFjdGl2YXRlZFRvb2xUaXBUeXBlcywgIklt
YWdlcy9OYXZpZ2F0aW9uSXRlbVR5cGVzLnN2ZyIsIHNob3dUeXBlc0ltYWdlU2l6ZSwgc2hvd1R5
cGVzSW1hZ2VTaXplKTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5D
bGlja2VkLCBmdW5jdGlvbigpIHt9LCB0aGlzKTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25O
YXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gZmFsc2U7CisKKyAgICBXZWJJbnNwZWN0b3Iuc2hvd0ph
dmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLlNldHRpbmcuRXZlbnQuQ2hhbmdlZCwgdGhpcy5fc2hvd0phdmFTY3JpcHRUeXBlSW5mb3Jt
YXRpb25TZXR0aW5nQ2hhbmdlZCwgdGhpcyk7CiB9OwogCiBXZWJJbnNwZWN0b3IuVGV4dENvbnRl
bnRWaWV3LlN0eWxlQ2xhc3NOYW1lID0gInRleHQiOwpAQCAtNjYsNyArNzUsNyBAQCBXZWJJbnNw
ZWN0b3IuVGV4dENvbnRlbnRWaWV3LnByb3RvdHlwZSA9CiAKICAgICBnZXQgbmF2aWdhdGlvbkl0
ZW1zKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBbdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZp
Z2F0aW9uSXRlbV07CisgICAgICAgIHJldHVybiBbdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZp
Z2F0aW9uSXRlbSwgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW1dOwogICAgIH0s
CiAKICAgICByZXZlYWxQb3NpdGlvbjogZnVuY3Rpb24ocG9zaXRpb24sIHRleHRSYW5nZVRvU2Vs
ZWN0LCBmb3JjZVVuZm9ybWF0dGVkKQpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvVGV4dEVkaXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0RWRpdG9yLmpzCShyZXZpc2lvbiAxNzI5
NjkpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0RWRp
dG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHRo
aXMuX2lnbm9yZUNvZGVNaXJyb3JDb250ZW50RGlkQ2hhbmdlRXZlbnQrKzsKLSAgICAgICAgdGhp
cy5fcHJldHR5UHJpbnQoZm9ybWF0dGVkKTsKKyAgICAgICAgdGhpcy5wcmV0dHlQcmludChmb3Jt
YXR0ZWQpOwogICAgICAgICB0aGlzLl9pZ25vcmVDb2RlTWlycm9yQ29udGVudERpZENoYW5nZUV2
ZW50LS07CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2lnbm9yZUNvZGVNaXJyb3JDb250
ZW50RGlkQ2hhbmdlRXZlbnQgPj0gMCk7CiAKQEAgLTE5OCw2ICsxOTgsMTEgQEAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5oYXNGb3Jt
YXR0ZXIoKTsKICAgICB9LAogCisgICAgY2FuU2hvd1R5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisKICAgICBnZXQgc2VsZWN0
ZWRUZXh0UmFuZ2UoKQogICAgIHsKICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fY29kZU1pcnJv
ci5nZXRDdXJzb3IodHJ1ZSk7CkBAIC02MzksNiArNjQ0LDE3MyBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCisgICAgdmlzaWJsZVJh
bmdlT2Zmc2V0czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0g
bnVsbDsKKyAgICAgICAgdmFyIGVuZE9mZnNldCA9IG51bGw7CisgICAgICAgIHZhciB2aXNpYmxl
UmFuZ2UgPSB0aGlzLl9jb2RlTWlycm9yLmdldFZpZXdwb3J0KCk7CisKKyAgICAgICAgaWYgKHRo
aXMuX2Zvcm1hdHRlclNvdXJjZU1hcCkgeworICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlz
Ll9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldChNYXRoLm1heCh2
aXNpYmxlUmFuZ2UuZnJvbSAtIDEsIDApLCAwKTsKKyAgICAgICAgICAgIGVuZE9mZnNldCA9IHRo
aXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0KHZpc2libGVS
YW5nZS50byAtIDEsIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhcnRPZmZz
ZXQgPSB0aGlzLl9jb2RlTWlycm9yLmdldERvYygpLmluZGV4RnJvbVBvcyh7bGluZTogdmlzaWJs
ZVJhbmdlLmZyb20sIGNoOiAwfSk7CisgICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl9jb2Rl
TWlycm9yLmdldERvYygpLmluZGV4RnJvbVBvcyh7bGluZTogdmlzaWJsZVJhbmdlLnRvLCBjaDog
MH0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHtzdGFydE9mZnNldDogc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldDogZW5kT2Zmc2V0fTsKKyAgICB9LAorCisgICAgb3JpZ2luYWxPZmZzZXRU
b0N1cnJlbnRQb3NpdGlvbjogZnVuY3Rpb24ob2Zmc2V0KQorICAgIHsKKyAgICAgICAgdmFyIHBv
c2l0aW9uID0gbnVsbDsKKyAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcCkgewor
ICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdp
bmFsUG9zaXRpb25Ub0Zvcm1hdHRlZChvZmZzZXQpOworICAgICAgICAgICAgcG9zaXRpb24gPSB7
bGluZTogbG9jYXRpb24ubGluZU51bWJlciwgY2g6IGxvY2F0aW9uLmNvbHVtbk51bWJlcn07Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLl9jb2RlTWlycm9yLmdl
dERvYygpLnBvc0Zyb21JbmRleChvZmZzZXQpOworCisgICAgICAgIHJldHVybiBwb3NpdGlvbjsK
KyAgICB9LAorCisgICAgY3VycmVudE9mZnNldFRvQ3VycmVudFBvc2l0aW9uOiBmdW5jdGlvbihv
ZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5nZXREb2MoKS5w
b3NGcm9tSW5kZXgob2Zmc2V0KTsKKyAgICB9LAorCisgICAgY3VycmVudFBvc2l0aW9uVG9Pcmln
aW5hbE9mZnNldDogZnVuY3Rpb24ocG9zaXRpb24pCisgICAgeworICAgICAgICB2YXIgb2Zmc2V0
ID0gbnVsbDsKKyAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcCkKKyAgICAgICAg
ICAgIG9mZnNldCA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFs
T2Zmc2V0KHBvc2l0aW9uLmxpbmUsIHBvc2l0aW9uLmNoKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgb2Zmc2V0ID0gdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5fY29kZU1pcnJvci5n
ZXREb2MoKS5pbmRleEZyb21Qb3MocG9zaXRpb24pOworCisgICAgICAgIHJldHVybiBvZmZzZXQ7
CisgICAgfSwKKworICAgIGN1cnJlbnRQb3NpdGlvblRvQ3VycmVudE9mZnNldDogZnVuY3Rpb24o
cG9zaXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5nZXREb2Mo
KS5pbmRleEZyb21Qb3MocG9zaXRpb24pOworICAgIH0sCisKKyAgICBzZXRJbmxpbmVXaWRnZXQ6
IGZ1bmN0aW9uKHBvc2l0aW9uLCBpbmxpbmVFbGVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2NvZGVNaXJyb3Iuc2V0VW5pcXVlQm9va21hcmsocG9zaXRpb24sIHt3aWRnZXQ6IGlu
bGluZUVsZW1lbnR9KTsKKyAgICB9LAorCisgICAgYWRkU2Nyb2xsSGFuZGxlcjogZnVuY3Rpb24o
aGFuZGxlcikKKyAgICB7CisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oInNjcm9sbCIsIGhh
bmRsZXIpOworICAgIH0sCisKKyAgICByZW1vdmVTY3JvbGxIYW5kbGVyOiBmdW5jdGlvbihoYW5k
bGVyKQorICAgIHsKKyAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vZmYoInNjcm9sbCIsIGhhbmRs
ZXIpOworICAgIH0sCisKKyAgICAvLyBQcm90ZWN0ZWQKKworICAgIHByZXR0eVByaW50OiBmdW5j
dGlvbihwcmV0dHkpCisgICAgeworICAgICAgICBmdW5jdGlvbiBwcmV0dHlQcmludEFuZFVwZGF0
ZUVkaXRvcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0ge2xpbmU6IDAs
IGNoOiAwfTsKKyAgICAgICAgICAgIGNvbnN0IGVuZCA9IHtsaW5lOiB0aGlzLl9jb2RlTWlycm9y
LmxpbmVDb3VudCgpIC0gMX07CisKKyAgICAgICAgICAgIHZhciBvbGRTZWxlY3Rpb25BbmNob3Ig
PSB0aGlzLl9jb2RlTWlycm9yLmdldEN1cnNvcigiYW5jaG9yIik7CisgICAgICAgICAgICB2YXIg
b2xkU2VsZWN0aW9uSGVhZCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKCJoZWFkIik7Cisg
ICAgICAgICAgICB2YXIgbmV3U2VsZWN0aW9uQW5jaG9yLCBuZXdTZWxlY3Rpb25IZWFkOworICAg
ICAgICAgICAgdmFyIG5ld0V4ZWN1dGlvbkxvY2F0aW9uID0gbnVsbDsKKworICAgICAgICAgICAg
aWYgKHByZXR0eSkgeworICAgICAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMDU5Mzk0
OD4gUHJvdmlkZSBhIHdheSB0byBjaGFuZ2UgdGhlIHRhYiB3aWR0aCBpbiB0aGUgV2ViIEluc3Bl
Y3RvcgorICAgICAgICAgICAgICAgIGNvbnN0IGluZGVudFN0cmluZyA9ICIgICAgIjsKKyAgICAg
ICAgICAgICAgICB2YXIgb3JpZ2luYWxMaW5lRW5kaW5ncyA9IFtdOworICAgICAgICAgICAgICAg
IHZhciBmb3JtYXR0ZWRMaW5lRW5kaW5ncyA9IFtdOworICAgICAgICAgICAgICAgIHZhciBtYXBw
aW5nID0ge29yaWdpbmFsOiBbMF0sIGZvcm1hdHRlZDogWzBdfTsKKyAgICAgICAgICAgICAgICB2
YXIgYnVpbGRlciA9IG5ldyBGb3JtYXR0ZXJDb250ZW50QnVpbGRlcihtYXBwaW5nLCBvcmlnaW5h
bExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywgMCwgMCwgaW5kZW50U3RyaW5nKTsK
KyAgICAgICAgICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih0aGlzLl9jb2Rl
TWlycm9yLCBidWlsZGVyKTsKKyAgICAgICAgICAgICAgICBmb3JtYXR0ZXIuZm9ybWF0KHN0YXJ0
LCBlbmQpOworCisgICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwID0gV2Vi
SW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcC5mcm9tQnVpbGRlcihidWlsZGVyKTsKKworICAg
ICAgICAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iuc2V0VmFsdWUoYnVpbGRlci5mb3JtYXR0ZWRD
b250ZW50KTsKKworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBuZXdSZXZlYWxQb3NpdGlvbiA9IHRoaXMuX2Zvcm1h
dHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwu
bGluZU51bWJlciwgdGhpcy5fcG9zaXRpb25Ub1JldmVhbC5jb2x1bW5OdW1iZXIpOworICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9wb3NpdGlvblRvUmV2ZWFsID0gbmV3IFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlUG9zaXRpb24obmV3UmV2ZWFsUG9zaXRpb24ubGluZU51bWJlciwgbmV3UmV2ZWFs
UG9zaXRpb24uY29sdW1uTnVtYmVyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFw
Lm9yaWdpbmFsVG9Gb3JtYXR0ZWQodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRMaW5lLCB0
aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5zdGFydENvbHVtbik7CisgICAgICAgICAgICAgICAgICAg
IHZhciBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAu
b3JpZ2luYWxUb0Zvcm1hdHRlZCh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5lbmRMaW5lLCB0aGlz
Ll90ZXh0UmFuZ2VUb1NlbGVjdC5lbmRDb2x1bW4pOworICAgICAgICAgICAgICAgICAgICB0aGlz
Ll90ZXh0UmFuZ2VUb1NlbGVjdCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKG1hcHBlZFJl
dmVhbFNlbGVjdGlvblN0YXJ0LmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0
LmNvbHVtbk51bWJlciwgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kLmxpbmVOdW1iZXIsIG1hcHBl
ZFJldmVhbFNlbGVjdGlvbkVuZC5jb2x1bW5OdW1iZXIpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmICghaXNOYU4odGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcikpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIWlzTmFOKHRoaXMuX2V4ZWN1dGlv
bkNvbHVtbk51bWJlcikpOworICAgICAgICAgICAgICAgICAgICBuZXdFeGVjdXRpb25Mb2NhdGlv
biA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX2V4
ZWN1dGlvbkxpbmVOdW1iZXIsIHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJlcik7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIG1hcHBlZEFuY2hvckxvY2F0aW9uID0g
dGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQob2xkU2VsZWN0aW9u
QW5jaG9yLmxpbmUsIG9sZFNlbGVjdGlvbkFuY2hvci5jaCk7CisgICAgICAgICAgICAgICAgdmFy
IG1hcHBlZEhlYWRMb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRv
Rm9ybWF0dGVkKG9sZFNlbGVjdGlvbkhlYWQubGluZSwgb2xkU2VsZWN0aW9uSGVhZC5jaCk7Cisg
ICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uQW5jaG9yID0ge2xpbmU6bWFwcGVkQW5jaG9yTG9j
YXRpb24ubGluZU51bWJlciwgY2g6bWFwcGVkQW5jaG9yTG9jYXRpb24uY29sdW1uTnVtYmVyfTsK
KyAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25IZWFkID0ge2xpbmU6bWFwcGVkSGVhZExvY2F0
aW9uLmxpbmVOdW1iZXIsIGNoOm1hcHBlZEhlYWRMb2NhdGlvbi5jb2x1bW5OdW1iZXJ9OworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnVuZG8o
KTsKKworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBuZXdSZXZlYWxQb3NpdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNv
dXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwubGluZU51
bWJlciwgdGhpcy5fcG9zaXRpb25Ub1JldmVhbC5jb2x1bW5OdW1iZXIpOworICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9wb3NpdGlvblRvUmV2ZWFsID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlUG9zaXRpb24obmV3UmV2ZWFsUG9zaXRpb24ubGluZU51bWJlciwgbmV3UmV2ZWFsUG9zaXRp
b24uY29sdW1uTnVtYmVyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1h
cHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1h
dHRlZFRvT3JpZ2luYWwodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRMaW5lLCB0aGlzLl90
ZXh0UmFuZ2VUb1NlbGVjdC5zdGFydENvbHVtbik7CisgICAgICAgICAgICAgICAgICAgIHZhciBt
YXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0
dGVkVG9PcmlnaW5hbCh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5lbmRMaW5lLCB0aGlzLl90ZXh0
UmFuZ2VUb1NlbGVjdC5lbmRDb2x1bW4pOworICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0
UmFuZ2VUb1NlbGVjdCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKG1hcHBlZFJldmVhbFNl
bGVjdGlvblN0YXJ0LmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0LmNvbHVt
bk51bWJlciwgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kLmxpbmVOdW1iZXIsIG1hcHBlZFJldmVh
bFNlbGVjdGlvbkVuZC5jb2x1bW5OdW1iZXIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmICghaXNOYU4odGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIWlzTmFOKHRoaXMuX2V4ZWN1dGlvbkNvbHVt
bk51bWJlcikpOworICAgICAgICAgICAgICAgICAgICBuZXdFeGVjdXRpb25Mb2NhdGlvbiA9IHRo
aXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKHRoaXMuX2V4ZWN1dGlv
bkxpbmVOdW1iZXIsIHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJlcik7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgdmFyIG1hcHBlZEFuY2hvckxvY2F0aW9uID0gdGhpcy5f
Zm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwob2xkU2VsZWN0aW9uQW5jaG9y
LmxpbmUsIG9sZFNlbGVjdGlvbkFuY2hvci5jaCk7CisgICAgICAgICAgICAgICAgdmFyIG1hcHBl
ZEhlYWRMb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdp
bmFsKG9sZFNlbGVjdGlvbkhlYWQubGluZSwgb2xkU2VsZWN0aW9uSGVhZC5jaCk7CisgICAgICAg
ICAgICAgICAgbmV3U2VsZWN0aW9uQW5jaG9yID0ge2xpbmU6bWFwcGVkQW5jaG9yTG9jYXRpb24u
bGluZU51bWJlciwgY2g6bWFwcGVkQW5jaG9yTG9jYXRpb24uY29sdW1uTnVtYmVyfTsKKyAgICAg
ICAgICAgICAgICBuZXdTZWxlY3Rpb25IZWFkID0ge2xpbmU6bWFwcGVkSGVhZExvY2F0aW9uLmxp
bmVOdW1iZXIsIGNoOm1hcHBlZEhlYWRMb2NhdGlvbi5jb2x1bW5OdW1iZXJ9OworCisgICAgICAg
ICAgICAgICAgdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwID0gbnVsbDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdGhpcy5fc2Nyb2xsSW50b1ZpZXdDZW50ZXJlZChuZXdTZWxlY3Rpb25B
bmNob3IpOworICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zZXRTZWxlY3Rpb24obmV3U2Vs
ZWN0aW9uQW5jaG9yLCBuZXdTZWxlY3Rpb25IZWFkKTsKKworICAgICAgICAgICAgaWYgKG5ld0V4
ZWN1dGlvbkxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2V4ZWN1dGlv
bkxpbmVIYW5kbGU7CisgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRpb25Db2x1bW5OdW1iZXIg
PSBuZXdFeGVjdXRpb25Mb2NhdGlvbi5jb2x1bW5OdW1iZXI7CisgICAgICAgICAgICAgICAgdGhp
cy5leGVjdXRpb25MaW5lTnVtYmVyID0gbmV3RXhlY3V0aW9uTG9jYXRpb24ubGluZU51bWJlcjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8x
MzEyOTk1NT4gRmluZEJhbm5lcjogTmV3IHNlYXJjaGVzIHNob3VsZCBub3QgbG9zZSBzZWFyY2gg
cG9zaXRpb24gKHN0YXJ0IGZyb20gY3VycmVudCBzZWxlY3Rpb24vY2FyZXQpCisgICAgICAgICAg
ICBpZiAodGhpcy5jdXJyZW50U2VhcmNoUXVlcnkpIHsKKyAgICAgICAgICAgICAgICB2YXIgc2Vh
cmNoUXVlcnkgPSB0aGlzLmN1cnJlbnRTZWFyY2hRdWVyeTsKKyAgICAgICAgICAgICAgICB0aGlz
LnNlYXJjaENsZWFyZWQoKTsKKyAgICAgICAgICAgICAgICAvLyBTZXQgdGltZW91dCBzbyB0aGF0
IHRoaXMgaGFwcGVucyBhZnRlciB0aGUgY3VycmVudCBDb2RlTWlycm9yIG9wZXJhdGlvbi4KKyAg
ICAgICAgICAgICAgICAvLyBUaGUgZWRpdG9yIGhhcyB0byB1cGRhdGUgZm9yIHRoZSB2YWx1ZSBh
bmQgc2VsZWN0aW9uIGNoYW5nZXMuCisgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlv
bihxdWVyeSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goc2VhcmNo
UXVlcnkpOworICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhpcy5fZGVsZWdh
dGUudGV4dEVkaXRvclVwZGF0ZWRGb3JtYXR0aW5nID09PSAiZnVuY3Rpb24iKQorICAgICAgICAg
ICAgICAgIHRoaXMuX2RlbGVnYXRlLnRleHRFZGl0b3JVcGRhdGVkRm9ybWF0dGluZyh0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub3BlcmF0aW9uKHByZXR0eVBy
aW50QW5kVXBkYXRlRWRpdG9yLmJpbmQodGhpcykpOworICAgIH0sCisKICAgICAvLyBQcml2YXRl
CiAKICAgICBfY29udGVudENoYW5nZWQ6IGZ1bmN0aW9uKGNvZGVNaXJyb3IsIGNoYW5nZSkKQEAg
LTEyMzUsMTA2ICsxNDA3LDYgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0g
ewogICAgICAgICB2YXIgbGluZUhlaWdodCA9IE1hdGguY2VpbCh0aGlzLl9jb2RlTWlycm9yLmRl
ZmF1bHRUZXh0SGVpZ2h0KCkpOwogICAgICAgICB2YXIgbWFyZ2luID0gTWF0aC5mbG9vcigoc2Ny
b2xsSW5mby5jbGllbnRIZWlnaHQgLSBsaW5lSGVpZ2h0KSAvIDIpOwogICAgICAgICB0aGlzLl9j
b2RlTWlycm9yLnNjcm9sbEludG9WaWV3KHBvc2l0aW9uLCBtYXJnaW4pOwotICAgIH0sCi0KLSAg
ICBfcHJldHR5UHJpbnQ6IGZ1bmN0aW9uKHByZXR0eSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9u
IHByZXR0eVByaW50QW5kVXBkYXRlRWRpdG9yKCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
c3Qgc3RhcnQgPSB7bGluZTogMCwgY2g6IDB9OwotICAgICAgICAgICAgY29uc3QgZW5kID0ge2xp
bmU6IHRoaXMuX2NvZGVNaXJyb3IubGluZUNvdW50KCkgLSAxfTsKLQotICAgICAgICAgICAgdmFy
IG9sZFNlbGVjdGlvbkFuY2hvciA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKCJhbmNob3Ii
KTsKLSAgICAgICAgICAgIHZhciBvbGRTZWxlY3Rpb25IZWFkID0gdGhpcy5fY29kZU1pcnJvci5n
ZXRDdXJzb3IoImhlYWQiKTsKLSAgICAgICAgICAgIHZhciBuZXdTZWxlY3Rpb25BbmNob3IsIG5l
d1NlbGVjdGlvbkhlYWQ7Ci0gICAgICAgICAgICB2YXIgbmV3RXhlY3V0aW9uTG9jYXRpb24gPSBu
dWxsOwotCi0gICAgICAgICAgICBpZiAocHJldHR5KSB7Ci0gICAgICAgICAgICAgICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzEwNTkzOTQ4PiBQcm92aWRlIGEgd2F5IHRvIGNoYW5nZSB0aGUgdGFiIHdp
ZHRoIGluIHRoZSBXZWIgSW5zcGVjdG9yCi0gICAgICAgICAgICAgICAgY29uc3QgaW5kZW50U3Ry
aW5nID0gIiAgICAiOwotICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbExpbmVFbmRpbmdzID0g
W107Ci0gICAgICAgICAgICAgICAgdmFyIGZvcm1hdHRlZExpbmVFbmRpbmdzID0gW107Ci0gICAg
ICAgICAgICAgICAgdmFyIG1hcHBpbmcgPSB7b3JpZ2luYWw6IFswXSwgZm9ybWF0dGVkOiBbMF19
OwotICAgICAgICAgICAgICAgIHZhciBidWlsZGVyID0gbmV3IEZvcm1hdHRlckNvbnRlbnRCdWls
ZGVyKG1hcHBpbmcsIG9yaWdpbmFsTGluZUVuZGluZ3MsIGZvcm1hdHRlZExpbmVFbmRpbmdzLCAw
LCAwLCBpbmRlbnRTdHJpbmcpOwotICAgICAgICAgICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcg
Rm9ybWF0dGVyKHRoaXMuX2NvZGVNaXJyb3IsIGJ1aWxkZXIpOwotICAgICAgICAgICAgICAgIGZv
cm1hdHRlci5mb3JtYXQoc3RhcnQsIGVuZCk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9mb3Jt
YXR0ZXJTb3VyY2VNYXAgPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwLmZyb21CdWls
ZGVyKGJ1aWxkZXIpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zZXRWYWx1
ZShidWlsZGVyLmZvcm1hdHRlZENvbnRlbnQpOwotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMu
X3Bvc2l0aW9uVG9SZXZlYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1JldmVhbFBv
c2l0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQodGhp
cy5fcG9zaXRpb25Ub1JldmVhbC5saW5lTnVtYmVyLCB0aGlzLl9wb3NpdGlvblRvUmV2ZWFsLmNv
bHVtbk51bWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwg
PSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVQb3NpdGlvbihuZXdSZXZlYWxQb3NpdGlvbi5s
aW5lTnVtYmVyLCBuZXdSZXZlYWxQb3NpdGlvbi5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdCkgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uU3RhcnQgPSB0aGlz
Ll9mb3JtYXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zvcm1hdHRlZCh0aGlzLl90ZXh0UmFuZ2VU
b1NlbGVjdC5zdGFydExpbmUsIHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0LnN0YXJ0Q29sdW1uKTsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIG1hcHBlZFJldmVhbFNlbGVjdGlvbkVuZCA9IHRoaXMu
X2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX3RleHRSYW5nZVRv
U2VsZWN0LmVuZExpbmUsIHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0LmVuZENvbHVtbik7Ci0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0ID0gbmV3IFdlYkluc3BlY3Rv
ci5UZXh0UmFuZ2UobWFwcGVkUmV2ZWFsU2VsZWN0aW9uU3RhcnQubGluZU51bWJlciwgbWFwcGVk
UmV2ZWFsU2VsZWN0aW9uU3RhcnQuY29sdW1uTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25F
bmQubGluZU51bWJlciwgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kLmNvbHVtbk51bWJlcik7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFpc05hTih0aGlzLl9leGVj
dXRpb25MaW5lTnVtYmVyKSkgewotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmFzc2VydCgh
aXNOYU4odGhpcy5fZXhlY3V0aW9uQ29sdW1uTnVtYmVyKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG5ld0V4ZWN1dGlvbkxvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFs
VG9Gb3JtYXR0ZWQodGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciwgdGhpcy5fZXhlY3V0aW9uQ29s
dW1uTnVtYmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgbWFw
cGVkQW5jaG9yTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zv
cm1hdHRlZChvbGRTZWxlY3Rpb25BbmNob3IubGluZSwgb2xkU2VsZWN0aW9uQW5jaG9yLmNoKTsK
LSAgICAgICAgICAgICAgICB2YXIgbWFwcGVkSGVhZExvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVy
U291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQob2xkU2VsZWN0aW9uSGVhZC5saW5lLCBvbGRT
ZWxlY3Rpb25IZWFkLmNoKTsKLSAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25BbmNob3IgPSB7
bGluZTptYXBwZWRBbmNob3JMb2NhdGlvbi5saW5lTnVtYmVyLCBjaDptYXBwZWRBbmNob3JMb2Nh
dGlvbi5jb2x1bW5OdW1iZXJ9OwotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkhlYWQgPSB7
bGluZTptYXBwZWRIZWFkTG9jYXRpb24ubGluZU51bWJlciwgY2g6bWFwcGVkSGVhZExvY2F0aW9u
LmNvbHVtbk51bWJlcn07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRo
aXMuX2NvZGVNaXJyb3IudW5kbygpOwotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Bvc2l0
aW9uVG9SZXZlYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1JldmVhbFBvc2l0aW9u
ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwodGhpcy5fcG9z
aXRpb25Ub1JldmVhbC5saW5lTnVtYmVyLCB0aGlzLl9wb3NpdGlvblRvUmV2ZWFsLmNvbHVtbk51
bWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwgPSBuZXcg
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVQb3NpdGlvbihuZXdSZXZlYWxQb3NpdGlvbi5saW5lTnVt
YmVyLCBuZXdSZXZlYWxQb3NpdGlvbi5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdCkgewotICAgICAg
ICAgICAgICAgICAgICB2YXIgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uU3RhcnQgPSB0aGlzLl9mb3Jt
YXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbCh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVj
dC5zdGFydExpbmUsIHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0LnN0YXJ0Q29sdW1uKTsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIG1hcHBlZFJldmVhbFNlbGVjdGlvbkVuZCA9IHRoaXMuX2Zvcm1h
dHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0
LmVuZExpbmUsIHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0LmVuZENvbHVtbik7Ci0gICAgICAgICAg
ICAgICAgICAgIHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0ID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0
UmFuZ2UobWFwcGVkUmV2ZWFsU2VsZWN0aW9uU3RhcnQubGluZU51bWJlciwgbWFwcGVkUmV2ZWFs
U2VsZWN0aW9uU3RhcnQuY29sdW1uTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQubGlu
ZU51bWJlciwgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kLmNvbHVtbk51bWJlcik7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFpc05hTih0aGlzLl9leGVjdXRpb25M
aW5lTnVtYmVyKSkgewotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmFzc2VydCghaXNOYU4o
dGhpcy5fZXhlY3V0aW9uQ29sdW1uTnVtYmVyKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0V4
ZWN1dGlvbkxvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3Jp
Z2luYWwodGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciwgdGhpcy5fZXhlY3V0aW9uQ29sdW1uTnVt
YmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgbWFwcGVkQW5j
aG9yTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5h
bChvbGRTZWxlY3Rpb25BbmNob3IubGluZSwgb2xkU2VsZWN0aW9uQW5jaG9yLmNoKTsKLSAgICAg
ICAgICAgICAgICB2YXIgbWFwcGVkSGVhZExvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNl
TWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwob2xkU2VsZWN0aW9uSGVhZC5saW5lLCBvbGRTZWxlY3Rp
b25IZWFkLmNoKTsKLSAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25BbmNob3IgPSB7bGluZTpt
YXBwZWRBbmNob3JMb2NhdGlvbi5saW5lTnVtYmVyLCBjaDptYXBwZWRBbmNob3JMb2NhdGlvbi5j
b2x1bW5OdW1iZXJ9OwotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkhlYWQgPSB7bGluZTpt
YXBwZWRIZWFkTG9jYXRpb24ubGluZU51bWJlciwgY2g6bWFwcGVkSGVhZExvY2F0aW9uLmNvbHVt
bk51bWJlcn07Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAgPSBu
dWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0aGlzLl9zY3JvbGxJbnRvVmlld0Nl
bnRlcmVkKG5ld1NlbGVjdGlvbkFuY2hvcik7Ci0gICAgICAgICAgICB0aGlzLl9jb2RlTWlycm9y
LnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb25BbmNob3IsIG5ld1NlbGVjdGlvbkhlYWQpOwotCi0g
ICAgICAgICAgICBpZiAobmV3RXhlY3V0aW9uTG9jYXRpb24pIHsKLSAgICAgICAgICAgICAgICBk
ZWxldGUgdGhpcy5fZXhlY3V0aW9uTGluZUhhbmRsZTsKLSAgICAgICAgICAgICAgICB0aGlzLmV4
ZWN1dGlvbkNvbHVtbk51bWJlciA9IG5ld0V4ZWN1dGlvbkxvY2F0aW9uLmNvbHVtbk51bWJlcjsK
LSAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGlvbkxpbmVOdW1iZXIgPSBuZXdFeGVjdXRpb25M
b2NhdGlvbi5saW5lTnVtYmVyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBGSVhN
RTogPHJkYXI6Ly9wcm9ibGVtLzEzMTI5OTU1PiBGaW5kQmFubmVyOiBOZXcgc2VhcmNoZXMgc2hv
dWxkIG5vdCBsb3NlIHNlYXJjaCBwb3NpdGlvbiAoc3RhcnQgZnJvbSBjdXJyZW50IHNlbGVjdGlv
bi9jYXJldCkKLSAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTZWFyY2hRdWVyeSkgewotICAg
ICAgICAgICAgICAgIHZhciBzZWFyY2hRdWVyeSA9IHRoaXMuY3VycmVudFNlYXJjaFF1ZXJ5Owot
ICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoQ2xlYXJlZCgpOwotICAgICAgICAgICAgICAgIC8v
IFNldCB0aW1lb3V0IHNvIHRoYXQgdGhpcyBoYXBwZW5zIGFmdGVyIHRoZSBjdXJyZW50IENvZGVN
aXJyb3Igb3BlcmF0aW9uLgotICAgICAgICAgICAgICAgIC8vIFRoZSBlZGl0b3IgaGFzIHRvIHVw
ZGF0ZSBmb3IgdGhlIHZhbHVlIGFuZCBzZWxlY3Rpb24gY2hhbmdlcy4KLSAgICAgICAgICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKHF1ZXJ5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMu
cGVyZm9ybVNlYXJjaChzZWFyY2hRdWVyeSk7Ci0gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMp
LCAwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlICYm
IHR5cGVvZiB0aGlzLl9kZWxlZ2F0ZS50ZXh0RWRpdG9yVXBkYXRlZEZvcm1hdHRpbmcgPT09ICJm
dW5jdGlvbiIpCi0gICAgICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUudGV4dEVkaXRvclVwZGF0
ZWRGb3JtYXR0aW5nKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fY29kZU1pcnJv
ci5vcGVyYXRpb24ocHJldHR5UHJpbnRBbmRVcGRhdGVFZGl0b3IuYmluZCh0aGlzKSk7CiAgICAg
fQogfTsKIApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
VGV4dFJlc291cmNlQ29udGVudFZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanMJKHJl
dmlzaW9uIDE3Mjk2OSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1
MSwxNSBAQCBXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcgPSBmCiAgICAgdGhp
cy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuQWN0
aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbSgicHJldHR5LXByaW50IiwgdG9vbFRpcCwgYWN0aXZh
dGVkVG9vbFRpcCwgY3VybGV5QnJhY2VzSW1hZ2Uuc3JjLCBjdXJsZXlCcmFjZXNJbWFnZS53aWR0
aCwgY3VybGV5QnJhY2VzSW1hZ2UuaGVpZ2h0KTsKICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRv
bk5hdmlnYXRpb25JdGVtLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmln
YXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIHRoaXMuX3RvZ2dsZVByZXR0eVByaW50LCB0aGlzKTsK
ICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSBmYWxz
ZTsgLy8gRW5hYmxlZCB3aGVuIHRoZSB0ZXh0IGVkaXRvciBpcyBwb3B1bGF0ZWQgd2l0aCBjb250
ZW50LgorCisgICAgdmFyIHNob3dUeXBlc0ltYWdlU2l6ZSA9IChXZWJJbnNwZWN0b3IuUGxhdGZv
cm0uaXNMZWdhY3lNYWNPUyA/IDE1IDogMTYpOworICAgIHZhciB0b29sVGlwVHlwZXMgPSBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgdHlwZSBpbmZvcm1hdGlvbiIpOworICAgIHZhciBhY3Rp
dmF0ZWRUb29sVGlwVHlwZXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhpZGUgdHlwZSBpbmZv
cm1hdGlvbiIpOworICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtID0gbmV3
IFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtKCJzaG93LXR5cGVzIiwg
dG9vbFRpcFR5cGVzLCBhY3RpdmF0ZWRUb29sVGlwVHlwZXMsICJJbWFnZXMvTmF2aWdhdGlvbkl0
ZW1UeXBlcy5zdmciLCBzaG93VHlwZXNJbWFnZVNpemUsIHNob3dUeXBlc0ltYWdlU2l6ZSk7Cisg
ICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgdGhpcy5fdG9n
Z2xlVHlwZUFubm90YXRpb25zLCB0aGlzKTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZp
Z2F0aW9uSXRlbS5lbmFibGVkID0gZmFsc2U7CisKKyAgICBXZWJJbnNwZWN0b3Iuc2hvd0phdmFT
Y3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LlNldHRpbmcuRXZlbnQuQ2hhbmdlZCwgdGhpcy5fc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRp
b25TZXR0aW5nQ2hhbmdlZCwgdGhpcyk7CiB9OwogCiBXZWJJbnNwZWN0b3IuVGV4dFJlc291cmNl
Q29udGVudFZpZXcuU3R5bGVDbGFzc05hbWUgPSAidGV4dCI7CkBAIC02Miw3ICs3MSw3IEBAIFdl
Ykluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5wcm8KIAogICAgIGdldCBuYXZpZ2F0
aW9uSXRlbXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFt0aGlzLl9wcmV0dHlQcmludEJ1dHRv
bk5hdmlnYXRpb25JdGVtXTsKKyAgICAgICAgcmV0dXJuIFt0aGlzLl9wcmV0dHlQcmludEJ1dHRv
bk5hdmlnYXRpb25JdGVtLCB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbV07CiAg
ICAgfSwKIAogICAgIGdldCBtYW5hZ2VzT3duSXNzdWVzKCkKQEAgLTIwMCw2ICsyMDksOCBAQCBX
ZWJJbnNwZWN0b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvCiAgICAgX2NvbnRlbnREaWRQ
b3B1bGF0ZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl9wcmV0dHlQcmlu
dEJ1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSB0aGlzLl90ZXh0RWRpdG9yLmNhbkJlRm9y
bWF0dGVkKCk7CisgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmVu
YWJsZWQgPSB0aGlzLl90ZXh0RWRpdG9yLmNhblNob3dUeXBlQW5ub3RhdGlvbnMoKTsKKyAgICAg
ICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gV2ViSW5z
cGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZTsKICAgICB9
LAogCiAgICAgX3RvZ2dsZVByZXR0eVByaW50OiBmdW5jdGlvbihldmVudCkKQEAgLTIwOCw2ICsy
MTksMTYgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnBybwogICAgICAg
ICB0aGlzLl90ZXh0RWRpdG9yLmZvcm1hdHRlZCA9IGFjdGl2YXRlZDsKICAgICB9LAogCisgICAg
X3RvZ2dsZVR5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0
aGlzLl90ZXh0RWRpdG9yLnRvZ2dsZVR5cGVBbm5vdGF0aW9ucygpOworICAgIH0sCisKKyAgICBf
c2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nQ2hhbmdlZDogZnVuY3Rpb24oZXZl
bnQpCisgICAgeworICAgICAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5h
Y3RpdmF0ZWQgPSBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0
aW5nLnZhbHVlOworICAgIH0sCisKICAgICBfdGV4dEVkaXRvckZvcm1hdHRpbmdEaWRDaGFuZ2U6
IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25O
YXZpZ2F0aW9uSXRlbS5hY3RpdmF0ZWQgPSB0aGlzLl90ZXh0RWRpdG9yLmZvcm1hdHRlZDsKSW5k
ZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVQcm9wZXJ0
aWVzU2VjdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlUHJvcGVydGllc1Nl
Y3Rpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitX
ZWJJbnNwZWN0b3IuVHlwZVByb3BlcnRpZXNTZWN0aW9uID0gZnVuY3Rpb24odHlwZXMsIHRpdGxl
LCBzdWJ0aXRsZSkKK3sKKyAgICB0aGlzLmVtcHR5UGxhY2Vob2xkZXIgPSBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIk5vIFByb3BlcnRpZXMiKTsKKyAgICB0aGlzLnR5cGVzID0gdHlwZXM7CisKKyAg
ICBXZWJJbnNwZWN0b3IuUHJvcGVydGllc1NlY3Rpb24uY2FsbCh0aGlzLCB0aXRsZSwgc3VidGl0
bGUpOworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUg
PSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24s
CisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBl
LAorCisgICAgb25wb3B1bGF0ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5wcm9w
ZXJ0aWVzVHJlZU91dGxpbmUucmVtb3ZlQ2hpbGRyZW4oKTsKKworICAgICAgICB2YXIgcHJpbWl0
aXZlVHlwZU5hbWVzID0gdGhpcy50eXBlcy5nbG9iYWxQcmltaXRpdmVUeXBlTmFtZXMgfHwgdGhp
cy50eXBlcy5sb2NhbFByaW1pdGl2ZVR5cGVOYW1lczsKKyAgICAgICAgdmFyIHN0cnVjdHVyZXMg
PSB0aGlzLnR5cGVzLmdsb2JhbFN0cnVjdHVyZXMgfHwgdGhpcy50eXBlcy5sb2NhbFN0cnVjdHVy
ZXM7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW107CisgICAgICAgIGZvciAodmFyIHN0cnVj
dCBvZiBzdHJ1Y3R1cmVzKSB7CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goeworICAgICAg
ICAgICAgICAgIG5hbWU6IHN0cnVjdC5jb25zdHJ1Y3Rvck5hbWUsCisgICAgICAgICAgICAgICAg
c3RydWN0dXJlOiBzdHJ1Y3QKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGZv
ciAodmFyIHByaW1pdGl2ZU5hbWUgb2YgcHJpbWl0aXZlVHlwZU5hbWVzKSB7CisgICAgICAgICAg
ICBwcm9wZXJ0aWVzLnB1c2goeworICAgICAgICAgICAgICAgIG5hbWU6IHByaW1pdGl2ZU5hbWUs
CisgICAgICAgICAgICAgICAgc3RydWN0dXJlOiBudWxsCisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorCisgICAgICAgIHByb3BlcnRpZXMuc29ydChXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnRp
ZXNTZWN0aW9uLlByb3BlcnR5Q29tcGFyYXRvcik7CisgICAgICAgIGZvciAodmFyIHByb3BlcnR5
IG9mIHByb3BlcnRpZXMpCisgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5h
cHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50KHByb3Bl
cnR5KSk7CisKKyAgICAgICAgaWYgKCF0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5jaGlsZHJl
bi5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgICAgICAgICAgdGl0bGUuY2xhc3NOYW1lID0gImluZm8iOworICAgICAg
ICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSB0aGlzLmVtcHR5UGxhY2Vob2xkZXI7CisgICAgICAg
ICAgICB2YXIgaW5mb0VsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQodGl0bGUsIG51bGwsIGZhbHNl
KTsKKyAgICAgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmFwcGVuZENoaWxkKGlu
Zm9FbGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlz
dGVuZXJzKFdlYkluc3BlY3Rvci5TZWN0aW9uLkV2ZW50LlZpc2libGVDb250ZW50RGlkQ2hhbmdl
KTsKKworICAgICAgICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDEpCisgICAgICAgICAgICB0
aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5jaGlsZHJlblswXS5leHBhbmRSZWN1cnNpdmVseSgp
OworICAgIH0KK307CisKKy8vIFRoaXMgaXMgbW9zdGx5IGlkZW50aWNhbCB0byBPYmplY3RQcm9w
ZXJ0aWVzU2VjdGlvbi5jb21wYXJlUHJvcGVydGllcy4KKy8vIEJ1dCB0aGlzIGNoZWNrcyBmb3Ig
ZXF1YWxpdHkgYmVjYXVzZSB3ZSBjYW4gaGF2ZSB0d28gb2JqZWN0cyBuYW1lZCB0aGUgc2FtZSB0
aGluZy4KK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24uUHJvcGVydHlDb21wYXJh
dG9yID0gZnVuY3Rpb24ocHJvcGVydHlBLCBwcm9wZXJ0eUIpCit7CisgICAgdmFyIGEgPSBwcm9w
ZXJ0eUEubmFtZTsKKyAgICB2YXIgYiA9IHByb3BlcnR5Qi5uYW1lOworICAgIGlmIChhLmluZGV4
T2YoIl9fcHJvdG9fXyIpICE9PSAtMSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgaWYgKGIuaW5k
ZXhPZigiX19wcm90b19fIikgIT09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKGEg
PT09IGIpCisgICAgICAgIHJldHVybiAxOworCisgICAgdmFyIGRpZmYgPSAwOworICAgIHZhciBj
aHVuayA9IC9eXGQrfF5cRCsvOworICAgIHZhciBjaHVua2EsIGNodW5rYiwgYW51bSwgYm51bTsK
KyAgICB3aGlsZSAoZGlmZiA9PT0gMCkgeworICAgICAgICBpZiAoIWEgJiYgYikKKyAgICAgICAg
ICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKCFiICYmIGEpCisgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgY2h1bmthID0gYS5tYXRjaChjaHVuaylbMF07CisgICAgICAgIGNodW5rYiA9
IGIubWF0Y2goY2h1bmspWzBdOworICAgICAgICBhbnVtID0gIWlzTmFOKGNodW5rYSk7CisgICAg
ICAgIGJudW0gPSAhaXNOYU4oY2h1bmtiKTsKKyAgICAgICAgaWYgKGFudW0gJiYgIWJudW0pCisg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChibnVtICYmICFhbnVtKQorICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChhbnVtICYmIGJudW0pIHsKKyAgICAgICAgICAg
IGRpZmYgPSBjaHVua2EgLSBjaHVua2I7CisgICAgICAgICAgICBpZiAoZGlmZiA9PT0gMCAmJiBj
aHVua2EubGVuZ3RoICE9PSBjaHVua2IubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaWYgKCEr
Y2h1bmthICYmICErY2h1bmtiKSAvLyBjaHVua3MgYXJlIHN0cmluZ3Mgb2YgYWxsIDBzIChzcGVj
aWFsIGNhc2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHVua2EubGVuZ3RoIC0gY2h1
bmtiLmxlbmd0aDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjaHVua2IubGVuZ3RoIC0gY2h1bmthLmxlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChjaHVua2EgIT09IGNodW5rYikKKyAgICAgICAgICAgIHJldHVybiAoY2h1
bmthIDwgY2h1bmtiKSA/IC0xIDogMTsKKyAgICAgICAgYSA9IGEuc3Vic3RyaW5nKGNodW5rYS5s
ZW5ndGgpOworICAgICAgICBiID0gYi5zdWJzdHJpbmcoY2h1bmtiLmxlbmd0aCk7CisgICAgfQor
CisgICAgcmV0dXJuIGRpZmY7Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnR5VHJlZUVs
ZW1lbnQgPSBmdW5jdGlvbihwcm9wZXJ0eSkKK3sKKyAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVy
dHk7CisKKyAgICB0aGlzLm5hbWVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpOworICAgIHRoaXMubmFtZUVsZW1lbnQuY2xhc3NOYW1lID0gIm5hbWUiOworICAgIHRoaXMu
bmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLnByb3BlcnR5Lm5hbWU7CisKKyAgICBUcmVl
RWxlbWVudC5jYWxsKHRoaXMsIHRoaXMubmFtZUVsZW1lbnQsIG51bGwsIGZhbHNlKTsKKworICAg
IHRoaXMudG9nZ2xlT25DbGljayA9IHRydWU7CisgICAgdGhpcy5oYXNDaGlsZHJlbiA9ICEhdGhp
cy5wcm9wZXJ0eS5zdHJ1Y3R1cmU7Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnR5VHJl
ZUVsZW1lbnQucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuVHlw
ZVByb3BlcnR5VHJlZUVsZW1lbnQsCisgICAgX19wcm90b19fOiBUcmVlRWxlbWVudC5wcm90b3R5
cGUsCisKKyAgICBvbnBvcHVsYXRlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLnJl
bW92ZUNoaWxkcmVuKCk7CisKKyAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXTsKKyAgICAgICAg
Zm9yICh2YXIgZmllbGROYW1lIG9mIHRoaXMucHJvcGVydHkuc3RydWN0dXJlLmZpZWxkcykgewor
ICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBuYW1lOiBmaWVs
ZE5hbWUsCisgICAgICAgICAgICAgICAgc3RydWN0dXJlOiBudWxsCisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorCisgICAgICAgIHByb3BlcnRpZXMuc29ydChXZWJJbnNwZWN0b3IuVHlwZVBy
b3BlcnRpZXNTZWN0aW9uLlByb3BlcnR5Q29tcGFyYXRvcik7CisKKyAgICAgICAgaWYgKHRoaXMu
cHJvcGVydHkuc3RydWN0dXJlLnByb3RvdHlwZVN0cnVjdHVyZSkgeworICAgICAgICAgICAgcHJv
cGVydGllcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLnByb3BlcnR5LnN0cnVj
dHVyZS5wcm90b3R5cGVTdHJ1Y3R1cmUuY29uc3RydWN0b3JOYW1lICsgIiAoIiArIFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiUHJvdG90eXBlIikgKyAiKSIsCisgICAgICAgICAgICAgICAgc3RydWN0
dXJlOiB0aGlzLnByb3BlcnR5LnN0cnVjdHVyZS5wcm90b3R5cGVTdHJ1Y3R1cmUKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgb2YgcHJvcGVy
dGllcykKKyAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5UeXBl
UHJvcGVydHlUcmVlRWxlbWVudChwcm9wZXJ0eSkpOworICAgIH0KK307CisKSW5kZXg6IFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuY3NzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5
cGVUb2tlblZpZXcuY3NzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy50eXBlLXRva2VuIHsKKyAgICBkaXNwbGF5OiBpbmxp
bmU7CisgICAgYm9yZGVyLXJhZGl1czogMTBweDsKKyAgICBib3JkZXItY29sb3I6IHRyYW5zcGFy
ZW50OworICAgIHBhZGRpbmctbGVmdDogOHB4OworICAgIHBhZGRpbmctcmlnaHQ6IDhweDsKKyAg
ICBwYWRkaW5nLXRvcDogMXB4OworICAgIGNvbG9yOiB3aGl0ZTsKKyAgICBmb250LXNpemU6IDEw
cHg7CisgICAgb3BhY2l0eTogMC44NTsKK30KKworLnR5cGUtdG9rZW4tbGVmdC1zcGFjaW5nIHsK
KyAgICBtYXJnaW4tbGVmdDogNXB4OworfQorCisudHlwZS10b2tlbi1yaWdodC1zcGFjaW5nIHsK
KyAgICBtYXJnaW4tcmlnaHQ6IDVweDsKK30KKworLnR5cGUtdG9rZW4tZnVuY3Rpb24sIC50eXBl
LXRva2VuLWJvb2xlYW4geworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDU5LCAxOTEp
OworfQorCisudHlwZS10b2tlbi1udW1iZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYig1
OSwgMTEyLCAyMjYpOworfQorCisudHlwZS10b2tlbi1zdHJpbmcgeworICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYigyMjMsIDUzLCA0Nik7Cit9CisKKy50eXBlLXRva2VuLWRlZmF1bHQgeworICAg
IGJhY2tncm91bmQtY29sb3I6IHJnYigxMTgsIDE3NCwgMjkpOworfQorCisudHlwZS10b2tlbi1l
bXB0eSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEyNiwgMTI2LCAxMjYpOworfQorCisu
dHlwZS10b2tlbi1tYW55IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjM3LCAxMzIsIDAp
OworfQpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlw
ZVRva2VuVmlldy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5UeXBl
VG9rZW5WaWV3ID0gZnVuY3Rpb24odG9rZW5Bbm5vdGF0b3IsIHNob3VsZEhhdmVSaWdodE1hcmdp
biwgc2hvdWxkSGF2ZUxlZnRNYXJnaW4sIHRpdGxlVHlwZSwgZnVuY3Rpb25PclZhcmlhYmxlTmFt
ZSkKK3sKKyAgICBjb25zb2xlLmFzc2VydCh0aXRsZVR5cGUgPT09IFdlYkluc3BlY3Rvci5UeXBl
VG9rZW5WaWV3LlRpdGxlVHlwZS5WYXJpYWJsZSAgfHwgdGl0bGVUeXBlID09PSBXZWJJbnNwZWN0
b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuUmV0dXJuU3RhdGVtZW50KTsKKworICAgIFdlYklu
c3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKKworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOworICAgIHNwYW4uY2xhc3NMaXN0LmFkZCgidHlwZS10b2tlbiIp
OworICAgIGlmIChzaG91bGRIYXZlUmlnaHRNYXJnaW4pCisgICAgICAgIHNwYW4uY2xhc3NMaXN0
LmFkZCgidHlwZS10b2tlbi1yaWdodC1zcGFjaW5nIik7CisgICAgaWYgKHNob3VsZEhhdmVMZWZ0
TWFyZ2luKQorICAgICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoInR5cGUtdG9rZW4tbGVmdC1zcGFj
aW5nIik7CisKKyAgICB0aGlzLmVsZW1lbnQgPSBzcGFuOworICAgIHRoaXMuX3Rva2VuQW5ub3Rh
dG9yID0gdG9rZW5Bbm5vdGF0b3I7CisgICAgdGhpcy5fdHlwZXMgPSBudWxsOworICAgIHRoaXMu
X2NvbG9yQ2xhc3MgPSBudWxsOworCisgICAgdGhpcy5fcG9wb3ZlclRpdGxlID0gV2ViSW5zcGVj
dG9yLlR5cGVUb2tlblZpZXcudGl0bGVGb3JQb3BvdmVyKHRpdGxlVHlwZSwgZnVuY3Rpb25PclZh
cmlhYmxlTmFtZSk7CisKKyAgICB0aGlzLl9zZXRVcE1vdXNlb3ZlckhhbmRsZXJzKCk7Cit9Owor
CitXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy50aXRsZUZvclBvcG92ZXIgPSBmdW5jdGlvbih0
aXRsZVR5cGUsIGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpCit7CisgICAgdmFyIHRpdGxlU3RyaW5n
ID0gbnVsbDsKKyAgICBpZiAodGl0bGVUeXBlID09PSBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmll
dy5UaXRsZVR5cGUuVmFyaWFibGUpCisgICAgICAgIHRpdGxlU3RyaW5nID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJUeXBlIGluZm9ybWF0aW9uIGZvciB2YXJpYWJsZTogJXMiKS5mb3JtYXQoZnVu
Y3Rpb25PclZhcmlhYmxlTmFtZSk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChmdW5jdGlvbk9y
VmFyaWFibGVOYW1lKQorICAgICAgICAgICAgdGl0bGVTdHJpbmcgPSBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlJldHVybiB0eXBlIGZvciBmdW5jdGlvbjogJXMiKS5mb3JtYXQoZnVuY3Rpb25PclZh
cmlhYmxlTmFtZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRpdGxlU3RyaW5nID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJSZXR1cm4gdHlwZSBmb3IgYW5vbnltb3VzIGZ1bmN0aW9uIik7
CisgICAgfQorCisgICAgcmV0dXJuIHRpdGxlU3RyaW5nOworfTsKKworV2ViSW5zcGVjdG9yLlR5
cGVUb2tlblZpZXcuVGl0bGVUeXBlID0geworICAgIFZhcmlhYmxlOiAidGl0bGUtdHlwZS12YXJp
YWJsZSIsCisgICAgUmV0dXJuU3RhdGVtZW50OiAidGl0bGUtdHlwZS1yZXR1cm4tc3RhdGVtZW50
IgorfTsKKworLy8gVGhlc2UgdHlwZSBzdHJpbmdzIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0
aCB0eXBlIGluZm9ybWF0aW9uIGluIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAK
K1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9yQ2xhc3NGb3JUeXBlID0geworICAgICJT
dHJpbmciOiAidHlwZS10b2tlbi1zdHJpbmciLAorICAgICJGdW5jdGlvbiI6ICJ0eXBlLXRva2Vu
LWZ1bmN0aW9uIiwKKyAgICAiTnVtYmVyIjogInR5cGUtdG9rZW4tbnVtYmVyIiwKKyAgICAiSW50
ZWdlciI6ICJ0eXBlLXRva2VuLW51bWJlciIsCisgICAgIlVuZGVmaW5lZCI6ICJ0eXBlLXRva2Vu
LWVtcHR5IiwKKyAgICAiTnVsbCI6ICJ0eXBlLXRva2VuLWVtcHR5IiwKKyAgICAiKD8pIjogInR5
cGUtdG9rZW4tZW1wdHkiLAorICAgICJCb29sZWFuIjogInR5cGUtdG9rZW4tYm9vbGVhbiIsCisg
ICAgIihtYW55KSI6ICJ0eXBlLXRva2VuLW1hbnkiCit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRv
a2VuVmlldy5EZWxheUhvdmVyVGltZSA9IDM1MDsKKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZp
ZXcucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuVHlwZVRva2Vu
VmlldywKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisg
ICAgLy8gUHVibGljCisKKyAgICB1cGRhdGU6IGZ1bmN0aW9uKHR5cGVzKQorICAgIHsKKyAgICAg
ICAgdmFyIHRpdGxlID0gdHlwZXMuZGlzcGxheVR5cGVOYW1lOworICAgICAgICB0aGlzLmVsZW1l
bnQudGV4dENvbnRlbnQgPSB0aXRsZTsKKyAgICAgICAgdGhpcy5fdHlwZXMgPSB0eXBlczsKKyAg
ICAgICAgdmFyIGhhc2hTdHJpbmcgPSB0aXRsZVt0aXRsZS5sZW5ndGggLSAxXSA9PT0gIj8iID8g
dGl0bGUuc2xpY2UoMCwgdGl0bGUubGVuZ3RoIC0gMSkgOiB0aXRsZTsKKworICAgICAgICBpZiAo
dGhpcy5fY29sb3JDbGFzcykKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVt
b3ZlKHRoaXMuX2NvbG9yQ2xhc3MpOworCisgICAgICAgIHRoaXMuX2NvbG9yQ2xhc3MgPSBXZWJJ
bnNwZWN0b3IuVHlwZVRva2VuVmlldy5Db2xvckNsYXNzRm9yVHlwZVtoYXNoU3RyaW5nXSB8fCAi
dHlwZS10b2tlbi1kZWZhdWx0IjsKKyAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQo
dGhpcy5fY29sb3JDbGFzcyk7CisgICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIF9zZXRV
cE1vdXNlb3ZlckhhbmRsZXJzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgdGltZW91
dElEID0gbnVsbDsKKworICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91
c2VvdmVyIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBmdW5jdGlvbiBzaG93UG9wb3ZlckFm
dGVyRGVsYXkoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRpbWVvdXRJRCA9IG51
bGw7CisKKyAgICAgICAgICAgICAgICB2YXIgZG9tUmVjdCA9IHRoaXMuZWxlbWVudC5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgICAgICAgICB2YXIgYm91bmRzID0gbmV3IFdlYklu
c3BlY3Rvci5SZWN0KGRvbVJlY3QubGVmdCwgZG9tUmVjdC50b3AsIGRvbVJlY3Qud2lkdGgsIGRv
bVJlY3QuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB0aGlzLl90b2tlbkFubm90YXRvci5zb3Vy
Y2VDb2RlVGV4dEVkaXRvci5zaG93UG9wb3ZlckZvclR5cGVzKHRoaXMuX3R5cGVzLCBib3VuZHMs
IHRoaXMuX3BvcG92ZXJUaXRsZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0
aGlzLl9zaG91bGRTaG93UG9wb3ZlcigpKQorICAgICAgICAgICAgICAgIHRpbWVvdXRJRCA9IHNl
dFRpbWVvdXQoc2hvd1BvcG92ZXJBZnRlckRlbGF5LmJpbmQodGhpcyksIFdlYkluc3BlY3Rvci5U
eXBlVG9rZW5WaWV3LkRlbGF5SG92ZXJUaW1lKTsKKyAgICAgICAgfS5iaW5kKHRoaXMpKTsKKwor
ICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGlmICh0aW1lb3V0SUQpCisgICAgICAgICAgICAgICAgY2xlYXJU
aW1lb3V0KHRpbWVvdXRJRCk7CisgICAgICAgIH0uYmluZCh0aGlzKSk7CisgICAgfSwKKworICAg
IF9zaG91bGRTaG93UG9wb3ZlcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCh0aGlz
Ll90eXBlcy5nbG9iYWxQcmltaXRpdmVUeXBlTmFtZXMgJiYgdGhpcy5fdHlwZXMuZ2xvYmFsUHJp
bWl0aXZlVHlwZU5hbWVzLmxlbmd0aCA+IDEpIHx8ICh0aGlzLl90eXBlcy5sb2NhbFByaW1pdGl2
ZVR5cGVOYW1lcyAmJiB0aGlzLl90eXBlcy5sb2NhbFByaW1pdGl2ZVR5cGVOYW1lcy5sZW5ndGgg
PiAxKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICgodGhpcy5fdHlw
ZXMuZ2xvYmFsU3RydWN0dXJlcyAmJiB0aGlzLl90eXBlcy5nbG9iYWxTdHJ1Y3R1cmVzLmxlbmd0
aCkgfHwgKHRoaXMuX3R5cGVzLmxvY2FsU3RydWN0dXJlcyAmJiB0aGlzLl90eXBlcy5sb2NhbFN0
cnVjdHVyZXMubGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9Owo=
</data>
<flag name="review"
          id="261901"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237407</attachid>
            <date>2014-08-29 22:41:23 -0700</date>
            <delta_ts>2014-09-02 10:59:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>86581</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMTM3KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMiBA
QAorMjAxNC0wOC0yOSAgU2FhbSBCYXJhdGkgIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+CisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogQ3JlYXRlIGEgVUkgZm9yIGRpc3BsYXlpbmcgSmF2YVNjcmlw
dCB0eXBlIGluZm9ybWF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzUxNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBKYXZhU2NyaXB0Q29yZSBub3cgaGFzIGEgdHlwZSBwcm9maWxlci4gVGhpcyBw
YXRjaCBwcm92aWRlcyBhIGZyb250ZW5kCisgICAgICAgIHVzZXIgaW50ZXJmYWNlIGZvciBkaXNw
bGF5aW5nIHRoaXMgdHlwZSBpbmZvcm1hdGlvbiBpbiB0aGUgV2ViIEluc3BlY3Rvci4KKyAgICAg
ICAgVGhlIHVzZXIgaW50ZXJmYWNlIHdvcmtzIGJ5IHBsYWNpbmcgaW5saW5lICJ0eXBlIHRva2Vu
cyIgbmV4dCB0byBpbXBvcnRhbnQKKyAgICAgICAgSmF2YVNjcmlwdCBleHByZXNzaW9uczogZnVu
Y3Rpb24gYXJndW1lbnRzLCBmdW5jdGlvbiByZXR1cm4gdHlwZXMsIGFuZCAKKyAgICAgICAgdmFy
aWFibGUgZGVjbGFyYXRpb25zLiBUeXBlIGluZm9ybWF0aW9uIGNhbiBhbHNvIGJlIHNlZW4gZm9y
IGFsbW9zdCBldmVyeQorICAgICAgICBKYXZhU2NpcHQgZXhwcmVzc2lvbiBqdXN0IGJ5IGhvdmVy
aW5nIG92ZXIgaXQgd2hpbGUgdmlld2luZyBhIEphdmFTY3JpcHQgZmlsZS4KKworICAgICAgICBD
dXJyZW50bHksIHR1cm5pbmcgb24gdGhlIHR5cGUgcHJvZmlsZXIgaXMgZXhwZW5zaXZlLCBzbyB0
aGUgaW5zcGVjdG9yCisgICAgICAgIGVuc3VyZXMgdG8gbmV2ZXIgdHVybiBvbiB0eXBlIHByb2Zp
bGluZyB1bnRpbCB0aGUgdXNlciBzcGVjaWZpY2FsbHkgYXNrcyAKKyAgICAgICAgZm9yIHR5cGUg
aW5mb3JtYXRpb24gdG8gYmUgdHVybmVkIG9uLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9C
YXNlL01haW4uanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVkKToKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxl
ci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIucHJvdG90eXBlLl9zdGFydFRyYWNraW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
b2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlLl9wcm9jZXNzTmV3SG92
ZXJlZFRva2VuKToKKyAgICAgICAgQWRkZWQgYSBuZXcgdHlwZSBwcm9maWxpbmcgbW9kZS4KKwkJ
CisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJTb3VyY2VNYXAu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwLnByb3RvdHlwZS5v
cmlnaW5hbFRvRm9ybWF0dGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3Vy
Y2VNYXAucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Ub0Zvcm1hdHRlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwLnByb3RvdHlwZS5mb3JtYXR0ZWRUb09yaWdp
bmFsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAucHJvdG90eXBl
LmZvcm1hdHRlZFRvT3JpZ2luYWxPZmZzZXQpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tl
bkFubm90YXRvci5wcm90b3R5cGUuZ2V0IGlzQWN0aXZlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLmdldCBzb3VyY2VDb2RlVGV4dEVkaXRvcik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5wYXVz
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5y
ZXN1bWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5
cGUucmVmcmVzaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnBy
b3RvdHlwZS5yZXNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9y
LnByb3RvdHlwZS50b2dnbGVUeXBlQW5ub3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUuX2luc2VydEFubm90YXRpb25zLik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5faW5zZXJ0VHlw
ZVRva2Vuc0ZvckVhY2hOb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5v
dGF0b3IucHJvdG90eXBlLl9pbnNlcnRUb2tlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlw
ZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5pc0xpbmVUZXJtaW5hdG9yKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLl90cmFuc2xhdGVUb09mZnNl
dEFmdGVyRnVuY3Rpb25QYXJhbWV0ZXJMaXN0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBl
VG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLl9jbGVhclRpbWVvdXRJZk5lZWRlZCk6CisgICAgICAg
IFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIHByb2R1Y2luZyB0aGUgaW5saW5lICJ0eXBl
IHRva2VuIiBhbm5vdGF0aW9ucy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvSW1hZ2VzL05h
dmlnYXRpb25JdGVtVHlwZXMuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01h
aW4uaHRtbDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5nZXQgc2NyaXB0U3ludGF4VHJlZSk6
CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5jb250YWluc05v
bkVtcHR5UmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLnByb3RvdHlwZS4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUucHJvdG90eXBlLnVwZGF0ZVR5cGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLnByb3RvdHlwZS5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKToKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NjcmlwdENvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3Jp
cHRDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IG5hdmlnYXRpb25JdGVtcyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlLl9jb250ZW50RGlkUG9wdWxh
dGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZS5f
dG9nZ2xlVHlwZUFubm90YXRpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRDb250
ZW50Vmlldy5wcm90b3R5cGUuX3Nob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZ0No
YW5nZWQpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0
b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5zaG93bik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLmhp
ZGRlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
eXBlLmNhblNob3dUeXBlQW5ub3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50b2dnbGVUeXBlQW5ub3RhdGlvbnMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5zaG93UG9wb3Zl
ckZvclR5cGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3R5cGUucHJldHR5UHJpbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVU
ZXh0RWRpdG9yLnByb3RvdHlwZS5fcG9wdWxhdGVXaXRoQ29udGVudCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9kZWJ1Z2dlckRpZFBhdXNl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUu
X2RlYnVnZ2VyRGlkUmVzdW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4
dEVkaXRvci5wcm90b3R5cGUuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50b2tl
blRyYWNraW5nQ29udHJvbGxlck5ld0hpZ2hsaWdodENhbmRpZGF0ZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl90b2tlblRyYWNraW5nQ29u
dHJvbGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbi5oYW5kbGVyKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Rva2Vu
VHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3No
b3dQb3BvdmVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3R5cGUuZWRpdGluZ0NvbnRyb2xsZXJEaWRGaW5pc2hFZGl0aW5nKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX21ha2VUeXBlVG9rZW5B
bm5vdGF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnBy
b3RvdHlwZS5fZW5hYmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2Rpc2FibGVT
Y3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fbWFrZVR5cGVUb2tlblNjcm9sbEV2ZW50
SGFuZGxlci5zY3JvbGxIYW5kbGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5wcm90b3R5cGUuX21ha2VUeXBlVG9rZW5TY3JvbGxFdmVudEhhbmRsZXIpOgor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVGV4dENvbnRlbnRWaWV3LmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IG5hdmlnYXRpb25J
dGVtcyk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9UZXh0RWRpdG9yLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBmb3JtYXR0ZWQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmNhblNob3dUeXBlQW5u
b3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnZp
c2libGVSYW5nZU9mZnNldHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJv
dG90eXBlLm9yaWdpbmFsT2Zmc2V0VG9DdXJyZW50UG9zaXRpb24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmN1cnJlbnRPZmZzZXRUb0N1cnJlbnRQb3NpdGlv
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuY3VycmVudFBv
c2l0aW9uVG9PcmlnaW5hbE9mZnNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ci5wcm90b3R5cGUuY3VycmVudFBvc2l0aW9uVG9DdXJyZW50T2Zmc2V0KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXRJbmxpbmVXaWRnZXQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLmFkZFNjcm9sbEhhbmRsZXIpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnJlbW92ZVNjcm9sbEhh
bmRsZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9zY3Jv
bGxJbnRvVmlld0NlbnRlcmVkKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRS
ZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJj
ZUNvbnRlbnRWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50
Vmlldy5wcm90b3R5cGUuZ2V0IG5hdmlnYXRpb25JdGVtcyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlLl9jb250ZW50RGlkUG9wdWxhdGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlw
ZS5fdG9nZ2xlVHlwZUFubm90YXRpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVz
b3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuX3Nob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9u
U2V0dGluZ0NoYW5nZWQpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVByb3Bl
cnRpZXNTZWN0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlUHJvcGVy
dGllc1NlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlv
bi5wcm90b3R5cGUub25wb3B1bGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVByb3Bl
cnRpZXNTZWN0aW9uLlByb3BlcnR5Q29tcGFyYXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VHlwZVByb3BlcnR5VHJlZUVsZW1lbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVQcm9w
ZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnBvcHVsYXRlKToKKyAgICAgICAgKiBVc2VySW50
ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuY3NzOiBBZGRlZC4KKyAgICAgICAgKC50eXBlLXRv
a2VuKToKKyAgICAgICAgKC50eXBlLXRva2VuLWxlZnQtc3BhY2luZyk6CisgICAgICAgICgudHlw
ZS10b2tlbi1yaWdodC1zcGFjaW5nKToKKyAgICAgICAgKC50eXBlLXRva2VuLWZ1bmN0aW9uLCAu
dHlwZS10b2tlbi1ib29sZWFuKToKKyAgICAgICAgKC50eXBlLXRva2VuLW51bWJlcik6CisgICAg
ICAgICgudHlwZS10b2tlbi1zdHJpbmcpOgorICAgICAgICAoLnR5cGUtdG9rZW4tZGVmYXVsdCk6
CisgICAgICAgICgudHlwZS10b2tlbi1lbXB0eSk6CisgICAgICAgICgudHlwZS10b2tlbi1tYW55
KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuanM6IEFkZGVk
LgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlR5cGVUb2tlblZpZXcudGl0bGVGb3JQb3BvdmVyKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UeXBlVG9rZW5WaWV3LnByb3RvdHlwZS51cGRhdGUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlR5cGVUb2tlblZpZXcucHJvdG90eXBlLl9zZXRVcE1vdXNlb3ZlckhhbmRsZXJzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnByb3RvdHlwZS5fc2hvdWxkU2hvd1Bv
cG92ZXIpOgorICAgICAgICBUaGUgaW5saW5lICJ0eXBlIHRva2VuIiB2aWV3LgorCQkKKwogMjAx
NC0wOC0yOSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiBGaXggaG93IFBvcG92ZXIgYW5pbWF0ZXMKSW5kZXg6IFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9j
YWxpemVkU3RyaW5ncy5qcwkocmV2aXNpb24gMTczMTMxKQorKysgU291cmNlL1dlYkluc3BlY3Rv
clVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjI5LDYgKzIyOSw3IEBACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcA
cwBbACIASABpAGQAZQAgAHQAaABlACAAJQBzACAAZABlAHQAYQBpAGwAcwAgAHMAaQBkAGUAYgBh
AHIAIAAoACUAcwApACIAXQAgAD0AIAAiAEgAaQBkAGUAIAB0AGgAZQAgACUAcwAgAGQAZQB0AGEA
aQBsAHMAIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQA
UwB0AHIAaQBuAGcAcwBbACIASABpAGQAZQAgAHQAaABlACAAJQBzACAAbgBhAHYAaQBnAGEAdABp
AG8AbgAgAHMAaQBkAGUAYgBhAHIAIgBdACAAPQAgACIASABpAGQAZQAgAHQAaABlACAAJQBzACAA
bgBhAHYAaQBnAGEAdABpAG8AbgAgAHMAaQBkAGUAYgBhAHIAIgA7AAogAGwAbwBjAGEAbABpAHoA
ZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAaQBkAGUAIAB0AGgAZQAgACUAcwAgAG4AYQB2AGkAZwBh
AHQAaQBvAG4AIABzAGkAZABlAGIAYQByACAAKAAlAHMAKQAiAF0AIAA9ACAAIgBIAGkAZABlACAA
dABoAGUAIAAlAHMAIABuAGEAdgBpAGcAYQB0AGkAbwBuACAAcwBpAGQAZQBiAGEAcgAgACgAJQBz
ACkAIgA7AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEgAaQBkAGUAIAB0
AHkAcABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACIAXQAgAD0AIAAiAEgAaQBkAGUAIAB0AHkA
cABlACAAaQBuAGYAbwByAG0AYQB0AGkAbwBuACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQA
cgBpAG4AZwBzAFsAIgBIAG8AcwB0ACIAXQAgAD0AIAAiAEgAbwBzAHQAIgA7AAogAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAEkAYwBvAG4AIABPAG4AbAB5ACIAXQAgAD0AIAAi
AEkAYwBvAG4AIABPAG4AbAB5ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBz
AFsAIgBJAGMAbwBuACAAYQBuAGQAIABUAGUAeAB0ACAAKABIAG8AcgBpAHoAbwBuAHQAYQBsACkA
IgBdACAAPQAgACIASQBjAG8AbgAgAGEAbgBkACAAVABlAHgAdAAgACgASABvAHIAaQB6AG8AbgB0
AGEAbAApACIAOwAKQEAgLTMzNiw2ICszMzcsNyBAQAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdABy
AGkAbgBnAHMAWwAiAFAAcgBvAGMAZQBzAHMAaQBuAGcAIABJAG4AcwB0AHIAdQBjAHQAaQBvAG4A
IgBdACAAPQAgACIAUAByAG8AYwBlAHMAcwBpAG4AZwAgAEkAbgBzAHQAcgB1AGMAdABpAG8AbgAi
ADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUAByAG8AZgBpAGwAZQAg
ACUAZAAiAF0AIAA9ACAAIgBQAHIAbwBmAGkAbABlACAAJQBkACIAOwAKIABsAG8AYwBhAGwAaQB6
AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBQAHIAbwBwAGUAcgB0AGkAZQBzACIAXQAgAD0AIAAiAFAA
cgBvAHAAZQByAHQAaQBlAHMAIgA7AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMA
WwAiAFAAcgBvAHQAbwB0AHkAcABlACIAXQAgAD0AIAAiAFAAcgBvAHQAbwB0AHkAcABlACIAOwAK
IABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBRAHUAZQByAHkAIABQAGEAcgBh
AG0AZQB0AGUAcgBzACIAXQAgAD0AIAAiAFEAdQBlAHIAeQAgAFAAYQByAGEAbQBlAHQAZQByAHMA
IgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFEAdQBlAHIAeQAgAFMA
dAByAGkAbgBnACIAXQAgAD0AIAAiAFEAdQBlAHIAeQAgAFMAdAByAGkAbgBnACIAOwAKIABsAG8A
YwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGEAZABpAGEAbAAgAEcAcgBhAGQAaQBl
AG4AdAAiAF0AIAA9ACAAIgBSAGEAZABpAGEAbAAgAEcAcgBhAGQAaQBlAG4AdAAiADsACkBAIC0z
NjYsNiArMzY4LDggQEAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBSAGUA
cwBvAHUAcgBjAGUAcwAiAF0AIAA9ACAAIgBSAGUAcwBvAHUAcgBjAGUAcwAiADsACiAAbABvAGMA
YQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHMAcABvAG4AcwBlACIAXQAgAD0AIAAi
AFIAZQBzAHAAbwBuAHMAZQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBb
ACIAUgBlAHMAcABvAG4AcwBlACAASABlAGEAZABlAHIAcwAiAF0AIAA9ACAAIgBSAGUAcwBwAG8A
bgBzAGUAIABIAGUAYQBkAGUAcgBzACIAOwAKKwBsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4A
ZwBzAFsAIgBSAGUAdAB1AHIAbgAgAHQAeQBwAGUAIABmAG8AcgAgAGEAbgBvAG4AeQBtAG8AdQBz
ACAAZgB1AG4AYwB0AGkAbwBuACIAXQAgAD0AIAAiAFIAZQB0AHUAcgBuACAAdAB5AHAAZQAgAGYA
bwByACAAYQBuAG8AbgB5AG0AbwB1AHMAIABmAHUAbgBjAHQAaQBvAG4AIgA7AAorAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFIAZQB0AHUAcgBuACAAdAB5AHAAZQAgAGYAbwBy
ACAAZgB1AG4AYwB0AGkAbwBuADoAIAAlAHMAIgBdACAAPQAgACIAUgBlAHQAdQByAG4AIAB0AHkA
cABlACAAZgBvAHIAIABmAHUAbgBjAHQAaQBvAG4AOgAgACUAcwAiADsACiAAbABvAGMAYQBsAGkA
egBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUgBlAHYAZQBhAGwAIABpAG4AIABEAE8ATQAgAFQAcgBl
AGUAIgBdACAAPQAgACIAUgBlAHYAZQBhAGwAIABpAG4AIABEAE8ATQAgAFQAcgBlAGUAIgA7AAog
AGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFIAZQB2AGUAYQBsACAAaQBuACAA
RABlAGIAdQBnAGcAZQByACAATgBhAHYAaQBnAGEAdABpAG8AbgAgAFMAaQBkAGUAYgBhAHIAIgBd
ACAAPQAgACIAUgBlAHYAZQBhAGwAIABpAG4AIABEAGUAYgB1AGcAZwBlAHIAIABOAGEAdgBpAGcA
YQB0AGkAbwBuACAAUwBpAGQAZQBiAGEAcgAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIA
aQBuAGcAcwBbACIAUgBlAHYAZQBhAGwAIABpAG4AIABPAHIAaQBnAGkAbgBhAGwAIABSAGUAcwBv
AHUAcgBjAGUAIgBdACAAPQAgACIAUgBlAHYAZQBhAGwAIABpAG4AIABPAHIAaQBnAGkAbgBhAGwA
IABSAGUAcwBvAHUAcgBjAGUAIgA7AApAQCAtNDA1LDYgKzQwOSw3IEBACiAAbABvAGMAYQBsAGkA
egBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAgAHQAaABlACAAJQBzACAAbgBhAHYAaQBn
AGEAdABpAG8AbgAgAHMAaQBkAGUAYgBhAHIAIAAoACUAcwApACIAXQAgAD0AIAAiAFMAaABvAHcA
IAB0AGgAZQAgACUAcwAgAG4AYQB2AGkAZwBhAHQAaQBvAG4AIABzAGkAZABlAGIAYQByACAAKAAl
AHMAKQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAUwBoAG8AdwAg
AHQAaQBtAGUAcwAgAGEAcwAgAGEAYgBzAG8AbAB1AHQAZQAgAHQAaQBtAGUAcwAiAF0AIAA9ACAA
IgBTAGgAbwB3ACAAdABpAG0AZQBzACAAYQBzACAAYQBiAHMAbwBsAHUAdABlACAAdABpAG0AZQBz
ACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGgAbwB3ACAAdABp
AG0AZQBzACAAYQBzACAAcABlAHIAYwBlAG4AdABhAGcAZQBzACIAXQAgAD0AIAAiAFMAaABvAHcA
IAB0AGkAbQBlAHMAIABhAHMAIABwAGUAcgBjAGUAbgB0AGEAZwBlAHMAIgA7AAorAGwAbwBjAGEA
bABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAaABvAHcAIAB0AHkAcABlACAAaQBuAGYAbwBy
AG0AYQB0AGkAbwBuACIAXQAgAD0AIAAiAFMAaABvAHcAIAB0AHkAcABlACAAaQBuAGYAbwByAG0A
YQB0AGkAbwBuACIAOwAKIABsAG8AYwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBTAGkA
egBlACIAXQAgAD0AIAAiAFMAaQB6AGUAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkA
bgBnAHMAWwAiAFMAbQBhAGwAbAAgAEkAYwBvAG4AcwAiAF0AIAA9ACAAIgBTAG0AYQBsAGwAIABJ
AGMAbwBuAHMAIgA7AAogAGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFMAbwBj
AGsAZQB0ACIAXQAgAD0AIAAiAFMAbwBjAGsAZQB0ACIAOwAKQEAgLTQ1MSw2ICs0NTYsNyBAQAog
AGwAbwBjAGEAbABpAHoAZQBkAFMAdAByAGkAbgBnAHMAWwAiAFQAcgBhAG4AcwBmAGUAcgBlAGQA
IgBdACAAPQAgACIAVAByAGEAbgBzAGYAZQByAGUAZAAiADsACiAAbABvAGMAYQBsAGkAegBlAGQA
UwB0AHIAaQBuAGcAcwBbACIAVAB5AHAAZQAiAF0AIAA9ACAAIgBUAHkAcABlACIAOwAKIABsAG8A
YwBhAGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBUAHkAcABlACAASQBzAHMAdQBlACIAXQAg
AD0AIAAiAFQAeQBwAGUAIABJAHMAcwB1AGUAIgA7AAorAGwAbwBjAGEAbABpAHoAZQBkAFMAdABy
AGkAbgBnAHMAWwAiAFQAeQBwAGUAIABpAG4AZgBvAHIAbQBhAHQAaQBvAG4AIABmAG8AcgAgAHYA
YQByAGkAYQBiAGwAZQA6ACAAJQBzACIAXQAgAD0AIAAiAFQAeQBwAGUAIABpAG4AZgBvAHIAbQBh
AHQAaQBvAG4AIABmAG8AcgAgAHYAYQByAGkAYQBiAGwAZQA6ACAAJQBzACIAOwAKIABsAG8AYwBh
AGwAaQB6AGUAZABTAHQAcgBpAG4AZwBzAFsAIgBVAG4AawBuAG8AdwBuACAAbgBvAGQAZQAiAF0A
IAA9ACAAIgBVAG4AawBuAG8AdwBuACAAbgBvAGQAZQAiADsACiAAbABvAGMAYQBsAGkAegBlAGQA
UwB0AHIAaQBuAGcAcwBbACIAVQBuAHQAaQB0AGwAZQBkACIAXQAgAD0AIAAiAFUAbgB0AGkAdABs
AGUAZAAiADsACiAAbABvAGMAYQBsAGkAegBlAGQAUwB0AHIAaQBuAGcAcwBbACIAVQBzAGUAcgAg
AEEAZwBlAG4AdAAgAFMAdAB5AGwAZQBzAGgAZQBlAHQAIgBdACAAPQAgACIAVQBzAGUAcgAgAEEA
ZwBlAG4AdAAgAFMAdAB5AGwAZQBzAGgAZQBlAHQAIgA7AApJbmRleDogU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAkocmV2aXNpb24gMTczMTMxKQorKysg
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzYsNiArMTM2LDcgQEAKICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
IlZpZXdzL1RpbWVsaW5lVmlldy5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iVmlld3MvVG9vbGJhci5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Vmlld3MvVHJlZUVsZW1lbnRTdGF0dXNCdXR0b24uY3NzIj4KKyAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9IlZpZXdzL1R5cGVUb2tlblZpZXcuY3NzIj4KIAogICAgIDxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iQ29udHJvbGxlcnMvQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9s
bGVyLmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJDb250cm9sbGVycy9D
b2RlTWlycm9yRHJhZ1RvQWRqdXN0TnVtYmVyQ29udHJvbGxlci5jc3MiPgpAQCAtNDYxLDYgKzQ2
Miw4IEBACiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1Rvb2xiYXIuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJWaWV3cy9UcmVlRWxlbWVudFN0YXR1c0J1dHRvbi5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1RyZWVPdXRsaW5lRGF0YUdyaWRTeW5jaHJvbml6ZXIu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UeXBlUHJvcGVydGllc1NlY3Rp
b24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UeXBlVG9rZW5WaWV3Lmpz
Ij48L3NjcmlwdD4KIAogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9Db2RlTWlycm9yRWRp
dGluZ0NvbnRyb2xsZXIuanMiPjwvc2NyaXB0PgogCkBAIC00OTIsNiArNDk1LDcgQEAKICAgICA8
c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvU291cmNlTWFwTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1N0b3JhZ2VNYW5hZ2VyLmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvVGltZWxpbmVNYW5hZ2VyLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzIj48
L3NjcmlwdD4KIAogICAgIDxzY3JpcHQgc3JjPSJCYXNlL01haW4uanMiPjwvc2NyaXB0PgogCklu
ZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWlu
LmpzCShyZXZpc2lvbiAxNzMxMzEpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9CYXNlL01haW4uanMJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsMTAgQEAgV2Vi
SW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLnNob3dTaGFkb3dET01TZXR0
aW5nID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5nKCJzaG93LXNoYWRvdy1kb20iLCBmYWxzZSk7
CiAgICAgdGhpcy5zaG93UmVwbGF5SW50ZXJmYWNlU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3Iu
U2V0dGluZygic2hvdy13ZWItcmVwbGF5IiwgZmFsc2UpOwogCisgICAgdGhpcy5zaG93SmF2YVNj
cmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoInNo
b3ctamF2YXNjcmlwdC10eXBlLWluZm9ybWF0aW9uIiwgZmFsc2UpOworICAgIGlmICh0aGlzLnNo
b3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZSkKKyAgICAgICAgUnVudGlt
ZUFnZW50LmVuYWJsZVR5cGVQcm9maWxlcigpOworCiAgICAgdGhpcy5tb3VzZUNvb3JkcyA9IHsK
ICAgICAgICAgeDogMCwKICAgICAgICAgeTogMApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9s
bGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5qcwkocmV2aXNp
b24gMTczMTMxKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSw3IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0Nv
bnQKICAgICBOb25lOiAibm9uZSIsCiAgICAgTm9uU3ltYm9sVG9rZW5zOiAibm9uLXN5bWJvbC10
b2tlbnMiLAogICAgIEphdmFTY3JpcHRFeHByZXNzaW9uOiAiamF2YXNjcmlwdC1leHByZXNzaW9u
IiwKKyAgICBKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOiAiamF2YXNjcmlwdC10eXBlLWluZm9y
bWF0aW9uIiwKICAgICBNYXJrZWRUb2tlbnM6ICJtYXJrZWQtdG9rZW5zIgogfQogCkBAIC0xOTMs
NyArMTk0LDYgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udAogCiAg
ICAgX3N0YXJ0VHJhY2tpbmc6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KCF0aGlzLl90cmFja2luZyk7CiAgICAgICAgIGlmICh0aGlzLl90cmFja2luZykKICAgICAg
ICAgICAgIHJldHVybjsKIApAQCAtMzkwLDYgKzM5MCw3IEBAIFdlYkluc3BlY3Rvci5Db2RlTWly
cm9yVG9rZW5UcmFja2luZ0NvbnQKICAgICAgICAgICAgIHRoaXMuX2NhbmRpZGF0ZSA9IHRoaXMu
X3Byb2Nlc3NOb25TeW1ib2xUb2tlbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkph
dmFTY3JpcHRFeHByZXNzaW9uOgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9y
VG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOgog
ICAgICAgICAgICAgdGhpcy5fY2FuZGlkYXRlID0gdGhpcy5fcHJvY2Vzc0phdmFTY3JpcHRFeHBy
ZXNzaW9uKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
Q29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTWFya2VkVG9rZW5zOgpJbmRl
eDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0
dGVyU291cmNlTWFwLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5qcwkocmV2aXNpb24gMTcz
MTMxKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMv
Rm9ybWF0dGVyU291cmNlTWFwLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNSArNDUsMjcgQEAg
V2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcC5wcm90b3R5cAogICAgIG9yaWdpbmFsVG9G
b3JtYXR0ZWQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CiAgICAg
ICAgIHZhciBvcmlnaW5hbFBvc2l0aW9uID0gdGhpcy5fbG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMu
X29yaWdpbmFsTGluZUVuZGluZ3MsIGxpbmVOdW1iZXIgfHwgMCwgY29sdW1uTnVtYmVyIHx8IDAp
OworICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQob3JpZ2lu
YWxQb3NpdGlvbik7CisgICAgfSwKKworICAgIG9yaWdpbmFsUG9zaXRpb25Ub0Zvcm1hdHRlZDog
ZnVuY3Rpb24ob3JpZ2luYWxQb3NpdGlvbikKKyAgICB7CiAgICAgICAgIHZhciBmb3JtYXR0ZWRQ
b3NpdGlvbiA9IHRoaXMuX2NvbnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLm9yaWdpbmFsLCB0
aGlzLl9tYXBwaW5nLmZvcm1hdHRlZCwgb3JpZ2luYWxQb3NpdGlvbik7CiAgICAgICAgIHJldHVy
biB0aGlzLl9wb3NpdGlvblRvTG9jYXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGZv
cm1hdHRlZFBvc2l0aW9uKTsKICAgICB9LAogCisKICAgICBmb3JtYXR0ZWRUb09yaWdpbmFsOiBm
dW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCiAgICAgeworICAgICAgICB2YXIgb3Jp
Z2luYWxQb3NpdGlvbiA9IHRoaXMuZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldChsaW5lTnVtYmVy
LCBjb2x1bW5OdW1iZXIpOworICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0aW9u
KHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MsIG9yaWdpbmFsUG9zaXRpb24pOworICAgIH0sCisK
KyAgICBmb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIpCisgICAgewogICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9s
b2NhdGlvblRvUG9zaXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGxpbmVOdW1iZXIg
fHwgMCwgY29sdW1uTnVtYmVyIHx8IDApOwogICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9
IHRoaXMuX2NvbnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLmZvcm1hdHRlZCwgdGhpcy5fbWFw
cGluZy5vcmlnaW5hbCwgZm9ybWF0dGVkUG9zaXRpb24pOwotICAgICAgICByZXR1cm4gdGhpcy5f
cG9zaXRpb25Ub0xvY2F0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MsIG9yaWdpbmFsUG9z
aXRpb24pOworICAgICAgICByZXR1cm4gb3JpZ2luYWxQb3NpdGlvbjsKICAgICB9LAogCiAgICAg
Ly8gUHJpdmF0ZQpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IgPSBm
dW5jdGlvbihzb3VyY2VDb2RlVGV4dEVkaXRvciwgc2NyaXB0KQoreworICAgIFdlYkluc3BlY3Rv
ci5PYmplY3QuY2FsbCh0aGlzKTsKKworICAgIGNvbnNvbGUuYXNzZXJ0KHNvdXJjZUNvZGVUZXh0
RWRpdG9yICYmIHNvdXJjZUNvZGVUZXh0RWRpdG9yIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVUZXh0RWRpdG9yLCBzb3VyY2VDb2RlVGV4dEVkaXRvcik7CisgICAgY29uc29sZS5h
c3NlcnQoc2NyaXB0LCBzY3JpcHQpOworCisgICAgdGhpcy5fc2NyaXB0ID0gc2NyaXB0OworICAg
IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yID0gc291cmNlQ29kZVRleHRFZGl0b3I7CisgICAg
dGhpcy5fdHlwZVRva2VuTm9kZXMgPSBbXTsKKyAgICB0aGlzLl90eXBlVG9rZW5Cb29rbWFya3Mg
PSBbXTsKKyAgICB0aGlzLl90aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgdGhpcy5faXNB
Y3RpdmUgPSBmYWxzZTsKK307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJv
dG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3Rh
dG9yLAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisKKyAg
ICAvLyBQdWJsaWMKKworICAgIGdldCBpc0FjdGl2ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5faXNBY3RpdmU7CisgICAgfSwKKworICAgIGdldCBzb3VyY2VDb2RlVGV4dEVkaXRvcigp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3I7CisgICAg
fSwKKworICAgIHBhdXNlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jbGVhclRp
bWVvdXRJZk5lZWRlZCgpOworICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOworICAgIH0s
CisKKyAgICByZXN1bWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NsZWFyVGlt
ZW91dElmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAg
dGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAgcmVmcmVzaDogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5faXNBY3RpdmUpOworICAg
ICAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHRoaXMuX2NsZWFyVGltZW91dElmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX2luc2VydEFubm90
YXRpb25zKCk7CisgICAgfSwKKworICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOworICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9
IHRydWU7CisgICAgICAgIHRoaXMuX2NsZWFyVHlwZVRva2VucygpOworICAgICAgICB0aGlzLl9p
bnNlcnRBbm5vdGF0aW9ucygpOworICAgIH0sCisKKyAgICB0b2dnbGVUeXBlQW5ub3RhdGlvbnM6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9pc0FjdGl2ZSkgeworICAgICAg
ICAgICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2NsZWFyVHlw
ZVRva2VucygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5faXNBY3RpdmUg
PSB0cnVlOworICAgICAgICAgICAgdGhpcy5yZXNldCgpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2lzQWN0aXZlOworICAgIH0sCisKKyAgICAvLyBQcml2YXRlCisKKyAgICBf
aW5zZXJ0QW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5f
aXNBY3RpdmUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNjcmlwdFN5bnRh
eFRyZWUgPSB0aGlzLl9zY3JpcHQuc2NyaXB0U3ludGF4VHJlZTsKKworICAgICAgICBpZiAoIXNj
cmlwdFN5bnRheFRyZWUpIHsKKyAgICAgICAgICAgIHRoaXMuX3NjcmlwdC5yZXF1ZXN0U2NyaXB0
U3ludGF4VHJlZShmdW5jdGlvbihzeW50YXhUcmVlKSB7CisgICAgICAgICAgICAgICAgLy8gQWZ0
ZXIgcmVxdWVzdGluZyB0aGUgdHJlZSwgd2Ugc3RpbGwgbWlnaHQgZ2V0IGEgbnVsbCB0cmVlIGZy
b20gYSBwYXJzZSBlcnJvci4KKyAgICAgICAgICAgICAgICBpZiAoc3ludGF4VHJlZSkKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICAgICAgICAgIH0u
YmluZCh0aGlzKSk7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghc2NyaXB0U3ludGF4VHJlZS5wYXJzZWRTdWNjZXNzZnVsbHkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgdmFyIHtzdGFydE9mZnNldCwgZW5kT2Zmc2V0fSA9IHRoaXMuX3Nv
dXJjZUNvZGVUZXh0RWRpdG9yLnZpc2libGVSYW5nZU9mZnNldHMoKTsKKworICAgICAgICB2YXIg
c3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKKyAgICAgICAgdmFyIGFsbE5vZGVzSW5SYW5nZSA9IHNj
cmlwdFN5bnRheFRyZWUuZmlsdGVyQnlSYW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAg
ICAgICAgc2NyaXB0U3ludGF4VHJlZS51cGRhdGVUeXBlcyhhbGxOb2Rlc0luUmFuZ2UsIGZ1bmN0
aW9uIGFmdGVyVHlwZVVwZGF0ZXMoKSB7CisgICAgICAgICAgICAvLyBCZWNhdXNlIHRoaXMgaXMg
YW4gYXN5bmNocm9ub3VzIGNhbGwsIHdlIGNvdWxkIGhhdmUgYmVlbiBkZWFjdGl2YXRlZCBiZWZv
cmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgICAgICAgICAgIGlmICghdGhp
cy5faXNBY3RpdmUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBhbGxO
b2Rlc0luUmFuZ2UuZm9yRWFjaCh0aGlzLl9pbnNlcnRUeXBlVG9rZW5zRm9yRWFjaE5vZGUsIHRo
aXMpOworICAgICAgICAgICAgYWxsTm9kZXNJblJhbmdlLmZvckVhY2godGhpcy5fdXBkYXRlVHlw
ZVRva2Vuc0ZvckVhY2hOb2RlLCB0aGlzKTsKKworICAgICAgICAgICAgdmFyIHRvdGFsVGltZSA9
IERhdGUubm93KCkgLSBzdGFydFRpbWU7CisgICAgICAgICAgICB2YXIgdGltZW91dFRpbWUgPSBN
YXRoLm1pbihNYXRoLm1heCg3NTAwLCB0b3RhbFRpbWUpLCA4ICogdG90YWxUaW1lKTsKKworICAg
ICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIHRp
bWVvdXRVcGRhdGUoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIg
PSBudWxsOworICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydEFubm90YXRpb25zKCk7CisgICAg
ICAgICAgICB9LmJpbmQodGhpcyksIHRpbWVvdXRUaW1lKTsKKyAgICAgICAgfS5iaW5kKHRoaXMp
KTsKKyAgICB9LAorCisgICAgX2luc2VydFR5cGVUb2tlbnNGb3JFYWNoTm9kZTogZnVuY3Rpb24o
bm9kZSkKKyAgICB7CisgICAgICAgIHZhciBzY3JpcHRTeW50YXhUcmVlID0gdGhpcy5fc2NyaXB0
Ll9zY3JpcHRTeW50YXhUcmVlOworCisgICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7CisgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25E
ZWNsYXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICBmb3IgKHZhciBwYXJhbSBv
ZiBub2RlLnBhcmFtcykgeworICAgICAgICAgICAgICAgIGlmICghcGFyYW0uYXR0YWNobWVudHMu
X190eXBlVG9rZW4gJiYgcGFyYW0uYXR0YWNobWVudHMudHlwZXMgJiYgcGFyYW0uYXR0YWNobWVu
dHMudHlwZXMuZGlzcGxheVR5cGVOYW1lKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnNl
cnRUb2tlbihwYXJhbS5yYW5nZVswXSwgcGFyYW0sIGZhbHNlLCBXZWJJbnNwZWN0b3IuVHlwZVRv
a2VuVmlldy5UaXRsZVR5cGUuVmFyaWFibGUsIHBhcmFtLm5hbWUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBJZiBhIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXhwbGljaXQg
cmV0dXJuIHR5cGUsIHRoZW4gZG9uJ3Qgc2hvdyBhIHJldHVybiB0eXBlIHVubGVzcyB3ZSB0aGlu
ayBpdCdzIGEgY29uc3RydWN0b3IuCisgICAgICAgICAgICB2YXIgZnVuY3Rpb25SZXR1cm5UeXBl
ID0gbm9kZS5hdHRhY2htZW50cy5yZXR1cm5UeXBlczsKKyAgICAgICAgICAgIGlmIChub2RlLmF0
dGFjaG1lbnRzLl9fdHlwZVRva2VuIHx8ICFmdW5jdGlvblJldHVyblR5cGUgfHwgIWZ1bmN0aW9u
UmV0dXJuVHlwZS5kaXNwbGF5VHlwZU5hbWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGlmIChzY3JpcHRTeW50YXhUcmVlLmNvbnRhaW5zTm9uRW1wdHlSZXR1cm5TdGF0
ZW1lbnQobm9kZS5ib2R5KSB8fCBmdW5jdGlvblJldHVyblR5cGUuZGlzcGxheVR5cGVOYW1lICE9
PSAiVW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBub2Rl
LmlkID8gbm9kZS5pZC5uYW1lIDogbnVsbDsKKyAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRU
b2tlbihub2RlLmlzR2V0dGVyT3JTZXR0ZXIgPyBub2RlLmdldHRlck9yU2V0dGVyUmFuZ2VbMF0g
OiBub2RlLnJhbmdlWzBdLCBub2RlLAorICAgICAgICAgICAgICAgICAgICB0cnVlLCBXZWJJbnNw
ZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuUmV0dXJuU3RhdGVtZW50LCBmdW5jdGlvbk5h
bWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9yOgor
ICAgICAgICAgICAgaWYgKCFub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuICYmIG5vZGUuYXR0
YWNobWVudHMudHlwZXMgJiYgbm9kZS5hdHRhY2htZW50cy50eXBlcy5kaXNwbGF5VHlwZU5hbWUp
CisgICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0VG9rZW4obm9kZS5pZC5yYW5nZVswXSwgbm9k
ZSwgZmFsc2UsIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5WYXJpYWJsZSwg
bm9kZS5pZC5uYW1lKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9LAor
CisgICAgX2luc2VydFRva2VuOiBmdW5jdGlvbihvcmlnaW5hbE9mZnNldCwgbm9kZSwgc2hvdWxk
VHJhbnNsYXRlT2Zmc2V0VG9BZnRlclBhcmFtZXRlckxpc3QsIHR5cGVUb2tlblRpdGxlVHlwZSwg
ZnVuY3Rpb25PclZhcmlhYmxlTmFtZSkKKyAgICB7CisgICAgICAgIHZhciB0b2tlblBvc2l0aW9u
ID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3Iub3JpZ2luYWxPZmZzZXRUb0N1cnJlbnRQb3Np
dGlvbihvcmlnaW5hbE9mZnNldCk7CisgICAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gdGhpcy5f
c291cmNlQ29kZVRleHRFZGl0b3IuY3VycmVudFBvc2l0aW9uVG9DdXJyZW50T2Zmc2V0KHRva2Vu
UG9zaXRpb24pOworICAgICAgICB2YXIgc291cmNlU3RyaW5nID0gdGhpcy5fc291cmNlQ29kZVRl
eHRFZGl0b3Iuc3RyaW5nOworCisgICAgICAgIGlmIChzaG91bGRUcmFuc2xhdGVPZmZzZXRUb0Fm
dGVyUGFyYW1ldGVyTGlzdCkgeworICAgICAgICAgICAgLy8gVHJhbnNsYXRlIHRoZSBwb3NpdGlv
biB0byB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcyBvZiB0aGUgZnVuY3Rpb24gYXJndW1lbnRzOgor
ICAgICAgICAgICAgLy8gdHJhbnNsYXRlIGZyb206IFt0eXBlLXRva2VuXSBmdW5jdGlvbiBmb28o
KSB7fSA9PiB0bzogZnVuY3Rpb24gZm9vKCkgW3R5cGUtdG9rZW5dIHt9CisgICAgICAgICAgICBj
dXJyZW50T2Zmc2V0ID0gdGhpcy5fdHJhbnNsYXRlVG9PZmZzZXRBZnRlckZ1bmN0aW9uUGFyYW1l
dGVyTGlzdChub2RlLCBjdXJyZW50T2Zmc2V0LCBzb3VyY2VTdHJpbmcpOworICAgICAgICAgICAg
dG9rZW5Qb3NpdGlvbiA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLmN1cnJlbnRPZmZzZXRU
b0N1cnJlbnRQb3NpdGlvbihjdXJyZW50T2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE5vdGU6IGJvb2ttYXJrcyByZW5kZXIgdG8gdGhlIGxlZnQgb2YgdGhlIGNoYXJhY3RlciB0aGV5
J3JlIGJlaW5nIGRpc3BsYXllZCBuZXh0IHRvLgorICAgICAgICAvLyBUaGlzIGlzIHdoeSByaWdo
dCBtYXJnaW4gY2hlY2tzIHRoZSBjdXJyZW50IG9mZnNldC4gQW5kIHRoaXMgaXMgb2theSB0byBk
byBiZWNhdXNlIEphdmFTY3JpcHQgY2FuJ3QgYmUgd3JpdHRlbiByaWdodC10by1sZWZ0LgorICAg
ICAgICB2YXIgaXNTcGFjZVJlZ2V4cCA9IC9ccy87CisgICAgICAgIHZhciBzaG91bGRIYXZlTGVm
dE1hcmdpbiA9IGN1cnJlbnRPZmZzZXQgIT09IDAgJiYgIWlzU3BhY2VSZWdleHAudGVzdChzb3Vy
Y2VTdHJpbmdbY3VycmVudE9mZnNldCAtIDFdKTsKKyAgICAgICAgdmFyIHNob3VsZEhhdmVSaWdo
dE1hcmdpbiA9ICFpc1NwYWNlUmVnZXhwLnRlc3Qoc291cmNlU3RyaW5nW2N1cnJlbnRPZmZzZXRd
KTsKKyAgICAgICAgdmFyIHR5cGVUb2tlbiA9IG5ldyBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmll
dyh0aGlzLCBzaG91bGRIYXZlUmlnaHRNYXJnaW4sIHNob3VsZEhhdmVMZWZ0TWFyZ2luLCB0eXBl
VG9rZW5UaXRsZVR5cGUsIGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpOworICAgICAgICB2YXIgYm9v
a21hcmsgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvci5zZXRJbmxpbmVXaWRnZXQodG9rZW5Q
b3NpdGlvbiwgdHlwZVRva2VuLmVsZW1lbnQpOworICAgICAgICBub2RlLmF0dGFjaG1lbnRzLl9f
dHlwZVRva2VuID0gdHlwZVRva2VuOworICAgICAgICB0aGlzLl90eXBlVG9rZW5Ob2Rlcy5wdXNo
KG5vZGUpOworICAgICAgICB0aGlzLl90eXBlVG9rZW5Cb29rbWFya3MucHVzaChib29rbWFyayk7
CisgICAgfSwKKworICAgIF91cGRhdGVUeXBlVG9rZW5zRm9yRWFjaE5vZGU6IGZ1bmN0aW9uKG5v
ZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgeworICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb246
CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVu
Y3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgbm9kZS5wYXJhbXMuZm9yRWFjaChmdW5jdGlv
bihwYXJhbSkgeworICAgICAgICAgICAgICAgIGlmIChwYXJhbS5hdHRhY2htZW50cy5fX3R5cGVU
b2tlbikKKyAgICAgICAgICAgICAgICAgICAgcGFyYW0uYXR0YWNobWVudHMuX190eXBlVG9rZW4u
dXBkYXRlKHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgaWYgKG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4pCisgICAgICAgICAgICAgICAg
bm9kZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbi51cGRhdGUobm9kZS5hdHRhY2htZW50cy5yZXR1
cm5UeXBlcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAg
ICBpZiAobm9kZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbikKKyAgICAgICAgICAgICAgICBub2Rl
LmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuLnVwZGF0ZShub2RlLmF0dGFjaG1lbnRzLnR5cGVzKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSwKKworICAgIF90cmFuc2xhdGVU
b09mZnNldEFmdGVyRnVuY3Rpb25QYXJhbWV0ZXJMaXN0OiBmdW5jdGlvbihub2RlLCBvZmZzZXQs
IHNvdXJjZVN0cmluZykKKyAgICB7CisgICAgICAgIC8vIFRoZSBhc3N1bXB0aW9uIGhlcmUgaXMg
dGhhdCB3ZSBnZXQgdGhlIG9mZnNldCBzdGFydGluZyBhdCB0aGUgZnVuY3Rpb24ga2V5d29yZCAo
b3IgYWZ0ZXIgdGhlIGdldC9zZXQga2V5d29yZHMpLgorICAgICAgICAvLyBXZSB3aWxsIHJldHVy
biB0aGUgb2Zmc2V0IGZvciB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcyBpbiB0aGUgZnVuY3Rpb24g
ZGVjbGFyYXRpb24uCisgICAgICAgIC8vIEFsbCB0aGlzIGNvZGUgaXMganVzdCBhIHdheSB0byBm
aW5kIHRoaXMgcGFyZW50aGVzaXMgd2hpbGUgaWdub3JpbmcgY29tbWVudHMuCisKKyAgICAgICAg
dmFyIGlzTXVsdGlMaW5lQ29tbWVudCA9IGZhbHNlOworICAgICAgICB2YXIgaXNTaW5nbGVMaW5l
Q29tbWVudCA9IGZhbHNlOworICAgICAgICB2YXIgc2hvdWxkSWdub3JlID0gZmFsc2U7CisKKyAg
ICAgICAgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRvcihjaGFyKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBSZWZlcmVuY2UgRWNtYVNjcmlwdCA1IGdyYW1tYXIgZm9yIHNpbmdsZSBsaW5lIGNv
bW1lbnRzIGFuZCBsaW5lIHRlcm1pbmF0b3JzOgorICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5l
Y21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTcuMworICAgICAgICAgICAg
Ly8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTcu
NAorICAgICAgICAgICAgcmV0dXJuIGNoYXIgPT09ICJcbiIgfHwgY2hhciA9PT0gIlxyIiB8fCBj
aGFyID09PSAiXHUyMDI4IiB8fCBjaGFyID09PSAiXHUyMDI5IjsKKyAgICAgICAgfQorCisgICAg
ICAgIHdoaWxlICgoc291cmNlU3RyaW5nW29mZnNldF0gIT09ICIpIiB8fCBzaG91bGRJZ25vcmUp
ICYmIG9mZnNldCA8IHNvdXJjZVN0cmluZy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChpc1Np
bmdsZUxpbmVDb21tZW50ICYmIGlzTGluZVRlcm1pbmF0b3Ioc291cmNlU3RyaW5nW29mZnNldF0p
KSB7CisgICAgICAgICAgICAgICAgaXNTaW5nbGVMaW5lQ29tbWVudCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIHNob3VsZElnbm9yZSA9IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmIChp
c011bHRpTGluZUNvbW1lbnQgJiYgc291cmNlU3RyaW5nW29mZnNldF0gPT09ICIqIiAmJiBzb3Vy
Y2VTdHJpbmdbb2Zmc2V0ICsgMV0gPT09ICIvIikgeworICAgICAgICAgICAgICAgIGlzTXVsdGlM
aW5lQ29tbWVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHNob3VsZElnbm9yZSA9IGZhbHNl
OworICAgICAgICAgICAgICAgIG9mZnNldCsrOworICAgICAgICAgICAgfSBlbHNlIGlmICghc2hv
dWxkSWdub3JlICYmIHNvdXJjZVN0cmluZ1tvZmZzZXRdID09PSAiLyIpIHsKKyAgICAgICAgICAg
ICAgICBvZmZzZXQrKzsKKyAgICAgICAgICAgICAgICBpZiAoc291cmNlU3RyaW5nW29mZnNldF0g
PT09ICIqIikKKyAgICAgICAgICAgICAgICAgICAgaXNNdWx0aUxpbmVDb21tZW50ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VTdHJpbmdbb2Zmc2V0XSA9PT0gIi8iKQor
ICAgICAgICAgICAgICAgICAgICBpc1NpbmdsZUxpbmVDb21tZW50ID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHBh
cnNpbmcuIENvdWxkbid0IHBhcnNlIGNvbW1lbnQgcHJlYW1ibGUuIik7CisgICAgICAgICAgICAg
ICAgc2hvdWxkSWdub3JlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb2Zm
c2V0Kys7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMTsKKyAgICB9LAor
CisgICAgX2NsZWFyVHlwZVRva2VuczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5f
dHlwZVRva2VuTm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBub2Rl
LmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuID0gbnVsbDsKKyAgICAgICAgfSk7CisgICAgICAgIHRo
aXMuX3R5cGVUb2tlbkJvb2ttYXJrcy5mb3JFYWNoKGZ1bmN0aW9uKGJvb2ttYXJrKSB7CisgICAg
ICAgICAgICBib29rbWFyay5jbGVhcigpOworICAgICAgICB9KTsKKworICAgICAgICB0aGlzLl90
eXBlVG9rZW5Ob2RlcyA9IFtdOworICAgICAgICB0aGlzLl90eXBlVG9rZW5Cb29rbWFya3MgPSBb
XTsKKyAgICB9LAorCisgICAgX2NsZWFyVGltZW91dElmTmVlZGVkOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICBpZiAodGhpcy5fdGltZW91dElkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGNs
ZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWRlbnRpZmllcik7CisgICAgICAgICAgICB0aGlzLl90
aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9OwpJbmRleDogU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL05hdmlnYXRpb25JdGVtVHlw
ZXMuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0ltYWdlcy9OYXZpZ2F0aW9uSXRlbVR5cGVzLnN2ZwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9OYXZpZ2F0aW9uSXRlbVR5cGVzLnN2
Zwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pgor
PCEtLSBDb3B5cmlnaHQgwqkgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIC0t
PgorPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIg
dmlld0JveD0iMCAwIDE0IDE0Ij4KKyAgICA8cmVjdCBjbGFzcz0ic3Ryb2tlZCIgZmlsbD0ibm9u
ZSIgc3Ryb2tlPSJibGFjayIgeD0iMC41IiB5PSIxLjAiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIg
cng9IjIiLz4KKyAgICA8cGF0aCBjbGFzcz0ic3Ryb2tlZCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJi
bGFjayIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgZD0iTSA2LjUgNS41IEwgNi41IDkuNSBNIDQu
MCA0LjUgTCA5LjAgNC41Ii8+Cis8L3N2Zz4KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qcwkocmV2aXNpb24gMTczMTMx
KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSwxMSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0
LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlOwogICAgIH0sCiAK
KyAgICBnZXQgc2NyaXB0U3ludGF4VHJlZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
c2NyaXB0U3ludGF4VHJlZTsKKyAgICB9LAorCiAgICAgY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFj
a2VuZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgLy8gV2UgY2FuIHJlcXVlc3QgY29udGVu
dCBpZiB3ZSBoYXZlIGFuIGlkLgpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanMJKHJl
dmlzaW9uIDE3MzEzMSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsOCArMTcyLDgg
QEAgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlIAogICAgICAgICBpZiAo
IXRoaXMuX3BhcnNlZFN1Y2Nlc3NmdWxseSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICBpZiAoc3RhcnROb2RlLl9hdHRhY2htZW50cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0
ZW1lbnQgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgIHJldHVybiBzdGFydE5vZGUuX2F0dGFj
aG1lbnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRlbWVudDsKKyAgICAgICAgaWYgKHN0YXJ0Tm9k
ZS5hdHRhY2htZW50cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQgIT09IHVuZGVmaW5lZCkK
KyAgICAgICAgICAgIHJldHVybiBzdGFydE5vZGUuYXR0YWNobWVudHMuX2hhc05vbkVtcHR5UmV0
dXJuU3RhdGVtZW50OwogCiAgICAgICAgIGZ1bmN0aW9uIHJlbW92ZUZ1bmN0aW9uc0ZpbHRlcihu
b2RlKQogICAgICAgICB7CkBAIC0xOTEsMTkgKzE5MSwyMiBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5wcm90b3R5cGUgCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
IAotICAgICAgICBzdGFydE5vZGUuX2F0dGFjaG1lbnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRl
bWVudCA9IGhhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50OworICAgICAgICBzdGFydE5vZGUuYXR0
YWNobWVudHMuX2hhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50ID0gaGFzTm9uRW1wdHlSZXR1cm5T
dGF0ZW1lbnQ7CiAKICAgICAgICAgcmV0dXJuIGhhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50Owog
ICAgIH0sCiAKLSAgICB1cGRhdGVUeXBlczogZnVuY3Rpb24oc291cmNlSUQsIG5vZGVzVG9VcGRh
dGUsIGNhbGxiYWNrKSAKKyAgICB1cGRhdGVUeXBlczogZnVuY3Rpb24obm9kZXNUb1VwZGF0ZSwg
Y2FsbGJhY2spCiAgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChSdW50aW1lQWdlbnQuZ2V0
UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKTsKICAgICAgICAgY29uc29sZS5hc3Nl
cnQoQXJyYXkuaXNBcnJheShub2Rlc1RvVXBkYXRlKSAmJiB0aGlzLl9wYXJzZWRTdWNjZXNzZnVs
bHkpOworCiAgICAgICAgIGlmICghdGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5KQogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIHZhciBhbGxSZXF1ZXN0cyA9IFtdOwogICAgICAgICB2YXIg
YWxsUmVxdWVzdE5vZGVzID0gW107CisgICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3Njcmlw
dC5pZDsKIAogICAgICAgICBmb3IgKHZhciBub2RlIG9mIG5vZGVzVG9VcGRhdGUpIHsKICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7CkBAIC0yNDksOSArMjUyLDkgQEAgV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlIAogICAgICAgICAgICAgICAgIHZhciBub2Rl
ID0gYWxsUmVxdWVzdE5vZGVzW2ldOwogICAgICAgICAgICAgICAgIHZhciB0eXBlSW5mb3JtYXRp
b24gPSB0eXBlSW5mb3JtYXRpb25BcnJheVtpXTsKICAgICAgICAgICAgICAgICBpZiAoYWxsUmVx
dWVzdHNbaV0udHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciA9PT0gV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5GdW5jdGlvblJldHVybikK
LSAgICAgICAgICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3JldHVyblR5cGVzID0gdHlw
ZUluZm9ybWF0aW9uOworICAgICAgICAgICAgICAgICAgICBub2RlLmF0dGFjaG1lbnRzLnJldHVy
blR5cGVzID0gdHlwZUluZm9ybWF0aW9uOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3R5cGVzID0gdHlwZUluZm9ybWF0aW9uOwor
ICAgICAgICAgICAgICAgICAgICBub2RlLmF0dGFjaG1lbnRzLnR5cGVzID0gdHlwZUluZm9ybWF0
aW9uOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjYWxsYmFjaygpOwpAQCAtNzc3LDcg
Kzc4MCw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZSAKICAgICAg
ICAgCiAgICAgICAgIHJlc3VsdC5yYW5nZSA9IG5vZGUucmFuZ2U7CiAgICAgICAgIC8vIFRoaXMg
aXMgYW4gb2JqZWN0IGZvciB3aGljaCB5b3UgY2FuIGFkZCBmaWVsZHMgdG8gYW4gQVNUIG5vZGUg
d2l0aG91dCB3b3JyeWluZyBhYm91dCBwb2xsdXRpbmcgdGhlIHN5bnRheC1yZWxhdGVkIGZpZWxk
cyBvZiB0aGUgbm9kZS4KLSAgICAgICAgcmVzdWx0Ll9hdHRhY2htZW50cyA9IHt9OyAKKyAgICAg
ICAgcmVzdWx0LmF0dGFjaG1lbnRzID0ge307CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TY3Jp
cHRDb250ZW50Vmlldy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9TY3JpcHRDb250ZW50Vmlldy5qcwkocmV2aXNpb24gMTczMTMxKQor
KysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2NyaXB0Q29udGVu
dFZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDE1IEBAIFdlYkluc3BlY3Rvci5T
Y3JpcHRDb250ZW50VmlldyA9IGZ1bmN0aW8KICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5h
dmlnYXRpb25JdGVtID0gbmV3IFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25J
dGVtKCJwcmV0dHktcHJpbnQiLCB0b29sVGlwLCBhY3RpdmF0ZWRUb29sVGlwLCBjdXJsZXlCcmFj
ZXNJbWFnZS5zcmMsIGN1cmxleUJyYWNlc0ltYWdlLndpZHRoLCBjdXJsZXlCcmFjZXNJbWFnZS5o
ZWlnaHQpOwogICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tl
ZCwgdGhpcy5fdG9nZ2xlUHJldHR5UHJpbnQsIHRoaXMpOwogICAgIHRoaXMuX3ByZXR0eVByaW50
QnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IGZhbHNlOyAvLyBFbmFibGVkIHdoZW4gdGhl
IHRleHQgZWRpdG9yIGlzIHBvcHVsYXRlZCB3aXRoIGNvbnRlbnQuCisKKyAgICB2YXIgc2hvd1R5
cGVzSW1hZ2VTaXplID0gV2ViSW5zcGVjdG9yLlBsYXRmb3JtLmlzTGVnYWN5TWFjT1MgPyAxNSA6
IDE2OworICAgIHZhciB0b29sVGlwVHlwZXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cg
dHlwZSBpbmZvcm1hdGlvbiIpOworICAgIHZhciBhY3RpdmF0ZWRUb29sVGlwVHlwZXMgPSBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkhpZGUgdHlwZSBpbmZvcm1hdGlvbiIpOworICAgIHRoaXMuX3No
b3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtID0gbmV3IFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1
dHRvbk5hdmlnYXRpb25JdGVtKCJzaG93LXR5cGVzIiwgdG9vbFRpcFR5cGVzLCBhY3RpdmF0ZWRU
b29sVGlwVHlwZXMsICJJbWFnZXMvTmF2aWdhdGlvbkl0ZW1UeXBlcy5zdmciLCBzaG93VHlwZXNJ
bWFnZVNpemUsIHNob3dUeXBlc0ltYWdlU2l6ZSk7CisgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9u
TmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdh
dGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgdGhpcy5fdG9nZ2xlVHlwZUFubm90YXRpb25zLCB0aGlz
KTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gZmFs
c2U7CisKKyAgICBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0
aW5nLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNldHRpbmcuRXZlbnQuQ2hhbmdlZCwg
dGhpcy5fc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nQ2hhbmdlZCwgdGhpcyk7
CiB9OwogCiBXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcuU3R5bGVDbGFzc05hbWUgPSAi
c2NyaXB0IjsKQEAgLTcwLDcgKzc5LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3
LnByb3RvdHlwZQogCiAgICAgZ2V0IG5hdmlnYXRpb25JdGVtcygpCiAgICAgewotICAgICAgICBy
ZXR1cm4gW3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW1dOworICAgICAgICBy
ZXR1cm4gW3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0sIHRoaXMuX3Nob3dU
eXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtXTsKICAgICB9LAogCiAgICAgZ2V0IHNjcmlwdCgpCkBA
IC0yMDQsNiArMjEzLDggQEAgV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlw
ZQogICAgIF9jb250ZW50RGlkUG9wdWxhdGU6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAg
ICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gdGhpcy5f
dGV4dEVkaXRvci5jYW5CZUZvcm1hdHRlZCgpOworICAgICAgICB0aGlzLl9zaG93VHlwZXNCdXR0
b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gdGhpcy5fdGV4dEVkaXRvci5jYW5TaG93VHlwZUFu
bm90YXRpb25zKCk7CisgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVt
LmFjdGl2YXRlZCA9IFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNl
dHRpbmcudmFsdWU7CiAgICAgfSwKIAogICAgIF90b2dnbGVQcmV0dHlQcmludDogZnVuY3Rpb24o
ZXZlbnQpCkBAIC0yMTIsNiArMjIzLDE2IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50Vmll
dy5wcm90b3R5cGUKICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5mb3JtYXR0ZWQgPSBhY3RpdmF0
ZWQ7CiAgICAgfSwKIAorICAgIF90b2dnbGVUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKGV2ZW50
KQorICAgIHsKKyAgICAgICAgdGhpcy5fdGV4dEVkaXRvci50b2dnbGVUeXBlQW5ub3RhdGlvbnMo
KTsKKyAgICB9LAorCisgICAgX3Nob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZ0No
YW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fc2hvd1R5cGVzQnV0
dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0
VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZTsKKyAgICB9LAorCiAgICAgX3RleHRFZGl0b3JG
b3JtYXR0aW5nRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMu
X3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gdGhpcy5fdGV4dEVk
aXRvci5mb3JtYXR0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwko
cmV2aXNpb24gMTczMTMxKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yID0gZnVuYwogCiAgICAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3IuY2FsbCh0aGlzLCBudWxsLCBudWxsLCB0aGlzKTsKIAorICAg
IHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciA9IG51bGw7CisgICAgdGhpcy5fdHlwZVRva2VuU2Ny
b2xsSGFuZGxlciA9IG51bGw7CisKICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHRoaXMganVzdCBq
dW1wcyBiZXR3ZWVuIHJlc291cmNlcyBhbmQgcmVsYXRlZCBzb3VyY2UgbWFwIHJlc291cmNlcy4g
SXQgZG9lc24ndCAianVtcCB0byBzeW1ib2wiIHlldC4KICAgICB0aGlzLl91cGRhdGVUb2tlblRy
YWNraW5nQ29udHJvbGxlclN0YXRlKCk7CiAKQEAgLTgzLDYgKzg2LDcgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLlBvcG92ZQogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0
RWRpdG9yLkhvdmVyZWRFeHByZXNzaW9uSGlnaGxpZ2h0U3R5bGVDbGFzc05hbWUgPSAiaG92ZXJl
ZC1leHByZXNzaW9uLWhpZ2hsaWdodCI7CiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IuRHVyYXRpb25Ub01vdXNlT3ZlclRva2VuVG9NYWtlSG92ZXJlZFRva2VuID0gNTAwOwogV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkR1cmF0aW9uVG9Nb3VzZU91dE9mSG92ZXJl
ZFRva2VuVG9SZWxlYXNlID0gMTAwMDsKK1dlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5EdXJhdGlvblRvVXBkYXRlVHlwZVRva2Vuc0FmdGVyU2Nyb2xsaW5nID0gMTAwOwogCiBXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuQXV0b0Zvcm1hdE1pbmltdW1MaW5lTGVuZ3Ro
ID0gNTAwOwogCkBAIC0xMDEsNiArMTA1LDE0IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4
dEVkaXRvci5wcm90b3QKICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZUNvZGU7CiAgICAgfSwK
IAorICAgIHNob3duOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5wcm90b3R5cGUuc2hvd24uY2FsbCh0aGlzKTsKKworICAgICAgICBpZiAodGhpcy5f
dHlwZVRva2VuQW5ub3RhdG9yKQorICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9y
LnJlc3VtZSgpOworICAgIH0sCisKICAgICBoaWRkZW46IGZ1bmN0aW9uKCkKICAgICB7CiAgICAg
ICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5oaWRkZW4uY2FsbCh0aGlzKTsK
QEAgLTExMCw2ICsxMjIsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJv
dG90CiAgICAgICAgIHRoaXMuX2Rpc21pc3NQb3BvdmVyKCk7CiAgICAgICAgIAogICAgICAgICB0
aGlzLl9kaXNtaXNzRWRpdGluZ0NvbnRyb2xsZXIodHJ1ZSk7CisKKyAgICAgICAgaWYgKHRoaXMu
X3R5cGVUb2tlbkFubm90YXRvcikKKyAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRv
ci5wYXVzZSgpOwogICAgIH0sCiAKICAgICBjbG9zZTogZnVuY3Rpb24oKQpAQCAtMTQ5LDYgKzE2
NCwxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAg
IHJldHVybiBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuY2FuQmVGb3JtYXR0ZWQu
Y2FsbCh0aGlzKTsKICAgICB9LAogCisgICAgY2FuU2hvd1R5cGVBbm5vdGF0aW9uczogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yOwor
ICAgIH0sCisKICAgICBjdXN0b21QZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSkKICAgICB7
CiAgICAgICAgIGZ1bmN0aW9uIHNlYXJjaFJlc3VsdENhbGxiYWNrKGVycm9yLCBtYXRjaGVzKQpA
QCAtMjM0LDYgKzI1NCw1NSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJv
dG90CiAgICAgICAgICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZU1hcmtlcnMocmFuZ2UpOwogICAg
IH0sCiAKKyAgICB0b2dnbGVUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHZhciBpc0FjdGl2YXRlZCA9IHRoaXMuX3R5cGVUb2tlbkFubm90YXRv
ci50b2dnbGVUeXBlQW5ub3RhdGlvbnMoKTsKKyAgICAgICAgaWYgKGlzQWN0aXZhdGVkKSB7Cisg
ICAgICAgICAgICBSdW50aW1lQWdlbnQuZW5hYmxlVHlwZVByb2ZpbGVyKCk7CisgICAgICAgICAg
ICB0aGlzLl9lbmFibGVTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGRpc2FibGUgdHlwZSBwcm9maWxpbmcgd2hl
biBleGl0aW5nIHRoZSBpbnNwZWN0b3IsIHNvIG5vIG5lZWQgdG8gY2FsbCBpdCBoZXJlLiBJZiB3
ZSB3ZXJlCisgICAgICAgICAgICAvLyB0byBjYWxsIGl0IGhlcmUsIHdlIHdvdWxkIGhhdmUgSmF2
YVNjcmlwdENvcmUgY29tcGlsZSBvdXQgYWxsIHRoZSBuZWNlc3NhcnkgdHlwZSBwcm9maWxpbmcg
aW5mb3JtYXRpb24sCisgICAgICAgICAgICAvLyBzbyBpZiBhIHVzZXIgd2VyZSB0byBxdWlja2x5
IHByZXNzIHRoZW4gdW5wcmVzcyB0aGUgYnV0dG9uLCB3ZSB3b3VsZG4ndCBiZSBhYmxlIHRvIHJl
LXNob3cgdHlwZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVTY3JvbGxF
dmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKKyAgICAgICAgfQorICAgICAgICBXZWJJbnNw
ZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLnZhbHVlID0gaXNBY3Rp
dmF0ZWQ7CisKKyAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0
ZSgpOworICAgICAgICByZXR1cm4gaXNBY3RpdmF0ZWQ7CisgICAgfSwKKworICAgIHNob3dQb3Bv
dmVyRm9yVHlwZXM6IGZ1bmN0aW9uKHR5cGVzLCBib3VuZHMsIHRpdGxlKQorICAgIHsKKyAgICAg
ICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAg
Y29udGVudC5jbGFzc05hbWUgPSAib2JqZWN0IGV4cGFuZGFibGUiOworCisgICAgICAgIHZhciB0
aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGl0
bGVFbGVtZW50LmNsYXNzTmFtZSA9ICJ0aXRsZSI7CisgICAgICAgIHRpdGxlRWxlbWVudC50ZXh0
Q29udGVudCA9IHRpdGxlOworICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbWVu
dCk7CisKKyAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0
aWVzU2VjdGlvbih0eXBlcyk7CisgICAgICAgIHNlY3Rpb24uZXhwYW5kZWQgPSB0cnVlOworICAg
ICAgICBzZWN0aW9uLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiYm9keSIpOworICAgICAgICBjb250
ZW50LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5fc2hvd1Bv
cG92ZXIoY29udGVudCwgYm91bmRzKTsKKyAgICB9LAorCisgICAgLy8gUHJvdGVjdGVkCisKKyAg
ICBwcmV0dHlQcmludDogZnVuY3Rpb24ocHJldHR5KQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnByZXR0eVByaW50LmNhbGwodGhpcywgcHJldHR5KTsK
KworICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yICYmIHRoaXMuX3R5cGVUb2tl
bkFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRv
ci5yZXNldCgpOworICAgIH0sCisKICAgICAvLyBQcml2YXRlCiAKICAgICBfdW5mb3JtYXR0ZWRM
aW5lSW5mb0ZvckVkaXRvckxpbmVJbmZvOiBmdW5jdGlvbihsaW5lSW5mbykKQEAgLTM1OCw2ICs0
MjcsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAKICAgICAg
ICAgdGhpcy5fY29udGVudFdpbGxQb3B1bGF0ZShjb250ZW50KTsKICAgICAgICAgdGhpcy5zdHJp
bmcgPSBjb250ZW50OworCisgICAgICAgIHRoaXMuX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3IoKTsK
KwogICAgICAgICB0aGlzLl9jb250ZW50RGlkUG9wdWxhdGUoKTsKICAgICB9LAogCkBAIC05Njcs
MTIgKzEwMzksMTYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAog
ICAgIF9kZWJ1Z2dlckRpZFBhdXNlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHRo
aXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKKyAgICAgICAgaWYgKHRo
aXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3Rp
dmUpCisgICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVmcmVzaCgpOwogICAg
IH0sCiAKICAgICBfZGVidWdnZXJEaWRSZXN1bWU6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAg
ICAgICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOwogICAgICAg
ICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOworICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5u
b3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAgICAg
IHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZWZyZXNoKCk7CiAgICAgfSwKIAogICAgIF9zb3Vy
Y2VDb2RlU291cmNlTWFwQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtOTg4LDYgKzEwNjQsOCBA
QCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIHZhciBt
b2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2Rl
Lk5vbmU7CiAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLnBhdXNlZCkK
ICAgICAgICAgICAgIG1vZGUgPSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdD
b250cm9sbGVyLk1vZGUuSmF2YVNjcmlwdEV4cHJlc3Npb247CisgICAgICAgIGVsc2UgaWYgKHRo
aXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3Rp
dmUpCisgICAgICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNr
aW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb247CiAgICAgICAgIGVs
c2UgaWYgKHRoaXMuX2hhc0NvbG9yTWFya2VycygpKQogICAgICAgICAgICAgbW9kZSA9IFdlYklu
c3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5NYXJrZWRUb2tl
bnM7CiAgICAgICAgIGVsc2UgaWYgKCh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5z
cGVjdG9yLlNvdXJjZU1hcFJlc291cmNlIHx8IHRoaXMuX3NvdXJjZUNvZGUuc291cmNlTWFwcy5s
ZW5ndGggIT09IDApICYmIFdlYkluc3BlY3Rvci5tb2RpZmllcktleXMubWV0YUtleSAmJiAhV2Vi
SW5zcGVjdG9yLm1vZGlmaWVyS2V5cy5hbHRLZXkgJiYgIVdlYkluc3BlY3Rvci5tb2RpZmllcktl
eXMuc2hpZnRLZXkpCkBAIC0xMDEwLDYgKzEwODgsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgICAgICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JU
b2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9uOgorICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9k
ZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOgogICAgICAgICAgICAgdGhpcy50b2tlblRyYWNr
aW5nQ29udHJvbGxlci5tb3VzZU92ZXJEZWxheUR1cmF0aW9uID0gV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLkR1cmF0aW9uVG9Nb3VzZU92ZXJUb2tlblRvTWFrZUhvdmVyZWRUb2tl
bjsKICAgICAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW91c2VPdXRSZWxl
YXNlRGVsYXlEdXJhdGlvbiA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5EdXJh
dGlvblRvTW91c2VPdXRPZkhvdmVyZWRUb2tlblRvUmVsZWFzZTsKICAgICAgICAgICAgIHRoaXMu
dG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2xhc3NOYW1lRm9ySGlnaGxpZ2h0ZWRSYW5nZSA9IFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5Ib3ZlcmVkRXhwcmVzc2lvbkhpZ2hsaWdo
dFN0eWxlQ2xhc3NOYW1lOwpAQCAtMTA3NSw2ICsxMTU0LDExIEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CisgICAgICAgIGlmICh0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vZGUgPT09IFdlYklu
c3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0
VHlwZUluZm9ybWF0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl90b2tlblRyYWNraW5nQ29udHJv
bGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbihjYW5kaWRhdGUpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgaWYgKHRoaXMudG9rZW5UcmFj
a2luZ0NvbnRyb2xsZXIubW9kZSA9PT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNr
aW5nQ29udHJvbGxlci5Nb2RlLk1hcmtlZFRva2VucykgewogICAgICAgICAgICAgdmFyIG1hcmtl
cnMgPSB0aGlzLm1hcmtlcnNBdFBvc2l0aW9uKGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZS5z
dGFydCk7CiAgICAgICAgICAgICBpZiAobWFya2Vycy5sZW5ndGggPiAwKQpAQCAtMTEzMCwyNSAr
MTIxNCw2NyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAg
ICAgIERlYnVnZ2VyQWdlbnQuZXZhbHVhdGVPbkNhbGxGcmFtZS5pbnZva2Uoe2NhbGxGcmFtZUlk
OiBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZS5pZCwgZXhwcmVz
c2lvbjogY2FuZGlkYXRlLmV4cHJlc3Npb24sIG9iamVjdEdyb3VwOiAicG9wb3ZlciIsIGRvTm90
UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZTogdHJ1ZX0sIHBvcHVsYXRlLmJpbmQodGhp
cykpOwogICAgIH0sCiAKLSAgICBfc2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGNvbnRlbnQpCisgICAg
X3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0VHlwZUluZm9ybWF0
aW9uOiBmdW5jdGlvbihjYW5kaWRhdGUpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChj
YW5kaWRhdGUuZXhwcmVzc2lvbik7CisKKyAgICAgICAgdmFyIHNvdXJjZUNvZGUgPSB0aGlzLl9z
b3VyY2VDb2RlOworICAgICAgICB2YXIgc291cmNlSUQgPSBzb3VyY2VDb2RlLnNjcmlwdHNbMF0u
aWQ7CisgICAgICAgIHZhciByYW5nZSA9IGNhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZTsKKyAg
ICAgICAgdmFyIG9mZnNldCA9IHRoaXMuY3VycmVudFBvc2l0aW9uVG9PcmlnaW5hbE9mZnNldCh7
bGluZTogcmFuZ2Uuc3RhcnQubGluZSwgY2g6IHJhbmdlLnN0YXJ0LmNofSk7CisKKyAgICAgICAg
dmFyIGFsbFJlcXVlc3RzID0gW3sKKyAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0
b3I6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJjaERlc2Ny
aXB0b3IuTm9ybWFsRXhwcmVzc2lvbiwKKyAgICAgICAgICAgIHNvdXJjZUlEOiBzb3VyY2VJRCwK
KyAgICAgICAgICAgIGRpdm90OiBvZmZzZXQKKyAgICAgICAgfV07CisKKyAgICAgICAgZnVuY3Rp
b24gaGFuZGxlcihlcnJvciwgYWxsVHlwZXMpIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUgIT09IHRo
aXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoYWxsVHlwZXMubGVuZ3RoID09PSAx
KTsKKyAgICAgICAgICAgIGlmICghYWxsVHlwZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHZhciB0eXBlcyA9IGFsbFR5cGVzWzBdOworICAgICAgICAgICAg
aWYgKHR5cGVzLmRpc3BsYXlUeXBlTmFtZSkgeworICAgICAgICAgICAgICAgIHZhciBwb3BvdmVy
VGl0bGUgPSBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy50aXRsZUZvclBvcG92ZXIoV2ViSW5z
cGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlZhcmlhYmxlLCBjYW5kaWRhdGUuZXhwcmVz
c2lvbik7CisgICAgICAgICAgICAgICAgdGhpcy5zaG93UG9wb3ZlckZvclR5cGVzKHR5cGVzLCBu
dWxsLCBwb3BvdmVyVGl0bGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
UnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhhbGxSZXF1
ZXN0cywgaGFuZGxlci5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgX3Nob3dQb3BvdmVyOiBm
dW5jdGlvbihjb250ZW50LCBib3VuZHMpCiAgICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0
aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZSk7CisgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2FuZGlkYXRlIHx8IGJvdW5kcyk7
CiAKKyAgICAgICAgdmFyIHNob3VsZEhpZ2hsaWdodFJhbmdlID0gZmFsc2U7CiAgICAgICAgIHZh
ciBjYW5kaWRhdGUgPSB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmNhbmRpZGF0ZTsKLSAg
ICAgICAgaWYgKCFjYW5kaWRhdGUpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIElm
IGJvdW5kcyBpcyBmYWxzZXksIHRoaXMgaXMgYSBwb3BvdmVyIGludHJvZHVjZWQgZnJvbSBhIGhv
dmVyIGV2ZW50LgorICAgICAgICAvLyBPdGhlcndpc2UsIHRoaXMgaXMgY2FsbGVkIGZyb20gVHlw
ZVRva2VuQW5ub3RhdG9yLgorICAgICAgICBpZiAoIWJvdW5kcykgeworICAgICAgICAgICAgaWYg
KCFjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvbnRlbnQu
Y2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuUG9wb3ZlckRl
YnVnZ2VyQ29udGVudFN0eWxlQ2xhc3NOYW1lKTsKKyAgICAgICAgICAgIHZhciByZWN0cyA9IHRo
aXMucmVjdHNGb3JSYW5nZShjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2UpOworICAgICAgICAg
ICAgYm91bmRzID0gV2ViSW5zcGVjdG9yLlJlY3QudW5pb25PZlJlY3RzKHJlY3RzKTsKIAotICAg
ICAgICB2YXIgcmVjdHMgPSB0aGlzLnJlY3RzRm9yUmFuZ2UoY2FuZGlkYXRlLmhvdmVyZWRUb2tl
blJhbmdlKTsKLSAgICAgICAgdmFyIGJvdW5kcyA9IFdlYkluc3BlY3Rvci5SZWN0LnVuaW9uT2ZS
ZWN0cyhyZWN0cyk7CisgICAgICAgICAgICBzaG91bGRIaWdobGlnaHRSYW5nZSA9IHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBjb250ZW50LmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVUZXh0RWRpdG9yLlBvcG92ZXJEZWJ1Z2dlckNvbnRlbnRTdHlsZUNsYXNzTmFtZSk7
CiAKICAgICAgICAgdGhpcy5fcG9wb3ZlciA9IHRoaXMuX3BvcG92ZXIgfHwgbmV3IFdlYkluc3Bl
Y3Rvci5Qb3BvdmVyKHRoaXMpOwogICAgICAgICB0aGlzLl9wb3BvdmVyLnByZXNlbnROZXdDb250
ZW50V2l0aEZyYW1lKGNvbnRlbnQsIGJvdW5kcy5wYWQoNSksIFtXZWJJbnNwZWN0b3IuUmVjdEVk
Z2UuTUlOX1ksIFdlYkluc3BlY3Rvci5SZWN0RWRnZS5NQVhfWSwgV2ViSW5zcGVjdG9yLlJlY3RF
ZGdlLk1BWF9YXSk7CisgICAgICAgIGlmIChzaG91bGRIaWdobGlnaHRSYW5nZSkKKyAgICAgICAg
ICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuaGlnaGxpZ2h0UmFuZ2UoY2FuZGlkYXRl
LmV4cHJlc3Npb25SYW5nZSk7CiAKICAgICAgICAgdGhpcy5fdHJhY2tQb3BvdmVyRXZlbnRzKCk7
Ci0KLSAgICAgICAgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5oaWdobGlnaHRSYW5nZShj
YW5kaWRhdGUuZXhwcmVzc2lvblJhbmdlKTsKICAgICB9LAogCiAgICAgX3Nob3dQb3BvdmVyRm9y
RnVuY3Rpb246IGZ1bmN0aW9uKGRhdGEpCkBAIC0xMzg0LDYgKzE1MTAsNjMgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICB0aGlzLl9pZ25vcmVDb250
ZW50RGlkQ2hhbmdlLS07CiAKICAgICAgICAgZGVsZXRlIHRoaXMuX2VkaXRpbmdDb250cm9sbGVy
OworICAgIH0sCisKKyAgICBfbWFrZVR5cGVUb2tlbkFubm90YXRvcjogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgaWYgKCFSdW50aW1lQWdlbnQuZ2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVz
QXRPZmZzZXRzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzY3JpcHQgPSBu
dWxsOworICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBtZSBtb2RpZmllZCB0byB3b3Jr
IHdpdGggSFRNTCBmaWxlcyB3aXRoIGlubGluZSBzY3JpcHQgdGFncy4KKyAgICAgICAgaWYgKHRo
aXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU2NyaXB0KQorICAgICAgICAg
ICAgc2NyaXB0ID0gdGhpcy5fc291cmNlQ29kZTsKKyAgICAgICAgZWxzZSBpZiAodGhpcy5fc291
cmNlQ29kZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5SZXNvdXJjZSAmJiB0aGlzLl9zb3VyY2VD
b2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLlNjcmlwdCAmJiB0aGlzLl9z
b3VyY2VDb2RlLnNjcmlwdHMubGVuZ3RoKQorICAgICAgICAgICAgc2NyaXB0ID0gdGhpcy5fc291
cmNlQ29kZS5zY3JpcHRzWzBdOworCisgICAgICAgIGlmICghc2NyaXB0KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciA9IG5ldyBXZWJJbnNw
ZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yKHRoaXMsIHNjcmlwdCk7CisgICAgICAgIGlmIChXZWJJ
bnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLnZhbHVlKSB7Cisg
ICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzZXQoKTsKKyAgICAgICAgICAg
IHRoaXMuX2VuYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFubm90YXRvcigpOworICAgICAg
ICB9CisgICAgfSwKKworICAgIF9lbmFibGVTY3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0
b3I6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIFBhdXNlIHVwZGF0aW5nIHR5cGUgdG9r
ZW5zIHdoaWxlIHNjcm9sbGluZyB0byBwcmV2ZW50IGZyYW1lIGxvc3MuCisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KCF0aGlzLl90eXBlVG9rZW5TY3JvbGxIYW5kbGVyKTsKKyAgICAgICAgdGhpcy5f
dHlwZVRva2VuU2Nyb2xsSGFuZGxlciA9IHRoaXMuX21ha2VUeXBlVG9rZW5TY3JvbGxFdmVudEhh
bmRsZXIoKTsKKyAgICAgICAgdGhpcy5hZGRTY3JvbGxIYW5kbGVyKHRoaXMuX3R5cGVUb2tlblNj
cm9sbEhhbmRsZXIpOworICAgIH0sCisKKyAgICBfZGlzYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVU
b2tlbkFubm90YXRvcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQo
dGhpcy5fdHlwZVRva2VuU2Nyb2xsSGFuZGxlcik7CisgICAgICAgIHRoaXMucmVtb3ZlU2Nyb2xs
SGFuZGxlcih0aGlzLl90eXBlVG9rZW5TY3JvbGxIYW5kbGVyKTsKKyAgICAgICAgdGhpcy5fdHlw
ZVRva2VuU2Nyb2xsSGFuZGxlciA9IG51bGw7CisgICAgfSwKKworICAgIF9tYWtlVHlwZVRva2Vu
U2Nyb2xsRXZlbnRIYW5kbGVyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgdHlwZVRv
a2VuQW5ub3RhdG9yID0gdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yOworICAgICAgICB2YXIgdGlt
ZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICBmdW5jdGlvbiBzY3JvbGxIYW5kbGVyKCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRpbWVvdXRJZGVudGlmaWVyKQorICAgICAgICAg
ICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWRlbnRpZmllcik7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgdHlwZVRva2VuQW5ub3RhdG9yLnBhdXNlKCk7CisKKyAgICAgICAg
ICAgIHRpbWVvdXRJZGVudGlmaWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICB0aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAgICAgICAgICAgdHlwZVRv
a2VuQW5ub3RhdG9yLnJlc3VtZSgpOworICAgICAgICAgICAgfSwgV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLkR1cmF0aW9uVG9VcGRhdGVUeXBlVG9rZW5zQWZ0ZXJTY3JvbGxpbmcp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNjcm9sbEhhbmRsZXI7CiAgICAgfQogfTsK
IApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dENv
bnRlbnRWaWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1RleHRDb250ZW50Vmlldy5qcwkocmV2aXNpb24gMTczMTMxKQorKysgU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dENvbnRlbnRWaWV3Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwxNSBAQCBXZWJJbnNwZWN0b3IuVGV4dENvbnRl
bnRWaWV3ID0gZnVuY3Rpb24oCiAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9u
SXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbSgicHJl
dHR5LXByaW50IiwgdG9vbFRpcCwgYWN0aXZhdGVkVG9vbFRpcCwgY3VybGV5QnJhY2VzSW1hZ2Uu
c3JjLCBjdXJsZXlCcmFjZXNJbWFnZS53aWR0aCwgY3VybGV5QnJhY2VzSW1hZ2UuaGVpZ2h0KTsK
ICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIHRoaXMu
X3RvZ2dsZVByZXR0eVByaW50LCB0aGlzKTsKICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5h
dmlnYXRpb25JdGVtLmVuYWJsZWQgPSB0aGlzLl90ZXh0RWRpdG9yLmNhbkJlRm9ybWF0dGVkKCk7
CisKKyAgICB2YXIgc2hvd1R5cGVzSW1hZ2VTaXplID0gV2ViSW5zcGVjdG9yLlBsYXRmb3JtLmlz
TGVnYWN5TWFjT1MgPyAxNSA6IDE2OworICAgIHZhciB0b29sVGlwVHlwZXMgPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlNob3cgdHlwZSBpbmZvcm1hdGlvbiIpOworICAgIHZhciBhY3RpdmF0ZWRU
b29sVGlwVHlwZXMgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhpZGUgdHlwZSBpbmZvcm1hdGlv
biIpOworICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtID0gbmV3IFdlYklu
c3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtKCJzaG93LXR5cGVzIiwgdG9vbFRp
cFR5cGVzLCBhY3RpdmF0ZWRUb29sVGlwVHlwZXMsICJJbWFnZXMvTmF2aWdhdGlvbkl0ZW1UeXBl
cy5zdmciLCBzaG93VHlwZXNJbWFnZVNpemUsIHNob3dUeXBlc0ltYWdlU2l6ZSk7CisgICAgdGhp
cy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgZnVuY3Rpb24oKSB7fSwg
dGhpcyk7CisgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9
IGZhbHNlOworCisgICAgV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9u
U2V0dGluZy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5TZXR0aW5nLkV2ZW50LkNoYW5n
ZWQsIHRoaXMuX3Nob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZ0NoYW5nZWQsIHRo
aXMpOwogfTsKIAogV2ViSW5zcGVjdG9yLlRleHRDb250ZW50Vmlldy5TdHlsZUNsYXNzTmFtZSA9
ICJ0ZXh0IjsKQEAgLTY2LDcgKzc1LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRDb250ZW50Vmlldy5w
cm90b3R5cGUgPQogCiAgICAgZ2V0IG5hdmlnYXRpb25JdGVtcygpCiAgICAgewotICAgICAgICBy
ZXR1cm4gW3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW1dOworICAgICAgICBy
ZXR1cm4gW3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0sIHRoaXMuX3Nob3dU
eXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtXTsKICAgICB9LAogCiAgICAgcmV2ZWFsUG9zaXRpb246
IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0UmFuZ2VUb1NlbGVjdCwgZm9yY2VVbmZvcm1hdHRlZCkK
SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRFZGl0
b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvVGV4dEVkaXRvci5qcwkocmV2aXNpb24gMTczMTMxKQorKysgU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dEVkaXRvci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMTY3LDcgKzE2Nyw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB0aGlzLl9pZ25vcmVDb2RlTWlycm9yQ29u
dGVudERpZENoYW5nZUV2ZW50Kys7Ci0gICAgICAgIHRoaXMuX3ByZXR0eVByaW50KGZvcm1hdHRl
ZCk7CisgICAgICAgIHRoaXMucHJldHR5UHJpbnQoZm9ybWF0dGVkKTsKICAgICAgICAgdGhpcy5f
aWdub3JlQ29kZU1pcnJvckNvbnRlbnREaWRDaGFuZ2VFdmVudC0tOwogICAgICAgICBjb25zb2xl
LmFzc2VydCh0aGlzLl9pZ25vcmVDb2RlTWlycm9yQ29udGVudERpZENoYW5nZUV2ZW50ID49IDAp
OwogCkBAIC0xOTgsNiArMTk4LDExIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuaGFzRm9ybWF0dGVyKCk7CiAgICAgfSwKIAorICAg
IGNhblNob3dUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9LAorCiAgICAgZ2V0IHNlbGVjdGVkVGV4dFJhbmdlKCkKICAgICB7CiAg
ICAgICAgIHZhciBzdGFydCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKHRydWUpOwpAQCAt
NjM5LDYgKzY0NCwxNzMgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewog
ICAgICAgICB9CiAgICAgfSwKIAorICAgIHZpc2libGVSYW5nZU9mZnNldHM6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHZhciBzdGFydE9mZnNldCA9IG51bGw7CisgICAgICAgIHZhciBlbmRP
ZmZzZXQgPSBudWxsOworICAgICAgICB2YXIgdmlzaWJsZVJhbmdlID0gdGhpcy5fY29kZU1pcnJv
ci5nZXRWaWV3cG9ydCgpOworCisgICAgICAgIGlmICh0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAp
IHsKKyAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZv
cm1hdHRlZFRvT3JpZ2luYWxPZmZzZXQoTWF0aC5tYXgodmlzaWJsZVJhbmdlLmZyb20gLSAxLCAw
KSwgMCk7CisgICAgICAgICAgICBlbmRPZmZzZXQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAu
Zm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldCh2aXNpYmxlUmFuZ2UudG8gLSAxLCAwKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gdGhpcy5fY29kZU1pcnJvci5n
ZXREb2MoKS5pbmRleEZyb21Qb3Moe2xpbmU6IHZpc2libGVSYW5nZS5mcm9tLCBjaDogMH0pOwor
ICAgICAgICAgICAgZW5kT2Zmc2V0ID0gdGhpcy5fY29kZU1pcnJvci5nZXREb2MoKS5pbmRleEZy
b21Qb3Moe2xpbmU6IHZpc2libGVSYW5nZS50bywgY2g6IDB9KTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB7c3RhcnRPZmZzZXQ6IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQ6IGVuZE9mZnNl
dH07CisgICAgfSwKKworICAgIG9yaWdpbmFsT2Zmc2V0VG9DdXJyZW50UG9zaXRpb246IGZ1bmN0
aW9uKG9mZnNldCkKKyAgICB7CisgICAgICAgIHZhciBwb3NpdGlvbiA9IG51bGw7CisgICAgICAg
IGlmICh0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXApIHsKKyAgICAgICAgICAgIHZhciBsb2NhdGlv
biA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQo
b2Zmc2V0KTsKKyAgICAgICAgICAgIHBvc2l0aW9uID0ge2xpbmU6IGxvY2F0aW9uLmxpbmVOdW1i
ZXIsIGNoOiBsb2NhdGlvbi5jb2x1bW5OdW1iZXJ9OworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHBvc2l0aW9uID0gdGhpcy5fY29kZU1pcnJvci5nZXREb2MoKS5wb3NGcm9tSW5kZXgob2Zm
c2V0KTsKKworICAgICAgICByZXR1cm4gcG9zaXRpb247CisgICAgfSwKKworICAgIGN1cnJlbnRP
ZmZzZXRUb0N1cnJlbnRQb3NpdGlvbjogZnVuY3Rpb24ob2Zmc2V0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2NvZGVNaXJyb3IuZ2V0RG9jKCkucG9zRnJvbUluZGV4KG9mZnNldCk7Cisg
ICAgfSwKKworICAgIGN1cnJlbnRQb3NpdGlvblRvT3JpZ2luYWxPZmZzZXQ6IGZ1bmN0aW9uKHBv
c2l0aW9uKQorICAgIHsKKyAgICAgICAgdmFyIG9mZnNldCA9IG51bGw7CisgICAgICAgIGlmICh0
aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXApCisgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLl9mb3Jt
YXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldChwb3NpdGlvbi5saW5lLCBw
b3NpdGlvbi5jaCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IHRoaXMudG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIuX2NvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9zKHBv
c2l0aW9uKTsKKworICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgIH0sCisKKyAgICBjdXJyZW50
UG9zaXRpb25Ub0N1cnJlbnRPZmZzZXQ6IGZ1bmN0aW9uKHBvc2l0aW9uKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2NvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9zKHBvc2l0aW9u
KTsKKyAgICB9LAorCisgICAgc2V0SW5saW5lV2lkZ2V0OiBmdW5jdGlvbihwb3NpdGlvbiwgaW5s
aW5lRWxlbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yLnNldFVu
aXF1ZUJvb2ttYXJrKHBvc2l0aW9uLCB7d2lkZ2V0OiBpbmxpbmVFbGVtZW50fSk7CisgICAgfSwK
KworICAgIGFkZFNjcm9sbEhhbmRsZXI6IGZ1bmN0aW9uKGhhbmRsZXIpCisgICAgeworICAgICAg
ICB0aGlzLl9jb2RlTWlycm9yLm9uKCJzY3JvbGwiLCBoYW5kbGVyKTsKKyAgICB9LAorCisgICAg
cmVtb3ZlU2Nyb2xsSGFuZGxlcjogZnVuY3Rpb24oaGFuZGxlcikKKyAgICB7CisgICAgICAgIHRo
aXMuX2NvZGVNaXJyb3Iub2ZmKCJzY3JvbGwiLCBoYW5kbGVyKTsKKyAgICB9LAorCisgICAgLy8g
UHJvdGVjdGVkCisKKyAgICBwcmV0dHlQcmludDogZnVuY3Rpb24ocHJldHR5KQorICAgIHsKKyAg
ICAgICAgZnVuY3Rpb24gcHJldHR5UHJpbnRBbmRVcGRhdGVFZGl0b3IoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBzdGFydCA9IHtsaW5lOiAwLCBjaDogMH07CisgICAgICAgICAgICBj
b25zdCBlbmQgPSB7bGluZTogdGhpcy5fY29kZU1pcnJvci5saW5lQ291bnQoKSAtIDF9OworCisg
ICAgICAgICAgICB2YXIgb2xkU2VsZWN0aW9uQW5jaG9yID0gdGhpcy5fY29kZU1pcnJvci5nZXRD
dXJzb3IoImFuY2hvciIpOworICAgICAgICAgICAgdmFyIG9sZFNlbGVjdGlvbkhlYWQgPSB0aGlz
Ll9jb2RlTWlycm9yLmdldEN1cnNvcigiaGVhZCIpOworICAgICAgICAgICAgdmFyIG5ld1NlbGVj
dGlvbkFuY2hvciwgbmV3U2VsZWN0aW9uSGVhZDsKKyAgICAgICAgICAgIHZhciBuZXdFeGVjdXRp
b25Mb2NhdGlvbiA9IG51bGw7CisKKyAgICAgICAgICAgIGlmIChwcmV0dHkpIHsKKyAgICAgICAg
ICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMTA1OTM5NDg+IFByb3ZpZGUgYSB3YXkgdG8gY2hh
bmdlIHRoZSB0YWIgd2lkdGggaW4gdGhlIFdlYiBJbnNwZWN0b3IKKyAgICAgICAgICAgICAgICBj
b25zdCBpbmRlbnRTdHJpbmcgPSAiICAgICI7CisgICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFs
TGluZUVuZGluZ3MgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgZm9ybWF0dGVkTGluZUVuZGlu
Z3MgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgbWFwcGluZyA9IHtvcmlnaW5hbDogWzBdLCBm
b3JtYXR0ZWQ6IFswXX07CisgICAgICAgICAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgRm9ybWF0
dGVyQ29udGVudEJ1aWxkZXIobWFwcGluZywgb3JpZ2luYWxMaW5lRW5kaW5ncywgZm9ybWF0dGVk
TGluZUVuZGluZ3MsIDAsIDAsIGluZGVudFN0cmluZyk7CisgICAgICAgICAgICAgICAgdmFyIGZv
cm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIodGhpcy5fY29kZU1pcnJvciwgYnVpbGRlcik7CisgICAg
ICAgICAgICAgICAgZm9ybWF0dGVyLmZvcm1hdChzdGFydCwgZW5kKTsKKworICAgICAgICAgICAg
ICAgIHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcCA9IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3Vy
Y2VNYXAuZnJvbUJ1aWxkZXIoYnVpbGRlcik7CisKKyAgICAgICAgICAgICAgICB0aGlzLl9jb2Rl
TWlycm9yLnNldFZhbHVlKGJ1aWxkZXIuZm9ybWF0dGVkQ29udGVudCk7CisKKyAgICAgICAgICAg
ICAgICBpZiAodGhpcy5fcG9zaXRpb25Ub1JldmVhbCkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgbmV3UmV2ZWFsUG9zaXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxU
b0Zvcm1hdHRlZCh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsLmxpbmVOdW1iZXIsIHRoaXMuX3Bvc2l0
aW9uVG9SZXZlYWwuY29sdW1uTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9z
aXRpb25Ub1JldmVhbCA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBvc2l0aW9uKG5ld1Jl
dmVhbFBvc2l0aW9uLmxpbmVOdW1iZXIsIG5ld1JldmVhbFBvc2l0aW9uLmNvbHVtbk51bWJlcik7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRSYW5n
ZVRvU2VsZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRSZXZlYWxTZWxlY3Rp
b25TdGFydCA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRo
aXMuX3RleHRSYW5nZVRvU2VsZWN0LnN0YXJ0TGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Qu
c3RhcnRDb2x1bW4pOworICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGVkUmV2ZWFsU2VsZWN0
aW9uRW5kID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQodGhp
cy5fdGV4dFJhbmdlVG9TZWxlY3QuZW5kTGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QuZW5k
Q29sdW1uKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QgPSBu
ZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5saW5l
TnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5jb2x1bW5OdW1iZXIsIG1hcHBlZFJl
dmVhbFNlbGVjdGlvbkVuZC5saW5lTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQuY29s
dW1uTnVtYmVyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWlz
TmFOKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KCFpc05hTih0aGlzLl9leGVjdXRpb25Db2x1bW5OdW1iZXIpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbmV3RXhlY3V0aW9uTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3Vy
Y2VNYXAub3JpZ2luYWxUb0Zvcm1hdHRlZCh0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyLCB0aGlz
Ll9leGVjdXRpb25Db2x1bW5OdW1iZXIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIHZhciBtYXBwZWRBbmNob3JMb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1h
cC5vcmlnaW5hbFRvRm9ybWF0dGVkKG9sZFNlbGVjdGlvbkFuY2hvci5saW5lLCBvbGRTZWxlY3Rp
b25BbmNob3IuY2gpOworICAgICAgICAgICAgICAgIHZhciBtYXBwZWRIZWFkTG9jYXRpb24gPSB0
aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zvcm1hdHRlZChvbGRTZWxlY3Rpb25I
ZWFkLmxpbmUsIG9sZFNlbGVjdGlvbkhlYWQuY2gpOworICAgICAgICAgICAgICAgIG5ld1NlbGVj
dGlvbkFuY2hvciA9IHtsaW5lOm1hcHBlZEFuY2hvckxvY2F0aW9uLmxpbmVOdW1iZXIsIGNoOm1h
cHBlZEFuY2hvckxvY2F0aW9uLmNvbHVtbk51bWJlcn07CisgICAgICAgICAgICAgICAgbmV3U2Vs
ZWN0aW9uSGVhZCA9IHtsaW5lOm1hcHBlZEhlYWRMb2NhdGlvbi5saW5lTnVtYmVyLCBjaDptYXBw
ZWRIZWFkTG9jYXRpb24uY29sdW1uTnVtYmVyfTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJvci51bmRvKCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fcG9zaXRpb25Ub1JldmVhbCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3
UmV2ZWFsUG9zaXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9Pcmln
aW5hbCh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsLmxpbmVOdW1iZXIsIHRoaXMuX3Bvc2l0aW9uVG9S
ZXZlYWwuY29sdW1uTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25U
b1JldmVhbCA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBvc2l0aW9uKG5ld1JldmVhbFBv
c2l0aW9uLmxpbmVOdW1iZXIsIG5ld1JldmVhbFBvc2l0aW9uLmNvbHVtbk51bWJlcik7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRSYW5nZVRvU2Vs
ZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFy
dCA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKHRoaXMuX3Rl
eHRSYW5nZVRvU2VsZWN0LnN0YXJ0TGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRD
b2x1bW4pOworICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5k
ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwodGhpcy5fdGV4
dFJhbmdlVG9TZWxlY3QuZW5kTGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QuZW5kQ29sdW1u
KTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QgPSBuZXcgV2Vi
SW5zcGVjdG9yLlRleHRSYW5nZShtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5saW5lTnVtYmVy
LCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5jb2x1bW5OdW1iZXIsIG1hcHBlZFJldmVhbFNl
bGVjdGlvbkVuZC5saW5lTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQuY29sdW1uTnVt
YmVyKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHRo
aXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KCFpc05hTih0aGlzLl9leGVjdXRpb25Db2x1bW5OdW1iZXIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbmV3RXhlY3V0aW9uTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAu
Zm9ybWF0dGVkVG9PcmlnaW5hbCh0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyLCB0aGlzLl9leGVj
dXRpb25Db2x1bW5OdW1iZXIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IHZhciBtYXBwZWRBbmNob3JMb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3Jt
YXR0ZWRUb09yaWdpbmFsKG9sZFNlbGVjdGlvbkFuY2hvci5saW5lLCBvbGRTZWxlY3Rpb25BbmNo
b3IuY2gpOworICAgICAgICAgICAgICAgIHZhciBtYXBwZWRIZWFkTG9jYXRpb24gPSB0aGlzLl9m
b3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbChvbGRTZWxlY3Rpb25IZWFkLmxp
bmUsIG9sZFNlbGVjdGlvbkhlYWQuY2gpOworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbkFu
Y2hvciA9IHtsaW5lOm1hcHBlZEFuY2hvckxvY2F0aW9uLmxpbmVOdW1iZXIsIGNoOm1hcHBlZEFu
Y2hvckxvY2F0aW9uLmNvbHVtbk51bWJlcn07CisgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9u
SGVhZCA9IHtsaW5lOm1hcHBlZEhlYWRMb2NhdGlvbi5saW5lTnVtYmVyLCBjaDptYXBwZWRIZWFk
TG9jYXRpb24uY29sdW1uTnVtYmVyfTsKKworICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdHRl
clNvdXJjZU1hcCA9IG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuX3Nj
cm9sbEludG9WaWV3Q2VudGVyZWQobmV3U2VsZWN0aW9uQW5jaG9yKTsKKyAgICAgICAgICAgIHRo
aXMuX2NvZGVNaXJyb3Iuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbkFuY2hvciwgbmV3U2VsZWN0
aW9uSGVhZCk7CisKKyAgICAgICAgICAgIGlmIChuZXdFeGVjdXRpb25Mb2NhdGlvbikgeworICAg
ICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9leGVjdXRpb25MaW5lSGFuZGxlOworICAgICAgICAg
ICAgICAgIHRoaXMuZXhlY3V0aW9uQ29sdW1uTnVtYmVyID0gbmV3RXhlY3V0aW9uTG9jYXRpb24u
Y29sdW1uTnVtYmVyOworICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uTGluZU51bWJlciA9
IG5ld0V4ZWN1dGlvbkxvY2F0aW9uLmxpbmVOdW1iZXI7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMTMxMjk5NTU+IEZpbmRCYW5uZXI6IE5l
dyBzZWFyY2hlcyBzaG91bGQgbm90IGxvc2Ugc2VhcmNoIHBvc2l0aW9uIChzdGFydCBmcm9tIGN1
cnJlbnQgc2VsZWN0aW9uL2NhcmV0KQorICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNlYXJj
aFF1ZXJ5KSB7CisgICAgICAgICAgICAgICAgdmFyIHNlYXJjaFF1ZXJ5ID0gdGhpcy5jdXJyZW50
U2VhcmNoUXVlcnk7CisgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hDbGVhcmVkKCk7CisgICAg
ICAgICAgICAgICAgLy8gU2V0IHRpbWVvdXQgc28gdGhhdCB0aGlzIGhhcHBlbnMgYWZ0ZXIgdGhl
IGN1cnJlbnQgQ29kZU1pcnJvciBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgLy8gVGhlIGVk
aXRvciBoYXMgdG8gdXBkYXRlIGZvciB0aGUgdmFsdWUgYW5kIHNlbGVjdGlvbiBjaGFuZ2VzLgor
ICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24ocXVlcnkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKHNlYXJjaFF1ZXJ5KTsKKyAgICAgICAgICAgICAg
ICB9LmJpbmQodGhpcyksIDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGhp
cy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLnRleHRFZGl0b3JVcGRhdGVkRm9y
bWF0dGluZyA9PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS50
ZXh0RWRpdG9yVXBkYXRlZEZvcm1hdHRpbmcodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICB0
aGlzLl9jb2RlTWlycm9yLm9wZXJhdGlvbihwcmV0dHlQcmludEFuZFVwZGF0ZUVkaXRvci5iaW5k
KHRoaXMpKTsKKyAgICB9LAorCiAgICAgLy8gUHJpdmF0ZQogCiAgICAgX2NvbnRlbnRDaGFuZ2Vk
OiBmdW5jdGlvbihjb2RlTWlycm9yLCBjaGFuZ2UpCkBAIC0xMjM1LDEwNiArMTQwNyw2IEBAIFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGxpbmVIZWln
aHQgPSBNYXRoLmNlaWwodGhpcy5fY29kZU1pcnJvci5kZWZhdWx0VGV4dEhlaWdodCgpKTsKICAg
ICAgICAgdmFyIG1hcmdpbiA9IE1hdGguZmxvb3IoKHNjcm9sbEluZm8uY2xpZW50SGVpZ2h0IC0g
bGluZUhlaWdodCkgLyAyKTsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zY3JvbGxJbnRvVmll
dyhwb3NpdGlvbiwgbWFyZ2luKTsKLSAgICB9LAotCi0gICAgX3ByZXR0eVByaW50OiBmdW5jdGlv
bihwcmV0dHkpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBwcmV0dHlQcmludEFuZFVwZGF0ZUVk
aXRvcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0ge2xpbmU6IDAsIGNo
OiAwfTsKLSAgICAgICAgICAgIGNvbnN0IGVuZCA9IHtsaW5lOiB0aGlzLl9jb2RlTWlycm9yLmxp
bmVDb3VudCgpIC0gMX07Ci0KLSAgICAgICAgICAgIHZhciBvbGRTZWxlY3Rpb25BbmNob3IgPSB0
aGlzLl9jb2RlTWlycm9yLmdldEN1cnNvcigiYW5jaG9yIik7Ci0gICAgICAgICAgICB2YXIgb2xk
U2VsZWN0aW9uSGVhZCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKCJoZWFkIik7Ci0gICAg
ICAgICAgICB2YXIgbmV3U2VsZWN0aW9uQW5jaG9yLCBuZXdTZWxlY3Rpb25IZWFkOwotICAgICAg
ICAgICAgdmFyIG5ld0V4ZWN1dGlvbkxvY2F0aW9uID0gbnVsbDsKLQotICAgICAgICAgICAgaWYg
KHByZXR0eSkgewotICAgICAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMDU5Mzk0OD4g
UHJvdmlkZSBhIHdheSB0byBjaGFuZ2UgdGhlIHRhYiB3aWR0aCBpbiB0aGUgV2ViIEluc3BlY3Rv
cgotICAgICAgICAgICAgICAgIGNvbnN0IGluZGVudFN0cmluZyA9ICIgICAgIjsKLSAgICAgICAg
ICAgICAgICB2YXIgb3JpZ2luYWxMaW5lRW5kaW5ncyA9IFtdOwotICAgICAgICAgICAgICAgIHZh
ciBmb3JtYXR0ZWRMaW5lRW5kaW5ncyA9IFtdOwotICAgICAgICAgICAgICAgIHZhciBtYXBwaW5n
ID0ge29yaWdpbmFsOiBbMF0sIGZvcm1hdHRlZDogWzBdfTsKLSAgICAgICAgICAgICAgICB2YXIg
YnVpbGRlciA9IG5ldyBGb3JtYXR0ZXJDb250ZW50QnVpbGRlcihtYXBwaW5nLCBvcmlnaW5hbExp
bmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywgMCwgMCwgaW5kZW50U3RyaW5nKTsKLSAg
ICAgICAgICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih0aGlzLl9jb2RlTWly
cm9yLCBidWlsZGVyKTsKLSAgICAgICAgICAgICAgICBmb3JtYXR0ZXIuZm9ybWF0KHN0YXJ0LCBl
bmQpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwID0gV2ViSW5z
cGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcC5mcm9tQnVpbGRlcihidWlsZGVyKTsKLQotICAgICAg
ICAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iuc2V0VmFsdWUoYnVpbGRlci5mb3JtYXR0ZWRDb250
ZW50KTsKLQotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhciBuZXdSZXZlYWxQb3NpdGlvbiA9IHRoaXMuX2Zvcm1hdHRl
clNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwubGlu
ZU51bWJlciwgdGhpcy5fcG9zaXRpb25Ub1JldmVhbC5jb2x1bW5OdW1iZXIpOwotICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9wb3NpdGlvblRvUmV2ZWFsID0gbmV3IFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlUG9zaXRpb24obmV3UmV2ZWFsUG9zaXRpb24ubGluZU51bWJlciwgbmV3UmV2ZWFsUG9z
aXRpb24uY29sdW1uTnVtYmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9y
aWdpbmFsVG9Gb3JtYXR0ZWQodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRMaW5lLCB0aGlz
Ll90ZXh0UmFuZ2VUb1NlbGVjdC5zdGFydENvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3Jp
Z2luYWxUb0Zvcm1hdHRlZCh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5lbmRMaW5lLCB0aGlzLl90
ZXh0UmFuZ2VUb1NlbGVjdC5lbmRDb2x1bW4pOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl90
ZXh0UmFuZ2VUb1NlbGVjdCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKG1hcHBlZFJldmVh
bFNlbGVjdGlvblN0YXJ0LmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0LmNv
bHVtbk51bWJlciwgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kLmxpbmVOdW1iZXIsIG1hcHBlZFJl
dmVhbFNlbGVjdGlvbkVuZC5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmICghaXNOYU4odGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcikpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIWlzTmFOKHRoaXMuX2V4ZWN1dGlvbkNv
bHVtbk51bWJlcikpOwotICAgICAgICAgICAgICAgICAgICBuZXdFeGVjdXRpb25Mb2NhdGlvbiA9
IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX2V4ZWN1
dGlvbkxpbmVOdW1iZXIsIHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJlcik7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIG1hcHBlZEFuY2hvckxvY2F0aW9uID0gdGhp
cy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQob2xkU2VsZWN0aW9uQW5j
aG9yLmxpbmUsIG9sZFNlbGVjdGlvbkFuY2hvci5jaCk7Ci0gICAgICAgICAgICAgICAgdmFyIG1h
cHBlZEhlYWRMb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9y
bWF0dGVkKG9sZFNlbGVjdGlvbkhlYWQubGluZSwgb2xkU2VsZWN0aW9uSGVhZC5jaCk7Ci0gICAg
ICAgICAgICAgICAgbmV3U2VsZWN0aW9uQW5jaG9yID0ge2xpbmU6bWFwcGVkQW5jaG9yTG9jYXRp
b24ubGluZU51bWJlciwgY2g6bWFwcGVkQW5jaG9yTG9jYXRpb24uY29sdW1uTnVtYmVyfTsKLSAg
ICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25IZWFkID0ge2xpbmU6bWFwcGVkSGVhZExvY2F0aW9u
LmxpbmVOdW1iZXIsIGNoOm1hcHBlZEhlYWRMb2NhdGlvbi5jb2x1bW5OdW1iZXJ9OwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnVuZG8oKTsK
LQotICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBuZXdSZXZlYWxQb3NpdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJj
ZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwubGluZU51bWJl
ciwgdGhpcy5fcG9zaXRpb25Ub1JldmVhbC5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9wb3NpdGlvblRvUmV2ZWFsID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
UG9zaXRpb24obmV3UmV2ZWFsUG9zaXRpb24ubGluZU51bWJlciwgbmV3UmV2ZWFsUG9zaXRpb24u
Y29sdW1uTnVtYmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1hcHBl
ZFJldmVhbFNlbGVjdGlvblN0YXJ0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRl
ZFRvT3JpZ2luYWwodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRMaW5lLCB0aGlzLl90ZXh0
UmFuZ2VUb1NlbGVjdC5zdGFydENvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtYXBw
ZWRSZXZlYWxTZWxlY3Rpb25FbmQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVk
VG9PcmlnaW5hbCh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5lbmRMaW5lLCB0aGlzLl90ZXh0UmFu
Z2VUb1NlbGVjdC5lbmRDb2x1bW4pOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0UmFu
Z2VUb1NlbGVjdCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKG1hcHBlZFJldmVhbFNlbGVj
dGlvblN0YXJ0LmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0LmNvbHVtbk51
bWJlciwgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kLmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNl
bGVjdGlvbkVuZC5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmICghaXNOYU4odGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcikpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIWlzTmFOKHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51
bWJlcikpOwotICAgICAgICAgICAgICAgICAgICBuZXdFeGVjdXRpb25Mb2NhdGlvbiA9IHRoaXMu
X2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKHRoaXMuX2V4ZWN1dGlvbkxp
bmVOdW1iZXIsIHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJlcik7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgdmFyIG1hcHBlZEFuY2hvckxvY2F0aW9uID0gdGhpcy5fZm9y
bWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwob2xkU2VsZWN0aW9uQW5jaG9yLmxp
bmUsIG9sZFNlbGVjdGlvbkFuY2hvci5jaCk7Ci0gICAgICAgICAgICAgICAgdmFyIG1hcHBlZEhl
YWRMb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFs
KG9sZFNlbGVjdGlvbkhlYWQubGluZSwgb2xkU2VsZWN0aW9uSGVhZC5jaCk7Ci0gICAgICAgICAg
ICAgICAgbmV3U2VsZWN0aW9uQW5jaG9yID0ge2xpbmU6bWFwcGVkQW5jaG9yTG9jYXRpb24ubGlu
ZU51bWJlciwgY2g6bWFwcGVkQW5jaG9yTG9jYXRpb24uY29sdW1uTnVtYmVyfTsKLSAgICAgICAg
ICAgICAgICBuZXdTZWxlY3Rpb25IZWFkID0ge2xpbmU6bWFwcGVkSGVhZExvY2F0aW9uLmxpbmVO
dW1iZXIsIGNoOm1hcHBlZEhlYWRMb2NhdGlvbi5jb2x1bW5OdW1iZXJ9OwotCi0gICAgICAgICAg
ICAgICAgdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwID0gbnVsbDsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdGhpcy5fc2Nyb2xsSW50b1ZpZXdDZW50ZXJlZChuZXdTZWxlY3Rpb25BbmNo
b3IpOwotICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5zZXRTZWxlY3Rpb24obmV3U2VsZWN0
aW9uQW5jaG9yLCBuZXdTZWxlY3Rpb25IZWFkKTsKLQotICAgICAgICAgICAgaWYgKG5ld0V4ZWN1
dGlvbkxvY2F0aW9uKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2V4ZWN1dGlvbkxp
bmVIYW5kbGU7Ci0gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRpb25Db2x1bW5OdW1iZXIgPSBu
ZXdFeGVjdXRpb25Mb2NhdGlvbi5jb2x1bW5OdW1iZXI7Ci0gICAgICAgICAgICAgICAgdGhpcy5l
eGVjdXRpb25MaW5lTnVtYmVyID0gbmV3RXhlY3V0aW9uTG9jYXRpb24ubGluZU51bWJlcjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8xMzEy
OTk1NT4gRmluZEJhbm5lcjogTmV3IHNlYXJjaGVzIHNob3VsZCBub3QgbG9zZSBzZWFyY2ggcG9z
aXRpb24gKHN0YXJ0IGZyb20gY3VycmVudCBzZWxlY3Rpb24vY2FyZXQpCi0gICAgICAgICAgICBp
ZiAodGhpcy5jdXJyZW50U2VhcmNoUXVlcnkpIHsKLSAgICAgICAgICAgICAgICB2YXIgc2VhcmNo
UXVlcnkgPSB0aGlzLmN1cnJlbnRTZWFyY2hRdWVyeTsKLSAgICAgICAgICAgICAgICB0aGlzLnNl
YXJjaENsZWFyZWQoKTsKLSAgICAgICAgICAgICAgICAvLyBTZXQgdGltZW91dCBzbyB0aGF0IHRo
aXMgaGFwcGVucyBhZnRlciB0aGUgY3VycmVudCBDb2RlTWlycm9yIG9wZXJhdGlvbi4KLSAgICAg
ICAgICAgICAgICAvLyBUaGUgZWRpdG9yIGhhcyB0byB1cGRhdGUgZm9yIHRoZSB2YWx1ZSBhbmQg
c2VsZWN0aW9uIGNoYW5nZXMuCi0gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbihx
dWVyeSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goc2VhcmNoUXVl
cnkpOwotICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMCk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhpcy5fZGVsZWdhdGUu
dGV4dEVkaXRvclVwZGF0ZWRGb3JtYXR0aW5nID09PSAiZnVuY3Rpb24iKQotICAgICAgICAgICAg
ICAgIHRoaXMuX2RlbGVnYXRlLnRleHRFZGl0b3JVcGRhdGVkRm9ybWF0dGluZyh0aGlzKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub3BlcmF0aW9uKHByZXR0eVByaW50
QW5kVXBkYXRlRWRpdG9yLmJpbmQodGhpcykpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzCShyZXZpc2lvbiAxNzMxMzEpCisrKyBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250ZW50
Vmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTUgQEAgV2ViSW5zcGVjdG9yLlRl
eHRSZXNvdXJjZUNvbnRlbnRWaWV3ID0gZgogICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2
aWdhdGlvbkl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLkFjdGl2YXRlQnV0dG9uTmF2aWdhdGlvbkl0
ZW0oInByZXR0eS1wcmludCIsIHRvb2xUaXAsIGFjdGl2YXRlZFRvb2xUaXAsIGN1cmxleUJyYWNl
c0ltYWdlLnNyYywgY3VybGV5QnJhY2VzSW1hZ2Uud2lkdGgsIGN1cmxleUJyYWNlc0ltYWdlLmhl
aWdodCk7CiAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2Vk
LCB0aGlzLl90b2dnbGVQcmV0dHlQcmludCwgdGhpcyk7CiAgICAgdGhpcy5fcHJldHR5UHJpbnRC
dXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gZmFsc2U7IC8vIEVuYWJsZWQgd2hlbiB0aGUg
dGV4dCBlZGl0b3IgaXMgcG9wdWxhdGVkIHdpdGggY29udGVudC4KKworICAgIHZhciBzaG93VHlw
ZXNJbWFnZVNpemUgPSBXZWJJbnNwZWN0b3IuUGxhdGZvcm0uaXNMZWdhY3lNYWNPUyA/IDE1IDog
MTY7CisgICAgdmFyIHRvb2xUaXBUeXBlcyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyB0
eXBlIGluZm9ybWF0aW9uIik7CisgICAgdmFyIGFjdGl2YXRlZFRvb2xUaXBUeXBlcyA9IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiSGlkZSB0eXBlIGluZm9ybWF0aW9uIik7CisgICAgdGhpcy5fc2hv
d1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLkFjdGl2YXRlQnV0
dG9uTmF2aWdhdGlvbkl0ZW0oInNob3ctdHlwZXMiLCB0b29sVGlwVHlwZXMsIGFjdGl2YXRlZFRv
b2xUaXBUeXBlcywgIkltYWdlcy9OYXZpZ2F0aW9uSXRlbVR5cGVzLnN2ZyIsIHNob3dUeXBlc0lt
YWdlU2l6ZSwgc2hvd1R5cGVzSW1hZ2VTaXplKTsKKyAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25O
YXZpZ2F0aW9uSXRlbS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0
aW9uSXRlbS5FdmVudC5DbGlja2VkLCB0aGlzLl90b2dnbGVUeXBlQW5ub3RhdGlvbnMsIHRoaXMp
OworICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSBmYWxz
ZTsKKworICAgIFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRp
bmcuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU2V0dGluZy5FdmVudC5DaGFuZ2VkLCB0
aGlzLl9zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmdDaGFuZ2VkLCB0aGlzKTsK
IH07CiAKIFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5TdHlsZUNsYXNzTmFt
ZSA9ICJ0ZXh0IjsKQEAgLTYyLDcgKzcxLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNv
bnRlbnRWaWV3LnBybwogCiAgICAgZ2V0IG5hdmlnYXRpb25JdGVtcygpCiAgICAgewotICAgICAg
ICByZXR1cm4gW3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW1dOworICAgICAg
ICByZXR1cm4gW3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0sIHRoaXMuX3No
b3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtXTsKICAgICB9LAogCiAgICAgZ2V0IG1hbmFnZXNP
d25Jc3N1ZXMoKQpAQCAtMjAwLDYgKzIwOSw4IEBAIFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VD
b250ZW50Vmlldy5wcm8KICAgICBfY29udGVudERpZFBvcHVsYXRlOiBmdW5jdGlvbihldmVudCkK
ICAgICB7CiAgICAgICAgIHRoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5h
YmxlZCA9IHRoaXMuX3RleHRFZGl0b3IuY2FuQmVGb3JtYXR0ZWQoKTsKKyAgICAgICAgdGhpcy5f
c2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IHRoaXMuX3RleHRFZGl0b3Iu
Y2FuU2hvd1R5cGVBbm5vdGF0aW9ucygpOworICAgICAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25O
YXZpZ2F0aW9uSXRlbS5hY3RpdmF0ZWQgPSBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBl
SW5mb3JtYXRpb25TZXR0aW5nLnZhbHVlOwogICAgIH0sCiAKICAgICBfdG9nZ2xlUHJldHR5UHJp
bnQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtMjA4LDYgKzIxOSwxNiBAQCBXZWJJbnNwZWN0b3IuVGV4
dFJlc291cmNlQ29udGVudFZpZXcucHJvCiAgICAgICAgIHRoaXMuX3RleHRFZGl0b3IuZm9ybWF0
dGVkID0gYWN0aXZhdGVkOwogICAgIH0sCiAKKyAgICBfdG9nZ2xlVHlwZUFubm90YXRpb25zOiBm
dW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IudG9nZ2xlVHlw
ZUFubm90YXRpb25zKCk7CisgICAgfSwKKworICAgIF9zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1h
dGlvblNldHRpbmdDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMu
X3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmFjdGl2YXRlZCA9IFdlYkluc3BlY3Rvci5z
aG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWU7CisgICAgfSwKKwogICAg
IF90ZXh0RWRpdG9yRm9ybWF0dGluZ0RpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewog
ICAgICAgICB0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLmFjdGl2YXRlZCA9
IHRoaXMuX3RleHRFZGl0b3IuZm9ybWF0dGVkOwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVQcm9wZXJ0
aWVzU2VjdGlvbi5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1R5cGVQcm9wZXJ0aWVzU2VjdGlvbi5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydGll
c1NlY3Rpb24gPSBmdW5jdGlvbih0eXBlcywgdGl0bGUsIHN1YnRpdGxlKQoreworICAgIHRoaXMu
ZW1wdHlQbGFjZWhvbGRlciA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTm8gUHJvcGVydGllcyIp
OworICAgIHRoaXMudHlwZXMgPSB0eXBlczsKKworICAgIFdlYkluc3BlY3Rvci5Qcm9wZXJ0aWVz
U2VjdGlvbi5jYWxsKHRoaXMsIHRpdGxlLCBzdWJ0aXRsZSk7Cit9OworCitXZWJJbnNwZWN0b3Iu
VHlwZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2Vi
SW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbiwKKyAgICBfX3Byb3RvX186IFdlYkluc3Bl
Y3Rvci5Qcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUsCisKKyAgICBvbnBvcHVsYXRlOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5yZW1vdmVD
aGlsZHJlbigpOworCisgICAgICAgIHZhciBwcmltaXRpdmVUeXBlTmFtZXMgPSB0aGlzLnR5cGVz
Lmdsb2JhbFByaW1pdGl2ZVR5cGVOYW1lcyB8fCB0aGlzLnR5cGVzLmxvY2FsUHJpbWl0aXZlVHlw
ZU5hbWVzOworICAgICAgICB2YXIgc3RydWN0dXJlcyA9IHRoaXMudHlwZXMuZ2xvYmFsU3RydWN0
dXJlcyB8fCB0aGlzLnR5cGVzLmxvY2FsU3RydWN0dXJlczsKKyAgICAgICAgdmFyIHByb3BlcnRp
ZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgc3RydWN0IG9mIHN0cnVjdHVyZXMpIHsKKyAgICAg
ICAgICAgIHByb3BlcnRpZXMucHVzaCh7CisgICAgICAgICAgICAgICAgbmFtZTogc3RydWN0LmNv
bnN0cnVjdG9yTmFtZSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdAorICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgcHJpbWl0aXZlTmFtZSBvZiBw
cmltaXRpdmVUeXBlTmFtZXMpIHsKKyAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh7CisgICAg
ICAgICAgICAgICAgbmFtZTogcHJpbWl0aXZlTmFtZSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmU6IG51bGwKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcHJvcGVydGll
cy5zb3J0KFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24uUHJvcGVydHlDb21wYXJh
dG9yKTsKKyAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgb2YgcHJvcGVydGllcykKKyAgICAgICAg
ICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0
b3IuVHlwZVByb3BlcnR5VHJlZUVsZW1lbnQocHJvcGVydHkpKTsKKworICAgICAgICBpZiAoIXRo
aXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmNoaWxkcmVuLmxlbmd0aCkgeworICAgICAgICAgICAg
dmFyIHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICB0
aXRsZS5jbGFzc05hbWUgPSAiaW5mbyI7CisgICAgICAgICAgICB0aXRsZS50ZXh0Q29udGVudCA9
IHRoaXMuZW1wdHlQbGFjZWhvbGRlcjsKKyAgICAgICAgICAgIHZhciBpbmZvRWxlbWVudCA9IG5l
dyBUcmVlRWxlbWVudCh0aXRsZSwgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5wcm9w
ZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQoaW5mb0VsZW1lbnQpOworICAgICAgICB9CisK
KyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNlY3Rp
b24uRXZlbnQuVmlzaWJsZUNvbnRlbnREaWRDaGFuZ2UpOworCisgICAgICAgIGlmIChwcm9wZXJ0
aWVzLmxlbmd0aCA9PT0gMSkKKyAgICAgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5l
LmNoaWxkcmVuWzBdLmV4cGFuZFJlY3Vyc2l2ZWx5KCk7CisgICAgfQorfTsKKworLy8gVGhpcyBp
cyBtb3N0bHkgaWRlbnRpY2FsIHRvIE9iamVjdFByb3BlcnRpZXNTZWN0aW9uLmNvbXBhcmVQcm9w
ZXJ0aWVzLgorLy8gQnV0IHRoaXMgY2hlY2tzIGZvciBlcXVhbGl0eSBiZWNhdXNlIHdlIGNhbiBo
YXZlIHR3byBvYmplY3RzIG5hbWVkIHRoZSBzYW1lIHRoaW5nLgorV2ViSW5zcGVjdG9yLlR5cGVQ
cm9wZXJ0aWVzU2VjdGlvbi5Qcm9wZXJ0eUNvbXBhcmF0b3IgPSBmdW5jdGlvbihwcm9wZXJ0eUEs
IHByb3BlcnR5QikKK3sKKyAgICB2YXIgYSA9IHByb3BlcnR5QS5uYW1lOworICAgIHZhciBiID0g
cHJvcGVydHlCLm5hbWU7CisgICAgaWYgKGEuaW5kZXhPZigiX19wcm90b19fIikgIT09IC0xKQor
ICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoYi5pbmRleE9mKCJfX3Byb3RvX18iKSAhPT0gLTEp
CisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoYSA9PT0gYikKKyAgICAgICAgcmV0dXJuIDE7
CisKKyAgICB2YXIgZGlmZiA9IDA7CisgICAgdmFyIGNodW5rID0gL15cZCt8XlxEKy87CisgICAg
dmFyIGNodW5rYSwgY2h1bmtiLCBhbnVtLCBibnVtOworICAgIHdoaWxlIChkaWZmID09PSAwKSB7
CisgICAgICAgIGlmICghYSAmJiBiKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBp
ZiAoIWIgJiYgYSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjaHVua2EgPSBhLm1h
dGNoKGNodW5rKVswXTsKKyAgICAgICAgY2h1bmtiID0gYi5tYXRjaChjaHVuaylbMF07CisgICAg
ICAgIGFudW0gPSAhaXNOYU4oY2h1bmthKTsKKyAgICAgICAgYm51bSA9ICFpc05hTihjaHVua2Ip
OworICAgICAgICBpZiAoYW51bSAmJiAhYm51bSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAg
ICAgICAgaWYgKGJudW0gJiYgIWFudW0pCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
aWYgKGFudW0gJiYgYm51bSkgeworICAgICAgICAgICAgZGlmZiA9IGNodW5rYSAtIGNodW5rYjsK
KyAgICAgICAgICAgIGlmIChkaWZmID09PSAwICYmIGNodW5rYS5sZW5ndGggIT09IGNodW5rYi5s
ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIStjaHVua2EgJiYgIStjaHVua2IpIC8vIGNo
dW5rcyBhcmUgc3RyaW5ncyBvZiBhbGwgMHMgKHNwZWNpYWwgY2FzZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNodW5rYS5sZW5ndGggLSBjaHVua2IubGVuZ3RoOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5rYi5sZW5ndGggLSBjaHVu
a2EubGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGNodW5rYSAhPT0g
Y2h1bmtiKQorICAgICAgICAgICAgcmV0dXJuIChjaHVua2EgPCBjaHVua2IpID8gLTEgOiAxOwor
ICAgICAgICBhID0gYS5zdWJzdHJpbmcoY2h1bmthLmxlbmd0aCk7CisgICAgICAgIGIgPSBiLnN1
YnN0cmluZyhjaHVua2IubGVuZ3RoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlmZjsKK307CisK
K1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHByb3BlcnR5
KQoreworICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsKKworICAgIHRoaXMubmFtZUVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgdGhpcy5uYW1lRWxlbWVu
dC5jbGFzc05hbWUgPSAibmFtZSI7CisgICAgdGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCA9
IHRoaXMucHJvcGVydHkubmFtZTsKKworICAgIFRyZWVFbGVtZW50LmNhbGwodGhpcywgdGhpcy5u
YW1lRWxlbWVudCwgbnVsbCwgZmFsc2UpOworCisgICAgdGhpcy50b2dnbGVPbkNsaWNrID0gdHJ1
ZTsKKyAgICB0aGlzLmhhc0NoaWxkcmVuID0gISF0aGlzLnByb3BlcnR5LnN0cnVjdHVyZTsKK307
CisKK1dlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7Cisg
ICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydHlUcmVlRWxlbWVudCwKKyAg
ICBfX3Byb3RvX186IFRyZWVFbGVtZW50LnByb3RvdHlwZSwKKworICAgIG9ucG9wdWxhdGU6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTsKKworICAgICAg
ICB2YXIgcHJvcGVydGllcyA9IFtdOworICAgICAgICBmb3IgKHZhciBmaWVsZE5hbWUgb2YgdGhp
cy5wcm9wZXJ0eS5zdHJ1Y3R1cmUuZmllbGRzKSB7CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1
c2goeworICAgICAgICAgICAgICAgIG5hbWU6IGZpZWxkTmFtZSwKKyAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmU6IG51bGwKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcHJv
cGVydGllcy5zb3J0KFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24uUHJvcGVydHlD
b21wYXJhdG9yKTsKKworICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUucHJvdG90
eXBlU3RydWN0dXJlKSB7CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goeworICAgICAgICAg
ICAgICAgIG5hbWU6IHRoaXMucHJvcGVydHkuc3RydWN0dXJlLnByb3RvdHlwZVN0cnVjdHVyZS5j
b25zdHJ1Y3Rvck5hbWUgKyAiICgiICsgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQcm90b3R5cGUi
KSArICIpIiwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHRoaXMucHJvcGVydHkuc3RydWN0
dXJlLnByb3RvdHlwZVN0cnVjdHVyZQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKHZhciBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKQorICAgICAgICAgICAgdGhpcy5h
cHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50KHByb3Bl
cnR5KSk7CisgICAgfQorfTsKKwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5jc3MJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9r
ZW5WaWV3LmNzcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
LnR5cGUtdG9rZW4geworICAgIGRpc3BsYXk6IGlubGluZTsKKyAgICBib3JkZXItcmFkaXVzOiAx
MHB4OworICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CisgICAgcGFkZGluZy1sZWZ0OiA4
cHg7CisgICAgcGFkZGluZy1yaWdodDogOHB4OworICAgIHBhZGRpbmctdG9wOiAxcHg7CisgICAg
Y29sb3I6IHdoaXRlOworICAgIGZvbnQtc2l6ZTogMTBweDsKKyAgICBvcGFjaXR5OiAwLjg1Owor
fQorCisudHlwZS10b2tlbi1sZWZ0LXNwYWNpbmcgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7Cit9
CisKKy50eXBlLXRva2VuLXJpZ2h0LXNwYWNpbmcgeworICAgIG1hcmdpbi1yaWdodDogNXB4Owor
fQorCisudHlwZS10b2tlbi1mdW5jdGlvbiwgLnR5cGUtdG9rZW4tYm9vbGVhbiB7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgNTksIDE5MSk7Cit9CisKKy50eXBlLXRva2VuLW51bWJl
ciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDU5LCAxMTIsIDIyNik7Cit9CisKKy50eXBl
LXRva2VuLXN0cmluZyB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIyMywgNTMsIDQ2KTsK
K30KKworLnR5cGUtdG9rZW4tZGVmYXVsdCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEx
OCwgMTc0LCAyOSk7Cit9CisKKy50eXBlLXRva2VuLWVtcHR5IHsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiByZ2IoMTI2LCAxMjYsIDEyNik7Cit9CisKKy50eXBlLXRva2VuLW1hbnkgeworICAgIGJh
Y2tncm91bmQtY29sb3I6IHJnYigyMzcsIDEzMiwgMCk7Cit9CkluZGV4OiBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZp
ZXcuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9UeXBlVG9rZW5WaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcgPSBmdW5jdGlvbih0b2tl
bkFubm90YXRvciwgc2hvdWxkSGF2ZVJpZ2h0TWFyZ2luLCBzaG91bGRIYXZlTGVmdE1hcmdpbiwg
dGl0bGVUeXBlLCBmdW5jdGlvbk9yVmFyaWFibGVOYW1lKQoreworICAgIGNvbnNvbGUuYXNzZXJ0
KHRpdGxlVHlwZSA9PT0gV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlZhcmlh
YmxlICB8fCB0aXRsZVR5cGUgPT09IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlw
ZS5SZXR1cm5TdGF0ZW1lbnQpOworCisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMp
OworCisgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAg
c3Bhbi5jbGFzc0xpc3QuYWRkKCJ0eXBlLXRva2VuIik7CisgICAgaWYgKHNob3VsZEhhdmVSaWdo
dE1hcmdpbikKKyAgICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKCJ0eXBlLXRva2VuLXJpZ2h0LXNw
YWNpbmciKTsKKyAgICBpZiAoc2hvdWxkSGF2ZUxlZnRNYXJnaW4pCisgICAgICAgIHNwYW4uY2xh
c3NMaXN0LmFkZCgidHlwZS10b2tlbi1sZWZ0LXNwYWNpbmciKTsKKworICAgIHRoaXMuZWxlbWVu
dCA9IHNwYW47CisgICAgdGhpcy5fdG9rZW5Bbm5vdGF0b3IgPSB0b2tlbkFubm90YXRvcjsKKyAg
ICB0aGlzLl90eXBlcyA9IG51bGw7CisgICAgdGhpcy5fY29sb3JDbGFzcyA9IG51bGw7CisKKyAg
ICB0aGlzLl9wb3BvdmVyVGl0bGUgPSBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy50aXRsZUZv
clBvcG92ZXIodGl0bGVUeXBlLCBmdW5jdGlvbk9yVmFyaWFibGVOYW1lKTsKKworICAgIHRoaXMu
X3NldFVwTW91c2VvdmVySGFuZGxlcnMoKTsKK307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5W
aWV3LnRpdGxlRm9yUG9wb3ZlciA9IGZ1bmN0aW9uKHRpdGxlVHlwZSwgZnVuY3Rpb25PclZhcmlh
YmxlTmFtZSkKK3sKKyAgICB2YXIgdGl0bGVTdHJpbmcgPSBudWxsOworICAgIGlmICh0aXRsZVR5
cGUgPT09IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5WYXJpYWJsZSkKKyAg
ICAgICAgdGl0bGVTdHJpbmcgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlR5cGUgaW5mb3JtYXRp
b24gZm9yIHZhcmlhYmxlOiAlcyIpLmZvcm1hdChmdW5jdGlvbk9yVmFyaWFibGVOYW1lKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgaWYgKGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpCisgICAgICAgICAg
ICB0aXRsZVN0cmluZyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmV0dXJuIHR5cGUgZm9yIGZ1
bmN0aW9uOiAlcyIpLmZvcm1hdChmdW5jdGlvbk9yVmFyaWFibGVOYW1lKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdGl0bGVTdHJpbmcgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJldHVy
biB0eXBlIGZvciBhbm9ueW1vdXMgZnVuY3Rpb24iKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGl0
bGVTdHJpbmc7Cit9OworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUgPSB7
CisgICAgVmFyaWFibGU6ICJ0aXRsZS10eXBlLXZhcmlhYmxlIiwKKyAgICBSZXR1cm5TdGF0ZW1l
bnQ6ICJ0aXRsZS10eXBlLXJldHVybi1zdGF0ZW1lbnQiCit9OworCisvLyBUaGVzZSB0eXBlIHN0
cmluZ3Mgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIHR5cGUgaW5mb3JtYXRpb24gaW4gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAorV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZp
ZXcuQ29sb3JDbGFzc0ZvclR5cGUgPSB7CisgICAgIlN0cmluZyI6ICJ0eXBlLXRva2VuLXN0cmlu
ZyIsCisgICAgIkZ1bmN0aW9uIjogInR5cGUtdG9rZW4tZnVuY3Rpb24iLAorICAgICJOdW1iZXIi
OiAidHlwZS10b2tlbi1udW1iZXIiLAorICAgICJJbnRlZ2VyIjogInR5cGUtdG9rZW4tbnVtYmVy
IiwKKyAgICAiVW5kZWZpbmVkIjogInR5cGUtdG9rZW4tZW1wdHkiLAorICAgICJOdWxsIjogInR5
cGUtdG9rZW4tZW1wdHkiLAorICAgICIoPykiOiAidHlwZS10b2tlbi1lbXB0eSIsCisgICAgIkJv
b2xlYW4iOiAidHlwZS10b2tlbi1ib29sZWFuIiwKKyAgICAiKG1hbnkpIjogInR5cGUtdG9rZW4t
bWFueSIKK307CisKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkRlbGF5SG92ZXJUaW1lID0g
MzUwOworCitXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5wcm90b3R5cGUgPSB7CisgICAgY29u
c3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LAorICAgIF9fcHJvdG9fXzogV2Vi
SW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisKKyAgICAvLyBQdWJsaWMKKworICAgIHVwZGF0
ZTogZnVuY3Rpb24odHlwZXMpCisgICAgeworICAgICAgICB2YXIgdGl0bGUgPSB0eXBlcy5kaXNw
bGF5VHlwZU5hbWU7CisgICAgICAgIHRoaXMuZWxlbWVudC50ZXh0Q29udGVudCA9IHRpdGxlOwor
ICAgICAgICB0aGlzLl90eXBlcyA9IHR5cGVzOworICAgICAgICB2YXIgaGFzaFN0cmluZyA9IHRp
dGxlW3RpdGxlLmxlbmd0aCAtIDFdID09PSAiPyIgPyB0aXRsZS5zbGljZSgwLCB0aXRsZS5sZW5n
dGggLSAxKSA6IHRpdGxlOworCisgICAgICAgIGlmICh0aGlzLl9jb2xvckNsYXNzKQorICAgICAg
ICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fY29sb3JDbGFzcyk7CisK
KyAgICAgICAgdGhpcy5fY29sb3JDbGFzcyA9IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNv
bG9yQ2xhc3NGb3JUeXBlW2hhc2hTdHJpbmddIHx8ICJ0eXBlLXRva2VuLWRlZmF1bHQiOworICAg
ICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLl9jb2xvckNsYXNzKTsKKyAgICB9
LAorCisgICAgLy8gUHJpdmF0ZQorCisgICAgX3NldFVwTW91c2VvdmVySGFuZGxlcnM6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB0aW1lb3V0SUQgPSBudWxsOworCisgICAgICAgIHRo
aXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIHNob3dQb3BvdmVyQWZ0ZXJEZWxheSgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdGltZW91dElEID0gbnVsbDsKKworICAgICAgICAgICAgICAgIHZh
ciBkb21SZWN0ID0gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAg
ICAgICAgICAgIHZhciBib3VuZHMgPSBuZXcgV2ViSW5zcGVjdG9yLlJlY3QoZG9tUmVjdC5sZWZ0
LCBkb21SZWN0LnRvcCwgZG9tUmVjdC53aWR0aCwgZG9tUmVjdC5oZWlnaHQpOworICAgICAgICAg
ICAgICAgIHRoaXMuX3Rva2VuQW5ub3RhdG9yLnNvdXJjZUNvZGVUZXh0RWRpdG9yLnNob3dQb3Bv
dmVyRm9yVHlwZXModGhpcy5fdHlwZXMsIGJvdW5kcywgdGhpcy5fcG9wb3ZlclRpdGxlKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFNob3dQb3BvdmVyKCkp
CisgICAgICAgICAgICAgICAgdGltZW91dElEID0gc2V0VGltZW91dChzaG93UG9wb3ZlckFmdGVy
RGVsYXkuYmluZCh0aGlzKSwgV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuRGVsYXlIb3ZlclRp
bWUpOworICAgICAgICB9LmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMuZWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCJtb3VzZW91dCIsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKHRp
bWVvdXRJRCkKKyAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTsKKyAgICAg
ICAgfS5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgX3Nob3VsZFNob3dQb3BvdmVyOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICBpZiAoKHRoaXMuX3R5cGVzLmdsb2JhbFByaW1pdGl2ZVR5
cGVOYW1lcyAmJiB0aGlzLl90eXBlcy5nbG9iYWxQcmltaXRpdmVUeXBlTmFtZXMubGVuZ3RoID4g
MSkgfHwgKHRoaXMuX3R5cGVzLmxvY2FsUHJpbWl0aXZlVHlwZU5hbWVzICYmIHRoaXMuX3R5cGVz
LmxvY2FsUHJpbWl0aXZlVHlwZU5hbWVzLmxlbmd0aCA+IDEpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAgICAgaWYgKCh0aGlzLl90eXBlcy5nbG9iYWxTdHJ1Y3R1cmVzICYmIHRo
aXMuX3R5cGVzLmdsb2JhbFN0cnVjdHVyZXMubGVuZ3RoKSB8fCAodGhpcy5fdHlwZXMubG9jYWxT
dHJ1Y3R1cmVzICYmIHRoaXMuX3R5cGVzLmxvY2FsU3RydWN0dXJlcy5sZW5ndGgpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307Cg==
</data>
<flag name="review"
          id="262135"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>