<?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>191557</bug_id>
          
          <creation_ts>2018-11-12 12:50:09 -0800</creation_ts>
          <short_desc>Extend commits table to contain testability warning information.</short_desc>
          <delta_ts>2019-01-18 20:33:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>dewei_zhu</reporter>
          <assigned_to>dewei_zhu</assigned_to>
          <cc>dewei_zhu</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1477672</commentid>
    <comment_count>0</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2018-11-12 12:50:09 -0800</bug_when>
    <thetext>Perf dashboard should show testability warning when scheduling an A/B task.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477707</commentid>
    <comment_count>1</comment_count>
      <attachid>354587</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-11-12 13:34:34 -0800</bug_when>
    <thetext>Created attachment 354587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477926</commentid>
    <comment_count>2</comment_count>
      <attachid>354587</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-11-12 23:32:53 -0800</bug_when>
    <thetext>Comment on attachment 354587
Patch

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

&gt; Websites/perf.webkit.org/init-database.sql:104
&gt; +    commit_testability_warning text DEFAULT NULL,

text is a heavy handed approach. varchar(256) should do it.

&gt; Websites/perf.webkit.org/public/api/update-commit-testability.php:23
&gt; +        if (!array_key_exists(&apos;testabilityWarning&apos;, $commit_info))
&gt; +            exit_with_error(&apos;MissingTestabilityWarning&apos;, array(&apos;commit&apos; =&gt; $commit_info));

Rather than adding a new API, why don&apos;t we just update /api/report-commits?

&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:193
&gt; +        this._renderRepositoryPanesLazily.evaluate(triggerable, error, this._selectedPlatform,this._repositoryGroupByConfiguration,

Nit: Need a space after &quot;,&quot;.

&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:305
&gt; +

What&apos;s up with the insertion of a new line here?

&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:310
&gt; +        const currentComparison = this._commitSetMap[&apos;Comparison&apos;];

Is this some kind of a bug fix? If so, can we add a test?
At minimum, please add a description as to what why we&apos;re changing this function.

&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:312
&gt; +        const sameBaselineConfig = currentBaseline == newBaseline || (currentBaseline &amp;&amp; newBaseline &amp;&amp; currentBaseline.equals(newBaseline));
&gt; +        const sameComparisionConfig = currentComparison == newComparison || (currentComparison &amp;&amp; newComparison &amp;&amp; currentComparison.equals(newComparison));

Rather than repeating the same logic twice, why don&apos;t we create a lambda?
e.g. areCommitSetsEqual = (a, b) = a == b || (a &amp;&amp; a.equals(b));

&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:352
&gt; +            this._fetchCommitByRevision(repository, revision);

We shouldn&apos;t be fetching revisions as a side effect of rendering them.
r- because of this. It should be done when a commit set is set or when the user starts mutating them.
Otherwise, we&apos;d delay fetching of commit sets by up to 16ms while we wait for requestAnimationFrame.
In general, render() functions shouldn&apos;t have side-effects.

&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:364
&gt; +        if (!this._commitByRepositoryAndRevision.has(repository))
&gt; +            this._commitByRepositoryAndRevision.set(repository, new Map);

This kind of cache should really exist as a static method on CommitLog instead.

&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:370
&gt; +        CommitLog.fetchForSingleRevision(repository, revision).then((commits) =&gt; {

For example, fetchForSingleRevision could have such a cache internally, or we can wrap it in a helper function.

&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:495
&gt; +            !commitsWithTestabilityWarning.length ? [] : element(&apos;tbody&apos;, {id: &apos;testability-warning-table&apos;}, commitsWithTestabilityWarning.map((commit) =&gt;
&gt; +                element(&apos;tr&apos;, element(&apos;td&apos;, {colspan: 2}, `${commit.repository().name()} - ${commit.label()}: ${commit.testabilityWarning()}`))))];

This code is way too much to inline like this.
Why don&apos;t we add a new method which loops over repositories and generates this tbody instead?

&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:528
&gt; -        const input = element(&apos;input&apos;, {value: revision, oninput: () =&gt; {
&gt; +        const input = element(&apos;input&apos;, {value: revision, onchange: () =&gt; {

Why is this change made?
change event wouldn&apos;t fire until the input element loses focus. That seems like a regression to me. 
Again, at minimum, this needs a change log description.

&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:722
&gt; +            .revision-table #testability-warning-table,
&gt; +            .revision-table #testabilty-warning-table tr,
&gt; +            .revision-table #testability-warning-table td {

Why do these selectors need .revision-table? We don&apos;t use testability-warning-table anywhere else.
Also, it&apos;s super weird to call a tbody testability-warning-*table*.
Furthermore, none of the CSS properties specified here are needed for the tbody itself.

&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:725
&gt; +                font-weight: inherit;

Why do we need this?

&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:727
&gt; +                border: 0px;
&gt; +                padding: 0px;

Or these?

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:142
&gt; +    _constructTestabilityWarningTable(commitSetMap)

This function doesn&apos;t return a table, it returns tbody. It should probably called like _constructTestabilityWarningRows.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:149
&gt; +            commitSet.commits().forEach(async (commit) =&gt; await CommitLog.fetchForSingleRevision(commit.repository(), commit.revision()));

Again, constructing a view of something shouldn&apos;t randomly fetch things.
We need to be doing this right when we get the commit set.
r- because of this.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:151
&gt; +            hasCommitWithWarning |= !!commitSet.commitsWithTestabilityWarnings();
&gt; +        }

Once we&apos;ve moved the above line out of here, we can do:
const hasCommitWithWarning = commitSets.some(() =&gt; !!commitSet.commitsWithTestabilityWarnings());

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:155
&gt; +
&gt; +

Nit: Two blank lines.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:159
&gt; +                element(&apos;tr&apos;, {class: &apos;testability-warning&apos;}, `${commit.repository().name()} - ${commit.label()}: ${commit.testabilityWarning()}`));

Looks like this code to generate a human readable label is duplicated here and custom-analysis-task-configurator.js
Why don&apos;t we add a helper function to CommitLog to share code?

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:284
&gt; +                    () =&gt; this.enqueueToRender(),

Why is this needed? We need an inline change log description here.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:306
&gt; +                    this.enqueueToRender();

And here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478108</commentid>
    <comment_count>3</comment_count>
      <attachid>354587</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-11-13 13:06:16 -0800</bug_when>
    <thetext>Comment on attachment 354587
Patch

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

&gt;&gt; Websites/perf.webkit.org/public/api/update-commit-testability.php:23
&gt;&gt; +            exit_with_error(&apos;MissingTestabilityWarning&apos;, array(&apos;commit&apos; =&gt; $commit_info));
&gt; 
&gt; Rather than adding a new API, why don&apos;t we just update /api/report-commits?

The major difference is that report-commits does insert conditionally which will create a new entry. This API only focus on updating, we should not insert any entry to table in this API.
Adding if conditions in &apos;/api/report-commits&apos; would make the code a little bit complicated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478112</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-11-13 13:17:13 -0800</bug_when>
    <thetext>(In reply to dewei_zhu from comment #3)
&gt; Comment on attachment 354587 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=354587&amp;action=review
&gt; 
&gt; &gt;&gt; Websites/perf.webkit.org/public/api/update-commit-testability.php:23
&gt; &gt;&gt; +            exit_with_error(&apos;MissingTestabilityWarning&apos;, array(&apos;commit&apos; =&gt; $commit_info));
&gt; &gt; 
&gt; &gt; Rather than adding a new API, why don&apos;t we just update /api/report-commits?
&gt; 
&gt; The major difference is that report-commits does insert conditionally which
&gt; will create a new entry. This API only focus on updating, we should not
&gt; insert any entry to table in this API.
&gt; Adding if conditions in &apos;/api/report-commits&apos; would make the code a little
&gt; bit complicated.

But fetchReportAndUpdateBuilds is literally calling report-commits and then update-commit-testability. Why can&apos;t we simply fold testability information into the first API call and call it done?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478743</commentid>
    <comment_count>5</comment_count>
      <attachid>354587</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-11-14 19:08:18 -0800</bug_when>
    <thetext>Comment on attachment 354587
Patch

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

&gt;&gt;&gt;&gt; Websites/perf.webkit.org/public/api/update-commit-testability.php:23
&gt;&gt;&gt;&gt; +            exit_with_error(&apos;MissingTestabilityWarning&apos;, array(&apos;commit&apos; =&gt; $commit_info));
&gt;&gt;&gt; 
&gt;&gt;&gt; Rather than adding a new API, why don&apos;t we just update /api/report-commits?
&gt;&gt; 
&gt;&gt; The major difference is that report-commits does insert conditionally which will create a new entry. This API only focus on updating, we should not insert any entry to table in this API.
&gt;&gt; Adding if conditions in &apos;/api/report-commits&apos; would make the code a little bit complicated.
&gt; 
&gt; But fetchReportAndUpdateBuilds is literally calling report-commits and then update-commit-testability. Why can&apos;t we simply fold testability information into the first API call and call it done?

I think the problem is to differentiate the intentions of updating testability warning message vs reporting new commits. The existing &apos;/api/report-commits&apos; does not prevent us reporting a new commit with testability warning message, in this case, this commit will be inserted into database. However, with same commit info that posted to the server, it&apos;s also a legitimate request to update existing commit, but in this case we should not insert commit if there is no existing commit.
Even though we have script doing the report then update, it would be better if we don&apos;t explicitly build this logic.

Another alternative I can think of is that, we make a single query to &apos;/api/report-commits&apos; which contains all  commits need to be inserted/updated. Those commits can be splitted into 3 types:
1. commit after last reported commit with owned commit info and testability warning message.
2. commit after last reported commit with owned commit info
3. commit after last reported commit without owned commit info
4. commit before last report commit with testability warning message

For the commit of type 4, we explicitly avoid fetching owned commit information on the script side (fetching those info can be pretty expensive) even those commit may have owned commit info.
What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478745</commentid>
    <comment_count>6</comment_count>
      <attachid>354587</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-11-14 19:15:35 -0800</bug_when>
    <thetext>Comment on attachment 354587
Patch

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

&gt;&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:352
&gt;&gt; +            this._fetchCommitByRevision(repository, revision);
&gt; 
&gt; We shouldn&apos;t be fetching revisions as a side effect of rendering them.
&gt; r- because of this. It should be done when a commit set is set or when the user starts mutating them.
&gt; Otherwise, we&apos;d delay fetching of commit sets by up to 16ms while we wait for requestAnimationFrame.
&gt; In general, render() functions shouldn&apos;t have side-effects.

Could you clarify why it is part of rendering?
&apos;_computeCommitSet&apos; is invoked by &apos;_updateCommitSetMap&apos;. The reason I chose to do the fetching here is this is the central place where all UI manipulation will finally impact &apos;_commitSetMap&apos;.
I think a better place is to do it in &apos;_updateCommitSetMap&apos; after we think either baseline or comparison has changed. How about this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478768</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-11-14 21:20:11 -0800</bug_when>
    <thetext>(In reply to dewei_zhu from comment #5)
&gt; Comment on attachment 354587 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=354587&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Websites/perf.webkit.org/public/api/update-commit-testability.php:23
&gt; &gt;&gt;&gt;&gt; +            exit_with_error(&apos;MissingTestabilityWarning&apos;, array(&apos;commit&apos; =&gt; $commit_info));
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Rather than adding a new API, why don&apos;t we just update /api/report-commits?
&gt; &gt;&gt; 
&gt; &gt;&gt; The major difference is that report-commits does insert conditionally which will create a new entry. This API only focus on updating, we should not insert any entry to table in this API.
&gt; &gt;&gt; Adding if conditions in &apos;/api/report-commits&apos; would make the code a little bit complicated.
&gt; &gt; 
&gt; &gt; But fetchReportAndUpdateBuilds is literally calling report-commits and then update-commit-testability. Why can&apos;t we simply fold testability information into the first API call and call it done?
&gt; 
&gt; I think the problem is to differentiate the intentions of updating
&gt; testability warning message vs reporting new commits. The existing
&gt; &apos;/api/report-commits&apos; does not prevent us reporting a new commit with
&gt; testability warning message, in this case, this commit will be inserted into
&gt; database. However, with same commit info that posted to the server, it&apos;s
&gt; also a legitimate request to update existing commit, but in this case we
&gt; should not insert commit if there is no existing commit.
&gt; Even though we have script doing the report then update, it would be better
&gt; if we don&apos;t explicitly build this logic.

Why does that matter at all given we&apos;d never specify a testability warning without having a corresponding OS version in the first place?

&gt; Another alternative I can think of is that, we make a single query to
&gt; &apos;/api/report-commits&apos; which contains all  commits need to be
&gt; inserted/updated. Those commits can be splitted into 3 types:
&gt; 1. commit after last reported commit with owned commit info and testability
&gt; warning message.
&gt; 2. commit after last reported commit with owned commit info
&gt; 3. commit after last reported commit without owned commit info
&gt; 4. commit before last report commit with testability warning message
&gt; 
&gt; For the commit of type 4, we explicitly avoid fetching owned commit
&gt; information on the script side (fetching those info can be pretty expensive)
&gt; even those commit may have owned commit info.
&gt; What do you think?

One of the things we don&apos;t currently support in /api/report-commits is a partial update of a commit. We can totally support that.

This is a classic example of generalizing a problem making a solution a lot simpler. We just need to add a generic support for partially updating a commit, then there is no need to distinguish testability from the rest of fields of a commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478771</commentid>
    <comment_count>8</comment_count>
      <attachid>354587</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-11-14 21:42:23 -0800</bug_when>
    <thetext>Comment on attachment 354587
Patch

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

&gt;&gt;&gt; Websites/perf.webkit.org/public/v3/components/custom-analysis-task-configurator.js:352
&gt;&gt;&gt; +            this._fetchCommitByRevision(repository, revision);
&gt;&gt; 
&gt;&gt; We shouldn&apos;t be fetching revisions as a side effect of rendering them.
&gt;&gt; r- because of this. It should be done when a commit set is set or when the user starts mutating them.
&gt;&gt; Otherwise, we&apos;d delay fetching of commit sets by up to 16ms while we wait for requestAnimationFrame.
&gt;&gt; In general, render() functions shouldn&apos;t have side-effects.
&gt; 
&gt; Could you clarify why it is part of rendering?
&gt; &apos;_computeCommitSet&apos; is invoked by &apos;_updateCommitSetMap&apos;. The reason I chose to do the fetching here is this is the central place where all UI manipulation will finally impact &apos;_commitSetMap&apos;.
&gt; I think a better place is to do it in &apos;_updateCommitSetMap&apos; after we think either baseline or comparison has changed. How about this?

Oh oops, this was misreading of the code. This code is totally fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487774</commentid>
    <comment_count>9</comment_count>
      <attachid>357273</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-12-13 17:05:52 -0800</bug_when>
    <thetext>Created attachment 357273
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487781</commentid>
    <comment_count>10</comment_count>
      <attachid>357273</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-13 17:44:25 -0800</bug_when>
    <thetext>Comment on attachment 357273
Patch

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

&gt; Websites/perf.webkit.org/public/api/report-commits.php:7
&gt; +    list($db, $commits) = connect_database_and_sanitize_commits($post_data);

We shouldn&apos;t do two unrelated things at once like this. Keep new Database here and pass it to this function.
Also, instead of sanitize call it validate since you&apos;re not doing any kind of sanitization / normalization
in this function but rather checking that certain conditions are met.

&gt; Websites/perf.webkit.org/public/api/update-commits.php:14
&gt; +            $db-&gt;rollback_transaction();
&gt; +            exit_with_error(&apos;InvalidRepository&apos;, array(&apos;commit&apos; =&gt; $commit_info));

We shouldn&apos;t start a transaction until all these validations are done. r- because of this.

In general, we want to do all validations upfront as much as possible, and execute all queries at once without any checks.
Having an open transaction incurs a significant database-side cost.
e.g. see http://blog.lerner.co.il/in-postgresql-as-in-life-dont-wait-too-long-to-commit/

&gt; Websites/perf.webkit.org/public/api/update-commits.php:19
&gt; +        foreach($commit_info as $key =&gt; $value) {

I&apos;d rather have a bunch of if&apos;s instead of looping over keys and checking conditions for each as in:
if ($commit_info[&apos;time&apos;])
    $commit_update[&apos;time&apos;] = $commit_info[&apos;time&apos;];

&gt; Websites/perf.webkit.org/public/api/update-commits.php:21
&gt; +            switch ($key) {
&gt; +                case &quot;repository&quot;:

Nit: Wrong indentation. It should look like:
    switch (~) {
    case &quot;~&quot;:
        ~
        break;
    }

&gt; Websites/perf.webkit.org/public/include/json-header.php:208
&gt; +    $db = new Database;
&gt; +    if (!$db-&gt;connect())
&gt; +        exit_with_error(&apos;DatabaseConnectionFailure&apos;);
&gt; +

This shouldn&apos;t be done in a helper function like this.

&gt; Websites/perf.webkit.org/public/include/json-header.php:211
&gt; +    $report = json_decode($post_data, true);
&gt; +
&gt; +    verify_slave($db, $report);

Neither are these. With these code being baked in this function, 
we won&apos;t be able to use this validation logic in any other backend code which may want to validate commit information
which process other non-commit information, or API where commits appear within some other data structures.

&gt; Websites/perf.webkit.org/public/include/json-header.php:232
&gt; +    $committer_data = $committer_query;

The fact this is making a copy of $committer_query is rather subtle.
I think it&apos;s better we just constructed these arrays where we call update_or_insert_row instead (as in duplicate the code).

&gt; Websites/perf.webkit.org/public/include/json-header.php:239
&gt; +        $db-&gt;rollback_transaction();
&gt; +        exit_with_error(&apos;FailedToInsertCommitter&apos;, array(&apos;committer&apos; =&gt; $committer_data));

A helper function shouldn&apos;t be rolling back a transaction it didn&apos;t start like this.
The caller should be doing this work instead.

Alternatively, we could create a class which knows how to add or update a commit.
That class then start &amp; manage its own transaction.

&gt; Websites/perf.webkit.org/public/include/json-header.php:249
&gt; +        $db-&gt;rollback_transaction();
&gt; +        exit_with_error(&apos;FailedToFindPreviousCommit&apos;, array(&apos;commit&apos; =&gt; $commit_info));

Ditto.

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:34
&gt; +        const splittedArrayList = [];
&gt; +        for (let startIndex = 0; startIndex &lt; array.length; startIndex += maxCount)

Why is this function defined here? It&apos;s making the diff impossible to read.
Also, we probably don&apos;t need this function. We can simply keep calling
commitsToPost.splice(0, maxCount) until commitsToPost is empty.

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:53
&gt; +        const repository = config[&apos;name&apos;];

It&apos;s important to clarify whether this variable stores a Repository object, or its name.
So this rename is a regression as far as I&apos;m concerned.

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:100
&gt; +        const output = await this._subprocess.execute(command);
&gt; +        return JSON.parse(output);

This change would make the syncing script to be incompatible with the old script.
We shouldn&apos;t make that kind of backwards incompatible change at the same modifying the database schema.
Make this work with both old &amp; new scripts, or split this part into its own patch.
r- because of this.

In general, we should always make these changes backwards compatible so that
we can isolate the deployment of new version of dashboards from deployment of new helper scripts, etc...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487805</commentid>
    <comment_count>11</comment_count>
      <attachid>357273</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-12-13 18:54:18 -0800</bug_when>
    <thetext>Comment on attachment 357273
Patch

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

&gt;&gt; Websites/perf.webkit.org/public/api/update-commits.php:19
&gt;&gt; +        foreach($commit_info as $key =&gt; $value) {
&gt; 
&gt; I&apos;d rather have a bunch of if&apos;s instead of looping over keys and checking conditions for each as in:
&gt; if ($commit_info[&apos;time&apos;])
&gt;     $commit_update[&apos;time&apos;] = $commit_info[&apos;time&apos;];

Changing from &apos;swtich&apos; to &apos;if&apos; conditions makes checking unrecognized keys a little bit trickier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487819</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-13 19:42:32 -0800</bug_when>
    <thetext>(In reply to dewei_zhu from comment #11)
&gt; Comment on attachment 357273 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=357273&amp;action=review
&gt; 
&gt; &gt;&gt; Websites/perf.webkit.org/public/api/update-commits.php:19
&gt; &gt;&gt; +        foreach($commit_info as $key =&gt; $value) {
&gt; &gt; 
&gt; &gt; I&apos;d rather have a bunch of if&apos;s instead of looping over keys and checking conditions for each as in:
&gt; &gt; if ($commit_info[&apos;time&apos;])
&gt; &gt;     $commit_update[&apos;time&apos;] = $commit_info[&apos;time&apos;];
&gt; 
&gt; Changing from &apos;swtich&apos; to &apos;if&apos; conditions makes checking unrecognized keys a
&gt; little bit trickier.

Why would it? You just need to check that upfront. Also, I&apos;m not certain checking for a key we don&apos;t care about is all that important...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487877</commentid>
    <comment_count>13</comment_count>
      <attachid>357308</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-12-14 01:45:54 -0800</bug_when>
    <thetext>Created attachment 357308
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488636</commentid>
    <comment_count>14</comment_count>
      <attachid>357486</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-12-17 15:41:53 -0800</bug_when>
    <thetext>Created attachment 357486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488637</commentid>
    <comment_count>15</comment_count>
      <attachid>357486</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-12-17 15:45:27 -0800</bug_when>
    <thetext>Comment on attachment 357486
Patch

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

&gt; Websites/perf.webkit.org/public/api/update-commits.php:18
&gt; +    $commit_modifier-&gt;update_commits($commits);

Since the only difference between update-commits vs report-commits API is above invocation, do you prefer the idea that we had a single api that decides to use `update_commits` vs `update_or_insert_commits` based on the existence of `update-only` parameter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488655</commentid>
    <comment_count>16</comment_count>
      <attachid>357486</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-17 16:18:36 -0800</bug_when>
    <thetext>Comment on attachment 357486
Patch

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

&gt; Websites/perf.webkit.org/init-database.sql:104
&gt; +    commit_testability_warning varchar(64) DEFAULT NULL,

Now that I think about more, I don&apos;t think _warning adds any more semantics here.
I think we should just call it commit_testability.

&gt;&gt; Websites/perf.webkit.org/public/api/update-commits.php:18
&gt;&gt; +    $commit_modifier-&gt;update_commits($commits);
&gt; 
&gt; Since the only difference between update-commits vs report-commits API is above invocation, do you prefer the idea that we had a single api that decides to use `update_commits` vs `update_or_insert_commits` based on the existence of `update-only` parameter?

I think a better approach might be to migrate the existing clients of /api/report-commits to use /api/update-commits?insert=true or something.
Saying that we don&apos;t add new entries is less clear than saying we insert one if it doesn&apos;t already exist.
It&apos;s like doX is a better name than notDoY

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:3
&gt; +class CommitModifier {

I think the term we nominally use in perf dashboard is update, not modify
so we should probably call this class CommitUpdater.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:23
&gt; +    function update_commits($commits)

We need to very clearly distinguish the commit rows / database compatible array of commits from the input to this function.
I think we normally call the latter *_info so I think we should call this $commit_info_list or something.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:40
&gt; +        $this-&gt;reset();

Why do we need to do this? Nobody is calling this function twice is it?
If anything, we should just initialize all the instance variables in this function
instead of the constructor if there is any plan to do that in the future.
But since we don&apos;t do that now, we might as well as forget about this.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:43
&gt; +    private function prepare_commit_update($commits)

I really don&apos;t like this kind of code structuring where we do prepare, etc...
it doesn&apos;t tell us at all what this function does especially if it has side effects.
We should call validate_commits commits in the caller,
and rename this function to something like updates_from_commit_info_list.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:45
&gt; +        $this-&gt;validate_commits($commits);

Use reference?

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:47
&gt; +        foreach ($commits as $commit_info) {

Use &amp; so that we use reference.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:49
&gt; +            $commit_identifier = array(&apos;repository&apos; =&gt; $repository_id, &apos;revision&apos; =&gt; $commit_info[&apos;revision&apos;]);

It&apos;s very confusing to call this an identifier. This is really a query parameter.
Maybe $commit_select_query?

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:76
&gt; +            array_push($this-&gt;commit_identifier_and_update_list, array($commit_identifier, $commit_update));

I don&apos;t like the use of pair/list like this. In general, we prefer using named associated arrays.
We should just do: array(&apos;query&apos; =&gt; ~, &apos;update&apos; =&gt; ~)
Also, we should probably use call this $this-&gt;updates.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:80
&gt; +    private function validate_commits($commits)

Since this function doesn&apos;t depend on any instance variable, it should be static.
(Note you call it with self::validate_commits once you made this function static).

Static functions are generally preferable to instance variables
since clarifies that it won&apos;t have side effects on instance variables.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:90
&gt; +        }

It seems that we should also validate that previousCommit if set is an integer.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:114
&gt; +            if ($rollback_on_error)
&gt; +                $this-&gt;rollback_with_error(&apos;FailedToFindPreviousCommit&apos;, array(&apos;revision&apos; =&gt; $revision));

It&apos;s super confusing that this function sometimes rolls back the transition and sometimes not.
I think we should just always do these resolutions upfront so that we don&apos;t have to do this.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:159
&gt; +        $this-&gt;prepare_commit_update_or_insert($commits);

Why can&apos;t this function simply validate everything upfront?
Since we&apos;re doing this refactoring anyway, we might as well as do that.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:162
&gt; +        foreach ($this-&gt;commit_data_list as list($commit_data, $owned_commit_list)) {

Ugh... we&apos;re gonna create a bunch of copies here.
If we switched to use named associative array, be sure to use a reference here as well.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:164
&gt; +            foreach ($owned_commit_list as $owned_commit_data)

Ditto about using a reference.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:171
&gt; +    private function prepare_commit_update_or_insert($commits)

Again, validation &amp; resolution of various information should be done in two separate steps.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:178
&gt; +                foreach($commit_info[&apos;ownedCommits&apos;] as $owned_commit_repository_name =&gt; $owned_commit_info) {

Use a reference.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:179
&gt; +                    $owned_commit_info[&apos;repository&apos;] = $owned_commit_repository_name;

Why is this mutation needed?
It seems to me that passing this as an extra argument to prepare_single_commit_data
with a descriptively named argument would be cleaner.

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:187
&gt; +    private function prepare_single_commit_data($commit_info, $is_owned_commit)

Again, names such as &quot;prepare&quot; doesn&apos;t really tell us what it does.
Here, we&apos;re simply constructing the commit data from the commit info,
we should just call it commit_update_from_commit_info or something.

But how is this function different from what&apos;s in the loop of prepare_commit_update?
Can&apos;t we share some code here?

&gt; Websites/perf.webkit.org/public/include/commit-modifier.php:238
&gt; +    private function resolve_repository($repository_name, $owner_repository_id)
&gt; +    {

We should just merge this function with find_top_level_repository, and do it upfront.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489221</commentid>
    <comment_count>17</comment_count>
      <attachid>357656</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-12-18 22:38:22 -0800</bug_when>
    <thetext>Created attachment 357656
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489702</commentid>
    <comment_count>18</comment_count>
      <attachid>357656</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-19 20:30:21 -0800</bug_when>
    <thetext>Comment on attachment 357656
Patch

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

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:21
&gt; +        $this-&gt;updates = array();

This should be a local variable in update_commits

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:38
&gt; +        foreach ($this-&gt;updates as $update) {

We shouldn&apos;t make a copy here.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:41
&gt; +            if (array_key_exists(&apos;committer&apos;, $commit_update)) {

We should store committer in some other field than the update array which contains the content of the database query.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:42
&gt; +                $committer_id = $this-&gt;resolve_committer_by_repository_id_and_author_account($commit_select_query[&apos;repository&apos;], $commit_update[&apos;committer&apos;]);

I think we can just call this function resolve_committer.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:66
&gt; +            if (array_key_exists(&apos;previousCommit&apos;, $commit_info))
&gt; +                $commit_update[&apos;previous_commit&apos;] = $this-&gt;resolve_previous_commit($repository_id, $commit_info[&apos;previousCommit&apos;]);

We should just resolve this later during update_commits / update_or_insert_commits
so that we can share more code between update case &amp; insertion case.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:75
&gt; +        }

This function should return a new array.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:78
&gt; +    private function update_or_insert_commits($commit_info_list)

Why don&apos;t we put this function next to update_commits?

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:94
&gt; +    private function construct_commit_data_list(&amp;$commit_info_list)

It&apos;s unclear how this function is different from construct_commit_updates.
We should just merge them together into a single function.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:108
&gt; +    private function &amp;construct_commit_data($commit_info, $owned_repository_name)

We shouldn&apos;t have a separate function for this. Just merge it with validate_and_construct_commit_data_from_commit_info.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:152
&gt; +    private function &amp;validate_and_construct_commit_data_from_commit_info(&amp;$commit_info, $owned_repository_name)

This should be a static function.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:196
&gt; +            $repository = $this-&gt;db-&gt;select_or_insert_row(&apos;repositories&apos;, &apos;repository&apos;, array(&apos;name&apos; =&gt; $repository_name, &apos;owner&apos; =&gt; $owner_repository_id), NULL, &apos;*&apos;);

Why don&apos;t we just retrieve the repository ID instead?

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:200
&gt; +        }
&gt; +        else {

Nit: } else {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489802</commentid>
    <comment_count>19</comment_count>
      <attachid>357803</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-12-20 01:59:39 -0800</bug_when>
    <thetext>Created attachment 357803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490088</commentid>
    <comment_count>20</comment_count>
      <attachid>357803</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-20 14:59:02 -0800</bug_when>
    <thetext>Comment on attachment 357803
Patch

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

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:74
&gt; +    private function &amp;construct_update_data_list(&amp;$commit_info_list, $should_insert)

We can probably just call this construct_update_list.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:83
&gt; +            $update_data =  array(&apos;commit&apos; =&gt; $commit_data, &apos;repository&apos; =&gt; $commit_info[&apos;repository&apos;]);

Nit: Two spaces after =.
I don&apos;t think we really need to call this update_data. Just call it update.
Also, use references?

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:95
&gt; +                $this-&gt;exit_with_error(&apos;OwnedCommitsUpdateNotSupportedYet&apos;, array(&apos;commit&apos; =&gt; $commit_info));

I think a better / less verbose error would be AttemptToUpdateOwnedCommits

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:101
&gt; +                $update_data_list[] = $update_data;

I think we can just use array_push.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:106
&gt; +            foreach($commit_info[&apos;ownedCommits&apos;] as $owned_repository_name =&gt; $owned_commit_info) {

Use references?

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:108
&gt; +                $owned_commit_update_data = array(&apos;commit&apos; =&gt; $owned_commit, &apos;repository&apos; =&gt; $owned_repository_name);

Ditto.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:111
&gt; +                    $owned_commit_update_data[&apos;previous_commit&apos;] = $owned_commit_info[&apos;previousCommit&apos;];

Ditto.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:114
&gt; +                    $owned_commit_update_data[&apos;author&apos;] = $owned_commit_info[&apos;author&apos;];

Ditto.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:115
&gt; +                $owned_commit_update_data_list[] = $owned_commit_update_data;

Just use array_push

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:118
&gt; +                $update_data[&apos;owned_commits&apos;] = $owned_commit_update_data_list;

Use a reference.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:120
&gt; +            $update_data_list[] = $update_data;

Use array_push.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:142
&gt; +                exit_with_error(&apos;OwnedCommitShouldNotContainTimestamp&apos;, array(&apos;commit&apos; =&gt; $commit_info));

I think it should be OwnedCommitShouldNot*Have*Timestamp.

&gt; Websites/perf.webkit.org/public/include/commit-updater.php:147
&gt; +        if ($should_insert)
&gt; +            $commit_data[&apos;reported&apos;] = true;

We should have a test to check that an API call with insert=false wouldn&apos;t set reported to true if there isn&apos;t one already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495393</commentid>
    <comment_count>21</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2019-01-16 21:58:36 -0800</bug_when>
    <thetext>Landed in r238329.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495394</commentid>
    <comment_count>22</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2019-01-16 21:58:58 -0800</bug_when>
    <thetext>&lt;rdar://problem/44369873&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495395</commentid>
    <comment_count>23</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2019-01-16 21:59:04 -0800</bug_when>
    <thetext>rdar://problem/44369873</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354587</attachid>
            <date>2018-11-12 13:34:34 -0800</date>
            <delta_ts>2018-12-13 17:05:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191557-20181112133433.patch</filename>
            <type>text/plain</type>
            <size>72064</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MTAzCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCA1MzgzNWRlNjU4YWE4MmI2NTZlZTc5YTFlYzQwZjA3MjlkYWZjNTcxLi42ZmI4Nzg1MmRi
MjEzM2E3OWU5MGVkN2QyNDJlZWIxZGVhOGIxMjVkIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw2NSBAQAorMjAxOC0xMS0xMiAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBQZXJmIGRhc2hib2FyZCBzaG91bGQgc2hvdyB0ZXN0YWJp
bGl0eSB3YXJuaW5nIHdoZW4gc2NoZWR1bGluZyBhbiBBL0IgdGFzay4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTU1NworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNo
b3cgdGVzdGFiaWxpdHkgd2FybmluZyBtZXNzYWdlIG9uIGJvdGggYW5hbHlzaXMgdGFzayBwYWdl
IGFuZAorICAgICAgICBjdXN0b20gYW5hbHlzaXMgdGFzayBwYWdlLgorICAgICAgICBVcGRhdGUg
b3MgdmVyc2lvbiBzeW5jaW5nIHNjcmlwdCB0byBiZSBhYmxlIHRvIHVwZGF0ZSB0ZXN0YWJpbGl0
eSB3YXJuaW5nIGluZm9ybWFpdG9uIGFzIHdlbGwuCisKKyAgICAgICAgKiBpbml0LWRhdGFiYXNl
LnNxbDogQWRkZWQgJ2NvbW1pdF90ZXN0YWJpbGl0eV93YXJuaW5nJyBmaWVsZCB0byAnY29tbWl0
cycgdGFibGUuCisgICAgICAgICogcHVibGljL2FwaS91cGRhdGUtY29tbWl0LXRlc3RhYmlsaXR5
LnBocDogQWRkZWQgYW4gQVBJIHRvIHVwZGF0ZSBjb21taXQgdGVzdGFiaWxpdHkgd2FybmluZyBp
bmZvLgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2NvbW1pdC1sb2ctZmV0Y2hlci5waHA6IEV4
cG9zZSB0ZXN0YWJpbGl0eSB3YXJuaW5nIGluZm9ybWF0aW9uIGluIHRoaXMgQVBJLgorICAgICAg
ICAqIHB1YmxpYy92My9jb21wb25lbnRzL2N1c3RvbS1hbmFseXNpcy10YXNrLWNvbmZpZ3VyYXRv
ci5qczogQ3VzdG9tIGFuYWx5c2lzIHRhc2sgcGFnZSBzaG91bGQgc2hvdworICAgICAgICB0ZXN0
YWJpbGl0eSB3YXJuaW5nIGluZm9ybWFpdG9uIHdoaWxlIHVzZSBzY2hlZHVsaW5nIGFuIGN1c3Rv
bSBBL0IgdGFzay4KKyAgICAgICAgKEN1c3RvbUFuYWx5c2lzVGFza0NvbmZpZ3VyYXRvcik6Cisg
ICAgICAgIChDdXN0b21BbmFseXNpc1Rhc2tDb25maWd1cmF0b3IucHJvdG90eXBlLnJlbmRlcik6
CisgICAgICAgIChDdXN0b21BbmFseXNpc1Rhc2tDb25maWd1cmF0b3IucHJvdG90eXBlLl91cGRh
dGVDb21taXRTZXRNYXApOgorICAgICAgICAoQ3VzdG9tQW5hbHlzaXNUYXNrQ29uZmlndXJhdG9y
LnByb3RvdHlwZS5fY29tcHV0ZUNvbW1pdFNldCk6CisgICAgICAgIChDdXN0b21BbmFseXNpc1Rh
c2tDb25maWd1cmF0b3IucHJvdG90eXBlLl9mZXRjaENvbW1pdEJ5UmV2aXNpb24pOgorICAgICAg
ICAoQ3VzdG9tQW5hbHlzaXNUYXNrQ29uZmlndXJhdG9yLnByb3RvdHlwZS5fcmVuZGVyUmVwb3Np
dG9yeVBhbmVzKToKKyAgICAgICAgKEN1c3RvbUFuYWx5c2lzVGFza0NvbmZpZ3VyYXRvci5wcm90
b3R5cGUuX3JlbmRlckJhc2VsaW5lUmV2aXNpb25UYWJsZSk6CisgICAgICAgIChDdXN0b21BbmFs
eXNpc1Rhc2tDb25maWd1cmF0b3IucHJvdG90eXBlLl9yZW5kZXJDb21wYXJpc29uUmV2aXNpb25U
YWJsZSk6CisgICAgICAgIChDdXN0b21BbmFseXNpc1Rhc2tDb25maWd1cmF0b3IucHJvdG90eXBl
Ll9idWlsZFJldmlzaW9uVGFibGUpOgorICAgICAgICAoQ3VzdG9tQW5hbHlzaXNUYXNrQ29uZmln
dXJhdG9yLnByb3RvdHlwZS5fYnVpbGRSZXZpc2lvbklucHV0KToKKyAgICAgICAgKEN1c3RvbUFu
YWx5c2lzVGFza0NvbmZpZ3VyYXRvci5jc3NUZW1wbGF0ZSk6CisgICAgICAgICogcHVibGljL3Yz
L2NvbXBvbmVudHMvY3VzdG9taXphYmxlLXRlc3QtZ3JvdXAtZm9ybS5qczogQ3VzdG9taXphYmxl
IHRlc3QgZ3JvdXAgZm9ybSBzaG91bGQgc2hvdworICAgICAgICB0ZXN0YWJpbGl0eSB3YXJuaW5n
IGluZm9ybWF0aW9uIHdoZW4gdXNlciBjdXN0b21pemUgYW4gYW5hbHlzaXMgdGFzay4KKyAgICAg
ICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9yZW5kZXJDdXN0b21SZXZp
c2lvblRhYmxlKToKKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBl
Ll9jb25zdHJ1Y3RUZXN0YWJpbGl0eVdhcm5pbmdUYWJsZS4pOgorICAgICAgICAoQ3VzdG9taXph
YmxlVGVzdEdyb3VwRm9ybS5wcm90b3R5cGUuX2NvbnN0cnVjdFRlc3RhYmlsaXR5V2FybmluZ1Rh
YmxlKToKKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9jb25z
dHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyk6CisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3Jv
dXBGb3JtLmNzc1RlbXBsYXRlKToKKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1s
b2cuanM6IENvbW1pdExvZyBvYmplY3Qgc2hvdWxkIGV4cG9zZSB0ZXN0YWJpbGl0eSB3YXJuaW5n
IGluZm9ybWF0aW9uLgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlwZS51cGRhdGVTaW5nbGV0
b24pOgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlwZS50ZXN0YWJpbGl0eVdhcm5pbmcpOgor
ICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qczogQWRkZWQgJ2NvbW1pdHNX
aXRoVGVzdGFiaWxpdHlXYXJuaW5ncycgYW5kICdjb21taXRzJyB0byBDb21taXRTZXQgYW5kCisg
ICAgICAgIEludGVybWVkaWF0ZUNvbW1pdFNldCBpbnN0YW5jZXMuCisgICAgICAgIChDb21taXRT
ZXQucHJvdG90eXBlLmNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5ncyk6CisgICAgICAgIChD
b21taXRTZXQucHJvdG90eXBlLmNvbW1pdHMpOgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0
U2V0LnByb3RvdHlwZS5jb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MpOgorICAgICAgICAo
SW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5jb21taXRzKToKKyAgICAgICAgKiBzZXJ2
ZXItdGVzdHMvYXBpLXVwZGF0ZS1jb21taXQtdGVzdGFiaWxpdHktdGVzdHMuanM6IEFkZGVkIHVu
aXQgdGVzdHMgZm9yICcvYXBpL3VwZGF0ZS1jb21taXQtdGVzdGFiaWxpdHknLgorICAgICAgICAq
IHNlcnZlci10ZXN0cy90b29scy1vcy1idWlsZC1mZXRjaGVyLXRlc3RzLmpzOiBBZGRlZCBhbmQg
dXBkYXRlZCB1bml0IHRlc3RzLgorICAgICAgICAqIHRvb2xzL2pzL29zLWJ1aWxkLWZldGNoZXIu
anM6IEFkZGVkIHRoZSBhYmlsaXR5IHRvIHVwZGF0ZSBjb21taXQgdGVzdGFiaWxpdHkgd2Fybmlu
Z3MuCisgICAgICAgIChhc3luYy5mZXRjaFJlcG9ydEFuZFVwZGF0ZUNvbW1pdHMpOgorICAgICAg
ICAocHJvdG90eXBlLl9zcGxpdEFycmF5QnlMaW1pdCk6CisgICAgICAgIChwcm90b3R5cGUuYXN5
bmMuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMpOgorICAgICAgICAocHJvdG90eXBlLmFzeW5j
Ll9mZXRjaEF2YWlsYWJsZUJ1aWxkcyk6CisgICAgICAgIChwcm90b3R5cGUuYXN5bmMuX2NvbW1p
dHNGb3JBdmFpbGFibGVCdWlsZHMpOgorICAgICAgICAocHJvdG90eXBlLl9jb21taXRzV2l0aGlu
UmFuZ2UpOgorICAgICAgICAocHJvdG90eXBlLmFzeW5jLl9yZXBvcnRUb0VuZFBvaW50KToKKyAg
ICAgICAgKGZldGNoQW5kUmVwb3J0QWxsSW5PcmRlcik6IERlbGV0ZWQuCisgICAgICAgIChwcm90
b3R5cGUuZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMpOiBEZWxldGVkLgorICAgICAgICAocHJvdG90
eXBlLl9mZXRjaEF2YWlsYWJsZUJ1aWxkcyk6IERlbGV0ZWQuCisgICAgICAgIChwcm90b3R5cGUu
X2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMpOiBEZWxldGVkLgorICAgICAgICAocHJvdG90eXBl
Ll9zdWJtaXRDb21taXRzKTogRGVsZXRlZC4KKyAgICAgICAgKiB0b29scy9zeW5jLW9zLXZlcnNp
b25zLmpzOgorICAgICAgICAqIHVuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qczogQWRkZWQg
YSB1bml0IHRlc3QgZm9yICd0ZXN0YWJpbGl0eVdhcm5pbmcnLgorICAgICAgICAqIHVuaXQtdGVz
dHMvY29tbWl0LXNldC10ZXN0cy5qczogQWRkZWQgdW5pdCB0ZXN0cyBmb3IgJ2NvbW1pdHNXaXRo
VGVzdGFiaWxpdHlXYXJuaW5ncycuCisKIDIwMTgtMTEtMDcgIERld2VpIFpodSAgPGRld2VpX3po
dUBhcHBsZS5jb20+CiAKICAgICAgICAgIi9hcGkvcmVwb3J0IiBkb2VzIG5vdCBjaGVjayBjb21t
aXQgdGltZSBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
aW5pdC1kYXRhYmFzZS5zcWwgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvaW5pdC1kYXRhYmFz
ZS5zcWwKaW5kZXggODE2MWVmZTNlMjgxZTM0YTBkYzQ0ZWRiODBjYWI2YzNiYmMzN2JhNi4uYmI1
MTRlZTMxMzQxYjM0YWQyOWIxZDM0OGM1ZGEzOTk4NzM3YzE5MyAxMDA2NDQKLS0tIGEvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL2luaXQtZGF0YWJhc2Uuc3FsCisrKyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9pbml0LWRhdGFiYXNlLnNxbApAQCAtMTAxLDYgKzEwMSw3IEBAIENSRUFURSBU
QUJMRSBjb21taXRzICgKICAgICBjb21taXRfY29tbWl0dGVyIGludGVnZXIgUkVGRVJFTkNFUyBj
b21taXR0ZXJzIE9OIERFTEVURSBDQVNDQURFLAogICAgIGNvbW1pdF9tZXNzYWdlIHRleHQsCiAg
ICAgY29tbWl0X3JlcG9ydGVkIGJvb2xlYW4gTk9UIE5VTEwgREVGQVVMVCBGQUxTRSwKKyAgICBj
b21taXRfdGVzdGFiaWxpdHlfd2FybmluZyB0ZXh0IERFRkFVTFQgTlVMTCwKICAgICBDT05TVFJB
SU5UIGNvbW1pdF9pbl9yZXBvc2l0b3J5X211c3RfYmVfdW5pcXVlIFVOSVFVRShjb21taXRfcmVw
b3NpdG9yeSwgY29tbWl0X3JldmlzaW9uKSk7CiBDUkVBVEUgSU5ERVggY29tbWl0X3RpbWVfaW5k
ZXggT04gY29tbWl0cyhjb21taXRfdGltZSk7CiBDUkVBVEUgSU5ERVggY29tbWl0X29yZGVyX2lu
ZGV4IE9OIGNvbW1pdHMoY29tbWl0X29yZGVyKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvYXBpL3VwZGF0ZS1jb21taXQtdGVzdGFiaWxpdHkucGhwIGIvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hcGkvdXBkYXRlLWNvbW1pdC10ZXN0YWJpbGl0
eS5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDgxY2U5M2RkOGZhY2FlY2QyMDIwNDgxZmRiNjFiZDFjMGRjZjM2
OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYXBp
L3VwZGF0ZS1jb21taXQtdGVzdGFiaWxpdHkucGhwCkBAIC0wLDAgKzEsNDYgQEAKKzw/cGhwCisK
K3JlcXVpcmUoJy4uL2luY2x1ZGUvanNvbi1oZWFkZXIucGhwJyk7CisKK2Z1bmN0aW9uIG1haW4o
JHBvc3RfZGF0YSkKK3sKKyAgICAkZGIgPSBuZXcgRGF0YWJhc2U7CisgICAgaWYgKCEkZGItPmNv
bm5lY3QoKSkKKyAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdEYXRhYmFzZUNvbm5lY3Rpb25GYWls
dXJlJyk7CisKKyAgICAkdXBkYXRlID0ganNvbl9kZWNvZGUoJHBvc3RfZGF0YSwgdHJ1ZSk7CisK
KyAgICB2ZXJpZnlfc2xhdmUoJGRiLCAkdXBkYXRlKTsKKworICAgICRjb21taXRzID0gYXJyYXlf
Z2V0KCR1cGRhdGUsICdjb21taXRzJywgYXJyYXkoKSk7CisKKyAgICBmb3JlYWNoICgkY29tbWl0
cyBhcyAkY29tbWl0X2luZm8pIHsKKyAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdyZXBv
c2l0b3J5JywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJvcignTWlz
c2luZ1JlcG9zaXRvcnlOYW1lJywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7Cisg
ICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygncmV2aXNpb24nLCAkY29tbWl0X2luZm8pKQor
ICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdNaXNzaW5nUmV2aXNpb24nLCBhcnJheSgnY29t
bWl0JyA9PiAkY29tbWl0X2luZm8pKTsKKyAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCd0
ZXN0YWJpbGl0eVdhcm5pbmcnLCAkY29tbWl0X2luZm8pKQorICAgICAgICAgICAgZXhpdF93aXRo
X2Vycm9yKCdNaXNzaW5nVGVzdGFiaWxpdHlXYXJuaW5nJywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNv
bW1pdF9pbmZvKSk7CisgICAgICAgIHJlcXVpcmVfZm9ybWF0KCdSZXZpc2lvbicsICRjb21taXRf
aW5mb1sncmV2aXNpb24nXSwgJy9eW0EtWmEtejAtOSBcLl0rJC8nKTsKKyAgICB9CisKKyAgICAk
ZGItPmJlZ2luX3RyYW5zYWN0aW9uKCk7CisgICAgZm9yZWFjaCAoJGNvbW1pdHMgYXMgJGNvbW1p
dF9pbmZvKSB7CisgICAgICAgICRyZXBvc2l0b3J5ID0gJGRiLT5zZWxlY3RfZmlyc3Rfcm93KCdy
ZXBvc2l0b3JpZXMnLCAncmVwb3NpdG9yeScsIGFycmF5KCduYW1lJyA9PiAkY29tbWl0X2luZm9b
J3JlcG9zaXRvcnknXSwgJ293bmVyJyA9PiBOVUxMKSk7CisgICAgICAgIGlmICghJHJlcG9zaXRv
cnkpIHsKKyAgICAgICAgICAgICRkYi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKKyAgICAgICAg
ICAgIGV4aXRfd2l0aF9lcnJvcignSW52YWxpZFJlcG9zaXRvcnknLCBhcnJheSgnY29tbWl0JyA9
PiAkY29tbWl0X2luZm8pKTsKKyAgICAgICAgfQorICAgICAgICAkdXBkYXRlZF9jb21taXQgPSAk
ZGItPnVwZGF0ZV9yb3coJ2NvbW1pdHMnLCAnY29tbWl0JywgYXJyYXkoJ3JldmlzaW9uJyA9PiAk
Y29tbWl0X2luZm9bJ3JldmlzaW9uJ10sICdyZXBvc2l0b3J5JyA9PiAkcmVwb3NpdG9yeVsncmVw
b3NpdG9yeV9pZCddKSwKKyAgICAgICAgICAgIGFycmF5KCd0ZXN0YWJpbGl0eV93YXJuaW5nJyA9
PiAkY29tbWl0X2luZm9bJ3Rlc3RhYmlsaXR5V2FybmluZyddKSk7CisgICAgICAgIGlmICghJHVw
ZGF0ZWRfY29tbWl0KSB7CisgICAgICAgICAgICAkZGItPnJvbGxiYWNrX3RyYW5zYWN0aW9uKCk7
CisgICAgICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0ZhaWxlZFRvVXBkYXRlQ29tbWl0JywgYXJy
YXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgJGRi
LT5jb21taXRfdHJhbnNhY3Rpb24oKTsKKyAgICBleGl0X3dpdGhfc3VjY2VzcygpOworfQorCitt
YWluKGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6Ly9pbnB1dCcpKTsKKz8+ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy9pbmNsdWRlL2NvbW1pdC1sb2ctZmV0Y2hlci5waHAgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocAppbmRleCA5Yzc2MjYzY2I2
NjE2YjU5NWIxZGRkZmI5OTA5NDcyZWExNTg5ZDA4Li4yNjQ3NmQwZDkwZDFhMTg0MGNiMzEwODc3
YjdlNzkzZTRhMDA0MTAwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocAorKysgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocApAQCAtNjIsNiAr
NjIsNyBAQCBjbGFzcyBDb21taXRMb2dGZXRjaGVyIHsKICAgICAgICAgICAgIGNvbW1pdF9yZXBv
c2l0b3J5IGFzICJyZXBvc2l0b3J5IiwKICAgICAgICAgICAgIGNvbW1pdF9tZXNzYWdlIGFzICJt
ZXNzYWdlIiwKICAgICAgICAgICAgIGNvbW1pdF9vcmRlciBhcyAib3JkZXIiLAorICAgICAgICAg
ICAgY29tbWl0X3Rlc3RhYmlsaXR5X3dhcm5pbmcgYXMgInRlc3RhYmlsaXR5V2FybmluZyIsCiAg
ICAgICAgICAgICBFWElTVFMoU0VMRUNUICogRlJPTSBjb21taXRfb3duZXJzaGlwcyBXSEVSRSBj
b21taXRfb3duZXIgPSBjb21taXRfaWQpIGFzICJvd25zQ29tbWl0cyIKICAgICAgICAgICAgIEZS
T00gY29tbWl0cyBMRUZUIE9VVEVSIEpPSU4gY29tbWl0dGVycyBPTiBjb21taXRfY29tbWl0dGVy
ID0gY29tbWl0dGVyX2lkCiAgICAgICAgICAgICBXSEVSRSBjb21taXRfcmVwb3NpdG9yeSA9ICQx
IEFORCBjb21taXRfcmVwb3J0ZWQgPSB0cnVlJzsKQEAgLTIxMSw2ICsyMTIsNyBAQCBjbGFzcyBD
b21taXRMb2dGZXRjaGVyIHsKICAgICAgICAgICAgICdhdXRob3JOYW1lJyA9PiAkY29tbWl0dGVy
X3JvdyA/ICRjb21taXR0ZXJfcm93Wydjb21taXR0ZXJfbmFtZSddIDogbnVsbCwKICAgICAgICAg
ICAgICdhdXRob3JFbWFpbCcgPT4gJGNvbW1pdHRlcl9yb3cgPyAkY29tbWl0dGVyX3Jvd1snY29t
bWl0dGVyX2FjY291bnQnXSA6IG51bGwsCiAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJGNvbW1p
dF9yb3dbJ2NvbW1pdF9tZXNzYWdlJ10sCisgICAgICAgICAgICAndGVzdGFiaWxpdHlXYXJuaW5n
JyA9PiAkY29tbWl0X3Jvd1snY29tbWl0X3Rlc3RhYmlsaXR5X3dhcm5pbmcnXSwKICAgICAgICAg
ICAgICdvd25zQ29tbWl0cycgPT4gJG93bnNfY29tbWl0cwogICAgICAgICApOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9j
dXN0b20tYW5hbHlzaXMtdGFzay1jb25maWd1cmF0b3IuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY3VzdG9tLWFuYWx5c2lzLXRhc2stY29uZmlndXJh
dG9yLmpzCmluZGV4IDQzZjM1YjdjYTUyNjE0ODVjMmY4ZmU0YzIzZjRmNDdhYTMyNDFlZjQuLmMx
Y2JiN2UzNGYzMjE0ZDI1YWUxYjY1ZmJiNTM3MGVlMWQzZTkyMzkgMTAwNjQ0Ci0tLSBhL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jdXN0b20tYW5hbHlzaXMt
dGFzay1jb25maWd1cmF0b3IuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9jb21wb25lbnRzL2N1c3RvbS1hbmFseXNpcy10YXNrLWNvbmZpZ3VyYXRvci5qcwpAQCAt
MTAsNiArMTAsNyBAQCBjbGFzcyBDdXN0b21BbmFseXNpc1Rhc2tDb25maWd1cmF0b3IgZXh0ZW5k
cyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgdGhpcy5fY29uZmlndXJhdGlvbk5hbWVzID0gWydC
YXNlbGluZScsICdDb21wYXJpc29uJ107CiAgICAgICAgIHRoaXMuX3Nob3dDb21wYXJpc29uID0g
ZmFsc2U7CiAgICAgICAgIHRoaXMuX2NvbW1pdFNldE1hcCA9IHt9OworICAgICAgICB0aGlzLl9j
b21taXRCeVJlcG9zaXRvcnlBbmRSZXZpc2lvbiA9IG5ldyBNYXA7CiAgICAgICAgIHRoaXMuX3Nw
ZWNpZmllZFJldmlzaW9ucyA9IHsnQmFzZWxpbmUnOiBuZXcgTWFwLCAnQ29tcGFyaXNvbic6IG5l
dyBNYXB9OwogICAgICAgICB0aGlzLl9wYXRjaFVwbG9hZGVycyA9IHsnQmFzZWxpbmUnOiBuZXcg
TWFwLCAnQ29tcGFyaXNvbic6IG5ldyBNYXB9OwogICAgICAgICB0aGlzLl9jdXN0b21Sb290VXBs
b2FkZXJzID0geydCYXNlbGluZSc6IG51bGwsICdDb21wYXJpc29uJzogbnVsbH07CkBAIC0xODks
NyArMTkwLDggQEAgY2xhc3MgQ3VzdG9tQW5hbHlzaXNUYXNrQ29uZmlndXJhdG9yIGV4dGVuZHMg
Q29tcG9uZW50QmFzZSB7CiAKICAgICAgICAgY29uc3QgW3RyaWdnZXJhYmxlLCBlcnJvcl0gPSB0
aGlzLl91cGRhdGVUcmlnZ2VyYWJsZUxhemlseS5ldmFsdWF0ZSh0aGlzLl9zZWxlY3RlZFRlc3Rz
LCB0aGlzLl9zZWxlY3RlZFBsYXRmb3JtKTsKIAotICAgICAgICB0aGlzLl9yZW5kZXJSZXBvc2l0
b3J5UGFuZXNMYXppbHkuZXZhbHVhdGUodHJpZ2dlcmFibGUsIGVycm9yLCB0aGlzLl9zZWxlY3Rl
ZFBsYXRmb3JtLCB0aGlzLl9yZXBvc2l0b3J5R3JvdXBCeUNvbmZpZ3VyYXRpb24sIHRoaXMuX3No
b3dDb21wYXJpc29uKTsKKyAgICAgICAgdGhpcy5fcmVuZGVyUmVwb3NpdG9yeVBhbmVzTGF6aWx5
LmV2YWx1YXRlKHRyaWdnZXJhYmxlLCBlcnJvciwgdGhpcy5fc2VsZWN0ZWRQbGF0Zm9ybSx0aGlz
Ll9yZXBvc2l0b3J5R3JvdXBCeUNvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICB0aGlzLl9zaG93
Q29tcGFyaXNvbiwgdGhpcy5fY29tbWl0U2V0TWFwLCB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnlB
bmRSZXZpc2lvbik7CiAgICAgfQogCiAgICAgX3JlbmRlclRyaWdnZXJhYmxlVGVzdHMoKQpAQCAt
MzAwLDE2ICszMDIsMTYgQEAgY2xhc3MgQ3VzdG9tQW5hbHlzaXNUYXNrQ29uZmlndXJhdG9yIGV4
dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAgewogICAgICAgICBjb25zdCBuZXdCYXNlbGluZSA9
IHRoaXMuX2NvbXB1dGVDb21taXRTZXQoJ0Jhc2VsaW5lJyk7CiAgICAgICAgIGxldCBuZXdDb21w
YXJpc29uID0gdGhpcy5fY29tcHV0ZUNvbW1pdFNldCgnQ29tcGFyaXNvbicpOworCiAgICAgICAg
IGlmIChuZXdCYXNlbGluZSAmJiBuZXdDb21wYXJpc29uICYmIG5ld0Jhc2VsaW5lLmVxdWFscyhu
ZXdDb21wYXJpc29uKSkKICAgICAgICAgICAgIG5ld0NvbXBhcmlzb24gPSBudWxsOwogCiAgICAg
ICAgIGNvbnN0IGN1cnJlbnRCYXNlbGluZSA9IHRoaXMuX2NvbW1pdFNldE1hcFsnQmFzZWxpbmUn
XTsKLSAgICAgICAgY29uc3QgY3VycmVudENvbXBhcmlzb24gPSB0aGlzLl9jb21taXRTZXRNYXBb
J0Jhc2VsaW5lJ107Ci0gICAgICAgIGlmIChuZXdCYXNlbGluZSA9PSBjdXJyZW50QmFzZWxpbmUg
JiYgbmV3Q29tcGFyaXNvbiA9PSBjdXJyZW50Q29tcGFyaXNvbikKLSAgICAgICAgICAgIHJldHVy
bjsgLy8gQm90aCBvZiB0aGVtIGFyZSBudWxsLgorICAgICAgICBjb25zdCBjdXJyZW50Q29tcGFy
aXNvbiA9IHRoaXMuX2NvbW1pdFNldE1hcFsnQ29tcGFyaXNvbiddOworICAgICAgICBjb25zdCBz
YW1lQmFzZWxpbmVDb25maWcgPSBjdXJyZW50QmFzZWxpbmUgPT0gbmV3QmFzZWxpbmUgfHwgKGN1
cnJlbnRCYXNlbGluZSAmJiBuZXdCYXNlbGluZSAmJiBjdXJyZW50QmFzZWxpbmUuZXF1YWxzKG5l
d0Jhc2VsaW5lKSk7CisgICAgICAgIGNvbnN0IHNhbWVDb21wYXJpc2lvbkNvbmZpZyA9IGN1cnJl
bnRDb21wYXJpc29uID09IG5ld0NvbXBhcmlzb24gfHwgKGN1cnJlbnRDb21wYXJpc29uICYmIG5l
d0NvbXBhcmlzb24gJiYgY3VycmVudENvbXBhcmlzb24uZXF1YWxzKG5ld0NvbXBhcmlzb24pKTsK
IAotICAgICAgICBpZiAobmV3QmFzZWxpbmUgJiYgY3VycmVudEJhc2VsaW5lICYmIG5ld0Jhc2Vs
aW5lLmVxdWFscyhjdXJyZW50QmFzZWxpbmUpCi0gICAgICAgICAgICAmJiBuZXdDb21wYXJpc29u
ICYmIGN1cnJlbnRDb21wYXJpc29uICYmIG5ld0NvbXBhcmlzb24uZXF1YWxzKGN1cnJlbnRDb21w
YXJpc29uKSkKKyAgICAgICAgaWYgKHNhbWVCYXNlbGluZUNvbmZpZyAmJiBzYW1lQ29tcGFyaXNp
b25Db25maWcpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdGhpcy5fY29tbWl0U2V0
TWFwID0geydCYXNlbGluZSc6IG5ld0Jhc2VsaW5lLCAnQ29tcGFyaXNvbic6IG5ld0NvbXBhcmlz
b259OwpAQCAtMzQ3LDYgKzM0OSw3IEBAIGNsYXNzIEN1c3RvbUFuYWx5c2lzVGFza0NvbmZpZ3Vy
YXRvciBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGNvbW1pdFNldC5zZXRSZXZpc2lvbkZvclJlcG9zaXRvcnkocmVw
b3NpdG9yeSwgcmV2aXNpb24sIHBhdGNoKTsKKyAgICAgICAgICAgIHRoaXMuX2ZldGNoQ29tbWl0
QnlSZXZpc2lvbihyZXBvc2l0b3J5LCByZXZpc2lvbik7CiAgICAgICAgIH0KIAogICAgICAgICBm
b3IgKGxldCB1cGxvYWRlZEZpbGUgb2YgZmlsZVVwbG9hZGVyLnVwbG9hZGVkRmlsZXMoKSkKQEAg
LTM1NSw3ICszNTgsMjYgQEAgY2xhc3MgQ3VzdG9tQW5hbHlzaXNUYXNrQ29uZmlndXJhdG9yIGV4
dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAgICAgIHJldHVybiBjb21taXRTZXQ7CiAgICAgfQog
Ci0gICAgX3JlbmRlclJlcG9zaXRvcnlQYW5lcyh0cmlnZ2VyYWJsZSwgZXJyb3IsIHBsYXRmb3Jt
LCByZXBvc2l0b3J5R3JvdXBCeUNvbmZpZ3VyYXRpb24sIHNob3dDb21wYXJpc29uKQorICAgIF9m
ZXRjaENvbW1pdEJ5UmV2aXNpb24ocmVwb3NpdG9yeSwgcmV2aXNpb24pCisgICAgeworICAgICAg
ICBpZiAoIXRoaXMuX2NvbW1pdEJ5UmVwb3NpdG9yeUFuZFJldmlzaW9uLmhhcyhyZXBvc2l0b3J5
KSkKKyAgICAgICAgICAgIHRoaXMuX2NvbW1pdEJ5UmVwb3NpdG9yeUFuZFJldmlzaW9uLnNldChy
ZXBvc2l0b3J5LCBuZXcgTWFwKTsKKyAgICAgICAgY29uc3QgY29tbWl0QnlSZXBvc2l0b3J5QW5k
UmV2aXNpb24gPSB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnlBbmRSZXZpc2lvbi5nZXQocmVwb3Np
dG9yeSk7CisgICAgICAgIGlmIChjb21taXRCeVJlcG9zaXRvcnlBbmRSZXZpc2lvbi5oYXMocmV2
aXNpb24pKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbW1pdEJ5UmVwb3NpdG9y
eUFuZFJldmlzaW9uLnNldChyZXZpc2lvbiwgbnVsbCk7CisgICAgICAgIENvbW1pdExvZy5mZXRj
aEZvclNpbmdsZVJldmlzaW9uKHJlcG9zaXRvcnksIHJldmlzaW9uKS50aGVuKChjb21taXRzKSA9
PiB7CisgICAgICAgICAgICBjb21taXRCeVJlcG9zaXRvcnlBbmRSZXZpc2lvbi5zZXQocmV2aXNp
b24sIGNvbW1pdHNbMF0pOworICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgTWFwOworICAg
ICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5fY29tbWl0QnlSZXBvc2l0
b3J5QW5kUmV2aXNpb24uZW50cmllcygpKQorICAgICAgICAgICAgICAgIGNsb25lLnNldChrZXks
IHZhbHVlKTsKKyAgICAgICAgICAgIHRoaXMuX2NvbW1pdEJ5UmVwb3NpdG9yeUFuZFJldmlzaW9u
ID0gY2xvbmU7CisgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICB9
LCAoKSA9PiBhbGVydChgIiR7cmV2aXNpb259IiBkb2VzIG5vdCBleGlzdCBpbiAiJHtyZXBvc2l0
b3J5Lm5hbWUoKX0iYCkpOworICAgIH0KKworICAgIF9yZW5kZXJSZXBvc2l0b3J5UGFuZXModHJp
Z2dlcmFibGUsIGVycm9yLCBwbGF0Zm9ybSwgcmVwb3NpdG9yeUdyb3VwQnlDb25maWd1cmF0aW9u
LCBzaG93Q29tcGFyaXNvbiwgY29tbWl0U2V0TWFwLCBjb21taXRCeVJlcG9zaXRvcnlBbmRSZXZp
c2lvbikKICAgICB7CiAgICAgICAgIHRoaXMuY29udGVudCgncmVwb3NpdG9yeS1jb25maWd1cmF0
aW9uLWVycm9yLXBhbmUnKS5zdHlsZS5kaXNwbGF5ID0gZXJyb3IgPyBudWxsIDogJ25vbmUnOwog
ICAgICAgICB0aGlzLmNvbnRlbnQoJ2Vycm9yJykudGV4dENvbnRlbnQgPSBlcnJvcjsKQEAgLTM4
MiwyNiArNDA0LDMwIEBAIGNsYXNzIEN1c3RvbUFuYWx5c2lzVGFza0NvbmZpZ3VyYXRvciBleHRl
bmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICB9KTsKICAgICAgICAgY29uc3QgYWx3YXlzQWNj
ZXB0c0N1c3RvbVJvb3RzID0gcmVwb3NpdG9yeUdyb3Vwcy5ldmVyeSgoZ3JvdXApID0+IGdyb3Vw
LmFjY2VwdHNDdXN0b21Sb290cygpKTsKIAotICAgICAgICB0aGlzLl9yZW5kZXJCYXNlbGluZVJl
dmlzaW9uVGFibGUocGxhdGZvcm0sIHJlcG9zaXRvcnlHcm91cHMsIHJlcXVpcmVkUmVwb3NpdG9y
aWVzLCByZXBvc2l0b3J5R3JvdXBCeUNvbmZpZ3VyYXRpb24sIGFsd2F5c0FjY2VwdHNDdXN0b21S
b290cyk7CisgICAgICAgIHRoaXMuX3JlbmRlckJhc2VsaW5lUmV2aXNpb25UYWJsZShwbGF0Zm9y
bSwgcmVwb3NpdG9yeUdyb3VwcywgcmVxdWlyZWRSZXBvc2l0b3JpZXMsIHJlcG9zaXRvcnlHcm91
cEJ5Q29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgIGFsd2F5c0FjY2VwdHNDdXN0b21Sb290cywg
Y29tbWl0U2V0TWFwLCBjb21taXRCeVJlcG9zaXRvcnlBbmRSZXZpc2lvbik7CiAKICAgICAgICAg
aWYgKHNob3dDb21wYXJpc29uKQotICAgICAgICAgICAgdGhpcy5fcmVuZGVyQ29tcGFyaXNvblJl
dmlzaW9uVGFibGUocGxhdGZvcm0sIHJlcG9zaXRvcnlHcm91cHMsIHJlcXVpcmVkUmVwb3NpdG9y
aWVzLCByZXBvc2l0b3J5R3JvdXBCeUNvbmZpZ3VyYXRpb24sIGFsd2F5c0FjY2VwdHNDdXN0b21S
b290cyk7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJDb21wYXJpc29uUmV2aXNpb25UYWJsZShw
bGF0Zm9ybSwgcmVwb3NpdG9yeUdyb3VwcywgcmVxdWlyZWRSZXBvc2l0b3JpZXMsIHJlcG9zaXRv
cnlHcm91cEJ5Q29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICBhbHdheXNBY2NlcHRzQ3Vz
dG9tUm9vdHMsIGNvbW1pdFNldE1hcCwgY29tbWl0QnlSZXBvc2l0b3J5QW5kUmV2aXNpb24pOwog
ICAgIH0KIAotICAgIF9yZW5kZXJCYXNlbGluZVJldmlzaW9uVGFibGUocGxhdGZvcm0sIHJlcG9z
aXRvcnlHcm91cHMsIHJlcXVpcmVkUmVwb3NpdG9yaWVzLCByZXBvc2l0b3J5R3JvdXBCeUNvbmZp
Z3VyYXRpb24sIGFsd2F5c0FjY2VwdHNDdXN0b21Sb290cykKKyAgICBfcmVuZGVyQmFzZWxpbmVS
ZXZpc2lvblRhYmxlKHBsYXRmb3JtLCByZXBvc2l0b3J5R3JvdXBzLCByZXF1aXJlZFJlcG9zaXRv
cmllcywgcmVwb3NpdG9yeUdyb3VwQnlDb25maWd1cmF0aW9uLCBhbHdheXNBY2NlcHRzQ3VzdG9t
Um9vdHMsIGNvbW1pdFNldE1hcCwgY29tbWl0QnlSZXBvc2l0b3J5QW5kUmV2aXNpb24pCiAgICAg
ewogICAgICAgICBsZXQgY3VycmVudEdyb3VwID0gcmVwb3NpdG9yeUdyb3VwQnlDb25maWd1cmF0
aW9uWydCYXNlbGluZSddOwogICAgICAgICBjb25zdCBvcHRpb25hbFJlcG9zaXRvcnlMaXN0ID0g
dGhpcy5fb3B0aW9uYWxSZXBvc2l0b3J5TGlzdChjdXJyZW50R3JvdXAsIHJlcXVpcmVkUmVwb3Np
dG9yaWVzKTsKICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgnYmFzZWxp
bmUtcmV2aXNpb24tdGFibGUnKSwKLSAgICAgICAgICAgIHRoaXMuX2J1aWxkUmV2aXNpb25UYWJs
ZSgnQmFzZWxpbmUnLCByZXBvc2l0b3J5R3JvdXBzLCBjdXJyZW50R3JvdXAsIHBsYXRmb3JtLCBy
ZXF1aXJlZFJlcG9zaXRvcmllcywgb3B0aW9uYWxSZXBvc2l0b3J5TGlzdCwgYWx3YXlzQWNjZXB0
c0N1c3RvbVJvb3RzKSk7CisgICAgICAgICAgICB0aGlzLl9idWlsZFJldmlzaW9uVGFibGUoJ0Jh
c2VsaW5lJywgcmVwb3NpdG9yeUdyb3VwcywgY3VycmVudEdyb3VwLCBwbGF0Zm9ybSwgcmVxdWly
ZWRSZXBvc2l0b3JpZXMsCisgICAgICAgICAgICAgICAgb3B0aW9uYWxSZXBvc2l0b3J5TGlzdCxh
bHdheXNBY2NlcHRzQ3VzdG9tUm9vdHMsIGNvbW1pdFNldE1hcFsnQmFzZWxpbmUnXSwgY29tbWl0
QnlSZXBvc2l0b3J5QW5kUmV2aXNpb24pKTsKICAgICB9CiAKLSAgICBfcmVuZGVyQ29tcGFyaXNv
blJldmlzaW9uVGFibGUocGxhdGZvcm0sIHJlcG9zaXRvcnlHcm91cHMsIHJlcXVpcmVkUmVwb3Np
dG9yaWVzLCByZXBvc2l0b3J5R3JvdXBCeUNvbmZpZ3VyYXRpb24sIGFsd2F5c0FjY2VwdHNDdXN0
b21Sb290cykKKyAgICBfcmVuZGVyQ29tcGFyaXNvblJldmlzaW9uVGFibGUocGxhdGZvcm0sIHJl
cG9zaXRvcnlHcm91cHMsIHJlcXVpcmVkUmVwb3NpdG9yaWVzLCByZXBvc2l0b3J5R3JvdXBCeUNv
bmZpZ3VyYXRpb24sIGFsd2F5c0FjY2VwdHNDdXN0b21Sb290cywgY29tbWl0U2V0TWFwLCBjb21t
aXRCeVJlcG9zaXRvcnlBbmRSZXZpc2lvbikKICAgICB7CiAgICAgICAgIGxldCBjdXJyZW50R3Jv
dXAgPSByZXBvc2l0b3J5R3JvdXBCeUNvbmZpZ3VyYXRpb25bJ0NvbXBhcmlzb24nXTsKICAgICAg
ICAgY29uc3Qgb3B0aW9uYWxSZXBvc2l0b3J5TGlzdCA9IHRoaXMuX29wdGlvbmFsUmVwb3NpdG9y
eUxpc3QoY3VycmVudEdyb3VwLCByZXF1aXJlZFJlcG9zaXRvcmllcyk7CiAgICAgICAgIHRoaXMu
cmVuZGVyUmVwbGFjZSh0aGlzLmNvbnRlbnQoJ2NvbXBhcmlzb24tcmV2aXNpb24tdGFibGUnKSwK
LSAgICAgICAgICAgIHRoaXMuX2J1aWxkUmV2aXNpb25UYWJsZSgnQ29tcGFyaXNvbicsIHJlcG9z
aXRvcnlHcm91cHMsIGN1cnJlbnRHcm91cCwgcGxhdGZvcm0sIHJlcXVpcmVkUmVwb3NpdG9yaWVz
LCBvcHRpb25hbFJlcG9zaXRvcnlMaXN0LCBhbHdheXNBY2NlcHRzQ3VzdG9tUm9vdHMpKTsKKyAg
ICAgICAgICAgIHRoaXMuX2J1aWxkUmV2aXNpb25UYWJsZSgnQ29tcGFyaXNvbicsIHJlcG9zaXRv
cnlHcm91cHMsIGN1cnJlbnRHcm91cCwgcGxhdGZvcm0sIHJlcXVpcmVkUmVwb3NpdG9yaWVzLAor
ICAgICAgICAgICAgICAgIG9wdGlvbmFsUmVwb3NpdG9yeUxpc3QsIGFsd2F5c0FjY2VwdHNDdXN0
b21Sb290cywgY29tbWl0U2V0TWFwWydDb21wYXJpc29uJ10sIGNvbW1pdEJ5UmVwb3NpdG9yeUFu
ZFJldmlzaW9uKSk7CiAgICAgfQogCiAgICAgX29wdGlvbmFsUmVwb3NpdG9yeUxpc3QoY3VycmVu
dEdyb3VwLCByZXF1aXJlZFJlcG9zaXRvcmllcykKQEAgLTQxMSwxMCArNDM3LDkgQEAgY2xhc3Mg
Q3VzdG9tQW5hbHlzaXNUYXNrQ29uZmlndXJhdG9yIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAg
ICAgICAgIHJldHVybiBSZXBvc2l0b3J5LnNvcnRCeU5hbWVQcmVmZXJyaW5nT25lc1dpdGhVUkwo
Y3VycmVudEdyb3VwLnJlcG9zaXRvcmllcygpLmZpbHRlcigocmVwb3NpdG9yeSkgPT4gIXJlcXVp
cmVkUmVwb3NpdG9yaWVzLmluY2x1ZGVzKHJlcG9zaXRvcnkpKSk7CiAgICAgfQogCi0gICAgX2J1
aWxkUmV2aXNpb25UYWJsZShjb25maWd1cmF0aW9uTmFtZSwgcmVwb3NpdG9yeUdyb3VwcywgY3Vy
cmVudEdyb3VwLCBwbGF0Zm9ybSwgcmVxdWlyZWRSZXBvc2l0b3JpZXMsIG9wdGlvbmFsUmVwb3Np
dG9yeUxpc3QsIGFsd2F5c0FjY2VwdHNDdXN0b21Sb290cykKKyAgICBfYnVpbGRSZXZpc2lvblRh
YmxlKGNvbmZpZ3VyYXRpb25OYW1lLCByZXBvc2l0b3J5R3JvdXBzLCBjdXJyZW50R3JvdXAsIHBs
YXRmb3JtLCByZXF1aXJlZFJlcG9zaXRvcmllcywgb3B0aW9uYWxSZXBvc2l0b3J5TGlzdCwgYWx3
YXlzQWNjZXB0c0N1c3RvbVJvb3RzLCBjb21taXRTZXQsIGNvbW1pdEJ5UmVwb3NpdG9yeUFuZFJl
dmlzaW9uKQogICAgIHsKICAgICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3Jl
YXRlRWxlbWVudDsKLSAgICAgICAgY29uc3QgbGluayA9IENvbXBvbmVudEJhc2UuY3JlYXRlTGlu
azsKIAogICAgICAgICBjb25zdCBjdXN0b21Sb290c1RCb2R5ID0gZWxlbWVudCgndGJvZHknLCBb
CiAgICAgICAgICAgICBlbGVtZW50KCd0cicsIFsKQEAgLTQyMyw2ICs0NDgsMjEgQEAgY2xhc3Mg
Q3VzdG9tQW5hbHlzaXNUYXNrQ29uZmlndXJhdG9yIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAg
ICAgICAgICAgICBdKSwKICAgICAgICAgXSk7CiAKKyAgICAgICAgY29uc3QgY29tbWl0c1dpdGhU
ZXN0YWJpbGl0eVdhcm5pbmcgPSBbXTsKKyAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9m
IGNvbW1pdFNldCA/IGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKSA6IFtdKSB7CisgICAgICAgICAg
ICBjb25zdCByZXZpc2lvbiA9IGNvbW1pdFNldC5yZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3Np
dG9yeSk7CisgICAgICAgICAgICBpZiAoIWNvbW1pdEJ5UmVwb3NpdG9yeUFuZFJldmlzaW9uLmhh
cyhyZXBvc2l0b3J5KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
Y29uc3QgY29tbWl0QnlSZXZpc2lvbiA9IGNvbW1pdEJ5UmVwb3NpdG9yeUFuZFJldmlzaW9uLmdl
dChyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIGlmICghY29tbWl0QnlSZXZpc2lvbi5oYXMocmV2
aXNpb24pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBjb25zdCBj
b21taXQgPSBjb21taXRCeVJldmlzaW9uLmdldChyZXZpc2lvbik7CisgICAgICAgICAgICBpZiAo
Y29tbWl0ICYmIGNvbW1pdC50ZXN0YWJpbGl0eVdhcm5pbmcoKSkKKyAgICAgICAgICAgICAgICBj
b21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZy5wdXNoKGNvbW1pdCk7CisgICAgICAgIH0KKwog
ICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgZWxlbWVudCgndGJvZHknLAogICAgICAgICAg
ICAgICAgIHJlcXVpcmVkUmVwb3NpdG9yaWVzLm1hcCgocmVwb3NpdG9yeSkgPT4gewpAQCAtNDUw
LDcgKzQ5MCw5IEBAIGNsYXNzIEN1c3RvbUFuYWx5c2lzVGFza0NvbmZpZ3VyYXRvciBleHRlbmRz
IENvbXBvbmVudEJhc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAg
ICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICldOworICAgICAg
ICAgICAgKSwKKyAgICAgICAgICAgICFjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZy5sZW5n
dGggPyBbXSA6IGVsZW1lbnQoJ3Rib2R5Jywge2lkOiAndGVzdGFiaWxpdHktd2FybmluZy10YWJs
ZSd9LCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZy5tYXAoKGNvbW1pdCkgPT4KKyAgICAg
ICAgICAgICAgICBlbGVtZW50KCd0cicsIGVsZW1lbnQoJ3RkJywge2NvbHNwYW46IDJ9LCBgJHtj
b21taXQucmVwb3NpdG9yeSgpLm5hbWUoKX0gLSAke2NvbW1pdC5sYWJlbCgpfTogJHtjb21taXQu
dGVzdGFiaWxpdHlXYXJuaW5nKCl9YCkpKSldOwogICAgIH0KIAogICAgIF9idWlsZFJlcG9zaXRv
cnlHcm91cExpc3QocmVwb3NpdG9yeUdyb3VwcywgY3VycmVudEdyb3VwLCBjb25maWd1cmF0aW9u
TmFtZSkKQEAgLTQ4Myw3ICs1MjUsNyBAQCBjbGFzcyBDdXN0b21BbmFseXNpc1Rhc2tDb25maWd1
cmF0b3IgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICB7CiAgICAgICAgIGNvbnN0IHJldmlz
aW9uID0gdGhpcy5fc3BlY2lmaWVkUmV2aXNpb25zW2NvbmZpZ3VyYXRpb25OYW1lXS5nZXQocmVw
b3NpdG9yeSkgfHwgJyc7CiAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNy
ZWF0ZUVsZW1lbnQ7Ci0gICAgICAgIGNvbnN0IGlucHV0ID0gZWxlbWVudCgnaW5wdXQnLCB7dmFs
dWU6IHJldmlzaW9uLCBvbmlucHV0OiAoKSA9PiB7CisgICAgICAgIGNvbnN0IGlucHV0ID0gZWxl
bWVudCgnaW5wdXQnLCB7dmFsdWU6IHJldmlzaW9uLCBvbmNoYW5nZTogKCkgPT4gewogICAgICAg
ICAgICAgdW5tb2RpZmllZElucHV0ID0gbnVsbDsKICAgICAgICAgICAgIHRoaXMuX3NwZWNpZmll
ZFJldmlzaW9uc1tjb25maWd1cmF0aW9uTmFtZV0uc2V0KHJlcG9zaXRvcnksIGlucHV0LnZhbHVl
KTsKICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNvbW1pdFNldE1hcCgpOwpAQCAtNjc0LDYgKzcx
NiwxNyBAQCBjbGFzcyBDdXN0b21BbmFseXNpc1Rhc2tDb25maWd1cmF0b3IgZXh0ZW5kcyBDb21w
b25lbnRCYXNlIHsKICAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMnJlbTsKICAgICAgICAg
ICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLnJldmlzaW9uLXRhYmxlICN0ZXN0YWJpbGl0eS13YXJuaW5nLXRhYmxlLAorICAgICAgICAg
ICAgLnJldmlzaW9uLXRhYmxlICN0ZXN0YWJpbHR5LXdhcm5pbmctdGFibGUgdHIsCisgICAgICAg
ICAgICAucmV2aXNpb24tdGFibGUgI3Rlc3RhYmlsaXR5LXdhcm5pbmctdGFibGUgdGQgeworICAg
ICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgY29sb3I6ICNj
MzM7CisgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgICAgICAgICAg
ICAgYm9yZGVyOiAwcHg7CisgICAgICAgICAgICAgICAgcGFkZGluZzogMHB4OworICAgICAgICAg
ICAgICAgIGZvbnQtc2l6ZTogMC45cmVtOworICAgICAgICAgICAgfQogYDsKICAgICB9CiB9CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMv
Y3VzdG9taXphYmxlLXRlc3QtZ3JvdXAtZm9ybS5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjMvY29tcG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3JtLmpzCmlu
ZGV4IGExY2QyZGMzZTM3OTdjZmRhOWZmYjYwMjBiMDhhMDJlYWI2MmUwZDIuLjBjNzYwZDBmNzcx
M2I0MzgwOTg3NDFkNTIyOGExZTcxNjI1OTI0YTIgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1m
b3JtLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50
cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3JtLmpzCkBAIC0xMzUsNyArMTM1LDMyIEBAIGNs
YXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAg
ICAgICAgICAgIGVsZW1lbnQoJ3RoZWFkJywKICAgICAgICAgICAgICAgICBlbGVtZW50KCd0cics
CiAgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50KCd0ZCcsIHtjb2xzcGFuOiAyfSwgJ1JlcG9z
aXRvcnknKSwgY29tbWl0U2V0TGFiZWxzLm1hcCgobGFiZWwpID0+IGVsZW1lbnQoJ3RkJywge2Nv
bHNwYW46IGNvbW1pdFNldExhYmVscy5sZW5ndGggKyAxfSwgbGFiZWwpKSwgZWxlbWVudCgndGQn
KV0pKSwKLSAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFRhYmxlQm9keUxpc3QocmVwb3NpdG9y
eUxpc3QsIGNvbW1pdFNldE1hcCwgb3duZWRSZXBvc2l0b3JpZXNCeVJlcG9zaXRvcnksIHRoaXMu
X2hhc0luY29tcGxldGVPd25lZFJlcG9zaXRvcnksIHVuY3VzdG9taXplZENvbW1pdFNldE1hcCld
KTsKKyAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFRhYmxlQm9keUxpc3QocmVwb3NpdG9yeUxp
c3QsIGNvbW1pdFNldE1hcCwgb3duZWRSZXBvc2l0b3JpZXNCeVJlcG9zaXRvcnksIHRoaXMuX2hh
c0luY29tcGxldGVPd25lZFJlcG9zaXRvcnksIHVuY3VzdG9taXplZENvbW1pdFNldE1hcCksCisg
ICAgICAgICAgICB0aGlzLl9jb25zdHJ1Y3RUZXN0YWJpbGl0eVdhcm5pbmdUYWJsZShjb21taXRT
ZXRNYXApXSk7CisgICAgfQorCisgICAgX2NvbnN0cnVjdFRlc3RhYmlsaXR5V2FybmluZ1RhYmxl
KGNvbW1pdFNldE1hcCkKKyAgICB7CisgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBDb21wb25lbnRC
YXNlLmNyZWF0ZUVsZW1lbnQ7CisKKyAgICAgICAgbGV0IGhhc0NvbW1pdFdpdGhXYXJuaW5nID0g
ZmFsc2U7CisgICAgICAgIGNvbnN0IGNvbW1pdFNldHMgPSBBcnJheS5mcm9tKGNvbW1pdFNldE1h
cC52YWx1ZXMoKSk7CisgICAgICAgIGZvciAoY29uc3QgY29tbWl0U2V0IG9mIGNvbW1pdFNldHMp
IHsKKyAgICAgICAgICAgIGNvbW1pdFNldC5jb21taXRzKCkuZm9yRWFjaChhc3luYyAoY29tbWl0
KSA9PiBhd2FpdCBDb21taXRMb2cuZmV0Y2hGb3JTaW5nbGVSZXZpc2lvbihjb21taXQucmVwb3Np
dG9yeSgpLCBjb21taXQucmV2aXNpb24oKSkpOworICAgICAgICAgICAgaGFzQ29tbWl0V2l0aFdh
cm5pbmcgfD0gISFjb21taXRTZXQuY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFoYXNDb21taXRXaXRoV2FybmluZykKKyAgICAgICAgICAg
IHJldHVybiBbXTsKKworCisgICAgICAgIGNvbnN0IHRlc3RhYmlsaXR5V2FybmluZ1Jvd3MgPSBb
XTsKKyAgICAgICAgZm9yIChjb25zdCBjb21taXRTZXQgb2YgY29tbWl0U2V0TWFwLnZhbHVlcygp
KSB7CisgICAgICAgICAgICBjb25zdCByb3dzID0gY29tbWl0U2V0LmNvbW1pdHNXaXRoVGVzdGFi
aWxpdHlXYXJuaW5ncygpLm1hcCgoY29tbWl0KSA9PgorICAgICAgICAgICAgICAgIGVsZW1lbnQo
J3RyJywge2NsYXNzOiAndGVzdGFiaWxpdHktd2FybmluZyd9LCBgJHtjb21taXQucmVwb3NpdG9y
eSgpLm5hbWUoKX0gLSAke2NvbW1pdC5sYWJlbCgpfTogJHtjb21taXQudGVzdGFiaWxpdHlXYXJu
aW5nKCl9YCkpOworICAgICAgICAgICAgdGVzdGFiaWxpdHlXYXJuaW5nUm93cy5wdXNoKGVsZW1l
bnQoJ3RkJywge2NvbHNwYW46IGNvbW1pdFNldE1hcC5zaXplICsgMX0sIHJvd3MpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBlbGVtZW50KCd0Ym9keScsIGVsZW1lbnQoJ3RyJywgW2Vs
ZW1lbnQoJ3RkJywge2NvbHNwYW46IDJ9KSwgdGVzdGFiaWxpdHlXYXJuaW5nUm93cywgZWxlbWVu
dCgndGQnKV0pKTsKICAgICB9CiAKICAgICBfY29uc3RydWN0VGFibGVCb2R5TGlzdChyZXBvc2l0
b3J5TGlzdCwgY29tbWl0U2V0TWFwLCBvd25lZFJlcG9zaXRvcmllc0J5UmVwb3NpdG9yeSwgaGFz
SW5jb21wbGV0ZU93bmVkUmVwb3NpdG9yeSwgdW5jdXN0b21pemVkQ29tbWl0U2V0TWFwKQpAQCAt
MjU1LDggKzI4MCw4IEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBU
ZXN0R3JvdXBGb3JtIHsKICAgICAgICAgICAgIG9uY2hhbmdlOiAoKSA9PiB7CiAgICAgICAgICAg
ICAgICAgaWYgKG93bmVyUmVwb3NpdG9yeSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgICAgICAgICAgY29tbWl0U2V0TWFwLmdldChjb2x1bW5MYWJlbCkudXBkYXRlUmV2
aXNpb25Gb3JPd25lclJlcG9zaXRvcnkocmVwb3NpdG9yeSwgcmV2aXNpb25FZGl0b3IudmFsdWUp
LmNhdGNoKAorICAgICAgICAgICAgICAgIGNvbW1pdFNldE1hcC5nZXQoY29sdW1uTGFiZWwpLnVw
ZGF0ZVJldmlzaW9uRm9yT3duZXJSZXBvc2l0b3J5KHJlcG9zaXRvcnksIHJldmlzaW9uRWRpdG9y
LnZhbHVlKS50aGVuKAorICAgICAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLmVucXVldWVUb1Jl
bmRlcigpLAogICAgICAgICAgICAgICAgICAgICAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBhbGVydChgIiR7cmV2aXNpb25FZGl0b3IudmFsdWV9IiBkb2VzIG5vdCBleGlzdCBpbiAi
JHtyZXBvc2l0b3J5Lm5hbWUoKX0iLmApOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNp
b25FZGl0b3IudmFsdWUgPSByZXZpc2lvbjsKQEAgLTI3OCw2ICszMDMsNyBAQCBjbGFzcyBDdXN0
b21pemFibGVUZXN0R3JvdXBGb3JtIGV4dGVuZHMgVGVzdEdyb3VwRm9ybSB7CiAgICAgICAgICAg
ICAgICAgICAgIHJldmlzaW9uRWRpdG9yLnZhbHVlID0gdW5jdXN0b21pemVkQ29tbWl0ID8gdW5j
dXN0b21pemVkQ29tbWl0LnJldmlzaW9uKCkgOiAnJzsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHVuY3VzdG9taXplZENvbW1pdCAmJiB1bmN1c3RvbWl6ZWRDb21taXQub3duZXJDb21taXQoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX293bmVyUmV2aXNpb25NYXAuZ2V0KGNvbHVt
bkxhYmVsKS5zZXQocmVwb3NpdG9yeSwgdW5jdXN0b21pemVkQ29tbWl0Lm93bmVyQ29tbWl0KCku
cmV2aXNpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7
CiAgICAgICAgICAgICAgICAgfX0pOwogICAgICAgICAgICAgbm9kZXMucHVzaChlbGVtZW50KCd0
ZCcsIGVsZW1lbnQoJ2xhYmVsJywgW3JhZGlvQnV0dG9uLCBsYWJlbFRvQ2hvb3NlXSkpKTsKICAg
ICAgICAgfQpAQCAtMzM2LDYgKzM2MiwxMSBAQCBjbGFzcyBDdXN0b21pemFibGVUZXN0R3JvdXBG
b3JtIGV4dGVuZHMgVGVzdEdyb3VwRm9ybSB7CiAgICAgICAgICAgICAjbm90aWZ5LW9uLWNvbXBs
ZXRpb24tY2hlY2tib3ggewogICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwLjRyZW07CiAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICNjdXN0b20tdGFibGUgdHIudGVzdGFiaWxpdHkt
d2FybmluZyB7CisgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKKyAgICAgICAgICAg
ICAgICBjb2xvcjogI2MzMzsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGA7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9j
b21taXQtbG9nLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMv
Y29tbWl0LWxvZy5qcwppbmRleCBjMmRiNjNiMDkxOTIyNTk5NGI2MjAyZjNjOGZmOGQzZTVjYzU0
MjY0Li45MDgyMTAzNWQ0MzgwMmMwYjU0YWQ0NTRmYmUwZTM2YWI2MzYwZjNlIDEwMDY0NAotLS0g
YS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpz
CisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1s
b2cuanMKQEAgLTMxLDExICszMSwxNCBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBEYXRhTW9k
ZWxPYmplY3QgewogICAgICAgICAgICAgdGhpcy5fcmF3RGF0YS5vd25zQ29tbWl0cyA9IHJhd0Rh
dGEub3duc0NvbW1pdHM7CiAgICAgICAgIGlmIChyYXdEYXRhLm9yZGVyKQogICAgICAgICAgICAg
dGhpcy5fcmF3RGF0YS5vcmRlciA9IHJhd0RhdGEub3JkZXI7CisgICAgICAgIGlmIChyYXdEYXRh
LnRlc3RhYmlsaXR5V2FybmluZykKKyAgICAgICAgICAgIHRoaXMuX3Jhd0RhdGEudGVzdGFiaWxp
dHlXYXJuaW5nID0gcmF3RGF0YS50ZXN0YWJpbGl0eVdhcm5pbmc7CiAgICAgfQogCiAgICAgcmVw
b3NpdG9yeSgpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnk7IH0KICAgICB0aW1lKCkgeyByZXR1
cm4gbmV3IERhdGUodGhpcy5fcmF3RGF0YVsndGltZSddKTsgfQogICAgIGhhc0NvbW1pdFRpbWUo
KSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWyd0aW1lJ10gPiAwICYmIHRoaXMuX3Jhd0RhdGFbJ3Rp
bWUnXSAhPSBudWxsOyB9CisgICAgdGVzdGFiaWxpdHlXYXJuaW5nKCkgeyByZXR1cm4gdGhpcy5f
cmF3RGF0YVsndGVzdGFiaWxpdHlXYXJuaW5nJ107IH0KICAgICBhdXRob3IoKSB7IHJldHVybiB0
aGlzLl9yYXdEYXRhWydhdXRob3JOYW1lJ107IH0KICAgICByZXZpc2lvbigpIHsgcmV0dXJuIHRo
aXMuX3Jhd0RhdGFbJ3JldmlzaW9uJ107IH0KICAgICBtZXNzYWdlKCkgeyByZXR1cm4gdGhpcy5f
cmF3RGF0YVsnbWVzc2FnZSddOyB9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcwppbmRleCAyOWE5ODI1NmQwZjMxMzJm
MDYzYTcwMWE3YzUyYjExYzAyYWY2OTY2Li42YzA1NDRkOGM0NzNlZDZkZmU3ZjhjZTE4ZGE5MDE3
ZDUwZmNhNjhhIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L21vZGVscy9jb21taXQtc2V0LmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKQEAgLTcxLDYgKzcxLDggQEAgY2xhc3MgQ29tbWl0
U2V0IGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICBvd25lckNvbW1pdEZvclJlcG9zaXRv
cnkocmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeVRvQ29tbWl0T3duZXJNYXAu
Z2V0KHJlcG9zaXRvcnkpOyB9CiAgICAgdG9wTGV2ZWxSZXBvc2l0b3JpZXMoKSB7IHJldHVybiBS
ZXBvc2l0b3J5LnNvcnRCeU5hbWVQcmVmZXJyaW5nT25lc1dpdGhVUkwodGhpcy5fcmVwb3NpdG9y
aWVzLmZpbHRlcigocmVwb3NpdG9yeSkgPT4gIXRoaXMub3duZXJSZXZpc2lvbkZvclJlcG9zaXRv
cnkocmVwb3NpdG9yeSkpKTsgfQogICAgIG93bmVkUmVwb3NpdG9yaWVzRm9yT3duZXJSZXBvc2l0
b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX293bmVyUmVwb3NpdG9yeVRvT3duZWRSZXBv
c2l0b3JpZXNNYXAuZ2V0KHJlcG9zaXRvcnkpOyB9CisgICAgY29tbWl0c1dpdGhUZXN0YWJpbGl0
eVdhcm5pbmdzKCkgeyByZXR1cm4gdGhpcy5jb21taXRzKCkuZmlsdGVyKChjb21taXQpID0+ICEh
Y29tbWl0LnRlc3RhYmlsaXR5V2FybmluZygpKTsgfQorICAgIGNvbW1pdHMoKSB7IHJldHVybiAg
QXJyYXkuZnJvbSh0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRNYXAudmFsdWVzKCkpOyB9CiAKICAg
ICByZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkKICAgICB7CkBAIC0zODcsNiArMzg5
LDkgQEAgY2xhc3MgSW50ZXJtZWRpYXRlQ29tbWl0U2V0IHsKICAgICAgICAgcmV0dXJuIFByb21p
c2UuYWxsKGZldGNoaW5nUHJvbWlzZXMpOwogICAgIH0KIAorICAgIGNvbW1pdHNXaXRoVGVzdGFi
aWxpdHlXYXJuaW5ncygpIHsgcmV0dXJuIHRoaXMuY29tbWl0cygpLmZpbHRlcigoY29tbWl0KSA9
PiAhIWNvbW1pdC50ZXN0YWJpbGl0eVdhcm5pbmcoKSk7IH0KKyAgICBjb21taXRzKCkgeyByZXR1
cm4gIEFycmF5LmZyb20odGhpcy5fY29tbWl0QnlSZXBvc2l0b3J5LnZhbHVlcygpKTsgfQorCiAg
ICAgX2ZldGNoQ29tbWl0TG9nQW5kT3duZWRDb21taXRzKHJlcG9zaXRvcnksIHJldmlzaW9uKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIENvbW1pdExvZy5mZXRjaEZvclNpbmdsZVJldmlzaW9uKHJl
cG9zaXRvcnksIHJldmlzaW9uKS50aGVuKChjb21taXRzKSA9PiB7CmRpZmYgLS1naXQgYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL2FwaS11cGRhdGUtY29tbWl0LXRlc3Rh
YmlsaXR5LXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0cy9h
cGktdXBkYXRlLWNvbW1pdC10ZXN0YWJpbGl0eS10ZXN0cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNmU3MjA5
MGJkMjg5ZTNjZWI5NWY3MzJmMjExYWE3M2QzZjU5YTRmCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0cy9hcGktdXBkYXRlLWNvbW1pdC10ZXN0
YWJpbGl0eS10ZXN0cy5qcwpAQCAtMCwwICsxLDE1OSBAQAorJ3VzZSBzdHJpY3QnOworCitjb25z
dCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKKworY29uc3QgVGVzdFNlcnZlciA9IHJlcXVp
cmUoJy4vcmVzb3VyY2VzL3Rlc3Qtc2VydmVyLmpzJyk7Citjb25zdCBhZGRTbGF2ZUZvclJlcG9y
dCA9IHJlcXVpcmUoJy4vcmVzb3VyY2VzL2NvbW1vbi1vcGVyYXRpb25zLmpzJykuYWRkU2xhdmVG
b3JSZXBvcnQ7Citjb25zdCBwcmVwYXJlU2VydmVyVGVzdCA9IHJlcXVpcmUoJy4vcmVzb3VyY2Vz
L2NvbW1vbi1vcGVyYXRpb25zLmpzJykucHJlcGFyZVNlcnZlclRlc3Q7Citjb25zdCBhc3NlcnRU
aHJvd3MgPSByZXF1aXJlKCcuL3Jlc291cmNlcy9jb21tb24tb3BlcmF0aW9ucy5qcycpLmFzc2Vy
dFRocm93czsKKworZGVzY3JpYmUoIi9hcGkvdXBkYXRlLWNvbW1pdC10ZXN0YWJpbGl0eS8iLCBm
dW5jdGlvbiAoKSB7CisgICAgcHJlcGFyZVNlcnZlclRlc3QodGhpcyk7CisKKyAgICBjb25zdCBz
dWJ2ZXJzaW9uQ29tbWl0cyA9IHsKKyAgICAgICAgInNsYXZlTmFtZSI6ICJzb21lU2xhdmUiLAor
ICAgICAgICAic2xhdmVQYXNzd29yZCI6ICJzb21lUGFzc3dvcmQiLAorICAgICAgICAiY29tbWl0
cyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAicmVwb3NpdG9yeSI6ICJXZWJL
aXQiLAorICAgICAgICAgICAgICAgICJyZXZpc2lvbiI6ICIyMTA5NDgiLAorICAgICAgICAgICAg
ICAgICJ0aW1lIjogIjIwMTctMDEtMjBUMDI6NTI6MzQuNTc3WiIsCisgICAgICAgICAgICAgICAg
ImF1dGhvciI6IHsibmFtZSI6ICJaYWxhbiBCdWp0YXMiLCAiYWNjb3VudCI6ICJ6YWxhbkBhcHBs
ZS5jb20ifSwKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhIG1lc3NhZ2UiLAorICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAicmVwb3NpdG9yeSI6ICJX
ZWJLaXQiLAorICAgICAgICAgICAgICAgICJyZXZpc2lvbiI6ICIyMTA5NDkiLAorICAgICAgICAg
ICAgICAgICJ0aW1lIjogIjIwMTctMDEtMjBUMDM6MjM6NTAuNjQ1WiIsCisgICAgICAgICAgICAg
ICAgImF1dGhvciI6IHsibmFtZSI6ICJDaHJpcyBEdW1leiIsICJhY2NvdW50IjogImNkdW1lekBh
cHBsZS5jb20ifSwKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJzb21lIG1lc3NhZ2UiLAor
ICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfTsKKworICAgIGNvbnN0IGNvbW1pdFRlc3Rh
YmlsaXR5VXBkYXRlID0geworICAgICAgICAic2xhdmVOYW1lIjogInNvbWVTbGF2ZSIsCisgICAg
ICAgICJzbGF2ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJjb21taXRzIjog
WworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIs
CisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0OCIsCisgICAgICAgICAgICAgICAg
InRlc3RhYmlsaXR5V2FybmluZyI6ICJCcmVha3MgYnVpbGRzIgorICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAicmVwb3NpdG9yeSI6ICJXZWJLaXQiLAorICAg
ICAgICAgICAgICAgICJyZXZpc2lvbiI6ICIyMTA5NDkiLAorICAgICAgICAgICAgICAgICJ0ZXN0
YWJpbGl0eVdhcm5pbmciOiAiQ3Jhc2hlcyBXZWJLaXQiCisgICAgICAgICAgICB9CisgICAgICAg
IF0KKyAgICB9OworCisgICAgY29uc3QgY29tbWl0VGVzdGFiaWxpdHlVcGRhdGVXaXRoTWlzc2lu
Z1JldmlzaW9uID0geworICAgICAgICAic2xhdmVOYW1lIjogInNvbWVTbGF2ZSIsCisgICAgICAg
ICJzbGF2ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJjb21taXRzIjogWwor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIsCisg
ICAgICAgICAgICAgICAgInRlc3RhYmlsaXR5V2FybmluZyI6ICJCcmVha3MgYnVpbGRzIgorICAg
ICAgICAgICAgfQorICAgICAgICBdCisgICAgfTsKKworICAgIGNvbnN0IGNvbW1pdFRlc3RhYmls
aXR5VXBkYXRlV2l0aE1pc3NpbmdSZXBvc2l0b3J5ID0geworICAgICAgICAic2xhdmVOYW1lIjog
InNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisg
ICAgICAgICJjb21taXRzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJyZXZp
c2lvbiI6ICIyMTA5NDgiLAorICAgICAgICAgICAgICAgICJ0ZXN0YWJpbGl0eVdhcm5pbmciOiAi
QnJlYWtzIGJ1aWxkcyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH07CisKKyAgICBj
b25zdCBjb21taXRUZXN0YWJpbGl0eVVwZGF0ZVdpdGhNaXNzaW5nVGVzdGFiaWxpdHlXYXJuaW5n
ID0geworICAgICAgICAic2xhdmVOYW1lIjogInNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2ZVBh
c3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJjb21taXRzIjogWworICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAgICAgICAg
ICAgICAgInJldmlzaW9uIjogIjIxMDk0OCIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAg
IH07CisKKyAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCAiTWlzc2luZ1JldmlzaW9uIiBpZiBjb21t
aXQgdXBkYXRlIGRvZXMgbm90IGhhdmUgY29tbWl0IHJldmlzaW9uIHNwZWNpZmllZCcsIGFzeW5j
ICgpID0+IHsKKyAgICAgICAgYXdhaXQgYWRkU2xhdmVGb3JSZXBvcnQoc3VidmVyc2lvbkNvbW1p
dHMpOworICAgICAgICBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLnBvc3RKU09OKCcvYXBp
L3JlcG9ydC1jb21taXRzLycsIHN1YnZlcnNpb25Db21taXRzKTsKKyAgICAgICAgbGV0IHJlc3Vs
dCA9IGF3YWl0IFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL1dl
YktpdC8nKTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVzJ10sICdPSycpOwor
ICAgICAgICBsZXQgY29tbWl0cyA9IHJlc3VsdFsnY29tbWl0cyddOworICAgICAgICBhc3NlcnQu
ZXF1YWwoY29tbWl0cy5sZW5ndGgsIDIpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sw
XS50ZXN0YWJpbGl0eVdhcm5pbmcsIG51bGwpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0
c1sxXS50ZXN0YWJpbGl0eVdhcm5pbmcsIG51bGwpOworCisgICAgICAgIHJlc3VsdCA9IGF3YWl0
IFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkucG9zdEpTT04oJy9hcGkvdXBkYXRlLWNvbW1pdC10ZXN0
YWJpbGl0eS8nLCBjb21taXRUZXN0YWJpbGl0eVVwZGF0ZVdpdGhNaXNzaW5nUmV2aXNpb24pOwor
ICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0WydzdGF0dXMnXSwgJ01pc3NpbmdSZXZpc2lvbicp
OworICAgICAgICByZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04o
Jy9hcGkvY29tbWl0cy9XZWJLaXQvJyk7CisgICAgICAgIGNvbW1pdHMgPSByZXN1bHRbJ2NvbW1p
dHMnXTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHMubGVuZ3RoLCAyKTsKKyAgICAgICAg
YXNzZXJ0LmVxdWFsKGNvbW1pdHNbMF0udGVzdGFiaWxpdHlXYXJuaW5nLCBudWxsKTsKKyAgICAg
ICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNbMV0udGVzdGFiaWxpdHlXYXJuaW5nLCBudWxsKTsKKyAg
ICB9KTsKKworICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoICJNaXNzaW5nUmVwb3NpdG9yeU5hbWUi
IGlmIGNvbW1pdCB1cGRhdGUgZG9lcyBub3QgaGF2ZSBjb21taXQgcmV2aXNpb24gc3BlY2lmaWVk
JywgYXN5bmMgKCkgPT4geworICAgICAgICBhd2FpdCBhZGRTbGF2ZUZvclJlcG9ydChzdWJ2ZXJz
aW9uQ29tbWl0cyk7CisgICAgICAgIGF3YWl0IFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkucG9zdEpT
T04oJy9hcGkvcmVwb3J0LWNvbW1pdHMvJywgc3VidmVyc2lvbkNvbW1pdHMpOworICAgICAgICBs
ZXQgcmVzdWx0ID0gYXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2Nv
bW1pdHMvV2ViS2l0LycpOworICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0WydzdGF0dXMnXSwg
J09LJyk7CisgICAgICAgIGxldCBjb21taXRzID0gcmVzdWx0Wydjb21taXRzJ107CisgICAgICAg
IGFzc2VydC5lcXVhbChjb21taXRzLmxlbmd0aCwgMik7CisgICAgICAgIGFzc2VydC5lcXVhbChj
b21taXRzWzBdLnRlc3RhYmlsaXR5V2FybmluZywgbnVsbCk7CisgICAgICAgIGFzc2VydC5lcXVh
bChjb21taXRzWzFdLnRlc3RhYmlsaXR5V2FybmluZywgbnVsbCk7CisKKyAgICAgICAgcmVzdWx0
ID0gYXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5wb3N0SlNPTignL2FwaS91cGRhdGUtY29t
bWl0LXRlc3RhYmlsaXR5LycsIGNvbW1pdFRlc3RhYmlsaXR5VXBkYXRlV2l0aE1pc3NpbmdSZXBv
c2l0b3J5KTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVzJ10sICdNaXNzaW5n
UmVwb3NpdG9yeU5hbWUnKTsKKyAgICAgICAgcmVzdWx0ID0gYXdhaXQgVGVzdFNlcnZlci5yZW1v
dGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvV2ViS2l0LycpOworICAgICAgICBjb21taXRz
ID0gcmVzdWx0Wydjb21taXRzJ107CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzLmxlbmd0
aCwgMik7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzBdLnRlc3RhYmlsaXR5V2Fybmlu
ZywgbnVsbCk7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzFdLnRlc3RhYmlsaXR5V2Fy
bmluZywgbnVsbCk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCAiTWlzc2lu
Z1Rlc3RhYmlsaXR5V2FybmluZyIgaWYgY29tbWl0IHVwZGF0ZSBkb2VzIG5vdCBoYXZlIGNvbW1p
dCByZXZpc2lvbiBzcGVjaWZpZWQnLCBhc3luYyAoKSA9PiB7CisgICAgICAgIGF3YWl0IGFkZFNs
YXZlRm9yUmVwb3J0KHN1YnZlcnNpb25Db21taXRzKTsKKyAgICAgICAgYXdhaXQgVGVzdFNlcnZl
ci5yZW1vdGVBUEkoKS5wb3N0SlNPTignL2FwaS9yZXBvcnQtY29tbWl0cy8nLCBzdWJ2ZXJzaW9u
Q29tbWl0cyk7CisgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQ
SSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9XZWJLaXQvJyk7CisgICAgICAgIGFzc2VydC5lcXVh
bChyZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgbGV0IGNvbW1pdHMgPSByZXN1bHRb
J2NvbW1pdHMnXTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHMubGVuZ3RoLCAyKTsKKyAg
ICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNbMF0udGVzdGFiaWxpdHlXYXJuaW5nLCBudWxsKTsK
KyAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNbMV0udGVzdGFiaWxpdHlXYXJuaW5nLCBudWxs
KTsKKworICAgICAgICByZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLnBvc3RK
U09OKCcvYXBpL3VwZGF0ZS1jb21taXQtdGVzdGFiaWxpdHkvJywgY29tbWl0VGVzdGFiaWxpdHlV
cGRhdGVXaXRoTWlzc2luZ1Rlc3RhYmlsaXR5V2FybmluZyk7CisgICAgICAgIGFzc2VydC5lcXVh
bChyZXN1bHRbJ3N0YXR1cyddLCAnTWlzc2luZ1Rlc3RhYmlsaXR5V2FybmluZycpOworICAgICAg
ICByZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29t
bWl0cy9XZWJLaXQvJyk7CisgICAgICAgIGNvbW1pdHMgPSByZXN1bHRbJ2NvbW1pdHMnXTsKKyAg
ICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHMubGVuZ3RoLCAyKTsKKyAgICAgICAgYXNzZXJ0LmVx
dWFsKGNvbW1pdHNbMF0udGVzdGFiaWxpdHlXYXJuaW5nLCBudWxsKTsKKyAgICAgICAgYXNzZXJ0
LmVxdWFsKGNvbW1pdHNbMV0udGVzdGFiaWxpdHlXYXJuaW5nLCBudWxsKTsKKyAgICB9KTsKKwor
ICAgIGl0KCJzaG91bGQgYmUgYWJsZSB0byB1cGRhdGUgY29tbWl0IHRlc3RhYmlsaXR5IHdhcm5p
bmciLCBhc3luYyAoKSA9PiB7CisgICAgICAgIGF3YWl0IGFkZFNsYXZlRm9yUmVwb3J0KHN1YnZl
cnNpb25Db21taXRzKTsKKyAgICAgICAgYXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5wb3N0
SlNPTignL2FwaS9yZXBvcnQtY29tbWl0cy8nLCBzdWJ2ZXJzaW9uQ29tbWl0cyk7CisgICAgICAg
IGxldCByZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkv
Y29tbWl0cy9XZWJLaXQvJyk7CisgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cydd
LCAnT0snKTsKKyAgICAgICAgbGV0IGNvbW1pdHMgPSByZXN1bHRbJ2NvbW1pdHMnXTsKKyAgICAg
ICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHMubGVuZ3RoLCAyKTsKKyAgICAgICAgYXNzZXJ0LmVxdWFs
KGNvbW1pdHNbMF0udGVzdGFiaWxpdHlXYXJuaW5nLCBudWxsKTsKKyAgICAgICAgYXNzZXJ0LmVx
dWFsKGNvbW1pdHNbMV0udGVzdGFiaWxpdHlXYXJuaW5nLCBudWxsKTsKKworICAgICAgICByZXN1
bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLnBvc3RKU09OKCcvYXBpL3VwZGF0ZS1j
b21taXQtdGVzdGFiaWxpdHkvJywgY29tbWl0VGVzdGFiaWxpdHlVcGRhdGUpOworICAgICAgICBh
c3NlcnQuZXF1YWwocmVzdWx0WydzdGF0dXMnXSwgJ09LJyk7CisgICAgICAgIHJlc3VsdCA9IGF3
YWl0IFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL1dlYktpdC8n
KTsKKyAgICAgICAgY29tbWl0cyA9IHJlc3VsdFsnY29tbWl0cyddOworICAgICAgICBhc3NlcnQu
ZXF1YWwoY29tbWl0cy5sZW5ndGgsIDIpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sw
XS50ZXN0YWJpbGl0eVdhcm5pbmcsICdCcmVha3MgYnVpbGRzJyk7CisgICAgICAgIGFzc2VydC5l
cXVhbChjb21taXRzWzFdLnRlc3RhYmlsaXR5V2FybmluZywgJ0NyYXNoZXMgV2ViS2l0Jyk7Cisg
ICAgfSk7Cit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLW9zLWJ1aWxkLWZldGNoZXIt
dGVzdHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLW9z
LWJ1aWxkLWZldGNoZXItdGVzdHMuanMKaW5kZXggYzZmMGRjOTNiYmUzMjg2ODc4Y2E3ZjkwYzlj
NDFjZWZmNTRlYTc3OS4uY2U5ZWFmZGUzZTM3MzE0YjM2MDBlNDFiNzM2MDhmMDhhYTdiYWQxYyAx
MDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0cy90b29scy1v
cy1idWlsZC1mZXRjaGVyLXRlc3RzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9z
ZXJ2ZXItdGVzdHMvdG9vbHMtb3MtYnVpbGQtZmV0Y2hlci10ZXN0cy5qcwpAQCAtMTM0LDM5ICsx
MzQsNDEgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgfSk7
CiAKICAgICBkZXNjcmliZSgnT1NCdWlsZGVyRmV0Y2hlci5fY29tbWl0c0ZvckF2YWlsYWJsZUJ1
aWxkcycsICgpID0+IHsKLSAgICAgICAgaXQoJ3Nob3VsZCBvbmx5IHJldHVybiBjb21taXRzIHdo
b3NlIG9yZGVycyBhcmUgaGlnaGVyIHRoYW4gc3BlY2lmaWVkIG9yZGVyJywgKCkgPT4geworICAg
ICAgICBpdCgnc2hvdWxkIHBhcnNlIHRoZSBjb21tYW5kIG91dHB1dCBhcyBKU09OIGZvcm1hdCcs
IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2Vy
OwogICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcih7fSwgbnVs
bCwgbnVsbCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7CiAgICAgICAgICAgICBjb25zdCB3YWl0
Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigp
OwotICAgICAgICAgICAgY29uc3QgZmV0Y2hDb21taXRzUHJvbWlzZSA9IGZldGNoZXIuX2NvbW1p
dHNGb3JBdmFpbGFibGVCdWlsZHMoJ09TWCcsIFsnbGlzdCcsICdidWlsZDEnXSwgJ15cXC4qJCcs
IDE2MDQwMDAwMDAsIDE2MDYwMDAwMDApOworICAgICAgICAgICAgY29uc3QgZmV0Y2hDb21taXRz
UHJvbWlzZSA9IGZldGNoZXIuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMoWydsaXN0JywgJ2J1
aWxkMSddKTsKIAotICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZS50
aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoTW9ja1N1YnByb2Nlc3Mu
aW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFs
KE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdidWlsZDEn
XSk7Ci0gICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2
ZSgnMTZEMzIxXG4xNkUzMjF6XG5cbjE2RjMyMScpOwotICAgICAgICAgICAgICAgIHJldHVybiBm
ZXRjaENvbW1pdHNQcm9taXNlOwotICAgICAgICAgICAgfSkudGhlbigocmVzdWx0cykgPT4gewot
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRzLmxlbmd0aCwgMik7Ci0gICAgICAg
ICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzBdLCB7cmVwb3NpdG9yeTogJ09TWCcs
IG9yZGVyOiAxNjA0MDMyMTI2LCByZXZpc2lvbjogJzE2RTMyMXonfSk7Ci0gICAgICAgICAgICAg
ICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzFdLCB7cmVwb3NpdG9yeTogJ09TWCcsIG9yZGVy
OiAxNjA1MDMyMTAwLCByZXZpc2lvbjogJzE2RjMyMSd9KTsKLSAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgYXdhaXQgd2FpdEZvckludm9jYXRpb25Qcm9taXNlOworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAg
ICAgICBhc3NlcnQuZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLmNvbW1h
bmQsIFsnbGlzdCcsICdidWlsZDEnXSk7CisKKyAgICAgICAgICAgIGNvbnN0IG91dHB1dE9iamVj
dCA9IHthbGxSZXZpc2lvbnM6IFsiMTZEMzIxIiwgIjE2RTMyMXoiLCAiMTZGMzIxIl0sIGNvbW1p
dHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczogeyIxNkQzMjEiOiAiUGFuaWMifX07CisgICAgICAg
ICAgICBhd2FpdCBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3Ry
aW5naWZ5KG91dHB1dE9iamVjdCkpOworICAgICAgICAgICAgY29uc3QgYnVpbGRJbmZvID0gYXdh
aXQgZmV0Y2hDb21taXRzUHJvbWlzZTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwob3V0
cHV0T2JqZWN0LCBidWlsZEluZm8pOwogICAgICAgICB9KTsKKyAgICB9KTsKKwogCi0gICAgICAg
IGl0KCdzaG91bGQgb25seSByZXR1cm4gY29tbWl0cyB3aG9zZSBvcmRlcnMgYXJlIGhpZ2hlciB0
aGFuIG1pbk9yZGVyIGFuZCBsb3dlciB0aGFuIHRoZSBtYXhPcmRlcicsICgpID0+IHsKKyAgICBk
ZXNjcmliZSgnT1NCdWlsZGVyRmV0Y2hlci5fY29tbWl0c1dpdGhpblJhbmdlJywgKCkgPT4gewor
ICAgICAgICBpdCgnc2hvdWxkIG9ubHkgcmV0dXJuIGNvbW1pdHMgd2hvc2Ugb3JkZXJzIGFyZSBo
aWdoZXIgdGhhbiBzcGVjaWZpZWQgb3JkZXInLCBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICBj
b25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIg
PSBuZXcgT1NCdWlsZEZldGNoZXIoe30sIG51bGwsIG51bGwsIE1vY2tTdWJwcm9jZXNzLCBsb2dn
ZXIpOwotICAgICAgICAgICAgY29uc3Qgd2FpdEZvckludm9jYXRpb25Qcm9taXNlID0gTW9ja1N1
YnByb2Nlc3Mud2FpdEZvckludm9jYXRpb24oKTsKLSAgICAgICAgICAgIGNvbnN0IGZldGNoQ29t
bWl0c1Byb21pc2UgPSBmZXRjaGVyLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKCdPU1gnLCBb
J2xpc3QnLCAnYnVpbGQxJ10sICdeXFwuKiQnLCAxNjA0MDAwMDAwLCAxNjA1MDAwMDAwKTsKKyAg
ICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBmZXRjaGVyLl9jb21taXRzV2l0aGluUmFuZ2UoWyIx
NkQzMjEiLCAiMTZFMzIxeiIsICIxNkYzMjEiXSwgIk9TWCIsIDE2MDQwMDAwMDAsIDE2MDYwMDAw
MDApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVuZ3RoLCAyKTsKKyAgICAg
ICAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzdWx0c1swXSwge3JlcG9zaXRvcnk6ICdPU1gnLCBv
cmRlcjogMTYwNDAzMjEyNiwgcmV2aXNpb246ICcxNkUzMjF6J30pOworICAgICAgICAgICAgYXNz
ZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzFdLCB7cmVwb3NpdG9yeTogJ09TWCcsIG9yZGVyOiAxNjA1
MDMyMTAwLCByZXZpc2lvbjogJzE2RjMyMSd9KTsKIAotICAgICAgICAgICAgcmV0dXJuIHdhaXRG
b3JJbnZvY2F0aW9uUHJvbWlzZS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAg
ICAgICBhc3NlcnQuZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLmNvbW1h
bmQsIFsnbGlzdCcsICdidWlsZDEnXSk7Ci0gICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3Mu
aW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnMTZEMzIxXG4xNkUzMjF6XG5cbjE2RjMyMScpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBmZXRjaENvbW1pdHNQcm9taXNlOwotICAgICAgICAgICAgfSku
dGhlbigocmVzdWx0cykgPT4gewotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRz
Lmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzBd
LCB7cmVwb3NpdG9yeTogJ09TWCcsIG9yZGVyOiAxNjA0MDMyMTI2LCByZXZpc2lvbjogJzE2RTMy
MXonfSk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3Vs
ZCBvbmx5IHJldHVybiBjb21taXRzIHdob3NlIG9yZGVycyBhcmUgaGlnaGVyIHRoYW4gbWluT3Jk
ZXIgYW5kIGxvd2VyIHRoYW4gdGhlIG1heE9yZGVyJywgYXN5bmMgKCkgPT4geworICAgICAgICAg
ICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CisgICAgICAgICAgICBjb25zdCBmZXRj
aGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKHt9LCBudWxsLCBudWxsLCBNb2NrU3VicHJvY2Vzcywg
bG9nZ2VyKTsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBmZXRjaGVyLl9jb21taXRzV2l0
aGluUmFuZ2UoWyIxNkQzMjEiLCAiMTZFMzIxeiIsICIxNkYzMjEiXSwgIk9TWCIsIDE2MDQwMDAw
MDAsIDE2MDUwMDAwMDApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVuZ3Ro
LCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzdWx0c1swXSwge3JlcG9zaXRv
cnk6ICdPU1gnLCBvcmRlcjogMTYwNDAzMjEyNiwgcmV2aXNpb246ICcxNkUzMjF6J30pOwogICAg
ICAgICB9KTsKICAgICB9KTsKIApAQCAtMjM5LDkgKzI0MSw5IEBAIGRlc2NyaWJlKCdPU0J1aWxk
RmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0pCi0gICAgfSkKKyAgICB9KTsKIAotICAgIGRlc2NyaWJlKCdPU0J1aWxk
RmV0Y2hlci5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcycsICgpID0+IHsKKyAgICBkZXNjcmliZSgn
T1NCdWlsZEZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMnLCAoKSA9PiB7CiAgICAg
ICAgIGNvbnN0IGludm9jYXRpb25zID0gTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnM7CiAKICAg
ICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7CkBAIC0yNTYsNyArMjU4LDEwIEBAIGRlc2Ny
aWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgY29uc3QgbG9n
Z2VyID0gbmV3IE1vY2tMb2dnZXI7CiAgICAgICAgICAgICBjb25zdCBmZXRjaGVyID0gbmV3IE9T
QnVpbGRGZXRjaGVyKGNvbmZpZywgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBN
b2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZl
ci5kYXRhYmFzZSgpOwotICAgICAgICAgICAgbGV0IGZldGNoQW5kUmVwb3J0UHJvbWlzZSA9IG51
bGw7CisgICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJhRCA9IHthbGxSZXZpc2lvbnM6
IFsiU2llcnJhMTZENjgiLCAiU2llcnJhMTZENjkiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdh
cm5pbmdzOiB7fX07CisgICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJhRSA9IHthbGxS
ZXZpc2lvbnM6IFsiU2llcnJhMTZFMzIiLCAiU2llcnJhMTZFMzMiLCAiU2llcnJhMTZFMzNoIiwg
IlNpZXJyYTE2RTM0Il0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczoge319OworCisg
ICAgICAgICAgICBsZXQgZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHNQcm9taXNlID0gbnVsbDsK
ICAgICAgICAgICAgIGxldCBmZXRjaEF2YWlsYWJsZUJ1aWxkc1Byb21pc2UgPSBudWxsOwogCiAg
ICAgICAgICAgICByZXR1cm4gYWRkU2xhdmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQpLnRoZW4oKCkg
PT4gewpAQCAtMjg1LDcgKzI5MCw3IEBAIGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0
LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4
eCBidWlsZHMnXSk7Ci0gICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnXG5c
blNpZXJyYTE2RDY4XG5TaWVycmExNkQ2OVxuJyk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlv
bnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9u
KCk7CiAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKQEAgLTI5NSw3ICszMDAsNyBAQCBkZXNjcmli
ZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIH0pLnRoZW4oKCkg
PT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEp
OwogICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFu
ZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOwotICAgICAgICAgICAgICAgIGlu
dm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkUzMlxuU2llcnJhMTZFMzNcblNpZXJy
YTE2RTMzaFxuU2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5y
ZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFFKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9jYXRpb24oKTsKICAg
ICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChp
bnZvY2F0aW9ucy5sZW5ndGgsIDEpOwpAQCAtMzA3LDE1ICszMTIsMTQgQEAgZGVzY3JpYmUoJ09T
QnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBF
cXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9y
JywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RTM0J10pOwogICAgICAgICAgICAgICAgIGludm9jYXRp
b25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0V2l0aFdlYktp
dEFuZEphdmFTY3JpcHRDb3JlKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoQXZhaWxh
YmxlQnVpbGRzUHJvbWlzZTsKLSAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdHMpID0+IHsKLSAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0cy5sZW5ndGgsIDMpOworICAgICAgICAg
ICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MucmVzZXQo
KTsKLSAgICAgICAgICAgICAgICBmZXRjaEFuZFJlcG9ydFByb21pc2UgPSBmZXRjaGVyLmZldGNo
QW5kUmVwb3J0TmV3QnVpbGRzKCk7CisgICAgICAgICAgICAgICAgZmV0Y2hSZXBvcnRBbmRVcGRh
dGVCdWlsZHNQcm9taXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcygpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigp
OwogICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBF
cXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWls
ZHMnXSk7Ci0gICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnXG5cblNpZXJy
YTE2RDY4XG5TaWVycmExNkQ2OVxuJyk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0u
cmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CiAg
ICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
aW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKQEAgLTMyNSw3ICszMjksNyBAQCBkZXNjcmliZSgnT1NC
dWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewog
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwogICAg
ICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWyds
aXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOwotICAgICAgICAgICAgICAgIGludm9jYXRp
b25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkUzMlxuU2llcnJhMTZFMzNcblNpZXJyYTE2RTMz
aFxuU2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZl
KEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFFKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9jYXRpb24oKTsKICAgICAgICAg
ICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0
aW9ucy5sZW5ndGgsIDEpOwpAQCAtMzM3LDkgKzM0MSw4IEBAIGRlc2NyaWJlKCdPU0J1aWxkRmV0
Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29s
dmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0V2l0aFdlYktpdEFuZEphdmFTY3Jp
cHRDb3JlKSk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1sw
XS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1Np
ZXJyYTE2RTM0J10pOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoQW5kUmVwb3J0UHJv
bWlzZTsKLSAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4gewotICAgICAgICAgICAgICAg
IGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHNQcm9taXNlOworICAgICAgICAgICAgfSku
dGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFsKICAgICAg
ICAgICAgICAgICAgICAgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ1dl
YktpdCd9KSwKICAgICAgICAgICAgICAgICAgICAgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVz
JywgeyduYW1lJzogJ0phdmFTY3JpcHRDb3JlJ30pLApAQCAtMzg0LDExICszODcsMTE5IEBAIGRl
c2NyaWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0pOwogCisgICAgICAgIGl0KCdzaG91bGQgdXBkYXRlIHRlc3RhYmlsaXR5IHdhcm5p
bmcgZm9yIGNvbW1pdHMnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBsb2dnZXIg
PSBuZXcgTW9ja0xvZ2dlcjsKKyAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWls
ZEZldGNoZXIoY29uZmlnLCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLCBzbGF2ZUF1dGgsIE1vY2tT
dWJwcm9jZXNzLCBsb2dnZXIpOworICAgICAgICAgICAgY29uc3QgZGIgPSBUZXN0U2VydmVyLmRh
dGFiYXNlKCk7CisgICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJhRCA9IHthbGxSZXZp
c2lvbnM6IFsiU2llcnJhMTZENjgiLCAiU2llcnJhMTZENjkiXSwgY29tbWl0c1dpdGhUZXN0YWJp
bGl0eVdhcm5pbmdzOiB7IlNpZXJyYTE2RDY4IjogIlBhbmljIiwgIlNpZXJyYTE2RDY5IjogIlNw
aW4gQ1BVIn19OworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUUgPSB7YWxsUmV2
aXNpb25zOiBbIlNpZXJyYTE2RTMyIiwgIlNpZXJyYTE2RTMzIiwgIlNpZXJyYTE2RTMzaCIsICJT
aWVycmExNkUzNCJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHsiU2llcnJhMTZF
MzEiOiAiV2ViS2l0IGNyYXNoZXMifX07CisKKyAgICAgICAgICAgIGF3YWl0IGFkZFNsYXZlRm9y
UmVwb3J0KGVtcHR5UmVwb3J0KTsKKworICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoWwor
ICAgICAgICAgICAgICAgIGRiLmluc2VydCgncmVwb3NpdG9yaWVzJywgeydpZCc6IDEwLCAnbmFt
ZSc6ICdPU1gnfSksCisgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBv
c2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkQ2NycsICdvcmRlcic6IDE2MDMwMDY3
MDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1p
dHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RDY4JywgJ29yZGVy
JzogMTYwMzAwNjgwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgIGRiLmlu
c2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZE
NjknLCAnb3JkZXInOiAxNjAzMDA2OTAwLCAncmVwb3J0ZWQnOiBmYWxzZX0pLAorICAgICAgICAg
ICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24n
OiAnU2llcnJhMTZFMzEnLCAnb3JkZXInOiAxNjA0MDAzMTAwLCAncmVwb3J0ZWQnOiB0cnVlfSks
CisgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAs
ICdyZXZpc2lvbic6ICdTaWVycmExNkUzMicsICdvcmRlcic6IDE2MDQwMDMyMDAsICdyZXBvcnRl
ZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9z
aXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RTMzJywgJ29yZGVyJzogMTYwNDAwMzMw
MCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0
cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZFMzNnJywgJ29yZGVy
JzogMTYwNDAwMzMwNywgJ3JlcG9ydGVkJzogdHJ1ZX0pXSk7CisKKyAgICAgICAgICAgIGxldCBy
ZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0
cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDMwMDAwMDAmdG89MTYwMzA5OTkwMCcpOworCisg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAxKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwg
J1NpZXJyYTE2RDY4Jyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRz
J11bMF1bJ29yZGVyJ10sIDE2MDMwMDY4MDApOworICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQg
VGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvT1NYL2xhc3QtcmVw
b3J0ZWQ/ZnJvbT0xNjA0MDAwMDAwJnRvPTE2MDQwOTk5MDAnKTsKKworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ3JldmlzaW9uJ10sICdTaWVycmExNkUzM2cn
KTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXIn
XSwgMTYwNDAwMzMwNyk7CisKKyAgICAgICAgICAgIGNvbnN0IGZldGNoUmVwb3J0QW5kVXBkYXRl
UHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMoKTsKKyAgICAgICAg
ICAgIGF3YWl0IE1vY2tTdWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7CisKKyAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNz
ZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAx
NkR4eCBidWlsZHMnXSk7CisgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04u
c3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFEKSk7CisgICAgICAgICAgICBhd2FpdCBNb2NrU3Vi
cHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisKKyAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmRlZXBF
cXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9y
JywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RDY5J10pOworICAgICAgICAgICAgaW52b2NhdGlvbnNb
MF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShvd25lZENvbW1pdFdpdGhXZWJLaXQpKTsKKyAgICAg
ICAgICAgIGF3YWl0IE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9jYXRpb24oKTsK
KworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAg
ICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcs
ICdhbGwgb3N4IDE2RXh4IGJ1aWxkcyddKTsKKyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJl
c29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUUpKTsKKworICAgICAgICAgICAg
YXdhaXQgTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOworCisgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAg
IGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ293bmVk
Q29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkUzM2gnXSk7CisgICAgICAgICAg
ICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJvd25lZENvbW1p
dFdpdGhXZWJLaXQpKTsKKyAgICAgICAgICAgIGF3YWl0ICBNb2NrU3VicHJvY2Vzcy5yZXNldEFu
ZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlv
bnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5z
dHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0V2l0aFdlYktpdEFuZEphdmFTY3JpcHRDb3JlKSk7
CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsn
bGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJhMTZFMzQnXSk7
CisKKyAgICAgICAgICAgIGF3YWl0IGZldGNoUmVwb3J0QW5kVXBkYXRlUHJvbWlzZTsKKworICAg
ICAgICAgICAgY29uc3Qgd2Via2l0UmVwb3NpdG9yeSA9IGF3YWl0IGRiLnNlbGVjdFJvd3MoJ3Jl
cG9zaXRvcmllcycsIHsnbmFtZSc6ICdXZWJLaXQnfSk7CisgICAgICAgICAgICBjb25zdCBqc2NS
ZXBvc2l0b3J5ID0gYXdhaXQgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzog
J0phdmFTY3JpcHRDb3JlJ30pOworICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0MTZENjggPSBh
d2FpdCBkYi5zZWxlY3RSb3dzKCdjb21taXRzJywgeydyZXZpc2lvbic6ICdTaWVycmExNkQ2OCd9
KTsKKyAgICAgICAgICAgIGNvbnN0IG9zeENvbW1pdDE2RDY5ID0gYXdhaXQgZGIuc2VsZWN0Um93
cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZENjknfSk7CisgICAgICAgICAgICBj
b25zdCBvc3hDb21taXQxNkUzMSA9IGF3YWl0IGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7J3Jl
dmlzaW9uJzogJ1NpZXJyYTE2RTMxJ30pOworICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0MTZF
MzNoID0gYXdhaXQgZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJh
MTZFMzNoJ30pOworICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0MTZFMzQgPSBhd2FpdCBkYi5z
ZWxlY3RSb3dzKCdjb21taXRzJywgeydyZXZpc2lvbic6ICdTaWVycmExNkUzNCd9KTsKKworICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHdlYmtpdFJlcG9zaXRvcnkubGVuZ3RoLCAxKTsKKyAgICAg
ICAgICAgIGFzc2VydC5lcXVhbCh3ZWJraXRSZXBvc2l0b3J5WzBdWydvd25lciddLCAxMCk7Cisg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwoanNjUmVwb3NpdG9yeS5sZW5ndGgsIDEpOworICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKGpzY1JlcG9zaXRvcnlbMF1bJ293bmVyJ10sIDEwKTsKKworICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY4Lmxlbmd0aCwgMSk7CisgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZENjhbMF1bJ3JlcG9zaXRvcnknXSwgMTApOwor
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY4WzBdWydvcmRlciddLCAxNjAz
MDA2ODAwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OFswXVsndGVz
dGFiaWxpdHlfd2FybmluZyddLCAiUGFuaWMiKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG9zeENvbW1pdDE2RDY5Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4
Q29tbWl0MTZENjlbMF1bJ3JlcG9zaXRvcnknXSwgMTApOworICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKG9zeENvbW1pdDE2RDY5WzBdWydvcmRlciddLCAxNjAzMDA2OTAwKTsKKyAgICAgICAgICAg
IGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OVswXVsndGVzdGFiaWxpdHlfd2FybmluZyddLCAi
U3BpbiBDUFUiKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMxLmxl
bmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzFbMF1bJ3Jl
cG9zaXRvcnknXSwgMTApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMx
WzBdWydvcmRlciddLCAxNjA0MDAzMTAwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hD
b21taXQxNkUzMVswXVsndGVzdGFiaWxpdHlfd2FybmluZyddLCAiV2ViS2l0IGNyYXNoZXMiKTsK
KworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMzaC5sZW5ndGgsIDEpOwor
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMzaFswXVsncmVwb3NpdG9yeSdd
LCAxMCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzNoWzBdWydvcmRl
ciddLCAxNjA0MDAzMzA4KTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2
RTM0Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzRb
MF1bJ3JlcG9zaXRvcnknXSwgMTApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1p
dDE2RTM0WzBdWydvcmRlciddLCAxNjA0MDAzNDAwKTsKKworICAgICAgICAgICAgcmVzdWx0ID0g
YXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvT1NYL2xh
c3QtcmVwb3J0ZWQ/ZnJvbT0xNjAzMDAwMDAwJnRvPTE2MDMwOTk5MDAnKTsKKyAgICAgICAgICAg
IGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGgsIDEpOworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZE
NjknKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3Jk
ZXInXSwgMTYwMzAwNjkwMCk7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IFRlc3RTZXJ2
ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zy
b209MTYwNDAwMDAwMCZ0bz0xNjA0MDk5OTAwJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChy
ZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RTM0Jyk7CisgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDQwMDM0
MDApOworICAgICAgICB9KTsKKwogICAgICAgICBpdCgnc2hvdWxkIHJlcG9ydCBjb21taXRzIHdp
dGhvdXQgb3duZWQtY29tbWl0cyBpZiAib3duZWRDb21taXRDb21tYW5kIiBpcyBub3Qgc3BlY2lm
aWVkIGluIGNvbmZpZycsIGFzeW5jICgpID0+IHsKIAogICAgICAgICAgICAgY29uc3QgbG9nZ2Vy
ID0gbmV3IE1vY2tMb2dnZXI7CiAgICAgICAgICAgICBjb25zdCBmZXRjaGVyID0gbmV3IE9TQnVp
bGRGZXRjaGVyKGNvbmZpZ1dpdGhvdXRPd25lZENvbW1pdENvbW1hbmQsIFRlc3RTZXJ2ZXIucmVt
b3RlQVBJKCksIHNsYXZlQXV0aCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7CiAgICAgICAgICAg
ICBjb25zdCBkYiA9IFRlc3RTZXJ2ZXIuZGF0YWJhc2UoKTsKKyAgICAgICAgICAgIGNvbnN0IHJl
c3VsdHNGb3JTaWVycmFEID0ge2FsbFJldmlzaW9uczogWyJTaWVycmExNkQ2OCIsICJTaWVycmEx
NkQ2OSJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHt9fTsKKyAgICAgICAgICAg
IGNvbnN0IHJlc3VsdHNGb3JTaWVycmFFID0ge2FsbFJldmlzaW9uczogWyJTaWVycmExNkUzMiIs
ICJTaWVycmExNkUzMyIsICJTaWVycmExNkUzM2giLCAiU2llcnJhMTZFMzQiXSwgY29tbWl0c1dp
dGhUZXN0YWJpbGl0eVdhcm5pbmdzOiB7fX07CiAKICAgICAgICAgICAgIGF3YWl0IGFkZFNsYXZl
Rm9yUmVwb3J0KGVtcHR5UmVwb3J0KTsKICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFsK
QEAgLTQxMSwxOSArNTIyLDE4IEBAIGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRl
ciddLCAxNjA0MDAzMzA3KTsKIAogICAgICAgICAgICAgY29uc3Qgd2FpdEZvckludm9jYXRpb25Q
cm9taXNlID0gTW9ja1N1YnByb2Nlc3Mud2FpdEZvckludm9jYXRpb24oKTsKLSAgICAgICAgICAg
IGNvbnN0IGZldGNoQW5kUmVwb3J0UHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hBbmRSZXBvcnROZXdC
dWlsZHMoKTsKKyAgICAgICAgICAgIGNvbnN0IGZldGNoUmVwb3J0QW5kVXBkYXRlUHJvbWlzZSA9
IGZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMoKTsKICAgICAgICAgICAgIGF3YWl0
IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZv
Y2F0aW9ucy5sZW5ndGgsIDEpOwogICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0
aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7Ci0gICAg
ICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKCdcblxuU2llcnJhMTZENjhcblNpZXJyYTE2
RDY5Jyk7CisgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5
KHJlc3VsdHNGb3JTaWVycmFEKSk7CiAKICAgICAgICAgICAgIGF3YWl0IE1vY2tTdWJwcm9jZXNz
LnJlc2V0QW5kV2FpdEZvckludm9jYXRpb24oKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChp
bnZvY2F0aW9ucy5sZW5ndGgsIDEpOwogICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZv
Y2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkV4eCBidWlsZHMnXSk7Ci0g
ICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKCdcblxuU2llcnJhMTZFMzJcblNpZXJy
YTE2RTMzXG5TaWVycmExNkUzM2hcblNpZXJyYTE2RTM0Jyk7CisgICAgICAgICAgICBpbnZvY2F0
aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFFKSk7CiAKLSAg
ICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoQW5kUmVwb3J0UHJvbWlzZTsKLSAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgIHJl
c3VsdCA9IGF3YWl0IGZldGNoUmVwb3J0QW5kVXBkYXRlUHJvbWlzZTsKICAgICAgICAgICAgIGNv
bnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICAgICAgICAgZGIuc2Vs
ZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ1dlYktpdCd9KSwKICAgICAgICAgICAg
ICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2YVNjcmlwdENv
cmUnfSksCkBAIC00NjcsNiArNTc3LDggQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKICAg
ICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoY29uZmlnV2l0aG91
dE93bmVkQ29tbWl0Q29tbWFuZCwgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBN
b2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZl
ci5kYXRhYmFzZSgpOworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUQgPSB7YWxs
UmV2aXNpb25zOiBbIlNpZXJyYTE2RDY4IiwgIlNpZXJyYTE2RDY5IiwgIlNpZXJyYTE2RDEwMDAw
Il0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczoge319OworICAgICAgICAgICAgY29u
c3QgcmVzdWx0c0ZvclNpZXJyYUUgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RTMyIiwgIlNp
ZXJyYTE2RTMzIiwgIlNpZXJyYTE2RTMzaCIsICJTaWVycmExNkUzNCIsICJTaWVycmExNkUxMDAw
MCJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHt9fTsKIAogICAgICAgICAgICAg
YXdhaXQgYWRkU2xhdmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQpOwogICAgICAgICAgICAgYXdhaXQg
UHJvbWlzZS5hbGwoWwpAQCAtNDg4LDIwICs2MDAsMTkgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRj
aGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21t
aXRzJ11bMF1bJ3JldmlzaW9uJ10sICdTaWVycmExNkUzM2cnKTsKICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwNDAwMzMwNyk7CiAgICAg
ICAgICAgICBjb25zdCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53
YWl0Rm9ySW52b2NhdGlvbigpOwotICAgICAgICAgICAgY29uc3QgZmV0Y2hBbmRSZXBvcnRQcm9t
aXNlID0gZmV0Y2hlci5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcygpOworICAgICAgICAgICAgY29u
c3QgZmV0Y2hSZXBvcnRBbmRVcGRhdGVQcm9taXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVw
ZGF0ZUJ1aWxkcygpOwogCiAgICAgICAgICAgICBhd2FpdCB3YWl0Rm9ySW52b2NhdGlvblByb21p
c2U7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKICAg
ICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0
JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOwotICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0u
cmVzb2x2ZSgnXG5cblNpZXJyYTE2RDY4XG5TaWVycmExNkQ2OVxuU2llcnJhMTZEMTAwMDAnKTsK
KyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0
c0ZvclNpZXJyYUQpKTsKIAogICAgICAgICAgICAgYXdhaXQgTW9ja1N1YnByb2Nlc3MucmVzZXRB
bmRXYWl0Rm9ySW52b2NhdGlvbigpOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRp
b25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25z
WzBdLmNvbW1hbmQsIFsnbGlzdCcsICdhbGwgb3N4IDE2RXh4IGJ1aWxkcyddKTsKLSAgICAgICAg
ICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkUzMlxuU2llcnJhMTZFMzNc
blNpZXJyYTE2RTMzaFxuU2llcnJhMTZFMzRcblNpZXJyYTE2RTEwMDAwJyk7CisgICAgICAgICAg
ICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFF
KSk7CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoQW5kUmVwb3J0UHJvbWlzZTsK
LSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoUmVwb3J0QW5kVXBkYXRlUHJvbWlzZTsKICAgICAg
ICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICAgICAg
ICAgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ1dlYktpdCd9KSwKICAg
ICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2
YVNjcmlwdENvcmUnfSksCkBAIC01NDUsNiArNjU2LDcgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRj
aGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xv
Z2dlcjsKICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoY29u
ZmlnVHJhY2tpbmdPbmVPUywgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBNb2Nr
U3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZlci5k
YXRhYmFzZSgpOworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUQgPSB7YWxsUmV2
aXNpb25zOiBbIlNpZXJyYTE2RDY4IiwgIlNpZXJyYTE2RDY5IiwgIlNpZXJyYTE2RDEwMCIsICJT
aWVycmExNkQxMDBhIl0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczoge319OwogCiAg
ICAgICAgICAgICBhd2FpdCBhZGRTbGF2ZUZvclJlcG9ydChlbXB0eVJlcG9ydCk7CiAgICAgICAg
ICAgICBhd2FpdCBkYi5pbnNlcnQoJ3JlcG9zaXRvcmllcycsIHsnaWQnOiAxMCwgJ25hbWUnOiAn
T1NYJ30pOwpAQCAtNTU2LDE0ICs2NjgsMTMgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywg
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11b
MF1bJ29yZGVyJ10sIDE2MDMwMTAwMDApOwogCiAgICAgICAgICAgICBjb25zdCB3YWl0Rm9ySW52
b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigpOwotICAg
ICAgICAgICAgY29uc3QgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gZmV0Y2hlci5mZXRjaEFuZFJl
cG9ydE5ld0J1aWxkcygpOworICAgICAgICAgICAgY29uc3QgZmV0Y2hBbmRSZXBvcnRQcm9taXNl
ID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcygpOwogICAgICAgICAgICAgYXdh
aXQgd2FpdEZvckludm9jYXRpb25Qcm9taXNlOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGlu
dm9jYXRpb25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9j
YXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdhbGwgb3N4IDE2RHh4IGJ1aWxkcyddKTsKLSAg
ICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2OFxuU2llcnJh
MTZENjlcblNpZXJyYTE2RDEwMFxuU2llcnJhMTZEMTAwYVxuJyk7CisgICAgICAgICAgICBpbnZv
Y2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFEKSk7CiAK
ICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoQW5kUmVwb3J0UHJvbWlzZTsKLSAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsKICAgICAgICAgICAg
IGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICAgICAgICAgZGIu
c2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ1dlYktpdCd9KSwKICAgICAgICAg
ICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2YVNjcmlw
dENvcmUnfSksCkBAIC01OTQsNiArNzA1LDcgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywg
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsK
ICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoY29uZmlnVHJh
Y2tpbmdPbmVPUywgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBNb2NrU3VicHJv
Y2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZlci5kYXRhYmFz
ZSgpOworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUQgPSB7YWxsUmV2aXNpb25z
OiBbIlNpZXJyYTE2RDY4IiwgIlNpZXJyYTE2RDY5IiwgIlNpZXJyYTE2RDEwMCIsICJTaWVycmEx
NkQxMDEiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzOiB7fX07CiAKICAgICAgICAg
ICAgIGF3YWl0IGFkZFNsYXZlRm9yUmVwb3J0KGVtcHR5UmVwb3J0KTsKICAgICAgICAgICAgIGF3
YWl0IGRiLmluc2VydCgncmVwb3NpdG9yaWVzJywgeydpZCc6IDEwLCAnbmFtZSc6ICdPU1gnfSk7
CkBAIC02MDIsMTQgKzcxNCwxMyBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlv
bigpIHsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGgs
IDApOwogCiAgICAgICAgICAgICBjb25zdCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2Nr
U3VicHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigpOwotICAgICAgICAgICAgY29uc3QgZmV0Y2hB
bmRSZXBvcnRQcm9taXNlID0gZmV0Y2hlci5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcygpOworICAg
ICAgICAgICAgY29uc3QgZmV0Y2hSZXBvcnRBbmRVcGRhdGVQcm9taXNlID0gZmV0Y2hlci5mZXRj
aFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcygpOwogICAgICAgICAgICAgYXdhaXQgd2FpdEZvckludm9j
YXRpb25Qcm9taXNlOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0
aCwgMSk7CiAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1h
bmQsIFsnbGlzdCcsICdhbGwgb3N4IDE2RHh4IGJ1aWxkcyddKTsKLSAgICAgICAgICAgIGludm9j
YXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2OFxuU2llcnJhMTZENjlcblNpZXJyYTE2
RDEwMFxuU2llcnJhMTZEMTAxXG4nKTsKKyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29s
dmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsKIAotICAgICAgICAgICAgcmVz
dWx0ID0gYXdhaXQgZmV0Y2hBbmRSZXBvcnRQcm9taXNlOwotICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3VsdFsnc3RhdHVzJ10sICdPSycpOworICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQg
ZmV0Y2hSZXBvcnRBbmRVcGRhdGVQcm9taXNlOwogICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9
IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBv
c2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0J30pLAogICAgICAgICAgICAgICAgIGRiLnNlbGVj
dFJvd3MoJ3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29yZSd9KSwKQEAgLTY0
Niw2ICs3NTcsOCBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOwogICAgICAgICAgICAgY29u
c3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihjb25maWcsIFRlc3RTZXJ2ZXIucmVtb3Rl
QVBJKCksIHNsYXZlQXV0aCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7CiAgICAgICAgICAgICBj
b25zdCBkYiA9IFRlc3RTZXJ2ZXIuZGF0YWJhc2UoKTsKKyAgICAgICAgICAgIGNvbnN0IHJlc3Vs
dHNGb3JTaWVycmFEID0ge2FsbFJldmlzaW9uczogWyJTaWVycmExNkQ2OCIsICJTaWVycmExNkQ2
OSJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHt9fTsKKyAgICAgICAgICAgIGNv
bnN0IHJlc3VsdHNGb3JTaWVycmFFID0ge2FsbFJldmlzaW9uczogWyJTaWVycmExNkUzMiIsICJT
aWVycmExNkUzMyIsICJTaWVycmExNkUzM2giLCAiU2llcnJhMTZFMzQiXSwgY29tbWl0c1dpdGhU
ZXN0YWJpbGl0eVdhcm5pbmdzOiB7fX07CiAgICAgICAgICAgICBsZXQgZmV0Y2hBbmRSZXBvcnRQ
cm9taXNlID0gbnVsbDsKIAogICAgICAgICAgICAgcmV0dXJuIGFkZFNsYXZlRm9yUmVwb3J0KGVt
cHR5UmVwb3J0KS50aGVuKCgpID0+IHsKQEAgLTY3MSwxMiArNzg0LDEyIEBAIGRlc2NyaWJlKCdP
U0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwNDAwMzMwNyk7CiAKICAgICAgICAg
ICAgICAgICBjb25zdCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53
YWl0Rm9ySW52b2NhdGlvbigpOwotICAgICAgICAgICAgICAgIGZldGNoQW5kUmVwb3J0UHJvbWlz
ZSA9IGZldGNoZXIuZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMoKTsKKyAgICAgICAgICAgICAgICBm
ZXRjaEFuZFJlcG9ydFByb21pc2UgPSBmZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRz
KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZTsKICAg
ICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChp
bnZvY2F0aW9ucy5sZW5ndGgsIDEpOwogICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwo
aW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10p
OwotICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2
OFxuU2llcnJhMTZENjlcbicpOworICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29s
dmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOwogICAgICAg
ICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9j
YXRpb25zLmxlbmd0aCwgMSk7CkBAIC02ODYsNyArNzk5LDcgQEAgZGVzY3JpYmUoJ09TQnVpbGRG
ZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKICAgICAgICAg
ICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcs
ICdhbGwgb3N4IDE2RXh4IGJ1aWxkcyddKTsKLSAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1sw
XS5yZXNvbHZlKCdcblxuU2llcnJhMTZFMzJcblNpZXJyYTE2RTMzXG5TaWVycmExNkUzM2hcblNp
ZXJyYTE2RTM0Jyk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09O
LnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRSkpOwogICAgICAgICAgICAgICAgIHJldHVybiBN
b2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CiAgICAgICAgICAgICB9
KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRp
b25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2aXNpb24n
LCAnU2llcnJhMTZFMzNoJ10pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3Rvb2xzL2pzL29zLWJ1aWxkLWZldGNoZXIuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
dG9vbHMvanMvb3MtYnVpbGQtZmV0Y2hlci5qcwppbmRleCAwNTFjMjlmY2I3Yjg2MzM2YmY0MTcy
ZDU1ZjdhNDk4NmQxNzE0ZmUxLi4zOGQ5MTc5NDc5YmNlN2ViYjlmYWM5OWU4OTMzZTMwMGZkODk2
OTgzIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3MtYnVp
bGQtZmV0Y2hlci5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3Mt
YnVpbGQtZmV0Y2hlci5qcwpAQCAtMjIsNTkgKzIyLDY0IEBAIGNsYXNzIE9TQnVpbGRGZXRjaGVy
IHsKICAgICAgICAgdGhpcy5fbWF4U3VibWl0Q291bnQgPSBvc0NvbmZpZ1snbWF4U3VibWl0Q291
bnQnXSB8fCAyMDsKICAgICB9CiAKLSAgICBzdGF0aWMgZmV0Y2hBbmRSZXBvcnRBbGxJbk9yZGVy
KGZldGNoZXJMaXN0KQorICAgIHN0YXRpYyBhc3luYyBmZXRjaFJlcG9ydEFuZFVwZGF0ZUNvbW1p
dHMoZmV0Y2hlckxpc3QpCiAgICAgewotICAgICAgICByZXR1cm4gbWFwSW5TZXJpYWxQcm9taXNl
Q2hhaW4oZmV0Y2hlckxpc3QsIChmZXRjaGVyKSA9PiBmZXRjaGVyLmZldGNoQW5kUmVwb3J0TmV3
QnVpbGRzKCkpOworICAgICAgICBmb3IgKGNvbnN0IGZldGNoZXIgb2YgZmV0Y2hlckxpc3QpCisg
ICAgICAgICAgICBhd2FpdCBmZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzKCk7CiAg
ICAgfQogCi0gICAgZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMoKQorICAgIF9zcGxpdEFycmF5QnlM
aW1pdChhcnJheSwgbWF4Q291bnQpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2hB
dmFpbGFibGVCdWlsZHMoKS50aGVuKChyZXN1bHRzKSA9PiB7Ci0gICAgICAgICAgICB0aGlzLl9s
b2dnZXIubG9nKGBTdWJtaXR0aW5nICR7cmVzdWx0cy5sZW5ndGh9IGJ1aWxkcyBmb3IgJHt0aGlz
Ll9vc0NvbmZpZ1snbmFtZSddfWApOwotICAgICAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID09
IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdENvbW1pdHMocmVzdWx0cyk7
Ci0KLSAgICAgICAgICAgIGNvbnN0IHNwbGl0dGVkUmVzdWx0cyA9IFtdOwotICAgICAgICAgICAg
Zm9yIChsZXQgc3RhcnRJbmRleCA9IDA7IHN0YXJ0SW5kZXggPCByZXN1bHRzLmxlbmd0aDsgc3Rh
cnRJbmRleCArPSB0aGlzLl9tYXhTdWJtaXRDb3VudCkKLSAgICAgICAgICAgICAgICBzcGxpdHRl
ZFJlc3VsdHMucHVzaChyZXN1bHRzLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyB0aGlz
Ll9tYXhTdWJtaXRDb3VudCkpOwotCi0gICAgICAgICAgICByZXR1cm4gbWFwSW5TZXJpYWxQcm9t
aXNlQ2hhaW4oc3BsaXR0ZWRSZXN1bHRzLCB0aGlzLl9zdWJtaXRDb21taXRzLmJpbmQodGhpcykp
LnRoZW4oKHJlc3BvbnNlcykgPT4gewotICAgICAgICAgICAgICAgIGFzc2VydChyZXNwb25zZXMu
ZXZlcnkoKHJlc3BvbnNlKSA9PiByZXNwb25zZVsnc3RhdHVzJ10gPT0gJ09LJykpOwotICAgICAg
ICAgICAgICAgIGFzc2VydChyZXNwb25zZXMubGVuZ3RoID4gMCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3BvbnNlc1swXTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICAg
ICAgY29uc3Qgc3BsaXR0ZWRBcnJheUxpc3QgPSBbXTsKKyAgICAgICAgZm9yIChsZXQgc3RhcnRJ
bmRleCA9IDA7IHN0YXJ0SW5kZXggPCBhcnJheS5sZW5ndGg7IHN0YXJ0SW5kZXggKz0gbWF4Q291
bnQpCisgICAgICAgICAgICBzcGxpdHRlZEFycmF5TGlzdC5wdXNoKGFycmF5LnNsaWNlKHN0YXJ0
SW5kZXgsIHN0YXJ0SW5kZXggKyBtYXhDb3VudCkpOworICAgICAgICByZXR1cm4gc3BsaXR0ZWRB
cnJheUxpc3Q7CisgICAgfQorCisgICAgYXN5bmMgZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMo
KQorICAgIHsKKyAgICAgICAgY29uc3Qge25ld0NvbW1pdHNUb1JlcG9ydCwgY29tbWl0c1RvVXBk
YXRlfSA9IGF3YWl0IHRoaXMuX2ZldGNoQXZhaWxhYmxlQnVpbGRzKCk7CisKKyAgICAgICAgdGhp
cy5fbG9nZ2VyLmxvZyhgU3VibWl0dGluZyAke25ld0NvbW1pdHNUb1JlcG9ydC5sZW5ndGh9IGJ1
aWxkcyBmb3IgJHt0aGlzLl9vc0NvbmZpZ1snbmFtZSddfWApOworICAgICAgICBhd2FpdCB0aGlz
Ll9yZXBvcnRUb0VuZFBvaW50KCcvYXBpL3JlcG9ydC1jb21taXRzLycsIG5ld0NvbW1pdHNUb1Jl
cG9ydCk7CisKKyAgICAgICAgdGhpcy5fbG9nZ2VyLmxvZyhgVXBkYXRpbmcgJHtjb21taXRzVG9V
cGRhdGUubGVuZ3RofSBidWlsZHMgZm9yICR7dGhpcy5fb3NDb25maWdbJ25hbWUnXX1gKTsKKyAg
ICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0VG9FbmRQb2ludCgnL2FwaS91cGRhdGUtY29tbWl0LXRl
c3RhYmlsaXR5LycsIGNvbW1pdHNUb1VwZGF0ZSk7CiAgICAgfQogCi0gICAgX2ZldGNoQXZhaWxh
YmxlQnVpbGRzKCkKKyAgICBhc3luYyBfZmV0Y2hBdmFpbGFibGVCdWlsZHMoKQogICAgIHsKICAg
ICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5fb3NDb25maWc7Ci0gICAgICAgIGNvbnN0IHJlcG9z
aXRvcnlOYW1lID0gY29uZmlnWyduYW1lJ107Ci0gICAgICAgIGxldCBjdXN0b21Db21tYW5kcyA9
IGNvbmZpZ1snY3VzdG9tQ29tbWFuZHMnXTsKKyAgICAgICAgY29uc3QgcmVwb3NpdG9yeSA9IGNv
bmZpZ1snbmFtZSddOworICAgICAgICBjb25zdCBuZXdDb21taXRzVG9SZXBvcnQgPSBbXTsKKyAg
ICAgICAgY29uc3QgY29tbWl0c1RvVXBkYXRlID0gW107CisgICAgICAgIGNvbnN0ICBjdXN0b21D
b21tYW5kcyA9IGNvbmZpZ1snY3VzdG9tQ29tbWFuZHMnXTsKIAotICAgICAgICByZXR1cm4gbWFw
SW5TZXJpYWxQcm9taXNlQ2hhaW4oY3VzdG9tQ29tbWFuZHMsIChjb21tYW5kKSA9PiB7CisgICAg
ICAgIGZvciAoY29uc3QgY29tbWFuZCBvZiBjdXN0b21Db21tYW5kcykgewogICAgICAgICAgICAg
YXNzZXJ0KGNvbW1hbmRbJ21pblJldmlzaW9uJ10pOwogICAgICAgICAgICAgYXNzZXJ0KGNvbW1h
bmRbJ21heFJldmlzaW9uJ10pOwogICAgICAgICAgICAgY29uc3QgbWluUmV2aXNpb25PcmRlciA9
IHRoaXMuX2NvbXB1dGVPcmRlcihjb21tYW5kWydtaW5SZXZpc2lvbiddKTsKICAgICAgICAgICAg
IGNvbnN0IG1heFJldmlzaW9uT3JkZXIgPSB0aGlzLl9jb21wdXRlT3JkZXIoY29tbWFuZFsnbWF4
UmV2aXNpb24nXSk7CiAKLSAgICAgICAgICAgIGNvbnN0IHVybCA9IGAvYXBpL2NvbW1pdHMvJHtl
c2NhcGUocmVwb3NpdG9yeU5hbWUpfS9sYXN0LXJlcG9ydGVkP2Zyb209JHttaW5SZXZpc2lvbk9y
ZGVyfSZ0bz0ke21heFJldmlzaW9uT3JkZXJ9YDsKKyAgICAgICAgICAgIGNvbnN0IHVybCA9IGAv
YXBpL2NvbW1pdHMvJHtlc2NhcGUocmVwb3NpdG9yeSl9L2xhc3QtcmVwb3J0ZWQ/ZnJvbT0ke21p
blJldmlzaW9uT3JkZXJ9JnRvPSR7bWF4UmV2aXNpb25PcmRlcn1gOworICAgICAgICAgICAgY29u
c3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fcmVtb3RlQVBJLmdldEpTT05XaXRoU3RhdHVzKHVybCk7
CisgICAgICAgICAgICBjb25zdCBtaW5PcmRlciA9IHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCA9
PSAxID8gcGFyc2VJbnQocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10pICsgMSA6IG1pblJl
dmlzaW9uT3JkZXI7CiAKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZW1vdGVBUEkuZ2V0SlNP
TldpdGhTdGF0dXModXJsKS50aGVuKChyZXN1bHQpID0+IHsKLSAgICAgICAgICAgICAgICBjb25z
dCBtaW5PcmRlciA9IHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCA9PSAxID8gcGFyc2VJbnQocmVz
dWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10pICsgMSA6IG1pblJldmlzaW9uT3JkZXI7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMocmVwb3Np
dG9yeU5hbWUsIGNvbW1hbmRbJ2NvbW1hbmQnXSwgY29tbWFuZFsnbGluZXNUb0lnbm9yZSddLCBt
aW5PcmRlciwgbWF4UmV2aXNpb25PcmRlcik7Ci0gICAgICAgICAgICB9KS50aGVuKChjb21taXRz
KSA9PiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSAnbmFtZScgaW4gY29tbWFuZCA/
IGAiJHtjb21tYW5kWyduYW1lJ119ImAgOiBgIiR7Y29tbWFuZFsnbWluUmV2aXNpb24nXX0iIHRv
ICIke2NvbW1hbmRbJ21heFJldmlzaW9uJ119ImA7Ci0gICAgICAgICAgICAgICAgdGhpcy5fbG9n
Z2VyLmxvZyhgRm91bmQgJHtjb21taXRzLmxlbmd0aH0gYnVpbGRzIGZvciAke2xhYmVsfWApOwor
ICAgICAgICAgICAgY29uc3QgY29tbWl0SW5mbyA9IGF3YWl0IHRoaXMuX2NvbW1pdHNGb3JBdmFp
bGFibGVCdWlsZHMoY29tbWFuZFsnY29tbWFuZCddKTsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1p
dHMgPSB0aGlzLl9jb21taXRzV2l0aGluUmFuZ2UoY29tbWl0SW5mby5hbGxSZXZpc2lvbnMsIHJl
cG9zaXRvcnksIG1pbk9yZGVyLCBtYXhSZXZpc2lvbk9yZGVyKTsKIAotICAgICAgICAgICAgICAg
IGlmICgnb3duZWRDb21taXRDb21tYW5kJyBpbiBjb21tYW5kKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuX2xvZ2dlci5sb2coYFJlc29sdmluZyBvd25lZENvbW1pdHMgZm9yICR7bGFiZWx9
YCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hZGRPd25lZENvbW1pdHNGb3JC
dWlsZChjb21taXRzLCBjb21tYW5kWydvd25lZENvbW1pdENvbW1hbmQnXSk7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY29uc3QgbGFiZWwgPSAnbmFtZScgaW4gY29tbWFuZCA/IGAi
JHtjb21tYW5kWyduYW1lJ119ImAgOiBgIiR7Y29tbWFuZFsnbWluUmV2aXNpb24nXX0iIHRvICIk
e2NvbW1hbmRbJ21heFJldmlzaW9uJ119ImA7CisgICAgICAgICAgICB0aGlzLl9sb2dnZXIubG9n
KGBGb3VuZCAke2NvbW1pdHMubGVuZ3RofSBidWlsZHMgZm9yICR7bGFiZWx9YCk7CisgICAgICAg
ICAgICBpZiAoJ293bmVkQ29tbWl0Q29tbWFuZCcgaW4gY29tbWFuZCkgeworICAgICAgICAgICAg
ICAgIHRoaXMuX2xvZ2dlci5sb2coYFJlc29sdmluZyBvd25lZENvbW1pdHMgZm9yICR7bGFiZWx9
YCk7CisgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fYWRkT3duZWRDb21taXRzRm9yQnVpbGQo
Y29tbWl0cywgY29tbWFuZFsnb3duZWRDb21taXRDb21tYW5kJ10pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbmV3Q29tbWl0c1RvUmVwb3J0LnB1c2goLi4uY29tbWl0cyk7CiAKLSAgICAg
ICAgICAgICAgICByZXR1cm4gY29tbWl0czsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KS50
aGVuKChyZXN1bHRzKSA9PiBbXS5jb25jYXQoLi4ucmVzdWx0cykpOworICAgICAgICAgICAgZm9y
IChjb25zdCBbcmV2aXNpb24sIHRlc3RhYmlsaXR5V2FybmluZ10gb2YgT2JqZWN0LmVudHJpZXMo
Y29tbWl0SW5mby5jb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MpKQorICAgICAgICAgICAg
ICAgIGNvbW1pdHNUb1VwZGF0ZS5wdXNoKHtyZXBvc2l0b3J5LCByZXZpc2lvbiwgdGVzdGFiaWxp
dHlXYXJuaW5nfSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHtuZXdDb21taXRzVG9SZXBv
cnQsIGNvbW1pdHNUb1VwZGF0ZX07CiAgICAgfQogCiAgICAgX2NvbXB1dGVPcmRlcihyZXZpc2lv
bikKQEAgLTg5LDE3ICs5NCwxNiBAQCBjbGFzcyBPU0J1aWxkRmV0Y2hlciB7CiAgICAgICAgIHJl
dHVybiAoKG1ham9yICogMTAwICsga2luZCkgKiAxMDAwMCArIG1pbm9yKSAqIDEwMCArIHZhcmlh
bnQ7CiAgICAgfQogCi0gICAgX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMocmVwb3NpdG9yeSwg
Y29tbWFuZCwgbGluZXNUb0lnbm9yZSwgbWluT3JkZXIsIG1heE9yZGVyKQorICAgIGFzeW5jIF9j
b21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKGNvbW1hbmQpCiAgICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fc3VicHJvY2Vzcy5leGVjdXRlKGNvbW1hbmQpLnRoZW4oKG91dHB1dCkgPT4gewotICAg
ICAgICAgICAgbGV0IGxpbmVzID0gb3V0cHV0LnNwbGl0KCdcbicpOwotICAgICAgICAgICAgaWYg
KGxpbmVzVG9JZ25vcmUpewotICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4
cChsaW5lc1RvSWdub3JlKTsKLSAgICAgICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmZpbHRlcigo
bGluZSkgPT4gIXJlZ2V4LmV4ZWMobGluZSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIGxpbmVzLm1hcCgocmV2aXNpb24pID0+ICh7cmVwb3NpdG9yeSwgcmV2aXNpb24sICdv
cmRlcic6IHRoaXMuX2NvbXB1dGVPcmRlcihyZXZpc2lvbil9KSkKLSAgICAgICAgICAgICAgICAu
ZmlsdGVyKChjb21taXQpID0+IGNvbW1pdFsnb3JkZXInXSA+PSBtaW5PcmRlciAmJiBjb21taXRb
J29yZGVyJ10gPD0gbWF4T3JkZXIpOwotICAgICAgICB9KTsKKyAgICAgICAgY29uc3Qgb3V0cHV0
ID0gYXdhaXQgdGhpcy5fc3VicHJvY2Vzcy5leGVjdXRlKGNvbW1hbmQpOworICAgICAgICByZXR1
cm4gSlNPTi5wYXJzZShvdXRwdXQpOworICAgIH0KKworICAgIF9jb21taXRzV2l0aGluUmFuZ2Uo
cmV2aXNpb25zLCByZXBvc2l0b3J5LCBtaW5PcmRlciwgbWF4T3JkZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gcmV2aXNpb25zLm1hcCgocmV2aXNpb24pID0+ICh7cmVwb3NpdG9yeSwgcmV2aXNp
b24sICdvcmRlcic6IHRoaXMuX2NvbXB1dGVPcmRlcihyZXZpc2lvbil9KSkKKyAgICAgICAgICAg
IC5maWx0ZXIoKGNvbW1pdCkgPT4gY29tbWl0WydvcmRlciddID49IG1pbk9yZGVyICYmIGNvbW1p
dFsnb3JkZXInXSA8PSBtYXhPcmRlcik7CiAgICAgfQogCiAgICAgX2FkZE93bmVkQ29tbWl0c0Zv
ckJ1aWxkKGNvbW1pdHMsIGNvbW1hbmQpCkBAIC0xMTksMTAgKzEyMywxNiBAQCBjbGFzcyBPU0J1
aWxkRmV0Y2hlciB7CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIF9zdWJtaXRDb21taXRzKGNv
bW1pdHMpCisgICAgYXN5bmMgX3JlcG9ydFRvRW5kUG9pbnQoZW5kUG9pbnQsIGNvbW1pdHNUb1Bv
c3QpCiAgICAgewotICAgICAgICBjb25zdCBjb21taXRzVG9SZXBvcnQgPSB7InNsYXZlTmFtZSI6
IHRoaXMuX3NsYXZlQXV0aFsnbmFtZSddLCAic2xhdmVQYXNzd29yZCI6IHRoaXMuX3NsYXZlQXV0
aFsncGFzc3dvcmQnXSwgJ2NvbW1pdHMnOiBjb21taXRzfTsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X3JlbW90ZUFQSS5wb3N0SlNPTldpdGhTdGF0dXMoJy9hcGkvcmVwb3J0LWNvbW1pdHMvJywgY29t
bWl0c1RvUmVwb3J0KTsKKyAgICAgICAgaWYgKCFjb21taXRzVG9Qb3N0Lmxlbmd0aCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBmb3IgKGNvbnN0IGNvbW1pdHNUb1N1Ym1pdCBvZiB0
aGlzLl9zcGxpdEFycmF5QnlMaW1pdChjb21taXRzVG9Qb3N0LCB0aGlzLl9tYXhTdWJtaXRDb3Vu
dCkpIHsKKyAgICAgICAgICAgIGNvbnN0IHJlcG9ydCA9IHsic2xhdmVOYW1lIjogdGhpcy5fc2xh
dmVBdXRoWyduYW1lJ10sICJzbGF2ZVBhc3N3b3JkIjogdGhpcy5fc2xhdmVBdXRoWydwYXNzd29y
ZCddLCAnY29tbWl0cyc6IGNvbW1pdHNUb1N1Ym1pdH07CisgICAgICAgICAgICBjb25zdCByZXNw
b25zZSA9IGF3YWl0IHRoaXMuX3JlbW90ZUFQSS5wb3N0SlNPTldpdGhTdGF0dXMoZW5kUG9pbnQs
IHJlcG9ydCk7CisgICAgICAgICAgICBhc3NlcnQocmVzcG9uc2VbJ3N0YXR1cyddID09PSAnT0sn
KTsKKyAgICAgICAgfQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3Rvb2xzL3N5bmMtb3MtdmVyc2lvbnMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvdG9vbHMvc3luYy1vcy12ZXJzaW9ucy5qcwppbmRleCA3N2Y0YTBhN2QzNDM4MTk0MzA3NmI4
M2VjNDhkNWJjOTBiNDgzNTg2Li40ZmJlNTgyYmYwMzg4ZGE0YTRiM2E3NTMwN2QyZjE2YjYyMjk3
Yzc4IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvc3luYy1vcy12
ZXJzaW9ucy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvc3luYy1vcy12
ZXJzaW9ucy5qcwpAQCAtMjksNyArMjksNyBAQCBmdW5jdGlvbiBzeW5jTG9vcChvcHRpb25zKQog
ICAgIGNvbnN0IHJlbW90ZUFQSSA9IG5ldyBSZW1vdGVBUEkoc2VydmVyQ29uZmlnLnNlcnZlcik7
CiAKICAgICBjb25zdCBmZXRjaGVycyA9IG9zQ29uZmlnTGlzdC5tYXAoKG9zQ29uZmlnKSA9PiBu
ZXcgT1NCdWlsZEZldGNoZXIob3NDb25maWcsIHJlbW90ZUFQSSwgc2VydmVyQ29uZmlnLnNsYXZl
LCBuZXcgU3VicHJvY2VzcywgY29uc29sZSkpOwotICAgIE9TQnVpbGRGZXRjaGVyLmZldGNoQW5k
UmVwb3J0QWxsSW5PcmRlcihmZXRjaGVycykuY2F0Y2goKGVycm9yKSA9PiB7CisgICAgT1NCdWls
ZEZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVDb21taXRzKGZldGNoZXJzKS5jYXRjaCgoZXJy
b3IpID0+IHsKICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgIGlmICh0eXBl
b2YoZXJyb3Iuc3RhY2spID09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICBmb3IgKGxldCBsaW5l
IG9mIGVycm9yLnN0YWNrLnNwbGl0KCdcbicpKQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMuanMKaW5kZXggMmVkMWQ4MDJi
YTEyZmQ5YmYwMjc2YzI1ZDhjODJkMmRmMzMzOGI2MC4uOTIxZmY1ZDM4ZDg2NTIyNGI4MzdkYmZj
MGFmZDMxOTFiYjcxNTk3YyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Vu
aXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRlc3RzLmpzCkBAIC01Myw2ICs1MywxNyBAQCBmdW5j
dGlvbiBvc3hDb21taXQoKQogICAgIH0pOwogfQogCitmdW5jdGlvbiBvc3hDb21taXRXaXRoVGVz
dGFiaWxpdHlXYXJuaW5nKCkKK3sKKyAgICByZXR1cm4gbmV3IENvbW1pdExvZyg1LCB7CisgICAg
ICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3N4LAorICAgICAgICByZXZpc2lvbjogJzEwLjEx
LjQgMTVFNjUnLAorICAgICAgICB0aW1lOiBudWxsLAorICAgICAgICBvcmRlcjogMTUwNDA2NSwK
KyAgICAgICAgdGVzdGFiaWxpdHlXYXJuaW5nOiAiUGFuaWMgb24gYm9vdCIKKyAgICB9KTsKK30K
KwogZnVuY3Rpb24gb2xkT1NYQ29tbWl0KCkKIHsKICAgICByZXR1cm4gbmV3IENvbW1pdExvZyg2
LCB7CkBAIC00MDUsNCArNDE2LDE1IEBAIGRlc2NyaWJlKCdDb21taXRMb2cnLCBmdW5jdGlvbiAo
KSB7CiAKICAgICAgICAgfSk7CiAgICAgfSk7CisKKyAgICBkZXNjcmliZSgnZmV0Y2hPd25lZENv
bW1pdHMnLCAoKSA9PiB7CisgICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICAgICAg
TW9ja1JlbW90ZUFQSS5pbmplY3QobnVsbCwgQnJvd3NlclByaXZpbGVnZWRBUEkpOworICAgICAg
ICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAidGVzdGFiaWxpdHlXYXJuaW5nIiBt
ZXNzYWdlJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gb3N4Q29tbWl0V2l0
aFRlc3RhYmlsaXR5V2FybmluZygpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC50
ZXN0YWJpbGl0eVdhcm5pbmcoKSwgJ1BhbmljIG9uIGJvb3QnKTsKKyAgICAgICAgfSk7CisgICAg
fSk7CiB9KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3Rz
L2NvbW1pdC1zZXQtdGVzdHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0
cy9jb21taXQtc2V0LXRlc3RzLmpzCmluZGV4IDdlMzlhYjcwY2RlZGJkMzM3NGE0NWE3YmE3OWNj
NmYwNmRhMjRkMDYuLjExMWU0ZDlmMmRhZDQyNTkwNzhkOGJhZTBjMjUxY2VjMGIyNDg0OGMgMTAw
NjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1zZXQt
dGVzdHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0
LXNldC10ZXN0cy5qcwpAQCAtMTYxLDYgKzE2MSwxNyBAQCBmdW5jdGlvbiBhbm90aGVyQ29tbWl0
V2l0aEdpdFJldmlzaW9uKCkKICAgICB9KTsKIH0KIAorZnVuY3Rpb24gY29tbWl0V2l0aFRlc3Rh
YmlsaXR5V2FybmluZygpCit7CisgICAgcmV0dXJuIENvbW1pdExvZy5lbnN1cmVTaW5nbGV0b24o
MjAyMywgeworICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLndlYmtpdEdpdCwKKyAgICAg
ICAgcmV2aXNpb246ICdmMjRmYzY3ODczYTAwNjhmZDVhM2E5YWRhYzU5NWYwMDM2YzIxMzE1JywK
KyAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAgICB0aW1lOiAxNDU2OTMyNzczMDAw
LAorICAgICAgICB0ZXN0YWJpbGl0eVdhcm5pbmc6ICdGYWlsZWQgY29tcGlsYXRpb24nCisgICAg
fSk7Cit9CisKIGRlc2NyaWJlKCdDb21taXRTZXQnLCAoKSA9PiB7CiAgICAgTW9ja1JlbW90ZUFQ
SS5pbmplY3QobnVsbCwgQnJvd3NlclByaXZpbGVnZWRBUEkpOwogICAgIE1vY2tNb2RlbHMuaW5q
ZWN0KCk7CkBAIC0yODUsNiArMjk2LDE1IEBAIGRlc2NyaWJlKCdDb21taXRTZXQnLCAoKSA9PiB7
CiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIGZ1bmN0aW9uIGNvbW1pdFNldFdpdGhUZXN0YWJp
bGl0eVdhcm5pbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbW1pdFNldC5lbnN1cmVTaW5n
bGV0b24oMTYsIHsKKyAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFt7IGNvbW1pdDogY29tbWl0
V2l0aFRlc3RhYmlsaXR5V2FybmluZygpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9LAorICAgICAg
ICAgICAgICAgIHsgY29tbWl0OiB3ZWJraXRDb21taXQoKSwgcmVxdWlyZXNCdWlsZDogZmFsc2Ug
fV0sCisgICAgICAgICAgICBjdXN0b21Sb290czogW10KKyAgICAgICAgfSk7CisgICAgfQorCiAg
ICAgZnVuY3Rpb24gb25lTWVhc3VyZW1lbnRDb21taXRTZXQoKQogICAgIHsKICAgICAgICAgcmV0
dXJuIE1lYXN1cmVtZW50Q29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxLCBbCkBAIC0zOTcsNiAr
NDE3LDI1IEBAIGRlc2NyaWJlKCdDb21taXRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAgICAgICAg
ICAgIHsnMTEnOiB7IHJldmlzaW9uOiAnd2Via2l0LWNvbW1pdC0wJywgb3duZXJSZXZpc2lvbjog
bnVsbCwgcGF0Y2g6IG51bGx9LCBjdXN0b21Sb290czogWzQ1NiwgNDU4XX1dKTsKICAgICAgICAg
fSk7CiAgICAgfSk7CisKKyAgICBkZXNjcmliZSgnY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5p
bmdzJywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBjb21taXRzIHdpdGggdGVz
dGFiaWxpdHkgd2FybmluZycsICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdHMgPSBj
b21taXRTZXRXaXRoVGVzdGFiaWxpdHlXYXJuaW5nKCkuY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdh
cm5pbmdzKCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0cy5sZW5ndGgsIDEpOwor
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNbMF0sIGNvbW1pdFdpdGhUZXN0YWJpbGl0
eVdhcm5pbmcoKSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGVt
cHR5IGxpc3QgaWYgbm8gY29tbWl0IGluIGNvbW1pdCBzZXQgY29udGFpbnMgdGVzdGFibGl0eSB3
YXJuaW5nJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29tbWl0cyA9IGNvbW1pdFNldFdp
dGhUd29Db21taXRzKCkuY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzKCk7CisgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwoY29tbWl0cy5sZW5ndGgsIDApOworICAgICAgICB9KTsKKyAgICB9
KTsKKworICAgIGRlc2NyaWJlKCdjb21taXRzJywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxk
IHJldHVybiBhbGwgY29tbWl0cyBpbiBjb21taXQgc2V0JywgKCkgPT4geworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKGNvbW1pdFNldFdpdGhUd29Db21taXRzKCkuY29tbWl0cygpLmxlbmd0aCwg
Mik7CisgICAgICAgIH0pOworICAgIH0pOwogfSk7CiAKIGRlc2NyaWJlKCdJbnRlcm1lZGlhdGVD
b21taXRTZXQnLCAoKSA9PiB7CkBAIC02MjAsOSArNjU5LDcgQEAgZGVzY3JpYmUoJ0ludGVybWVk
aWF0ZUNvbW1pdFNldCcsICgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQoIWNvbW1pdFNl
dC5jb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMud2Via2l0KSk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgfSk7Ci0KICAgICB9KTsKLQogfSk7CiAKIGRlc2NyaWJlKCdDdXN0b21Db21t
aXRTZXQnLCAoKSA9PiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357273</attachid>
            <date>2018-12-13 17:05:52 -0800</date>
            <delta_ts>2018-12-14 01:45:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191557-20181213170551.patch</filename>
            <type>text/plain</type>
            <size>61869</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5MTM1CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBkMDZkYzBjYWRhYTkzNWVkMTM4NzlkNWQzYWM4NDFhOGY3YzJhMDI5Li42ZmM3MzMyMGYx
OTE2NzA4ZWIxNDcwMDc5MTYxM2ExYTg1ZWQ3OWE5IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxOC0xMi0xMyAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmQgY29tbWl0cyB0YWJsZSB0byBjb250YWluIHRl
c3RhYmlsaXR5IHdhcm5pbmcgaW5mb3JtYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE1NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUgYWJpbGl0eSB0byBzdG9yZSB0ZXN0YWJp
bGl0eSB3YXJuaW5nIG1lc3NhZ2UgaW4gY29tbWl0cyB0YWJsZS4KKyAgICAgICAgQWRkZWQgJy9h
cGkvdXBkYXRlLWNvbW1pdHMnIHRvIHN1cHBvcnQgdXBkYXRpbmcgYW4gZXhpc3RpbmcgY29tbWl0
LgorICAgICAgICBVcGRhdGUgb3MgdmVyc2lvbiBzeW5jaW5nIHNjcmlwdCB0byBiZSBhYmxlIHRv
IHVwZGF0ZSB0ZXN0YWJpbGl0eSB3YXJuaW5nIGluZm9ybWF0aW9uLgorCisgICAgICAgICogaW5p
dC1kYXRhYmFzZS5zcWw6IEFkZGVkICdjb21taXRfdGVzdGFiaWxpdHlfd2FybmluZycgZmllbGQg
dG8gJ2NvbW1pdHMnIHRhYmxlLgorICAgICAgICAqIHB1YmxpYy9hcGkvcmVwb3J0LWNvbW1pdHMu
cGhwOiBSZWZhY3RvciB0byBzaGFyZSBjb2RlIHdpdGggJy9hcGkvdXBkYXRlLWNvbW1pdHMnLgor
ICAgICAgICAqIHB1YmxpYy9hcGkvdXBkYXRlLWNvbW1pdHMucGhwOiBBZGRlZCBhbiBBUEkgdG8g
dXBkYXRlIGNvbW1pdCBpbmZvLgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2NvbW1pdC1sb2ct
ZmV0Y2hlci5waHA6IEV4cG9zZSB0ZXN0YWJpbGl0eSB3YXJuaW5nIGluZm9ybWF0aW9uIGluIHRo
aXMgQVBJLgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2pzb24taGVhZGVyLnBocDogTW92ZSBj
b2RlIGZyb20gJy9hcGkvcmVwb3J0LWNvbW1pdHMucGhwJyB0byB0aGlzIGZpbGUgc28gdGhhdAor
ICAgICAgICBpdCBjYW4gYmUgc2hhcmVkIHdpdGggJy9hcGkvdXBkYXRlLWNvbW1pdHMucGhwJy5n
aXQKKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanM6IENvbW1pdExvZyBv
YmplY3Qgc2hvdWxkIGV4cG9zZSB0ZXN0YWJpbGl0eSB3YXJuaW5nIGluZm9ybWF0aW9uLgorICAg
ICAgICAoQ29tbWl0TG9nLnByb3RvdHlwZS51cGRhdGVTaW5nbGV0b24pOgorICAgICAgICAoQ29t
bWl0TG9nLnByb3RvdHlwZS50ZXN0YWJpbGl0eVdhcm5pbmcpOgorICAgICAgICAqIHB1YmxpYy92
My9tb2RlbHMvY29tbWl0LXNldC5qczogQWRkZWQgJ2NvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJu
aW5ncycgYW5kICdjb21taXRzJyB0byBDb21taXRTZXQgYW5kCisgICAgICAgIEludGVybWVkaWF0
ZUNvbW1pdFNldCBpbnN0YW5jZXMuCisgICAgICAgIChDb21taXRTZXQucHJvdG90eXBlLmNvbW1p
dHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5ncyk6CisgICAgICAgIChDb21taXRTZXQucHJvdG90eXBl
LmNvbW1pdHMpOgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5jb21t
aXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MpOgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0
U2V0LnByb3RvdHlwZS5jb21taXRzKToKKyAgICAgICAgKiBzZXJ2ZXItdGVzdHMvYXBpLXVwZGF0
ZS1jb21taXRzLmpzOiBBZGRlZCB1bml0IHRlc3RzIGZvciAnL2FwaS91cGRhdGUtY29tbWl0LXRl
c3RhYmlsaXR5Jy4KKyAgICAgICAgKiBzZXJ2ZXItdGVzdHMvdG9vbHMtb3MtYnVpbGQtZmV0Y2hl
ci10ZXN0cy5qczogQWRkZWQgYW5kIHVwZGF0ZWQgdW5pdCB0ZXN0cy4KKyAgICAgICAgKiB0b29s
cy9qcy9vcy1idWlsZC1mZXRjaGVyLmpzOiBBZGRlZCB0aGUgYWJpbGl0eSB0byB1cGRhdGUgY29t
bWl0IHRlc3RhYmlsaXR5IHdhcm5pbmdzLgorICAgICAgICAoYXN5bmMuZmV0Y2hSZXBvcnRBbmRV
cGRhdGVDb21taXRzKToKKyAgICAgICAgKHByb3RvdHlwZS5fc3BsaXRBcnJheUJ5TGltaXQpOgor
ICAgICAgICAocHJvdG90eXBlLmFzeW5jLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzKToKKyAg
ICAgICAgKHByb3RvdHlwZS5hc3luYy5fZmV0Y2hBdmFpbGFibGVCdWlsZHMpOgorICAgICAgICAo
cHJvdG90eXBlLmFzeW5jLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKToKKyAgICAgICAgKHBy
b3RvdHlwZS5fY29tbWl0c1dpdGhpblJhbmdlKToKKyAgICAgICAgKHByb3RvdHlwZS5hc3luYy5f
cmVwb3J0VG9FbmRQb2ludCk6CisgICAgICAgIChmZXRjaEFuZFJlcG9ydEFsbEluT3JkZXIpOiBE
ZWxldGVkLgorICAgICAgICAocHJvdG90eXBlLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKHByb3RvdHlwZS5fZmV0Y2hBdmFpbGFibGVCdWlsZHMpOiBEZWxldGVk
LgorICAgICAgICAocHJvdG90eXBlLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKTogRGVsZXRl
ZC4KKyAgICAgICAgKHByb3RvdHlwZS5fc3VibWl0Q29tbWl0cyk6IERlbGV0ZWQuCisgICAgICAg
ICogdG9vbHMvc3luYy1vcy12ZXJzaW9ucy5qczoKKyAgICAgICAgKiB1bml0LXRlc3RzL2NvbW1p
dC1sb2ctdGVzdHMuanM6IEFkZGVkIGEgdW5pdCB0ZXN0IGZvciAndGVzdGFiaWxpdHlXYXJuaW5n
Jy4KKyAgICAgICAgKiB1bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanM6IEFkZGVkIHVuaXQg
dGVzdHMgZm9yICdjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MnLgorCiAyMDE4LTExLTE2
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1hbmlmZXN0IGZp
bGUgY2FuIGNvbnRhaW4gYSB0ZXN0IG1ldHJpYyB3aGljaCByZWZlcmVuY2VzIGEgbm9uLWV4aXN0
ZW50IHRlc3QKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9pbml0LWRhdGFi
YXNlLnNxbCBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9pbml0LWRhdGFiYXNlLnNxbAppbmRl
eCA4MTYxZWZlM2UyODFlMzRhMGRjNDRlZGI4MGNhYjZjM2JiYzM3YmE2Li4yZWUxN2FkNGM5MmJm
NTI1NjczMzJjNjAxZmYyZTJiMTRkZDRmMzc3IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvaW5pdC1kYXRhYmFzZS5zcWwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L2luaXQtZGF0YWJhc2Uuc3FsCkBAIC0xMDEsNiArMTAxLDcgQEAgQ1JFQVRFIFRBQkxFIGNvbW1p
dHMgKAogICAgIGNvbW1pdF9jb21taXR0ZXIgaW50ZWdlciBSRUZFUkVOQ0VTIGNvbW1pdHRlcnMg
T04gREVMRVRFIENBU0NBREUsCiAgICAgY29tbWl0X21lc3NhZ2UgdGV4dCwKICAgICBjb21taXRf
cmVwb3J0ZWQgYm9vbGVhbiBOT1QgTlVMTCBERUZBVUxUIEZBTFNFLAorICAgIGNvbW1pdF90ZXN0
YWJpbGl0eV93YXJuaW5nIHZhcmNoYXIoNjQpIERFRkFVTFQgTlVMTCwKICAgICBDT05TVFJBSU5U
IGNvbW1pdF9pbl9yZXBvc2l0b3J5X211c3RfYmVfdW5pcXVlIFVOSVFVRShjb21taXRfcmVwb3Np
dG9yeSwgY29tbWl0X3JldmlzaW9uKSk7CiBDUkVBVEUgSU5ERVggY29tbWl0X3RpbWVfaW5kZXgg
T04gY29tbWl0cyhjb21taXRfdGltZSk7CiBDUkVBVEUgSU5ERVggY29tbWl0X29yZGVyX2luZGV4
IE9OIGNvbW1pdHMoY29tbWl0X29yZGVyKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvYXBpL3JlcG9ydC1jb21taXRzLnBocCBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvYXBpL3JlcG9ydC1jb21taXRzLnBocAppbmRleCA2YzY1MWE5OGFhNGZm
NzdmZjI5MGEyODIzYTNhZmI3OGJjOTIxNDViLi5jNzdkNzUyZTFiMmE5ZTllNmRhNmNmOWVlMzBm
NzViMzk0YTVmMDY1IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L2FwaS9yZXBvcnQtY29tbWl0cy5waHAKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy9hcGkvcmVwb3J0LWNvbW1pdHMucGhwCkBAIC00LDI1ICs0LDcgQEAgcmVxdWlyZSgnLi4v
aW5jbHVkZS9qc29uLWhlYWRlci5waHAnKTsKIAogZnVuY3Rpb24gbWFpbigkcG9zdF9kYXRhKQog
ewotICAgICRkYiA9IG5ldyBEYXRhYmFzZTsKLSAgICBpZiAoISRkYi0+Y29ubmVjdCgpKQotICAg
ICAgICBleGl0X3dpdGhfZXJyb3IoJ0RhdGFiYXNlQ29ubmVjdGlvbkZhaWx1cmUnKTsKLQotICAg
ICRyZXBvcnQgPSBqc29uX2RlY29kZSgkcG9zdF9kYXRhLCB0cnVlKTsKLQotICAgIHZlcmlmeV9z
bGF2ZSgkZGIsICRyZXBvcnQpOwotCi0gICAgJGNvbW1pdHMgPSBhcnJheV9nZXQoJHJlcG9ydCwg
J2NvbW1pdHMnLCBhcnJheSgpKTsKLQotICAgIGZvcmVhY2ggKCRjb21taXRzIGFzICRjb21taXRf
aW5mbykgewotICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJ3JlcG9zaXRvcnknLCAkY29t
bWl0X2luZm8pKQotICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdNaXNzaW5nUmVwb3NpdG9y
eU5hbWUnLCBhcnJheSgnY29tbWl0JyA9PiAkY29tbWl0X2luZm8pKTsKLSAgICAgICAgaWYgKCFh
cnJheV9rZXlfZXhpc3RzKCdyZXZpc2lvbicsICRjb21taXRfaW5mbykpCi0gICAgICAgICAgICBl
eGl0X3dpdGhfZXJyb3IoJ01pc3NpbmdSZXZpc2lvbicsIGFycmF5KCdjb21taXQnID0+ICRjb21t
aXRfaW5mbykpOwotICAgICAgICByZXF1aXJlX2Zvcm1hdCgnUmV2aXNpb24nLCAkY29tbWl0X2lu
Zm9bJ3JldmlzaW9uJ10sICcvXltBLVphLXowLTkgXC5dKyQvJyk7Ci0gICAgICAgIGlmIChhcnJh
eV9rZXlfZXhpc3RzKCdhdXRob3InLCAkY29tbWl0X2luZm8pICYmICFpc19hcnJheSgkY29tbWl0
X2luZm9bJ2F1dGhvciddKSkKLSAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJvcignSW52YWxpZEF1
dGhvckZvcm1hdCcsIGFycmF5KCdjb21taXQnID0+ICRjb21taXRfaW5mbykpOwotICAgIH0KKyAg
ICBsaXN0KCRkYiwgJGNvbW1pdHMpID0gY29ubmVjdF9kYXRhYmFzZV9hbmRfc2FuaXRpemVfY29t
bWl0cygkcG9zdF9kYXRhKTsKIAogICAgICRkYi0+YmVnaW5fdHJhbnNhY3Rpb24oKTsKICAgICBm
b3JlYWNoICgkY29tbWl0cyBhcyAkY29tbWl0X2luZm8pIHsKQEAgLTU2LDMxICszOCwxMCBAQCBm
dW5jdGlvbiBtYWluKCRwb3N0X2RhdGEpCiBmdW5jdGlvbiBpbnNlcnRfY29tbWl0KCRkYiwgJGNv
bW1pdF9pbmZvLCAkcmVwb3NpdG9yeV9pZCwgJG93bmVyX2NvbW1pdF9pZCkKIHsKICAgICAkYXV0
aG9yID0gYXJyYXlfZ2V0KCRjb21taXRfaW5mbywgJ2F1dGhvcicpOwotICAgICRjb21taXR0ZXJf
aWQgPSBOVUxMOwotICAgIGlmICgkYXV0aG9yKSB7Ci0gICAgICAgICRhY2NvdW50ID0gYXJyYXlf
Z2V0KCRhdXRob3IsICdhY2NvdW50Jyk7Ci0gICAgICAgICRjb21taXR0ZXJfcXVlcnkgPSBhcnJh
eSgncmVwb3NpdG9yeScgPT4gJHJlcG9zaXRvcnlfaWQsICdhY2NvdW50JyA9PiAkYWNjb3VudCk7
Ci0gICAgICAgICRjb21taXR0ZXJfZGF0YSA9ICRjb21taXR0ZXJfcXVlcnk7Ci0gICAgICAgICRu
YW1lID0gYXJyYXlfZ2V0KCRhdXRob3IsICduYW1lJyk7Ci0gICAgICAgIGlmICgkbmFtZSkKLSAg
ICAgICAgICAgICRjb21taXR0ZXJfZGF0YVsnbmFtZSddID0gJG5hbWU7Ci0gICAgICAgICRjb21t
aXR0ZXJfaWQgPSAkZGItPnVwZGF0ZV9vcl9pbnNlcnRfcm93KCdjb21taXR0ZXJzJywgJ2NvbW1p
dHRlcicsICRjb21taXR0ZXJfcXVlcnksICRjb21taXR0ZXJfZGF0YSk7Ci0gICAgICAgIGlmICgh
JGNvbW1pdHRlcl9pZCkgewotICAgICAgICAgICAgJGRiLT5yb2xsYmFja190cmFuc2FjdGlvbigp
OwotICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdGYWlsZWRUb0luc2VydENvbW1pdHRlcics
IGFycmF5KCdjb21taXR0ZXInID0+ICRjb21taXR0ZXJfZGF0YSkpOwotICAgICAgICB9Ci0gICAg
fQorICAgICRjb21taXR0ZXJfaWQgPSAkYXV0aG9yID8gZmluZF9vcl91cGRhdGVfYXV0aG9yX2Zv
cl9yZXBvc2l0b3J5KCRkYiwgJGF1dGhvciwgJHJlcG9zaXRvcnlfaWQpIDogTlVMTDsKIAogICAg
ICRwcmV2aW91c19jb21taXRfcmV2aXNpb24gPSBhcnJheV9nZXQoJGNvbW1pdF9pbmZvLCAncHJl
dmlvdXNDb21taXQnKTsKLSAgICAkcHJldmlvdXNfY29tbWl0X2lkID0gTlVMTDsKLSAgICBpZiAo
JHByZXZpb3VzX2NvbW1pdF9yZXZpc2lvbikgewotICAgICAgICAkcHJldmlvdXNfY29tbWl0ID0g
JGRiLT5zZWxlY3RfZmlyc3Rfcm93KCdjb21taXRzJywgJ2NvbW1pdCcsIGFycmF5KCdyZXBvc2l0
b3J5JyA9PiAkcmVwb3NpdG9yeV9pZCwgJ3JldmlzaW9uJyA9PiAkcHJldmlvdXNfY29tbWl0X3Jl
dmlzaW9uKSk7Ci0gICAgICAgIGlmICghJHByZXZpb3VzX2NvbW1pdCkgewotICAgICAgICAgICAg
JGRiLT5yb2xsYmFja190cmFuc2FjdGlvbigpOwotICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9y
KCdGYWlsZWRUb0ZpbmRQcmV2aW91c0NvbW1pdCcsIGFycmF5KCdjb21taXQnID0+ICRjb21taXRf
aW5mbykpOwotICAgICAgICB9Ci0gICAgICAgICRwcmV2aW91c19jb21taXRfaWQgPSAkcHJldmlv
dXNfY29tbWl0Wydjb21taXRfaWQnXTsKLSAgICB9CisgICAgJHByZXZpb3VzX2NvbW1pdF9pZCA9
ICRwcmV2aW91c19jb21taXRfcmV2aXNpb24gPyBmaW5kX3ByZXZpb3VzX2NvbW1pdCgkZGIsICRy
ZXBvc2l0b3J5X2lkLCAkcHJldmlvdXNfY29tbWl0X3JldmlzaW9uLCAkY29tbWl0X2luZm8pIDog
TlVMTDsKIAogICAgICRkYXRhID0gYXJyYXkoCiAgICAgICAgICdyZXBvc2l0b3J5JyA9PiAkcmVw
b3NpdG9yeV9pZCwKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
YXBpL3VwZGF0ZS1jb21taXRzLnBocCBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
YXBpL3VwZGF0ZS1jb21taXRzLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjQ4ZDM3YzI5MzQwMWJlYTJkNTg1
ODI4MTkyZjE4Y2VkZGEzY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy9hcGkvdXBkYXRlLWNvbW1pdHMucGhwCkBAIC0wLDAgKzEsNjUgQEAKKzw/
cGhwCisKK3JlcXVpcmUoJy4uL2luY2x1ZGUvanNvbi1oZWFkZXIucGhwJyk7CisKK2Z1bmN0aW9u
IG1haW4oJHBvc3RfZGF0YSkKK3sKKyAgICBsaXN0KCRkYiwgJGNvbW1pdHMpID0gY29ubmVjdF9k
YXRhYmFzZV9hbmRfc2FuaXRpemVfY29tbWl0cygkcG9zdF9kYXRhKTsKKworICAgICRkYi0+YmVn
aW5fdHJhbnNhY3Rpb24oKTsKKyAgICBmb3JlYWNoICgkY29tbWl0cyBhcyAkY29tbWl0X2luZm8p
IHsKKyAgICAgICAgJHJlcG9zaXRvcnkgPSAkZGItPnNlbGVjdF9maXJzdF9yb3coJ3JlcG9zaXRv
cmllcycsICdyZXBvc2l0b3J5JywgYXJyYXkoJ25hbWUnID0+ICRjb21taXRfaW5mb1sncmVwb3Np
dG9yeSddLCAnb3duZXInID0+IE5VTEwpKTsKKyAgICAgICAgaWYgKCEkcmVwb3NpdG9yeSkgewor
ICAgICAgICAgICAgJGRiLT5yb2xsYmFja190cmFuc2FjdGlvbigpOworICAgICAgICAgICAgZXhp
dF93aXRoX2Vycm9yKCdJbnZhbGlkUmVwb3NpdG9yeScsIGFycmF5KCdjb21taXQnID0+ICRjb21t
aXRfaW5mbykpOworICAgICAgICB9CisKKyAgICAgICAgJHJlcG9zaXRvcnlfaWQgPSAkcmVwb3Np
dG9yeVsncmVwb3NpdG9yeV9pZCddOworICAgICAgICAkY29tbWl0X3VwZGF0ZSA9IGFycmF5KCk7
CisgICAgICAgIGZvcmVhY2goJGNvbW1pdF9pbmZvIGFzICRrZXkgPT4gJHZhbHVlKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKCRrZXkpIHsKKyAgICAgICAgICAgICAgICBjYXNlICJyZXBvc2l0b3J5
IjoKKyAgICAgICAgICAgICAgICBjYXNlICJyZXZpc2lvbiI6CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgInRpbWUiOgorICAgICAgICAgICAgICAgIGNh
c2UgIm1lc3NhZ2UiOgorICAgICAgICAgICAgICAgIGNhc2UgIm9yZGVyIjoKKyAgICAgICAgICAg
ICAgICAgICAgJGNvbW1pdF91cGRhdGVbJGtleV0gPSAkdmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgInRlc3RhYmlsaXR5V2FybmluZyI6Cisg
ICAgICAgICAgICAgICAgICAgICRjb21taXRfdXBkYXRlWyd0ZXN0YWJpbGl0eV93YXJuaW5nJ10g
PSAkdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgImF1dGhvciI6CisgICAgICAgICAgICAgICAgICAgICRjb21taXRfdXBkYXRlWydjb21taXR0
ZXInXSA9IGZpbmRfb3JfdXBkYXRlX2F1dGhvcl9mb3JfcmVwb3NpdG9yeSgkZGIsICR2YWx1ZSwg
JHJlcG9zaXRvcnlfaWQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlICJwcmV2aW91c0NvbW1pdCI6CisgICAgICAgICAgICAgICAgICAgICRjb21taXRf
dXBkYXRlWydwcmV2aW91c19jb21taXQnXSA9IGZpbmRfcHJldmlvdXNfY29tbWl0KCRkYiwgJHJl
cG9zaXRvcnlfaWQsICR2YWx1ZSwgJGNvbW1pdF9pbmZvKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAib3duZWRDb21taXRzIjoKKyAgICAgICAgICAg
ICAgICAgICAgJGRiLT5yb2xsYmFja190cmFuc2FjdGlvbigpOworICAgICAgICAgICAgICAgICAg
ICBleGl0X3dpdGhfZXJyb3IoJ093bmVkQ29tbWl0c1VwZGF0ZU5vdFN1cHBvcnRlZFlldCcsIGFy
cmF5KCdjb21taXQnID0+ICRjb21taXRfaW5mbykpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAkZGItPnJv
bGxiYWNrX3RyYW5zYWN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJv
cignVW5yZWNvZ25pemVkS2V5JywgYXJyYXkoJ2tleScgPT4gJGtleSkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjb3VudCgkY29tbWl0X3VwZGF0ZSkpIHsKKyAg
ICAgICAgICAgICRkYi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKKyAgICAgICAgICAgIGV4aXRf
d2l0aF9lcnJvcignTm90aGluZ1RvVXBkYXRlJywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9p
bmZvKSk7CisgICAgICAgIH0KKworICAgICAgICAkdXBkYXRlZF9jb21taXQgPSAkZGItPnVwZGF0
ZV9yb3coJ2NvbW1pdHMnLCAnY29tbWl0JywgYXJyYXkoJ3JldmlzaW9uJyA9PiAkY29tbWl0X2lu
Zm9bJ3JldmlzaW9uJ10sICdyZXBvc2l0b3J5JyA9PiAkcmVwb3NpdG9yeV9pZCksCisgICAgICAg
ICAgICAkY29tbWl0X3VwZGF0ZSk7CisgICAgICAgIGlmICghJHVwZGF0ZWRfY29tbWl0KSB7Cisg
ICAgICAgICAgICAkZGItPnJvbGxiYWNrX3RyYW5zYWN0aW9uKCk7CisgICAgICAgICAgICBleGl0
X3dpdGhfZXJyb3IoJ0ZhaWxlZFRvVXBkYXRlQ29tbWl0JywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNv
bW1pdF9pbmZvKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgJGRiLT5jb21taXRfdHJhbnNhY3Rp
b24oKTsKKyAgICBleGl0X3dpdGhfc3VjY2VzcygpOworfQorCittYWluKGZpbGVfZ2V0X2NvbnRl
bnRzKCdwaHA6Ly9pbnB1dCcpKTsKKz8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm
IC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2NvbW1pdC1s
b2ctZmV0Y2hlci5waHAgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUv
Y29tbWl0LWxvZy1mZXRjaGVyLnBocAppbmRleCA5Yzc2MjYzY2I2NjE2YjU5NWIxZGRkZmI5OTA5
NDcyZWExNTg5ZDA4Li4yNjQ3NmQwZDkwZDFhMTg0MGNiMzEwODc3YjdlNzkzZTRhMDA0MTAwIDEw
MDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0
LWxvZy1mZXRjaGVyLnBocAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2lu
Y2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocApAQCAtNjIsNiArNjIsNyBAQCBjbGFzcyBDb21t
aXRMb2dGZXRjaGVyIHsKICAgICAgICAgICAgIGNvbW1pdF9yZXBvc2l0b3J5IGFzICJyZXBvc2l0
b3J5IiwKICAgICAgICAgICAgIGNvbW1pdF9tZXNzYWdlIGFzICJtZXNzYWdlIiwKICAgICAgICAg
ICAgIGNvbW1pdF9vcmRlciBhcyAib3JkZXIiLAorICAgICAgICAgICAgY29tbWl0X3Rlc3RhYmls
aXR5X3dhcm5pbmcgYXMgInRlc3RhYmlsaXR5V2FybmluZyIsCiAgICAgICAgICAgICBFWElTVFMo
U0VMRUNUICogRlJPTSBjb21taXRfb3duZXJzaGlwcyBXSEVSRSBjb21taXRfb3duZXIgPSBjb21t
aXRfaWQpIGFzICJvd25zQ29tbWl0cyIKICAgICAgICAgICAgIEZST00gY29tbWl0cyBMRUZUIE9V
VEVSIEpPSU4gY29tbWl0dGVycyBPTiBjb21taXRfY29tbWl0dGVyID0gY29tbWl0dGVyX2lkCiAg
ICAgICAgICAgICBXSEVSRSBjb21taXRfcmVwb3NpdG9yeSA9ICQxIEFORCBjb21taXRfcmVwb3J0
ZWQgPSB0cnVlJzsKQEAgLTIxMSw2ICsyMTIsNyBAQCBjbGFzcyBDb21taXRMb2dGZXRjaGVyIHsK
ICAgICAgICAgICAgICdhdXRob3JOYW1lJyA9PiAkY29tbWl0dGVyX3JvdyA/ICRjb21taXR0ZXJf
cm93Wydjb21taXR0ZXJfbmFtZSddIDogbnVsbCwKICAgICAgICAgICAgICdhdXRob3JFbWFpbCcg
PT4gJGNvbW1pdHRlcl9yb3cgPyAkY29tbWl0dGVyX3Jvd1snY29tbWl0dGVyX2FjY291bnQnXSA6
IG51bGwsCiAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJGNvbW1pdF9yb3dbJ2NvbW1pdF9tZXNz
YWdlJ10sCisgICAgICAgICAgICAndGVzdGFiaWxpdHlXYXJuaW5nJyA9PiAkY29tbWl0X3Jvd1sn
Y29tbWl0X3Rlc3RhYmlsaXR5X3dhcm5pbmcnXSwKICAgICAgICAgICAgICdvd25zQ29tbWl0cycg
PT4gJG93bnNfY29tbWl0cwogICAgICAgICApOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9qc29uLWhlYWRlci5waHAgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvanNvbi1oZWFkZXIucGhwCmluZGV4IGEy
NzY0MWM5MTlkNDI4ZGFkYjAzODhkNmJhYzQyNzVlMjRkYjhjNzcuLmMyMjk5NGVhYTkxNGI2ZDFi
YjAyMDE5NDBjNTZkNzA1NTEyMTQyYWIgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvaW5jbHVkZS9qc29uLWhlYWRlci5waHAKKysrIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2pzb24taGVhZGVyLnBocApAQCAtMjAwLDQgKzIwMCw1
NCBAQCBmdW5jdGlvbiBmaW5kX3RyaWdnZXJhYmxlX2Zvcl90YXNrKCRkYiwgJHRhc2tfaWQpIHsK
ICAgICByZXR1cm4gTlVMTDsKIH0KIAorZnVuY3Rpb24gY29ubmVjdF9kYXRhYmFzZV9hbmRfc2Fu
aXRpemVfY29tbWl0cygkcG9zdF9kYXRhKQoreworICAgICRkYiA9IG5ldyBEYXRhYmFzZTsKKyAg
ICBpZiAoISRkYi0+Y29ubmVjdCgpKQorICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0RhdGFiYXNl
Q29ubmVjdGlvbkZhaWx1cmUnKTsKKworICAgICRyZXBvcnQgPSBqc29uX2RlY29kZSgkcG9zdF9k
YXRhLCB0cnVlKTsKKworICAgIHZlcmlmeV9zbGF2ZSgkZGIsICRyZXBvcnQpOworCisgICAgJGNv
bW1pdHMgPSBhcnJheV9nZXQoJHJlcG9ydCwgJ2NvbW1pdHMnLCBhcnJheSgpKTsKKworICAgIGZv
cmVhY2ggKCRjb21taXRzIGFzICRjb21taXRfaW5mbykgeworICAgICAgICBpZiAoIWFycmF5X2tl
eV9leGlzdHMoJ3JlcG9zaXRvcnknLCAkY29tbWl0X2luZm8pKQorICAgICAgICAgICAgZXhpdF93
aXRoX2Vycm9yKCdNaXNzaW5nUmVwb3NpdG9yeU5hbWUnLCBhcnJheSgnY29tbWl0JyA9PiAkY29t
bWl0X2luZm8pKTsKKyAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdyZXZpc2lvbicsICRj
b21taXRfaW5mbykpCisgICAgICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ01pc3NpbmdSZXZpc2lv
bicsIGFycmF5KCdjb21taXQnID0+ICRjb21taXRfaW5mbykpOworICAgICAgICByZXF1aXJlX2Zv
cm1hdCgnUmV2aXNpb24nLCAkY29tbWl0X2luZm9bJ3JldmlzaW9uJ10sICcvXltBLVphLXowLTkg
XC5dKyQvJyk7CisgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdhdXRob3InLCAkY29tbWl0
X2luZm8pICYmICFpc19hcnJheSgkY29tbWl0X2luZm9bJ2F1dGhvciddKSkKKyAgICAgICAgICAg
IGV4aXRfd2l0aF9lcnJvcignSW52YWxpZEF1dGhvckZvcm1hdCcsIGFycmF5KCdjb21taXQnID0+
ICRjb21taXRfaW5mbykpOworICAgIH0KKworICAgIHJldHVybiBhcnJheSgkZGIsICRjb21taXRz
KTsKK30KKworZnVuY3Rpb24gZmluZF9vcl91cGRhdGVfYXV0aG9yX2Zvcl9yZXBvc2l0b3J5KCRk
YiwgJGF1dGhvciwgJHJlcG9zaXRvcnlfaWQpCit7CisgICAgJGFjY291bnQgPSBhcnJheV9nZXQo
JGF1dGhvciwgJ2FjY291bnQnKTsKKyAgICAkY29tbWl0dGVyX3F1ZXJ5ID0gYXJyYXkoJ3JlcG9z
aXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLCAnYWNjb3VudCcgPT4gJGFjY291bnQpOworICAgICRj
b21taXR0ZXJfZGF0YSA9ICRjb21taXR0ZXJfcXVlcnk7CisgICAgJG5hbWUgPSBhcnJheV9nZXQo
JGF1dGhvciwgJ25hbWUnKTsKKyAgICBpZiAoJG5hbWUpCisgICAgICAgICRjb21taXR0ZXJfZGF0
YVsnbmFtZSddID0gJG5hbWU7CisgICAgJGNvbW1pdHRlcl9pZCA9ICRkYi0+dXBkYXRlX29yX2lu
c2VydF9yb3coJ2NvbW1pdHRlcnMnLCAnY29tbWl0dGVyJywgJGNvbW1pdHRlcl9xdWVyeSwgJGNv
bW1pdHRlcl9kYXRhKTsKKyAgICBpZiAoISRjb21taXR0ZXJfaWQpIHsKKyAgICAgICAgJGRiLT5y
b2xsYmFja190cmFuc2FjdGlvbigpOworICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0ZhaWxlZFRv
SW5zZXJ0Q29tbWl0dGVyJywgYXJyYXkoJ2NvbW1pdHRlcicgPT4gJGNvbW1pdHRlcl9kYXRhKSk7
CisgICAgfQorICAgIHJldHVybiAkY29tbWl0dGVyX2lkOworfQorCitmdW5jdGlvbiBmaW5kX3By
ZXZpb3VzX2NvbW1pdCgkZGIsICRyZXBvc2l0b3J5X2lkLCAkcHJldmlvdXNfY29tbWl0X3Jldmlz
aW9uLCAkY29tbWl0X2luZm8pCit7CisgICAgJHByZXZpb3VzX2NvbW1pdCA9ICRkYi0+c2VsZWN0
X2ZpcnN0X3JvdygnY29tbWl0cycsICdjb21taXQnLCBhcnJheSgncmVwb3NpdG9yeScgPT4gJHJl
cG9zaXRvcnlfaWQsICdyZXZpc2lvbicgPT4gJHByZXZpb3VzX2NvbW1pdF9yZXZpc2lvbikpOwor
ICAgIGlmICghJHByZXZpb3VzX2NvbW1pdCkgeworICAgICAgICAkZGItPnJvbGxiYWNrX3RyYW5z
YWN0aW9uKCk7CisgICAgICAgIGV4aXRfd2l0aF9lcnJvcignRmFpbGVkVG9GaW5kUHJldmlvdXND
b21taXQnLCBhcnJheSgnY29tbWl0JyA9PiAkY29tbWl0X2luZm8pKTsKKyAgICB9CisgICAgcmV0
dXJuICRwcmV2aW91c19jb21taXRbJ2NvbW1pdF9pZCddOworfQogPz4KZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanMgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzCmlu
ZGV4IDEzMGNiOTBmMTQ5OGFlYmUzMDk5MDdmNDNjNTUzNWU0NzAzYmVjMzguLjJmYTJlYTA2OTQ2
ODhiODk2NDlmYWJjZGFhMjBmMmFjOGQ2ZmMwY2EgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanMKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qcwpAQCAtMjksMTEg
KzI5LDE0IEBAIGNsYXNzIENvbW1pdExvZyBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAg
ICAgICAgICB0aGlzLl9yYXdEYXRhLm93bnNDb21taXRzID0gcmF3RGF0YS5vd25zQ29tbWl0czsK
ICAgICAgICAgaWYgKHJhd0RhdGEub3JkZXIpCiAgICAgICAgICAgICB0aGlzLl9yYXdEYXRhLm9y
ZGVyID0gcmF3RGF0YS5vcmRlcjsKKyAgICAgICAgaWYgKHJhd0RhdGEudGVzdGFiaWxpdHlXYXJu
aW5nKQorICAgICAgICAgICAgdGhpcy5fcmF3RGF0YS50ZXN0YWJpbGl0eVdhcm5pbmcgPSByYXdE
YXRhLnRlc3RhYmlsaXR5V2FybmluZzsKICAgICB9CiAKICAgICByZXBvc2l0b3J5KCkgeyByZXR1
cm4gdGhpcy5fcmVwb3NpdG9yeTsgfQogICAgIHRpbWUoKSB7IHJldHVybiBuZXcgRGF0ZSh0aGlz
Ll9yYXdEYXRhWyd0aW1lJ10pOyB9CiAgICAgaGFzQ29tbWl0VGltZSgpIHsgcmV0dXJuIHRoaXMu
X3Jhd0RhdGFbJ3RpbWUnXSA+IDAgJiYgdGhpcy5fcmF3RGF0YVsndGltZSddICE9IG51bGw7IH0K
KyAgICB0ZXN0YWJpbGl0eVdhcm5pbmcoKSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWyd0ZXN0YWJp
bGl0eVdhcm5pbmcnXTsgfQogICAgIGF1dGhvcigpIHsgcmV0dXJuIHRoaXMuX3Jhd0RhdGFbJ2F1
dGhvck5hbWUnXTsgfQogICAgIHJldmlzaW9uKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0YVsncmV2
aXNpb24nXTsgfQogICAgIG1lc3NhZ2UoKSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWydtZXNzYWdl
J107IH0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9k
ZWxzL2NvbW1pdC1zZXQuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21v
ZGVscy9jb21taXQtc2V0LmpzCmluZGV4IDk0YWNjNTMzMjg5OGNiNDkwMGFmZTc4YjdmNmNiNjk3
OWZjMzM1MTYuLjQ1OTQ2Yzg4N2UyNGY3Mzk5NTVhOGI1MmJiZTVkYjdkZjE3YTQ1ODggMTAwNjQ0
Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1z
ZXQuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29t
bWl0LXNldC5qcwpAQCAtNzEsNiArNzEsOCBAQCBjbGFzcyBDb21taXRTZXQgZXh0ZW5kcyBEYXRh
TW9kZWxPYmplY3QgewogICAgIG93bmVyQ29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7
IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRPd25lck1hcC5nZXQocmVwb3NpdG9yeSk7
IH0KICAgICB0b3BMZXZlbFJlcG9zaXRvcmllcygpIHsgcmV0dXJuIFJlcG9zaXRvcnkuc29ydEJ5
TmFtZVByZWZlcnJpbmdPbmVzV2l0aFVSTCh0aGlzLl9yZXBvc2l0b3JpZXMuZmlsdGVyKChyZXBv
c2l0b3J5KSA9PiAhdGhpcy5vd25lclJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSkp
OyB9CiAgICAgb3duZWRSZXBvc2l0b3JpZXNGb3JPd25lclJlcG9zaXRvcnkocmVwb3NpdG9yeSkg
eyByZXR1cm4gdGhpcy5fb3duZXJSZXBvc2l0b3J5VG9Pd25lZFJlcG9zaXRvcmllc01hcC5nZXQo
cmVwb3NpdG9yeSk7IH0KKyAgICBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MoKSB7IHJl
dHVybiB0aGlzLmNvbW1pdHMoKS5maWx0ZXIoKGNvbW1pdCkgPT4gISFjb21taXQudGVzdGFiaWxp
dHlXYXJuaW5nKCkpOyB9CisgICAgY29tbWl0cygpIHsgcmV0dXJuICBBcnJheS5mcm9tKHRoaXMu
X3JlcG9zaXRvcnlUb0NvbW1pdE1hcC52YWx1ZXMoKSk7IH0KIAogICAgIHJldmlzaW9uRm9yUmVw
b3NpdG9yeShyZXBvc2l0b3J5KQogICAgIHsKQEAgLTM4Nyw2ICszODksOSBAQCBjbGFzcyBJbnRl
cm1lZGlhdGVDb21taXRTZXQgewogICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZmV0Y2hpbmdQ
cm9taXNlcyk7CiAgICAgfQogCisgICAgY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzKCkg
eyByZXR1cm4gdGhpcy5jb21taXRzKCkuZmlsdGVyKChjb21taXQpID0+ICEhY29tbWl0LnRlc3Rh
YmlsaXR5V2FybmluZygpKTsgfQorICAgIGNvbW1pdHMoKSB7IHJldHVybiAgQXJyYXkuZnJvbSh0
aGlzLl9jb21taXRCeVJlcG9zaXRvcnkudmFsdWVzKCkpOyB9CisKICAgICBfZmV0Y2hDb21taXRM
b2dBbmRPd25lZENvbW1pdHMocmVwb3NpdG9yeSwgcmV2aXNpb24pCiAgICAgewogICAgICAgICBy
ZXR1cm4gQ29tbWl0TG9nLmZldGNoRm9yU2luZ2xlUmV2aXNpb24ocmVwb3NpdG9yeSwgcmV2aXNp
b24pLnRoZW4oKGNvbW1pdHMpID0+IHsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9zZXJ2ZXItdGVzdHMvYXBpLXVwZGF0ZS1jb21taXRzLmpzIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3NlcnZlci10ZXN0cy9hcGktdXBkYXRlLWNvbW1pdHMuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzI4NDZiMDkyNWY3MjNkMDJkNjczM2M3Yzc5MTRmZmUzM2I5MjEwMgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvYXBpLXVwZGF0ZS1jb21t
aXRzLmpzCkBAIC0wLDAgKzEsMTc5IEBACisndXNlIHN0cmljdCc7CisKK2NvbnN0IGFzc2VydCA9
IHJlcXVpcmUoJ2Fzc2VydCcpOworCitjb25zdCBUZXN0U2VydmVyID0gcmVxdWlyZSgnLi9yZXNv
dXJjZXMvdGVzdC1zZXJ2ZXIuanMnKTsKK2NvbnN0IGFkZFNsYXZlRm9yUmVwb3J0ID0gcmVxdWly
ZSgnLi9yZXNvdXJjZXMvY29tbW9uLW9wZXJhdGlvbnMuanMnKS5hZGRTbGF2ZUZvclJlcG9ydDsK
K2NvbnN0IHByZXBhcmVTZXJ2ZXJUZXN0ID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMvY29tbW9uLW9w
ZXJhdGlvbnMuanMnKS5wcmVwYXJlU2VydmVyVGVzdDsKK2NvbnN0IGFzc2VydFRocm93cyA9IHJl
cXVpcmUoJy4vcmVzb3VyY2VzL2NvbW1vbi1vcGVyYXRpb25zLmpzJykuYXNzZXJ0VGhyb3dzOwor
CitkZXNjcmliZSgiL2FwaS91cGRhdGUtY29tbWl0cyIsIGZ1bmN0aW9uICgpIHsKKyAgICBwcmVw
YXJlU2VydmVyVGVzdCh0aGlzKTsKKworICAgIGNvbnN0IHN1YnZlcnNpb25Db21taXRzID0gewor
ICAgICAgICAic2xhdmVOYW1lIjogInNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2ZVBhc3N3b3Jk
IjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJjb21taXRzIjogWworICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAgICAgICAgICAgICAg
InJldmlzaW9uIjogIjIxMDk0OCIsCisgICAgICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0wMS0y
MFQwMjo1MjozNC41NzdaIiwKKyAgICAgICAgICAgICAgICAiYXV0aG9yIjogeyJuYW1lIjogIlph
bGFuIEJ1anRhcyIsICJhY2NvdW50IjogInphbGFuQGFwcGxlLmNvbSJ9LAorICAgICAgICAgICAg
ICAgICJtZXNzYWdlIjogImEgbWVzc2FnZSIsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAgICAgICAgICAg
ICAgInJldmlzaW9uIjogIjIxMDk0OSIsCisgICAgICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0w
MS0yMFQwMzoyMzo1MC42NDVaIiwKKyAgICAgICAgICAgICAgICAiYXV0aG9yIjogeyJuYW1lIjog
IkNocmlzIER1bWV6IiwgImFjY291bnQiOiAiY2R1bWV6QGFwcGxlLmNvbSJ9LAorICAgICAgICAg
ICAgICAgICJtZXNzYWdlIjogInNvbWUgbWVzc2FnZSIsCisgICAgICAgICAgICB9CisgICAgICAg
IF0KKyAgICB9OworCisgICAgY29uc3QgY29tbWl0c1VwZGF0ZSA9IHsKKyAgICAgICAgInNsYXZl
TmFtZSI6ICJzb21lU2xhdmUiLAorICAgICAgICAic2xhdmVQYXNzd29yZCI6ICJzb21lUGFzc3dv
cmQiLAorICAgICAgICAiY29tbWl0cyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAicmVwb3NpdG9yeSI6ICJXZWJLaXQiLAorICAgICAgICAgICAgICAgICJyZXZpc2lvbiI6ICIy
MTA5NDgiLAorICAgICAgICAgICAgICAgICJ0ZXN0YWJpbGl0eVdhcm5pbmciOiAiQnJlYWtzIGJ1
aWxkcyIsCisgICAgICAgICAgICAgICAgIm1lc3NhZ2UiOiAiYW5vdGhlciBtZXNzYWdlIiwKKyAg
ICAgICAgICAgICAgICAib3JkZXIiOiAyMTA5NDgsCisgICAgICAgICAgICAgICAgInRpbWUiOiAi
MjAxNy0wMS0yMFQwMzo1MjozNC41NzdaIiwKKyAgICAgICAgICAgICAgICAiYXV0aG9yIjogeyJu
YW1lIjogIkNocmlzIER1bWV6IiwgImFjY291bnQiOiAiY2R1bWV6QGFwcGxlLmNvbSJ9LAorICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAicmVwb3NpdG9yeSI6
ICJXZWJLaXQiLAorICAgICAgICAgICAgICAgICJyZXZpc2lvbiI6ICIyMTA5NDkiLAorICAgICAg
ICAgICAgICAgICJwcmV2aW91c0NvbW1pdCI6ICIyMTA5NDgiLAorICAgICAgICAgICAgICAgICJ0
ZXN0YWJpbGl0eVdhcm5pbmciOiAiQ3Jhc2hlcyBXZWJLaXQiLAorICAgICAgICAgICAgICAgICJt
ZXNzYWdlIjogImFub3RoZXIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgIm9yZGVyIjogMjEw
OTQ5LAorICAgICAgICAgICAgICAgICJ0aW1lIjogIjIwMTctMDEtMjBUMDQ6MjM6NTAuNjQ1WiIs
CisgICAgICAgICAgICAgICAgImF1dGhvciI6IHsibmFtZSI6ICJaYWxhbiBCdWp0YXMiLCAiYWNj
b3VudCI6ICJ6YWxhbkBhcHBsZS5jb20ifSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAg
IH07CisKKworICAgIGNvbnN0IGNvbW1pdHNVcGRhdGVXaXRoTWlzc2luZ1JldmlzaW9uID0gewor
ICAgICAgICAic2xhdmVOYW1lIjogInNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2ZVBhc3N3b3Jk
IjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJjb21taXRzIjogWworICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAgICAgICAgICAgICAg
InRlc3RhYmlsaXR5V2FybmluZyI6ICJCcmVha3MgYnVpbGRzIgorICAgICAgICAgICAgfQorICAg
ICAgICBdCisgICAgfTsKKworICAgIGNvbnN0IGNvbW1pdHNVcGRhdGVXaXRoTWlzc2luZ1JlcG9z
aXRvcnkgPSB7CisgICAgICAgICJzbGF2ZU5hbWUiOiAic29tZVNsYXZlIiwKKyAgICAgICAgInNs
YXZlUGFzc3dvcmQiOiAic29tZVBhc3N3b3JkIiwKKyAgICAgICAgImNvbW1pdHMiOiBbCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0OCIsCisgICAgICAg
ICAgICAgICAgInRlc3RhYmlsaXR5V2FybmluZyI6ICJCcmVha3MgYnVpbGRzIgorICAgICAgICAg
ICAgfQorICAgICAgICBdCisgICAgfTsKKworICAgIGNvbnN0IGNvbW1pdHNVcGRhdGVXaXRob3V0
QW55VXBkYXRlID0geworICAgICAgICAic2xhdmVOYW1lIjogInNvbWVTbGF2ZSIsCisgICAgICAg
ICJzbGF2ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJjb21taXRzIjogWwor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIsCisg
ICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0OCIKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgXQorICAgIH07CisKKyAgICBjb25zdCBjb21taXRzVXBkYXRlV2l0aE93bmVkQ29tbWl0c1Vw
ZGF0ZSA9IHsKKyAgICAgICAgInNsYXZlTmFtZSI6ICJzb21lU2xhdmUiLAorICAgICAgICAic2xh
dmVQYXNzd29yZCI6ICJzb21lUGFzc3dvcmQiLAorICAgICAgICAiY29tbWl0cyI6IFsKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAicmVwb3NpdG9yeSI6ICJXZWJLaXQiLAorICAgICAg
ICAgICAgICAgICJyZXZpc2lvbiI6ICIyMTA5NDgiLAorICAgICAgICAgICAgICAgICJvd25lZENv
bW1pdHMiOiBbXSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH07CisKKyAgICBjb25z
dCBjb21taXRzVXBkYXRlV2l0aFVucmVjb2duaXplZEZpZWxkID0geworICAgICAgICAic2xhdmVO
YW1lIjogInNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2ZVBhc3N3b3JkIjogInNvbWVQYXNzd29y
ZCIsCisgICAgICAgICJjb21taXRzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICJyZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjIx
MDk0OCIsCisgICAgICAgICAgICAgICAgInVucmVjb2duaXplZCI6ICJmb28iLAorICAgICAgICAg
ICAgfQorICAgICAgICBdCisgICAgfTsKKworICAgIGFzeW5jIGZ1bmN0aW9uIHNldFVwVGVzdHNX
aXRoRXhwZWN0ZWRTdGF0dXMoY29tbWl0c1VwZGF0ZSwgZXhwZWN0ZWRTdGF0dXMpCisgICAgewor
ICAgICAgICBhd2FpdCBhZGRTbGF2ZUZvclJlcG9ydChzdWJ2ZXJzaW9uQ29tbWl0cyk7CisgICAg
ICAgIGF3YWl0IFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkucG9zdEpTT04oJy9hcGkvcmVwb3J0LWNv
bW1pdHMvJywgc3VidmVyc2lvbkNvbW1pdHMpOworICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQg
VGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvV2ViS2l0LycpOwor
ICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0WydzdGF0dXMnXSwgJ09LJyk7CisgICAgICAgIGxl
dCBjb21taXRzID0gcmVzdWx0Wydjb21taXRzJ107CisgICAgICAgIGFzc2VydC5lcXVhbChjb21t
aXRzLmxlbmd0aCwgMik7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzBdLnRlc3RhYmls
aXR5V2FybmluZywgbnVsbCk7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzFdLnRlc3Rh
YmlsaXR5V2FybmluZywgbnVsbCk7CisKKyAgICAgICAgcmVzdWx0ID0gYXdhaXQgVGVzdFNlcnZl
ci5yZW1vdGVBUEkoKS5wb3N0SlNPTignL2FwaS91cGRhdGUtY29tbWl0cycsIGNvbW1pdHNVcGRh
dGUpOworICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0WydzdGF0dXMnXSwgZXhwZWN0ZWRTdGF0
dXMpOworICAgICAgICByZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpT
T04oJy9hcGkvY29tbWl0cy9XZWJLaXQvJyk7CisgICAgICAgIHJldHVybiByZXN1bHRbJ2NvbW1p
dHMnXTsKKyAgICB9CisKKyAgICBhc3luYyBmdW5jdGlvbiB0ZXN0V2l0aEV4cGVjdGVkRmFpbHVy
ZShjb21taXRzVXBkYXRlLCBleHBlY3RlZEZhaWx1cmVOYW1lKQorICAgIHsKKyAgICAgICAgY29u
c3QgY29tbWl0cyA9IGF3YWl0IHNldFVwVGVzdHNXaXRoRXhwZWN0ZWRTdGF0dXMoY29tbWl0c1Vw
ZGF0ZSwgZXhwZWN0ZWRGYWlsdXJlTmFtZSk7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRz
Lmxlbmd0aCwgMik7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzBdLnRlc3RhYmlsaXR5
V2FybmluZywgbnVsbCk7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzFdLnRlc3RhYmls
aXR5V2FybmluZywgbnVsbCk7CisgICAgfQorCisgICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggIk1p
c3NpbmdSZXZpc2lvbiIgaWYgY29tbWl0IHVwZGF0ZSBkb2VzIG5vdCBoYXZlIGNvbW1pdCByZXZp
c2lvbiBzcGVjaWZpZWQnLCBhc3luYyAoKSA9PiB7CisgICAgICAgIGF3YWl0IHRlc3RXaXRoRXhw
ZWN0ZWRGYWlsdXJlKGNvbW1pdHNVcGRhdGVXaXRoTWlzc2luZ1JldmlzaW9uLCAnTWlzc2luZ1Jl
dmlzaW9uJyk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCAiTWlzc2luZ1Jl
cG9zaXRvcnlOYW1lIiBpZiBjb21taXQgdXBkYXRlIGRvZXMgbm90IGhhdmUgY29tbWl0IHJldmlz
aW9uIHNwZWNpZmllZCcsIGFzeW5jICgpID0+IHsKKyAgICAgICAgYXdhaXQgdGVzdFdpdGhFeHBl
Y3RlZEZhaWx1cmUoY29tbWl0c1VwZGF0ZVdpdGhNaXNzaW5nUmVwb3NpdG9yeSwgJ01pc3NpbmdS
ZXBvc2l0b3J5TmFtZScpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggIk5v
dGhpbmdUb1VwZGF0ZSIgaWYgY29tbWl0IHVwZGF0ZSBkb2VzIG5vdCBoYXZlIGNvbW1pdCByZXZp
c2lvbiBzcGVjaWZpZWQnLCBhc3luYyAoKSA9PiB7CisgICAgICAgIGF3YWl0IHRlc3RXaXRoRXhw
ZWN0ZWRGYWlsdXJlKGNvbW1pdHNVcGRhdGVXaXRob3V0QW55VXBkYXRlLCAnTm90aGluZ1RvVXBk
YXRlJyk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCAiT3duZWRDb21taXRz
VXBkYXRlTm90U3VwcG9ydGVkWWV0IiB3aGVuIHRyeWluZyB0byB1cGRhdGUgb3duZWQgY29tbWl0
cyBpbmZvJywgYXN5bmMgKCkgPT4geworICAgICAgICBhd2FpdCB0ZXN0V2l0aEV4cGVjdGVkRmFp
bHVyZShjb21taXRzVXBkYXRlV2l0aE93bmVkQ29tbWl0c1VwZGF0ZSwgJ093bmVkQ29tbWl0c1Vw
ZGF0ZU5vdFN1cHBvcnRlZFlldCcpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBmYWlsIHdp
dGggIlVucmVjb2duaXplZEtleSIgd2hlbiB0cnlpbmcgdG8gdXBkYXRlIGFuIHVucmVjb2duaXpl
ZCBjb21taXQgZmllbGQnLCBhc3luYyAoKSA9PiB7CisgICAgICAgIGF3YWl0IHRlc3RXaXRoRXhw
ZWN0ZWRGYWlsdXJlKGNvbW1pdHNVcGRhdGVXaXRoVW5yZWNvZ25pemVkRmllbGQsICdVbnJlY29n
bml6ZWRLZXknKTsKKyAgICB9KTsKKworICAgIGl0KCJzaG91bGQgYmUgYWJsZSB0byB1cGRhdGUg
Y29tbWl0cyBtZXNzYWdlLCB0aW1lLCBvcmRlciwgYXV0aG9yIGFuZCBwcmV2aW91cyBjb21taXQi
LCBhc3luYyAoKSA9PiB7CisgICAgICAgIGNvbnN0IGNvbW1pdHMgPSBhd2FpdCBzZXRVcFRlc3Rz
V2l0aEV4cGVjdGVkU3RhdHVzKGNvbW1pdHNVcGRhdGUsICdPSycpOworCisgICAgICAgIGFzc2Vy
dC5lcXVhbChjb21taXRzLmxlbmd0aCwgMik7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRz
WzBdLnRlc3RhYmlsaXR5V2FybmluZywgJ0JyZWFrcyBidWlsZHMnKTsKKyAgICAgICAgYXNzZXJ0
LmVxdWFsKGNvbW1pdHNbMV0udGVzdGFiaWxpdHlXYXJuaW5nLCAnQ3Jhc2hlcyBXZWJLaXQnKTsK
KyAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNbMF0ubWVzc2FnZSwgJ2Fub3RoZXIgbWVzc2Fn
ZScpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sxXS5tZXNzYWdlLCAnYW5vdGhlciBt
ZXNzYWdlJyk7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzBdLmF1dGhvck5hbWUsICdD
aHJpcyBEdW1leicpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sxXS5hdXRob3JOYW1l
LCAnWmFsYW4gQnVqdGFzJyk7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzBdLm9yZGVy
LCAyMTA5NDgpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sxXS5vcmRlciwgMjEwOTQ5
KTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNbMF0udGltZSwgMTQ4NDg4NDM1NDU3Nyk7
CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzFdLnRpbWUsIDE0ODQ4ODYyMzA2NDUpOwor
ICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sxXS5wcmV2aW91c0NvbW1pdCwgY29tbWl0c1sw
XS5pZCk7CisgICAgfSk7Cit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLW9zLWJ1aWxk
LWZldGNoZXItdGVzdHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3Rz
L3Rvb2xzLW9zLWJ1aWxkLWZldGNoZXItdGVzdHMuanMKaW5kZXggYzZmMGRjOTNiYmUzMjg2ODc4
Y2E3ZjkwYzljNDFjZWZmNTRlYTc3OS4uY2U5ZWFmZGUzZTM3MzE0YjM2MDBlNDFiNzM2MDhmMDhh
YTdiYWQxYyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0
cy90b29scy1vcy1idWlsZC1mZXRjaGVyLXRlc3RzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9zZXJ2ZXItdGVzdHMvdG9vbHMtb3MtYnVpbGQtZmV0Y2hlci10ZXN0cy5qcwpAQCAt
MTM0LDM5ICsxMzQsNDEgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7
CiAgICAgfSk7CiAKICAgICBkZXNjcmliZSgnT1NCdWlsZGVyRmV0Y2hlci5fY29tbWl0c0ZvckF2
YWlsYWJsZUJ1aWxkcycsICgpID0+IHsKLSAgICAgICAgaXQoJ3Nob3VsZCBvbmx5IHJldHVybiBj
b21taXRzIHdob3NlIG9yZGVycyBhcmUgaGlnaGVyIHRoYW4gc3BlY2lmaWVkIG9yZGVyJywgKCkg
PT4geworICAgICAgICBpdCgnc2hvdWxkIHBhcnNlIHRoZSBjb21tYW5kIG91dHB1dCBhcyBKU09O
IGZvcm1hdCcsIGFzeW5jICgpID0+IHsKICAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBN
b2NrTG9nZ2VyOwogICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hl
cih7fSwgbnVsbCwgbnVsbCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7CiAgICAgICAgICAgICBj
b25zdCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52
b2NhdGlvbigpOwotICAgICAgICAgICAgY29uc3QgZmV0Y2hDb21taXRzUHJvbWlzZSA9IGZldGNo
ZXIuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMoJ09TWCcsIFsnbGlzdCcsICdidWlsZDEnXSwg
J15cXC4qJCcsIDE2MDQwMDAwMDAsIDE2MDYwMDAwMDApOworICAgICAgICAgICAgY29uc3QgZmV0
Y2hDb21taXRzUHJvbWlzZSA9IGZldGNoZXIuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMoWyds
aXN0JywgJ2J1aWxkMSddKTsKIAotICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JJbnZvY2F0aW9u
UHJvbWlzZS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoTW9ja1N1
YnByb2Nlc3MuaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQu
ZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcs
ICdidWlsZDEnXSk7Ci0gICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNb
MF0ucmVzb2x2ZSgnMTZEMzIxXG4xNkUzMjF6XG5cbjE2RjMyMScpOwotICAgICAgICAgICAgICAg
IHJldHVybiBmZXRjaENvbW1pdHNQcm9taXNlOwotICAgICAgICAgICAgfSkudGhlbigocmVzdWx0
cykgPT4gewotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRzLmxlbmd0aCwgMik7
Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzBdLCB7cmVwb3NpdG9y
eTogJ09TWCcsIG9yZGVyOiAxNjA0MDMyMTI2LCByZXZpc2lvbjogJzE2RTMyMXonfSk7Ci0gICAg
ICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzFdLCB7cmVwb3NpdG9yeTogJ09T
WCcsIG9yZGVyOiAxNjA1MDMyMTAwLCByZXZpc2lvbjogJzE2RjMyMSd9KTsKLSAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgYXdhaXQgd2FpdEZvckludm9jYXRpb25Qcm9taXNlOworICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMSk7
CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25z
WzBdLmNvbW1hbmQsIFsnbGlzdCcsICdidWlsZDEnXSk7CisKKyAgICAgICAgICAgIGNvbnN0IG91
dHB1dE9iamVjdCA9IHthbGxSZXZpc2lvbnM6IFsiMTZEMzIxIiwgIjE2RTMyMXoiLCAiMTZGMzIx
Il0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczogeyIxNkQzMjEiOiAiUGFuaWMifX07
CisgICAgICAgICAgICBhd2FpdCBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5yZXNvbHZl
KEpTT04uc3RyaW5naWZ5KG91dHB1dE9iamVjdCkpOworICAgICAgICAgICAgY29uc3QgYnVpbGRJ
bmZvID0gYXdhaXQgZmV0Y2hDb21taXRzUHJvbWlzZTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVw
RXF1YWwob3V0cHV0T2JqZWN0LCBidWlsZEluZm8pOwogICAgICAgICB9KTsKKyAgICB9KTsKKwog
Ci0gICAgICAgIGl0KCdzaG91bGQgb25seSByZXR1cm4gY29tbWl0cyB3aG9zZSBvcmRlcnMgYXJl
IGhpZ2hlciB0aGFuIG1pbk9yZGVyIGFuZCBsb3dlciB0aGFuIHRoZSBtYXhPcmRlcicsICgpID0+
IHsKKyAgICBkZXNjcmliZSgnT1NCdWlsZGVyRmV0Y2hlci5fY29tbWl0c1dpdGhpblJhbmdlJywg
KCkgPT4geworICAgICAgICBpdCgnc2hvdWxkIG9ubHkgcmV0dXJuIGNvbW1pdHMgd2hvc2Ugb3Jk
ZXJzIGFyZSBoaWdoZXIgdGhhbiBzcGVjaWZpZWQgb3JkZXInLCBhc3luYyAoKSA9PiB7CiAgICAg
ICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKICAgICAgICAgICAgIGNvbnN0
IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoe30sIG51bGwsIG51bGwsIE1vY2tTdWJwcm9j
ZXNzLCBsb2dnZXIpOwotICAgICAgICAgICAgY29uc3Qgd2FpdEZvckludm9jYXRpb25Qcm9taXNl
ID0gTW9ja1N1YnByb2Nlc3Mud2FpdEZvckludm9jYXRpb24oKTsKLSAgICAgICAgICAgIGNvbnN0
IGZldGNoQ29tbWl0c1Byb21pc2UgPSBmZXRjaGVyLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRz
KCdPU1gnLCBbJ2xpc3QnLCAnYnVpbGQxJ10sICdeXFwuKiQnLCAxNjA0MDAwMDAwLCAxNjA1MDAw
MDAwKTsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBmZXRjaGVyLl9jb21taXRzV2l0aGlu
UmFuZ2UoWyIxNkQzMjEiLCAiMTZFMzIxeiIsICIxNkYzMjEiXSwgIk9TWCIsIDE2MDQwMDAwMDAs
IDE2MDYwMDAwMDApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVuZ3RoLCAy
KTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzdWx0c1swXSwge3JlcG9zaXRvcnk6
ICdPU1gnLCBvcmRlcjogMTYwNDAzMjEyNiwgcmV2aXNpb246ICcxNkUzMjF6J30pOworICAgICAg
ICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzFdLCB7cmVwb3NpdG9yeTogJ09TWCcsIG9y
ZGVyOiAxNjA1MDMyMTAwLCByZXZpc2lvbjogJzE2RjMyMSd9KTsKIAotICAgICAgICAgICAgcmV0
dXJuIHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKLSAg
ICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25z
WzBdLmNvbW1hbmQsIFsnbGlzdCcsICdidWlsZDEnXSk7Ci0gICAgICAgICAgICAgICAgTW9ja1N1
YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnMTZEMzIxXG4xNkUzMjF6XG5cbjE2RjMy
MScpOwotICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaENvbW1pdHNQcm9taXNlOwotICAgICAg
ICAgICAgfSkudGhlbigocmVzdWx0cykgPT4gewotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXN1bHRzLmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChy
ZXN1bHRzWzBdLCB7cmVwb3NpdG9yeTogJ09TWCcsIG9yZGVyOiAxNjA0MDMyMTI2LCByZXZpc2lv
bjogJzE2RTMyMXonfSk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
aXQoJ3Nob3VsZCBvbmx5IHJldHVybiBjb21taXRzIHdob3NlIG9yZGVycyBhcmUgaGlnaGVyIHRo
YW4gbWluT3JkZXIgYW5kIGxvd2VyIHRoYW4gdGhlIG1heE9yZGVyJywgYXN5bmMgKCkgPT4gewor
ICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CisgICAgICAgICAgICBj
b25zdCBmZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKHt9LCBudWxsLCBudWxsLCBNb2NrU3Vi
cHJvY2VzcywgbG9nZ2VyKTsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBmZXRjaGVyLl9j
b21taXRzV2l0aGluUmFuZ2UoWyIxNkQzMjEiLCAiMTZFMzIxeiIsICIxNkYzMjEiXSwgIk9TWCIs
IDE2MDQwMDAwMDAsIDE2MDUwMDAwMDApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3Vs
dHMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzdWx0c1swXSwg
e3JlcG9zaXRvcnk6ICdPU1gnLCBvcmRlcjogMTYwNDAzMjEyNiwgcmV2aXNpb246ICcxNkUzMjF6
J30pOwogICAgICAgICB9KTsKICAgICB9KTsKIApAQCAtMjM5LDkgKzI0MSw5IEBAIGRlc2NyaWJl
KCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0pCi0gICAgfSkKKyAgICB9KTsKIAotICAgIGRlc2NyaWJl
KCdPU0J1aWxkRmV0Y2hlci5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcycsICgpID0+IHsKKyAgICBk
ZXNjcmliZSgnT1NCdWlsZEZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMnLCAoKSA9
PiB7CiAgICAgICAgIGNvbnN0IGludm9jYXRpb25zID0gTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlv
bnM7CiAKICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7CkBAIC0yNTYsNyArMjU4LDEw
IEBAIGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
Y29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CiAgICAgICAgICAgICBjb25zdCBmZXRjaGVy
ID0gbmV3IE9TQnVpbGRGZXRjaGVyKGNvbmZpZywgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xh
dmVBdXRoLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IGRiID0g
VGVzdFNlcnZlci5kYXRhYmFzZSgpOwotICAgICAgICAgICAgbGV0IGZldGNoQW5kUmVwb3J0UHJv
bWlzZSA9IG51bGw7CisgICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJhRCA9IHthbGxS
ZXZpc2lvbnM6IFsiU2llcnJhMTZENjgiLCAiU2llcnJhMTZENjkiXSwgY29tbWl0c1dpdGhUZXN0
YWJpbGl0eVdhcm5pbmdzOiB7fX07CisgICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJh
RSA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZFMzIiLCAiU2llcnJhMTZFMzMiLCAiU2llcnJh
MTZFMzNoIiwgIlNpZXJyYTE2RTM0Il0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczog
e319OworCisgICAgICAgICAgICBsZXQgZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHNQcm9taXNl
ID0gbnVsbDsKICAgICAgICAgICAgIGxldCBmZXRjaEF2YWlsYWJsZUJ1aWxkc1Byb21pc2UgPSBu
dWxsOwogCiAgICAgICAgICAgICByZXR1cm4gYWRkU2xhdmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQp
LnRoZW4oKCkgPT4gewpAQCAtMjg1LDcgKzI5MCw3IEBAIGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hl
cicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICAg
ICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxs
IG9zeCAxNkR4eCBidWlsZHMnXSk7Ci0gICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVz
b2x2ZSgnXG5cblNpZXJyYTE2RDY4XG5TaWVycmExNkQ2OVxuJyk7CisgICAgICAgICAgICAgICAg
aW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkp
OwogICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJ
bnZvY2F0aW9uKCk7CiAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKQEAgLTI5NSw3ICszMDAsNyBA
QCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIH0p
LnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5s
ZW5ndGgsIDEpOwogICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNb
MF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOwotICAgICAgICAg
ICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkUzMlxuU2llcnJhMTZF
MzNcblNpZXJyYTE2RTMzaFxuU2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAgICAgICBpbnZvY2F0
aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFFKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9jYXRp
b24oKTsKICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwpAQCAtMzA3LDE1ICszMTIsMTQgQEAgZGVz
Y3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgYXNz
ZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21t
aXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RTM0J10pOwogICAgICAgICAgICAgICAg
IGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0
V2l0aFdlYktpdEFuZEphdmFTY3JpcHRDb3JlKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZl
dGNoQXZhaWxhYmxlQnVpbGRzUHJvbWlzZTsKLSAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdHMp
ID0+IHsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0cy5sZW5ndGgsIDMpOwor
ICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nl
c3MucmVzZXQoKTsKLSAgICAgICAgICAgICAgICBmZXRjaEFuZFJlcG9ydFByb21pc2UgPSBmZXRj
aGVyLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzKCk7CisgICAgICAgICAgICAgICAgZmV0Y2hSZXBv
cnRBbmRVcGRhdGVCdWlsZHNQcm9taXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1
aWxkcygpOwogICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52
b2NhdGlvbigpOwogICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICAgICAgYXNz
ZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAx
NkR4eCBidWlsZHMnXSk7Ci0gICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgn
XG5cblNpZXJyYTE2RDY4XG5TaWVycmExNkQ2OVxuJyk7CisgICAgICAgICAgICAgICAgaW52b2Nh
dGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0
aW9uKCk7CiAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKQEAgLTMyNSw3ICszMjksNyBAQCBkZXNj
cmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIH0pLnRoZW4o
KCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgs
IDEpOwogICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29t
bWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOwotICAgICAgICAgICAgICAg
IGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkUzMlxuU2llcnJhMTZFMzNcblNp
ZXJyYTE2RTMzaFxuU2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1sw
XS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFFKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9jYXRpb24oKTsK
ICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwpAQCAtMzM3LDkgKzM0MSw4IEBAIGRlc2NyaWJlKCdP
U0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIGludm9jYXRpb25z
WzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0V2l0aFdlYktpdEFu
ZEphdmFTY3JpcHRDb3JlKSk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZv
Y2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3Jldmlz
aW9uJywgJ1NpZXJyYTE2RTM0J10pOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoQW5k
UmVwb3J0UHJvbWlzZTsKLSAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4gewotICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHNQcm9taXNlOworICAgICAg
ICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxs
KFsKICAgICAgICAgICAgICAgICAgICAgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeydu
YW1lJzogJ1dlYktpdCd9KSwKICAgICAgICAgICAgICAgICAgICAgZGIuc2VsZWN0Um93cygncmVw
b3NpdG9yaWVzJywgeyduYW1lJzogJ0phdmFTY3JpcHRDb3JlJ30pLApAQCAtMzg0LDExICszODcs
MTE5IEBAIGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0pOwogCisgICAgICAgIGl0KCdzaG91bGQgdXBkYXRlIHRlc3RhYmls
aXR5IHdhcm5pbmcgZm9yIGNvbW1pdHMnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25z
dCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKKyAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBu
ZXcgT1NCdWlsZEZldGNoZXIoY29uZmlnLCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLCBzbGF2ZUF1
dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOworICAgICAgICAgICAgY29uc3QgZGIgPSBUZXN0
U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJhRCA9
IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZENjgiLCAiU2llcnJhMTZENjkiXSwgY29tbWl0c1dp
dGhUZXN0YWJpbGl0eVdhcm5pbmdzOiB7IlNpZXJyYTE2RDY4IjogIlBhbmljIiwgIlNpZXJyYTE2
RDY5IjogIlNwaW4gQ1BVIn19OworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUUg
PSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RTMyIiwgIlNpZXJyYTE2RTMzIiwgIlNpZXJyYTE2
RTMzaCIsICJTaWVycmExNkUzNCJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHsi
U2llcnJhMTZFMzEiOiAiV2ViS2l0IGNyYXNoZXMifX07CisKKyAgICAgICAgICAgIGF3YWl0IGFk
ZFNsYXZlRm9yUmVwb3J0KGVtcHR5UmVwb3J0KTsKKworICAgICAgICAgICAgYXdhaXQgUHJvbWlz
ZS5hbGwoWworICAgICAgICAgICAgICAgIGRiLmluc2VydCgncmVwb3NpdG9yaWVzJywgeydpZCc6
IDEwLCAnbmFtZSc6ICdPU1gnfSksCisgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRz
JywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkQ2NycsICdvcmRlcic6
IDE2MDMwMDY3MDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICBkYi5pbnNl
cnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RDY4
JywgJ29yZGVyJzogMTYwMzAwNjgwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAg
ICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAn
U2llcnJhMTZENjknLCAnb3JkZXInOiAxNjAzMDA2OTAwLCAncmVwb3J0ZWQnOiBmYWxzZX0pLAor
ICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAn
cmV2aXNpb24nOiAnU2llcnJhMTZFMzEnLCAnb3JkZXInOiAxNjA0MDAzMTAwLCAncmVwb3J0ZWQn
OiB0cnVlfSksCisgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0
b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkUzMicsICdvcmRlcic6IDE2MDQwMDMyMDAs
ICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMn
LCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RTMzJywgJ29yZGVyJzog
MTYwNDAwMzMwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgIGRiLmluc2Vy
dCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZFMzNn
JywgJ29yZGVyJzogMTYwNDAwMzMwNywgJ3JlcG9ydGVkJzogdHJ1ZX0pXSk7CisKKyAgICAgICAg
ICAgIGxldCByZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9h
cGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDMwMDAwMDAmdG89MTYwMzA5OTkw
MCcpOworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3Ro
LCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2
aXNpb24nXSwgJ1NpZXJyYTE2RDY4Jyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0
Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMwMDY4MDApOworICAgICAgICAgICAgcmVzdWx0
ID0gYXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvT1NY
L2xhc3QtcmVwb3J0ZWQ/ZnJvbT0xNjA0MDAwMDAwJnRvPTE2MDQwOTk5MDAnKTsKKworICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ3JldmlzaW9uJ10sICdTaWVy
cmExNkUzM2cnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVsw
XVsnb3JkZXInXSwgMTYwNDAwMzMwNyk7CisKKyAgICAgICAgICAgIGNvbnN0IGZldGNoUmVwb3J0
QW5kVXBkYXRlUHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMoKTsK
KyAgICAgICAgICAgIGF3YWl0IE1vY2tTdWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7CisK
KyAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAg
ICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAn
YWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7CisgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNv
bHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFEKSk7CisgICAgICAgICAgICBhd2Fp
dCBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisKKyAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNz
ZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21t
aXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RDY5J10pOworICAgICAgICAgICAgaW52
b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShvd25lZENvbW1pdFdpdGhXZWJLaXQp
KTsKKyAgICAgICAgICAgIGF3YWl0IE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9j
YXRpb24oKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwg
MSk7CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQs
IFsnbGlzdCcsICdhbGwgb3N4IDE2RXh4IGJ1aWxkcyddKTsKKyAgICAgICAgICAgIGludm9jYXRp
b25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUUpKTsKKworICAg
ICAgICAgICAgYXdhaXQgTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigp
OworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAg
ICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0
JywgJ293bmVkQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkUzM2gnXSk7Cisg
ICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJv
d25lZENvbW1pdFdpdGhXZWJLaXQpKTsKKyAgICAgICAgICAgIGF3YWl0ICBNb2NrU3VicHJvY2Vz
cy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
aW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29s
dmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0V2l0aFdlYktpdEFuZEphdmFTY3Jp
cHRDb3JlKSk7CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNv
bW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJh
MTZFMzQnXSk7CisKKyAgICAgICAgICAgIGF3YWl0IGZldGNoUmVwb3J0QW5kVXBkYXRlUHJvbWlz
ZTsKKworICAgICAgICAgICAgY29uc3Qgd2Via2l0UmVwb3NpdG9yeSA9IGF3YWl0IGRiLnNlbGVj
dFJvd3MoJ3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdXZWJLaXQnfSk7CisgICAgICAgICAgICBj
b25zdCBqc2NSZXBvc2l0b3J5ID0gYXdhaXQgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywg
eyduYW1lJzogJ0phdmFTY3JpcHRDb3JlJ30pOworICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0
MTZENjggPSBhd2FpdCBkYi5zZWxlY3RSb3dzKCdjb21taXRzJywgeydyZXZpc2lvbic6ICdTaWVy
cmExNkQ2OCd9KTsKKyAgICAgICAgICAgIGNvbnN0IG9zeENvbW1pdDE2RDY5ID0gYXdhaXQgZGIu
c2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZENjknfSk7CisgICAg
ICAgICAgICBjb25zdCBvc3hDb21taXQxNkUzMSA9IGF3YWl0IGRiLnNlbGVjdFJvd3MoJ2NvbW1p
dHMnLCB7J3JldmlzaW9uJzogJ1NpZXJyYTE2RTMxJ30pOworICAgICAgICAgICAgY29uc3Qgb3N4
Q29tbWl0MTZFMzNoID0gYXdhaXQgZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24n
OiAnU2llcnJhMTZFMzNoJ30pOworICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0MTZFMzQgPSBh
d2FpdCBkYi5zZWxlY3RSb3dzKCdjb21taXRzJywgeydyZXZpc2lvbic6ICdTaWVycmExNkUzNCd9
KTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHdlYmtpdFJlcG9zaXRvcnkubGVuZ3RoLCAx
KTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbCh3ZWJraXRSZXBvc2l0b3J5WzBdWydvd25lcidd
LCAxMCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoanNjUmVwb3NpdG9yeS5sZW5ndGgsIDEp
OworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGpzY1JlcG9zaXRvcnlbMF1bJ293bmVyJ10sIDEw
KTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY4Lmxlbmd0aCwgMSk7
CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZENjhbMF1bJ3JlcG9zaXRvcnkn
XSwgMTApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY4WzBdWydvcmRl
ciddLCAxNjAzMDA2ODAwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2
OFswXVsndGVzdGFiaWxpdHlfd2FybmluZyddLCAiUGFuaWMiKTsKKworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY5Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwob3N4Q29tbWl0MTZENjlbMF1bJ3JlcG9zaXRvcnknXSwgMTApOworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY5WzBdWydvcmRlciddLCAxNjAzMDA2OTAwKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OVswXVsndGVzdGFiaWxpdHlfd2Fy
bmluZyddLCAiU3BpbiBDUFUiKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1p
dDE2RTMxLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZF
MzFbMF1bJ3JlcG9zaXRvcnknXSwgMTApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENv
bW1pdDE2RTMxWzBdWydvcmRlciddLCAxNjA0MDAzMTAwKTsKKyAgICAgICAgICAgIGFzc2VydC5l
cXVhbChvc3hDb21taXQxNkUzMVswXVsndGVzdGFiaWxpdHlfd2FybmluZyddLCAiV2ViS2l0IGNy
YXNoZXMiKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMzaC5sZW5n
dGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMzaFswXVsncmVw
b3NpdG9yeSddLCAxMCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzNo
WzBdWydvcmRlciddLCAxNjA0MDAzMzA4KTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9z
eENvbW1pdDE2RTM0Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29t
bWl0MTZFMzRbMF1bJ3JlcG9zaXRvcnknXSwgMTApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG9zeENvbW1pdDE2RTM0WzBdWydvcmRlciddLCAxNjA0MDAzNDAwKTsKKworICAgICAgICAgICAg
cmVzdWx0ID0gYXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1p
dHMvT1NYL2xhc3QtcmVwb3J0ZWQ/ZnJvbT0xNjAzMDAwMDAwJnRvPTE2MDMwOTk5MDAnKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGgsIDEpOworICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAn
U2llcnJhMTZENjknKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMn
XVswXVsnb3JkZXInXSwgMTYwMzAwNjkwMCk7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0
IFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJl
cG9ydGVkP2Zyb209MTYwNDAwMDAwMCZ0bz0xNjA0MDk5OTAwJyk7CisgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RTM0Jyk7
CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10s
IDE2MDQwMDM0MDApOworICAgICAgICB9KTsKKwogICAgICAgICBpdCgnc2hvdWxkIHJlcG9ydCBj
b21taXRzIHdpdGhvdXQgb3duZWQtY29tbWl0cyBpZiAib3duZWRDb21taXRDb21tYW5kIiBpcyBu
b3Qgc3BlY2lmaWVkIGluIGNvbmZpZycsIGFzeW5jICgpID0+IHsKIAogICAgICAgICAgICAgY29u
c3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CiAgICAgICAgICAgICBjb25zdCBmZXRjaGVyID0g
bmV3IE9TQnVpbGRGZXRjaGVyKGNvbmZpZ1dpdGhvdXRPd25lZENvbW1pdENvbW1hbmQsIFRlc3RT
ZXJ2ZXIucmVtb3RlQVBJKCksIHNsYXZlQXV0aCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7CiAg
ICAgICAgICAgICBjb25zdCBkYiA9IFRlc3RTZXJ2ZXIuZGF0YWJhc2UoKTsKKyAgICAgICAgICAg
IGNvbnN0IHJlc3VsdHNGb3JTaWVycmFEID0ge2FsbFJldmlzaW9uczogWyJTaWVycmExNkQ2OCIs
ICJTaWVycmExNkQ2OSJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHt9fTsKKyAg
ICAgICAgICAgIGNvbnN0IHJlc3VsdHNGb3JTaWVycmFFID0ge2FsbFJldmlzaW9uczogWyJTaWVy
cmExNkUzMiIsICJTaWVycmExNkUzMyIsICJTaWVycmExNkUzM2giLCAiU2llcnJhMTZFMzQiXSwg
Y29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzOiB7fX07CiAKICAgICAgICAgICAgIGF3YWl0
IGFkZFNsYXZlRm9yUmVwb3J0KGVtcHR5UmVwb3J0KTsKICAgICAgICAgICAgIGF3YWl0IFByb21p
c2UuYWxsKFsKQEAgLTQxMSwxOSArNTIyLDE4IEBAIGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlcics
IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cydd
WzBdWydvcmRlciddLCAxNjA0MDAzMzA3KTsKIAogICAgICAgICAgICAgY29uc3Qgd2FpdEZvcklu
dm9jYXRpb25Qcm9taXNlID0gTW9ja1N1YnByb2Nlc3Mud2FpdEZvckludm9jYXRpb24oKTsKLSAg
ICAgICAgICAgIGNvbnN0IGZldGNoQW5kUmVwb3J0UHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hBbmRS
ZXBvcnROZXdCdWlsZHMoKTsKKyAgICAgICAgICAgIGNvbnN0IGZldGNoUmVwb3J0QW5kVXBkYXRl
UHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMoKTsKICAgICAgICAg
ICAgIGF3YWl0IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZTsKICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwogICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVh
bChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWlsZHMn
XSk7Ci0gICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKCdcblxuU2llcnJhMTZENjhc
blNpZXJyYTE2RDY5Jyk7CisgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04u
c3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFEKSk7CiAKICAgICAgICAgICAgIGF3YWl0IE1vY2tT
dWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9jYXRpb24oKTsKICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwogICAgICAgICAgICAgYXNzZXJ0LmRlZXBF
cXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkV4eCBidWls
ZHMnXSk7Ci0gICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKCdcblxuU2llcnJhMTZF
MzJcblNpZXJyYTE2RTMzXG5TaWVycmExNkUzM2hcblNpZXJyYTE2RTM0Jyk7CisgICAgICAgICAg
ICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFF
KSk7CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoQW5kUmVwb3J0UHJvbWlzZTsK
LSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoUmVwb3J0QW5kVXBkYXRlUHJvbWlzZTsKICAgICAg
ICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICAgICAg
ICAgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ1dlYktpdCd9KSwKICAg
ICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2
YVNjcmlwdENvcmUnfSksCkBAIC00NjcsNiArNTc3LDggQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRj
aGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xv
Z2dlcjsKICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoY29u
ZmlnV2l0aG91dE93bmVkQ29tbWl0Q29tbWFuZCwgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xh
dmVBdXRoLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IGRiID0g
VGVzdFNlcnZlci5kYXRhYmFzZSgpOworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJy
YUQgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RDY4IiwgIlNpZXJyYTE2RDY5IiwgIlNpZXJy
YTE2RDEwMDAwIl0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczoge319OworICAgICAg
ICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUUgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2
RTMyIiwgIlNpZXJyYTE2RTMzIiwgIlNpZXJyYTE2RTMzaCIsICJTaWVycmExNkUzNCIsICJTaWVy
cmExNkUxMDAwMCJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHt9fTsKIAogICAg
ICAgICAgICAgYXdhaXQgYWRkU2xhdmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQpOwogICAgICAgICAg
ICAgYXdhaXQgUHJvbWlzZS5hbGwoWwpAQCAtNDg4LDIwICs2MDAsMTkgQEAgZGVzY3JpYmUoJ09T
QnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVz
dWx0Wydjb21taXRzJ11bMF1bJ3JldmlzaW9uJ10sICdTaWVycmExNkUzM2cnKTsKICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwNDAwMzMw
Nyk7CiAgICAgICAgICAgICBjb25zdCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3Vi
cHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigpOwotICAgICAgICAgICAgY29uc3QgZmV0Y2hBbmRS
ZXBvcnRQcm9taXNlID0gZmV0Y2hlci5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcygpOworICAgICAg
ICAgICAgY29uc3QgZmV0Y2hSZXBvcnRBbmRVcGRhdGVQcm9taXNlID0gZmV0Y2hlci5mZXRjaFJl
cG9ydEFuZFVwZGF0ZUJ1aWxkcygpOwogCiAgICAgICAgICAgICBhd2FpdCB3YWl0Rm9ySW52b2Nh
dGlvblByb21pc2U7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3Ro
LCAxKTsKICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFu
ZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOwotICAgICAgICAgICAgaW52b2Nh
dGlvbnNbMF0ucmVzb2x2ZSgnXG5cblNpZXJyYTE2RDY4XG5TaWVycmExNkQ2OVxuU2llcnJhMTZE
MTAwMDAnKTsKKyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdp
ZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsKIAogICAgICAgICAgICAgYXdhaXQgTW9ja1N1YnByb2Nl
c3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KGludm9jYXRpb25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGlu
dm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdhbGwgb3N4IDE2RXh4IGJ1aWxkcyddKTsK
LSAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkUzMlxuU2ll
cnJhMTZFMzNcblNpZXJyYTE2RTMzaFxuU2llcnJhMTZFMzRcblNpZXJyYTE2RTEwMDAwJyk7Cisg
ICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNG
b3JTaWVycmFFKSk7CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoQW5kUmVwb3J0
UHJvbWlzZTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cyddLCAnT0sn
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoUmVwb3J0QW5kVXBkYXRlUHJvbWlz
ZTsKICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAg
ICAgICAgICAgICAgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ1dlYktp
dCd9KSwKICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25h
bWUnOiAnSmF2YVNjcmlwdENvcmUnfSksCkBAIC01NDUsNiArNjU2LDcgQEAgZGVzY3JpYmUoJ09T
QnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBu
ZXcgTW9ja0xvZ2dlcjsKICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZl
dGNoZXIoY29uZmlnVHJhY2tpbmdPbmVPUywgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVB
dXRoLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IGRiID0gVGVz
dFNlcnZlci5kYXRhYmFzZSgpOworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUQg
PSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RDY4IiwgIlNpZXJyYTE2RDY5IiwgIlNpZXJyYTE2
RDEwMCIsICJTaWVycmExNkQxMDBhIl0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczog
e319OwogCiAgICAgICAgICAgICBhd2FpdCBhZGRTbGF2ZUZvclJlcG9ydChlbXB0eVJlcG9ydCk7
CiAgICAgICAgICAgICBhd2FpdCBkYi5pbnNlcnQoJ3JlcG9zaXRvcmllcycsIHsnaWQnOiAxMCwg
J25hbWUnOiAnT1NYJ30pOwpAQCAtNTU2LDE0ICs2NjgsMTMgQEAgZGVzY3JpYmUoJ09TQnVpbGRG
ZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydj
b21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMwMTAwMDApOwogCiAgICAgICAgICAgICBjb25zdCB3
YWl0Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlv
bigpOwotICAgICAgICAgICAgY29uc3QgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gZmV0Y2hlci5m
ZXRjaEFuZFJlcG9ydE5ld0J1aWxkcygpOworICAgICAgICAgICAgY29uc3QgZmV0Y2hBbmRSZXBv
cnRQcm9taXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcygpOwogICAgICAg
ICAgICAgYXdhaXQgd2FpdEZvckludm9jYXRpb25Qcm9taXNlOwogICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICBhc3NlcnQuZGVlcEVx
dWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdhbGwgb3N4IDE2RHh4IGJ1aWxk
cyddKTsKLSAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2
OFxuU2llcnJhMTZENjlcblNpZXJyYTE2RDEwMFxuU2llcnJhMTZEMTAwYVxuJyk7CisgICAgICAg
ICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVy
cmFEKSk7CiAKICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoQW5kUmVwb3J0UHJvbWlz
ZTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsKICAg
ICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICAg
ICAgICAgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ1dlYktpdCd9KSwK
ICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAn
SmF2YVNjcmlwdENvcmUnfSksCkBAIC01OTQsNiArNzA1LDcgQEAgZGVzY3JpYmUoJ09TQnVpbGRG
ZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9j
a0xvZ2dlcjsKICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIo
Y29uZmlnVHJhY2tpbmdPbmVPUywgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBN
b2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZl
ci5kYXRhYmFzZSgpOworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUQgPSB7YWxs
UmV2aXNpb25zOiBbIlNpZXJyYTE2RDY4IiwgIlNpZXJyYTE2RDY5IiwgIlNpZXJyYTE2RDEwMCIs
ICJTaWVycmExNkQxMDEiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzOiB7fX07CiAK
ICAgICAgICAgICAgIGF3YWl0IGFkZFNsYXZlRm9yUmVwb3J0KGVtcHR5UmVwb3J0KTsKICAgICAg
ICAgICAgIGF3YWl0IGRiLmluc2VydCgncmVwb3NpdG9yaWVzJywgeydpZCc6IDEwLCAnbmFtZSc6
ICdPU1gnfSk7CkBAIC02MDIsMTQgKzcxNCwxMyBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXIn
LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMn
XS5sZW5ndGgsIDApOwogCiAgICAgICAgICAgICBjb25zdCB3YWl0Rm9ySW52b2NhdGlvblByb21p
c2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigpOwotICAgICAgICAgICAgY29u
c3QgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gZmV0Y2hlci5mZXRjaEFuZFJlcG9ydE5ld0J1aWxk
cygpOworICAgICAgICAgICAgY29uc3QgZmV0Y2hSZXBvcnRBbmRVcGRhdGVQcm9taXNlID0gZmV0
Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcygpOwogICAgICAgICAgICAgYXdhaXQgd2Fp
dEZvckludm9jYXRpb25Qcm9taXNlOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRp
b25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25z
WzBdLmNvbW1hbmQsIFsnbGlzdCcsICdhbGwgb3N4IDE2RHh4IGJ1aWxkcyddKTsKLSAgICAgICAg
ICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2OFxuU2llcnJhMTZENjlc
blNpZXJyYTE2RDEwMFxuU2llcnJhMTZEMTAxXG4nKTsKKyAgICAgICAgICAgIGludm9jYXRpb25z
WzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsKIAotICAgICAg
ICAgICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hBbmRSZXBvcnRQcm9taXNlOwotICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVzJ10sICdPSycpOworICAgICAgICAgICAgcmVzdWx0
ID0gYXdhaXQgZmV0Y2hSZXBvcnRBbmRVcGRhdGVQcm9taXNlOwogICAgICAgICAgICAgY29uc3Qg
cmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICAgICAgICAgICBkYi5zZWxlY3RS
b3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0J30pLAogICAgICAgICAgICAgICAg
IGRiLnNlbGVjdFJvd3MoJ3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29yZSd9
KSwKQEAgLTY0Niw2ICs3NTcsOCBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlv
bigpIHsKICAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOwogICAgICAg
ICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihjb25maWcsIFRlc3RTZXJ2
ZXIucmVtb3RlQVBJKCksIHNsYXZlQXV0aCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7CiAgICAg
ICAgICAgICBjb25zdCBkYiA9IFRlc3RTZXJ2ZXIuZGF0YWJhc2UoKTsKKyAgICAgICAgICAgIGNv
bnN0IHJlc3VsdHNGb3JTaWVycmFEID0ge2FsbFJldmlzaW9uczogWyJTaWVycmExNkQ2OCIsICJT
aWVycmExNkQ2OSJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHt9fTsKKyAgICAg
ICAgICAgIGNvbnN0IHJlc3VsdHNGb3JTaWVycmFFID0ge2FsbFJldmlzaW9uczogWyJTaWVycmEx
NkUzMiIsICJTaWVycmExNkUzMyIsICJTaWVycmExNkUzM2giLCAiU2llcnJhMTZFMzQiXSwgY29t
bWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzOiB7fX07CiAgICAgICAgICAgICBsZXQgZmV0Y2hB
bmRSZXBvcnRQcm9taXNlID0gbnVsbDsKIAogICAgICAgICAgICAgcmV0dXJuIGFkZFNsYXZlRm9y
UmVwb3J0KGVtcHR5UmVwb3J0KS50aGVuKCgpID0+IHsKQEAgLTY3MSwxMiArNzg0LDEyIEBAIGRl
c2NyaWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwNDAwMzMwNyk7CiAK
ICAgICAgICAgICAgICAgICBjb25zdCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3Vi
cHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigpOwotICAgICAgICAgICAgICAgIGZldGNoQW5kUmVw
b3J0UHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMoKTsKKyAgICAgICAg
ICAgICAgICBmZXRjaEFuZFJlcG9ydFByb21pc2UgPSBmZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBk
YXRlQnVpbGRzKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JJbnZvY2F0aW9uUHJv
bWlzZTsKICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwogICAgICAgICAgICAgICAgIGFzc2VydC5k
ZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZEeHgg
YnVpbGRzJ10pOwotICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5T
aWVycmExNkQ2OFxuU2llcnJhMTZENjlcbicpOworICAgICAgICAgICAgICAgIGludm9jYXRpb25z
WzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigp
OwogICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CkBAIC02ODYsNyArNzk5LDcgQEAgZGVzY3JpYmUo
J09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB9KS50aGVuKCgpID0+
IHsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsK
ICAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQs
IFsnbGlzdCcsICdhbGwgb3N4IDE2RXh4IGJ1aWxkcyddKTsKLSAgICAgICAgICAgICAgICBpbnZv
Y2F0aW9uc1swXS5yZXNvbHZlKCdcblxuU2llcnJhMTZFMzJcblNpZXJyYTE2RTMzXG5TaWVycmEx
NkUzM2hcblNpZXJyYTE2RTM0Jyk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVz
b2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRSkpOwogICAgICAgICAgICAgICAg
IHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CiAgICAg
ICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFs
KGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAn
cmV2aXNpb24nLCAnU2llcnJhMTZFMzNoJ10pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3Rvb2xzL2pzL29zLWJ1aWxkLWZldGNoZXIuanMgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvdG9vbHMvanMvb3MtYnVpbGQtZmV0Y2hlci5qcwppbmRleCAwNTFjMjlmY2I3Yjg2
MzM2YmY0MTcyZDU1ZjdhNDk4NmQxNzE0ZmUxLi42M2JmMGM5NWZiMThmZDE1NzFmNmZmYjlhYTBj
YTkzNTg4MmEzZmExIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMv
anMvb3MtYnVpbGQtZmV0Y2hlci5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9v
bHMvanMvb3MtYnVpbGQtZmV0Y2hlci5qcwpAQCAtMjIsNTkgKzIyLDY0IEBAIGNsYXNzIE9TQnVp
bGRGZXRjaGVyIHsKICAgICAgICAgdGhpcy5fbWF4U3VibWl0Q291bnQgPSBvc0NvbmZpZ1snbWF4
U3VibWl0Q291bnQnXSB8fCAyMDsKICAgICB9CiAKLSAgICBzdGF0aWMgZmV0Y2hBbmRSZXBvcnRB
bGxJbk9yZGVyKGZldGNoZXJMaXN0KQorICAgIHN0YXRpYyBhc3luYyBmZXRjaFJlcG9ydEFuZFVw
ZGF0ZUNvbW1pdHMoZmV0Y2hlckxpc3QpCiAgICAgewotICAgICAgICByZXR1cm4gbWFwSW5TZXJp
YWxQcm9taXNlQ2hhaW4oZmV0Y2hlckxpc3QsIChmZXRjaGVyKSA9PiBmZXRjaGVyLmZldGNoQW5k
UmVwb3J0TmV3QnVpbGRzKCkpOworICAgICAgICBmb3IgKGNvbnN0IGZldGNoZXIgb2YgZmV0Y2hl
ckxpc3QpCisgICAgICAgICAgICBhd2FpdCBmZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVp
bGRzKCk7CiAgICAgfQogCi0gICAgZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMoKQorICAgIF9zcGxp
dEFycmF5QnlMaW1pdChhcnJheSwgbWF4Q291bnQpCiAgICAgewotICAgICAgICByZXR1cm4gdGhp
cy5fZmV0Y2hBdmFpbGFibGVCdWlsZHMoKS50aGVuKChyZXN1bHRzKSA9PiB7Ci0gICAgICAgICAg
ICB0aGlzLl9sb2dnZXIubG9nKGBTdWJtaXR0aW5nICR7cmVzdWx0cy5sZW5ndGh9IGJ1aWxkcyBm
b3IgJHt0aGlzLl9vc0NvbmZpZ1snbmFtZSddfWApOwotICAgICAgICAgICAgaWYgKHJlc3VsdHMu
bGVuZ3RoID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdENvbW1pdHMo
cmVzdWx0cyk7Ci0KLSAgICAgICAgICAgIGNvbnN0IHNwbGl0dGVkUmVzdWx0cyA9IFtdOwotICAg
ICAgICAgICAgZm9yIChsZXQgc3RhcnRJbmRleCA9IDA7IHN0YXJ0SW5kZXggPCByZXN1bHRzLmxl
bmd0aDsgc3RhcnRJbmRleCArPSB0aGlzLl9tYXhTdWJtaXRDb3VudCkKLSAgICAgICAgICAgICAg
ICBzcGxpdHRlZFJlc3VsdHMucHVzaChyZXN1bHRzLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5k
ZXggKyB0aGlzLl9tYXhTdWJtaXRDb3VudCkpOwotCi0gICAgICAgICAgICByZXR1cm4gbWFwSW5T
ZXJpYWxQcm9taXNlQ2hhaW4oc3BsaXR0ZWRSZXN1bHRzLCB0aGlzLl9zdWJtaXRDb21taXRzLmJp
bmQodGhpcykpLnRoZW4oKHJlc3BvbnNlcykgPT4gewotICAgICAgICAgICAgICAgIGFzc2VydChy
ZXNwb25zZXMuZXZlcnkoKHJlc3BvbnNlKSA9PiByZXNwb25zZVsnc3RhdHVzJ10gPT0gJ09LJykp
OwotICAgICAgICAgICAgICAgIGFzc2VydChyZXNwb25zZXMubGVuZ3RoID4gMCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3BvbnNlc1swXTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9
KTsKKyAgICAgICAgY29uc3Qgc3BsaXR0ZWRBcnJheUxpc3QgPSBbXTsKKyAgICAgICAgZm9yIChs
ZXQgc3RhcnRJbmRleCA9IDA7IHN0YXJ0SW5kZXggPCBhcnJheS5sZW5ndGg7IHN0YXJ0SW5kZXgg
Kz0gbWF4Q291bnQpCisgICAgICAgICAgICBzcGxpdHRlZEFycmF5TGlzdC5wdXNoKGFycmF5LnNs
aWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyBtYXhDb3VudCkpOworICAgICAgICByZXR1cm4g
c3BsaXR0ZWRBcnJheUxpc3Q7CisgICAgfQorCisgICAgYXN5bmMgZmV0Y2hSZXBvcnRBbmRVcGRh
dGVCdWlsZHMoKQorICAgIHsKKyAgICAgICAgY29uc3Qge25ld0NvbW1pdHNUb1JlcG9ydCwgY29t
bWl0c1RvVXBkYXRlfSA9IGF3YWl0IHRoaXMuX2ZldGNoQXZhaWxhYmxlQnVpbGRzKCk7CisKKyAg
ICAgICAgdGhpcy5fbG9nZ2VyLmxvZyhgU3VibWl0dGluZyAke25ld0NvbW1pdHNUb1JlcG9ydC5s
ZW5ndGh9IGJ1aWxkcyBmb3IgJHt0aGlzLl9vc0NvbmZpZ1snbmFtZSddfWApOworICAgICAgICBh
d2FpdCB0aGlzLl9yZXBvcnRUb0VuZFBvaW50KCcvYXBpL3JlcG9ydC1jb21taXRzLycsIG5ld0Nv
bW1pdHNUb1JlcG9ydCk7CisKKyAgICAgICAgdGhpcy5fbG9nZ2VyLmxvZyhgVXBkYXRpbmcgJHtj
b21taXRzVG9VcGRhdGUubGVuZ3RofSBidWlsZHMgZm9yICR7dGhpcy5fb3NDb25maWdbJ25hbWUn
XX1gKTsKKyAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0VG9FbmRQb2ludCgnL2FwaS91cGRhdGUt
Y29tbWl0cy8nLCBjb21taXRzVG9VcGRhdGUpOwogICAgIH0KIAotICAgIF9mZXRjaEF2YWlsYWJs
ZUJ1aWxkcygpCisgICAgYXN5bmMgX2ZldGNoQXZhaWxhYmxlQnVpbGRzKCkKICAgICB7CiAgICAg
ICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX29zQ29uZmlnOwotICAgICAgICBjb25zdCByZXBvc2l0
b3J5TmFtZSA9IGNvbmZpZ1snbmFtZSddOwotICAgICAgICBsZXQgY3VzdG9tQ29tbWFuZHMgPSBj
b25maWdbJ2N1c3RvbUNvbW1hbmRzJ107CisgICAgICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBjb25m
aWdbJ25hbWUnXTsKKyAgICAgICAgY29uc3QgbmV3Q29tbWl0c1RvUmVwb3J0ID0gW107CisgICAg
ICAgIGNvbnN0IGNvbW1pdHNUb1VwZGF0ZSA9IFtdOworICAgICAgICBjb25zdCAgY3VzdG9tQ29t
bWFuZHMgPSBjb25maWdbJ2N1c3RvbUNvbW1hbmRzJ107CiAKLSAgICAgICAgcmV0dXJuIG1hcElu
U2VyaWFsUHJvbWlzZUNoYWluKGN1c3RvbUNvbW1hbmRzLCAoY29tbWFuZCkgPT4geworICAgICAg
ICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgY3VzdG9tQ29tbWFuZHMpIHsKICAgICAgICAgICAgIGFz
c2VydChjb21tYW5kWydtaW5SZXZpc2lvbiddKTsKICAgICAgICAgICAgIGFzc2VydChjb21tYW5k
WydtYXhSZXZpc2lvbiddKTsKICAgICAgICAgICAgIGNvbnN0IG1pblJldmlzaW9uT3JkZXIgPSB0
aGlzLl9jb21wdXRlT3JkZXIoY29tbWFuZFsnbWluUmV2aXNpb24nXSk7CiAgICAgICAgICAgICBj
b25zdCBtYXhSZXZpc2lvbk9yZGVyID0gdGhpcy5fY29tcHV0ZU9yZGVyKGNvbW1hbmRbJ21heFJl
dmlzaW9uJ10pOwogCi0gICAgICAgICAgICBjb25zdCB1cmwgPSBgL2FwaS9jb21taXRzLyR7ZXNj
YXBlKHJlcG9zaXRvcnlOYW1lKX0vbGFzdC1yZXBvcnRlZD9mcm9tPSR7bWluUmV2aXNpb25PcmRl
cn0mdG89JHttYXhSZXZpc2lvbk9yZGVyfWA7CisgICAgICAgICAgICBjb25zdCB1cmwgPSBgL2Fw
aS9jb21taXRzLyR7ZXNjYXBlKHJlcG9zaXRvcnkpfS9sYXN0LXJlcG9ydGVkP2Zyb209JHttaW5S
ZXZpc2lvbk9yZGVyfSZ0bz0ke21heFJldmlzaW9uT3JkZXJ9YDsKKyAgICAgICAgICAgIGNvbnN0
IHJlc3VsdCA9IGF3YWl0IHRoaXMuX3JlbW90ZUFQSS5nZXRKU09OV2l0aFN0YXR1cyh1cmwpOwor
ICAgICAgICAgICAgY29uc3QgbWluT3JkZXIgPSByZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGggPT0g
MSA/IHBhcnNlSW50KHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddKSArIDEgOiBtaW5SZXZp
c2lvbk9yZGVyOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3RlQVBJLmdldEpTT05X
aXRoU3RhdHVzKHVybCkudGhlbigocmVzdWx0KSA9PiB7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
bWluT3JkZXIgPSByZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGggPT0gMSA/IHBhcnNlSW50KHJlc3Vs
dFsnY29tbWl0cyddWzBdWydvcmRlciddKSArIDEgOiBtaW5SZXZpc2lvbk9yZGVyOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKHJlcG9zaXRv
cnlOYW1lLCBjb21tYW5kWydjb21tYW5kJ10sIGNvbW1hbmRbJ2xpbmVzVG9JZ25vcmUnXSwgbWlu
T3JkZXIsIG1heFJldmlzaW9uT3JkZXIpOwotICAgICAgICAgICAgfSkudGhlbigoY29tbWl0cykg
PT4gewotICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gJ25hbWUnIGluIGNvbW1hbmQgPyBg
IiR7Y29tbWFuZFsnbmFtZSddfSJgIDogYCIke2NvbW1hbmRbJ21pblJldmlzaW9uJ119IiB0byAi
JHtjb21tYW5kWydtYXhSZXZpc2lvbiddfSJgOwotICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dl
ci5sb2coYEZvdW5kICR7Y29tbWl0cy5sZW5ndGh9IGJ1aWxkcyBmb3IgJHtsYWJlbH1gKTsKKyAg
ICAgICAgICAgIGNvbnN0IGNvbW1pdEluZm8gPSBhd2FpdCB0aGlzLl9jb21taXRzRm9yQXZhaWxh
YmxlQnVpbGRzKGNvbW1hbmRbJ2NvbW1hbmQnXSk7CisgICAgICAgICAgICBjb25zdCBjb21taXRz
ID0gdGhpcy5fY29tbWl0c1dpdGhpblJhbmdlKGNvbW1pdEluZm8uYWxsUmV2aXNpb25zLCByZXBv
c2l0b3J5LCBtaW5PcmRlciwgbWF4UmV2aXNpb25PcmRlcik7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoJ293bmVkQ29tbWl0Q29tbWFuZCcgaW4gY29tbWFuZCkgewotICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9sb2dnZXIubG9nKGBSZXNvbHZpbmcgb3duZWRDb21taXRzIGZvciAke2xhYmVsfWAp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRkT3duZWRDb21taXRzRm9yQnVp
bGQoY29tbWl0cywgY29tbWFuZFsnb3duZWRDb21taXRDb21tYW5kJ10pOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gJ25hbWUnIGluIGNvbW1hbmQgPyBgIiR7
Y29tbWFuZFsnbmFtZSddfSJgIDogYCIke2NvbW1hbmRbJ21pblJldmlzaW9uJ119IiB0byAiJHtj
b21tYW5kWydtYXhSZXZpc2lvbiddfSJgOworICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmxvZyhg
Rm91bmQgJHtjb21taXRzLmxlbmd0aH0gYnVpbGRzIGZvciAke2xhYmVsfWApOworICAgICAgICAg
ICAgaWYgKCdvd25lZENvbW1pdENvbW1hbmQnIGluIGNvbW1hbmQpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9sb2dnZXIubG9nKGBSZXNvbHZpbmcgb3duZWRDb21taXRzIGZvciAke2xhYmVsfWAp
OworICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2FkZE93bmVkQ29tbWl0c0ZvckJ1aWxkKGNv
bW1pdHMsIGNvbW1hbmRbJ293bmVkQ29tbWl0Q29tbWFuZCddKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG5ld0NvbW1pdHNUb1JlcG9ydC5wdXNoKC4uLmNvbW1pdHMpOwogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbW1pdHM7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSkudGhl
bigocmVzdWx0cykgPT4gW10uY29uY2F0KC4uLnJlc3VsdHMpKTsKKyAgICAgICAgICAgIGZvciAo
Y29uc3QgW3JldmlzaW9uLCB0ZXN0YWJpbGl0eVdhcm5pbmddIG9mIE9iamVjdC5lbnRyaWVzKGNv
bW1pdEluZm8uY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzKSkKKyAgICAgICAgICAgICAg
ICBjb21taXRzVG9VcGRhdGUucHVzaCh7cmVwb3NpdG9yeSwgcmV2aXNpb24sIHRlc3RhYmlsaXR5
V2FybmluZ30pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7bmV3Q29tbWl0c1RvUmVwb3J0
LCBjb21taXRzVG9VcGRhdGV9OwogICAgIH0KIAogICAgIF9jb21wdXRlT3JkZXIocmV2aXNpb24p
CkBAIC04OSwxNyArOTQsMTYgQEAgY2xhc3MgT1NCdWlsZEZldGNoZXIgewogICAgICAgICByZXR1
cm4gKChtYWpvciAqIDEwMCArIGtpbmQpICogMTAwMDAgKyBtaW5vcikgKiAxMDAgKyB2YXJpYW50
OwogICAgIH0KIAotICAgIF9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKHJlcG9zaXRvcnksIGNv
bW1hbmQsIGxpbmVzVG9JZ25vcmUsIG1pbk9yZGVyLCBtYXhPcmRlcikKKyAgICBhc3luYyBfY29t
bWl0c0ZvckF2YWlsYWJsZUJ1aWxkcyhjb21tYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX3N1YnByb2Nlc3MuZXhlY3V0ZShjb21tYW5kKS50aGVuKChvdXRwdXQpID0+IHsKLSAgICAg
ICAgICAgIGxldCBsaW5lcyA9IG91dHB1dC5zcGxpdCgnXG4nKTsKLSAgICAgICAgICAgIGlmIChs
aW5lc1RvSWdub3JlKXsKLSAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAo
bGluZXNUb0lnbm9yZSk7Ci0gICAgICAgICAgICAgICAgbGluZXMgPSBsaW5lcy5maWx0ZXIoKGxp
bmUpID0+ICFyZWdleC5leGVjKGxpbmUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBsaW5lcy5tYXAoKHJldmlzaW9uKSA9PiAoe3JlcG9zaXRvcnksIHJldmlzaW9uLCAnb3Jk
ZXInOiB0aGlzLl9jb21wdXRlT3JkZXIocmV2aXNpb24pfSkpCi0gICAgICAgICAgICAgICAgLmZp
bHRlcigoY29tbWl0KSA9PiBjb21taXRbJ29yZGVyJ10gPj0gbWluT3JkZXIgJiYgY29tbWl0Wydv
cmRlciddIDw9IG1heE9yZGVyKTsKLSAgICAgICAgfSk7CisgICAgICAgIGNvbnN0IG91dHB1dCA9
IGF3YWl0IHRoaXMuX3N1YnByb2Nlc3MuZXhlY3V0ZShjb21tYW5kKTsKKyAgICAgICAgcmV0dXJu
IEpTT04ucGFyc2Uob3V0cHV0KTsKKyAgICB9CisKKyAgICBfY29tbWl0c1dpdGhpblJhbmdlKHJl
dmlzaW9ucywgcmVwb3NpdG9yeSwgbWluT3JkZXIsIG1heE9yZGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJldmlzaW9ucy5tYXAoKHJldmlzaW9uKSA9PiAoe3JlcG9zaXRvcnksIHJldmlzaW9u
LCAnb3JkZXInOiB0aGlzLl9jb21wdXRlT3JkZXIocmV2aXNpb24pfSkpCisgICAgICAgICAgICAu
ZmlsdGVyKChjb21taXQpID0+IGNvbW1pdFsnb3JkZXInXSA+PSBtaW5PcmRlciAmJiBjb21taXRb
J29yZGVyJ10gPD0gbWF4T3JkZXIpOwogICAgIH0KIAogICAgIF9hZGRPd25lZENvbW1pdHNGb3JC
dWlsZChjb21taXRzLCBjb21tYW5kKQpAQCAtMTE5LDEwICsxMjMsMTYgQEAgY2xhc3MgT1NCdWls
ZEZldGNoZXIgewogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBfc3VibWl0Q29tbWl0cyhjb21t
aXRzKQorICAgIGFzeW5jIF9yZXBvcnRUb0VuZFBvaW50KGVuZFBvaW50LCBjb21taXRzVG9Qb3N0
KQogICAgIHsKLSAgICAgICAgY29uc3QgY29tbWl0c1RvUmVwb3J0ID0geyJzbGF2ZU5hbWUiOiB0
aGlzLl9zbGF2ZUF1dGhbJ25hbWUnXSwgInNsYXZlUGFzc3dvcmQiOiB0aGlzLl9zbGF2ZUF1dGhb
J3Bhc3N3b3JkJ10sICdjb21taXRzJzogY29tbWl0c307Ci0gICAgICAgIHJldHVybiB0aGlzLl9y
ZW1vdGVBUEkucG9zdEpTT05XaXRoU3RhdHVzKCcvYXBpL3JlcG9ydC1jb21taXRzLycsIGNvbW1p
dHNUb1JlcG9ydCk7CisgICAgICAgIGlmICghY29tbWl0c1RvUG9zdC5sZW5ndGgpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgZm9yIChjb25zdCBjb21taXRzVG9TdWJtaXQgb2YgdGhp
cy5fc3BsaXRBcnJheUJ5TGltaXQoY29tbWl0c1RvUG9zdCwgdGhpcy5fbWF4U3VibWl0Q291bnQp
KSB7CisgICAgICAgICAgICBjb25zdCByZXBvcnQgPSB7InNsYXZlTmFtZSI6IHRoaXMuX3NsYXZl
QXV0aFsnbmFtZSddLCAic2xhdmVQYXNzd29yZCI6IHRoaXMuX3NsYXZlQXV0aFsncGFzc3dvcmQn
XSwgJ2NvbW1pdHMnOiBjb21taXRzVG9TdWJtaXR9OworICAgICAgICAgICAgY29uc3QgcmVzcG9u
c2UgPSBhd2FpdCB0aGlzLl9yZW1vdGVBUEkucG9zdEpTT05XaXRoU3RhdHVzKGVuZFBvaW50LCBy
ZXBvcnQpOworICAgICAgICAgICAgYXNzZXJ0KHJlc3BvbnNlWydzdGF0dXMnXSA9PT0gJ09LJyk7
CisgICAgICAgIH0KICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy90b29scy9zeW5jLW9zLXZlcnNpb25zLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3Rvb2xzL3N5bmMtb3MtdmVyc2lvbnMuanMKaW5kZXggNzdmNGEwYTdkMzQzODE5NDMwNzZiODNl
YzQ4ZDViYzkwYjQ4MzU4Ni4uNGZiZTU4MmJmMDM4OGRhNGE0YjNhNzUzMDdkMmYxNmI2MjI5N2M3
OCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL3N5bmMtb3MtdmVy
c2lvbnMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL3N5bmMtb3MtdmVy
c2lvbnMuanMKQEAgLTI5LDcgKzI5LDcgQEAgZnVuY3Rpb24gc3luY0xvb3Aob3B0aW9ucykKICAg
ICBjb25zdCByZW1vdGVBUEkgPSBuZXcgUmVtb3RlQVBJKHNlcnZlckNvbmZpZy5zZXJ2ZXIpOwog
CiAgICAgY29uc3QgZmV0Y2hlcnMgPSBvc0NvbmZpZ0xpc3QubWFwKChvc0NvbmZpZykgPT4gbmV3
IE9TQnVpbGRGZXRjaGVyKG9zQ29uZmlnLCByZW1vdGVBUEksIHNlcnZlckNvbmZpZy5zbGF2ZSwg
bmV3IFN1YnByb2Nlc3MsIGNvbnNvbGUpKTsKLSAgICBPU0J1aWxkRmV0Y2hlci5mZXRjaEFuZFJl
cG9ydEFsbEluT3JkZXIoZmV0Y2hlcnMpLmNhdGNoKChlcnJvcikgPT4geworICAgIE9TQnVpbGRG
ZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQ29tbWl0cyhmZXRjaGVycykuY2F0Y2goKGVycm9y
KSA9PiB7CiAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICBpZiAodHlwZW9m
KGVycm9yLnN0YWNrKSA9PSAnc3RyaW5nJykgewogICAgICAgICAgICAgZm9yIChsZXQgbGluZSBv
ZiBlcnJvci5zdGFjay5zcGxpdCgnXG4nKSkKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMuanMgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRlc3RzLmpzCmluZGV4IDVmODg1MjQ5MjA2
MGVlYTZmMzMwNWJiYzBmNTRlYjYwYzAxMGIyYTMuLjljNmVkZjkxN2Q2NDE0ZGVmNzFjOGU2YmQ4
YTE0Y2E1MzFmZWNjMWIgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0
LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qcwpAQCAtNTgsNiArNTgsMTggQEAgZnVuY3Rp
b24gb3N4Q29tbWl0KCkKICAgICB9KTsKIH0KIAorZnVuY3Rpb24gb3N4Q29tbWl0V2l0aFRlc3Rh
YmlsaXR5V2FybmluZygpCit7CisgICAgcmV0dXJuIG5ldyBDb21taXRMb2coNSwgeworICAgICAg
ICBpZDogNSwKKyAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3gsCisgICAgICAgIHJl
dmlzaW9uOiAnMTAuMTEuNCAxNUU2NScsCisgICAgICAgIHRpbWU6IG51bGwsCisgICAgICAgIG9y
ZGVyOiAxNTA0MDY1LAorICAgICAgICB0ZXN0YWJpbGl0eVdhcm5pbmc6ICJQYW5pYyBvbiBib290
IgorICAgIH0pOworfQorCiBmdW5jdGlvbiBvbGRPU1hDb21taXQoKQogewogICAgIHJldHVybiBu
ZXcgQ29tbWl0TG9nKDYsIHsKQEAgLTQxNyw2ICs0MjksMTMgQEAgZGVzY3JpYmUoJ0NvbW1pdExv
ZycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgfSk7CiAgICAgfSk7CiAKKyAgICBkZXNjcmliZSgn
dGVzdGFiaWxpdHlXYXJuaW5nJywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAi
dGVzdGFiaWxpdHlXYXJuaW5nIiBtZXNzYWdlJywgKCkgPT4geworICAgICAgICAgICAgY29uc3Qg
Y29tbWl0ID0gb3N4Q29tbWl0V2l0aFRlc3RhYmlsaXR5V2FybmluZygpOworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKGNvbW1pdC50ZXN0YWJpbGl0eVdhcm5pbmcoKSwgJ1BhbmljIG9uIGJvb3Qn
KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKICAgICBjb25zdCBjb21taXRzQVBJUmVzcG9uc2Ug
PSB7CiAgICAgICAgICJjb21taXRzIjpbewogICAgICAgICAgICAgImlkIjogIjgzMTE1MSIsCmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtc2V0
LXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LXNl
dC10ZXN0cy5qcwppbmRleCAzOWZjY2M1NDc1OWY4NzlmMWNlMDM4M2IwYTliMmNlN2ZjNWI5YTQ5
Li5iYTZjMTA3ZDA4OWFlYzE5NWNiMmU5YTFhODBjOWZjMjU4OTA1ZTMyIDEwMDY0NAotLS0gYS9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzCisr
KyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMu
anMKQEAgLTE3MCw2ICsxNzAsMTggQEAgZnVuY3Rpb24gYW5vdGhlckNvbW1pdFdpdGhHaXRSZXZp
c2lvbigpCiAgICAgfSk7CiB9CiAKK2Z1bmN0aW9uIGNvbW1pdFdpdGhUZXN0YWJpbGl0eVdhcm5p
bmcoKQoreworICAgIHJldHVybiBDb21taXRMb2cuZW5zdXJlU2luZ2xldG9uKDIwMjMsIHsKKyAg
ICAgICAgaWQ6IDIwMjMsCisgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0R2l0
LAorICAgICAgICByZXZpc2lvbjogJ2YyNGZjNjc4NzNhMDA2OGZkNWEzYTlhZGFjNTk1ZjAwMzZj
MjEzMTUnLAorICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgIHRpbWU6IDE0NTY5
MzI3NzMwMDAsCisgICAgICAgIHRlc3RhYmlsaXR5V2FybmluZzogJ0ZhaWxlZCBjb21waWxhdGlv
bicKKyAgICB9KTsKK30KKwogZGVzY3JpYmUoJ0NvbW1pdFNldCcsICgpID0+IHsKICAgICBNb2Nr
UmVtb3RlQVBJLmluamVjdChudWxsLCBCcm93c2VyUHJpdmlsZWdlZEFQSSk7CiAgICAgTW9ja01v
ZGVscy5pbmplY3QoKTsKQEAgLTI5NCw2ICszMDYsMTUgQEAgZGVzY3JpYmUoJ0NvbW1pdFNldCcs
ICgpID0+IHsKICAgICAgICAgfSk7CiAgICAgfQogCisgICAgZnVuY3Rpb24gY29tbWl0U2V0V2l0
aFRlc3RhYmlsaXR5V2FybmluZygpCisgICAgeworICAgICAgICByZXR1cm4gQ29tbWl0U2V0LmVu
c3VyZVNpbmdsZXRvbigxNiwgeworICAgICAgICAgICAgcmV2aXNpb25JdGVtczogW3sgY29tbWl0
OiBjb21taXRXaXRoVGVzdGFiaWxpdHlXYXJuaW5nKCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0s
CisgICAgICAgICAgICAgICAgeyBjb21taXQ6IHdlYmtpdENvbW1pdCgpLCByZXF1aXJlc0J1aWxk
OiBmYWxzZSB9XSwKKyAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXQorICAgICAgICB9KTsKKyAg
ICB9CisKICAgICBmdW5jdGlvbiBvbmVNZWFzdXJlbWVudENvbW1pdFNldCgpCiAgICAgewogICAg
ICAgICByZXR1cm4gTWVhc3VyZW1lbnRDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDEsIFsKQEAg
LTQwNiw2ICs0MjcsMjUgQEAgZGVzY3JpYmUoJ0NvbW1pdFNldCcsICgpID0+IHsKICAgICAgICAg
ICAgICAgICAgICAgeycxMSc6IHsgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTAnLCBvd25lclJl
dmlzaW9uOiBudWxsLCBwYXRjaDogbnVsbH0sIGN1c3RvbVJvb3RzOiBbNDU2LCA0NThdfV0pOwog
ICAgICAgICB9KTsKICAgICB9KTsKKworICAgIGRlc2NyaWJlKCdjb21taXRzV2l0aFRlc3RhYmls
aXR5V2FybmluZ3MnLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGNvbW1pdHMg
d2l0aCB0ZXN0YWJpbGl0eSB3YXJuaW5nJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29t
bWl0cyA9IGNvbW1pdFNldFdpdGhUZXN0YWJpbGl0eVdhcm5pbmcoKS5jb21taXRzV2l0aFRlc3Rh
YmlsaXR5V2FybmluZ3MoKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzLmxlbmd0
aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1swXSwgY29tbWl0V2l0aFRl
c3RhYmlsaXR5V2FybmluZygpKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBy
ZXR1cm4gZW1wdHkgbGlzdCBpZiBubyBjb21taXQgaW4gY29tbWl0IHNldCBjb250YWlucyB0ZXN0
YWJsaXR5IHdhcm5pbmcnLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb21taXRzID0gY29t
bWl0U2V0V2l0aFR3b0NvbW1pdHMoKS5jb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MoKTsK
KyAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzLmxlbmd0aCwgMCk7CisgICAgICAgIH0p
OworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ2NvbW1pdHMnLCAoKSA9PiB7CisgICAgICAgIGl0
KCdzaG91bGQgcmV0dXJuIGFsbCBjb21taXRzIGluIGNvbW1pdCBzZXQnLCAoKSA9PiB7CisgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0U2V0V2l0aFR3b0NvbW1pdHMoKS5jb21taXRzKCku
bGVuZ3RoLCAyKTsKKyAgICAgICAgfSk7CisgICAgfSk7CiB9KTsKIAogZGVzY3JpYmUoJ0ludGVy
bWVkaWF0ZUNvbW1pdFNldCcsICgpID0+IHsKQEAgLTYyOSw5ICs2NjksNyBAQCBkZXNjcmliZSgn
SW50ZXJtZWRpYXRlQ29tbWl0U2V0JywgKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydCgh
Y29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy53ZWJraXQpKTsKICAgICAg
ICAgICAgIH0pOwogICAgICAgICB9KTsKLQogICAgIH0pOwotCiB9KTsKIAogZGVzY3JpYmUoJ0N1
c3RvbUNvbW1pdFNldCcsICgpID0+IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357308</attachid>
            <date>2018-12-14 01:45:54 -0800</date>
            <delta_ts>2018-12-17 15:41:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191557-20181214014553.patch</filename>
            <type>text/plain</type>
            <size>78024</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5MTM1CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBkMDZkYzBjYWRhYTkzNWVkMTM4NzlkNWQzYWM4NDFhOGY3YzJhMDI5Li5iOTViYzAzYTQ2
Mjk5NGE4NWZmZDM1YmZmYmRiOWRkODk5ZjczMzMzIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxOC0xMi0xNCAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmQgY29tbWl0cyB0YWJsZSB0byBjb250YWluIHRl
c3RhYmlsaXR5IHdhcm5pbmcgaW5mb3JtYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE1NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUgYWJpbGl0eSB0byBzdG9yZSB0ZXN0YWJp
bGl0eSB3YXJuaW5nIG1lc3NhZ2UgaW4gY29tbWl0cyB0YWJsZS4KKyAgICAgICAgQWRkZWQgJy9h
cGkvdXBkYXRlLWNvbW1pdHMnIHRvIHN1cHBvcnQgdXBkYXRpbmcgYW4gZXhpc3RpbmcgY29tbWl0
LgorICAgICAgICBSZWZhY3RvcmVkICcvYXBpL3JlcG9ydC1jb21taXRzJyB0byBzaGFyZSBjb2Rl
IHdpdGggJy9hcGkvdXBkYXRlLWNvbW1pdHMnLgorICAgICAgICBVcGRhdGVkIG9zIHZlcnNpb24g
c3luY2luZyBzY3JpcHQgdG8gYmUgYWJsZSB0byB1cGRhdGUgdGVzdGFiaWxpdHkgd2FybmluZyBp
bmZvcm1hdGlvbi4KKworICAgICAgICAqIGluaXQtZGF0YWJhc2Uuc3FsOiBBZGRlZCAnY29tbWl0
X3Rlc3RhYmlsaXR5X3dhcm5pbmcnIGZpZWxkIHRvICdjb21taXRzJyB0YWJsZS4KKyAgICAgICAg
KiBwdWJsaWMvYXBpL3JlcG9ydC1jb21taXRzLnBocDogUmVmYWN0b3IgdG8gc2hhcmUgY29kZSB3
aXRoICcvYXBpL3VwZGF0ZS1jb21taXRzJy4KKyAgICAgICAgKiBwdWJsaWMvYXBpL3VwZGF0ZS1j
b21taXRzLnBocDogQWRkZWQgYW4gQVBJIHRvIHVwZGF0ZSBjb21taXQgaW5mby4KKyAgICAgICAg
KiBwdWJsaWMvaW5jbHVkZS9jb21taXQtbG9nLWZldGNoZXIucGhwOiBFeHBvc2UgdGVzdGFiaWxp
dHkgd2FybmluZyBpbmZvcm1hdGlvbiBpbiB0aGlzIEFQSS4KKyAgICAgICAgKiBwdWJsaWMvaW5j
bHVkZS9jb21taXQtbW9kaWZpZXIucGhwOiBBZGRlZCAnQ29tbWl0TW9kaWZpZXInIHRvIG1hbmFn
ZSBjb21taXQgaW5zZXJ0IGFuZCB1cGRhdGUuCisgICAgICAgICogcHVibGljL3YzL21vZGVscy9j
b21taXQtbG9nLmpzOiBDb21taXRMb2cgb2JqZWN0IHNob3VsZCBleHBvc2UgdGVzdGFiaWxpdHkg
d2FybmluZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUudXBkYXRl
U2luZ2xldG9uKToKKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUudGVzdGFiaWxpdHlXYXJu
aW5nKToKKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanM6IEFkZGVkICdj
b21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MnIGFuZCAnY29tbWl0cycgdG8gQ29tbWl0U2V0
IGFuZAorICAgICAgICBJbnRlcm1lZGlhdGVDb21taXRTZXQgaW5zdGFuY2VzLgorICAgICAgICAo
Q29tbWl0U2V0LnByb3RvdHlwZS5jb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MpOgorICAg
ICAgICAoQ29tbWl0U2V0LnByb3RvdHlwZS5jb21taXRzKToKKyAgICAgICAgKEludGVybWVkaWF0
ZUNvbW1pdFNldC5wcm90b3R5cGUuY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzKToKKyAg
ICAgICAgKEludGVybWVkaWF0ZUNvbW1pdFNldC5wcm90b3R5cGUuY29tbWl0cyk6CisgICAgICAg
ICogc2VydmVyLXRlc3RzL2FwaS11cGRhdGUtY29tbWl0cy10ZXN0cy5qczogQWRkZWQgdW5pdCB0
ZXN0cyBmb3IgJy9hcGkvdXBkYXRlLWNvbW1pdC10ZXN0YWJpbGl0eScuCisgICAgICAgICogc2Vy
dmVyLXRlc3RzL3Rvb2xzLW9zLWJ1aWxkLWZldGNoZXItdGVzdHMuanM6IEFkZGVkIGFuZCB1cGRh
dGVkIHVuaXQgdGVzdHMuCisgICAgICAgICogdG9vbHMvanMvb3MtYnVpbGQtZmV0Y2hlci5qczog
QWRkZWQgdGhlIGFiaWxpdHkgdG8gdXBkYXRlIGNvbW1pdCB0ZXN0YWJpbGl0eSB3YXJuaW5ncy4K
KyAgICAgICAgKGFzeW5jLmZldGNoUmVwb3J0QW5kVXBkYXRlQ29tbWl0cyk6CisgICAgICAgIChw
cm90b3R5cGUuYXN5bmMuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMpOgorICAgICAgICAocHJv
dG90eXBlLmFzeW5jLl9mZXRjaEF2YWlsYWJsZUJ1aWxkcyk6CisgICAgICAgIChwcm90b3R5cGUu
YXN5bmMuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMpOgorICAgICAgICAocHJvdG90eXBlLl9j
b21taXRzV2l0aGluUmFuZ2UpOgorICAgICAgICAocHJvdG90eXBlLmFzeW5jLl9yZXBvcnRUb0Vu
ZFBvaW50KToKKyAgICAgICAgKGZldGNoQW5kUmVwb3J0QWxsSW5PcmRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChwcm90b3R5cGUuZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMpOiBEZWxldGVkLgorICAg
ICAgICAocHJvdG90eXBlLl9mZXRjaEF2YWlsYWJsZUJ1aWxkcyk6IERlbGV0ZWQuCisgICAgICAg
IChwcm90b3R5cGUuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMpOiBEZWxldGVkLgorICAgICAg
ICAocHJvdG90eXBlLl9zdWJtaXRDb21taXRzKTogRGVsZXRlZC4KKyAgICAgICAgKiB0b29scy9z
eW5jLW9zLXZlcnNpb25zLmpzOgorICAgICAgICAqIHVuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0
cy5qczogQWRkZWQgYSB1bml0IHRlc3QgZm9yICd0ZXN0YWJpbGl0eVdhcm5pbmcnLgorICAgICAg
ICAqIHVuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qczogQWRkZWQgdW5pdCB0ZXN0cyBmb3Ig
J2NvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5ncycuCisKIDIwMTgtMTEtMTYgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFuaWZlc3QgZmlsZSBjYW4gY29u
dGFpbiBhIHRlc3QgbWV0cmljIHdoaWNoIHJlZmVyZW5jZXMgYSBub24tZXhpc3RlbnQgdGVzdApk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL2luaXQtZGF0YWJhc2Uuc3FsIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL2luaXQtZGF0YWJhc2Uuc3FsCmluZGV4IDgxNjFlZmUz
ZTI4MWUzNGEwZGM0NGVkYjgwY2FiNmMzYmJjMzdiYTYuLjJlZTE3YWQ0YzkyYmY1MjU2NzMzMmM2
MDFmZjJlMmIxNGRkNGYzNzcgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9p
bml0LWRhdGFiYXNlLnNxbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvaW5pdC1kYXRh
YmFzZS5zcWwKQEAgLTEwMSw2ICsxMDEsNyBAQCBDUkVBVEUgVEFCTEUgY29tbWl0cyAoCiAgICAg
Y29tbWl0X2NvbW1pdHRlciBpbnRlZ2VyIFJFRkVSRU5DRVMgY29tbWl0dGVycyBPTiBERUxFVEUg
Q0FTQ0FERSwKICAgICBjb21taXRfbWVzc2FnZSB0ZXh0LAogICAgIGNvbW1pdF9yZXBvcnRlZCBi
b29sZWFuIE5PVCBOVUxMIERFRkFVTFQgRkFMU0UsCisgICAgY29tbWl0X3Rlc3RhYmlsaXR5X3dh
cm5pbmcgdmFyY2hhcig2NCkgREVGQVVMVCBOVUxMLAogICAgIENPTlNUUkFJTlQgY29tbWl0X2lu
X3JlcG9zaXRvcnlfbXVzdF9iZV91bmlxdWUgVU5JUVVFKGNvbW1pdF9yZXBvc2l0b3J5LCBjb21t
aXRfcmV2aXNpb24pKTsKIENSRUFURSBJTkRFWCBjb21taXRfdGltZV9pbmRleCBPTiBjb21taXRz
KGNvbW1pdF90aW1lKTsKIENSRUFURSBJTkRFWCBjb21taXRfb3JkZXJfaW5kZXggT04gY29tbWl0
cyhjb21taXRfb3JkZXIpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy9hcGkvcmVwb3J0LWNvbW1pdHMucGhwIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy9hcGkvcmVwb3J0LWNvbW1pdHMucGhwCmluZGV4IDZjNjUxYTk4YWE0ZmY3N2ZmMjkwYTI4
MjNhM2FmYjc4YmM5MjE0NWIuLjMwODk3ODcyMDdiMjg3YmVhMmRiNGFhNzM4MTVjYWI1NWFjNGUx
NjIgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYXBpL3JlcG9y
dC1jb21taXRzLnBocAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9y
ZXBvcnQtY29tbWl0cy5waHAKQEAgLTEsNiArMSw3IEBACiA8P3BocAogCiByZXF1aXJlKCcuLi9p
bmNsdWRlL2pzb24taGVhZGVyLnBocCcpOworcmVxdWlyZSgnLi4vaW5jbHVkZS9jb21taXQtbW9k
aWZpZXIucGhwJyk7CiAKIGZ1bmN0aW9uIG1haW4oJHBvc3RfZGF0YSkKIHsKQEAgLTEzLDkyICsx
NCwxMiBAQCBmdW5jdGlvbiBtYWluKCRwb3N0X2RhdGEpCiAgICAgdmVyaWZ5X3NsYXZlKCRkYiwg
JHJlcG9ydCk7CiAKICAgICAkY29tbWl0cyA9IGFycmF5X2dldCgkcmVwb3J0LCAnY29tbWl0cycs
IGFycmF5KCkpOwotCi0gICAgZm9yZWFjaCAoJGNvbW1pdHMgYXMgJGNvbW1pdF9pbmZvKSB7Ci0g
ICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygncmVwb3NpdG9yeScsICRjb21taXRfaW5mbykp
Ci0gICAgICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ01pc3NpbmdSZXBvc2l0b3J5TmFtZScsIGFy
cmF5KCdjb21taXQnID0+ICRjb21taXRfaW5mbykpOwotICAgICAgICBpZiAoIWFycmF5X2tleV9l
eGlzdHMoJ3JldmlzaW9uJywgJGNvbW1pdF9pbmZvKSkKLSAgICAgICAgICAgIGV4aXRfd2l0aF9l
cnJvcignTWlzc2luZ1JldmlzaW9uJywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7
Ci0gICAgICAgIHJlcXVpcmVfZm9ybWF0KCdSZXZpc2lvbicsICRjb21taXRfaW5mb1sncmV2aXNp
b24nXSwgJy9eW0EtWmEtejAtOSBcLl0rJC8nKTsKLSAgICAgICAgaWYgKGFycmF5X2tleV9leGlz
dHMoJ2F1dGhvcicsICRjb21taXRfaW5mbykgJiYgIWlzX2FycmF5KCRjb21taXRfaW5mb1snYXV0
aG9yJ10pKQotICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdJbnZhbGlkQXV0aG9yRm9ybWF0
JywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7Ci0gICAgfQotCi0gICAgJGRiLT5i
ZWdpbl90cmFuc2FjdGlvbigpOwotICAgIGZvcmVhY2ggKCRjb21taXRzIGFzICRjb21taXRfaW5m
bykgewotICAgICAgICAkcmVwb3NpdG9yeV9pZCA9ICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3co
J3JlcG9zaXRvcmllcycsICdyZXBvc2l0b3J5JywgYXJyYXkoJ25hbWUnID0+ICRjb21taXRfaW5m
b1sncmVwb3NpdG9yeSddLCAnb3duZXInID0+IE5VTEwpKTsKLSAgICAgICAgaWYgKCEkcmVwb3Np
dG9yeV9pZCkgewotICAgICAgICAgICAgJGRiLT5yb2xsYmFja190cmFuc2FjdGlvbigpOwotICAg
ICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdGYWlsZWRUb0luc2VydFJlcG9zaXRvcnknLCBhcnJh
eSgnY29tbWl0JyA9PiAkY29tbWl0X2luZm8pKTsKLSAgICAgICAgfQotICAgICAgICAkb3duZXJf
Y29tbWl0X2lkID0gaW5zZXJ0X2NvbW1pdCgkZGIsICRjb21taXRfaW5mbywgJHJlcG9zaXRvcnlf
aWQsIE5VTEwpOwotICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJ293bmVkQ29tbWl0cycs
ICRjb21taXRfaW5mbykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3JlYWNo
KCRjb21taXRfaW5mb1snb3duZWRDb21taXRzJ10gYXMgJG93bmVkX2NvbW1pdF9yZXBvc2l0b3J5
X25hbWUgPT4gJG93bmVkX2NvbW1pdF9pbmZvKSB7Ci0gICAgICAgICAgICBpZiAoYXJyYXlfa2V5
X2V4aXN0cygndGltZScsICRvd25lZF9jb21taXRfaW5mbykpIHsKLSAgICAgICAgICAgICAgICAk
ZGItPnJvbGxiYWNrX3RyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgZXhpdF93aXRoX2Vy
cm9yKCdPd25lZENvbW1pdFNob3VsZE5vdENvbnRhaW5UaW1lc3RhbXAnLCBhcnJheSgnY29tbWl0
JyA9PiAkb3duZWRfY29tbWl0X2luZm8pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICRv
d25lZF9jb21taXRfcmVwb3NpdG9yeV9pZCA9ICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3coJ3Jl
cG9zaXRvcmllcycsICdyZXBvc2l0b3J5JywgYXJyYXkoJ25hbWUnID0+ICRvd25lZF9jb21taXRf
cmVwb3NpdG9yeV9uYW1lLCAnb3duZXInID0+ICRyZXBvc2l0b3J5X2lkKSk7Ci0gICAgICAgICAg
ICBpZiAoISRvd25lZF9jb21taXRfcmVwb3NpdG9yeV9pZCkgewotICAgICAgICAgICAgICAgICRk
Yi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBleGl0X3dpdGhfZXJy
b3IoJ0ZhaWxlZFRvSW5zZXJ0UmVwb3NpdG9yeScsIGFycmF5KCdjb21taXQnID0+ICRvd25lZF9j
b21taXRfaW5mbykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5zZXJ0X2NvbW1pdCgk
ZGIsICRvd25lZF9jb21taXRfaW5mbywgJG93bmVkX2NvbW1pdF9yZXBvc2l0b3J5X2lkLCAkb3du
ZXJfY29tbWl0X2lkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAkZGItPmNvbW1pdF90cmFuc2Fj
dGlvbigpOworICAgICRjb21taXRfbW9kaWZpZXIgPSBuZXcgQ29tbWl0TW9kaWZpZXIoJGRiKTsK
KyAgICAkY29tbWl0X21vZGlmaWVyLT5pbnNlcnRfY29tbWl0cygkY29tbWl0cyk7CiAKICAgICBl
eGl0X3dpdGhfc3VjY2VzcygpOwogfQogCi1mdW5jdGlvbiBpbnNlcnRfY29tbWl0KCRkYiwgJGNv
bW1pdF9pbmZvLCAkcmVwb3NpdG9yeV9pZCwgJG93bmVyX2NvbW1pdF9pZCkKLXsKLSAgICAkYXV0
aG9yID0gYXJyYXlfZ2V0KCRjb21taXRfaW5mbywgJ2F1dGhvcicpOwotICAgICRjb21taXR0ZXJf
aWQgPSBOVUxMOwotICAgIGlmICgkYXV0aG9yKSB7Ci0gICAgICAgICRhY2NvdW50ID0gYXJyYXlf
Z2V0KCRhdXRob3IsICdhY2NvdW50Jyk7Ci0gICAgICAgICRjb21taXR0ZXJfcXVlcnkgPSBhcnJh
eSgncmVwb3NpdG9yeScgPT4gJHJlcG9zaXRvcnlfaWQsICdhY2NvdW50JyA9PiAkYWNjb3VudCk7
Ci0gICAgICAgICRjb21taXR0ZXJfZGF0YSA9ICRjb21taXR0ZXJfcXVlcnk7Ci0gICAgICAgICRu
YW1lID0gYXJyYXlfZ2V0KCRhdXRob3IsICduYW1lJyk7Ci0gICAgICAgIGlmICgkbmFtZSkKLSAg
ICAgICAgICAgICRjb21taXR0ZXJfZGF0YVsnbmFtZSddID0gJG5hbWU7Ci0gICAgICAgICRjb21t
aXR0ZXJfaWQgPSAkZGItPnVwZGF0ZV9vcl9pbnNlcnRfcm93KCdjb21taXR0ZXJzJywgJ2NvbW1p
dHRlcicsICRjb21taXR0ZXJfcXVlcnksICRjb21taXR0ZXJfZGF0YSk7Ci0gICAgICAgIGlmICgh
JGNvbW1pdHRlcl9pZCkgewotICAgICAgICAgICAgJGRiLT5yb2xsYmFja190cmFuc2FjdGlvbigp
OwotICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdGYWlsZWRUb0luc2VydENvbW1pdHRlcics
IGFycmF5KCdjb21taXR0ZXInID0+ICRjb21taXR0ZXJfZGF0YSkpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgJHByZXZpb3VzX2NvbW1pdF9yZXZpc2lvbiA9IGFycmF5X2dldCgkY29tbWl0X2lu
Zm8sICdwcmV2aW91c0NvbW1pdCcpOwotICAgICRwcmV2aW91c19jb21taXRfaWQgPSBOVUxMOwot
ICAgIGlmICgkcHJldmlvdXNfY29tbWl0X3JldmlzaW9uKSB7Ci0gICAgICAgICRwcmV2aW91c19j
b21taXQgPSAkZGItPnNlbGVjdF9maXJzdF9yb3coJ2NvbW1pdHMnLCAnY29tbWl0JywgYXJyYXko
J3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLCAncmV2aXNpb24nID0+ICRwcmV2aW91c19j
b21taXRfcmV2aXNpb24pKTsKLSAgICAgICAgaWYgKCEkcHJldmlvdXNfY29tbWl0KSB7Ci0gICAg
ICAgICAgICAkZGItPnJvbGxiYWNrX3RyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAgICBleGl0X3dp
dGhfZXJyb3IoJ0ZhaWxlZFRvRmluZFByZXZpb3VzQ29tbWl0JywgYXJyYXkoJ2NvbW1pdCcgPT4g
JGNvbW1pdF9pbmZvKSk7Ci0gICAgICAgIH0KLSAgICAgICAgJHByZXZpb3VzX2NvbW1pdF9pZCA9
ICRwcmV2aW91c19jb21taXRbJ2NvbW1pdF9pZCddOwotICAgIH0KLQotICAgICRkYXRhID0gYXJy
YXkoCi0gICAgICAgICdyZXBvc2l0b3J5JyA9PiAkcmVwb3NpdG9yeV9pZCwKLSAgICAgICAgJ3Jl
dmlzaW9uJyA9PiAkY29tbWl0X2luZm9bJ3JldmlzaW9uJ10sCi0gICAgICAgICdwcmV2aW91c19j
b21taXQnID0+ICRwcmV2aW91c19jb21taXRfaWQsCi0gICAgICAgICdvcmRlcicgPT4gYXJyYXlf
Z2V0KCRjb21taXRfaW5mbywgJ29yZGVyJyksCi0gICAgICAgICd0aW1lJyA9PiBhcnJheV9nZXQo
JGNvbW1pdF9pbmZvLCAndGltZScpLAotICAgICAgICAnY29tbWl0dGVyJyA9PiAkY29tbWl0dGVy
X2lkLAotICAgICAgICAnbWVzc2FnZScgPT4gYXJyYXlfZ2V0KCRjb21taXRfaW5mbywgJ21lc3Nh
Z2UnKSwKLSAgICAgICAgJ3JlcG9ydGVkJyA9PiB0cnVlLAotICAgICk7Ci0gICAgJGluc2VydGVk
X2NvbW1pdF9pZCA9ICRkYi0+dXBkYXRlX29yX2luc2VydF9yb3coJ2NvbW1pdHMnLCAnY29tbWl0
JywgYXJyYXkoJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLCAncmV2aXNpb24nID0+ICRk
YXRhWydyZXZpc2lvbiddKSwgJGRhdGEpOwotCi0gICAgaWYgKCRvd25lcl9jb21taXRfaWQpCi0g
ICAgICAgICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3coJ2NvbW1pdF9vd25lcnNoaXBzJywgJ2Nv
bW1pdCcsIGFycmF5KCdvd25lcicgPT4gJG93bmVyX2NvbW1pdF9pZCwgJ293bmVkJyA9PiAkaW5z
ZXJ0ZWRfY29tbWl0X2lkKSwgTlVMTCwgJyonKTsKLSAgICByZXR1cm4gJGluc2VydGVkX2NvbW1p
dF9pZDsKLX0KLQogbWFpbihmaWxlX2dldF9jb250ZW50cygncGhwOi8vaW5wdXQnKSk7CiAKID8+
CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS91cGRhdGUt
Y29tbWl0cy5waHAgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS91cGRhdGUt
Y29tbWl0cy5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGM1MzkxZTI4MTY4MTFlNjc1NTY5ODc5YmRmNDkxZTgz
MmU4ODMwMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvYXBpL3VwZGF0ZS1jb21taXRzLnBocApAQCAtMCwwICsxLDI0IEBACis8P3BocAorCityZXF1
aXJlKCcuLi9pbmNsdWRlL2pzb24taGVhZGVyLnBocCcpOworcmVxdWlyZSgnLi4vaW5jbHVkZS9j
b21taXQtbW9kaWZpZXIucGhwJyk7CisKK2Z1bmN0aW9uIG1haW4oJHBvc3RfZGF0YSkKK3sKKyAg
ICAkZGIgPSBuZXcgRGF0YWJhc2U7CisgICAgaWYgKCEkZGItPmNvbm5lY3QoKSkKKyAgICAgICAg
ZXhpdF93aXRoX2Vycm9yKCdEYXRhYmFzZUNvbm5lY3Rpb25GYWlsdXJlJyk7CisKKyAgICAkcmVw
b3J0ID0ganNvbl9kZWNvZGUoJHBvc3RfZGF0YSwgdHJ1ZSk7CisKKyAgICB2ZXJpZnlfc2xhdmUo
JGRiLCAkcmVwb3J0KTsKKworICAgICRjb21taXRzID0gYXJyYXlfZ2V0KCRyZXBvcnQsICdjb21t
aXRzJywgYXJyYXkoKSk7CisgICAgJGNvbW1pdF9tb2RpZmllciA9IG5ldyBDb21taXRNb2RpZmll
cigkZGIpOworICAgICRjb21taXRfbW9kaWZpZXItPnVwZGF0ZV9jb21taXRzKCRjb21taXRzKTsK
KworICAgIGV4aXRfd2l0aF9zdWNjZXNzKCk7Cit9CisKK21haW4oZmlsZV9nZXRfY29udGVudHMo
J3BocDovL2lucHV0JykpOworPz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1m
ZXRjaGVyLnBocCBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9jb21t
aXQtbG9nLWZldGNoZXIucGhwCmluZGV4IDljNzYyNjNjYjY2MTZiNTk1YjFkZGRmYjk5MDk0NzJl
YTE1ODlkMDguLjI2NDc2ZDBkOTBkMWExODQwY2IzMTA4NzdiN2U3OTNlNGEwMDQxMDAgMTAwNjQ0
Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9jb21taXQtbG9n
LWZldGNoZXIucGhwCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVk
ZS9jb21taXQtbG9nLWZldGNoZXIucGhwCkBAIC02Miw2ICs2Miw3IEBAIGNsYXNzIENvbW1pdExv
Z0ZldGNoZXIgewogICAgICAgICAgICAgY29tbWl0X3JlcG9zaXRvcnkgYXMgInJlcG9zaXRvcnki
LAogICAgICAgICAgICAgY29tbWl0X21lc3NhZ2UgYXMgIm1lc3NhZ2UiLAogICAgICAgICAgICAg
Y29tbWl0X29yZGVyIGFzICJvcmRlciIsCisgICAgICAgICAgICBjb21taXRfdGVzdGFiaWxpdHlf
d2FybmluZyBhcyAidGVzdGFiaWxpdHlXYXJuaW5nIiwKICAgICAgICAgICAgIEVYSVNUUyhTRUxF
Q1QgKiBGUk9NIGNvbW1pdF9vd25lcnNoaXBzIFdIRVJFIGNvbW1pdF9vd25lciA9IGNvbW1pdF9p
ZCkgYXMgIm93bnNDb21taXRzIgogICAgICAgICAgICAgRlJPTSBjb21taXRzIExFRlQgT1VURVIg
Sk9JTiBjb21taXR0ZXJzIE9OIGNvbW1pdF9jb21taXR0ZXIgPSBjb21taXR0ZXJfaWQKICAgICAg
ICAgICAgIFdIRVJFIGNvbW1pdF9yZXBvc2l0b3J5ID0gJDEgQU5EIGNvbW1pdF9yZXBvcnRlZCA9
IHRydWUnOwpAQCAtMjExLDYgKzIxMiw3IEBAIGNsYXNzIENvbW1pdExvZ0ZldGNoZXIgewogICAg
ICAgICAgICAgJ2F1dGhvck5hbWUnID0+ICRjb21taXR0ZXJfcm93ID8gJGNvbW1pdHRlcl9yb3db
J2NvbW1pdHRlcl9uYW1lJ10gOiBudWxsLAogICAgICAgICAgICAgJ2F1dGhvckVtYWlsJyA9PiAk
Y29tbWl0dGVyX3JvdyA/ICRjb21taXR0ZXJfcm93Wydjb21taXR0ZXJfYWNjb3VudCddIDogbnVs
bCwKICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAkY29tbWl0X3Jvd1snY29tbWl0X21lc3NhZ2Un
XSwKKyAgICAgICAgICAgICd0ZXN0YWJpbGl0eVdhcm5pbmcnID0+ICRjb21taXRfcm93Wydjb21t
aXRfdGVzdGFiaWxpdHlfd2FybmluZyddLAogICAgICAgICAgICAgJ293bnNDb21taXRzJyA9PiAk
b3duc19jb21taXRzCiAgICAgICAgICk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2NvbW1pdC1tb2RpZmllci5waHAgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0LW1vZGlmaWVyLnBocApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45MzM2MjhkOGJjOWIwNTEzY2MxM2IwOGViMzFkOTMzYWVmNDI0NTFmCi0tLSAvZGV2
L251bGwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2NvbW1p
dC1tb2RpZmllci5waHAKQEAgLTAsMCArMSwyNTMgQEAKKzw/cGhwCisKK2NsYXNzIENvbW1pdE1v
ZGlmaWVyIHsKKyAgICBwcml2YXRlICRkYjsKKyAgICBwcml2YXRlICR0b3BfbGV2ZWxfcmVwb3Np
dG9yeV9pZF9ieV9uYW1lOworICAgIHByaXZhdGUgJG93bmVkX3JlcG9zaXRvcnlfYnlfbmFtZV9h
bmRfb3duZXJfaWQ7CisgICAgcHJpdmF0ZSAkY29tbWl0c19ieV9yZXBvc2l0b3J5X2lkOworICAg
IHByaXZhdGUgJGF1dGhvcnNfYnlfcmVwb3NpdG9yeV9pZDsKKyAgICBwcml2YXRlICRjb21taXRf
aWRlbnRpZmllcl9hbmRfdXBkYXRlczsKKyAgICBwcml2YXRlICRjb21taXRfZGF0YV9saXN0Owor
CisgICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRiKQorICAgIHsKKyAgICAgICAgJHRoaXMtPmRi
ID0gJGRiOworICAgICAgICAkdGhpcy0+dG9wX2xldmVsX3JlcG9zaXRvcnlfaWRfYnlfbmFtZSA9
IGFycmF5KCk7CisgICAgICAgICR0aGlzLT5vd25lZF9yZXBvc2l0b3J5X2J5X25hbWVfYW5kX293
bmVyX2lkID0gYXJyYXkoKTsKKyAgICAgICAgJHRoaXMtPmNvbW1pdHNfYnlfcmVwb3NpdG9yeV9p
ZCA9IGFycmF5KCk7CisgICAgICAgICR0aGlzLT5hdXRob3JzX2J5X3JlcG9zaXRvcnlfaWQgPSBh
cnJheSgpOworICAgICAgICAkdGhpcy0+Y29tbWl0X2lkZW50aWZpZXJfYW5kX3VwZGF0ZXMgPSBh
cnJheSgpOworICAgICAgICAkdGhpcy0+Y29tbWl0X2RhdGFfbGlzdCA9IGFycmF5KCk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gdXBkYXRlX2NvbW1pdHMoJGNvbW1pdHMpCisgICAgeworICAgICAg
ICAkdGhpcy0+cHJlcGFyZV9jb21taXRfdXBkYXRlKCRjb21taXRzKTsKKyAgICAgICAgJHRoaXMt
PmRiLT5iZWdpbl90cmFuc2FjdGlvbigpOworCisgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jb21t
aXRfaWRlbnRpZmllcl9hbmRfdXBkYXRlcyBhcyBsaXN0KCRjb21taXRfaWRlbnRpZmllciwgJGNv
bW1pdF91cGRhdGUpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnY29tbWl0
dGVyJywgJGNvbW1pdF91cGRhdGUpKSB7CisgICAgICAgICAgICAgICAgJGNvbW1pdHRlcl9pZCA9
ICR0aGlzLT5yZXNvbHZlX2NvbW1pdHRlcl9ieV9yZXBvc2l0b3J5X2lkX2FuZF9hdXRob3JfYWNj
b3VudCgkY29tbWl0X2lkZW50aWZpZXJbJ3JlcG9zaXRvcnknXSwgJGNvbW1pdF91cGRhdGVbJ2Nv
bW1pdHRlciddKTsKKyAgICAgICAgICAgICAgICAkY29tbWl0X3VwZGF0ZVsnY29tbWl0dGVyJ10g
PSAkY29tbWl0dGVyX2lkOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAkdXBkYXRlZF9j
b21taXQgPSAkdGhpcy0+ZGItPnVwZGF0ZV9yb3coJ2NvbW1pdHMnLCAnY29tbWl0JywgJGNvbW1p
dF9pZGVudGlmaWVyLCAkY29tbWl0X3VwZGF0ZSk7CisgICAgICAgICAgICBpZiAoISR1cGRhdGVk
X2NvbW1pdCkKKyAgICAgICAgICAgICAgICAkdGhpcy0+cm9sbGJhY2tfd2l0aF9lcnJvcignRmFp
bGVkVG9VcGRhdGVDb21taXQnLCBhcnJheSgnY29tbWl0JyA9PiAkY29tbWl0X2lkZW50aWZpZXIs
ICdjb21taXRVcGRhdGUnID0+ICRjb21taXRfdXBkYXRlKSk7CisgICAgICAgIH0KKworICAgICAg
ICAkdGhpcy0+ZGItPmNvbW1pdF90cmFuc2FjdGlvbigpOworICAgICAgICAkdGhpcy0+cmVzZXQo
KTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIHByZXBhcmVfY29tbWl0X3VwZGF0ZSgk
Y29tbWl0cykKKyAgICB7CisgICAgICAgICR0aGlzLT52YWxpZGF0ZV9jb21taXRzKCRjb21taXRz
KTsKKworICAgICAgICBmb3JlYWNoICgkY29tbWl0cyBhcyAkY29tbWl0X2luZm8pIHsKKyAgICAg
ICAgICAgICRyZXBvc2l0b3J5X2lkID0gJHRoaXMtPmZpbmRfdG9wX2xldmVsX3JlcG9zaXRvcnko
JGNvbW1pdF9pbmZvWydyZXBvc2l0b3J5J10pOworICAgICAgICAgICAgJGNvbW1pdF9pZGVudGlm
aWVyID0gYXJyYXkoJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLCAncmV2aXNpb24nID0+
ICRjb21taXRfaW5mb1sncmV2aXNpb24nXSk7CisgICAgICAgICAgICAkY29tbWl0X3VwZGF0ZSA9
IGFycmF5KCk7CisKKyAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCd0aW1lJywgJGNv
bW1pdF9pbmZvKSkKKyAgICAgICAgICAgICAgICAkY29tbWl0X3VwZGF0ZVsndGltZSddID0gJGNv
bW1pdF9pbmZvWyd0aW1lJ107CisKKyAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdt
ZXNzYWdlJywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgICAgICAkY29tbWl0X3VwZGF0ZVsn
bWVzc2FnZSddID0gJGNvbW1pdF9pbmZvWydtZXNzYWdlJ107CisKKyAgICAgICAgICAgIGlmIChh
cnJheV9rZXlfZXhpc3RzKCdvcmRlcicsICRjb21taXRfaW5mbykpCisgICAgICAgICAgICAgICAg
JGNvbW1pdF91cGRhdGVbJ29yZGVyJ10gPSAkY29tbWl0X2luZm9bJ29yZGVyJ107CisKKyAgICAg
ICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCd0ZXN0YWJpbGl0eVdhcm5pbmcnLCAkY29tbWl0
X2luZm8pKQorICAgICAgICAgICAgICAgICRjb21taXRfdXBkYXRlWyd0ZXN0YWJpbGl0eV93YXJu
aW5nJ10gPSAkY29tbWl0X2luZm9bJ3Rlc3RhYmlsaXR5V2FybmluZyddOworCisgICAgICAgICAg
ICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnYXV0aG9yJywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAg
ICAgICAgICAkY29tbWl0X3VwZGF0ZVsnY29tbWl0dGVyJ10gPSAkY29tbWl0X2luZm9bJ2F1dGhv
ciddOworCisgICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygncHJldmlvdXNDb21taXQn
LCAkY29tbWl0X2luZm8pKQorICAgICAgICAgICAgICAgICRjb21taXRfdXBkYXRlWydwcmV2aW91
c19jb21taXQnXSA9ICR0aGlzLT5yZXNvbHZlX3ByZXZpb3VzX2NvbW1pdCgkcmVwb3NpdG9yeV9p
ZCwgJGNvbW1pdF9pbmZvWydwcmV2aW91c0NvbW1pdCddLCBmYWxzZSk7CisKKyAgICAgICAgICAg
IGlmIChhcnJheV9rZXlfZXhpc3RzKCdvd25lZENvbW1pdHMnLCAkY29tbWl0X2luZm8pKQorICAg
ICAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJvcignT3duZWRDb21taXRzVXBkYXRlTm90U3VwcG9y
dGVkWWV0JywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7CisKKyAgICAgICAgICAg
IGlmICghY291bnQoJGNvbW1pdF91cGRhdGUpKQorICAgICAgICAgICAgICAgIGV4aXRfd2l0aF9l
cnJvcignTm90aGluZ1RvVXBkYXRlJywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7
CisKKyAgICAgICAgICAgIGFycmF5X3B1c2goJHRoaXMtPmNvbW1pdF9pZGVudGlmaWVyX2FuZF91
cGRhdGVzLCBhcnJheSgkY29tbWl0X2lkZW50aWZpZXIsICRjb21taXRfdXBkYXRlKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIHZhbGlkYXRlX2NvbW1pdHMoJGNv
bW1pdHMpCisgICAgeworICAgICAgICBmb3JlYWNoICgkY29tbWl0cyBhcyAkY29tbWl0X2luZm8p
IHsKKyAgICAgICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygncmVwb3NpdG9yeScsICRjb21t
aXRfaW5mbykpCisgICAgICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdNaXNzaW5nUmVwb3Np
dG9yeU5hbWUnLCBhcnJheSgnY29tbWl0JyA9PiAkY29tbWl0X2luZm8pKTsKKyAgICAgICAgICAg
IGlmICghYXJyYXlfa2V5X2V4aXN0cygncmV2aXNpb24nLCAkY29tbWl0X2luZm8pKQorICAgICAg
ICAgICAgICAgIGV4aXRfd2l0aF9lcnJvcignTWlzc2luZ1JldmlzaW9uJywgYXJyYXkoJ2NvbW1p
dCcgPT4gJGNvbW1pdF9pbmZvKSk7CisgICAgICAgICAgICByZXF1aXJlX2Zvcm1hdCgnUmV2aXNp
b24nLCAkY29tbWl0X2luZm9bJ3JldmlzaW9uJ10sICcvXltBLVphLXowLTkgXC5dKyQvJyk7Cisg
ICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnYXV0aG9yJywgJGNvbW1pdF9pbmZvKSAm
JiAhaXNfYXJyYXkoJGNvbW1pdF9pbmZvWydhdXRob3InXSkpCisgICAgICAgICAgICAgICAgZXhp
dF93aXRoX2Vycm9yKCdJbnZhbGlkQXV0aG9yRm9ybWF0JywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNv
bW1pdF9pbmZvKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIGZp
bmRfdG9wX2xldmVsX3JlcG9zaXRvcnkoJHJlcG9zaXRvcnlfbmFtZSkKKyAgICB7CisgICAgICAg
IGlmIChhcnJheV9rZXlfZXhpc3RzKCRyZXBvc2l0b3J5X25hbWUsICR0aGlzLT50b3BfbGV2ZWxf
cmVwb3NpdG9yeV9pZF9ieV9uYW1lKSkKKyAgICAgICAgICAgIHJldHVybiAkdGhpcy0+dG9wX2xl
dmVsX3JlcG9zaXRvcnlfaWRfYnlfbmFtZVskcmVwb3NpdG9yeV9uYW1lXTsKKworICAgICAgICAk
cmVwb3NpdG9yeSA9ICR0aGlzLT5kYi0+c2VsZWN0X2ZpcnN0X3JvdygncmVwb3NpdG9yaWVzJywg
J3JlcG9zaXRvcnknLCBhcnJheSgnbmFtZScgPT4gJHJlcG9zaXRvcnlfbmFtZSwgJ293bmVyJyA9
PiBOVUxMKSk7CisgICAgICAgIGlmICghJHJlcG9zaXRvcnkpCisgICAgICAgICAgICBleGl0X3dp
dGhfZXJyb3IoJ0ludmFsaWRSZXBvc2l0b3J5JywgYXJyYXkoJ3JlcG9zaXRvcnknID0+ICRyZXBv
c2l0b3J5X25hbWUpKTsKKyAgICAgICAgJHRoaXMtPnRvcF9sZXZlbF9yZXBvc2l0b3J5X2lkX2J5
X25hbWVbJHJlcG9zaXRvcnlfbmFtZV0gPSAkcmVwb3NpdG9yeVsncmVwb3NpdG9yeV9pZCddOwor
ICAgICAgICByZXR1cm4gJHJlcG9zaXRvcnlbJ3JlcG9zaXRvcnlfaWQnXTsKKyAgICB9CisKKyAg
ICBwcml2YXRlIGZ1bmN0aW9uIHJlc29sdmVfcHJldmlvdXNfY29tbWl0KCRyZXBvc2l0b3J5X2lk
LCAkcmV2aXNpb24sICRyb2xsYmFja19vbl9lcnJvcikKKyAgICB7CisgICAgICAgICRjb21taXRf
aWRfYnlfcmV2aXNpb24gPSAmYXJyYXlfZW5zdXJlX2l0ZW1faGFzX2FycmF5KCR0aGlzLT5jb21t
aXRzX2J5X3JlcG9zaXRvcnlfaWQsICRyZXZpc2lvbik7CisgICAgICAgIGlmIChhcnJheV9rZXlf
ZXhpc3RzKCRyZXZpc2lvbiwgJGNvbW1pdF9pZF9ieV9yZXZpc2lvbikpCisgICAgICAgICAgICBy
ZXR1cm4gJGNvbW1pdF9pZF9ieV9yZXZpc2lvblskcmV2aXNpb25dOworCisgICAgICAgICRwcmV2
aW91c19jb21taXQgPSAkdGhpcy0+ZGItPnNlbGVjdF9maXJzdF9yb3coJ2NvbW1pdHMnLCAnY29t
bWl0JywgYXJyYXkoJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLCAncmV2aXNpb24nID0+
ICRyZXZpc2lvbikpOworICAgICAgICBpZiAoISRwcmV2aW91c19jb21taXQpIHsKKyAgICAgICAg
ICAgIGlmICgkcm9sbGJhY2tfb25fZXJyb3IpCisgICAgICAgICAgICAgICAgJHRoaXMtPnJvbGxi
YWNrX3dpdGhfZXJyb3IoJ0ZhaWxlZFRvRmluZFByZXZpb3VzQ29tbWl0JywgYXJyYXkoJ3Jldmlz
aW9uJyA9PiAkcmV2aXNpb24pKTsKKyAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJvcignRmFpbGVk
VG9GaW5kUHJldmlvdXNDb21taXQnLCBhcnJheSgncmV2aXNpb24nID0+ICRyZXZpc2lvbikpOwor
ICAgICAgICB9CisKKyAgICAgICAgJGNvbW1pdF9pZF9ieV9yZXZpc2lvblskcmV2aXNpb25dID0g
JHByZXZpb3VzX2NvbW1pdFsnY29tbWl0X2lkJ107CisgICAgICAgIHJldHVybiAkcHJldmlvdXNf
Y29tbWl0Wydjb21taXRfaWQnXTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIHJlc29s
dmVfY29tbWl0dGVyX2J5X3JlcG9zaXRvcnlfaWRfYW5kX2F1dGhvcl9hY2NvdW50KCRyZXBvc2l0
b3J5X2lkLCAkYXV0aG9yKQorICAgIHsKKyAgICAgICAgJGNvbW1pdHRlcl9pZF9ieV9hY2NvdW50
ID0gJmFycmF5X2Vuc3VyZV9pdGVtX2hhc19hcnJheSgkdGhpcy0+YXV0aG9yc19ieV9yZXBvc2l0
b3J5X2lkLCAkcmVwb3NpdG9yeV9pZCk7CisgICAgICAgICRhY2NvdW50ID0gYXJyYXlfZ2V0KCRh
dXRob3IsICdhY2NvdW50Jyk7CisgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRhY2NvdW50
LCAkY29tbWl0dGVyX2lkX2J5X2FjY291bnQpKQorICAgICAgICAgICAgcmV0dXJuICRjb21taXR0
ZXJfaWRfYnlfYWNjb3VudFskYWNjb3VudF07CisKKyAgICAgICAgJGNvbW1pdHRlcl9kYXRhID0g
YXJyYXkoJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLCAnYWNjb3VudCcgPT4gJGFjY291
bnQpOworICAgICAgICAkbmFtZSA9IGFycmF5X2dldCgkYXV0aG9yLCAnbmFtZScpOworICAgICAg
ICBpZiAoJG5hbWUpCisgICAgICAgICAgICAkY29tbWl0dGVyX2RhdGFbJ25hbWUnXSA9ICRuYW1l
OworICAgICAgICAkY29tbWl0dGVyX2lkID0gJHRoaXMtPmRiLT51cGRhdGVfb3JfaW5zZXJ0X3Jv
dygnY29tbWl0dGVycycsICdjb21taXR0ZXInLCBhcnJheSgncmVwb3NpdG9yeScgPT4gJHJlcG9z
aXRvcnlfaWQsICdhY2NvdW50JyA9PiAkYWNjb3VudCksICRjb21taXR0ZXJfZGF0YSk7CisKKyAg
ICAgICAgaWYgKCEkY29tbWl0dGVyX2lkKQorICAgICAgICAgICAgJHRoaXMtPnJvbGxiYWNrX3dp
dGhfZXJyb3IoJ0ZhaWxlZFRvSW5zZXJ0Q29tbWl0dGVyJywgYXJyYXkoJ2NvbW1pdHRlcicgPT4g
JGNvbW1pdHRlcl9kYXRhKSk7CisgICAgICAgICRjb21taXR0ZXJfaWRfYnlfYWNjb3VudFskYWNj
b3VudF0gPSAkY29tbWl0dGVyX2lkOworICAgICAgICByZXR1cm4gJGNvbW1pdHRlcl9pZDsKKyAg
ICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIHJvbGxiYWNrX3dpdGhfZXJyb3IoJG1lc3NhZ2Us
ICRkZXRhaWxzKQorICAgIHsKKyAgICAgICAgJHRoaXMtPmRiLT5yb2xsYmFja190cmFuc2FjdGlv
bigpOworICAgICAgICBleGl0X3dpdGhfZXJyb3IoJG1lc3NhZ2UsICRkZXRhaWxzKTsKKyAgICB9
CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIHJlc2V0KCkKKyAgICB7CisgICAgICAgICR0aGlzLT50
b3BfbGV2ZWxfcmVwb3NpdG9yeV9pZF9ieV9uYW1lID0gYXJyYXkoKTsKKyAgICAgICAgJHRoaXMt
Pm93bmVkX3JlcG9zaXRvcnlfYnlfbmFtZV9hbmRfb3duZXJfaWQgPSBhcnJheSgpOworICAgICAg
ICAkdGhpcy0+Y29tbWl0c19ieV9yZXBvc2l0b3J5X2lkID0gYXJyYXkoKTsKKyAgICAgICAgJHRo
aXMtPmF1dGhvcnNfYnlfcmVwb3NpdG9yeV9pZCA9IGFycmF5KCk7CisgICAgICAgICR0aGlzLT5j
b21taXRfaWRlbnRpZmllcl9hbmRfdXBkYXRlcyA9IGFycmF5KCk7CisgICAgICAgICR0aGlzLT5j
b21taXRfZGF0YV9saXN0ID0gYXJyYXkoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbnNlcnRf
Y29tbWl0cygkY29tbWl0cykKKyAgICB7CisgICAgICAgICR0aGlzLT5wcmVwYXJlX2NvbW1pdF9p
bnNlcnRpb24oJGNvbW1pdHMpOworCisgICAgICAgICR0aGlzLT5kYi0+YmVnaW5fdHJhbnNhY3Rp
b24oKTsKKyAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmNvbW1pdF9kYXRhX2xpc3QgYXMgbGlzdCgk
Y29tbWl0X2RhdGEsICRvd25lZF9jb21taXRfbGlzdCkpIHsKKyAgICAgICAgICAgIGxpc3QoJGNv
bW1pdF9pZCwgJHJlcG9zaXRvcnlfaWQpID0gJHRoaXMtPmluc2VydF9jb21taXQoJGNvbW1pdF9k
YXRhLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgIGZvcmVhY2ggKCRvd25lZF9jb21taXRfbGlz
dCBhcyAkb3duZWRfY29tbWl0X2RhdGEpCisgICAgICAgICAgICAgICAgJHRoaXMtPmluc2VydF9j
b21taXQoJG93bmVkX2NvbW1pdF9kYXRhLCAkY29tbWl0X2lkLCAkcmVwb3NpdG9yeV9pZCk7Cisg
ICAgICAgIH0KKyAgICAgICAgJHRoaXMtPmRiLT5jb21taXRfdHJhbnNhY3Rpb24oKTsKKyAgICAg
ICAgJHRoaXMtPnJlc2V0KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiBwcmVwYXJl
X2NvbW1pdF9pbnNlcnRpb24oJGNvbW1pdHMpCisgICAgeworICAgICAgICAkdGhpcy0+dmFsaWRh
dGVfY29tbWl0cygkY29tbWl0cyk7CisgICAgICAgIGZvcmVhY2ggKCRjb21taXRzIGFzICRjb21t
aXRfaW5mbykgeworICAgICAgICAgICAgJGNvbW1pdF9kYXRhID0gJHRoaXMtPnByZXBhcmVfc2lu
Z2xlX2NvbW1pdF9kYXRhKCRjb21taXRfaW5mbywgZmFsc2UpOworICAgICAgICAgICAgJG93bmVk
X2NvbW1pdF9saXN0ID0gYXJyYXkoKTsKKyAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3Rz
KCdvd25lZENvbW1pdHMnLCAkY29tbWl0X2luZm8pKSB7CisgICAgICAgICAgICAgICAgZm9yZWFj
aCgkY29tbWl0X2luZm9bJ293bmVkQ29tbWl0cyddIGFzICRvd25lZF9jb21taXRfcmVwb3NpdG9y
eV9uYW1lID0+ICRvd25lZF9jb21taXRfaW5mbykgeworICAgICAgICAgICAgICAgICAgICAkb3du
ZWRfY29tbWl0X2luZm9bJ3JlcG9zaXRvcnknXSA9ICRvd25lZF9jb21taXRfcmVwb3NpdG9yeV9u
YW1lOworICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRvd25lZF9jb21taXRfbGlzdCwg
JHRoaXMtPnByZXBhcmVfc2luZ2xlX2NvbW1pdF9kYXRhKCRvd25lZF9jb21taXRfaW5mbywgdHJ1
ZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFycmF5
X3B1c2goJHRoaXMtPmNvbW1pdF9kYXRhX2xpc3QsIGFycmF5KCRjb21taXRfZGF0YSwgJG93bmVk
X2NvbW1pdF9saXN0KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9u
IHByZXBhcmVfc2luZ2xlX2NvbW1pdF9kYXRhKCRjb21taXRfaW5mbywgJGlzX293bmVkX2NvbW1p
dCkKKyAgICB7CisgICAgICAgICRjb21taXRfZGF0YSA9IGFycmF5KAorICAgICAgICAgICAgJ3Jl
cG9zaXRvcnknID0+ICRjb21taXRfaW5mb1sncmVwb3NpdG9yeSddLAorICAgICAgICAgICAgJ3Jl
dmlzaW9uJyA9PiAkY29tbWl0X2luZm9bJ3JldmlzaW9uJ10sCisgICAgICAgICAgICAncmVwb3J0
ZWQnID0+IHRydWUsCisgICAgICAgICk7CisKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMo
J3ByZXZpb3VzQ29tbWl0JywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgICRjb21taXRfZGF0
YVsncHJldmlvdXNfY29tbWl0J10gPSAkY29tbWl0X2luZm9bJ3ByZXZpb3VzQ29tbWl0J107CisK
KyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ29yZGVyJywgJGNvbW1pdF9pbmZvKSkKKyAg
ICAgICAgICAgICRjb21taXRfZGF0YVsnb3JkZXInXSA9ICRjb21taXRfaW5mb1snb3JkZXInXTsK
KworICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygndGltZScsICRjb21taXRfaW5mbykpIHsK
KyAgICAgICAgICAgIGlmICgkaXNfb3duZWRfY29tbWl0KQorICAgICAgICAgICAgICAgIGV4aXRf
d2l0aF9lcnJvcignT3duZWRDb21taXRTaG91bGROb3RDb250YWluVGltZXN0YW1wJywgYXJyYXko
J2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7CisgICAgICAgICAgICAkY29tbWl0X2RhdGFbJ3Rp
bWUnXSA9ICRjb21taXRfaW5mb1sndGltZSddOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFy
cmF5X2tleV9leGlzdHMoJ2F1dGhvcicsICRjb21taXRfaW5mbykpCisgICAgICAgICAgICAkY29t
bWl0X2RhdGFbJ2NvbW1pdHRlciddID0gJGNvbW1pdF9pbmZvWydhdXRob3InXTsKKworICAgICAg
ICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnbWVzc2FnZScsICRjb21taXRfaW5mbykpCisgICAgICAg
ICAgICAkY29tbWl0X2RhdGFbJ21lc3NhZ2UnXSA9ICRjb21taXRfaW5mb1snbWVzc2FnZSddOwor
CisgICAgICAgIHJldHVybiAkY29tbWl0X2RhdGE7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5j
dGlvbiBpbnNlcnRfY29tbWl0KCRjb21taXRfZGF0YSwgJG93bmVyX2NvbW1pdF9pZCwgJG93bmVy
X3JlcG9zaXRvcnlfaWQpCisgICAgeworICAgICAgICAkcmVwb3NpdG9yeV9pZCA9ICR0aGlzLT5y
ZXNvbHZlX3JlcG9zaXRvcnkoJGNvbW1pdF9kYXRhWydyZXBvc2l0b3J5J10sICRvd25lcl9yZXBv
c2l0b3J5X2lkKTsKKyAgICAgICAgJGNvbW1pdF9kYXRhWydyZXBvc2l0b3J5J10gPSAkcmVwb3Np
dG9yeV9pZDsKKworICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygncHJldmlvdXNfY29tbWl0
JywgJGNvbW1pdF9kYXRhKSkKKyAgICAgICAgICAgICRjb21taXRfZGF0YVsncHJldmlvdXNfY29t
bWl0J10gPSAkdGhpcy0+cmVzb2x2ZV9wcmV2aW91c19jb21taXQoJHJlcG9zaXRvcnlfaWQsICRj
b21taXRfZGF0YVsncHJldmlvdXNfY29tbWl0J10sIHRydWUpOworCisgICAgICAgIGlmIChhcnJh
eV9rZXlfZXhpc3RzKCdjb21taXR0ZXInLCAkY29tbWl0X2RhdGEpKQorICAgICAgICAgICAgJGNv
bW1pdF9kYXRhWydjb21taXR0ZXInXSA9ICR0aGlzLT5yZXNvbHZlX2NvbW1pdHRlcl9ieV9yZXBv
c2l0b3J5X2lkX2FuZF9hdXRob3JfYWNjb3VudCgkcmVwb3NpdG9yeV9pZCwgJGNvbW1pdF9kYXRh
Wydjb21taXR0ZXInXSk7CisKKyAgICAgICAgJGluc2VydGVkX2NvbW1pdF9pZCA9ICR0aGlzLT5k
Yi0+dXBkYXRlX29yX2luc2VydF9yb3coJ2NvbW1pdHMnLCAnY29tbWl0JywgYXJyYXkoJ3JlcG9z
aXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLCAncmV2aXNpb24nID0+ICRjb21taXRfZGF0YVsncmV2
aXNpb24nXSksICRjb21taXRfZGF0YSk7CisgICAgICAgIGlmICghJGluc2VydGVkX2NvbW1pdF9p
ZCkKKyAgICAgICAgICAgICR0aGlzLT5yb2xsYmFja193aXRoX2Vycm9yKCdGYWlsZWRUb0luc2Vy
dENvbW1pdCcsIGFycmF5KCdjb21taXQnID0+ICRjb21taXRfZGF0YSkpOworCisgICAgICAgIGlm
ICgkb3duZXJfY29tbWl0X2lkKQorICAgICAgICAgICAgJHRoaXMtPmRiLT5zZWxlY3Rfb3JfaW5z
ZXJ0X3JvdygnY29tbWl0X293bmVyc2hpcHMnLCAnY29tbWl0JywgYXJyYXkoJ293bmVyJyA9PiAk
b3duZXJfY29tbWl0X2lkLCAnb3duZWQnID0+ICRpbnNlcnRlZF9jb21taXRfaWQpLCBOVUxMLCAn
KicpOworCisgICAgICAgIHJldHVybiBhcnJheSgkaW5zZXJ0ZWRfY29tbWl0X2lkLCAkcmVwb3Np
dG9yeV9pZCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiByZXNvbHZlX3JlcG9zaXRv
cnkoJHJlcG9zaXRvcnlfbmFtZSwgJG93bmVyX3JlcG9zaXRvcnlfaWQpCisgICAgeworICAgICAg
ICBpZiAoJG93bmVyX3JlcG9zaXRvcnlfaWQpCisgICAgICAgICAgICAkcmVwb3NpdG9yeV9pZF9i
eV9uYW1lID0gJmFycmF5X2Vuc3VyZV9pdGVtX2hhc19hcnJheSgkdGhpcy0+b3duZWRfcmVwb3Np
dG9yeV9ieV9uYW1lX2FuZF9vd25lcl9pZCwgJG93bmVyX3JlcG9zaXRvcnlfaWQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICAkcmVwb3NpdG9yeV9pZF9ieV9uYW1lID0gJiR0aGlzLT50b3Bf
bGV2ZWxfcmVwb3NpdG9yeV9pZF9ieV9uYW1lOworCisgICAgICAgIGlmIChhcnJheV9rZXlfZXhp
c3RzKCRyZXBvc2l0b3J5X25hbWUsICRyZXBvc2l0b3J5X2lkX2J5X25hbWUpKQorICAgICAgICAg
ICAgcmV0dXJuICRyZXBvc2l0b3J5X2lkX2J5X25hbWVbJHJlcG9zaXRvcnlfbmFtZV07CisKKyAg
ICAgICAgJHJlcG9zaXRvcnlfaWQgPSAkdGhpcy0+ZGItPnNlbGVjdF9vcl9pbnNlcnRfcm93KCdy
ZXBvc2l0b3JpZXMnLCAncmVwb3NpdG9yeScsIGFycmF5KCduYW1lJyA9PiAkcmVwb3NpdG9yeV9u
YW1lLCAnb3duZXInID0+ICRvd25lcl9yZXBvc2l0b3J5X2lkKSk7CisgICAgICAgIGlmICghJHJl
cG9zaXRvcnlfaWQpCisgICAgICAgICAgICAkdGhpcy0+cm9sbGJhY2tfd2l0aF9lcnJvcignRmFp
bGVkVG9JbnNlcnRSZXBvc2l0b3J5JywgYXJyYXkoJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5
X25hbWUpKTsKKyAgICAgICAgJHJlcG9zaXRvcnlfaWRfYnlfbmFtZVskcmVwb3NpdG9yeV9uYW1l
XSA9ICRyZXBvc2l0b3J5X2lkOworICAgICAgICByZXR1cm4gJHJlcG9zaXRvcnlfaWQ7CisgICAg
fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanMgYi9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzCmluZGV4IDEzMGNi
OTBmMTQ5OGFlYmUzMDk5MDdmNDNjNTUzNWU0NzAzYmVjMzguLjJmYTJlYTA2OTQ2ODhiODk2NDlm
YWJjZGFhMjBmMmFjOGQ2ZmMwY2EgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qcwpAQCAtMjksMTEgKzI5LDE0IEBA
IGNsYXNzIENvbW1pdExvZyBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgICAgICAgICB0
aGlzLl9yYXdEYXRhLm93bnNDb21taXRzID0gcmF3RGF0YS5vd25zQ29tbWl0czsKICAgICAgICAg
aWYgKHJhd0RhdGEub3JkZXIpCiAgICAgICAgICAgICB0aGlzLl9yYXdEYXRhLm9yZGVyID0gcmF3
RGF0YS5vcmRlcjsKKyAgICAgICAgaWYgKHJhd0RhdGEudGVzdGFiaWxpdHlXYXJuaW5nKQorICAg
ICAgICAgICAgdGhpcy5fcmF3RGF0YS50ZXN0YWJpbGl0eVdhcm5pbmcgPSByYXdEYXRhLnRlc3Rh
YmlsaXR5V2FybmluZzsKICAgICB9CiAKICAgICByZXBvc2l0b3J5KCkgeyByZXR1cm4gdGhpcy5f
cmVwb3NpdG9yeTsgfQogICAgIHRpbWUoKSB7IHJldHVybiBuZXcgRGF0ZSh0aGlzLl9yYXdEYXRh
Wyd0aW1lJ10pOyB9CiAgICAgaGFzQ29tbWl0VGltZSgpIHsgcmV0dXJuIHRoaXMuX3Jhd0RhdGFb
J3RpbWUnXSA+IDAgJiYgdGhpcy5fcmF3RGF0YVsndGltZSddICE9IG51bGw7IH0KKyAgICB0ZXN0
YWJpbGl0eVdhcm5pbmcoKSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWyd0ZXN0YWJpbGl0eVdhcm5p
bmcnXTsgfQogICAgIGF1dGhvcigpIHsgcmV0dXJuIHRoaXMuX3Jhd0RhdGFbJ2F1dGhvck5hbWUn
XTsgfQogICAgIHJldmlzaW9uKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0YVsncmV2aXNpb24nXTsg
fQogICAgIG1lc3NhZ2UoKSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWydtZXNzYWdlJ107IH0KZGlm
ZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1p
dC1zZXQuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21t
aXQtc2V0LmpzCmluZGV4IDk0YWNjNTMzMjg5OGNiNDkwMGFmZTc4YjdmNmNiNjk3OWZjMzM1MTYu
LjQ1OTQ2Yzg4N2UyNGY3Mzk5NTVhOGI1MmJiZTVkYjdkZjE3YTQ1ODggMTAwNjQ0Ci0tLSBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKKysr
IGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5q
cwpAQCAtNzEsNiArNzEsOCBAQCBjbGFzcyBDb21taXRTZXQgZXh0ZW5kcyBEYXRhTW9kZWxPYmpl
Y3QgewogICAgIG93bmVyQ29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0
aGlzLl9yZXBvc2l0b3J5VG9Db21taXRPd25lck1hcC5nZXQocmVwb3NpdG9yeSk7IH0KICAgICB0
b3BMZXZlbFJlcG9zaXRvcmllcygpIHsgcmV0dXJuIFJlcG9zaXRvcnkuc29ydEJ5TmFtZVByZWZl
cnJpbmdPbmVzV2l0aFVSTCh0aGlzLl9yZXBvc2l0b3JpZXMuZmlsdGVyKChyZXBvc2l0b3J5KSA9
PiAhdGhpcy5vd25lclJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSkpOyB9CiAgICAg
b3duZWRSZXBvc2l0b3JpZXNGb3JPd25lclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgeyByZXR1cm4g
dGhpcy5fb3duZXJSZXBvc2l0b3J5VG9Pd25lZFJlcG9zaXRvcmllc01hcC5nZXQocmVwb3NpdG9y
eSk7IH0KKyAgICBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MoKSB7IHJldHVybiB0aGlz
LmNvbW1pdHMoKS5maWx0ZXIoKGNvbW1pdCkgPT4gISFjb21taXQudGVzdGFiaWxpdHlXYXJuaW5n
KCkpOyB9CisgICAgY29tbWl0cygpIHsgcmV0dXJuICBBcnJheS5mcm9tKHRoaXMuX3JlcG9zaXRv
cnlUb0NvbW1pdE1hcC52YWx1ZXMoKSk7IH0KIAogICAgIHJldmlzaW9uRm9yUmVwb3NpdG9yeShy
ZXBvc2l0b3J5KQogICAgIHsKQEAgLTM4Nyw2ICszODksOSBAQCBjbGFzcyBJbnRlcm1lZGlhdGVD
b21taXRTZXQgewogICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZmV0Y2hpbmdQcm9taXNlcyk7
CiAgICAgfQogCisgICAgY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzKCkgeyByZXR1cm4g
dGhpcy5jb21taXRzKCkuZmlsdGVyKChjb21taXQpID0+ICEhY29tbWl0LnRlc3RhYmlsaXR5V2Fy
bmluZygpKTsgfQorICAgIGNvbW1pdHMoKSB7IHJldHVybiAgQXJyYXkuZnJvbSh0aGlzLl9jb21t
aXRCeVJlcG9zaXRvcnkudmFsdWVzKCkpOyB9CisKICAgICBfZmV0Y2hDb21taXRMb2dBbmRPd25l
ZENvbW1pdHMocmVwb3NpdG9yeSwgcmV2aXNpb24pCiAgICAgewogICAgICAgICByZXR1cm4gQ29t
bWl0TG9nLmZldGNoRm9yU2luZ2xlUmV2aXNpb24ocmVwb3NpdG9yeSwgcmV2aXNpb24pLnRoZW4o
KGNvbW1pdHMpID0+IHsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2
ZXItdGVzdHMvYXBpLXVwZGF0ZS1jb21taXRzLXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3NlcnZlci10ZXN0cy9hcGktdXBkYXRlLWNvbW1pdHMtdGVzdHMuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDE0MWMxZTMxODQ0NGViY2QxYzMwMTE4NzNmMDFmNWJiZGYyNjUzMQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvYXBpLXVwZGF0ZS1j
b21taXRzLXRlc3RzLmpzCkBAIC0wLDAgKzEsMTYzIEBACisndXNlIHN0cmljdCc7CisKK2NvbnN0
IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOworCitjb25zdCBUZXN0U2VydmVyID0gcmVxdWly
ZSgnLi9yZXNvdXJjZXMvdGVzdC1zZXJ2ZXIuanMnKTsKK2NvbnN0IGFkZFNsYXZlRm9yUmVwb3J0
ID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMvY29tbW9uLW9wZXJhdGlvbnMuanMnKS5hZGRTbGF2ZUZv
clJlcG9ydDsKK2NvbnN0IHByZXBhcmVTZXJ2ZXJUZXN0ID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMv
Y29tbW9uLW9wZXJhdGlvbnMuanMnKS5wcmVwYXJlU2VydmVyVGVzdDsKK2NvbnN0IGFzc2VydFRo
cm93cyA9IHJlcXVpcmUoJy4vcmVzb3VyY2VzL2NvbW1vbi1vcGVyYXRpb25zLmpzJykuYXNzZXJ0
VGhyb3dzOworCitkZXNjcmliZSgiL2FwaS91cGRhdGUtY29tbWl0cyIsIGZ1bmN0aW9uICgpIHsK
KyAgICBwcmVwYXJlU2VydmVyVGVzdCh0aGlzKTsKKworICAgIGNvbnN0IHN1YnZlcnNpb25Db21t
aXRzID0geworICAgICAgICAic2xhdmVOYW1lIjogInNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2
ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJjb21taXRzIjogWworICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAgICAg
ICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0OCIsCisgICAgICAgICAgICAgICAgInRpbWUiOiAi
MjAxNy0wMS0yMFQwMjo1MjozNC41NzdaIiwKKyAgICAgICAgICAgICAgICAiYXV0aG9yIjogeyJu
YW1lIjogIlphbGFuIEJ1anRhcyIsICJhY2NvdW50IjogInphbGFuQGFwcGxlLmNvbSJ9LAorICAg
ICAgICAgICAgICAgICJtZXNzYWdlIjogImEgbWVzc2FnZSIsCisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAg
ICAgICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0OSIsCisgICAgICAgICAgICAgICAgInRpbWUi
OiAiMjAxNy0wMS0yMFQwMzoyMzo1MC42NDVaIiwKKyAgICAgICAgICAgICAgICAiYXV0aG9yIjog
eyJuYW1lIjogIkNocmlzIER1bWV6IiwgImFjY291bnQiOiAiY2R1bWV6QGFwcGxlLmNvbSJ9LAor
ICAgICAgICAgICAgICAgICJtZXNzYWdlIjogInNvbWUgbWVzc2FnZSIsCisgICAgICAgICAgICB9
CisgICAgICAgIF0KKyAgICB9OworCisgICAgY29uc3QgY29tbWl0c1VwZGF0ZSA9IHsKKyAgICAg
ICAgInNsYXZlTmFtZSI6ICJzb21lU2xhdmUiLAorICAgICAgICAic2xhdmVQYXNzd29yZCI6ICJz
b21lUGFzc3dvcmQiLAorICAgICAgICAiY29tbWl0cyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAicmVwb3NpdG9yeSI6ICJXZWJLaXQiLAorICAgICAgICAgICAgICAgICJyZXZp
c2lvbiI6ICIyMTA5NDgiLAorICAgICAgICAgICAgICAgICJ0ZXN0YWJpbGl0eVdhcm5pbmciOiAi
QnJlYWtzIGJ1aWxkcyIsCisgICAgICAgICAgICAgICAgIm1lc3NhZ2UiOiAiYW5vdGhlciBtZXNz
YWdlIiwKKyAgICAgICAgICAgICAgICAib3JkZXIiOiAyMTA5NDgsCisgICAgICAgICAgICAgICAg
InRpbWUiOiAiMjAxNy0wMS0yMFQwMzo1MjozNC41NzdaIiwKKyAgICAgICAgICAgICAgICAiYXV0
aG9yIjogeyJuYW1lIjogIkNocmlzIER1bWV6IiwgImFjY291bnQiOiAiY2R1bWV6QGFwcGxlLmNv
bSJ9LAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAicmVw
b3NpdG9yeSI6ICJXZWJLaXQiLAorICAgICAgICAgICAgICAgICJyZXZpc2lvbiI6ICIyMTA5NDki
LAorICAgICAgICAgICAgICAgICJwcmV2aW91c0NvbW1pdCI6ICIyMTA5NDgiLAorICAgICAgICAg
ICAgICAgICJ0ZXN0YWJpbGl0eVdhcm5pbmciOiAiQ3Jhc2hlcyBXZWJLaXQiLAorICAgICAgICAg
ICAgICAgICJtZXNzYWdlIjogImFub3RoZXIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgIm9y
ZGVyIjogMjEwOTQ5LAorICAgICAgICAgICAgICAgICJ0aW1lIjogIjIwMTctMDEtMjBUMDQ6MjM6
NTAuNjQ1WiIsCisgICAgICAgICAgICAgICAgImF1dGhvciI6IHsibmFtZSI6ICJaYWxhbiBCdWp0
YXMiLCAiYWNjb3VudCI6ICJ6YWxhbkBhcHBsZS5jb20ifSwKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgXQorICAgIH07CisKKworICAgIGNvbnN0IGNvbW1pdHNVcGRhdGVXaXRoTWlzc2luZ1Jldmlz
aW9uID0geworICAgICAgICAic2xhdmVOYW1lIjogInNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2
ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJjb21taXRzIjogWworICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAgICAg
ICAgICAgICAgInRlc3RhYmlsaXR5V2FybmluZyI6ICJCcmVha3MgYnVpbGRzIgorICAgICAgICAg
ICAgfQorICAgICAgICBdCisgICAgfTsKKworICAgIGNvbnN0IGNvbW1pdHNVcGRhdGVXaXRoTWlz
c2luZ1JlcG9zaXRvcnkgPSB7CisgICAgICAgICJzbGF2ZU5hbWUiOiAic29tZVNsYXZlIiwKKyAg
ICAgICAgInNsYXZlUGFzc3dvcmQiOiAic29tZVBhc3N3b3JkIiwKKyAgICAgICAgImNvbW1pdHMi
OiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0OCIs
CisgICAgICAgICAgICAgICAgInRlc3RhYmlsaXR5V2FybmluZyI6ICJCcmVha3MgYnVpbGRzIgor
ICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfTsKKworICAgIGNvbnN0IGNvbW1pdHNVcGRh
dGVXaXRob3V0QW55VXBkYXRlID0geworICAgICAgICAic2xhdmVOYW1lIjogInNvbWVTbGF2ZSIs
CisgICAgICAgICJzbGF2ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJjb21t
aXRzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IjogIldl
YktpdCIsCisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0OCIKKyAgICAgICAgICAg
IH0KKyAgICAgICAgXQorICAgIH07CisKKyAgICBjb25zdCBjb21taXRzVXBkYXRlV2l0aE93bmVk
Q29tbWl0c1VwZGF0ZSA9IHsKKyAgICAgICAgInNsYXZlTmFtZSI6ICJzb21lU2xhdmUiLAorICAg
ICAgICAic2xhdmVQYXNzd29yZCI6ICJzb21lUGFzc3dvcmQiLAorICAgICAgICAiY29tbWl0cyI6
IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAicmVwb3NpdG9yeSI6ICJXZWJLaXQi
LAorICAgICAgICAgICAgICAgICJyZXZpc2lvbiI6ICIyMTA5NDgiLAorICAgICAgICAgICAgICAg
ICJvd25lZENvbW1pdHMiOiBbXSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH07CisK
KyAgICBhc3luYyBmdW5jdGlvbiBzZXRVcFRlc3RzV2l0aEV4cGVjdGVkU3RhdHVzKGNvbW1pdHNV
cGRhdGUsIGV4cGVjdGVkU3RhdHVzKQorICAgIHsKKyAgICAgICAgYXdhaXQgYWRkU2xhdmVGb3JS
ZXBvcnQoc3VidmVyc2lvbkNvbW1pdHMpOworICAgICAgICBhd2FpdCBUZXN0U2VydmVyLnJlbW90
ZUFQSSgpLnBvc3RKU09OKCcvYXBpL3JlcG9ydC1jb21taXRzLycsIHN1YnZlcnNpb25Db21taXRz
KTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0
SlNPTignL2FwaS9jb21taXRzL1dlYktpdC8nKTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3Vs
dFsnc3RhdHVzJ10sICdPSycpOworICAgICAgICBsZXQgY29tbWl0cyA9IHJlc3VsdFsnY29tbWl0
cyddOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0cy5sZW5ndGgsIDIpOworICAgICAgICBh
c3NlcnQuZXF1YWwoY29tbWl0c1swXS50ZXN0YWJpbGl0eVdhcm5pbmcsIG51bGwpOworICAgICAg
ICBhc3NlcnQuZXF1YWwoY29tbWl0c1sxXS50ZXN0YWJpbGl0eVdhcm5pbmcsIG51bGwpOworCisg
ICAgICAgIHJlc3VsdCA9IGF3YWl0IFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkucG9zdEpTT04oJy9h
cGkvdXBkYXRlLWNvbW1pdHMnLCBjb21taXRzVXBkYXRlKTsKKyAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlc3VsdFsnc3RhdHVzJ10sIGV4cGVjdGVkU3RhdHVzKTsKKyAgICAgICAgcmVzdWx0ID0gYXdh
aXQgVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvV2ViS2l0Lycp
OworICAgICAgICByZXR1cm4gcmVzdWx0Wydjb21taXRzJ107CisgICAgfQorCisgICAgYXN5bmMg
ZnVuY3Rpb24gdGVzdFdpdGhFeHBlY3RlZEZhaWx1cmUoY29tbWl0c1VwZGF0ZSwgZXhwZWN0ZWRG
YWlsdXJlTmFtZSkKKyAgICB7CisgICAgICAgIGNvbnN0IGNvbW1pdHMgPSBhd2FpdCBzZXRVcFRl
c3RzV2l0aEV4cGVjdGVkU3RhdHVzKGNvbW1pdHNVcGRhdGUsIGV4cGVjdGVkRmFpbHVyZU5hbWUp
OworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0cy5sZW5ndGgsIDIpOworICAgICAgICBhc3Nl
cnQuZXF1YWwoY29tbWl0c1swXS50ZXN0YWJpbGl0eVdhcm5pbmcsIG51bGwpOworICAgICAgICBh
c3NlcnQuZXF1YWwoY29tbWl0c1sxXS50ZXN0YWJpbGl0eVdhcm5pbmcsIG51bGwpOworICAgIH0K
KworICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoICJNaXNzaW5nUmV2aXNpb24iIGlmIGNvbW1pdCB1
cGRhdGUgZG9lcyBub3QgaGF2ZSBjb21taXQgcmV2aXNpb24gc3BlY2lmaWVkJywgYXN5bmMgKCkg
PT4geworICAgICAgICBhd2FpdCB0ZXN0V2l0aEV4cGVjdGVkRmFpbHVyZShjb21taXRzVXBkYXRl
V2l0aE1pc3NpbmdSZXZpc2lvbiwgJ01pc3NpbmdSZXZpc2lvbicpOworICAgIH0pOworCisgICAg
aXQoJ3Nob3VsZCBmYWlsIHdpdGggIk1pc3NpbmdSZXBvc2l0b3J5TmFtZSIgaWYgY29tbWl0IHVw
ZGF0ZSBkb2VzIG5vdCBoYXZlIGNvbW1pdCByZXZpc2lvbiBzcGVjaWZpZWQnLCBhc3luYyAoKSA9
PiB7CisgICAgICAgIGF3YWl0IHRlc3RXaXRoRXhwZWN0ZWRGYWlsdXJlKGNvbW1pdHNVcGRhdGVX
aXRoTWlzc2luZ1JlcG9zaXRvcnksICdNaXNzaW5nUmVwb3NpdG9yeU5hbWUnKTsKKyAgICB9KTsK
KworICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoICJOb3RoaW5nVG9VcGRhdGUiIGlmIGNvbW1pdCB1
cGRhdGUgZG9lcyBub3QgaGF2ZSBjb21taXQgcmV2aXNpb24gc3BlY2lmaWVkJywgYXN5bmMgKCkg
PT4geworICAgICAgICBhd2FpdCB0ZXN0V2l0aEV4cGVjdGVkRmFpbHVyZShjb21taXRzVXBkYXRl
V2l0aG91dEFueVVwZGF0ZSwgJ05vdGhpbmdUb1VwZGF0ZScpOworICAgIH0pOworCisgICAgaXQo
J3Nob3VsZCBmYWlsIHdpdGggIk93bmVkQ29tbWl0c1VwZGF0ZU5vdFN1cHBvcnRlZFlldCIgd2hl
biB0cnlpbmcgdG8gdXBkYXRlIG93bmVkIGNvbW1pdHMgaW5mbycsIGFzeW5jICgpID0+IHsKKyAg
ICAgICAgYXdhaXQgdGVzdFdpdGhFeHBlY3RlZEZhaWx1cmUoY29tbWl0c1VwZGF0ZVdpdGhPd25l
ZENvbW1pdHNVcGRhdGUsICdPd25lZENvbW1pdHNVcGRhdGVOb3RTdXBwb3J0ZWRZZXQnKTsKKyAg
ICB9KTsKKworICAgIGl0KCJzaG91bGQgYmUgYWJsZSB0byB1cGRhdGUgY29tbWl0cyBtZXNzYWdl
LCB0aW1lLCBvcmRlciwgYXV0aG9yIGFuZCBwcmV2aW91cyBjb21taXQiLCBhc3luYyAoKSA9PiB7
CisgICAgICAgIGNvbnN0IGNvbW1pdHMgPSBhd2FpdCBzZXRVcFRlc3RzV2l0aEV4cGVjdGVkU3Rh
dHVzKGNvbW1pdHNVcGRhdGUsICdPSycpOworCisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRz
Lmxlbmd0aCwgMik7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzBdLnRlc3RhYmlsaXR5
V2FybmluZywgJ0JyZWFrcyBidWlsZHMnKTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNb
MV0udGVzdGFiaWxpdHlXYXJuaW5nLCAnQ3Jhc2hlcyBXZWJLaXQnKTsKKyAgICAgICAgYXNzZXJ0
LmVxdWFsKGNvbW1pdHNbMF0ubWVzc2FnZSwgJ2Fub3RoZXIgbWVzc2FnZScpOworICAgICAgICBh
c3NlcnQuZXF1YWwoY29tbWl0c1sxXS5tZXNzYWdlLCAnYW5vdGhlciBtZXNzYWdlJyk7CisgICAg
ICAgIGFzc2VydC5lcXVhbChjb21taXRzWzBdLmF1dGhvck5hbWUsICdDaHJpcyBEdW1leicpOwor
ICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sxXS5hdXRob3JOYW1lLCAnWmFsYW4gQnVqdGFz
Jyk7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzBdLm9yZGVyLCAyMTA5NDgpOworICAg
ICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sxXS5vcmRlciwgMjEwOTQ5KTsKKyAgICAgICAgYXNz
ZXJ0LmVxdWFsKGNvbW1pdHNbMF0udGltZSwgMTQ4NDg4NDM1NDU3Nyk7CisgICAgICAgIGFzc2Vy
dC5lcXVhbChjb21taXRzWzFdLnRpbWUsIDE0ODQ4ODYyMzA2NDUpOworICAgICAgICBhc3NlcnQu
ZXF1YWwoY29tbWl0c1sxXS5wcmV2aW91c0NvbW1pdCwgY29tbWl0c1swXS5pZCk7CisgICAgfSk7
Cit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLW9zLWJ1aWxkLWZldGNoZXItdGVzdHMu
anMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLW9zLWJ1aWxk
LWZldGNoZXItdGVzdHMuanMKaW5kZXggYzZmMGRjOTNiYmUzMjg2ODc4Y2E3ZjkwYzljNDFjZWZm
NTRlYTc3OS4uNjg0MGEwZDdjYjdlNWM5OGUwMjI5OTY5NWFjMjk1MGFlNjBkMjdlOSAxMDA2NDQK
LS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0cy90b29scy1vcy1idWls
ZC1mZXRjaGVyLXRlc3RzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXIt
dGVzdHMvdG9vbHMtb3MtYnVpbGQtZmV0Y2hlci10ZXN0cy5qcwpAQCAtMTM0LDM5ICsxMzQsNTcg
QEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgfSk7CiAKICAg
ICBkZXNjcmliZSgnT1NCdWlsZGVyRmV0Y2hlci5fY29tbWl0c0ZvckF2YWlsYWJsZUJ1aWxkcycs
ICgpID0+IHsKLSAgICAgICAgaXQoJ3Nob3VsZCBvbmx5IHJldHVybiBjb21taXRzIHdob3NlIG9y
ZGVycyBhcmUgaGlnaGVyIHRoYW4gc3BlY2lmaWVkIG9yZGVyJywgKCkgPT4geworICAgICAgICBp
dCgnc2hvdWxkIGNvbXBhdGlibGUgd2l0aCBjb21tYW5kIG91dHB1dCBvbmx5IGNvbnRhaW5zIGxp
bmVzIG9mIHJldmlzaW9uJywgYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgY29uc3QgbG9nZ2Vy
ID0gbmV3IE1vY2tMb2dnZXI7CiAgICAgICAgICAgICBjb25zdCBmZXRjaGVyID0gbmV3IE9TQnVp
bGRGZXRjaGVyKHt9LCBudWxsLCBudWxsLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAg
ICAgICAgIGNvbnN0IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndh
aXRGb3JJbnZvY2F0aW9uKCk7Ci0gICAgICAgICAgICBjb25zdCBmZXRjaENvbW1pdHNQcm9taXNl
ID0gZmV0Y2hlci5fY29tbWl0c0ZvckF2YWlsYWJsZUJ1aWxkcygnT1NYJywgWydsaXN0JywgJ2J1
aWxkMSddLCAnXlxcLiokJywgMTYwNDAwMDAwMCwgMTYwNjAwMDAwMCk7CisgICAgICAgICAgICBj
b25zdCBmZXRjaENvbW1pdHNQcm9taXNlID0gZmV0Y2hlci5fY29tbWl0c0ZvckF2YWlsYWJsZUJ1
aWxkcyhbJ2xpc3QnLCAnYnVpbGQxJ10sICdeXFwuKiQnKTsKIAotICAgICAgICAgICAgcmV0dXJu
IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKLSAgICAg
ICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBd
LmNvbW1hbmQsIFsnbGlzdCcsICdidWlsZDEnXSk7Ci0gICAgICAgICAgICAgICAgTW9ja1N1YnBy
b2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnMTZEMzIxXG4xNkUzMjF6XG5cbjE2RjMyMScp
OwotICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaENvbW1pdHNQcm9taXNlOwotICAgICAgICAg
ICAgfSkudGhlbigocmVzdWx0cykgPT4gewotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChy
ZXN1bHRzLmxlbmd0aCwgMik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1
bHRzWzBdLCB7cmVwb3NpdG9yeTogJ09TWCcsIG9yZGVyOiAxNjA0MDMyMTI2LCByZXZpc2lvbjog
JzE2RTMyMXonfSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzFd
LCB7cmVwb3NpdG9yeTogJ09TWCcsIG9yZGVyOiAxNjA1MDMyMTAwLCByZXZpc2lvbjogJzE2RjMy
MSd9KTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYXdhaXQgd2FpdEZvckludm9jYXRp
b25Qcm9taXNlOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9j
YXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKE1vY2tTdWJw
cm9jZXNzLmludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdidWlsZDEnXSk7CisKKyAg
ICAgICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0cyA9IHthbGxSZXZpc2lvbnM6IFsiMTZEMzIx
IiwgIjE2RTMyMXoiLCAiMTZGMzIxIl0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczog
e319OworICAgICAgICAgICAgYXdhaXQgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVz
b2x2ZSgnMTZEMzIxXG4xNkUzMjF6XG5cbjE2RjMyMScpOworICAgICAgICAgICAgY29uc3QgYnVp
bGRJbmZvID0gYXdhaXQgZmV0Y2hDb21taXRzUHJvbWlzZTsKKyAgICAgICAgICAgIGFzc2VydC5k
ZWVwRXF1YWwoZXhwZWN0ZWRSZXN1bHRzLCBidWlsZEluZm8pOwogICAgICAgICB9KTsKIAotICAg
ICAgICBpdCgnc2hvdWxkIG9ubHkgcmV0dXJuIGNvbW1pdHMgd2hvc2Ugb3JkZXJzIGFyZSBoaWdo
ZXIgdGhhbiBtaW5PcmRlciBhbmQgbG93ZXIgdGhhbiB0aGUgbWF4T3JkZXInLCAoKSA9PiB7Cisg
ICAgICAgIGl0KCdzaG91bGQgcGFyc2UgdGhlIGNvbW1hbmQgb3V0cHV0IGFzIEpTT04gZm9ybWF0
JywgYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dn
ZXI7CiAgICAgICAgICAgICBjb25zdCBmZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKHt9LCBu
dWxsLCBudWxsLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IHdh
aXRGb3JJbnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9u
KCk7Ci0gICAgICAgICAgICBjb25zdCBmZXRjaENvbW1pdHNQcm9taXNlID0gZmV0Y2hlci5fY29t
bWl0c0ZvckF2YWlsYWJsZUJ1aWxkcygnT1NYJywgWydsaXN0JywgJ2J1aWxkMSddLCAnXlxcLiok
JywgMTYwNDAwMDAwMCwgMTYwNTAwMDAwMCk7CisgICAgICAgICAgICBjb25zdCBmZXRjaENvbW1p
dHNQcm9taXNlID0gZmV0Y2hlci5fY29tbWl0c0ZvckF2YWlsYWJsZUJ1aWxkcyhbJ2xpc3QnLCAn
YnVpbGQxJ10pOwogCi0gICAgICAgICAgICByZXR1cm4gd2FpdEZvckludm9jYXRpb25Qcm9taXNl
LnRoZW4oKCkgPT4gewotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChNb2NrU3VicHJvY2Vz
cy5pbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1
YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2J1aWxk
MSddKTsKLSAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5yZXNv
bHZlKCcxNkQzMjFcbjE2RTMyMXpcblxuMTZGMzIxJyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGZldGNoQ29tbWl0c1Byb21pc2U7Ci0gICAgICAgICAgICB9KS50aGVuKChyZXN1bHRzKSA9PiB7
Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVuZ3RoLCAxKTsKLSAgICAg
ICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3VsdHNbMF0sIHtyZXBvc2l0b3J5OiAnT1NY
Jywgb3JkZXI6IDE2MDQwMzIxMjYsIHJldmlzaW9uOiAnMTZFMzIxeid9KTsKLSAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgYXdhaXQgd2FpdEZvckludm9jYXRpb25Qcm9taXNlOworICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMSk7
CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25z
WzBdLmNvbW1hbmQsIFsnbGlzdCcsICdidWlsZDEnXSk7CisKKyAgICAgICAgICAgIGNvbnN0IG91
dHB1dE9iamVjdCA9IHthbGxSZXZpc2lvbnM6IFsiMTZEMzIxIiwgIjE2RTMyMXoiLCAiMTZGMzIx
Il0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczogeyIxNkQzMjEiOiAiUGFuaWMifX07
CisgICAgICAgICAgICBhd2FpdCBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5yZXNvbHZl
KEpTT04uc3RyaW5naWZ5KG91dHB1dE9iamVjdCkpOworICAgICAgICAgICAgY29uc3QgYnVpbGRJ
bmZvID0gYXdhaXQgZmV0Y2hDb21taXRzUHJvbWlzZTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVw
RXF1YWwob3V0cHV0T2JqZWN0LCBidWlsZEluZm8pOworICAgICAgICB9KTsKKyAgICB9KTsKKwor
CisgICAgZGVzY3JpYmUoJ09TQnVpbGRlckZldGNoZXIuX2NvbW1pdHNXaXRoaW5SYW5nZScsICgp
ID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBvbmx5IHJldHVybiBjb21taXRzIHdob3NlIG9yZGVy
cyBhcmUgaGlnaGVyIHRoYW4gc3BlY2lmaWVkIG9yZGVyJywgYXN5bmMgKCkgPT4geworICAgICAg
ICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CisgICAgICAgICAgICBjb25zdCBm
ZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKHt9LCBudWxsLCBudWxsLCBNb2NrU3VicHJvY2Vz
cywgbG9nZ2VyKTsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBmZXRjaGVyLl9jb21taXRz
V2l0aGluUmFuZ2UoWyIxNkQzMjEiLCAiMTZFMzIxeiIsICIxNkYzMjEiXSwgIk9TWCIsIDE2MDQw
MDAwMDAsIDE2MDYwMDAwMDApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVu
Z3RoLCAyKTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzdWx0c1swXSwge3JlcG9z
aXRvcnk6ICdPU1gnLCBvcmRlcjogMTYwNDAzMjEyNiwgcmV2aXNpb246ICcxNkUzMjF6J30pOwor
ICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzFdLCB7cmVwb3NpdG9yeTogJ09T
WCcsIG9yZGVyOiAxNjA1MDMyMTAwLCByZXZpc2lvbjogJzE2RjMyMSd9KTsKKworICAgICAgICB9
KTsKKworICAgICAgICBpdCgnc2hvdWxkIG9ubHkgcmV0dXJuIGNvbW1pdHMgd2hvc2Ugb3JkZXJz
IGFyZSBoaWdoZXIgdGhhbiBtaW5PcmRlciBhbmQgbG93ZXIgdGhhbiB0aGUgbWF4T3JkZXInLCBh
c3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsK
KyAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoe30sIG51bGws
IG51bGwsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOworICAgICAgICAgICAgY29uc3QgcmVzdWx0
cyA9IGZldGNoZXIuX2NvbW1pdHNXaXRoaW5SYW5nZShbIjE2RDMyMSIsICIxNkUzMjF6IiwgIjE2
RjMyMSJdLCAiT1NYIiwgMTYwNDAwMDAwMCwgMTYwNTAwMDAwMCk7CisgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwocmVzdWx0cy5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVh
bChyZXN1bHRzWzBdLCB7cmVwb3NpdG9yeTogJ09TWCcsIG9yZGVyOiAxNjA0MDMyMTI2LCByZXZp
c2lvbjogJzE2RTMyMXonfSk7CiAgICAgICAgIH0pOwogICAgIH0pOwogCkBAIC0yMzksOSArMjU3
LDkgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSkKLSAgICB9KQorICAgIH0pOwog
Ci0gICAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzJywg
KCkgPT4geworICAgIGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0
ZUJ1aWxkcycsICgpID0+IHsKICAgICAgICAgY29uc3QgaW52b2NhdGlvbnMgPSBNb2NrU3VicHJv
Y2Vzcy5pbnZvY2F0aW9uczsKIAogICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKQEAg
LTI1MiwxMSArMjcwLDEyIEBAIGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkg
ewogICAgICAgICAgICAgVGVzdFNlcnZlci5kYXRhYmFzZSgpLmRpc2Nvbm5lY3QoKTsKICAgICAg
ICAgfSk7CiAKLSAgICAgICAgaXQoJ3Nob3VsZCByZXBvcnQgYWxsIGJ1aWxkIGNvbW1pdHMgd2l0
aCBvd25lZC1jb21taXRzJywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxkIGJlIGJhY2t3YXJk
IGNvbXBhdGlibGUgYW5kIHJlcG9ydCBhbGwgYnVpbGQgY29tbWl0cyB3aXRoIG93bmVkLWNvbW1p
dHMnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsK
ICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoY29uZmlnLCBU
ZXN0U2VydmVyLnJlbW90ZUFQSSgpLCBzbGF2ZUF1dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIp
OwogICAgICAgICAgICAgY29uc3QgZGIgPSBUZXN0U2VydmVyLmRhdGFiYXNlKCk7Ci0gICAgICAg
ICAgICBsZXQgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gbnVsbDsKKworICAgICAgICAgICAgbGV0
IGZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzUHJvbWlzZSA9IG51bGw7CiAgICAgICAgICAgICBs
ZXQgZmV0Y2hBdmFpbGFibGVCdWlsZHNQcm9taXNlID0gbnVsbDsKIAogICAgICAgICAgICAgcmV0
dXJuIGFkZFNsYXZlRm9yUmVwb3J0KGVtcHR5UmVwb3J0KS50aGVuKCgpID0+IHsKQEAgLTMwNywx
MCArMzI2LDkgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xp
c3QnLCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RTM0J10pOwog
ICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoYW5v
dGhlcm93bmVkQ29tbWl0V2l0aFdlYktpdEFuZEphdmFTY3JpcHRDb3JlKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZldGNoQXZhaWxhYmxlQnVpbGRzUHJvbWlzZTsKLSAgICAgICAgICAgIH0p
LnRoZW4oKHJlc3VsdHMpID0+IHsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0
cy5sZW5ndGgsIDMpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAg
ICAgTW9ja1N1YnByb2Nlc3MucmVzZXQoKTsKLSAgICAgICAgICAgICAgICBmZXRjaEFuZFJlcG9y
dFByb21pc2UgPSBmZXRjaGVyLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzKCk7CisgICAgICAgICAg
ICAgICAgZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHNQcm9taXNlID0gZmV0Y2hlci5mZXRjaFJl
cG9ydEFuZFVwZGF0ZUJ1aWxkcygpOwogICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJv
Y2Vzcy53YWl0Rm9ySW52b2NhdGlvbigpOwogICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CkBAIC0z
MzcsOSArMzU1LDE0MSBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFu
b3RoZXJvd25lZENvbW1pdFdpdGhXZWJLaXRBbmRKYXZhU2NyaXB0Q29yZSkpOwogICAgICAgICAg
ICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0Jywg
J293bmVkQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkUzNCddKTsKIAotICAg
ICAgICAgICAgICAgIHJldHVybiBmZXRjaEFuZFJlcG9ydFByb21pc2U7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzUHJvbWlzZTsKKyAgICAgICAgICAg
IH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbCisg
ICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ3JlcG9zaXRvcmllcycsIHsnbmFtZSc6
ICdXZWJLaXQnfSksCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ3JlcG9zaXRv
cmllcycsIHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29yZSd9KSwKKyAgICAgICAgICAgICAgICAgICAg
ZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZENjknfSksCisg
ICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7J3JldmlzaW9uJzog
J1NpZXJyYTE2RTMzaCd9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuc2VsZWN0Um93cygnY29t
bWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZFMzQnfSldKTsKKyAgICAgICAgICAgIH0pLnRo
ZW4oKHJlc3VsdHMpID0+IHsKKyAgICAgICAgICAgICAgICBjb25zdCB3ZWJraXRSZXBvc2l0b3J5
ID0gcmVzdWx0c1swXTsKKyAgICAgICAgICAgICAgICBjb25zdCBqc2NSZXBvc2l0b3J5ID0gcmVz
dWx0c1sxXTsKKyAgICAgICAgICAgICAgICBjb25zdCBvc3hDb21taXQxNkQ2OSA9IHJlc3VsdHNb
Ml07CisgICAgICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0MTZFMzNoID0gcmVzdWx0c1szXTsK
KyAgICAgICAgICAgICAgICBjb25zdCBvc3hDb21taXQxNkUzNCA9IHJlc3VsdHNbNF07CisKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwod2Via2l0UmVwb3NpdG9yeS5sZW5ndGgsIDEpOwor
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbCh3ZWJraXRSZXBvc2l0b3J5WzBdWydvd25lcidd
LCAxMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGpzY1JlcG9zaXRvcnkubGVuZ3Ro
LCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoanNjUmVwb3NpdG9yeVswXVsnb3du
ZXInXSwgMTApOworCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY5
Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY5
WzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4
Q29tbWl0MTZENjlbMF1bJ29yZGVyJ10sIDE2MDMwMDY5MDApOworCisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMzaC5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAg
IGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2hbMF1bJ3JlcG9zaXRvcnknXSwgMTApOworICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2hbMF1bJ29yZGVyJ10sIDE2
MDQwMDMzMDgpOworCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTM0
Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTM0
WzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4
Q29tbWl0MTZFMzRbMF1bJ29yZGVyJ10sIDE2MDQwMDM0MDApOworCisgICAgICAgICAgICAgICAg
cmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9s
YXN0LXJlcG9ydGVkP2Zyb209MTYwMzAwMDAwMCZ0bz0xNjAzMDk5OTAwJyk7CiAgICAgICAgICAg
ICB9KS50aGVuKChyZXN1bHQpID0+IHsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVz
dWx0WydzdGF0dXMnXSwgJ09LJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3Vs
dFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
c3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZENjknKTsKKyAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMw
MDY5MDApOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCku
Z2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwNDAwMDAwMCZ0
bz0xNjA0MDk5OTAwJyk7CisgICAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAxKTsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ3JldmlzaW9u
J10sICdTaWVycmExNkUzNCcpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRb
J2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwNDAwMzQwMCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZXBvcnQgYWxsIGJ1aWxkIGNvbW1pdHMg
d2l0aCBvd25lZC1jb21taXRzJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0g
bmV3IE1vY2tMb2dnZXI7CisgICAgICAgICAgICBjb25zdCBmZXRjaGVyID0gbmV3IE9TQnVpbGRG
ZXRjaGVyKGNvbmZpZywgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBNb2NrU3Vi
cHJvY2VzcywgbG9nZ2VyKTsKKyAgICAgICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZlci5kYXRh
YmFzZSgpOworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUQgPSB7YWxsUmV2aXNp
b25zOiBbIlNpZXJyYTE2RDY4IiwgIlNpZXJyYTE2RDY5Il0sIGNvbW1pdHNXaXRoVGVzdGFiaWxp
dHlXYXJuaW5nczoge319OworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUUgPSB7
YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RTMyIiwgIlNpZXJyYTE2RTMzIiwgIlNpZXJyYTE2RTMz
aCIsICJTaWVycmExNkUzNCJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHt9fTsK
KworICAgICAgICAgICAgbGV0IGZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzUHJvbWlzZSA9IG51
bGw7CisgICAgICAgICAgICBsZXQgZmV0Y2hBdmFpbGFibGVCdWlsZHNQcm9taXNlID0gbnVsbDsK
KworICAgICAgICAgICAgcmV0dXJuIGFkZFNsYXZlRm9yUmVwb3J0KGVtcHR5UmVwb3J0KS50aGVu
KCgpID0+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoWworICAgICAgICAg
ICAgICAgICAgICBkYi5pbnNlcnQoJ3JlcG9zaXRvcmllcycsIHsnaWQnOiAxMCwgJ25hbWUnOiAn
T1NYJ30pLAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9z
aXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RDY3JywgJ29yZGVyJzogMTYwMzAwNjcw
MCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2Nv
bW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RDY4JywgJ29y
ZGVyJzogMTYwMzAwNjgwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgICAg
ICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1Np
ZXJyYTE2RDY5JywgJ29yZGVyJzogMTYwMzAwNjkwMCwgJ3JlcG9ydGVkJzogZmFsc2V9KSwKKyAg
ICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAs
ICdyZXZpc2lvbic6ICdTaWVycmExNkUzMicsICdvcmRlcic6IDE2MDQwMDMyMDAsICdyZXBvcnRl
ZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydy
ZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkUzMycsICdvcmRlcic6IDE2MDQw
MDMzMDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0
KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkUzM2cn
LCAnb3JkZXInOiAxNjA0MDAzMzA3LCAncmVwb3J0ZWQnOiB0cnVlfSldKTsKKyAgICAgICAgICAg
IH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBUZXN0U2VydmVyLnJlbW90
ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDMw
MDAwMDAmdG89MTYwMzA5OTkwMCcpOworICAgICAgICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwg
MSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydy
ZXZpc2lvbiddLCAnU2llcnJhMTZENjgnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMwMDY4MDApOworICAgICAgICAgICAg
ICAgIHJldHVybiBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9P
U1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDQwMDAwMDAmdG89MTYwNDA5OTkwMCcpOworICAgICAg
ICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZFMzNnJyk7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlcidd
LCAxNjA0MDAzMzA3KTsKKyAgICAgICAgICAgICAgICBjb25zdCB3YWl0Rm9ySW52b2NhdGlvblBy
b21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAg
ICAgIGZldGNoQXZhaWxhYmxlQnVpbGRzUHJvbWlzZSA9IGZldGNoZXIuX2ZldGNoQXZhaWxhYmxl
QnVpbGRzKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlz
ZTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVw
RXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVp
bGRzJ10pOworICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJp
bmdpZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1
YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhl
bigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0
aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5j
b21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJy
YTE2RDY5J10pOworICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5z
dHJpbmdpZnkob3duZWRDb21taXRXaXRoV2ViS2l0KSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9jYXRpb24oKTsKKyAgICAgICAgICAg
IH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9u
cy5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlv
bnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOworICAgICAg
ICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0Zv
clNpZXJyYUUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRB
bmRXYWl0Rm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3Qn
LCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RTMzaCddKTsKKyAg
ICAgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3Ro
ZXJvd25lZENvbW1pdFdpdGhXZWJLaXQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1
YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhl
bigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0
aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5j
b21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJy
YTE2RTM0J10pOworICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5z
dHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0V2l0aFdlYktpdEFuZEphdmFTY3JpcHRDb3JlKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoQXZhaWxhYmxlQnVpbGRzUHJvbWlzZTsKKyAg
ICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNz
LnJlc2V0KCk7CisgICAgICAgICAgICAgICAgZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHNQcm9t
aXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcygpOworICAgICAgICAgICAg
ICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigpOworICAgICAgICAg
ICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRp
b25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0
aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7CisgICAg
ICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRz
Rm9yU2llcnJhRCkpOworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNl
dEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlz
dCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJhMTZENjknXSk7Cisg
ICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShvd25l
ZENvbW1pdFdpdGhXZWJLaXQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nl
c3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9
PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5k
LCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkV4eCBidWlsZHMnXSk7CisgICAgICAgICAgICAgICAgaW52
b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZv
Y2F0aW9uKCk7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3Nl
cnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1p
dCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJhMTZFMzNoJ10pOworICAgICAgICAgICAgICAg
IGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0
V2l0aFdlYktpdCkpOworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNl
dEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAg
ICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJv
d25lZENvbW1pdFdpdGhXZWJLaXRBbmRKYXZhU2NyaXB0Q29yZSkpOworICAgICAgICAgICAgICAg
IGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ293bmVk
Q29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkUzNCddKTsKKworICAgICAgICAg
ICAgICAgIHJldHVybiBmZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkc1Byb21pc2U7CisgICAgICAg
ICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwo
WwogICAgICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25h
bWUnOiAnV2ViS2l0J30pLAogICAgICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBv
c2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2YVNjcmlwdENvcmUnfSksCkBAIC0zODQsMTEgKzUzNCwx
MTkgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfSk7CiAKKyAgICAgICAgaXQoJ3Nob3VsZCB1cGRhdGUgdGVzdGFiaWxp
dHkgd2FybmluZyBmb3IgY29tbWl0cycsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0
IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOworICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5l
dyBPU0J1aWxkRmV0Y2hlcihjb25maWcsIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCksIHNsYXZlQXV0
aCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7CisgICAgICAgICAgICBjb25zdCBkYiA9IFRlc3RT
ZXJ2ZXIuZGF0YWJhc2UoKTsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdHNGb3JTaWVycmFEID0g
e2FsbFJldmlzaW9uczogWyJTaWVycmExNkQ2OCIsICJTaWVycmExNkQ2OSJdLCBjb21taXRzV2l0
aFRlc3RhYmlsaXR5V2FybmluZ3M6IHsiU2llcnJhMTZENjgiOiAiUGFuaWMiLCAiU2llcnJhMTZE
NjkiOiAiU3BpbiBDUFUifX07CisgICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJhRSA9
IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZFMzIiLCAiU2llcnJhMTZFMzMiLCAiU2llcnJhMTZF
MzNoIiwgIlNpZXJyYTE2RTM0Il0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczogeyJT
aWVycmExNkUzMSI6ICJXZWJLaXQgY3Jhc2hlcyJ9fTsKKworICAgICAgICAgICAgYXdhaXQgYWRk
U2xhdmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQpOworCisgICAgICAgICAgICBhd2FpdCBQcm9taXNl
LmFsbChbCisgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdyZXBvc2l0b3JpZXMnLCB7J2lkJzog
MTAsICduYW1lJzogJ09TWCd9KSwKKyAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMn
LCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RDY3JywgJ29yZGVyJzog
MTYwMzAwNjcwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgIGRiLmluc2Vy
dCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZENjgn
LCAnb3JkZXInOiAxNjAzMDA2ODAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAg
ICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdT
aWVycmExNkQ2OScsICdvcmRlcic6IDE2MDMwMDY5MDAsICdyZXBvcnRlZCc6IGZhbHNlfSksCisg
ICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdy
ZXZpc2lvbic6ICdTaWVycmExNkUzMScsICdvcmRlcic6IDE2MDQwMDMxMDAsICdyZXBvcnRlZCc6
IHRydWV9KSwKKyAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRv
cnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RTMyJywgJ29yZGVyJzogMTYwNDAwMzIwMCwg
J3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycs
IHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZFMzMnLCAnb3JkZXInOiAx
NjA0MDAzMzAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAgICAgZGIuaW5zZXJ0
KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkUzM2cn
LCAnb3JkZXInOiAxNjA0MDAzMzA3LCAncmVwb3J0ZWQnOiB0cnVlfSldKTsKKworICAgICAgICAg
ICAgbGV0IHJlc3VsdCA9IGF3YWl0IFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2Fw
aS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwMzAwMDAwMCZ0bz0xNjAzMDk5OTAw
Jyk7CisKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGgs
IDEpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZp
c2lvbiddLCAnU2llcnJhMTZENjgnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRb
J2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwMzAwNjgwMCk7CisgICAgICAgICAgICByZXN1bHQg
PSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gv
bGFzdC1yZXBvcnRlZD9mcm9tPTE2MDQwMDAwMDAmdG89MTYwNDA5OTkwMCcpOworCisgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAxKTsKKyAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJy
YTE2RTMzZycpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBd
WydvcmRlciddLCAxNjA0MDAzMzA3KTsKKworICAgICAgICAgICAgY29uc3QgZmV0Y2hSZXBvcnRB
bmRVcGRhdGVQcm9taXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcygpOwor
ICAgICAgICAgICAgYXdhaXQgTW9ja1N1YnByb2Nlc3Mud2FpdEZvckludm9jYXRpb24oKTsKKwor
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAg
ICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdh
bGwgb3N4IDE2RHh4IGJ1aWxkcyddKTsKKyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29s
dmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsKKyAgICAgICAgICAgIGF3YWl0
IE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9jYXRpb24oKTsKKworICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3Nl
cnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1p
dCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJhMTZENjknXSk7CisgICAgICAgICAgICBpbnZv
Y2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KG93bmVkQ29tbWl0V2l0aFdlYktpdCkp
OworICAgICAgICAgICAgYXdhaXQgTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2Nh
dGlvbigpOworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAx
KTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwg
WydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOworICAgICAgICAgICAgaW52b2NhdGlv
bnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRSkpOworCisgICAg
ICAgICAgICBhd2FpdCBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7
CisKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAg
ICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3Qn
LCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RTMzaCddKTsKKyAg
ICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlcm93
bmVkQ29tbWl0V2l0aFdlYktpdCkpOworICAgICAgICAgICAgYXdhaXQgIE1vY2tTdWJwcm9jZXNz
LnJlc2V0QW5kV2FpdEZvckludm9jYXRpb24oKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChp
bnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2
ZShKU09OLnN0cmluZ2lmeShhbm90aGVyb3duZWRDb21taXRXaXRoV2ViS2l0QW5kSmF2YVNjcmlw
dENvcmUpKTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29t
bWFuZCwgWydsaXN0JywgJ293bmVkQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmEx
NkUzNCddKTsKKworICAgICAgICAgICAgYXdhaXQgZmV0Y2hSZXBvcnRBbmRVcGRhdGVQcm9taXNl
OworCisgICAgICAgICAgICBjb25zdCB3ZWJraXRSZXBvc2l0b3J5ID0gYXdhaXQgZGIuc2VsZWN0
Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ1dlYktpdCd9KTsKKyAgICAgICAgICAgIGNv
bnN0IGpzY1JlcG9zaXRvcnkgPSBhd2FpdCBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7
J25hbWUnOiAnSmF2YVNjcmlwdENvcmUnfSk7CisgICAgICAgICAgICBjb25zdCBvc3hDb21taXQx
NkQ2OCA9IGF3YWl0IGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7J3JldmlzaW9uJzogJ1NpZXJy
YTE2RDY4J30pOworICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0MTZENjkgPSBhd2FpdCBkYi5z
ZWxlY3RSb3dzKCdjb21taXRzJywgeydyZXZpc2lvbic6ICdTaWVycmExNkQ2OSd9KTsKKyAgICAg
ICAgICAgIGNvbnN0IG9zeENvbW1pdDE2RTMxID0gYXdhaXQgZGIuc2VsZWN0Um93cygnY29tbWl0
cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZFMzEnfSk7CisgICAgICAgICAgICBjb25zdCBvc3hD
b21taXQxNkUzM2ggPSBhd2FpdCBkYi5zZWxlY3RSb3dzKCdjb21taXRzJywgeydyZXZpc2lvbic6
ICdTaWVycmExNkUzM2gnfSk7CisgICAgICAgICAgICBjb25zdCBvc3hDb21taXQxNkUzNCA9IGF3
YWl0IGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7J3JldmlzaW9uJzogJ1NpZXJyYTE2RTM0J30p
OworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwod2Via2l0UmVwb3NpdG9yeS5sZW5ndGgsIDEp
OworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHdlYmtpdFJlcG9zaXRvcnlbMF1bJ293bmVyJ10s
IDEwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChqc2NSZXBvc2l0b3J5Lmxlbmd0aCwgMSk7
CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoanNjUmVwb3NpdG9yeVswXVsnb3duZXInXSwgMTAp
OworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZENjgubGVuZ3RoLCAxKTsK
KyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OFswXVsncmVwb3NpdG9yeSdd
LCAxMCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZENjhbMF1bJ29yZGVy
J10sIDE2MDMwMDY4MDApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY4
WzBdWyd0ZXN0YWJpbGl0eV93YXJuaW5nJ10sICJQYW5pYyIpOworCisgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwob3N4Q29tbWl0MTZENjkubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5l
cXVhbChvc3hDb21taXQxNkQ2OVswXVsncmVwb3NpdG9yeSddLCAxMCk7CisgICAgICAgICAgICBh
c3NlcnQuZXF1YWwob3N4Q29tbWl0MTZENjlbMF1bJ29yZGVyJ10sIDE2MDMwMDY5MDApOworICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY5WzBdWyd0ZXN0YWJpbGl0eV93YXJu
aW5nJ10sICJTcGluIENQVSIpOworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0
MTZFMzEubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUz
MVswXVsncmVwb3NpdG9yeSddLCAxMCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29t
bWl0MTZFMzFbMF1bJ29yZGVyJ10sIDE2MDQwMDMxMDApOworICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKG9zeENvbW1pdDE2RTMxWzBdWyd0ZXN0YWJpbGl0eV93YXJuaW5nJ10sICJXZWJLaXQgY3Jh
c2hlcyIpOworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzNoLmxlbmd0
aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzNoWzBdWydyZXBv
c2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2hb
MF1bJ29yZGVyJ10sIDE2MDQwMDMzMDgpOworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4
Q29tbWl0MTZFMzQubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21t
aXQxNkUzNFswXVsncmVwb3NpdG9yeSddLCAxMCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
b3N4Q29tbWl0MTZFMzRbMF1bJ29yZGVyJ10sIDE2MDQwMDM0MDApOworCisgICAgICAgICAgICBy
ZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0
cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDMwMDAwMDAmdG89MTYwMzA5OTkwMCcpOworICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ3JldmlzaW9uJ10sICdT
aWVycmExNkQ2OScpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cydd
WzBdWydvcmRlciddLCAxNjAzMDA2OTAwKTsKKworICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQg
VGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvT1NYL2xhc3QtcmVw
b3J0ZWQ/ZnJvbT0xNjA0MDAwMDAwJnRvPTE2MDQwOTk5MDAnKTsKKyAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZFMzQnKTsK
KyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXInXSwg
MTYwNDAwMzQwMCk7CisgICAgICAgIH0pOworCiAgICAgICAgIGl0KCdzaG91bGQgcmVwb3J0IGNv
bW1pdHMgd2l0aG91dCBvd25lZC1jb21taXRzIGlmICJvd25lZENvbW1pdENvbW1hbmQiIGlzIG5v
dCBzcGVjaWZpZWQgaW4gY29uZmlnJywgYXN5bmMgKCkgPT4gewogCiAgICAgICAgICAgICBjb25z
dCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBu
ZXcgT1NCdWlsZEZldGNoZXIoY29uZmlnV2l0aG91dE93bmVkQ29tbWl0Q29tbWFuZCwgVGVzdFNl
cnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAg
ICAgICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZlci5kYXRhYmFzZSgpOworICAgICAgICAgICAg
Y29uc3QgcmVzdWx0c0ZvclNpZXJyYUQgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RDY4Iiwg
IlNpZXJyYTE2RDY5Il0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczoge319OworICAg
ICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUUgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJy
YTE2RTMyIiwgIlNpZXJyYTE2RTMzIiwgIlNpZXJyYTE2RTMzaCIsICJTaWVycmExNkUzNCJdLCBj
b21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHt9fTsKIAogICAgICAgICAgICAgYXdhaXQg
YWRkU2xhdmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQpOwogICAgICAgICAgICAgYXdhaXQgUHJvbWlz
ZS5hbGwoWwpAQCAtNDExLDE5ICs2NjksMTggQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywg
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11b
MF1bJ29yZGVyJ10sIDE2MDQwMDMzMDcpOwogCiAgICAgICAgICAgICBjb25zdCB3YWl0Rm9ySW52
b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigpOwotICAg
ICAgICAgICAgY29uc3QgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gZmV0Y2hlci5mZXRjaEFuZFJl
cG9ydE5ld0J1aWxkcygpOworICAgICAgICAgICAgY29uc3QgZmV0Y2hSZXBvcnRBbmRVcGRhdGVQ
cm9taXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcygpOwogICAgICAgICAg
ICAgYXdhaXQgd2FpdEZvckludm9jYXRpb25Qcm9taXNlOwogICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFs
KGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdhbGwgb3N4IDE2RHh4IGJ1aWxkcydd
KTsKLSAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2OFxu
U2llcnJhMTZENjknKTsKKyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5z
dHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsKIAogICAgICAgICAgICAgYXdhaXQgTW9ja1N1
YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOwogICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICBhc3NlcnQuZGVlcEVx
dWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdhbGwgb3N4IDE2RXh4IGJ1aWxk
cyddKTsKLSAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkUz
MlxuU2llcnJhMTZFMzNcblNpZXJyYTE2RTMzaFxuU2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAg
IGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUUp
KTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hBbmRSZXBvcnRQcm9taXNlOwot
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVzJ10sICdPSycpOworICAgICAg
ICAgICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hSZXBvcnRBbmRVcGRhdGVQcm9taXNlOwogICAgICAg
ICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICAgICAgICAg
ICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0J30pLAogICAg
ICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdKYXZh
U2NyaXB0Q29yZSd9KSwKQEAgLTQ2Nyw2ICs3MjQsOCBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNo
ZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9n
Z2VyOwogICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihjb25m
aWdXaXRob3V0T3duZWRDb21taXRDb21tYW5kLCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLCBzbGF2
ZUF1dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwogICAgICAgICAgICAgY29uc3QgZGIgPSBU
ZXN0U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJh
RCA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZENjgiLCAiU2llcnJhMTZENjkiLCAiU2llcnJh
MTZEMTAwMDAiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzOiB7fX07CisgICAgICAg
ICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJhRSA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZF
MzIiLCAiU2llcnJhMTZFMzMiLCAiU2llcnJhMTZFMzNoIiwgIlNpZXJyYTE2RTM0IiwgIlNpZXJy
YTE2RTEwMDAwIl0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczoge319OwogCiAgICAg
ICAgICAgICBhd2FpdCBhZGRTbGF2ZUZvclJlcG9ydChlbXB0eVJlcG9ydCk7CiAgICAgICAgICAg
ICBhd2FpdCBQcm9taXNlLmFsbChbCkBAIC00ODgsMjAgKzc0NywxOSBAQCBkZXNjcmliZSgnT1NC
dWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1
bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RTMzZycpOwogICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjA0MDAzMzA3
KTsKICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tTdWJw
cm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7Ci0gICAgICAgICAgICBjb25zdCBmZXRjaEFuZFJl
cG9ydFByb21pc2UgPSBmZXRjaGVyLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzKCk7CisgICAgICAg
ICAgICBjb25zdCBmZXRjaFJlcG9ydEFuZFVwZGF0ZVByb21pc2UgPSBmZXRjaGVyLmZldGNoUmVw
b3J0QW5kVXBkYXRlQnVpbGRzKCk7CiAKICAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JJbnZvY2F0
aW9uUHJvbWlzZTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgs
IDEpOwogICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5k
LCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7Ci0gICAgICAgICAgICBpbnZvY2F0
aW9uc1swXS5yZXNvbHZlKCdcblxuU2llcnJhMTZENjhcblNpZXJyYTE2RDY5XG5TaWVycmExNkQx
MDAwMCcpOworICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lm
eShyZXN1bHRzRm9yU2llcnJhRCkpOwogCiAgICAgICAgICAgICBhd2FpdCBNb2NrU3VicHJvY2Vz
cy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
aW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52
b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOwot
ICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnXG5cblNpZXJyYTE2RTMyXG5TaWVy
cmExNkUzM1xuU2llcnJhMTZFMzNoXG5TaWVycmExNkUzNFxuU2llcnJhMTZFMTAwMDAnKTsKKyAg
ICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0Zv
clNpZXJyYUUpKTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hBbmRSZXBvcnRQ
cm9taXNlOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVzJ10sICdPSycp
OworICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hSZXBvcnRBbmRVcGRhdGVQcm9taXNl
OwogICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAg
ICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0
J30pLAogICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ3JlcG9zaXRvcmllcycsIHsnbmFt
ZSc6ICdKYXZhU2NyaXB0Q29yZSd9KSwKQEAgLTU0NSw2ICs4MDMsNyBAQCBkZXNjcmliZSgnT1NC
dWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5l
dyBNb2NrTG9nZ2VyOwogICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0
Y2hlcihjb25maWdUcmFja2luZ09uZU9TLCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLCBzbGF2ZUF1
dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwogICAgICAgICAgICAgY29uc3QgZGIgPSBUZXN0
U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJhRCA9
IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZENjgiLCAiU2llcnJhMTZENjkiLCAiU2llcnJhMTZE
MTAwIiwgIlNpZXJyYTE2RDEwMGEiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzOiB7
fX07CiAKICAgICAgICAgICAgIGF3YWl0IGFkZFNsYXZlRm9yUmVwb3J0KGVtcHR5UmVwb3J0KTsK
ICAgICAgICAgICAgIGF3YWl0IGRiLmluc2VydCgncmVwb3NpdG9yaWVzJywgeydpZCc6IDEwLCAn
bmFtZSc6ICdPU1gnfSk7CkBAIC01NTYsMTQgKzgxNSwxMyBAQCBkZXNjcmliZSgnT1NCdWlsZEZl
dGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2Nv
bW1pdHMnXVswXVsnb3JkZXInXSwgMTYwMzAxMDAwMCk7CiAKICAgICAgICAgICAgIGNvbnN0IHdh
aXRGb3JJbnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9u
KCk7Ci0gICAgICAgICAgICBjb25zdCBmZXRjaEFuZFJlcG9ydFByb21pc2UgPSBmZXRjaGVyLmZl
dGNoQW5kUmVwb3J0TmV3QnVpbGRzKCk7CisgICAgICAgICAgICBjb25zdCBmZXRjaEFuZFJlcG9y
dFByb21pc2UgPSBmZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzKCk7CiAgICAgICAg
ICAgICBhd2FpdCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2U7CiAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1
YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRz
J10pOwotICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnXG5cblNpZXJyYTE2RDY4
XG5TaWVycmExNkQ2OVxuU2llcnJhMTZEMTAwXG5TaWVycmExNkQxMDBhXG4nKTsKKyAgICAgICAg
ICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJy
YUQpKTsKIAogICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hBbmRSZXBvcnRQcm9taXNl
OwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVzJ10sICdPSycpOwogICAg
ICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICAgICAg
ICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0J30pLAog
ICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdK
YXZhU2NyaXB0Q29yZSd9KSwKQEAgLTU5NCw2ICs4NTIsNyBAQCBkZXNjcmliZSgnT1NCdWlsZEZl
dGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2Nr
TG9nZ2VyOwogICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihj
b25maWdUcmFja2luZ09uZU9TLCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLCBzbGF2ZUF1dGgsIE1v
Y2tTdWJwcm9jZXNzLCBsb2dnZXIpOwogICAgICAgICAgICAgY29uc3QgZGIgPSBUZXN0U2VydmVy
LmRhdGFiYXNlKCk7CisgICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJhRCA9IHthbGxS
ZXZpc2lvbnM6IFsiU2llcnJhMTZENjgiLCAiU2llcnJhMTZENjkiLCAiU2llcnJhMTZEMTAwIiwg
IlNpZXJyYTE2RDEwMSJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHt9fTsKIAog
ICAgICAgICAgICAgYXdhaXQgYWRkU2xhdmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQpOwogICAgICAg
ICAgICAgYXdhaXQgZGIuaW5zZXJ0KCdyZXBvc2l0b3JpZXMnLCB7J2lkJzogMTAsICduYW1lJzog
J09TWCd9KTsKQEAgLTYwMiwxNCArODYxLDEzIEBAIGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlcics
IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cydd
Lmxlbmd0aCwgMCk7CiAKICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlz
ZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7Ci0gICAgICAgICAgICBjb25z
dCBmZXRjaEFuZFJlcG9ydFByb21pc2UgPSBmZXRjaGVyLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRz
KCk7CisgICAgICAgICAgICBjb25zdCBmZXRjaFJlcG9ydEFuZFVwZGF0ZVByb21pc2UgPSBmZXRj
aGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzKCk7CiAgICAgICAgICAgICBhd2FpdCB3YWl0
Rm9ySW52b2NhdGlvblByb21pc2U7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlv
bnMubGVuZ3RoLCAxKTsKICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNb
MF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOwotICAgICAgICAg
ICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnXG5cblNpZXJyYTE2RDY4XG5TaWVycmExNkQ2OVxu
U2llcnJhMTZEMTAwXG5TaWVycmExNkQxMDFcbicpOworICAgICAgICAgICAgaW52b2NhdGlvbnNb
MF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkpOwogCi0gICAgICAg
ICAgICByZXN1bHQgPSBhd2FpdCBmZXRjaEFuZFJlcG9ydFByb21pc2U7Ci0gICAgICAgICAgICBh
c3NlcnQuZXF1YWwocmVzdWx0WydzdGF0dXMnXSwgJ09LJyk7CisgICAgICAgICAgICByZXN1bHQg
PSBhd2FpdCBmZXRjaFJlcG9ydEFuZFVwZGF0ZVByb21pc2U7CiAgICAgICAgICAgICBjb25zdCBy
ZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJv
d3MoJ3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdXZWJLaXQnfSksCiAgICAgICAgICAgICAgICAg
ZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ0phdmFTY3JpcHRDb3JlJ30p
LApAQCAtNjQ2LDYgKzkwNCw4IEBAIGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CiAgICAgICAg
ICAgICBjb25zdCBmZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKGNvbmZpZywgVGVzdFNlcnZl
ci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAg
ICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZlci5kYXRhYmFzZSgpOworICAgICAgICAgICAgY29u
c3QgcmVzdWx0c0ZvclNpZXJyYUQgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RDY4IiwgIlNp
ZXJyYTE2RDY5Il0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczoge319OworICAgICAg
ICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUUgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2
RTMyIiwgIlNpZXJyYTE2RTMzIiwgIlNpZXJyYTE2RTMzaCIsICJTaWVycmExNkUzNCJdLCBjb21t
aXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHt9fTsKICAgICAgICAgICAgIGxldCBmZXRjaEFu
ZFJlcG9ydFByb21pc2UgPSBudWxsOwogCiAgICAgICAgICAgICByZXR1cm4gYWRkU2xhdmVGb3JS
ZXBvcnQoZW1wdHlSZXBvcnQpLnRoZW4oKCkgPT4gewpAQCAtNjcxLDEyICs5MzEsMTIgQEAgZGVz
Y3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjA0MDAzMzA3KTsKIAog
ICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tTdWJw
cm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgZmV0Y2hBbmRSZXBv
cnRQcm9taXNlID0gZmV0Y2hlci5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcygpOworICAgICAgICAg
ICAgICAgIGZldGNoQW5kUmVwb3J0UHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRh
dGVCdWlsZHMoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gd2FpdEZvckludm9jYXRpb25Qcm9t
aXNlOwogICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmRl
ZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBi
dWlsZHMnXSk7Ci0gICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnXG5cblNp
ZXJyYTE2RDY4XG5TaWVycmExNkQ2OVxuJyk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNb
MF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7
CiAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKQEAgLTY4Niw3ICs5NDYsNyBAQCBkZXNjcmliZSgn
T1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4g
ewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwog
ICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwg
WydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOwotICAgICAgICAgICAgICAgIGludm9j
YXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkUzMlxuU2llcnJhMTZFMzNcblNpZXJyYTE2
RTMzaFxuU2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNv
bHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFFKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9jYXRpb24oKTsKICAgICAg
ICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwo
aW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ293bmVkQ29tbWl0JywgJ2ZvcicsICdy
ZXZpc2lvbicsICdTaWVycmExNkUzM2gnXSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvdG9vbHMvanMvb3MtYnVpbGQtZmV0Y2hlci5qcyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy90b29scy9qcy9vcy1idWlsZC1mZXRjaGVyLmpzCmluZGV4IDA1MWMyOWZjYjdiODYz
MzZiZjQxNzJkNTVmN2E0OTg2ZDE3MTRmZTEuLmZiNTc4OTJhZjUwNjA4MGZjMmU0MDNhMDczN2I5
ZDI2OTdmODZlMjAgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9q
cy9vcy1idWlsZC1mZXRjaGVyLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29s
cy9qcy9vcy1idWlsZC1mZXRjaGVyLmpzCkBAIC0yMiw1OSArMjIsNTYgQEAgY2xhc3MgT1NCdWls
ZEZldGNoZXIgewogICAgICAgICB0aGlzLl9tYXhTdWJtaXRDb3VudCA9IG9zQ29uZmlnWydtYXhT
dWJtaXRDb3VudCddIHx8IDIwOwogICAgIH0KIAotICAgIHN0YXRpYyBmZXRjaEFuZFJlcG9ydEFs
bEluT3JkZXIoZmV0Y2hlckxpc3QpCisgICAgc3RhdGljIGFzeW5jIGZldGNoUmVwb3J0QW5kVXBk
YXRlQ29tbWl0cyhmZXRjaGVyTGlzdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtYXBJblNlcmlh
bFByb21pc2VDaGFpbihmZXRjaGVyTGlzdCwgKGZldGNoZXIpID0+IGZldGNoZXIuZmV0Y2hBbmRS
ZXBvcnROZXdCdWlsZHMoKSk7CisgICAgICAgIGZvciAoY29uc3QgZmV0Y2hlciBvZiBmZXRjaGVy
TGlzdCkKKyAgICAgICAgICAgIGF3YWl0IGZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWls
ZHMoKTsKICAgICB9CiAKLSAgICBmZXRjaEFuZFJlcG9ydE5ld0J1aWxkcygpCisgICAgYXN5bmMg
ZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X2ZldGNoQXZhaWxhYmxlQnVpbGRzKCkudGhlbigocmVzdWx0cykgPT4gewotICAgICAgICAgICAg
dGhpcy5fbG9nZ2VyLmxvZyhgU3VibWl0dGluZyAke3Jlc3VsdHMubGVuZ3RofSBidWlsZHMgZm9y
ICR7dGhpcy5fb3NDb25maWdbJ25hbWUnXX1gKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHRzLmxl
bmd0aCA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRDb21taXRzKHJl
c3VsdHMpOwotCi0gICAgICAgICAgICBjb25zdCBzcGxpdHRlZFJlc3VsdHMgPSBbXTsKLSAgICAg
ICAgICAgIGZvciAobGV0IHN0YXJ0SW5kZXggPSAwOyBzdGFydEluZGV4IDwgcmVzdWx0cy5sZW5n
dGg7IHN0YXJ0SW5kZXggKz0gdGhpcy5fbWF4U3VibWl0Q291bnQpCi0gICAgICAgICAgICAgICAg
c3BsaXR0ZWRSZXN1bHRzLnB1c2gocmVzdWx0cy5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4
ICsgdGhpcy5fbWF4U3VibWl0Q291bnQpKTsKLQotICAgICAgICAgICAgcmV0dXJuIG1hcEluU2Vy
aWFsUHJvbWlzZUNoYWluKHNwbGl0dGVkUmVzdWx0cywgdGhpcy5fc3VibWl0Q29tbWl0cy5iaW5k
KHRoaXMpKS50aGVuKChyZXNwb25zZXMpID0+IHsKLSAgICAgICAgICAgICAgICBhc3NlcnQocmVz
cG9uc2VzLmV2ZXJ5KChyZXNwb25zZSkgPT4gcmVzcG9uc2VbJ3N0YXR1cyddID09ICdPSycpKTsK
LSAgICAgICAgICAgICAgICBhc3NlcnQocmVzcG9uc2VzLmxlbmd0aCA+IDApOwotICAgICAgICAg
ICAgICAgIHJldHVybiByZXNwb25zZXNbMF07Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7
CisgICAgICAgIGNvbnN0IHtuZXdDb21taXRzVG9SZXBvcnQsIGNvbW1pdHNUb1VwZGF0ZX0gPSBh
d2FpdCB0aGlzLl9mZXRjaEF2YWlsYWJsZUJ1aWxkcygpOworCisgICAgICAgIHRoaXMuX2xvZ2dl
ci5sb2coYFN1Ym1pdHRpbmcgJHtuZXdDb21taXRzVG9SZXBvcnQubGVuZ3RofSBidWlsZHMgZm9y
ICR7dGhpcy5fb3NDb25maWdbJ25hbWUnXX1gKTsKKyAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0
VG9FbmRQb2ludCgnL2FwaS9yZXBvcnQtY29tbWl0cy8nLCBuZXdDb21taXRzVG9SZXBvcnQpOwor
CisgICAgICAgIHRoaXMuX2xvZ2dlci5sb2coYFVwZGF0aW5nICR7Y29tbWl0c1RvVXBkYXRlLmxl
bmd0aH0gYnVpbGRzIGZvciAke3RoaXMuX29zQ29uZmlnWyduYW1lJ119YCk7CisgICAgICAgIGF3
YWl0IHRoaXMuX3JlcG9ydFRvRW5kUG9pbnQoJy9hcGkvdXBkYXRlLWNvbW1pdHMvJywgY29tbWl0
c1RvVXBkYXRlKTsKICAgICB9CiAKLSAgICBfZmV0Y2hBdmFpbGFibGVCdWlsZHMoKQorICAgIGFz
eW5jIF9mZXRjaEF2YWlsYWJsZUJ1aWxkcygpCiAgICAgewogICAgICAgICBjb25zdCBjb25maWcg
PSB0aGlzLl9vc0NvbmZpZzsKICAgICAgICAgY29uc3QgcmVwb3NpdG9yeU5hbWUgPSBjb25maWdb
J25hbWUnXTsKLSAgICAgICAgbGV0IGN1c3RvbUNvbW1hbmRzID0gY29uZmlnWydjdXN0b21Db21t
YW5kcyddOworICAgICAgICBjb25zdCBuZXdDb21taXRzVG9SZXBvcnQgPSBbXTsKKyAgICAgICAg
Y29uc3QgY29tbWl0c1RvVXBkYXRlID0gW107CisgICAgICAgIGNvbnN0ICBjdXN0b21Db21tYW5k
cyA9IGNvbmZpZ1snY3VzdG9tQ29tbWFuZHMnXTsKIAotICAgICAgICByZXR1cm4gbWFwSW5TZXJp
YWxQcm9taXNlQ2hhaW4oY3VzdG9tQ29tbWFuZHMsIChjb21tYW5kKSA9PiB7CisgICAgICAgIGZv
ciAoY29uc3QgY29tbWFuZCBvZiBjdXN0b21Db21tYW5kcykgewogICAgICAgICAgICAgYXNzZXJ0
KGNvbW1hbmRbJ21pblJldmlzaW9uJ10pOwogICAgICAgICAgICAgYXNzZXJ0KGNvbW1hbmRbJ21h
eFJldmlzaW9uJ10pOwogICAgICAgICAgICAgY29uc3QgbWluUmV2aXNpb25PcmRlciA9IHRoaXMu
X2NvbXB1dGVPcmRlcihjb21tYW5kWydtaW5SZXZpc2lvbiddKTsKICAgICAgICAgICAgIGNvbnN0
IG1heFJldmlzaW9uT3JkZXIgPSB0aGlzLl9jb21wdXRlT3JkZXIoY29tbWFuZFsnbWF4UmV2aXNp
b24nXSk7CiAKICAgICAgICAgICAgIGNvbnN0IHVybCA9IGAvYXBpL2NvbW1pdHMvJHtlc2NhcGUo
cmVwb3NpdG9yeU5hbWUpfS9sYXN0LXJlcG9ydGVkP2Zyb209JHttaW5SZXZpc2lvbk9yZGVyfSZ0
bz0ke21heFJldmlzaW9uT3JkZXJ9YDsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0
IHRoaXMuX3JlbW90ZUFQSS5nZXRKU09OV2l0aFN0YXR1cyh1cmwpOworICAgICAgICAgICAgY29u
c3QgbWluT3JkZXIgPSByZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGggPT0gMSA/IHBhcnNlSW50KHJl
c3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddKSArIDEgOiBtaW5SZXZpc2lvbk9yZGVyOwogCi0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3RlQVBJLmdldEpTT05XaXRoU3RhdHVzKHVybCku
dGhlbigocmVzdWx0KSA9PiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgbWluT3JkZXIgPSByZXN1
bHRbJ2NvbW1pdHMnXS5sZW5ndGggPT0gMSA/IHBhcnNlSW50KHJlc3VsdFsnY29tbWl0cyddWzBd
WydvcmRlciddKSArIDEgOiBtaW5SZXZpc2lvbk9yZGVyOwotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKHJlcG9zaXRvcnlOYW1lLCBjb21tYW5k
Wydjb21tYW5kJ10sIGNvbW1hbmRbJ2xpbmVzVG9JZ25vcmUnXSwgbWluT3JkZXIsIG1heFJldmlz
aW9uT3JkZXIpOwotICAgICAgICAgICAgfSkudGhlbigoY29tbWl0cykgPT4gewotICAgICAgICAg
ICAgICAgIGNvbnN0IGxhYmVsID0gJ25hbWUnIGluIGNvbW1hbmQgPyBgIiR7Y29tbWFuZFsnbmFt
ZSddfSJgIDogYCIke2NvbW1hbmRbJ21pblJldmlzaW9uJ119IiB0byAiJHtjb21tYW5kWydtYXhS
ZXZpc2lvbiddfSJgOwotICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5sb2coYEZvdW5kICR7
Y29tbWl0cy5sZW5ndGh9IGJ1aWxkcyBmb3IgJHtsYWJlbH1gKTsKKyAgICAgICAgICAgIGNvbnN0
IGNvbW1pdEluZm8gPSBhd2FpdCB0aGlzLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKGNvbW1h
bmRbJ2NvbW1hbmQnXSwgY29tbWFuZFsnbGluZXNUb0lnbm9yZSddKTsKKyAgICAgICAgICAgIGNv
bnN0IGNvbW1pdHMgPSB0aGlzLl9jb21taXRzV2l0aGluUmFuZ2UoY29tbWl0SW5mby5hbGxSZXZp
c2lvbnMsIHJlcG9zaXRvcnlOYW1lLCBtaW5PcmRlciwgbWF4UmV2aXNpb25PcmRlcik7CiAKLSAg
ICAgICAgICAgICAgICBpZiAoJ293bmVkQ29tbWl0Q29tbWFuZCcgaW4gY29tbWFuZCkgewotICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIubG9nKGBSZXNvbHZpbmcgb3duZWRDb21taXRz
IGZvciAke2xhYmVsfWApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRkT3du
ZWRDb21taXRzRm9yQnVpbGQoY29tbWl0cywgY29tbWFuZFsnb3duZWRDb21taXRDb21tYW5kJ10p
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gJ25hbWUnIGlu
IGNvbW1hbmQgPyBgIiR7Y29tbWFuZFsnbmFtZSddfSJgIDogYCIke2NvbW1hbmRbJ21pblJldmlz
aW9uJ119IiB0byAiJHtjb21tYW5kWydtYXhSZXZpc2lvbiddfSJgOworICAgICAgICAgICAgdGhp
cy5fbG9nZ2VyLmxvZyhgRm91bmQgJHtjb21taXRzLmxlbmd0aH0gYnVpbGRzIGZvciAke2xhYmVs
fWApOworICAgICAgICAgICAgaWYgKCdvd25lZENvbW1pdENvbW1hbmQnIGluIGNvbW1hbmQpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIubG9nKGBSZXNvbHZpbmcgb3duZWRDb21taXRz
IGZvciAke2xhYmVsfWApOworICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2FkZE93bmVkQ29t
bWl0c0ZvckJ1aWxkKGNvbW1pdHMsIGNvbW1hbmRbJ293bmVkQ29tbWl0Q29tbWFuZCddKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ld0NvbW1pdHNUb1JlcG9ydC5wdXNoKC4uLmNvbW1p
dHMpOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1pdHM7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgfSkudGhlbigocmVzdWx0cykgPT4gW10uY29uY2F0KC4uLnJlc3VsdHMpKTsKKyAg
ICAgICAgICAgIGZvciAoY29uc3QgW3JldmlzaW9uLCB0ZXN0YWJpbGl0eVdhcm5pbmddIG9mIE9i
amVjdC5lbnRyaWVzKGNvbW1pdEluZm8uY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzKSkK
KyAgICAgICAgICAgICAgICBjb21taXRzVG9VcGRhdGUucHVzaCh7cmVwb3NpdG9yeTogcmVwb3Np
dG9yeU5hbWUsIHJldmlzaW9uLCB0ZXN0YWJpbGl0eVdhcm5pbmd9KTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4ge25ld0NvbW1pdHNUb1JlcG9ydCwgY29tbWl0c1RvVXBkYXRlfTsKICAgICB9
CiAKICAgICBfY29tcHV0ZU9yZGVyKHJldmlzaW9uKQpAQCAtODksMTcgKzg2LDI3IEBAIGNsYXNz
IE9TQnVpbGRGZXRjaGVyIHsKICAgICAgICAgcmV0dXJuICgobWFqb3IgKiAxMDAgKyBraW5kKSAq
IDEwMDAwICsgbWlub3IpICogMTAwICsgdmFyaWFudDsKICAgICB9CiAKLSAgICBfY29tbWl0c0Zv
ckF2YWlsYWJsZUJ1aWxkcyhyZXBvc2l0b3J5LCBjb21tYW5kLCBsaW5lc1RvSWdub3JlLCBtaW5P
cmRlciwgbWF4T3JkZXIpCisgICAgYXN5bmMgX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMoY29t
bWFuZCwgbGluZXNUb0lnbm9yZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdWJwcm9j
ZXNzLmV4ZWN1dGUoY29tbWFuZCkudGhlbigob3V0cHV0KSA9PiB7CisgICAgICAgIGNvbnN0IG91
dHB1dCA9IGF3YWl0IHRoaXMuX3N1YnByb2Nlc3MuZXhlY3V0ZShjb21tYW5kKTsKKyAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKG91dHB1dCk7CisgICAgICAgIH0g
Y2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFN5bnRh
eEVycm9yKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAgICAgIGxldCBs
aW5lcyA9IG91dHB1dC5zcGxpdCgnXG4nKTsKLSAgICAgICAgICAgIGlmIChsaW5lc1RvSWdub3Jl
KXsKKyAgICAgICAgICAgIGlmIChsaW5lc1RvSWdub3JlKSB7CiAgICAgICAgICAgICAgICAgY29u
c3QgcmVnZXggPSBuZXcgUmVnRXhwKGxpbmVzVG9JZ25vcmUpOwogICAgICAgICAgICAgICAgIGxp
bmVzID0gbGluZXMuZmlsdGVyKChsaW5lKSA9PiAhcmVnZXguZXhlYyhsaW5lKSk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbGluZXMubWFwKChyZXZpc2lvbikgPT4gKHtyZXBv
c2l0b3J5LCByZXZpc2lvbiwgJ29yZGVyJzogdGhpcy5fY29tcHV0ZU9yZGVyKHJldmlzaW9uKX0p
KQotICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNvbW1pdCkgPT4gY29tbWl0WydvcmRlciddID49
IG1pbk9yZGVyICYmIGNvbW1pdFsnb3JkZXInXSA8PSBtYXhPcmRlcik7Ci0gICAgICAgIH0pOwor
ICAgICAgICAgICAgcmV0dXJuIHthbGxSZXZpc2lvbnM6IGxpbmVzLCBjb21taXRzV2l0aFRlc3Rh
YmlsaXR5V2FybmluZ3M6IHt9fTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9jb21taXRzV2l0
aGluUmFuZ2UocmV2aXNpb25zLCByZXBvc2l0b3J5LCBtaW5PcmRlciwgbWF4T3JkZXIpCisgICAg
eworICAgICAgICByZXR1cm4gcmV2aXNpb25zLm1hcCgocmV2aXNpb24pID0+ICh7cmVwb3NpdG9y
eSwgcmV2aXNpb24sICdvcmRlcic6IHRoaXMuX2NvbXB1dGVPcmRlcihyZXZpc2lvbil9KSkKKyAg
ICAgICAgICAgIC5maWx0ZXIoKGNvbW1pdCkgPT4gY29tbWl0WydvcmRlciddID49IG1pbk9yZGVy
ICYmIGNvbW1pdFsnb3JkZXInXSA8PSBtYXhPcmRlcik7CiAgICAgfQogCiAgICAgX2FkZE93bmVk
Q29tbWl0c0ZvckJ1aWxkKGNvbW1pdHMsIGNvbW1hbmQpCkBAIC0xMTksMTAgKzEyNiwxNiBAQCBj
bGFzcyBPU0J1aWxkRmV0Y2hlciB7CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIF9zdWJtaXRD
b21taXRzKGNvbW1pdHMpCisgICAgYXN5bmMgX3JlcG9ydFRvRW5kUG9pbnQoZW5kUG9pbnQsIGNv
bW1pdHNUb1Bvc3QpCiAgICAgewotICAgICAgICBjb25zdCBjb21taXRzVG9SZXBvcnQgPSB7InNs
YXZlTmFtZSI6IHRoaXMuX3NsYXZlQXV0aFsnbmFtZSddLCAic2xhdmVQYXNzd29yZCI6IHRoaXMu
X3NsYXZlQXV0aFsncGFzc3dvcmQnXSwgJ2NvbW1pdHMnOiBjb21taXRzfTsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX3JlbW90ZUFQSS5wb3N0SlNPTldpdGhTdGF0dXMoJy9hcGkvcmVwb3J0LWNvbW1p
dHMvJywgY29tbWl0c1RvUmVwb3J0KTsKKyAgICAgICAgaWYgKCFjb21taXRzVG9Qb3N0Lmxlbmd0
aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBmb3IobGV0IGNvbW1pdHNUb1N1Ym1p
dCA9IGNvbW1pdHNUb1Bvc3Quc3BsaWNlKDAsIHRoaXMuX21heFN1Ym1pdENvdW50KTsgY29tbWl0
c1RvU3VibWl0Lmxlbmd0aDsgY29tbWl0c1RvU3VibWl0ID0gY29tbWl0c1RvUG9zdC5zcGxpY2Uo
MCwgdGhpcy5fbWF4U3VibWl0Q291bnQpKSB7CisgICAgICAgICAgICBjb25zdCByZXBvcnQgPSB7
InNsYXZlTmFtZSI6IHRoaXMuX3NsYXZlQXV0aFsnbmFtZSddLCAic2xhdmVQYXNzd29yZCI6IHRo
aXMuX3NsYXZlQXV0aFsncGFzc3dvcmQnXSwgJ2NvbW1pdHMnOiBjb21taXRzVG9TdWJtaXR9Owor
ICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9yZW1vdGVBUEkucG9zdEpT
T05XaXRoU3RhdHVzKGVuZFBvaW50LCByZXBvcnQpOworICAgICAgICAgICAgYXNzZXJ0KHJlc3Bv
bnNlWydzdGF0dXMnXSA9PT0gJ09LJyk7CisgICAgICAgIH0KICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9zeW5jLW9zLXZlcnNpb25zLmpzIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL3N5bmMtb3MtdmVyc2lvbnMuanMKaW5kZXgg
NzdmNGEwYTdkMzQzODE5NDMwNzZiODNlYzQ4ZDViYzkwYjQ4MzU4Ni4uNGZiZTU4MmJmMDM4OGRh
NGE0YjNhNzUzMDdkMmYxNmI2MjI5N2M3OCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3Rvb2xzL3N5bmMtb3MtdmVyc2lvbnMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3Rvb2xzL3N5bmMtb3MtdmVyc2lvbnMuanMKQEAgLTI5LDcgKzI5LDcgQEAgZnVuY3Rp
b24gc3luY0xvb3Aob3B0aW9ucykKICAgICBjb25zdCByZW1vdGVBUEkgPSBuZXcgUmVtb3RlQVBJ
KHNlcnZlckNvbmZpZy5zZXJ2ZXIpOwogCiAgICAgY29uc3QgZmV0Y2hlcnMgPSBvc0NvbmZpZ0xp
c3QubWFwKChvc0NvbmZpZykgPT4gbmV3IE9TQnVpbGRGZXRjaGVyKG9zQ29uZmlnLCByZW1vdGVB
UEksIHNlcnZlckNvbmZpZy5zbGF2ZSwgbmV3IFN1YnByb2Nlc3MsIGNvbnNvbGUpKTsKLSAgICBP
U0J1aWxkRmV0Y2hlci5mZXRjaEFuZFJlcG9ydEFsbEluT3JkZXIoZmV0Y2hlcnMpLmNhdGNoKChl
cnJvcikgPT4geworICAgIE9TQnVpbGRGZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQ29tbWl0
cyhmZXRjaGVycykuY2F0Y2goKGVycm9yKSA9PiB7CiAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJy
b3IpOwogICAgICAgICBpZiAodHlwZW9mKGVycm9yLnN0YWNrKSA9PSAnc3RyaW5nJykgewogICAg
ICAgICAgICAgZm9yIChsZXQgbGluZSBvZiBlcnJvci5zdGFjay5zcGxpdCgnXG4nKSkKZGlmZiAt
LWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVz
dHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRl
c3RzLmpzCmluZGV4IDVmODg1MjQ5MjA2MGVlYTZmMzMwNWJiYzBmNTRlYjYwYzAxMGIyYTMuLjlj
NmVkZjkxN2Q2NDE0ZGVmNzFjOGU2YmQ4YTE0Y2E1MzFmZWNjMWIgMTAwNjQ0Ci0tLSBhL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMuanMKKysrIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qcwpA
QCAtNTgsNiArNTgsMTggQEAgZnVuY3Rpb24gb3N4Q29tbWl0KCkKICAgICB9KTsKIH0KIAorZnVu
Y3Rpb24gb3N4Q29tbWl0V2l0aFRlc3RhYmlsaXR5V2FybmluZygpCit7CisgICAgcmV0dXJuIG5l
dyBDb21taXRMb2coNSwgeworICAgICAgICBpZDogNSwKKyAgICAgICAgcmVwb3NpdG9yeTogTW9j
a01vZGVscy5vc3gsCisgICAgICAgIHJldmlzaW9uOiAnMTAuMTEuNCAxNUU2NScsCisgICAgICAg
IHRpbWU6IG51bGwsCisgICAgICAgIG9yZGVyOiAxNTA0MDY1LAorICAgICAgICB0ZXN0YWJpbGl0
eVdhcm5pbmc6ICJQYW5pYyBvbiBib290IgorICAgIH0pOworfQorCiBmdW5jdGlvbiBvbGRPU1hD
b21taXQoKQogewogICAgIHJldHVybiBuZXcgQ29tbWl0TG9nKDYsIHsKQEAgLTQxNyw2ICs0Mjks
MTMgQEAgZGVzY3JpYmUoJ0NvbW1pdExvZycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgfSk7CiAg
ICAgfSk7CiAKKyAgICBkZXNjcmliZSgndGVzdGFiaWxpdHlXYXJuaW5nJywgKCkgPT4geworICAg
ICAgICBpdCgnc2hvdWxkIHJldHVybiAidGVzdGFiaWxpdHlXYXJuaW5nIiBtZXNzYWdlJywgKCkg
PT4geworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gb3N4Q29tbWl0V2l0aFRlc3RhYmlsaXR5
V2FybmluZygpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC50ZXN0YWJpbGl0eVdh
cm5pbmcoKSwgJ1BhbmljIG9uIGJvb3QnKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKICAgICBj
b25zdCBjb21taXRzQVBJUmVzcG9uc2UgPSB7CiAgICAgICAgICJjb21taXRzIjpbewogICAgICAg
ICAgICAgImlkIjogIjgzMTE1MSIsCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvdW5pdC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcwppbmRleCAzOWZjY2M1NDc1OWY4Nzlm
MWNlMDM4M2IwYTliMmNlN2ZjNWI5YTQ5Li5iYTZjMTA3ZDA4OWFlYzE5NWNiMmU5YTFhODBjOWZj
MjU4OTA1ZTMyIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0
cy9jb21taXQtc2V0LXRlc3RzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0
LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanMKQEAgLTE3MCw2ICsxNzAsMTggQEAgZnVuY3Rpb24g
YW5vdGhlckNvbW1pdFdpdGhHaXRSZXZpc2lvbigpCiAgICAgfSk7CiB9CiAKK2Z1bmN0aW9uIGNv
bW1pdFdpdGhUZXN0YWJpbGl0eVdhcm5pbmcoKQoreworICAgIHJldHVybiBDb21taXRMb2cuZW5z
dXJlU2luZ2xldG9uKDIwMjMsIHsKKyAgICAgICAgaWQ6IDIwMjMsCisgICAgICAgIHJlcG9zaXRv
cnk6IE1vY2tNb2RlbHMud2Via2l0R2l0LAorICAgICAgICByZXZpc2lvbjogJ2YyNGZjNjc4NzNh
MDA2OGZkNWEzYTlhZGFjNTk1ZjAwMzZjMjEzMTUnLAorICAgICAgICBvd25zQ29tbWl0czogZmFs
c2UsCisgICAgICAgIHRpbWU6IDE0NTY5MzI3NzMwMDAsCisgICAgICAgIHRlc3RhYmlsaXR5V2Fy
bmluZzogJ0ZhaWxlZCBjb21waWxhdGlvbicKKyAgICB9KTsKK30KKwogZGVzY3JpYmUoJ0NvbW1p
dFNldCcsICgpID0+IHsKICAgICBNb2NrUmVtb3RlQVBJLmluamVjdChudWxsLCBCcm93c2VyUHJp
dmlsZWdlZEFQSSk7CiAgICAgTW9ja01vZGVscy5pbmplY3QoKTsKQEAgLTI5NCw2ICszMDYsMTUg
QEAgZGVzY3JpYmUoJ0NvbW1pdFNldCcsICgpID0+IHsKICAgICAgICAgfSk7CiAgICAgfQogCisg
ICAgZnVuY3Rpb24gY29tbWl0U2V0V2l0aFRlc3RhYmlsaXR5V2FybmluZygpCisgICAgeworICAg
ICAgICByZXR1cm4gQ29tbWl0U2V0LmVuc3VyZVNpbmdsZXRvbigxNiwgeworICAgICAgICAgICAg
cmV2aXNpb25JdGVtczogW3sgY29tbWl0OiBjb21taXRXaXRoVGVzdGFiaWxpdHlXYXJuaW5nKCks
IHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAgICAgICAgeyBjb21taXQ6IHdlYmtp
dENvbW1pdCgpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9XSwKKyAgICAgICAgICAgIGN1c3RvbVJv
b3RzOiBbXQorICAgICAgICB9KTsKKyAgICB9CisKICAgICBmdW5jdGlvbiBvbmVNZWFzdXJlbWVu
dENvbW1pdFNldCgpCiAgICAgewogICAgICAgICByZXR1cm4gTWVhc3VyZW1lbnRDb21taXRTZXQu
ZW5zdXJlU2luZ2xldG9uKDEsIFsKQEAgLTQwNiw2ICs0MjcsMjUgQEAgZGVzY3JpYmUoJ0NvbW1p
dFNldCcsICgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgeycxMSc6IHsgcmV2aXNpb246ICd3
ZWJraXQtY29tbWl0LTAnLCBvd25lclJldmlzaW9uOiBudWxsLCBwYXRjaDogbnVsbH0sIGN1c3Rv
bVJvb3RzOiBbNDU2LCA0NThdfV0pOwogICAgICAgICB9KTsKICAgICB9KTsKKworICAgIGRlc2Ny
aWJlKCdjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MnLCAoKSA9PiB7CisgICAgICAgIGl0
KCdzaG91bGQgcmV0dXJuIGNvbW1pdHMgd2l0aCB0ZXN0YWJpbGl0eSB3YXJuaW5nJywgKCkgPT4g
eworICAgICAgICAgICAgY29uc3QgY29tbWl0cyA9IGNvbW1pdFNldFdpdGhUZXN0YWJpbGl0eVdh
cm5pbmcoKS5jb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MoKTsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChjb21taXRzLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
Y29tbWl0c1swXSwgY29tbWl0V2l0aFRlc3RhYmlsaXR5V2FybmluZygpKTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgbGlzdCBpZiBubyBjb21taXQgaW4g
Y29tbWl0IHNldCBjb250YWlucyB0ZXN0YWJsaXR5IHdhcm5pbmcnLCAoKSA9PiB7CisgICAgICAg
ICAgICBjb25zdCBjb21taXRzID0gY29tbWl0U2V0V2l0aFR3b0NvbW1pdHMoKS5jb21taXRzV2l0
aFRlc3RhYmlsaXR5V2FybmluZ3MoKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRz
Lmxlbmd0aCwgMCk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ2NvbW1p
dHMnLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFsbCBjb21taXRzIGluIGNv
bW1pdCBzZXQnLCAoKSA9PiB7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0U2V0V2l0
aFR3b0NvbW1pdHMoKS5jb21taXRzKCkubGVuZ3RoLCAyKTsKKyAgICAgICAgfSk7CisgICAgfSk7
CiB9KTsKIAogZGVzY3JpYmUoJ0ludGVybWVkaWF0ZUNvbW1pdFNldCcsICgpID0+IHsKQEAgLTYy
OSw5ICs2NjksNyBAQCBkZXNjcmliZSgnSW50ZXJtZWRpYXRlQ29tbWl0U2V0JywgKCkgPT4gewog
ICAgICAgICAgICAgICAgIGFzc2VydCghY29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkoTW9j
a01vZGVscy53ZWJraXQpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKLQogICAgIH0p
OwotCiB9KTsKIAogZGVzY3JpYmUoJ0N1c3RvbUNvbW1pdFNldCcsICgpID0+IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357486</attachid>
            <date>2018-12-17 15:41:53 -0800</date>
            <delta_ts>2018-12-18 22:38:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191557-20181217154152.patch</filename>
            <type>text/plain</type>
            <size>78108</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5MTM1CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBkMDZkYzBjYWRhYTkzNWVkMTM4NzlkNWQzYWM4NDFhOGY3YzJhMDI5Li5iOTViYzAzYTQ2
Mjk5NGE4NWZmZDM1YmZmYmRiOWRkODk5ZjczMzMzIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxOC0xMi0xNCAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmQgY29tbWl0cyB0YWJsZSB0byBjb250YWluIHRl
c3RhYmlsaXR5IHdhcm5pbmcgaW5mb3JtYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE1NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUgYWJpbGl0eSB0byBzdG9yZSB0ZXN0YWJp
bGl0eSB3YXJuaW5nIG1lc3NhZ2UgaW4gY29tbWl0cyB0YWJsZS4KKyAgICAgICAgQWRkZWQgJy9h
cGkvdXBkYXRlLWNvbW1pdHMnIHRvIHN1cHBvcnQgdXBkYXRpbmcgYW4gZXhpc3RpbmcgY29tbWl0
LgorICAgICAgICBSZWZhY3RvcmVkICcvYXBpL3JlcG9ydC1jb21taXRzJyB0byBzaGFyZSBjb2Rl
IHdpdGggJy9hcGkvdXBkYXRlLWNvbW1pdHMnLgorICAgICAgICBVcGRhdGVkIG9zIHZlcnNpb24g
c3luY2luZyBzY3JpcHQgdG8gYmUgYWJsZSB0byB1cGRhdGUgdGVzdGFiaWxpdHkgd2FybmluZyBp
bmZvcm1hdGlvbi4KKworICAgICAgICAqIGluaXQtZGF0YWJhc2Uuc3FsOiBBZGRlZCAnY29tbWl0
X3Rlc3RhYmlsaXR5X3dhcm5pbmcnIGZpZWxkIHRvICdjb21taXRzJyB0YWJsZS4KKyAgICAgICAg
KiBwdWJsaWMvYXBpL3JlcG9ydC1jb21taXRzLnBocDogUmVmYWN0b3IgdG8gc2hhcmUgY29kZSB3
aXRoICcvYXBpL3VwZGF0ZS1jb21taXRzJy4KKyAgICAgICAgKiBwdWJsaWMvYXBpL3VwZGF0ZS1j
b21taXRzLnBocDogQWRkZWQgYW4gQVBJIHRvIHVwZGF0ZSBjb21taXQgaW5mby4KKyAgICAgICAg
KiBwdWJsaWMvaW5jbHVkZS9jb21taXQtbG9nLWZldGNoZXIucGhwOiBFeHBvc2UgdGVzdGFiaWxp
dHkgd2FybmluZyBpbmZvcm1hdGlvbiBpbiB0aGlzIEFQSS4KKyAgICAgICAgKiBwdWJsaWMvaW5j
bHVkZS9jb21taXQtbW9kaWZpZXIucGhwOiBBZGRlZCAnQ29tbWl0TW9kaWZpZXInIHRvIG1hbmFn
ZSBjb21taXQgaW5zZXJ0IGFuZCB1cGRhdGUuCisgICAgICAgICogcHVibGljL3YzL21vZGVscy9j
b21taXQtbG9nLmpzOiBDb21taXRMb2cgb2JqZWN0IHNob3VsZCBleHBvc2UgdGVzdGFiaWxpdHkg
d2FybmluZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUudXBkYXRl
U2luZ2xldG9uKToKKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUudGVzdGFiaWxpdHlXYXJu
aW5nKToKKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanM6IEFkZGVkICdj
b21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MnIGFuZCAnY29tbWl0cycgdG8gQ29tbWl0U2V0
IGFuZAorICAgICAgICBJbnRlcm1lZGlhdGVDb21taXRTZXQgaW5zdGFuY2VzLgorICAgICAgICAo
Q29tbWl0U2V0LnByb3RvdHlwZS5jb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MpOgorICAg
ICAgICAoQ29tbWl0U2V0LnByb3RvdHlwZS5jb21taXRzKToKKyAgICAgICAgKEludGVybWVkaWF0
ZUNvbW1pdFNldC5wcm90b3R5cGUuY29tbWl0c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzKToKKyAg
ICAgICAgKEludGVybWVkaWF0ZUNvbW1pdFNldC5wcm90b3R5cGUuY29tbWl0cyk6CisgICAgICAg
ICogc2VydmVyLXRlc3RzL2FwaS11cGRhdGUtY29tbWl0cy10ZXN0cy5qczogQWRkZWQgdW5pdCB0
ZXN0cyBmb3IgJy9hcGkvdXBkYXRlLWNvbW1pdC10ZXN0YWJpbGl0eScuCisgICAgICAgICogc2Vy
dmVyLXRlc3RzL3Rvb2xzLW9zLWJ1aWxkLWZldGNoZXItdGVzdHMuanM6IEFkZGVkIGFuZCB1cGRh
dGVkIHVuaXQgdGVzdHMuCisgICAgICAgICogdG9vbHMvanMvb3MtYnVpbGQtZmV0Y2hlci5qczog
QWRkZWQgdGhlIGFiaWxpdHkgdG8gdXBkYXRlIGNvbW1pdCB0ZXN0YWJpbGl0eSB3YXJuaW5ncy4K
KyAgICAgICAgKGFzeW5jLmZldGNoUmVwb3J0QW5kVXBkYXRlQ29tbWl0cyk6CisgICAgICAgIChw
cm90b3R5cGUuYXN5bmMuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMpOgorICAgICAgICAocHJv
dG90eXBlLmFzeW5jLl9mZXRjaEF2YWlsYWJsZUJ1aWxkcyk6CisgICAgICAgIChwcm90b3R5cGUu
YXN5bmMuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMpOgorICAgICAgICAocHJvdG90eXBlLl9j
b21taXRzV2l0aGluUmFuZ2UpOgorICAgICAgICAocHJvdG90eXBlLmFzeW5jLl9yZXBvcnRUb0Vu
ZFBvaW50KToKKyAgICAgICAgKGZldGNoQW5kUmVwb3J0QWxsSW5PcmRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChwcm90b3R5cGUuZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMpOiBEZWxldGVkLgorICAg
ICAgICAocHJvdG90eXBlLl9mZXRjaEF2YWlsYWJsZUJ1aWxkcyk6IERlbGV0ZWQuCisgICAgICAg
IChwcm90b3R5cGUuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMpOiBEZWxldGVkLgorICAgICAg
ICAocHJvdG90eXBlLl9zdWJtaXRDb21taXRzKTogRGVsZXRlZC4KKyAgICAgICAgKiB0b29scy9z
eW5jLW9zLXZlcnNpb25zLmpzOgorICAgICAgICAqIHVuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0
cy5qczogQWRkZWQgYSB1bml0IHRlc3QgZm9yICd0ZXN0YWJpbGl0eVdhcm5pbmcnLgorICAgICAg
ICAqIHVuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qczogQWRkZWQgdW5pdCB0ZXN0cyBmb3Ig
J2NvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5ncycuCisKIDIwMTgtMTEtMTYgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFuaWZlc3QgZmlsZSBjYW4gY29u
dGFpbiBhIHRlc3QgbWV0cmljIHdoaWNoIHJlZmVyZW5jZXMgYSBub24tZXhpc3RlbnQgdGVzdApk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL2luaXQtZGF0YWJhc2Uuc3FsIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL2luaXQtZGF0YWJhc2Uuc3FsCmluZGV4IDgxNjFlZmUz
ZTI4MWUzNGEwZGM0NGVkYjgwY2FiNmMzYmJjMzdiYTYuLjJlZTE3YWQ0YzkyYmY1MjU2NzMzMmM2
MDFmZjJlMmIxNGRkNGYzNzcgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9p
bml0LWRhdGFiYXNlLnNxbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvaW5pdC1kYXRh
YmFzZS5zcWwKQEAgLTEwMSw2ICsxMDEsNyBAQCBDUkVBVEUgVEFCTEUgY29tbWl0cyAoCiAgICAg
Y29tbWl0X2NvbW1pdHRlciBpbnRlZ2VyIFJFRkVSRU5DRVMgY29tbWl0dGVycyBPTiBERUxFVEUg
Q0FTQ0FERSwKICAgICBjb21taXRfbWVzc2FnZSB0ZXh0LAogICAgIGNvbW1pdF9yZXBvcnRlZCBi
b29sZWFuIE5PVCBOVUxMIERFRkFVTFQgRkFMU0UsCisgICAgY29tbWl0X3Rlc3RhYmlsaXR5X3dh
cm5pbmcgdmFyY2hhcig2NCkgREVGQVVMVCBOVUxMLAogICAgIENPTlNUUkFJTlQgY29tbWl0X2lu
X3JlcG9zaXRvcnlfbXVzdF9iZV91bmlxdWUgVU5JUVVFKGNvbW1pdF9yZXBvc2l0b3J5LCBjb21t
aXRfcmV2aXNpb24pKTsKIENSRUFURSBJTkRFWCBjb21taXRfdGltZV9pbmRleCBPTiBjb21taXRz
KGNvbW1pdF90aW1lKTsKIENSRUFURSBJTkRFWCBjb21taXRfb3JkZXJfaW5kZXggT04gY29tbWl0
cyhjb21taXRfb3JkZXIpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy9hcGkvcmVwb3J0LWNvbW1pdHMucGhwIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy9hcGkvcmVwb3J0LWNvbW1pdHMucGhwCmluZGV4IDZjNjUxYTk4YWE0ZmY3N2ZmMjkwYTI4
MjNhM2FmYjc4YmM5MjE0NWIuLjg4NGQ2YWE4MTg1ZmMxNzhjNDhlZWY3NGViZWJhODE3ZTcwM2Y1
MmYgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYXBpL3JlcG9y
dC1jb21taXRzLnBocAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9y
ZXBvcnQtY29tbWl0cy5waHAKQEAgLTEsNiArMSw3IEBACiA8P3BocAogCiByZXF1aXJlKCcuLi9p
bmNsdWRlL2pzb24taGVhZGVyLnBocCcpOworcmVxdWlyZSgnLi4vaW5jbHVkZS9jb21taXQtbW9k
aWZpZXIucGhwJyk7CiAKIGZ1bmN0aW9uIG1haW4oJHBvc3RfZGF0YSkKIHsKQEAgLTEzLDkyICsx
NCwxMiBAQCBmdW5jdGlvbiBtYWluKCRwb3N0X2RhdGEpCiAgICAgdmVyaWZ5X3NsYXZlKCRkYiwg
JHJlcG9ydCk7CiAKICAgICAkY29tbWl0cyA9IGFycmF5X2dldCgkcmVwb3J0LCAnY29tbWl0cycs
IGFycmF5KCkpOwotCi0gICAgZm9yZWFjaCAoJGNvbW1pdHMgYXMgJGNvbW1pdF9pbmZvKSB7Ci0g
ICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygncmVwb3NpdG9yeScsICRjb21taXRfaW5mbykp
Ci0gICAgICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ01pc3NpbmdSZXBvc2l0b3J5TmFtZScsIGFy
cmF5KCdjb21taXQnID0+ICRjb21taXRfaW5mbykpOwotICAgICAgICBpZiAoIWFycmF5X2tleV9l
eGlzdHMoJ3JldmlzaW9uJywgJGNvbW1pdF9pbmZvKSkKLSAgICAgICAgICAgIGV4aXRfd2l0aF9l
cnJvcignTWlzc2luZ1JldmlzaW9uJywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7
Ci0gICAgICAgIHJlcXVpcmVfZm9ybWF0KCdSZXZpc2lvbicsICRjb21taXRfaW5mb1sncmV2aXNp
b24nXSwgJy9eW0EtWmEtejAtOSBcLl0rJC8nKTsKLSAgICAgICAgaWYgKGFycmF5X2tleV9leGlz
dHMoJ2F1dGhvcicsICRjb21taXRfaW5mbykgJiYgIWlzX2FycmF5KCRjb21taXRfaW5mb1snYXV0
aG9yJ10pKQotICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdJbnZhbGlkQXV0aG9yRm9ybWF0
JywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7Ci0gICAgfQotCi0gICAgJGRiLT5i
ZWdpbl90cmFuc2FjdGlvbigpOwotICAgIGZvcmVhY2ggKCRjb21taXRzIGFzICRjb21taXRfaW5m
bykgewotICAgICAgICAkcmVwb3NpdG9yeV9pZCA9ICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3co
J3JlcG9zaXRvcmllcycsICdyZXBvc2l0b3J5JywgYXJyYXkoJ25hbWUnID0+ICRjb21taXRfaW5m
b1sncmVwb3NpdG9yeSddLCAnb3duZXInID0+IE5VTEwpKTsKLSAgICAgICAgaWYgKCEkcmVwb3Np
dG9yeV9pZCkgewotICAgICAgICAgICAgJGRiLT5yb2xsYmFja190cmFuc2FjdGlvbigpOwotICAg
ICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdGYWlsZWRUb0luc2VydFJlcG9zaXRvcnknLCBhcnJh
eSgnY29tbWl0JyA9PiAkY29tbWl0X2luZm8pKTsKLSAgICAgICAgfQotICAgICAgICAkb3duZXJf
Y29tbWl0X2lkID0gaW5zZXJ0X2NvbW1pdCgkZGIsICRjb21taXRfaW5mbywgJHJlcG9zaXRvcnlf
aWQsIE5VTEwpOwotICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJ293bmVkQ29tbWl0cycs
ICRjb21taXRfaW5mbykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3JlYWNo
KCRjb21taXRfaW5mb1snb3duZWRDb21taXRzJ10gYXMgJG93bmVkX2NvbW1pdF9yZXBvc2l0b3J5
X25hbWUgPT4gJG93bmVkX2NvbW1pdF9pbmZvKSB7Ci0gICAgICAgICAgICBpZiAoYXJyYXlfa2V5
X2V4aXN0cygndGltZScsICRvd25lZF9jb21taXRfaW5mbykpIHsKLSAgICAgICAgICAgICAgICAk
ZGItPnJvbGxiYWNrX3RyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgZXhpdF93aXRoX2Vy
cm9yKCdPd25lZENvbW1pdFNob3VsZE5vdENvbnRhaW5UaW1lc3RhbXAnLCBhcnJheSgnY29tbWl0
JyA9PiAkb3duZWRfY29tbWl0X2luZm8pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICRv
d25lZF9jb21taXRfcmVwb3NpdG9yeV9pZCA9ICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3coJ3Jl
cG9zaXRvcmllcycsICdyZXBvc2l0b3J5JywgYXJyYXkoJ25hbWUnID0+ICRvd25lZF9jb21taXRf
cmVwb3NpdG9yeV9uYW1lLCAnb3duZXInID0+ICRyZXBvc2l0b3J5X2lkKSk7Ci0gICAgICAgICAg
ICBpZiAoISRvd25lZF9jb21taXRfcmVwb3NpdG9yeV9pZCkgewotICAgICAgICAgICAgICAgICRk
Yi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBleGl0X3dpdGhfZXJy
b3IoJ0ZhaWxlZFRvSW5zZXJ0UmVwb3NpdG9yeScsIGFycmF5KCdjb21taXQnID0+ICRvd25lZF9j
b21taXRfaW5mbykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5zZXJ0X2NvbW1pdCgk
ZGIsICRvd25lZF9jb21taXRfaW5mbywgJG93bmVkX2NvbW1pdF9yZXBvc2l0b3J5X2lkLCAkb3du
ZXJfY29tbWl0X2lkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAkZGItPmNvbW1pdF90cmFuc2Fj
dGlvbigpOworICAgICRjb21taXRfbW9kaWZpZXIgPSBuZXcgQ29tbWl0TW9kaWZpZXIoJGRiKTsK
KyAgICAkY29tbWl0X21vZGlmaWVyLT51cGRhdGVfb3JfaW5zZXJ0X2NvbW1pdHMoJGNvbW1pdHMp
OwogCiAgICAgZXhpdF93aXRoX3N1Y2Nlc3MoKTsKIH0KIAotZnVuY3Rpb24gaW5zZXJ0X2NvbW1p
dCgkZGIsICRjb21taXRfaW5mbywgJHJlcG9zaXRvcnlfaWQsICRvd25lcl9jb21taXRfaWQpCi17
Ci0gICAgJGF1dGhvciA9IGFycmF5X2dldCgkY29tbWl0X2luZm8sICdhdXRob3InKTsKLSAgICAk
Y29tbWl0dGVyX2lkID0gTlVMTDsKLSAgICBpZiAoJGF1dGhvcikgewotICAgICAgICAkYWNjb3Vu
dCA9IGFycmF5X2dldCgkYXV0aG9yLCAnYWNjb3VudCcpOwotICAgICAgICAkY29tbWl0dGVyX3F1
ZXJ5ID0gYXJyYXkoJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLCAnYWNjb3VudCcgPT4g
JGFjY291bnQpOwotICAgICAgICAkY29tbWl0dGVyX2RhdGEgPSAkY29tbWl0dGVyX3F1ZXJ5Owot
ICAgICAgICAkbmFtZSA9IGFycmF5X2dldCgkYXV0aG9yLCAnbmFtZScpOwotICAgICAgICBpZiAo
JG5hbWUpCi0gICAgICAgICAgICAkY29tbWl0dGVyX2RhdGFbJ25hbWUnXSA9ICRuYW1lOwotICAg
ICAgICAkY29tbWl0dGVyX2lkID0gJGRiLT51cGRhdGVfb3JfaW5zZXJ0X3JvdygnY29tbWl0dGVy
cycsICdjb21taXR0ZXInLCAkY29tbWl0dGVyX3F1ZXJ5LCAkY29tbWl0dGVyX2RhdGEpOwotICAg
ICAgICBpZiAoISRjb21taXR0ZXJfaWQpIHsKLSAgICAgICAgICAgICRkYi0+cm9sbGJhY2tfdHJh
bnNhY3Rpb24oKTsKLSAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJvcignRmFpbGVkVG9JbnNlcnRD
b21taXR0ZXInLCBhcnJheSgnY29tbWl0dGVyJyA9PiAkY29tbWl0dGVyX2RhdGEpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgICRwcmV2aW91c19jb21taXRfcmV2aXNpb24gPSBhcnJheV9nZXQo
JGNvbW1pdF9pbmZvLCAncHJldmlvdXNDb21taXQnKTsKLSAgICAkcHJldmlvdXNfY29tbWl0X2lk
ID0gTlVMTDsKLSAgICBpZiAoJHByZXZpb3VzX2NvbW1pdF9yZXZpc2lvbikgewotICAgICAgICAk
cHJldmlvdXNfY29tbWl0ID0gJGRiLT5zZWxlY3RfZmlyc3Rfcm93KCdjb21taXRzJywgJ2NvbW1p
dCcsIGFycmF5KCdyZXBvc2l0b3J5JyA9PiAkcmVwb3NpdG9yeV9pZCwgJ3JldmlzaW9uJyA9PiAk
cHJldmlvdXNfY29tbWl0X3JldmlzaW9uKSk7Ci0gICAgICAgIGlmICghJHByZXZpb3VzX2NvbW1p
dCkgewotICAgICAgICAgICAgJGRiLT5yb2xsYmFja190cmFuc2FjdGlvbigpOwotICAgICAgICAg
ICAgZXhpdF93aXRoX2Vycm9yKCdGYWlsZWRUb0ZpbmRQcmV2aW91c0NvbW1pdCcsIGFycmF5KCdj
b21taXQnID0+ICRjb21taXRfaW5mbykpOwotICAgICAgICB9Ci0gICAgICAgICRwcmV2aW91c19j
b21taXRfaWQgPSAkcHJldmlvdXNfY29tbWl0Wydjb21taXRfaWQnXTsKLSAgICB9Ci0KLSAgICAk
ZGF0YSA9IGFycmF5KAotICAgICAgICAncmVwb3NpdG9yeScgPT4gJHJlcG9zaXRvcnlfaWQsCi0g
ICAgICAgICdyZXZpc2lvbicgPT4gJGNvbW1pdF9pbmZvWydyZXZpc2lvbiddLAotICAgICAgICAn
cHJldmlvdXNfY29tbWl0JyA9PiAkcHJldmlvdXNfY29tbWl0X2lkLAotICAgICAgICAnb3JkZXIn
ID0+IGFycmF5X2dldCgkY29tbWl0X2luZm8sICdvcmRlcicpLAotICAgICAgICAndGltZScgPT4g
YXJyYXlfZ2V0KCRjb21taXRfaW5mbywgJ3RpbWUnKSwKLSAgICAgICAgJ2NvbW1pdHRlcicgPT4g
JGNvbW1pdHRlcl9pZCwKLSAgICAgICAgJ21lc3NhZ2UnID0+IGFycmF5X2dldCgkY29tbWl0X2lu
Zm8sICdtZXNzYWdlJyksCi0gICAgICAgICdyZXBvcnRlZCcgPT4gdHJ1ZSwKLSAgICApOwotICAg
ICRpbnNlcnRlZF9jb21taXRfaWQgPSAkZGItPnVwZGF0ZV9vcl9pbnNlcnRfcm93KCdjb21taXRz
JywgJ2NvbW1pdCcsIGFycmF5KCdyZXBvc2l0b3J5JyA9PiAkcmVwb3NpdG9yeV9pZCwgJ3Jldmlz
aW9uJyA9PiAkZGF0YVsncmV2aXNpb24nXSksICRkYXRhKTsKLQotICAgIGlmICgkb3duZXJfY29t
bWl0X2lkKQotICAgICAgICAkZGItPnNlbGVjdF9vcl9pbnNlcnRfcm93KCdjb21taXRfb3duZXJz
aGlwcycsICdjb21taXQnLCBhcnJheSgnb3duZXInID0+ICRvd25lcl9jb21taXRfaWQsICdvd25l
ZCcgPT4gJGluc2VydGVkX2NvbW1pdF9pZCksIE5VTEwsICcqJyk7Ci0gICAgcmV0dXJuICRpbnNl
cnRlZF9jb21taXRfaWQ7Ci19Ci0KIG1haW4oZmlsZV9nZXRfY29udGVudHMoJ3BocDovL2lucHV0
JykpOwogCiA/PgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9h
cGkvdXBkYXRlLWNvbW1pdHMucGhwIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9h
cGkvdXBkYXRlLWNvbW1pdHMucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjNTM5MWUyODE2ODExZTY3NTU2OTg3
OWJkZjQ5MWU4MzJlODgzMDAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL2FwaS91cGRhdGUtY29tbWl0cy5waHAKQEAgLTAsMCArMSwyNCBAQAorPD9w
aHAKKworcmVxdWlyZSgnLi4vaW5jbHVkZS9qc29uLWhlYWRlci5waHAnKTsKK3JlcXVpcmUoJy4u
L2luY2x1ZGUvY29tbWl0LW1vZGlmaWVyLnBocCcpOworCitmdW5jdGlvbiBtYWluKCRwb3N0X2Rh
dGEpCit7CisgICAgJGRiID0gbmV3IERhdGFiYXNlOworICAgIGlmICghJGRiLT5jb25uZWN0KCkp
CisgICAgICAgIGV4aXRfd2l0aF9lcnJvcignRGF0YWJhc2VDb25uZWN0aW9uRmFpbHVyZScpOwor
CisgICAgJHJlcG9ydCA9IGpzb25fZGVjb2RlKCRwb3N0X2RhdGEsIHRydWUpOworCisgICAgdmVy
aWZ5X3NsYXZlKCRkYiwgJHJlcG9ydCk7CisKKyAgICAkY29tbWl0cyA9IGFycmF5X2dldCgkcmVw
b3J0LCAnY29tbWl0cycsIGFycmF5KCkpOworICAgICRjb21taXRfbW9kaWZpZXIgPSBuZXcgQ29t
bWl0TW9kaWZpZXIoJGRiKTsKKyAgICAkY29tbWl0X21vZGlmaWVyLT51cGRhdGVfY29tbWl0cygk
Y29tbWl0cyk7CisKKyAgICBleGl0X3dpdGhfc3VjY2VzcygpOworfQorCittYWluKGZpbGVfZ2V0
X2NvbnRlbnRzKCdwaHA6Ly9pbnB1dCcpKTsKKz8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2Nv
bW1pdC1sb2ctZmV0Y2hlci5waHAgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2lu
Y2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocAppbmRleCA5Yzc2MjYzY2I2NjE2YjU5NWIxZGRk
ZmI5OTA5NDcyZWExNTg5ZDA4Li4yNjQ3NmQwZDkwZDFhMTg0MGNiMzEwODc3YjdlNzkzZTRhMDA0
MTAwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUv
Y29tbWl0LWxvZy1mZXRjaGVyLnBocAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocApAQCAtNjIsNiArNjIsNyBAQCBjbGFz
cyBDb21taXRMb2dGZXRjaGVyIHsKICAgICAgICAgICAgIGNvbW1pdF9yZXBvc2l0b3J5IGFzICJy
ZXBvc2l0b3J5IiwKICAgICAgICAgICAgIGNvbW1pdF9tZXNzYWdlIGFzICJtZXNzYWdlIiwKICAg
ICAgICAgICAgIGNvbW1pdF9vcmRlciBhcyAib3JkZXIiLAorICAgICAgICAgICAgY29tbWl0X3Rl
c3RhYmlsaXR5X3dhcm5pbmcgYXMgInRlc3RhYmlsaXR5V2FybmluZyIsCiAgICAgICAgICAgICBF
WElTVFMoU0VMRUNUICogRlJPTSBjb21taXRfb3duZXJzaGlwcyBXSEVSRSBjb21taXRfb3duZXIg
PSBjb21taXRfaWQpIGFzICJvd25zQ29tbWl0cyIKICAgICAgICAgICAgIEZST00gY29tbWl0cyBM
RUZUIE9VVEVSIEpPSU4gY29tbWl0dGVycyBPTiBjb21taXRfY29tbWl0dGVyID0gY29tbWl0dGVy
X2lkCiAgICAgICAgICAgICBXSEVSRSBjb21taXRfcmVwb3NpdG9yeSA9ICQxIEFORCBjb21taXRf
cmVwb3J0ZWQgPSB0cnVlJzsKQEAgLTIxMSw2ICsyMTIsNyBAQCBjbGFzcyBDb21taXRMb2dGZXRj
aGVyIHsKICAgICAgICAgICAgICdhdXRob3JOYW1lJyA9PiAkY29tbWl0dGVyX3JvdyA/ICRjb21t
aXR0ZXJfcm93Wydjb21taXR0ZXJfbmFtZSddIDogbnVsbCwKICAgICAgICAgICAgICdhdXRob3JF
bWFpbCcgPT4gJGNvbW1pdHRlcl9yb3cgPyAkY29tbWl0dGVyX3Jvd1snY29tbWl0dGVyX2FjY291
bnQnXSA6IG51bGwsCiAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJGNvbW1pdF9yb3dbJ2NvbW1p
dF9tZXNzYWdlJ10sCisgICAgICAgICAgICAndGVzdGFiaWxpdHlXYXJuaW5nJyA9PiAkY29tbWl0
X3Jvd1snY29tbWl0X3Rlc3RhYmlsaXR5X3dhcm5pbmcnXSwKICAgICAgICAgICAgICdvd25zQ29t
bWl0cycgPT4gJG93bnNfY29tbWl0cwogICAgICAgICApOwogICAgIH0KZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9jb21taXQtbW9kaWZpZXIucGhw
IGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2NvbW1pdC1tb2RpZmll
ci5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMWM2NzU3NWUyNDk0ZWFjODdlNDA0MjBhZjQ1NmEyNWQ3YTEwMzRi
NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5j
bHVkZS9jb21taXQtbW9kaWZpZXIucGhwCkBAIC0wLDAgKzEsMjUzIEBACis8P3BocAorCitjbGFz
cyBDb21taXRNb2RpZmllciB7CisgICAgcHJpdmF0ZSAkZGI7CisgICAgcHJpdmF0ZSAkdG9wX2xl
dmVsX3JlcG9zaXRvcnlfaWRfYnlfbmFtZTsKKyAgICBwcml2YXRlICRvd25lZF9yZXBvc2l0b3J5
X2J5X25hbWVfYW5kX293bmVyX2lkOworICAgIHByaXZhdGUgJGNvbW1pdHNfYnlfcmVwb3NpdG9y
eV9pZDsKKyAgICBwcml2YXRlICRhdXRob3JzX2J5X3JlcG9zaXRvcnlfaWQ7CisgICAgcHJpdmF0
ZSAkY29tbWl0X2lkZW50aWZpZXJfYW5kX3VwZGF0ZV9saXN0OworICAgIHByaXZhdGUgJGNvbW1p
dF9kYXRhX2xpc3Q7CisKKyAgICBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZGIpCisgICAgeworICAg
ICAgICAkdGhpcy0+ZGIgPSAkZGI7CisgICAgICAgICR0aGlzLT50b3BfbGV2ZWxfcmVwb3NpdG9y
eV9pZF9ieV9uYW1lID0gYXJyYXkoKTsKKyAgICAgICAgJHRoaXMtPm93bmVkX3JlcG9zaXRvcnlf
YnlfbmFtZV9hbmRfb3duZXJfaWQgPSBhcnJheSgpOworICAgICAgICAkdGhpcy0+Y29tbWl0c19i
eV9yZXBvc2l0b3J5X2lkID0gYXJyYXkoKTsKKyAgICAgICAgJHRoaXMtPmF1dGhvcnNfYnlfcmVw
b3NpdG9yeV9pZCA9IGFycmF5KCk7CisgICAgICAgICR0aGlzLT5jb21taXRfaWRlbnRpZmllcl9h
bmRfdXBkYXRlX2xpc3QgPSBhcnJheSgpOworICAgICAgICAkdGhpcy0+Y29tbWl0X2RhdGFfbGlz
dCA9IGFycmF5KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdXBkYXRlX2NvbW1pdHMoJGNvbW1p
dHMpCisgICAgeworICAgICAgICAkdGhpcy0+cHJlcGFyZV9jb21taXRfdXBkYXRlKCRjb21taXRz
KTsKKyAgICAgICAgJHRoaXMtPmRiLT5iZWdpbl90cmFuc2FjdGlvbigpOworCisgICAgICAgIGZv
cmVhY2ggKCR0aGlzLT5jb21taXRfaWRlbnRpZmllcl9hbmRfdXBkYXRlX2xpc3QgYXMgbGlzdCgk
Y29tbWl0X2lkZW50aWZpZXIsICRjb21taXRfdXBkYXRlKSkgeworICAgICAgICAgICAgaWYgKGFy
cmF5X2tleV9leGlzdHMoJ2NvbW1pdHRlcicsICRjb21taXRfdXBkYXRlKSkgeworICAgICAgICAg
ICAgICAgICRjb21taXR0ZXJfaWQgPSAkdGhpcy0+cmVzb2x2ZV9jb21taXR0ZXJfYnlfcmVwb3Np
dG9yeV9pZF9hbmRfYXV0aG9yX2FjY291bnQoJGNvbW1pdF9pZGVudGlmaWVyWydyZXBvc2l0b3J5
J10sICRjb21taXRfdXBkYXRlWydjb21taXR0ZXInXSk7CisgICAgICAgICAgICAgICAgJGNvbW1p
dF91cGRhdGVbJ2NvbW1pdHRlciddID0gJGNvbW1pdHRlcl9pZDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgJHVwZGF0ZWRfY29tbWl0ID0gJHRoaXMtPmRiLT51cGRhdGVfcm93KCdjb21t
aXRzJywgJ2NvbW1pdCcsICRjb21taXRfaWRlbnRpZmllciwgJGNvbW1pdF91cGRhdGUpOworICAg
ICAgICAgICAgaWYgKCEkdXBkYXRlZF9jb21taXQpCisgICAgICAgICAgICAgICAgJHRoaXMtPnJv
bGxiYWNrX3dpdGhfZXJyb3IoJ0ZhaWxlZFRvVXBkYXRlQ29tbWl0JywgYXJyYXkoJ2NvbW1pdCcg
PT4gJGNvbW1pdF9pZGVudGlmaWVyLCAnY29tbWl0VXBkYXRlJyA9PiAkY29tbWl0X3VwZGF0ZSkp
OworICAgICAgICB9CisKKyAgICAgICAgJHRoaXMtPmRiLT5jb21taXRfdHJhbnNhY3Rpb24oKTsK
KyAgICAgICAgJHRoaXMtPnJlc2V0KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiBw
cmVwYXJlX2NvbW1pdF91cGRhdGUoJGNvbW1pdHMpCisgICAgeworICAgICAgICAkdGhpcy0+dmFs
aWRhdGVfY29tbWl0cygkY29tbWl0cyk7CisKKyAgICAgICAgZm9yZWFjaCAoJGNvbW1pdHMgYXMg
JGNvbW1pdF9pbmZvKSB7CisgICAgICAgICAgICAkcmVwb3NpdG9yeV9pZCA9ICR0aGlzLT5maW5k
X3RvcF9sZXZlbF9yZXBvc2l0b3J5KCRjb21taXRfaW5mb1sncmVwb3NpdG9yeSddKTsKKyAgICAg
ICAgICAgICRjb21taXRfaWRlbnRpZmllciA9IGFycmF5KCdyZXBvc2l0b3J5JyA9PiAkcmVwb3Np
dG9yeV9pZCwgJ3JldmlzaW9uJyA9PiAkY29tbWl0X2luZm9bJ3JldmlzaW9uJ10pOworICAgICAg
ICAgICAgJGNvbW1pdF91cGRhdGUgPSBhcnJheSgpOworCisgICAgICAgICAgICBpZiAoYXJyYXlf
a2V5X2V4aXN0cygndGltZScsICRjb21taXRfaW5mbykpCisgICAgICAgICAgICAgICAgJGNvbW1p
dF91cGRhdGVbJ3RpbWUnXSA9ICRjb21taXRfaW5mb1sndGltZSddOworCisgICAgICAgICAgICBp
ZiAoYXJyYXlfa2V5X2V4aXN0cygnbWVzc2FnZScsICRjb21taXRfaW5mbykpCisgICAgICAgICAg
ICAgICAgJGNvbW1pdF91cGRhdGVbJ21lc3NhZ2UnXSA9ICRjb21taXRfaW5mb1snbWVzc2FnZSdd
OworCisgICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnb3JkZXInLCAkY29tbWl0X2lu
Zm8pKQorICAgICAgICAgICAgICAgICRjb21taXRfdXBkYXRlWydvcmRlciddID0gJGNvbW1pdF9p
bmZvWydvcmRlciddOworCisgICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygndGVzdGFi
aWxpdHlXYXJuaW5nJywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgICAgICAkY29tbWl0X3Vw
ZGF0ZVsndGVzdGFiaWxpdHlfd2FybmluZyddID0gJGNvbW1pdF9pbmZvWyd0ZXN0YWJpbGl0eVdh
cm5pbmcnXTsKKworICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2F1dGhvcicsICRj
b21taXRfaW5mbykpCisgICAgICAgICAgICAgICAgJGNvbW1pdF91cGRhdGVbJ2NvbW1pdHRlcidd
ID0gJGNvbW1pdF9pbmZvWydhdXRob3InXTsKKworICAgICAgICAgICAgaWYgKGFycmF5X2tleV9l
eGlzdHMoJ3ByZXZpb3VzQ29tbWl0JywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgICAgICAk
Y29tbWl0X3VwZGF0ZVsncHJldmlvdXNfY29tbWl0J10gPSAkdGhpcy0+cmVzb2x2ZV9wcmV2aW91
c19jb21taXQoJHJlcG9zaXRvcnlfaWQsICRjb21taXRfaW5mb1sncHJldmlvdXNDb21taXQnXSwg
ZmFsc2UpOworCisgICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnb3duZWRDb21taXRz
JywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ093bmVk
Q29tbWl0c1VwZGF0ZU5vdFN1cHBvcnRlZFlldCcsIGFycmF5KCdjb21taXQnID0+ICRjb21taXRf
aW5mbykpOworCisgICAgICAgICAgICBpZiAoIWNvdW50KCRjb21taXRfdXBkYXRlKSkKKyAgICAg
ICAgICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ05vdGhpbmdUb1VwZGF0ZScsIGFycmF5KCdjb21t
aXQnID0+ICRjb21taXRfaW5mbykpOworCisgICAgICAgICAgICBhcnJheV9wdXNoKCR0aGlzLT5j
b21taXRfaWRlbnRpZmllcl9hbmRfdXBkYXRlX2xpc3QsIGFycmF5KCRjb21taXRfaWRlbnRpZmll
ciwgJGNvbW1pdF91cGRhdGUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgZnVu
Y3Rpb24gdmFsaWRhdGVfY29tbWl0cygkY29tbWl0cykKKyAgICB7CisgICAgICAgIGZvcmVhY2gg
KCRjb21taXRzIGFzICRjb21taXRfaW5mbykgeworICAgICAgICAgICAgaWYgKCFhcnJheV9rZXlf
ZXhpc3RzKCdyZXBvc2l0b3J5JywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgICAgICBleGl0
X3dpdGhfZXJyb3IoJ01pc3NpbmdSZXBvc2l0b3J5TmFtZScsIGFycmF5KCdjb21taXQnID0+ICRj
b21taXRfaW5mbykpOworICAgICAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdyZXZpc2lv
bicsICRjb21taXRfaW5mbykpCisgICAgICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdNaXNz
aW5nUmV2aXNpb24nLCBhcnJheSgnY29tbWl0JyA9PiAkY29tbWl0X2luZm8pKTsKKyAgICAgICAg
ICAgIHJlcXVpcmVfZm9ybWF0KCdSZXZpc2lvbicsICRjb21taXRfaW5mb1sncmV2aXNpb24nXSwg
Jy9eW0EtWmEtejAtOSBcLl0rJC8nKTsKKyAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3Rz
KCdhdXRob3InLCAkY29tbWl0X2luZm8pICYmICFpc19hcnJheSgkY29tbWl0X2luZm9bJ2F1dGhv
ciddKSkKKyAgICAgICAgICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0ludmFsaWRBdXRob3JGb3Jt
YXQnLCBhcnJheSgnY29tbWl0JyA9PiAkY29tbWl0X2luZm8pKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHByaXZhdGUgZnVuY3Rpb24gZmluZF90b3BfbGV2ZWxfcmVwb3NpdG9yeSgkcmVwb3Np
dG9yeV9uYW1lKQorICAgIHsKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJHJlcG9zaXRv
cnlfbmFtZSwgJHRoaXMtPnRvcF9sZXZlbF9yZXBvc2l0b3J5X2lkX2J5X25hbWUpKQorICAgICAg
ICAgICAgcmV0dXJuICR0aGlzLT50b3BfbGV2ZWxfcmVwb3NpdG9yeV9pZF9ieV9uYW1lWyRyZXBv
c2l0b3J5X25hbWVdOworCisgICAgICAgICRyZXBvc2l0b3J5ID0gJHRoaXMtPmRiLT5zZWxlY3Rf
Zmlyc3Rfcm93KCdyZXBvc2l0b3JpZXMnLCAncmVwb3NpdG9yeScsIGFycmF5KCduYW1lJyA9PiAk
cmVwb3NpdG9yeV9uYW1lLCAnb3duZXInID0+IE5VTEwpKTsKKyAgICAgICAgaWYgKCEkcmVwb3Np
dG9yeSkKKyAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJvcignSW52YWxpZFJlcG9zaXRvcnknLCBh
cnJheSgncmVwb3NpdG9yeScgPT4gJHJlcG9zaXRvcnlfbmFtZSkpOworICAgICAgICAkdGhpcy0+
dG9wX2xldmVsX3JlcG9zaXRvcnlfaWRfYnlfbmFtZVskcmVwb3NpdG9yeV9uYW1lXSA9ICRyZXBv
c2l0b3J5WydyZXBvc2l0b3J5X2lkJ107CisgICAgICAgIHJldHVybiAkcmVwb3NpdG9yeVsncmVw
b3NpdG9yeV9pZCddOworICAgIH0KKworICAgIHByaXZhdGUgZnVuY3Rpb24gcmVzb2x2ZV9wcmV2
aW91c19jb21taXQoJHJlcG9zaXRvcnlfaWQsICRyZXZpc2lvbiwgJHJvbGxiYWNrX29uX2Vycm9y
KQorICAgIHsKKyAgICAgICAgJGNvbW1pdF9pZF9ieV9yZXZpc2lvbiA9ICZhcnJheV9lbnN1cmVf
aXRlbV9oYXNfYXJyYXkoJHRoaXMtPmNvbW1pdHNfYnlfcmVwb3NpdG9yeV9pZCwgJHJldmlzaW9u
KTsKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJHJldmlzaW9uLCAkY29tbWl0X2lkX2J5
X3JldmlzaW9uKSkKKyAgICAgICAgICAgIHJldHVybiAkY29tbWl0X2lkX2J5X3JldmlzaW9uWyRy
ZXZpc2lvbl07CisKKyAgICAgICAgJHByZXZpb3VzX2NvbW1pdCA9ICR0aGlzLT5kYi0+c2VsZWN0
X2ZpcnN0X3JvdygnY29tbWl0cycsICdjb21taXQnLCBhcnJheSgncmVwb3NpdG9yeScgPT4gJHJl
cG9zaXRvcnlfaWQsICdyZXZpc2lvbicgPT4gJHJldmlzaW9uKSk7CisgICAgICAgIGlmICghJHBy
ZXZpb3VzX2NvbW1pdCkgeworICAgICAgICAgICAgaWYgKCRyb2xsYmFja19vbl9lcnJvcikKKyAg
ICAgICAgICAgICAgICAkdGhpcy0+cm9sbGJhY2tfd2l0aF9lcnJvcignRmFpbGVkVG9GaW5kUHJl
dmlvdXNDb21taXQnLCBhcnJheSgncmV2aXNpb24nID0+ICRyZXZpc2lvbikpOworICAgICAgICAg
ICAgZXhpdF93aXRoX2Vycm9yKCdGYWlsZWRUb0ZpbmRQcmV2aW91c0NvbW1pdCcsIGFycmF5KCdy
ZXZpc2lvbicgPT4gJHJldmlzaW9uKSk7CisgICAgICAgIH0KKworICAgICAgICAkY29tbWl0X2lk
X2J5X3JldmlzaW9uWyRyZXZpc2lvbl0gPSAkcHJldmlvdXNfY29tbWl0Wydjb21taXRfaWQnXTsK
KyAgICAgICAgcmV0dXJuICRwcmV2aW91c19jb21taXRbJ2NvbW1pdF9pZCddOworICAgIH0KKwor
ICAgIHByaXZhdGUgZnVuY3Rpb24gcmVzb2x2ZV9jb21taXR0ZXJfYnlfcmVwb3NpdG9yeV9pZF9h
bmRfYXV0aG9yX2FjY291bnQoJHJlcG9zaXRvcnlfaWQsICRhdXRob3IpCisgICAgeworICAgICAg
ICAkY29tbWl0dGVyX2lkX2J5X2FjY291bnQgPSAmYXJyYXlfZW5zdXJlX2l0ZW1faGFzX2FycmF5
KCR0aGlzLT5hdXRob3JzX2J5X3JlcG9zaXRvcnlfaWQsICRyZXBvc2l0b3J5X2lkKTsKKyAgICAg
ICAgJGFjY291bnQgPSBhcnJheV9nZXQoJGF1dGhvciwgJ2FjY291bnQnKTsKKyAgICAgICAgaWYg
KGFycmF5X2tleV9leGlzdHMoJGFjY291bnQsICRjb21taXR0ZXJfaWRfYnlfYWNjb3VudCkpCisg
ICAgICAgICAgICByZXR1cm4gJGNvbW1pdHRlcl9pZF9ieV9hY2NvdW50WyRhY2NvdW50XTsKKwor
ICAgICAgICAkY29tbWl0dGVyX2RhdGEgPSBhcnJheSgncmVwb3NpdG9yeScgPT4gJHJlcG9zaXRv
cnlfaWQsICdhY2NvdW50JyA9PiAkYWNjb3VudCk7CisgICAgICAgICRuYW1lID0gYXJyYXlfZ2V0
KCRhdXRob3IsICduYW1lJyk7CisgICAgICAgIGlmICgkbmFtZSkKKyAgICAgICAgICAgICRjb21t
aXR0ZXJfZGF0YVsnbmFtZSddID0gJG5hbWU7CisgICAgICAgICRjb21taXR0ZXJfaWQgPSAkdGhp
cy0+ZGItPnVwZGF0ZV9vcl9pbnNlcnRfcm93KCdjb21taXR0ZXJzJywgJ2NvbW1pdHRlcicsIGFy
cmF5KCdyZXBvc2l0b3J5JyA9PiAkcmVwb3NpdG9yeV9pZCwgJ2FjY291bnQnID0+ICRhY2NvdW50
KSwgJGNvbW1pdHRlcl9kYXRhKTsKKworICAgICAgICBpZiAoISRjb21taXR0ZXJfaWQpCisgICAg
ICAgICAgICAkdGhpcy0+cm9sbGJhY2tfd2l0aF9lcnJvcignRmFpbGVkVG9JbnNlcnRDb21taXR0
ZXInLCBhcnJheSgnY29tbWl0dGVyJyA9PiAkY29tbWl0dGVyX2RhdGEpKTsKKyAgICAgICAgJGNv
bW1pdHRlcl9pZF9ieV9hY2NvdW50WyRhY2NvdW50XSA9ICRjb21taXR0ZXJfaWQ7CisgICAgICAg
IHJldHVybiAkY29tbWl0dGVyX2lkOworICAgIH0KKworICAgIHByaXZhdGUgZnVuY3Rpb24gcm9s
bGJhY2tfd2l0aF9lcnJvcigkbWVzc2FnZSwgJGRldGFpbHMpCisgICAgeworICAgICAgICAkdGhp
cy0+ZGItPnJvbGxiYWNrX3RyYW5zYWN0aW9uKCk7CisgICAgICAgIGV4aXRfd2l0aF9lcnJvcigk
bWVzc2FnZSwgJGRldGFpbHMpOworICAgIH0KKworICAgIHByaXZhdGUgZnVuY3Rpb24gcmVzZXQo
KQorICAgIHsKKyAgICAgICAgJHRoaXMtPnRvcF9sZXZlbF9yZXBvc2l0b3J5X2lkX2J5X25hbWUg
PSBhcnJheSgpOworICAgICAgICAkdGhpcy0+b3duZWRfcmVwb3NpdG9yeV9ieV9uYW1lX2FuZF9v
d25lcl9pZCA9IGFycmF5KCk7CisgICAgICAgICR0aGlzLT5jb21taXRzX2J5X3JlcG9zaXRvcnlf
aWQgPSBhcnJheSgpOworICAgICAgICAkdGhpcy0+YXV0aG9yc19ieV9yZXBvc2l0b3J5X2lkID0g
YXJyYXkoKTsKKyAgICAgICAgJHRoaXMtPmNvbW1pdF9pZGVudGlmaWVyX2FuZF91cGRhdGVfbGlz
dCA9IGFycmF5KCk7CisgICAgICAgICR0aGlzLT5jb21taXRfZGF0YV9saXN0ID0gYXJyYXkoKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiB1cGRhdGVfb3JfaW5zZXJ0X2NvbW1pdHMoJGNvbW1pdHMp
CisgICAgeworICAgICAgICAkdGhpcy0+cHJlcGFyZV9jb21taXRfdXBkYXRlX29yX2luc2VydCgk
Y29tbWl0cyk7CisKKyAgICAgICAgJHRoaXMtPmRiLT5iZWdpbl90cmFuc2FjdGlvbigpOworICAg
ICAgICBmb3JlYWNoICgkdGhpcy0+Y29tbWl0X2RhdGFfbGlzdCBhcyBsaXN0KCRjb21taXRfZGF0
YSwgJG93bmVkX2NvbW1pdF9saXN0KSkgeworICAgICAgICAgICAgbGlzdCgkY29tbWl0X2lkLCAk
cmVwb3NpdG9yeV9pZCkgPSAkdGhpcy0+dXBkYXRlX29yX2luc2VydF9jb21taXQoJGNvbW1pdF9k
YXRhLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgIGZvcmVhY2ggKCRvd25lZF9jb21taXRfbGlz
dCBhcyAkb3duZWRfY29tbWl0X2RhdGEpCisgICAgICAgICAgICAgICAgJHRoaXMtPnVwZGF0ZV9v
cl9pbnNlcnRfY29tbWl0KCRvd25lZF9jb21taXRfZGF0YSwgJGNvbW1pdF9pZCwgJHJlcG9zaXRv
cnlfaWQpOworICAgICAgICB9CisgICAgICAgICR0aGlzLT5kYi0+Y29tbWl0X3RyYW5zYWN0aW9u
KCk7CisgICAgICAgICR0aGlzLT5yZXNldCgpOworICAgIH0KKworICAgIHByaXZhdGUgZnVuY3Rp
b24gcHJlcGFyZV9jb21taXRfdXBkYXRlX29yX2luc2VydCgkY29tbWl0cykKKyAgICB7CisgICAg
ICAgICR0aGlzLT52YWxpZGF0ZV9jb21taXRzKCRjb21taXRzKTsKKyAgICAgICAgZm9yZWFjaCAo
JGNvbW1pdHMgYXMgJGNvbW1pdF9pbmZvKSB7CisgICAgICAgICAgICAkY29tbWl0X2RhdGEgPSAk
dGhpcy0+cHJlcGFyZV9zaW5nbGVfY29tbWl0X2RhdGEoJGNvbW1pdF9pbmZvLCBmYWxzZSk7Cisg
ICAgICAgICAgICAkb3duZWRfY29tbWl0X2xpc3QgPSBhcnJheSgpOworICAgICAgICAgICAgaWYg
KGFycmF5X2tleV9leGlzdHMoJ293bmVkQ29tbWl0cycsICRjb21taXRfaW5mbykpIHsKKyAgICAg
ICAgICAgICAgICBmb3JlYWNoKCRjb21taXRfaW5mb1snb3duZWRDb21taXRzJ10gYXMgJG93bmVk
X2NvbW1pdF9yZXBvc2l0b3J5X25hbWUgPT4gJG93bmVkX2NvbW1pdF9pbmZvKSB7CisgICAgICAg
ICAgICAgICAgICAgICRvd25lZF9jb21taXRfaW5mb1sncmVwb3NpdG9yeSddID0gJG93bmVkX2Nv
bW1pdF9yZXBvc2l0b3J5X25hbWU7CisgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJG93
bmVkX2NvbW1pdF9saXN0LCAkdGhpcy0+cHJlcGFyZV9zaW5nbGVfY29tbWl0X2RhdGEoJG93bmVk
X2NvbW1pdF9pbmZvLCB0cnVlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYXJyYXlfcHVzaCgkdGhpcy0+Y29tbWl0X2RhdGFfbGlzdCwgYXJyYXkoJGNv
bW1pdF9kYXRhLCAkb3duZWRfY29tbWl0X2xpc3QpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHByaXZhdGUgZnVuY3Rpb24gcHJlcGFyZV9zaW5nbGVfY29tbWl0X2RhdGEoJGNvbW1pdF9pbmZv
LCAkaXNfb3duZWRfY29tbWl0KQorICAgIHsKKyAgICAgICAgJGNvbW1pdF9kYXRhID0gYXJyYXko
CisgICAgICAgICAgICAncmVwb3NpdG9yeScgPT4gJGNvbW1pdF9pbmZvWydyZXBvc2l0b3J5J10s
CisgICAgICAgICAgICAncmV2aXNpb24nID0+ICRjb21taXRfaW5mb1sncmV2aXNpb24nXSwKKyAg
ICAgICAgICAgICdyZXBvcnRlZCcgPT4gdHJ1ZSwKKyAgICAgICAgKTsKKworICAgICAgICBpZiAo
YXJyYXlfa2V5X2V4aXN0cygncHJldmlvdXNDb21taXQnLCAkY29tbWl0X2luZm8pKQorICAgICAg
ICAgICAgJGNvbW1pdF9kYXRhWydwcmV2aW91c19jb21taXQnXSA9ICRjb21taXRfaW5mb1sncHJl
dmlvdXNDb21taXQnXTsKKworICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnb3JkZXInLCAk
Y29tbWl0X2luZm8pKQorICAgICAgICAgICAgJGNvbW1pdF9kYXRhWydvcmRlciddID0gJGNvbW1p
dF9pbmZvWydvcmRlciddOworCisgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCd0aW1lJywg
JGNvbW1pdF9pbmZvKSkgeworICAgICAgICAgICAgaWYgKCRpc19vd25lZF9jb21taXQpCisgICAg
ICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdPd25lZENvbW1pdFNob3VsZE5vdENvbnRhaW5U
aW1lc3RhbXAnLCBhcnJheSgnY29tbWl0JyA9PiAkY29tbWl0X2luZm8pKTsKKyAgICAgICAgICAg
ICRjb21taXRfZGF0YVsndGltZSddID0gJGNvbW1pdF9pbmZvWyd0aW1lJ107CisgICAgICAgIH0K
KworICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnYXV0aG9yJywgJGNvbW1pdF9pbmZvKSkK
KyAgICAgICAgICAgICRjb21taXRfZGF0YVsnY29tbWl0dGVyJ10gPSAkY29tbWl0X2luZm9bJ2F1
dGhvciddOworCisgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdtZXNzYWdlJywgJGNvbW1p
dF9pbmZvKSkKKyAgICAgICAgICAgICRjb21taXRfZGF0YVsnbWVzc2FnZSddID0gJGNvbW1pdF9p
bmZvWydtZXNzYWdlJ107CisKKyAgICAgICAgcmV0dXJuICRjb21taXRfZGF0YTsKKyAgICB9CisK
KyAgICBwcml2YXRlIGZ1bmN0aW9uIHVwZGF0ZV9vcl9pbnNlcnRfY29tbWl0KCRjb21taXRfZGF0
YSwgJG93bmVyX2NvbW1pdF9pZCwgJG93bmVyX3JlcG9zaXRvcnlfaWQpCisgICAgeworICAgICAg
ICAkcmVwb3NpdG9yeV9pZCA9ICR0aGlzLT5yZXNvbHZlX3JlcG9zaXRvcnkoJGNvbW1pdF9kYXRh
WydyZXBvc2l0b3J5J10sICRvd25lcl9yZXBvc2l0b3J5X2lkKTsKKyAgICAgICAgJGNvbW1pdF9k
YXRhWydyZXBvc2l0b3J5J10gPSAkcmVwb3NpdG9yeV9pZDsKKworICAgICAgICBpZiAoYXJyYXlf
a2V5X2V4aXN0cygncHJldmlvdXNfY29tbWl0JywgJGNvbW1pdF9kYXRhKSkKKyAgICAgICAgICAg
ICRjb21taXRfZGF0YVsncHJldmlvdXNfY29tbWl0J10gPSAkdGhpcy0+cmVzb2x2ZV9wcmV2aW91
c19jb21taXQoJHJlcG9zaXRvcnlfaWQsICRjb21taXRfZGF0YVsncHJldmlvdXNfY29tbWl0J10s
IHRydWUpOworCisgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdjb21taXR0ZXInLCAkY29t
bWl0X2RhdGEpKQorICAgICAgICAgICAgJGNvbW1pdF9kYXRhWydjb21taXR0ZXInXSA9ICR0aGlz
LT5yZXNvbHZlX2NvbW1pdHRlcl9ieV9yZXBvc2l0b3J5X2lkX2FuZF9hdXRob3JfYWNjb3VudCgk
cmVwb3NpdG9yeV9pZCwgJGNvbW1pdF9kYXRhWydjb21taXR0ZXInXSk7CisKKyAgICAgICAgJGlu
c2VydGVkX2NvbW1pdF9pZCA9ICR0aGlzLT5kYi0+dXBkYXRlX29yX2luc2VydF9yb3coJ2NvbW1p
dHMnLCAnY29tbWl0JywgYXJyYXkoJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLCAncmV2
aXNpb24nID0+ICRjb21taXRfZGF0YVsncmV2aXNpb24nXSksICRjb21taXRfZGF0YSk7CisgICAg
ICAgIGlmICghJGluc2VydGVkX2NvbW1pdF9pZCkKKyAgICAgICAgICAgICR0aGlzLT5yb2xsYmFj
a193aXRoX2Vycm9yKCdGYWlsZWRUb0luc2VydENvbW1pdCcsIGFycmF5KCdjb21taXQnID0+ICRj
b21taXRfZGF0YSkpOworCisgICAgICAgIGlmICgkb3duZXJfY29tbWl0X2lkKQorICAgICAgICAg
ICAgJHRoaXMtPmRiLT5zZWxlY3Rfb3JfaW5zZXJ0X3JvdygnY29tbWl0X293bmVyc2hpcHMnLCAn
Y29tbWl0JywgYXJyYXkoJ293bmVyJyA9PiAkb3duZXJfY29tbWl0X2lkLCAnb3duZWQnID0+ICRp
bnNlcnRlZF9jb21taXRfaWQpLCBOVUxMLCAnKicpOworCisgICAgICAgIHJldHVybiBhcnJheSgk
aW5zZXJ0ZWRfY29tbWl0X2lkLCAkcmVwb3NpdG9yeV9pZCk7CisgICAgfQorCisgICAgcHJpdmF0
ZSBmdW5jdGlvbiByZXNvbHZlX3JlcG9zaXRvcnkoJHJlcG9zaXRvcnlfbmFtZSwgJG93bmVyX3Jl
cG9zaXRvcnlfaWQpCisgICAgeworICAgICAgICBpZiAoJG93bmVyX3JlcG9zaXRvcnlfaWQpCisg
ICAgICAgICAgICAkcmVwb3NpdG9yeV9pZF9ieV9uYW1lID0gJmFycmF5X2Vuc3VyZV9pdGVtX2hh
c19hcnJheSgkdGhpcy0+b3duZWRfcmVwb3NpdG9yeV9ieV9uYW1lX2FuZF9vd25lcl9pZCwgJG93
bmVyX3JlcG9zaXRvcnlfaWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAkcmVwb3NpdG9y
eV9pZF9ieV9uYW1lID0gJiR0aGlzLT50b3BfbGV2ZWxfcmVwb3NpdG9yeV9pZF9ieV9uYW1lOwor
CisgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRyZXBvc2l0b3J5X25hbWUsICRyZXBvc2l0
b3J5X2lkX2J5X25hbWUpKQorICAgICAgICAgICAgcmV0dXJuICRyZXBvc2l0b3J5X2lkX2J5X25h
bWVbJHJlcG9zaXRvcnlfbmFtZV07CisKKyAgICAgICAgJHJlcG9zaXRvcnlfaWQgPSAkdGhpcy0+
ZGItPnNlbGVjdF9vcl9pbnNlcnRfcm93KCdyZXBvc2l0b3JpZXMnLCAncmVwb3NpdG9yeScsIGFy
cmF5KCduYW1lJyA9PiAkcmVwb3NpdG9yeV9uYW1lLCAnb3duZXInID0+ICRvd25lcl9yZXBvc2l0
b3J5X2lkKSk7CisgICAgICAgIGlmICghJHJlcG9zaXRvcnlfaWQpCisgICAgICAgICAgICAkdGhp
cy0+cm9sbGJhY2tfd2l0aF9lcnJvcignRmFpbGVkVG9JbnNlcnRSZXBvc2l0b3J5JywgYXJyYXko
J3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X25hbWUpKTsKKyAgICAgICAgJHJlcG9zaXRvcnlf
aWRfYnlfbmFtZVskcmVwb3NpdG9yeV9uYW1lXSA9ICRyZXBvc2l0b3J5X2lkOworICAgICAgICBy
ZXR1cm4gJHJlcG9zaXRvcnlfaWQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxz
L2NvbW1pdC1sb2cuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVs
cy9jb21taXQtbG9nLmpzCmluZGV4IDEzMGNiOTBmMTQ5OGFlYmUzMDk5MDdmNDNjNTUzNWU0NzAz
YmVjMzguLjJmYTJlYTA2OTQ2ODhiODk2NDlmYWJjZGFhMjBmMmFjOGQ2ZmMwY2EgMTAwNjQ0Ci0t
LSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cu
anMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0
LWxvZy5qcwpAQCAtMjksMTEgKzI5LDE0IEBAIGNsYXNzIENvbW1pdExvZyBleHRlbmRzIERhdGFN
b2RlbE9iamVjdCB7CiAgICAgICAgICAgICB0aGlzLl9yYXdEYXRhLm93bnNDb21taXRzID0gcmF3
RGF0YS5vd25zQ29tbWl0czsKICAgICAgICAgaWYgKHJhd0RhdGEub3JkZXIpCiAgICAgICAgICAg
ICB0aGlzLl9yYXdEYXRhLm9yZGVyID0gcmF3RGF0YS5vcmRlcjsKKyAgICAgICAgaWYgKHJhd0Rh
dGEudGVzdGFiaWxpdHlXYXJuaW5nKQorICAgICAgICAgICAgdGhpcy5fcmF3RGF0YS50ZXN0YWJp
bGl0eVdhcm5pbmcgPSByYXdEYXRhLnRlc3RhYmlsaXR5V2FybmluZzsKICAgICB9CiAKICAgICBy
ZXBvc2l0b3J5KCkgeyByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeTsgfQogICAgIHRpbWUoKSB7IHJl
dHVybiBuZXcgRGF0ZSh0aGlzLl9yYXdEYXRhWyd0aW1lJ10pOyB9CiAgICAgaGFzQ29tbWl0VGlt
ZSgpIHsgcmV0dXJuIHRoaXMuX3Jhd0RhdGFbJ3RpbWUnXSA+IDAgJiYgdGhpcy5fcmF3RGF0YVsn
dGltZSddICE9IG51bGw7IH0KKyAgICB0ZXN0YWJpbGl0eVdhcm5pbmcoKSB7IHJldHVybiB0aGlz
Ll9yYXdEYXRhWyd0ZXN0YWJpbGl0eVdhcm5pbmcnXTsgfQogICAgIGF1dGhvcigpIHsgcmV0dXJu
IHRoaXMuX3Jhd0RhdGFbJ2F1dGhvck5hbWUnXTsgfQogICAgIHJldmlzaW9uKCkgeyByZXR1cm4g
dGhpcy5fcmF3RGF0YVsncmV2aXNpb24nXTsgfQogICAgIG1lc3NhZ2UoKSB7IHJldHVybiB0aGlz
Ll9yYXdEYXRhWydtZXNzYWdlJ107IH0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzCmluZGV4IDk0YWNjNTMzMjg5OGNi
NDkwMGFmZTc4YjdmNmNiNjk3OWZjMzM1MTYuLjQ1OTQ2Yzg4N2UyNGY3Mzk5NTVhOGI1MmJiZTVk
YjdkZjE3YTQ1ODggMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvbW9kZWxzL2NvbW1pdC1zZXQuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcwpAQCAtNzEsNiArNzEsOCBAQCBjbGFzcyBDb21t
aXRTZXQgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgIG93bmVyQ29tbWl0Rm9yUmVwb3Np
dG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRPd25lck1h
cC5nZXQocmVwb3NpdG9yeSk7IH0KICAgICB0b3BMZXZlbFJlcG9zaXRvcmllcygpIHsgcmV0dXJu
IFJlcG9zaXRvcnkuc29ydEJ5TmFtZVByZWZlcnJpbmdPbmVzV2l0aFVSTCh0aGlzLl9yZXBvc2l0
b3JpZXMuZmlsdGVyKChyZXBvc2l0b3J5KSA9PiAhdGhpcy5vd25lclJldmlzaW9uRm9yUmVwb3Np
dG9yeShyZXBvc2l0b3J5KSkpOyB9CiAgICAgb3duZWRSZXBvc2l0b3JpZXNGb3JPd25lclJlcG9z
aXRvcnkocmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fb3duZXJSZXBvc2l0b3J5VG9Pd25lZFJl
cG9zaXRvcmllc01hcC5nZXQocmVwb3NpdG9yeSk7IH0KKyAgICBjb21taXRzV2l0aFRlc3RhYmls
aXR5V2FybmluZ3MoKSB7IHJldHVybiB0aGlzLmNvbW1pdHMoKS5maWx0ZXIoKGNvbW1pdCkgPT4g
ISFjb21taXQudGVzdGFiaWxpdHlXYXJuaW5nKCkpOyB9CisgICAgY29tbWl0cygpIHsgcmV0dXJu
ICBBcnJheS5mcm9tKHRoaXMuX3JlcG9zaXRvcnlUb0NvbW1pdE1hcC52YWx1ZXMoKSk7IH0KIAog
ICAgIHJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KQogICAgIHsKQEAgLTM4Nyw2ICsz
ODksOSBAQCBjbGFzcyBJbnRlcm1lZGlhdGVDb21taXRTZXQgewogICAgICAgICByZXR1cm4gUHJv
bWlzZS5hbGwoZmV0Y2hpbmdQcm9taXNlcyk7CiAgICAgfQogCisgICAgY29tbWl0c1dpdGhUZXN0
YWJpbGl0eVdhcm5pbmdzKCkgeyByZXR1cm4gdGhpcy5jb21taXRzKCkuZmlsdGVyKChjb21taXQp
ID0+ICEhY29tbWl0LnRlc3RhYmlsaXR5V2FybmluZygpKTsgfQorICAgIGNvbW1pdHMoKSB7IHJl
dHVybiAgQXJyYXkuZnJvbSh0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkudmFsdWVzKCkpOyB9CisK
ICAgICBfZmV0Y2hDb21taXRMb2dBbmRPd25lZENvbW1pdHMocmVwb3NpdG9yeSwgcmV2aXNpb24p
CiAgICAgewogICAgICAgICByZXR1cm4gQ29tbWl0TG9nLmZldGNoRm9yU2luZ2xlUmV2aXNpb24o
cmVwb3NpdG9yeSwgcmV2aXNpb24pLnRoZW4oKGNvbW1pdHMpID0+IHsKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvYXBpLXVwZGF0ZS1jb21taXRzLXRl
c3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0cy9hcGktdXBkYXRl
LWNvbW1pdHMtdGVzdHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE0MWMxZTMxODQ0NGViY2QxYzMwMTE4NzNm
MDFmNWJiZGYyNjUzMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9zZXJ2ZXItdGVzdHMvYXBpLXVwZGF0ZS1jb21taXRzLXRlc3RzLmpzCkBAIC0wLDAgKzEsMTYz
IEBACisndXNlIHN0cmljdCc7CisKK2NvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwor
Citjb25zdCBUZXN0U2VydmVyID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMvdGVzdC1zZXJ2ZXIuanMn
KTsKK2NvbnN0IGFkZFNsYXZlRm9yUmVwb3J0ID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMvY29tbW9u
LW9wZXJhdGlvbnMuanMnKS5hZGRTbGF2ZUZvclJlcG9ydDsKK2NvbnN0IHByZXBhcmVTZXJ2ZXJU
ZXN0ID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMvY29tbW9uLW9wZXJhdGlvbnMuanMnKS5wcmVwYXJl
U2VydmVyVGVzdDsKK2NvbnN0IGFzc2VydFRocm93cyA9IHJlcXVpcmUoJy4vcmVzb3VyY2VzL2Nv
bW1vbi1vcGVyYXRpb25zLmpzJykuYXNzZXJ0VGhyb3dzOworCitkZXNjcmliZSgiL2FwaS91cGRh
dGUtY29tbWl0cyIsIGZ1bmN0aW9uICgpIHsKKyAgICBwcmVwYXJlU2VydmVyVGVzdCh0aGlzKTsK
KworICAgIGNvbnN0IHN1YnZlcnNpb25Db21taXRzID0geworICAgICAgICAic2xhdmVOYW1lIjog
InNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisg
ICAgICAgICJjb21taXRzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJyZXBv
c2l0b3J5IjogIldlYktpdCIsCisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0OCIs
CisgICAgICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0wMS0yMFQwMjo1MjozNC41NzdaIiwKKyAg
ICAgICAgICAgICAgICAiYXV0aG9yIjogeyJuYW1lIjogIlphbGFuIEJ1anRhcyIsICJhY2NvdW50
IjogInphbGFuQGFwcGxlLmNvbSJ9LAorICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImEgbWVz
c2FnZSIsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJy
ZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0
OSIsCisgICAgICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0wMS0yMFQwMzoyMzo1MC42NDVaIiwK
KyAgICAgICAgICAgICAgICAiYXV0aG9yIjogeyJuYW1lIjogIkNocmlzIER1bWV6IiwgImFjY291
bnQiOiAiY2R1bWV6QGFwcGxlLmNvbSJ9LAorICAgICAgICAgICAgICAgICJtZXNzYWdlIjogInNv
bWUgbWVzc2FnZSIsCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9OworCisgICAgY29u
c3QgY29tbWl0c1VwZGF0ZSA9IHsKKyAgICAgICAgInNsYXZlTmFtZSI6ICJzb21lU2xhdmUiLAor
ICAgICAgICAic2xhdmVQYXNzd29yZCI6ICJzb21lUGFzc3dvcmQiLAorICAgICAgICAiY29tbWl0
cyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAicmVwb3NpdG9yeSI6ICJXZWJL
aXQiLAorICAgICAgICAgICAgICAgICJyZXZpc2lvbiI6ICIyMTA5NDgiLAorICAgICAgICAgICAg
ICAgICJ0ZXN0YWJpbGl0eVdhcm5pbmciOiAiQnJlYWtzIGJ1aWxkcyIsCisgICAgICAgICAgICAg
ICAgIm1lc3NhZ2UiOiAiYW5vdGhlciBtZXNzYWdlIiwKKyAgICAgICAgICAgICAgICAib3JkZXIi
OiAyMTA5NDgsCisgICAgICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0wMS0yMFQwMzo1MjozNC41
NzdaIiwKKyAgICAgICAgICAgICAgICAiYXV0aG9yIjogeyJuYW1lIjogIkNocmlzIER1bWV6Iiwg
ImFjY291bnQiOiAiY2R1bWV6QGFwcGxlLmNvbSJ9LAorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAicmVwb3NpdG9yeSI6ICJXZWJLaXQiLAorICAgICAgICAg
ICAgICAgICJyZXZpc2lvbiI6ICIyMTA5NDkiLAorICAgICAgICAgICAgICAgICJwcmV2aW91c0Nv
bW1pdCI6ICIyMTA5NDgiLAorICAgICAgICAgICAgICAgICJ0ZXN0YWJpbGl0eVdhcm5pbmciOiAi
Q3Jhc2hlcyBXZWJLaXQiLAorICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImFub3RoZXIgbWVz
c2FnZSIsCisgICAgICAgICAgICAgICAgIm9yZGVyIjogMjEwOTQ5LAorICAgICAgICAgICAgICAg
ICJ0aW1lIjogIjIwMTctMDEtMjBUMDQ6MjM6NTAuNjQ1WiIsCisgICAgICAgICAgICAgICAgImF1
dGhvciI6IHsibmFtZSI6ICJaYWxhbiBCdWp0YXMiLCAiYWNjb3VudCI6ICJ6YWxhbkBhcHBsZS5j
b20ifSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH07CisKKworICAgIGNvbnN0IGNv
bW1pdHNVcGRhdGVXaXRoTWlzc2luZ1JldmlzaW9uID0geworICAgICAgICAic2xhdmVOYW1lIjog
InNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisg
ICAgICAgICJjb21taXRzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJyZXBv
c2l0b3J5IjogIldlYktpdCIsCisgICAgICAgICAgICAgICAgInRlc3RhYmlsaXR5V2FybmluZyI6
ICJCcmVha3MgYnVpbGRzIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfTsKKworICAg
IGNvbnN0IGNvbW1pdHNVcGRhdGVXaXRoTWlzc2luZ1JlcG9zaXRvcnkgPSB7CisgICAgICAgICJz
bGF2ZU5hbWUiOiAic29tZVNsYXZlIiwKKyAgICAgICAgInNsYXZlUGFzc3dvcmQiOiAic29tZVBh
c3N3b3JkIiwKKyAgICAgICAgImNvbW1pdHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgInJldmlzaW9uIjogIjIxMDk0OCIsCisgICAgICAgICAgICAgICAgInRlc3RhYmlsaXR5
V2FybmluZyI6ICJCcmVha3MgYnVpbGRzIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAg
fTsKKworICAgIGNvbnN0IGNvbW1pdHNVcGRhdGVXaXRob3V0QW55VXBkYXRlID0geworICAgICAg
ICAic2xhdmVOYW1lIjogInNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2ZVBhc3N3b3JkIjogInNv
bWVQYXNzd29yZCIsCisgICAgICAgICJjb21taXRzIjogWworICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAgICAgICAgICAgICAgInJldmlz
aW9uIjogIjIxMDk0OCIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH07CisKKyAgICBj
b25zdCBjb21taXRzVXBkYXRlV2l0aE93bmVkQ29tbWl0c1VwZGF0ZSA9IHsKKyAgICAgICAgInNs
YXZlTmFtZSI6ICJzb21lU2xhdmUiLAorICAgICAgICAic2xhdmVQYXNzd29yZCI6ICJzb21lUGFz
c3dvcmQiLAorICAgICAgICAiY29tbWl0cyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAicmVwb3NpdG9yeSI6ICJXZWJLaXQiLAorICAgICAgICAgICAgICAgICJyZXZpc2lvbiI6
ICIyMTA5NDgiLAorICAgICAgICAgICAgICAgICJvd25lZENvbW1pdHMiOiBbXSwKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgXQorICAgIH07CisKKyAgICBhc3luYyBmdW5jdGlvbiBzZXRVcFRlc3Rz
V2l0aEV4cGVjdGVkU3RhdHVzKGNvbW1pdHNVcGRhdGUsIGV4cGVjdGVkU3RhdHVzKQorICAgIHsK
KyAgICAgICAgYXdhaXQgYWRkU2xhdmVGb3JSZXBvcnQoc3VidmVyc2lvbkNvbW1pdHMpOworICAg
ICAgICBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLnBvc3RKU09OKCcvYXBpL3JlcG9ydC1j
b21taXRzLycsIHN1YnZlcnNpb25Db21taXRzKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0
IFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL1dlYktpdC8nKTsK
KyAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVzJ10sICdPSycpOworICAgICAgICBs
ZXQgY29tbWl0cyA9IHJlc3VsdFsnY29tbWl0cyddOworICAgICAgICBhc3NlcnQuZXF1YWwoY29t
bWl0cy5sZW5ndGgsIDIpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1swXS50ZXN0YWJp
bGl0eVdhcm5pbmcsIG51bGwpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sxXS50ZXN0
YWJpbGl0eVdhcm5pbmcsIG51bGwpOworCisgICAgICAgIHJlc3VsdCA9IGF3YWl0IFRlc3RTZXJ2
ZXIucmVtb3RlQVBJKCkucG9zdEpTT04oJy9hcGkvdXBkYXRlLWNvbW1pdHMnLCBjb21taXRzVXBk
YXRlKTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVzJ10sIGV4cGVjdGVkU3Rh
dHVzKTsKKyAgICAgICAgcmVzdWx0ID0gYXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRK
U09OKCcvYXBpL2NvbW1pdHMvV2ViS2l0LycpOworICAgICAgICByZXR1cm4gcmVzdWx0Wydjb21t
aXRzJ107CisgICAgfQorCisgICAgYXN5bmMgZnVuY3Rpb24gdGVzdFdpdGhFeHBlY3RlZEZhaWx1
cmUoY29tbWl0c1VwZGF0ZSwgZXhwZWN0ZWRGYWlsdXJlTmFtZSkKKyAgICB7CisgICAgICAgIGNv
bnN0IGNvbW1pdHMgPSBhd2FpdCBzZXRVcFRlc3RzV2l0aEV4cGVjdGVkU3RhdHVzKGNvbW1pdHNV
cGRhdGUsIGV4cGVjdGVkRmFpbHVyZU5hbWUpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0
cy5sZW5ndGgsIDIpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1swXS50ZXN0YWJpbGl0
eVdhcm5pbmcsIG51bGwpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sxXS50ZXN0YWJp
bGl0eVdhcm5pbmcsIG51bGwpOworICAgIH0KKworICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoICJN
aXNzaW5nUmV2aXNpb24iIGlmIGNvbW1pdCB1cGRhdGUgZG9lcyBub3QgaGF2ZSBjb21taXQgcmV2
aXNpb24gc3BlY2lmaWVkJywgYXN5bmMgKCkgPT4geworICAgICAgICBhd2FpdCB0ZXN0V2l0aEV4
cGVjdGVkRmFpbHVyZShjb21taXRzVXBkYXRlV2l0aE1pc3NpbmdSZXZpc2lvbiwgJ01pc3NpbmdS
ZXZpc2lvbicpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggIk1pc3NpbmdS
ZXBvc2l0b3J5TmFtZSIgaWYgY29tbWl0IHVwZGF0ZSBkb2VzIG5vdCBoYXZlIGNvbW1pdCByZXZp
c2lvbiBzcGVjaWZpZWQnLCBhc3luYyAoKSA9PiB7CisgICAgICAgIGF3YWl0IHRlc3RXaXRoRXhw
ZWN0ZWRGYWlsdXJlKGNvbW1pdHNVcGRhdGVXaXRoTWlzc2luZ1JlcG9zaXRvcnksICdNaXNzaW5n
UmVwb3NpdG9yeU5hbWUnKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoICJO
b3RoaW5nVG9VcGRhdGUiIGlmIGNvbW1pdCB1cGRhdGUgZG9lcyBub3QgaGF2ZSBjb21taXQgcmV2
aXNpb24gc3BlY2lmaWVkJywgYXN5bmMgKCkgPT4geworICAgICAgICBhd2FpdCB0ZXN0V2l0aEV4
cGVjdGVkRmFpbHVyZShjb21taXRzVXBkYXRlV2l0aG91dEFueVVwZGF0ZSwgJ05vdGhpbmdUb1Vw
ZGF0ZScpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggIk93bmVkQ29tbWl0
c1VwZGF0ZU5vdFN1cHBvcnRlZFlldCIgd2hlbiB0cnlpbmcgdG8gdXBkYXRlIG93bmVkIGNvbW1p
dHMgaW5mbycsIGFzeW5jICgpID0+IHsKKyAgICAgICAgYXdhaXQgdGVzdFdpdGhFeHBlY3RlZEZh
aWx1cmUoY29tbWl0c1VwZGF0ZVdpdGhPd25lZENvbW1pdHNVcGRhdGUsICdPd25lZENvbW1pdHNV
cGRhdGVOb3RTdXBwb3J0ZWRZZXQnKTsKKyAgICB9KTsKKworICAgIGl0KCJzaG91bGQgYmUgYWJs
ZSB0byB1cGRhdGUgY29tbWl0cyBtZXNzYWdlLCB0aW1lLCBvcmRlciwgYXV0aG9yIGFuZCBwcmV2
aW91cyBjb21taXQiLCBhc3luYyAoKSA9PiB7CisgICAgICAgIGNvbnN0IGNvbW1pdHMgPSBhd2Fp
dCBzZXRVcFRlc3RzV2l0aEV4cGVjdGVkU3RhdHVzKGNvbW1pdHNVcGRhdGUsICdPSycpOworCisg
ICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzLmxlbmd0aCwgMik7CisgICAgICAgIGFzc2VydC5l
cXVhbChjb21taXRzWzBdLnRlc3RhYmlsaXR5V2FybmluZywgJ0JyZWFrcyBidWlsZHMnKTsKKyAg
ICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNbMV0udGVzdGFiaWxpdHlXYXJuaW5nLCAnQ3Jhc2hl
cyBXZWJLaXQnKTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNbMF0ubWVzc2FnZSwgJ2Fu
b3RoZXIgbWVzc2FnZScpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sxXS5tZXNzYWdl
LCAnYW5vdGhlciBtZXNzYWdlJyk7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzBdLmF1
dGhvck5hbWUsICdDaHJpcyBEdW1leicpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sx
XS5hdXRob3JOYW1lLCAnWmFsYW4gQnVqdGFzJyk7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21t
aXRzWzBdLm9yZGVyLCAyMTA5NDgpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sxXS5v
cmRlciwgMjEwOTQ5KTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNbMF0udGltZSwgMTQ4
NDg4NDM1NDU3Nyk7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzFdLnRpbWUsIDE0ODQ4
ODYyMzA2NDUpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sxXS5wcmV2aW91c0NvbW1p
dCwgY29tbWl0c1swXS5pZCk7CisgICAgfSk7Cit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rv
b2xzLW9zLWJ1aWxkLWZldGNoZXItdGVzdHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
c2VydmVyLXRlc3RzL3Rvb2xzLW9zLWJ1aWxkLWZldGNoZXItdGVzdHMuanMKaW5kZXggYzZmMGRj
OTNiYmUzMjg2ODc4Y2E3ZjkwYzljNDFjZWZmNTRlYTc3OS4uNjg0MGEwZDdjYjdlNWM5OGUwMjI5
OTY5NWFjMjk1MGFlNjBkMjdlOSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3NlcnZlci10ZXN0cy90b29scy1vcy1idWlsZC1mZXRjaGVyLXRlc3RzLmpzCisrKyBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvdG9vbHMtb3MtYnVpbGQtZmV0Y2hlci10
ZXN0cy5qcwpAQCAtMTM0LDM5ICsxMzQsNTcgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywg
ZnVuY3Rpb24oKSB7CiAgICAgfSk7CiAKICAgICBkZXNjcmliZSgnT1NCdWlsZGVyRmV0Y2hlci5f
Y29tbWl0c0ZvckF2YWlsYWJsZUJ1aWxkcycsICgpID0+IHsKLSAgICAgICAgaXQoJ3Nob3VsZCBv
bmx5IHJldHVybiBjb21taXRzIHdob3NlIG9yZGVycyBhcmUgaGlnaGVyIHRoYW4gc3BlY2lmaWVk
IG9yZGVyJywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxkIGNvbXBhdGlibGUgd2l0aCBjb21t
YW5kIG91dHB1dCBvbmx5IGNvbnRhaW5zIGxpbmVzIG9mIHJldmlzaW9uJywgYXN5bmMgKCkgPT4g
ewogICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CiAgICAgICAgICAg
ICBjb25zdCBmZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKHt9LCBudWxsLCBudWxsLCBNb2Nr
U3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JJbnZvY2F0aW9u
UHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7Ci0gICAgICAgICAg
ICBjb25zdCBmZXRjaENvbW1pdHNQcm9taXNlID0gZmV0Y2hlci5fY29tbWl0c0ZvckF2YWlsYWJs
ZUJ1aWxkcygnT1NYJywgWydsaXN0JywgJ2J1aWxkMSddLCAnXlxcLiokJywgMTYwNDAwMDAwMCwg
MTYwNjAwMDAwMCk7CisgICAgICAgICAgICBjb25zdCBmZXRjaENvbW1pdHNQcm9taXNlID0gZmV0
Y2hlci5fY29tbWl0c0ZvckF2YWlsYWJsZUJ1aWxkcyhbJ2xpc3QnLCAnYnVpbGQxJ10sICdeXFwu
KiQnKTsKIAotICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZS50aGVu
KCgpID0+IHsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52
b2NhdGlvbnMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKE1v
Y2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdidWlsZDEnXSk7
Ci0gICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgn
MTZEMzIxXG4xNkUzMjF6XG5cbjE2RjMyMScpOwotICAgICAgICAgICAgICAgIHJldHVybiBmZXRj
aENvbW1pdHNQcm9taXNlOwotICAgICAgICAgICAgfSkudGhlbigocmVzdWx0cykgPT4gewotICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRzLmxlbmd0aCwgMik7Ci0gICAgICAgICAg
ICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzBdLCB7cmVwb3NpdG9yeTogJ09TWCcsIG9y
ZGVyOiAxNjA0MDMyMTI2LCByZXZpc2lvbjogJzE2RTMyMXonfSk7Ci0gICAgICAgICAgICAgICAg
YXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzFdLCB7cmVwb3NpdG9yeTogJ09TWCcsIG9yZGVyOiAx
NjA1MDMyMTAwLCByZXZpc2lvbjogJzE2RjMyMSd9KTsKLSAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgYXdhaXQgd2FpdEZvckludm9jYXRpb25Qcm9taXNlOworICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAg
ICBhc3NlcnQuZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLmNvbW1hbmQs
IFsnbGlzdCcsICdidWlsZDEnXSk7CisKKyAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0
cyA9IHthbGxSZXZpc2lvbnM6IFsiMTZEMzIxIiwgIjE2RTMyMXoiLCAiMTZGMzIxIl0sIGNvbW1p
dHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczoge319OworICAgICAgICAgICAgYXdhaXQgTW9ja1N1
YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnMTZEMzIxXG4xNkUzMjF6XG5cbjE2RjMy
MScpOworICAgICAgICAgICAgY29uc3QgYnVpbGRJbmZvID0gYXdhaXQgZmV0Y2hDb21taXRzUHJv
bWlzZTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoZXhwZWN0ZWRSZXN1bHRzLCBidWls
ZEluZm8pOwogICAgICAgICB9KTsKIAotICAgICAgICBpdCgnc2hvdWxkIG9ubHkgcmV0dXJuIGNv
bW1pdHMgd2hvc2Ugb3JkZXJzIGFyZSBoaWdoZXIgdGhhbiBtaW5PcmRlciBhbmQgbG93ZXIgdGhh
biB0aGUgbWF4T3JkZXInLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgcGFyc2UgdGhlIGNv
bW1hbmQgb3V0cHV0IGFzIEpTT04gZm9ybWF0JywgYXN5bmMgKCkgPT4gewogICAgICAgICAgICAg
Y29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CiAgICAgICAgICAgICBjb25zdCBmZXRjaGVy
ID0gbmV3IE9TQnVpbGRGZXRjaGVyKHt9LCBudWxsLCBudWxsLCBNb2NrU3VicHJvY2VzcywgbG9n
Z2VyKTsKICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tT
dWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7Ci0gICAgICAgICAgICBjb25zdCBmZXRjaENv
bW1pdHNQcm9taXNlID0gZmV0Y2hlci5fY29tbWl0c0ZvckF2YWlsYWJsZUJ1aWxkcygnT1NYJywg
WydsaXN0JywgJ2J1aWxkMSddLCAnXlxcLiokJywgMTYwNDAwMDAwMCwgMTYwNTAwMDAwMCk7Cisg
ICAgICAgICAgICBjb25zdCBmZXRjaENvbW1pdHNQcm9taXNlID0gZmV0Y2hlci5fY29tbWl0c0Zv
ckF2YWlsYWJsZUJ1aWxkcyhbJ2xpc3QnLCAnYnVpbGQxJ10pOwogCi0gICAgICAgICAgICByZXR1
cm4gd2FpdEZvckludm9jYXRpb25Qcm9taXNlLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgICAg
IGFzc2VydC5lcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwotICAg
ICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNb
MF0uY29tbWFuZCwgWydsaXN0JywgJ2J1aWxkMSddKTsKLSAgICAgICAgICAgICAgICBNb2NrU3Vi
cHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5yZXNvbHZlKCcxNkQzMjFcbjE2RTMyMXpcblxuMTZGMzIx
Jyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoQ29tbWl0c1Byb21pc2U7Ci0gICAgICAg
ICAgICB9KS50aGVuKChyZXN1bHRzKSA9PiB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlc3VsdHMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKHJl
c3VsdHNbMF0sIHtyZXBvc2l0b3J5OiAnT1NYJywgb3JkZXI6IDE2MDQwMzIxMjYsIHJldmlzaW9u
OiAnMTZFMzIxeid9KTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYXdhaXQgd2FpdEZv
ckludm9jYXRpb25Qcm9taXNlOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKE1vY2tTdWJwcm9j
ZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFs
KE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdidWlsZDEn
XSk7CisKKyAgICAgICAgICAgIGNvbnN0IG91dHB1dE9iamVjdCA9IHthbGxSZXZpc2lvbnM6IFsi
MTZEMzIxIiwgIjE2RTMyMXoiLCAiMTZGMzIxIl0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJu
aW5nczogeyIxNkQzMjEiOiAiUGFuaWMifX07CisgICAgICAgICAgICBhd2FpdCBNb2NrU3VicHJv
Y2Vzcy5pbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KG91dHB1dE9iamVjdCkp
OworICAgICAgICAgICAgY29uc3QgYnVpbGRJbmZvID0gYXdhaXQgZmV0Y2hDb21taXRzUHJvbWlz
ZTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwob3V0cHV0T2JqZWN0LCBidWlsZEluZm8p
OworICAgICAgICB9KTsKKyAgICB9KTsKKworCisgICAgZGVzY3JpYmUoJ09TQnVpbGRlckZldGNo
ZXIuX2NvbW1pdHNXaXRoaW5SYW5nZScsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBvbmx5
IHJldHVybiBjb21taXRzIHdob3NlIG9yZGVycyBhcmUgaGlnaGVyIHRoYW4gc3BlY2lmaWVkIG9y
ZGVyJywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tM
b2dnZXI7CisgICAgICAgICAgICBjb25zdCBmZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKHt9
LCBudWxsLCBudWxsLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKKyAgICAgICAgICAgIGNvbnN0
IHJlc3VsdHMgPSBmZXRjaGVyLl9jb21taXRzV2l0aGluUmFuZ2UoWyIxNkQzMjEiLCAiMTZFMzIx
eiIsICIxNkYzMjEiXSwgIk9TWCIsIDE2MDQwMDAwMDAsIDE2MDYwMDAwMDApOworICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVuZ3RoLCAyKTsKKyAgICAgICAgICAgIGFzc2VydC5k
ZWVwRXF1YWwocmVzdWx0c1swXSwge3JlcG9zaXRvcnk6ICdPU1gnLCBvcmRlcjogMTYwNDAzMjEy
NiwgcmV2aXNpb246ICcxNkUzMjF6J30pOworICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChy
ZXN1bHRzWzFdLCB7cmVwb3NpdG9yeTogJ09TWCcsIG9yZGVyOiAxNjA1MDMyMTAwLCByZXZpc2lv
bjogJzE2RjMyMSd9KTsKKworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIG9ubHkg
cmV0dXJuIGNvbW1pdHMgd2hvc2Ugb3JkZXJzIGFyZSBoaWdoZXIgdGhhbiBtaW5PcmRlciBhbmQg
bG93ZXIgdGhhbiB0aGUgbWF4T3JkZXInLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25z
dCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKKyAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBu
ZXcgT1NCdWlsZEZldGNoZXIoe30sIG51bGwsIG51bGwsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIp
OworICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGZldGNoZXIuX2NvbW1pdHNXaXRoaW5SYW5n
ZShbIjE2RDMyMSIsICIxNkUzMjF6IiwgIjE2RjMyMSJdLCAiT1NYIiwgMTYwNDAwMDAwMCwgMTYw
NTAwMDAwMCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0cy5sZW5ndGgsIDEpOwor
ICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzBdLCB7cmVwb3NpdG9yeTogJ09T
WCcsIG9yZGVyOiAxNjA0MDMyMTI2LCByZXZpc2lvbjogJzE2RTMyMXonfSk7CiAgICAgICAgIH0p
OwogICAgIH0pOwogCkBAIC0yMzksOSArMjU3LDkgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVy
JywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfSkKLSAgICB9KQorICAgIH0pOwogCi0gICAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVy
LmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzJywgKCkgPT4geworICAgIGRlc2NyaWJlKCdPU0J1aWxk
RmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcycsICgpID0+IHsKICAgICAgICAgY29u
c3QgaW52b2NhdGlvbnMgPSBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uczsKIAogICAgICAgICBi
ZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKQEAgLTI1MiwxMSArMjcwLDEyIEBAIGRlc2NyaWJlKCdP
U0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgVGVzdFNlcnZlci5kYXRh
YmFzZSgpLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaXQoJ3Nob3VsZCBy
ZXBvcnQgYWxsIGJ1aWxkIGNvbW1pdHMgd2l0aCBvd25lZC1jb21taXRzJywgKCkgPT4geworICAg
ICAgICBpdCgnc2hvdWxkIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUgYW5kIHJlcG9ydCBhbGwgYnVp
bGQgY29tbWl0cyB3aXRoIG93bmVkLWNvbW1pdHMnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25z
dCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBu
ZXcgT1NCdWlsZEZldGNoZXIoY29uZmlnLCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLCBzbGF2ZUF1
dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwogICAgICAgICAgICAgY29uc3QgZGIgPSBUZXN0
U2VydmVyLmRhdGFiYXNlKCk7Ci0gICAgICAgICAgICBsZXQgZmV0Y2hBbmRSZXBvcnRQcm9taXNl
ID0gbnVsbDsKKworICAgICAgICAgICAgbGV0IGZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzUHJv
bWlzZSA9IG51bGw7CiAgICAgICAgICAgICBsZXQgZmV0Y2hBdmFpbGFibGVCdWlsZHNQcm9taXNl
ID0gbnVsbDsKIAogICAgICAgICAgICAgcmV0dXJuIGFkZFNsYXZlRm9yUmVwb3J0KGVtcHR5UmVw
b3J0KS50aGVuKCgpID0+IHsKQEAgLTMwNywxMCArMzI2LDkgQEAgZGVzY3JpYmUoJ09TQnVpbGRG
ZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChp
bnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3Jl
dmlzaW9uJywgJ1NpZXJyYTE2RTM0J10pOwogICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBd
LnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0V2l0aFdlYktpdEFuZEph
dmFTY3JpcHRDb3JlKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoQXZhaWxhYmxlQnVp
bGRzUHJvbWlzZTsKLSAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdHMpID0+IHsKLSAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0cy5sZW5ndGgsIDMpOworICAgICAgICAgICAgfSku
dGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MucmVzZXQoKTsKLSAg
ICAgICAgICAgICAgICBmZXRjaEFuZFJlcG9ydFByb21pc2UgPSBmZXRjaGVyLmZldGNoQW5kUmVw
b3J0TmV3QnVpbGRzKCk7CisgICAgICAgICAgICAgICAgZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWls
ZHNQcm9taXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcygpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigpOwogICAg
ICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGlu
dm9jYXRpb25zLmxlbmd0aCwgMSk7CkBAIC0zMzcsOSArMzU1LDE0MSBAQCBkZXNjcmliZSgnT1NC
dWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1sw
XS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJvd25lZENvbW1pdFdpdGhXZWJLaXRBbmRK
YXZhU2NyaXB0Q29yZSkpOwogICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2Nh
dGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ293bmVkQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lv
bicsICdTaWVycmExNkUzNCddKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaEFuZFJl
cG9ydFByb21pc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoUmVwb3J0QW5kVXBkYXRl
QnVpbGRzUHJvbWlzZTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAg
ICAgIHJldHVybiBQcm9taXNlLmFsbChbCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJv
d3MoJ3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdXZWJLaXQnfSksCisgICAgICAgICAgICAgICAg
ICAgIGRiLnNlbGVjdFJvd3MoJ3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29y
ZSd9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2
aXNpb24nOiAnU2llcnJhMTZENjknfSksCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJv
d3MoJ2NvbW1pdHMnLCB7J3JldmlzaW9uJzogJ1NpZXJyYTE2RTMzaCd9KSwKKyAgICAgICAgICAg
ICAgICAgICAgZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZF
MzQnfSldKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdHMpID0+IHsKKyAgICAgICAgICAg
ICAgICBjb25zdCB3ZWJraXRSZXBvc2l0b3J5ID0gcmVzdWx0c1swXTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBqc2NSZXBvc2l0b3J5ID0gcmVzdWx0c1sxXTsKKyAgICAgICAgICAgICAgICBjb25z
dCBvc3hDb21taXQxNkQ2OSA9IHJlc3VsdHNbMl07CisgICAgICAgICAgICAgICAgY29uc3Qgb3N4
Q29tbWl0MTZFMzNoID0gcmVzdWx0c1szXTsKKyAgICAgICAgICAgICAgICBjb25zdCBvc3hDb21t
aXQxNkUzNCA9IHJlc3VsdHNbNF07CisKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwod2Vi
a2l0UmVwb3NpdG9yeS5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbCh3
ZWJraXRSZXBvc2l0b3J5WzBdWydvd25lciddLCAxMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKGpzY1JlcG9zaXRvcnkubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwoanNjUmVwb3NpdG9yeVswXVsnb3duZXInXSwgMTApOworCisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY5Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY5WzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZENjlbMF1bJ29yZGVyJ10sIDE2MDMw
MDY5MDApOworCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMzaC5s
ZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2hb
MF1bJ3JlcG9zaXRvcnknXSwgMTApOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hD
b21taXQxNkUzM2hbMF1bJ29yZGVyJ10sIDE2MDQwMDMzMDgpOworCisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTM0Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTM0WzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzRbMF1bJ29yZGVyJ10sIDE2MDQw
MDM0MDApOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCku
Z2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwMzAwMDAwMCZ0
bz0xNjAzMDk5OTAwJyk7CiAgICAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHsKLSAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0WydzdGF0dXMnXSwgJ09LJyk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbidd
LCAnU2llcnJhMTZENjknKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydj
b21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMwMDY5MDApOworCisgICAgICAgICAgICAgICAgcmV0
dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0
LXJlcG9ydGVkP2Zyb209MTYwNDAwMDAwMCZ0bz0xNjA0MDk5OTAwJyk7CisgICAgICAgICAgICB9
KS50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0
Wydjb21taXRzJ10ubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVz
dWx0Wydjb21taXRzJ11bMF1bJ3JldmlzaW9uJ10sICdTaWVycmExNkUzNCcpOworICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwNDAw
MzQwMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3Vs
ZCByZXBvcnQgYWxsIGJ1aWxkIGNvbW1pdHMgd2l0aCBvd25lZC1jb21taXRzJywgKCkgPT4gewor
ICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CisgICAgICAgICAgICBj
b25zdCBmZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKGNvbmZpZywgVGVzdFNlcnZlci5yZW1v
dGVBUEkoKSwgc2xhdmVBdXRoLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKKyAgICAgICAgICAg
IGNvbnN0IGRiID0gVGVzdFNlcnZlci5kYXRhYmFzZSgpOworICAgICAgICAgICAgY29uc3QgcmVz
dWx0c0ZvclNpZXJyYUQgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RDY4IiwgIlNpZXJyYTE2
RDY5Il0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHlXYXJuaW5nczoge319OworICAgICAgICAgICAg
Y29uc3QgcmVzdWx0c0ZvclNpZXJyYUUgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RTMyIiwg
IlNpZXJyYTE2RTMzIiwgIlNpZXJyYTE2RTMzaCIsICJTaWVycmExNkUzNCJdLCBjb21taXRzV2l0
aFRlc3RhYmlsaXR5V2FybmluZ3M6IHt9fTsKKworICAgICAgICAgICAgbGV0IGZldGNoUmVwb3J0
QW5kVXBkYXRlQnVpbGRzUHJvbWlzZSA9IG51bGw7CisgICAgICAgICAgICBsZXQgZmV0Y2hBdmFp
bGFibGVCdWlsZHNQcm9taXNlID0gbnVsbDsKKworICAgICAgICAgICAgcmV0dXJuIGFkZFNsYXZl
Rm9yUmVwb3J0KGVtcHR5UmVwb3J0KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gUHJvbWlzZS5hbGwoWworICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ3JlcG9zaXRv
cmllcycsIHsnaWQnOiAxMCwgJ25hbWUnOiAnT1NYJ30pLAorICAgICAgICAgICAgICAgICAgICBk
Yi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJy
YTE2RDY3JywgJ29yZGVyJzogMTYwMzAwNjcwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAg
ICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3Jl
dmlzaW9uJzogJ1NpZXJyYTE2RDY4JywgJ29yZGVyJzogMTYwMzAwNjgwMCwgJ3JlcG9ydGVkJzog
dHJ1ZX0pLAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9z
aXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RDY5JywgJ29yZGVyJzogMTYwMzAwNjkw
MCwgJ3JlcG9ydGVkJzogZmFsc2V9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdj
b21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkUzMicsICdv
cmRlcic6IDE2MDQwMDMyMDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICAg
ICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdT
aWVycmExNkUzMycsICdvcmRlcic6IDE2MDQwMDMzMDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAg
ICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAs
ICdyZXZpc2lvbic6ICdTaWVycmExNkUzM2cnLCAnb3JkZXInOiAxNjA0MDAzMzA3LCAncmVwb3J0
ZWQnOiB0cnVlfSldKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAg
ICAgIHJldHVybiBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9P
U1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDMwMDAwMDAmdG89MTYwMzA5OTkwMCcpOworICAgICAg
ICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZENjgnKTsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10s
IDE2MDMwMDY4MDApOworICAgICAgICAgICAgICAgIHJldHVybiBUZXN0U2VydmVyLnJlbW90ZUFQ
SSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDQwMDAw
MDAmdG89MTYwNDA5OTkwMCcpOworICAgICAgICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZp
c2lvbiddLCAnU2llcnJhMTZFMzNnJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
c3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjA0MDAzMzA3KTsKKyAgICAgICAgICAgICAg
ICBjb25zdCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0Rm9y
SW52b2NhdGlvbigpOworICAgICAgICAgICAgICAgIGZldGNoQXZhaWxhYmxlQnVpbGRzUHJvbWlz
ZSA9IGZldGNoZXIuX2ZldGNoQXZhaWxhYmxlQnVpbGRzKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4g
eworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwor
ICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwg
WydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOworICAgICAgICAgICAgICAgIGludm9j
YXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2Nh
dGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQn
LCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RDY5J10pOworICAgICAgICAgICAgICAgIGlu
dm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkob3duZWRDb21taXRXaXRoV2ViS2l0
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZv
ckludm9jYXRpb24oKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAg
IGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBv
c3ggMTZFeHggYnVpbGRzJ10pOworICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29s
dmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUUpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOworICAgICAg
ICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9j
YXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZv
Y2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3Jldmlz
aW9uJywgJ1NpZXJyYTE2RTMzaCddKTsKKyAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5y
ZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJvd25lZENvbW1pdFdpdGhXZWJLaXQpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2Nh
dGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQn
LCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RTM0J10pOworICAgICAgICAgICAgICAgIGlu
dm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0V2l0
aFdlYktpdEFuZEphdmFTY3JpcHRDb3JlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNo
QXZhaWxhYmxlQnVpbGRzUHJvbWlzZTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAg
ICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgZmV0
Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHNQcm9taXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVw
ZGF0ZUJ1aWxkcygpOworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0
Rm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxs
IG9zeCAxNkR4eCBidWlsZHMnXSk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVz
b2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkpOworICAgICAgICAgICAgICAg
IHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisgICAg
ICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52
b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGlu
dm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2
aXNpb24nLCAnU2llcnJhMTZENjknXSk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0u
cmVzb2x2ZShKU09OLnN0cmluZ2lmeShvd25lZENvbW1pdFdpdGhXZWJLaXQpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigp
OworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBF
cXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkV4eCBidWls
ZHMnXSk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmlu
Z2lmeShyZXN1bHRzRm9yU2llcnJhRSkpOworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3Vi
cHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICB9KS50aGVu
KCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3Ro
LCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNv
bW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJh
MTZFMzNoJ10pOworICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5z
dHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0V2l0aFdlYktpdCkpOworICAgICAgICAgICAgICAg
IHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisgICAg
ICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52
b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNv
bHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJvd25lZENvbW1pdFdpdGhXZWJLaXRBbmRKYXZhU2Ny
aXB0Q29yZSkpOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNb
MF0uY29tbWFuZCwgWydsaXN0JywgJ293bmVkQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdT
aWVycmExNkUzNCddKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaFJlcG9ydEFuZFVw
ZGF0ZUJ1aWxkc1Byb21pc2U7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoWwogICAgICAgICAgICAgICAgICAgICBkYi5zZWxl
Y3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0J30pLAogICAgICAgICAgICAg
ICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2YVNjcmlw
dENvcmUnfSksCkBAIC0zODQsMTEgKzUzNCwxMTkgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVy
JywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAKKyAgICAgICAg
aXQoJ3Nob3VsZCB1cGRhdGUgdGVzdGFiaWxpdHkgd2FybmluZyBmb3IgY29tbWl0cycsIGFzeW5j
ICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOworICAg
ICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihjb25maWcsIFRlc3RT
ZXJ2ZXIucmVtb3RlQVBJKCksIHNsYXZlQXV0aCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7Cisg
ICAgICAgICAgICBjb25zdCBkYiA9IFRlc3RTZXJ2ZXIuZGF0YWJhc2UoKTsKKyAgICAgICAgICAg
IGNvbnN0IHJlc3VsdHNGb3JTaWVycmFEID0ge2FsbFJldmlzaW9uczogWyJTaWVycmExNkQ2OCIs
ICJTaWVycmExNkQ2OSJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHsiU2llcnJh
MTZENjgiOiAiUGFuaWMiLCAiU2llcnJhMTZENjkiOiAiU3BpbiBDUFUifX07CisgICAgICAgICAg
ICBjb25zdCByZXN1bHRzRm9yU2llcnJhRSA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZFMzIi
LCAiU2llcnJhMTZFMzMiLCAiU2llcnJhMTZFMzNoIiwgIlNpZXJyYTE2RTM0Il0sIGNvbW1pdHNX
aXRoVGVzdGFiaWxpdHlXYXJuaW5nczogeyJTaWVycmExNkUzMSI6ICJXZWJLaXQgY3Jhc2hlcyJ9
fTsKKworICAgICAgICAgICAgYXdhaXQgYWRkU2xhdmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQpOwor
CisgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbCisgICAgICAgICAgICAgICAgZGIuaW5z
ZXJ0KCdyZXBvc2l0b3JpZXMnLCB7J2lkJzogMTAsICduYW1lJzogJ09TWCd9KSwKKyAgICAgICAg
ICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9u
JzogJ1NpZXJyYTE2RDY3JywgJ29yZGVyJzogMTYwMzAwNjcwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0p
LAorICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEw
LCAncmV2aXNpb24nOiAnU2llcnJhMTZENjgnLCAnb3JkZXInOiAxNjAzMDA2ODAwLCAncmVwb3J0
ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBv
c2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkQ2OScsICdvcmRlcic6IDE2MDMwMDY5
MDAsICdyZXBvcnRlZCc6IGZhbHNlfSksCisgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21t
aXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkUzMScsICdvcmRl
cic6IDE2MDQwMDMxMDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICBkYi5p
bnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2
RTMyJywgJ29yZGVyJzogMTYwNDAwMzIwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAg
ICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24n
OiAnU2llcnJhMTZFMzMnLCAnb3JkZXInOiAxNjA0MDAzMzAwLCAncmVwb3J0ZWQnOiB0cnVlfSks
CisgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAs
ICdyZXZpc2lvbic6ICdTaWVycmExNkUzM2cnLCAnb3JkZXInOiAxNjA0MDAzMzA3LCAncmVwb3J0
ZWQnOiB0cnVlfSldKTsKKworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IFRlc3RTZXJ2
ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zy
b209MTYwMzAwMDAwMCZ0bz0xNjAzMDk5OTAwJyk7CisKKyAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZENjgnKTsKKyAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwMzAw
NjgwMCk7CisgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgp
LmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDQwMDAwMDAm
dG89MTYwNDA5OTkwMCcpOworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21t
aXRzJ10ubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1p
dHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RTMzZycpOworICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjA0MDAzMzA3KTsKKworICAg
ICAgICAgICAgY29uc3QgZmV0Y2hSZXBvcnRBbmRVcGRhdGVQcm9taXNlID0gZmV0Y2hlci5mZXRj
aFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcygpOworICAgICAgICAgICAgYXdhaXQgTW9ja1N1YnByb2Nl
c3Mud2FpdEZvckludm9jYXRpb24oKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9j
YXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRp
b25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdhbGwgb3N4IDE2RHh4IGJ1aWxkcyddKTsKKyAgICAg
ICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNp
ZXJyYUQpKTsKKyAgICAgICAgICAgIGF3YWl0IE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZv
ckludm9jYXRpb24oKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxl
bmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNv
bW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJh
MTZENjknXSk7CisgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5n
aWZ5KG93bmVkQ29tbWl0V2l0aFdlYktpdCkpOworICAgICAgICAgICAgYXdhaXQgTW9ja1N1YnBy
b2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOworCisgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1
YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRz
J10pOworICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShy
ZXN1bHRzRm9yU2llcnJhRSkpOworCisgICAgICAgICAgICBhd2FpdCBNb2NrU3VicHJvY2Vzcy5y
ZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChp
bnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZv
Y2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3Jldmlz
aW9uJywgJ1NpZXJyYTE2RTMzaCddKTsKKyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29s
dmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0V2l0aFdlYktpdCkpOworICAgICAg
ICAgICAgYXdhaXQgIE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9jYXRpb24oKTsK
KyAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAg
ICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShhbm90aGVyb3duZWRD
b21taXRXaXRoV2ViS2l0QW5kSmF2YVNjcmlwdENvcmUpKTsKKyAgICAgICAgICAgIGFzc2VydC5k
ZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ293bmVkQ29tbWl0Jywg
J2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkUzNCddKTsKKworICAgICAgICAgICAgYXdhaXQg
ZmV0Y2hSZXBvcnRBbmRVcGRhdGVQcm9taXNlOworCisgICAgICAgICAgICBjb25zdCB3ZWJraXRS
ZXBvc2l0b3J5ID0gYXdhaXQgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzog
J1dlYktpdCd9KTsKKyAgICAgICAgICAgIGNvbnN0IGpzY1JlcG9zaXRvcnkgPSBhd2FpdCBkYi5z
ZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2YVNjcmlwdENvcmUnfSk7Cisg
ICAgICAgICAgICBjb25zdCBvc3hDb21taXQxNkQ2OCA9IGF3YWl0IGRiLnNlbGVjdFJvd3MoJ2Nv
bW1pdHMnLCB7J3JldmlzaW9uJzogJ1NpZXJyYTE2RDY4J30pOworICAgICAgICAgICAgY29uc3Qg
b3N4Q29tbWl0MTZENjkgPSBhd2FpdCBkYi5zZWxlY3RSb3dzKCdjb21taXRzJywgeydyZXZpc2lv
bic6ICdTaWVycmExNkQ2OSd9KTsKKyAgICAgICAgICAgIGNvbnN0IG9zeENvbW1pdDE2RTMxID0g
YXdhaXQgZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZFMzEn
fSk7CisgICAgICAgICAgICBjb25zdCBvc3hDb21taXQxNkUzM2ggPSBhd2FpdCBkYi5zZWxlY3RS
b3dzKCdjb21taXRzJywgeydyZXZpc2lvbic6ICdTaWVycmExNkUzM2gnfSk7CisgICAgICAgICAg
ICBjb25zdCBvc3hDb21taXQxNkUzNCA9IGF3YWl0IGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7
J3JldmlzaW9uJzogJ1NpZXJyYTE2RTM0J30pOworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
d2Via2l0UmVwb3NpdG9yeS5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHdl
YmtpdFJlcG9zaXRvcnlbMF1bJ293bmVyJ10sIDEwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVh
bChqc2NSZXBvc2l0b3J5Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoanNj
UmVwb3NpdG9yeVswXVsnb3duZXInXSwgMTApOworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
b3N4Q29tbWl0MTZENjgubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hD
b21taXQxNkQ2OFswXVsncmVwb3NpdG9yeSddLCAxMCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1
YWwob3N4Q29tbWl0MTZENjhbMF1bJ29yZGVyJ10sIDE2MDMwMDY4MDApOworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY4WzBdWyd0ZXN0YWJpbGl0eV93YXJuaW5nJ10sICJQ
YW5pYyIpOworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZENjkubGVuZ3Ro
LCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OVswXVsncmVwb3Np
dG9yeSddLCAxMCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZENjlbMF1b
J29yZGVyJ10sIDE2MDMwMDY5MDApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1p
dDE2RDY5WzBdWyd0ZXN0YWJpbGl0eV93YXJuaW5nJ10sICJTcGluIENQVSIpOworCisgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzEubGVuZ3RoLCAxKTsKKyAgICAgICAgICAg
IGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzMVswXVsncmVwb3NpdG9yeSddLCAxMCk7CisgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzFbMF1bJ29yZGVyJ10sIDE2MDQwMDMx
MDApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMxWzBdWyd0ZXN0YWJp
bGl0eV93YXJuaW5nJ10sICJXZWJLaXQgY3Jhc2hlcyIpOworCisgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwob3N4Q29tbWl0MTZFMzNoLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1
YWwob3N4Q29tbWl0MTZFMzNoWzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChvc3hDb21taXQxNkUzM2hbMF1bJ29yZGVyJ10sIDE2MDQwMDMzMDgpOworCisg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzQubGVuZ3RoLCAxKTsKKyAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzNFswXVsncmVwb3NpdG9yeSddLCAxMCk7
CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzRbMF1bJ29yZGVyJ10sIDE2
MDQwMDM0MDApOworCisgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90
ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDMw
MDAwMDAmdG89MTYwMzA5OTkwMCcpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsn
Y29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydj
b21taXRzJ11bMF1bJ3JldmlzaW9uJ10sICdTaWVycmExNkQ2OScpOworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjAzMDA2OTAwKTsKKwor
ICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09O
KCcvYXBpL2NvbW1pdHMvT1NYL2xhc3QtcmVwb3J0ZWQ/ZnJvbT0xNjA0MDAwMDAwJnRvPTE2MDQw
OTk5MDAnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5n
dGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydy
ZXZpc2lvbiddLCAnU2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1
bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwNDAwMzQwMCk7CisgICAgICAgIH0pOworCiAg
ICAgICAgIGl0KCdzaG91bGQgcmVwb3J0IGNvbW1pdHMgd2l0aG91dCBvd25lZC1jb21taXRzIGlm
ICJvd25lZENvbW1pdENvbW1hbmQiIGlzIG5vdCBzcGVjaWZpZWQgaW4gY29uZmlnJywgYXN5bmMg
KCkgPT4gewogCiAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKICAg
ICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoY29uZmlnV2l0aG91
dE93bmVkQ29tbWl0Q29tbWFuZCwgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBN
b2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZl
ci5kYXRhYmFzZSgpOworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUQgPSB7YWxs
UmV2aXNpb25zOiBbIlNpZXJyYTE2RDY4IiwgIlNpZXJyYTE2RDY5Il0sIGNvbW1pdHNXaXRoVGVz
dGFiaWxpdHlXYXJuaW5nczoge319OworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJy
YUUgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RTMyIiwgIlNpZXJyYTE2RTMzIiwgIlNpZXJy
YTE2RTMzaCIsICJTaWVycmExNkUzNCJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6
IHt9fTsKIAogICAgICAgICAgICAgYXdhaXQgYWRkU2xhdmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQp
OwogICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoWwpAQCAtNDExLDE5ICs2NjksMTggQEAg
ZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDQwMDMzMDcpOwogCiAg
ICAgICAgICAgICBjb25zdCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vz
cy53YWl0Rm9ySW52b2NhdGlvbigpOwotICAgICAgICAgICAgY29uc3QgZmV0Y2hBbmRSZXBvcnRQ
cm9taXNlID0gZmV0Y2hlci5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcygpOworICAgICAgICAgICAg
Y29uc3QgZmV0Y2hSZXBvcnRBbmRVcGRhdGVQcm9taXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFu
ZFVwZGF0ZUJ1aWxkcygpOwogICAgICAgICAgICAgYXdhaXQgd2FpdEZvckludm9jYXRpb25Qcm9t
aXNlOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CiAg
ICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlz
dCcsICdhbGwgb3N4IDE2RHh4IGJ1aWxkcyddKTsKLSAgICAgICAgICAgIGludm9jYXRpb25zWzBd
LnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2OFxuU2llcnJhMTZENjknKTsKKyAgICAgICAgICAgIGlu
dm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsK
IAogICAgICAgICAgICAgYXdhaXQgTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2Nh
dGlvbigpOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7
CiAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsn
bGlzdCcsICdhbGwgb3N4IDE2RXh4IGJ1aWxkcyddKTsKLSAgICAgICAgICAgIGludm9jYXRpb25z
WzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkUzMlxuU2llcnJhMTZFMzNcblNpZXJyYTE2RTMzaFxu
U2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5z
dHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUUpKTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gYXdh
aXQgZmV0Y2hBbmRSZXBvcnRQcm9taXNlOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3Vs
dFsnc3RhdHVzJ10sICdPSycpOworICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hSZXBv
cnRBbmRVcGRhdGVQcm9taXNlOwogICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFBy
b21pc2UuYWxsKFsKICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMn
LCB7J25hbWUnOiAnV2ViS2l0J30pLAogICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ3Jl
cG9zaXRvcmllcycsIHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29yZSd9KSwKQEAgLTQ2Nyw2ICs3MjQs
OCBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAg
IGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOwogICAgICAgICAgICAgY29uc3QgZmV0Y2hl
ciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihjb25maWdXaXRob3V0T3duZWRDb21taXRDb21tYW5kLCBU
ZXN0U2VydmVyLnJlbW90ZUFQSSgpLCBzbGF2ZUF1dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIp
OwogICAgICAgICAgICAgY29uc3QgZGIgPSBUZXN0U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAg
ICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJhRCA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZE
NjgiLCAiU2llcnJhMTZENjkiLCAiU2llcnJhMTZEMTAwMDAiXSwgY29tbWl0c1dpdGhUZXN0YWJp
bGl0eVdhcm5pbmdzOiB7fX07CisgICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJhRSA9
IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZFMzIiLCAiU2llcnJhMTZFMzMiLCAiU2llcnJhMTZF
MzNoIiwgIlNpZXJyYTE2RTM0IiwgIlNpZXJyYTE2RTEwMDAwIl0sIGNvbW1pdHNXaXRoVGVzdGFi
aWxpdHlXYXJuaW5nczoge319OwogCiAgICAgICAgICAgICBhd2FpdCBhZGRTbGF2ZUZvclJlcG9y
dChlbXB0eVJlcG9ydCk7CiAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbCkBAIC00ODgs
MjAgKzc0NywxOSBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwg
J1NpZXJyYTE2RTMzZycpOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0
cyddWzBdWydvcmRlciddLCAxNjA0MDAzMzA3KTsKICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JJ
bnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7Ci0g
ICAgICAgICAgICBjb25zdCBmZXRjaEFuZFJlcG9ydFByb21pc2UgPSBmZXRjaGVyLmZldGNoQW5k
UmVwb3J0TmV3QnVpbGRzKCk7CisgICAgICAgICAgICBjb25zdCBmZXRjaFJlcG9ydEFuZFVwZGF0
ZVByb21pc2UgPSBmZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzKCk7CiAKICAgICAg
ICAgICAgIGF3YWl0IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZTsKICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwogICAgICAgICAgICAgYXNzZXJ0LmRlZXBF
cXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWls
ZHMnXSk7Ci0gICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKCdcblxuU2llcnJhMTZE
NjhcblNpZXJyYTE2RDY5XG5TaWVycmExNkQxMDAwMCcpOworICAgICAgICAgICAgaW52b2NhdGlv
bnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkpOwogCiAgICAg
ICAgICAgICBhd2FpdCBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7
CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKICAgICAg
ICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0Jywg
J2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOwotICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVz
b2x2ZSgnXG5cblNpZXJyYTE2RTMyXG5TaWVycmExNkUzM1xuU2llcnJhMTZFMzNoXG5TaWVycmEx
NkUzNFxuU2llcnJhMTZFMTAwMDAnKTsKKyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29s
dmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUUpKTsKIAotICAgICAgICAgICAgcmVz
dWx0ID0gYXdhaXQgZmV0Y2hBbmRSZXBvcnRQcm9taXNlOwotICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3VsdFsnc3RhdHVzJ10sICdPSycpOworICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQg
ZmV0Y2hSZXBvcnRBbmRVcGRhdGVQcm9taXNlOwogICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9
IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBv
c2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0J30pLAogICAgICAgICAgICAgICAgIGRiLnNlbGVj
dFJvd3MoJ3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29yZSd9KSwKQEAgLTU0
NSw2ICs4MDMsNyBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAg
ICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOwogICAgICAgICAgICAgY29u
c3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihjb25maWdUcmFja2luZ09uZU9TLCBUZXN0
U2VydmVyLnJlbW90ZUFQSSgpLCBzbGF2ZUF1dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwog
ICAgICAgICAgICAgY29uc3QgZGIgPSBUZXN0U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAg
ICBjb25zdCByZXN1bHRzRm9yU2llcnJhRCA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZENjgi
LCAiU2llcnJhMTZENjkiLCAiU2llcnJhMTZEMTAwIiwgIlNpZXJyYTE2RDEwMGEiXSwgY29tbWl0
c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzOiB7fX07CiAKICAgICAgICAgICAgIGF3YWl0IGFkZFNs
YXZlRm9yUmVwb3J0KGVtcHR5UmVwb3J0KTsKICAgICAgICAgICAgIGF3YWl0IGRiLmluc2VydCgn
cmVwb3NpdG9yaWVzJywgeydpZCc6IDEwLCAnbmFtZSc6ICdPU1gnfSk7CkBAIC01NTYsMTQgKzgx
NSwxMyBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwMzAxMDAw
MCk7CiAKICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tT
dWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7Ci0gICAgICAgICAgICBjb25zdCBmZXRjaEFu
ZFJlcG9ydFByb21pc2UgPSBmZXRjaGVyLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzKCk7CisgICAg
ICAgICAgICBjb25zdCBmZXRjaEFuZFJlcG9ydFByb21pc2UgPSBmZXRjaGVyLmZldGNoUmVwb3J0
QW5kVXBkYXRlQnVpbGRzKCk7CiAgICAgICAgICAgICBhd2FpdCB3YWl0Rm9ySW52b2NhdGlvblBy
b21pc2U7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsK
ICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWyds
aXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOwotICAgICAgICAgICAgaW52b2NhdGlvbnNb
MF0ucmVzb2x2ZSgnXG5cblNpZXJyYTE2RDY4XG5TaWVycmExNkQ2OVxuU2llcnJhMTZEMTAwXG5T
aWVycmExNkQxMDBhXG4nKTsKKyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNP
Ti5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsKIAogICAgICAgICAgICAgcmVzdWx0ID0g
YXdhaXQgZmV0Y2hBbmRSZXBvcnRQcm9taXNlOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
c3VsdFsnc3RhdHVzJ10sICdPSycpOwogICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0
IFByb21pc2UuYWxsKFsKICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3Jp
ZXMnLCB7J25hbWUnOiAnV2ViS2l0J30pLAogICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3Mo
J3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29yZSd9KSwKQEAgLTU5NCw2ICs4
NTIsNyBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOwogICAgICAgICAgICAgY29uc3QgZmV0
Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihjb25maWdUcmFja2luZ09uZU9TLCBUZXN0U2VydmVy
LnJlbW90ZUFQSSgpLCBzbGF2ZUF1dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwogICAgICAg
ICAgICAgY29uc3QgZGIgPSBUZXN0U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAgICBjb25z
dCByZXN1bHRzRm9yU2llcnJhRCA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZENjgiLCAiU2ll
cnJhMTZENjkiLCAiU2llcnJhMTZEMTAwIiwgIlNpZXJyYTE2RDEwMSJdLCBjb21taXRzV2l0aFRl
c3RhYmlsaXR5V2FybmluZ3M6IHt9fTsKIAogICAgICAgICAgICAgYXdhaXQgYWRkU2xhdmVGb3JS
ZXBvcnQoZW1wdHlSZXBvcnQpOwogICAgICAgICAgICAgYXdhaXQgZGIuaW5zZXJ0KCdyZXBvc2l0
b3JpZXMnLCB7J2lkJzogMTAsICduYW1lJzogJ09TWCd9KTsKQEAgLTYwMiwxNCArODYxLDEzIEBA
IGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMCk7CiAKICAgICAgICAgICAgIGNv
bnN0IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRGb3JJbnZv
Y2F0aW9uKCk7Ci0gICAgICAgICAgICBjb25zdCBmZXRjaEFuZFJlcG9ydFByb21pc2UgPSBmZXRj
aGVyLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzKCk7CisgICAgICAgICAgICBjb25zdCBmZXRjaFJl
cG9ydEFuZFVwZGF0ZVByb21pc2UgPSBmZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRz
KCk7CiAgICAgICAgICAgICBhd2FpdCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2U7CiAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKICAgICAgICAgICAgIGFz
c2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3gg
MTZEeHggYnVpbGRzJ10pOwotICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnXG5c
blNpZXJyYTE2RDY4XG5TaWVycmExNkQ2OVxuU2llcnJhMTZEMTAwXG5TaWVycmExNkQxMDFcbicp
OworICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1
bHRzRm9yU2llcnJhRCkpOwogCi0gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBmZXRjaEFuZFJl
cG9ydFByb21pc2U7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0WydzdGF0dXMnXSwg
J09LJyk7CisgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBmZXRjaFJlcG9ydEFuZFVwZGF0ZVBy
b21pc2U7CiAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoWwog
ICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdX
ZWJLaXQnfSksCiAgICAgICAgICAgICAgICAgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywg
eyduYW1lJzogJ0phdmFTY3JpcHRDb3JlJ30pLApAQCAtNjQ2LDYgKzkwNCw4IEBAIGRlc2NyaWJl
KCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgY29uc3QgbG9nZ2Vy
ID0gbmV3IE1vY2tMb2dnZXI7CiAgICAgICAgICAgICBjb25zdCBmZXRjaGVyID0gbmV3IE9TQnVp
bGRGZXRjaGVyKGNvbmZpZywgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBNb2Nr
U3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZlci5k
YXRhYmFzZSgpOworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUQgPSB7YWxsUmV2
aXNpb25zOiBbIlNpZXJyYTE2RDY4IiwgIlNpZXJyYTE2RDY5Il0sIGNvbW1pdHNXaXRoVGVzdGFi
aWxpdHlXYXJuaW5nczoge319OworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUUg
PSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RTMyIiwgIlNpZXJyYTE2RTMzIiwgIlNpZXJyYTE2
RTMzaCIsICJTaWVycmExNkUzNCJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHt9
fTsKICAgICAgICAgICAgIGxldCBmZXRjaEFuZFJlcG9ydFByb21pc2UgPSBudWxsOwogCiAgICAg
ICAgICAgICByZXR1cm4gYWRkU2xhdmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQpLnRoZW4oKCkgPT4g
ewpAQCAtNjcxLDEyICs5MzEsMTIgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBd
WydvcmRlciddLCAxNjA0MDAzMzA3KTsKIAogICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JJ
bnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7Ci0g
ICAgICAgICAgICAgICAgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gZmV0Y2hlci5mZXRjaEFuZFJl
cG9ydE5ld0J1aWxkcygpOworICAgICAgICAgICAgICAgIGZldGNoQW5kUmVwb3J0UHJvbWlzZSA9
IGZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMoKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gd2FpdEZvckludm9jYXRpb25Qcm9taXNlOwogICAgICAgICAgICAgfSkudGhlbigoKSA9
PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7
CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5k
LCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7Ci0gICAgICAgICAgICAgICAgaW52
b2NhdGlvbnNbMF0ucmVzb2x2ZSgnXG5cblNpZXJyYTE2RDY4XG5TaWVycmExNkQ2OVxuJyk7Cisg
ICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1
bHRzRm9yU2llcnJhRCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy5y
ZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CiAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsK
ICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKQEAg
LTY4Niw3ICs5NDYsNyBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwogICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1
YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRz
J10pOwotICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmEx
NkUzMlxuU2llcnJhMTZFMzNcblNpZXJyYTE2RTMzaFxuU2llcnJhMTZFMzQnKTsKKyAgICAgICAg
ICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JT
aWVycmFFKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5k
V2FpdEZvckludm9jYXRpb24oKTsKICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAg
ICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0
JywgJ293bmVkQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkUzM2gnXSk7CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3MtYnVpbGQtZmV0
Y2hlci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy9vcy1idWlsZC1mZXRj
aGVyLmpzCmluZGV4IDA1MWMyOWZjYjdiODYzMzZiZjQxNzJkNTVmN2E0OTg2ZDE3MTRmZTEuLmZi
NTc4OTJhZjUwNjA4MGZjMmU0MDNhMDczN2I5ZDI2OTdmODZlMjAgMTAwNjQ0Ci0tLSBhL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy9vcy1idWlsZC1mZXRjaGVyLmpzCisrKyBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy9vcy1idWlsZC1mZXRjaGVyLmpzCkBAIC0y
Miw1OSArMjIsNTYgQEAgY2xhc3MgT1NCdWlsZEZldGNoZXIgewogICAgICAgICB0aGlzLl9tYXhT
dWJtaXRDb3VudCA9IG9zQ29uZmlnWydtYXhTdWJtaXRDb3VudCddIHx8IDIwOwogICAgIH0KIAot
ICAgIHN0YXRpYyBmZXRjaEFuZFJlcG9ydEFsbEluT3JkZXIoZmV0Y2hlckxpc3QpCisgICAgc3Rh
dGljIGFzeW5jIGZldGNoUmVwb3J0QW5kVXBkYXRlQ29tbWl0cyhmZXRjaGVyTGlzdCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBtYXBJblNlcmlhbFByb21pc2VDaGFpbihmZXRjaGVyTGlzdCwgKGZl
dGNoZXIpID0+IGZldGNoZXIuZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMoKSk7CisgICAgICAgIGZv
ciAoY29uc3QgZmV0Y2hlciBvZiBmZXRjaGVyTGlzdCkKKyAgICAgICAgICAgIGF3YWl0IGZldGNo
ZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMoKTsKICAgICB9CiAKLSAgICBmZXRjaEFuZFJl
cG9ydE5ld0J1aWxkcygpCisgICAgYXN5bmMgZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoQXZhaWxhYmxlQnVpbGRzKCkudGhlbigo
cmVzdWx0cykgPT4gewotICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmxvZyhgU3VibWl0dGluZyAk
e3Jlc3VsdHMubGVuZ3RofSBidWlsZHMgZm9yICR7dGhpcy5fb3NDb25maWdbJ25hbWUnXX1gKTsK
LSAgICAgICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PSAwKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9zdWJtaXRDb21taXRzKHJlc3VsdHMpOwotCi0gICAgICAgICAgICBjb25zdCBz
cGxpdHRlZFJlc3VsdHMgPSBbXTsKLSAgICAgICAgICAgIGZvciAobGV0IHN0YXJ0SW5kZXggPSAw
OyBzdGFydEluZGV4IDwgcmVzdWx0cy5sZW5ndGg7IHN0YXJ0SW5kZXggKz0gdGhpcy5fbWF4U3Vi
bWl0Q291bnQpCi0gICAgICAgICAgICAgICAgc3BsaXR0ZWRSZXN1bHRzLnB1c2gocmVzdWx0cy5z
bGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgdGhpcy5fbWF4U3VibWl0Q291bnQpKTsKLQot
ICAgICAgICAgICAgcmV0dXJuIG1hcEluU2VyaWFsUHJvbWlzZUNoYWluKHNwbGl0dGVkUmVzdWx0
cywgdGhpcy5fc3VibWl0Q29tbWl0cy5iaW5kKHRoaXMpKS50aGVuKChyZXNwb25zZXMpID0+IHsK
LSAgICAgICAgICAgICAgICBhc3NlcnQocmVzcG9uc2VzLmV2ZXJ5KChyZXNwb25zZSkgPT4gcmVz
cG9uc2VbJ3N0YXR1cyddID09ICdPSycpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQocmVzcG9u
c2VzLmxlbmd0aCA+IDApOwotICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZXNbMF07Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgICAgIGNvbnN0IHtuZXdDb21taXRzVG9S
ZXBvcnQsIGNvbW1pdHNUb1VwZGF0ZX0gPSBhd2FpdCB0aGlzLl9mZXRjaEF2YWlsYWJsZUJ1aWxk
cygpOworCisgICAgICAgIHRoaXMuX2xvZ2dlci5sb2coYFN1Ym1pdHRpbmcgJHtuZXdDb21taXRz
VG9SZXBvcnQubGVuZ3RofSBidWlsZHMgZm9yICR7dGhpcy5fb3NDb25maWdbJ25hbWUnXX1gKTsK
KyAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0VG9FbmRQb2ludCgnL2FwaS9yZXBvcnQtY29tbWl0
cy8nLCBuZXdDb21taXRzVG9SZXBvcnQpOworCisgICAgICAgIHRoaXMuX2xvZ2dlci5sb2coYFVw
ZGF0aW5nICR7Y29tbWl0c1RvVXBkYXRlLmxlbmd0aH0gYnVpbGRzIGZvciAke3RoaXMuX29zQ29u
ZmlnWyduYW1lJ119YCk7CisgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydFRvRW5kUG9pbnQoJy9h
cGkvdXBkYXRlLWNvbW1pdHMvJywgY29tbWl0c1RvVXBkYXRlKTsKICAgICB9CiAKLSAgICBfZmV0
Y2hBdmFpbGFibGVCdWlsZHMoKQorICAgIGFzeW5jIF9mZXRjaEF2YWlsYWJsZUJ1aWxkcygpCiAg
ICAgewogICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9vc0NvbmZpZzsKICAgICAgICAgY29u
c3QgcmVwb3NpdG9yeU5hbWUgPSBjb25maWdbJ25hbWUnXTsKLSAgICAgICAgbGV0IGN1c3RvbUNv
bW1hbmRzID0gY29uZmlnWydjdXN0b21Db21tYW5kcyddOworICAgICAgICBjb25zdCBuZXdDb21t
aXRzVG9SZXBvcnQgPSBbXTsKKyAgICAgICAgY29uc3QgY29tbWl0c1RvVXBkYXRlID0gW107Cisg
ICAgICAgIGNvbnN0ICBjdXN0b21Db21tYW5kcyA9IGNvbmZpZ1snY3VzdG9tQ29tbWFuZHMnXTsK
IAotICAgICAgICByZXR1cm4gbWFwSW5TZXJpYWxQcm9taXNlQ2hhaW4oY3VzdG9tQ29tbWFuZHMs
IChjb21tYW5kKSA9PiB7CisgICAgICAgIGZvciAoY29uc3QgY29tbWFuZCBvZiBjdXN0b21Db21t
YW5kcykgewogICAgICAgICAgICAgYXNzZXJ0KGNvbW1hbmRbJ21pblJldmlzaW9uJ10pOwogICAg
ICAgICAgICAgYXNzZXJ0KGNvbW1hbmRbJ21heFJldmlzaW9uJ10pOwogICAgICAgICAgICAgY29u
c3QgbWluUmV2aXNpb25PcmRlciA9IHRoaXMuX2NvbXB1dGVPcmRlcihjb21tYW5kWydtaW5SZXZp
c2lvbiddKTsKICAgICAgICAgICAgIGNvbnN0IG1heFJldmlzaW9uT3JkZXIgPSB0aGlzLl9jb21w
dXRlT3JkZXIoY29tbWFuZFsnbWF4UmV2aXNpb24nXSk7CiAKICAgICAgICAgICAgIGNvbnN0IHVy
bCA9IGAvYXBpL2NvbW1pdHMvJHtlc2NhcGUocmVwb3NpdG9yeU5hbWUpfS9sYXN0LXJlcG9ydGVk
P2Zyb209JHttaW5SZXZpc2lvbk9yZGVyfSZ0bz0ke21heFJldmlzaW9uT3JkZXJ9YDsKKyAgICAg
ICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX3JlbW90ZUFQSS5nZXRKU09OV2l0aFN0
YXR1cyh1cmwpOworICAgICAgICAgICAgY29uc3QgbWluT3JkZXIgPSByZXN1bHRbJ2NvbW1pdHMn
XS5sZW5ndGggPT0gMSA/IHBhcnNlSW50KHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddKSAr
IDEgOiBtaW5SZXZpc2lvbk9yZGVyOwogCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3Rl
QVBJLmdldEpTT05XaXRoU3RhdHVzKHVybCkudGhlbigocmVzdWx0KSA9PiB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgbWluT3JkZXIgPSByZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGggPT0gMSA/IHBh
cnNlSW50KHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddKSArIDEgOiBtaW5SZXZpc2lvbk9y
ZGVyOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb21taXRzRm9yQXZhaWxhYmxlQnVp
bGRzKHJlcG9zaXRvcnlOYW1lLCBjb21tYW5kWydjb21tYW5kJ10sIGNvbW1hbmRbJ2xpbmVzVG9J
Z25vcmUnXSwgbWluT3JkZXIsIG1heFJldmlzaW9uT3JkZXIpOwotICAgICAgICAgICAgfSkudGhl
bigoY29tbWl0cykgPT4gewotICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gJ25hbWUnIGlu
IGNvbW1hbmQgPyBgIiR7Y29tbWFuZFsnbmFtZSddfSJgIDogYCIke2NvbW1hbmRbJ21pblJldmlz
aW9uJ119IiB0byAiJHtjb21tYW5kWydtYXhSZXZpc2lvbiddfSJgOwotICAgICAgICAgICAgICAg
IHRoaXMuX2xvZ2dlci5sb2coYEZvdW5kICR7Y29tbWl0cy5sZW5ndGh9IGJ1aWxkcyBmb3IgJHts
YWJlbH1gKTsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdEluZm8gPSBhd2FpdCB0aGlzLl9jb21t
aXRzRm9yQXZhaWxhYmxlQnVpbGRzKGNvbW1hbmRbJ2NvbW1hbmQnXSwgY29tbWFuZFsnbGluZXNU
b0lnbm9yZSddKTsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdHMgPSB0aGlzLl9jb21taXRzV2l0
aGluUmFuZ2UoY29tbWl0SW5mby5hbGxSZXZpc2lvbnMsIHJlcG9zaXRvcnlOYW1lLCBtaW5PcmRl
ciwgbWF4UmV2aXNpb25PcmRlcik7CiAKLSAgICAgICAgICAgICAgICBpZiAoJ293bmVkQ29tbWl0
Q29tbWFuZCcgaW4gY29tbWFuZCkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIu
bG9nKGBSZXNvbHZpbmcgb3duZWRDb21taXRzIGZvciAke2xhYmVsfWApOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fYWRkT3duZWRDb21taXRzRm9yQnVpbGQoY29tbWl0cywgY29t
bWFuZFsnb3duZWRDb21taXRDb21tYW5kJ10pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNvbnN0IGxhYmVsID0gJ25hbWUnIGluIGNvbW1hbmQgPyBgIiR7Y29tbWFuZFsnbmFtZSdd
fSJgIDogYCIke2NvbW1hbmRbJ21pblJldmlzaW9uJ119IiB0byAiJHtjb21tYW5kWydtYXhSZXZp
c2lvbiddfSJgOworICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmxvZyhgRm91bmQgJHtjb21taXRz
Lmxlbmd0aH0gYnVpbGRzIGZvciAke2xhYmVsfWApOworICAgICAgICAgICAgaWYgKCdvd25lZENv
bW1pdENvbW1hbmQnIGluIGNvbW1hbmQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIu
bG9nKGBSZXNvbHZpbmcgb3duZWRDb21taXRzIGZvciAke2xhYmVsfWApOworICAgICAgICAgICAg
ICAgIGF3YWl0IHRoaXMuX2FkZE93bmVkQ29tbWl0c0ZvckJ1aWxkKGNvbW1pdHMsIGNvbW1hbmRb
J293bmVkQ29tbWl0Q29tbWFuZCddKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ld0Nv
bW1pdHNUb1JlcG9ydC5wdXNoKC4uLmNvbW1pdHMpOwogCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGNvbW1pdHM7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSkudGhlbigocmVzdWx0cykgPT4g
W10uY29uY2F0KC4uLnJlc3VsdHMpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgW3JldmlzaW9u
LCB0ZXN0YWJpbGl0eVdhcm5pbmddIG9mIE9iamVjdC5lbnRyaWVzKGNvbW1pdEluZm8uY29tbWl0
c1dpdGhUZXN0YWJpbGl0eVdhcm5pbmdzKSkKKyAgICAgICAgICAgICAgICBjb21taXRzVG9VcGRh
dGUucHVzaCh7cmVwb3NpdG9yeTogcmVwb3NpdG9yeU5hbWUsIHJldmlzaW9uLCB0ZXN0YWJpbGl0
eVdhcm5pbmd9KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4ge25ld0NvbW1pdHNUb1JlcG9y
dCwgY29tbWl0c1RvVXBkYXRlfTsKICAgICB9CiAKICAgICBfY29tcHV0ZU9yZGVyKHJldmlzaW9u
KQpAQCAtODksMTcgKzg2LDI3IEBAIGNsYXNzIE9TQnVpbGRGZXRjaGVyIHsKICAgICAgICAgcmV0
dXJuICgobWFqb3IgKiAxMDAgKyBraW5kKSAqIDEwMDAwICsgbWlub3IpICogMTAwICsgdmFyaWFu
dDsKICAgICB9CiAKLSAgICBfY29tbWl0c0ZvckF2YWlsYWJsZUJ1aWxkcyhyZXBvc2l0b3J5LCBj
b21tYW5kLCBsaW5lc1RvSWdub3JlLCBtaW5PcmRlciwgbWF4T3JkZXIpCisgICAgYXN5bmMgX2Nv
bW1pdHNGb3JBdmFpbGFibGVCdWlsZHMoY29tbWFuZCwgbGluZXNUb0lnbm9yZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9zdWJwcm9jZXNzLmV4ZWN1dGUoY29tbWFuZCkudGhlbigob3V0
cHV0KSA9PiB7CisgICAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHRoaXMuX3N1YnByb2Nlc3Mu
ZXhlY3V0ZShjb21tYW5kKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBKU09O
LnBhcnNlKG91dHB1dCk7CisgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICBp
ZiAoIShlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSkKKyAgICAgICAgICAgICAgICB0aHJv
dyBlcnJvcjsKICAgICAgICAgICAgIGxldCBsaW5lcyA9IG91dHB1dC5zcGxpdCgnXG4nKTsKLSAg
ICAgICAgICAgIGlmIChsaW5lc1RvSWdub3JlKXsKKyAgICAgICAgICAgIGlmIChsaW5lc1RvSWdu
b3JlKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGxpbmVzVG9J
Z25vcmUpOwogICAgICAgICAgICAgICAgIGxpbmVzID0gbGluZXMuZmlsdGVyKChsaW5lKSA9PiAh
cmVnZXguZXhlYyhsaW5lKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbGlu
ZXMubWFwKChyZXZpc2lvbikgPT4gKHtyZXBvc2l0b3J5LCByZXZpc2lvbiwgJ29yZGVyJzogdGhp
cy5fY29tcHV0ZU9yZGVyKHJldmlzaW9uKX0pKQotICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNv
bW1pdCkgPT4gY29tbWl0WydvcmRlciddID49IG1pbk9yZGVyICYmIGNvbW1pdFsnb3JkZXInXSA8
PSBtYXhPcmRlcik7Ci0gICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHthbGxSZXZpc2lv
bnM6IGxpbmVzLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3M6IHt9fTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIF9jb21taXRzV2l0aGluUmFuZ2UocmV2aXNpb25zLCByZXBvc2l0b3J5
LCBtaW5PcmRlciwgbWF4T3JkZXIpCisgICAgeworICAgICAgICByZXR1cm4gcmV2aXNpb25zLm1h
cCgocmV2aXNpb24pID0+ICh7cmVwb3NpdG9yeSwgcmV2aXNpb24sICdvcmRlcic6IHRoaXMuX2Nv
bXB1dGVPcmRlcihyZXZpc2lvbil9KSkKKyAgICAgICAgICAgIC5maWx0ZXIoKGNvbW1pdCkgPT4g
Y29tbWl0WydvcmRlciddID49IG1pbk9yZGVyICYmIGNvbW1pdFsnb3JkZXInXSA8PSBtYXhPcmRl
cik7CiAgICAgfQogCiAgICAgX2FkZE93bmVkQ29tbWl0c0ZvckJ1aWxkKGNvbW1pdHMsIGNvbW1h
bmQpCkBAIC0xMTksMTAgKzEyNiwxNiBAQCBjbGFzcyBPU0J1aWxkRmV0Y2hlciB7CiAgICAgICAg
IH0pOwogICAgIH0KIAotICAgIF9zdWJtaXRDb21taXRzKGNvbW1pdHMpCisgICAgYXN5bmMgX3Jl
cG9ydFRvRW5kUG9pbnQoZW5kUG9pbnQsIGNvbW1pdHNUb1Bvc3QpCiAgICAgewotICAgICAgICBj
b25zdCBjb21taXRzVG9SZXBvcnQgPSB7InNsYXZlTmFtZSI6IHRoaXMuX3NsYXZlQXV0aFsnbmFt
ZSddLCAic2xhdmVQYXNzd29yZCI6IHRoaXMuX3NsYXZlQXV0aFsncGFzc3dvcmQnXSwgJ2NvbW1p
dHMnOiBjb21taXRzfTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3JlbW90ZUFQSS5wb3N0SlNPTldp
dGhTdGF0dXMoJy9hcGkvcmVwb3J0LWNvbW1pdHMvJywgY29tbWl0c1RvUmVwb3J0KTsKKyAgICAg
ICAgaWYgKCFjb21taXRzVG9Qb3N0Lmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBmb3IobGV0IGNvbW1pdHNUb1N1Ym1pdCA9IGNvbW1pdHNUb1Bvc3Quc3BsaWNlKDAsIHRo
aXMuX21heFN1Ym1pdENvdW50KTsgY29tbWl0c1RvU3VibWl0Lmxlbmd0aDsgY29tbWl0c1RvU3Vi
bWl0ID0gY29tbWl0c1RvUG9zdC5zcGxpY2UoMCwgdGhpcy5fbWF4U3VibWl0Q291bnQpKSB7Cisg
ICAgICAgICAgICBjb25zdCByZXBvcnQgPSB7InNsYXZlTmFtZSI6IHRoaXMuX3NsYXZlQXV0aFsn
bmFtZSddLCAic2xhdmVQYXNzd29yZCI6IHRoaXMuX3NsYXZlQXV0aFsncGFzc3dvcmQnXSwgJ2Nv
bW1pdHMnOiBjb21taXRzVG9TdWJtaXR9OworICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBh
d2FpdCB0aGlzLl9yZW1vdGVBUEkucG9zdEpTT05XaXRoU3RhdHVzKGVuZFBvaW50LCByZXBvcnQp
OworICAgICAgICAgICAgYXNzZXJ0KHJlc3BvbnNlWydzdGF0dXMnXSA9PT0gJ09LJyk7CisgICAg
ICAgIH0KICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90
b29scy9zeW5jLW9zLXZlcnNpb25zLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xz
L3N5bmMtb3MtdmVyc2lvbnMuanMKaW5kZXggNzdmNGEwYTdkMzQzODE5NDMwNzZiODNlYzQ4ZDVi
YzkwYjQ4MzU4Ni4uNGZiZTU4MmJmMDM4OGRhNGE0YjNhNzUzMDdkMmYxNmI2MjI5N2M3OCAxMDA2
NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL3N5bmMtb3MtdmVyc2lvbnMu
anMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL3N5bmMtb3MtdmVyc2lvbnMu
anMKQEAgLTI5LDcgKzI5LDcgQEAgZnVuY3Rpb24gc3luY0xvb3Aob3B0aW9ucykKICAgICBjb25z
dCByZW1vdGVBUEkgPSBuZXcgUmVtb3RlQVBJKHNlcnZlckNvbmZpZy5zZXJ2ZXIpOwogCiAgICAg
Y29uc3QgZmV0Y2hlcnMgPSBvc0NvbmZpZ0xpc3QubWFwKChvc0NvbmZpZykgPT4gbmV3IE9TQnVp
bGRGZXRjaGVyKG9zQ29uZmlnLCByZW1vdGVBUEksIHNlcnZlckNvbmZpZy5zbGF2ZSwgbmV3IFN1
YnByb2Nlc3MsIGNvbnNvbGUpKTsKLSAgICBPU0J1aWxkRmV0Y2hlci5mZXRjaEFuZFJlcG9ydEFs
bEluT3JkZXIoZmV0Y2hlcnMpLmNhdGNoKChlcnJvcikgPT4geworICAgIE9TQnVpbGRGZXRjaGVy
LmZldGNoUmVwb3J0QW5kVXBkYXRlQ29tbWl0cyhmZXRjaGVycykuY2F0Y2goKGVycm9yKSA9PiB7
CiAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICBpZiAodHlwZW9mKGVycm9y
LnN0YWNrKSA9PSAnc3RyaW5nJykgewogICAgICAgICAgICAgZm9yIChsZXQgbGluZSBvZiBlcnJv
ci5zdGFjay5zcGxpdCgnXG4nKSkKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy91bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRlc3RzLmpzCmluZGV4IDVmODg1MjQ5MjA2MGVlYTZm
MzMwNWJiYzBmNTRlYjYwYzAxMGIyYTMuLjljNmVkZjkxN2Q2NDE0ZGVmNzFjOGU2YmQ4YTE0Y2E1
MzFmZWNjMWIgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3Rz
L2NvbW1pdC1sb2ctdGVzdHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQt
dGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qcwpAQCAtNTgsNiArNTgsMTggQEAgZnVuY3Rpb24gb3N4
Q29tbWl0KCkKICAgICB9KTsKIH0KIAorZnVuY3Rpb24gb3N4Q29tbWl0V2l0aFRlc3RhYmlsaXR5
V2FybmluZygpCit7CisgICAgcmV0dXJuIG5ldyBDb21taXRMb2coNSwgeworICAgICAgICBpZDog
NSwKKyAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3gsCisgICAgICAgIHJldmlzaW9u
OiAnMTAuMTEuNCAxNUU2NScsCisgICAgICAgIHRpbWU6IG51bGwsCisgICAgICAgIG9yZGVyOiAx
NTA0MDY1LAorICAgICAgICB0ZXN0YWJpbGl0eVdhcm5pbmc6ICJQYW5pYyBvbiBib290IgorICAg
IH0pOworfQorCiBmdW5jdGlvbiBvbGRPU1hDb21taXQoKQogewogICAgIHJldHVybiBuZXcgQ29t
bWl0TG9nKDYsIHsKQEAgLTQxNyw2ICs0MjksMTMgQEAgZGVzY3JpYmUoJ0NvbW1pdExvZycsIGZ1
bmN0aW9uICgpIHsKICAgICAgICAgfSk7CiAgICAgfSk7CiAKKyAgICBkZXNjcmliZSgndGVzdGFi
aWxpdHlXYXJuaW5nJywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAidGVzdGFi
aWxpdHlXYXJuaW5nIiBtZXNzYWdlJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29tbWl0
ID0gb3N4Q29tbWl0V2l0aFRlc3RhYmlsaXR5V2FybmluZygpOworICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKGNvbW1pdC50ZXN0YWJpbGl0eVdhcm5pbmcoKSwgJ1BhbmljIG9uIGJvb3QnKTsKKyAg
ICAgICAgfSk7CisgICAgfSk7CisKICAgICBjb25zdCBjb21taXRzQVBJUmVzcG9uc2UgPSB7CiAg
ICAgICAgICJjb21taXRzIjpbewogICAgICAgICAgICAgImlkIjogIjgzMTE1MSIsCmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtc2V0LXRlc3Rz
LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0
cy5qcwppbmRleCAzOWZjY2M1NDc1OWY4NzlmMWNlMDM4M2IwYTliMmNlN2ZjNWI5YTQ5Li5iYTZj
MTA3ZDA4OWFlYzE5NWNiMmU5YTFhODBjOWZjMjU4OTA1ZTMyIDEwMDY0NAotLS0gYS9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzCisrKyBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanMKQEAg
LTE3MCw2ICsxNzAsMTggQEAgZnVuY3Rpb24gYW5vdGhlckNvbW1pdFdpdGhHaXRSZXZpc2lvbigp
CiAgICAgfSk7CiB9CiAKK2Z1bmN0aW9uIGNvbW1pdFdpdGhUZXN0YWJpbGl0eVdhcm5pbmcoKQor
eworICAgIHJldHVybiBDb21taXRMb2cuZW5zdXJlU2luZ2xldG9uKDIwMjMsIHsKKyAgICAgICAg
aWQ6IDIwMjMsCisgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMud2Via2l0R2l0LAorICAg
ICAgICByZXZpc2lvbjogJ2YyNGZjNjc4NzNhMDA2OGZkNWEzYTlhZGFjNTk1ZjAwMzZjMjEzMTUn
LAorICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgIHRpbWU6IDE0NTY5MzI3NzMw
MDAsCisgICAgICAgIHRlc3RhYmlsaXR5V2FybmluZzogJ0ZhaWxlZCBjb21waWxhdGlvbicKKyAg
ICB9KTsKK30KKwogZGVzY3JpYmUoJ0NvbW1pdFNldCcsICgpID0+IHsKICAgICBNb2NrUmVtb3Rl
QVBJLmluamVjdChudWxsLCBCcm93c2VyUHJpdmlsZWdlZEFQSSk7CiAgICAgTW9ja01vZGVscy5p
bmplY3QoKTsKQEAgLTI5NCw2ICszMDYsMTUgQEAgZGVzY3JpYmUoJ0NvbW1pdFNldCcsICgpID0+
IHsKICAgICAgICAgfSk7CiAgICAgfQogCisgICAgZnVuY3Rpb24gY29tbWl0U2V0V2l0aFRlc3Rh
YmlsaXR5V2FybmluZygpCisgICAgeworICAgICAgICByZXR1cm4gQ29tbWl0U2V0LmVuc3VyZVNp
bmdsZXRvbigxNiwgeworICAgICAgICAgICAgcmV2aXNpb25JdGVtczogW3sgY29tbWl0OiBjb21t
aXRXaXRoVGVzdGFiaWxpdHlXYXJuaW5nKCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAg
ICAgICAgICAgICAgeyBjb21taXQ6IHdlYmtpdENvbW1pdCgpLCByZXF1aXJlc0J1aWxkOiBmYWxz
ZSB9XSwKKyAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXQorICAgICAgICB9KTsKKyAgICB9CisK
ICAgICBmdW5jdGlvbiBvbmVNZWFzdXJlbWVudENvbW1pdFNldCgpCiAgICAgewogICAgICAgICBy
ZXR1cm4gTWVhc3VyZW1lbnRDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDEsIFsKQEAgLTQwNiw2
ICs0MjcsMjUgQEAgZGVzY3JpYmUoJ0NvbW1pdFNldCcsICgpID0+IHsKICAgICAgICAgICAgICAg
ICAgICAgeycxMSc6IHsgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTAnLCBvd25lclJldmlzaW9u
OiBudWxsLCBwYXRjaDogbnVsbH0sIGN1c3RvbVJvb3RzOiBbNDU2LCA0NThdfV0pOwogICAgICAg
ICB9KTsKICAgICB9KTsKKworICAgIGRlc2NyaWJlKCdjb21taXRzV2l0aFRlc3RhYmlsaXR5V2Fy
bmluZ3MnLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGNvbW1pdHMgd2l0aCB0
ZXN0YWJpbGl0eSB3YXJuaW5nJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29tbWl0cyA9
IGNvbW1pdFNldFdpdGhUZXN0YWJpbGl0eVdhcm5pbmcoKS5jb21taXRzV2l0aFRlc3RhYmlsaXR5
V2FybmluZ3MoKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzLmxlbmd0aCwgMSk7
CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1swXSwgY29tbWl0V2l0aFRlc3RhYmls
aXR5V2FybmluZygpKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4g
ZW1wdHkgbGlzdCBpZiBubyBjb21taXQgaW4gY29tbWl0IHNldCBjb250YWlucyB0ZXN0YWJsaXR5
IHdhcm5pbmcnLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb21taXRzID0gY29tbWl0U2V0
V2l0aFR3b0NvbW1pdHMoKS5jb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MoKTsKKyAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzLmxlbmd0aCwgMCk7CisgICAgICAgIH0pOworICAg
IH0pOworCisgICAgZGVzY3JpYmUoJ2NvbW1pdHMnLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91
bGQgcmV0dXJuIGFsbCBjb21taXRzIGluIGNvbW1pdCBzZXQnLCAoKSA9PiB7CisgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwoY29tbWl0U2V0V2l0aFR3b0NvbW1pdHMoKS5jb21taXRzKCkubGVuZ3Ro
LCAyKTsKKyAgICAgICAgfSk7CisgICAgfSk7CiB9KTsKIAogZGVzY3JpYmUoJ0ludGVybWVkaWF0
ZUNvbW1pdFNldCcsICgpID0+IHsKQEAgLTYyOSw5ICs2NjksNyBAQCBkZXNjcmliZSgnSW50ZXJt
ZWRpYXRlQ29tbWl0U2V0JywgKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydCghY29tbWl0
U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy53ZWJraXQpKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9KTsKLQogICAgIH0pOwotCiB9KTsKIAogZGVzY3JpYmUoJ0N1c3RvbUNv
bW1pdFNldCcsICgpID0+IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357656</attachid>
            <date>2018-12-18 22:38:22 -0800</date>
            <delta_ts>2018-12-20 01:59:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191557-20181218223821.patch</filename>
            <type>text/plain</type>
            <size>77203</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5MTM1CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBkMDZkYzBjYWRhYTkzNWVkMTM4NzlkNWQzYWM4NDFhOGY3YzJhMDI5Li5mZTE4ZGI5MzAz
ZjRjZWIxMWI5Yzk3Y2Y0NWFkODlkN2U2YjIyMTBlIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxOC0xMi0xNCAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmQgY29tbWl0cyB0YWJsZSB0byBjb250YWluIHRl
c3RhYmlsaXR5IGluZm9ybWF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkxNTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gc3RvcmUgdGVzdGFiaWxpdHkgbWVz
c2FnZSBpbiBjb21taXRzIHRhYmxlLgorICAgICAgICBSZWZhY3RvcmVkICcvYXBpL3JlcG9ydC1j
b21taXRzJyB0byBzdXBwb3J0IHVwZGF0aW5nIGNvbW1pdCBvbmx5LgorICAgICAgICBVcGRhdGVk
IG9zIHZlcnNpb24gc3luY2luZyBzY3JpcHQgdG8gYmUgYWJsZSB0byB1cGRhdGUgdGVzdGFiaWxp
dHkgaW5mb3JtYXRpb24uCisKKyAgICAgICAgKiBpbml0LWRhdGFiYXNlLnNxbDogQWRkZWQgJ2Nv
bW1pdF90ZXN0YWJpbGl0eScgZmllbGQgdG8gJ2NvbW1pdHMnIHRhYmxlLgorICAgICAgICAqIHB1
YmxpYy9hcGkvcmVwb3J0LWNvbW1pdHMucGhwOiBSZWZhY3RvciB0aGlzIGFwaSB0byBhbGxvdyBv
bmx5IHVwZGF0ZSBleGlzdGluZyBjb21taXRzLgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2Nv
bW1pdC1sb2ctZmV0Y2hlci5waHA6IEV4cG9zZSB0ZXN0YWJpbGl0eSB3YXJuaW5nIGluZm9ybWF0
aW9uIGluIHRoaXMgQVBJLgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2NvbW1pdC1tb2RpZmll
ci5waHA6IEFkZGVkICdDb21taXRNb2RpZmllcicgdG8gbWFuYWdlIGNvbW1pdCBpbnNlcnQgYW5k
IHVwZGF0ZS4KKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanM6IENvbW1p
dExvZyBvYmplY3Qgc2hvdWxkIGV4cG9zZSB0ZXN0YWJpbGl0eSB3YXJuaW5nIGluZm9ybWF0aW9u
LgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlwZS51cGRhdGVTaW5nbGV0b24pOgorICAgICAg
ICAoQ29tbWl0TG9nLnByb3RvdHlwZS50ZXN0YWJpbGl0eSk6CisgICAgICAgICogcHVibGljL3Yz
L21vZGVscy9jb21taXQtc2V0LmpzOiBBZGRlZCAnY29tbWl0c1dpdGhUZXN0YWJpbGl0eScgYW5k
ICdjb21taXRzJyB0byBDb21taXRTZXQgYW5kCisgICAgICAgIEludGVybWVkaWF0ZUNvbW1pdFNl
dCBpbnN0YW5jZXMuCisgICAgICAgIChDb21taXRTZXQucHJvdG90eXBlLmNvbW1pdHNXaXRoVGVz
dGFiaWxpdHkpOgorICAgICAgICAoQ29tbWl0U2V0LnByb3RvdHlwZS5jb21taXRzKToKKyAgICAg
ICAgKEludGVybWVkaWF0ZUNvbW1pdFNldC5wcm90b3R5cGUuY29tbWl0c1dpdGhUZXN0YWJpbGl0
eSk6CisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90eXBlLmNvbW1pdHMpOgor
ICAgICAgICAqIHNlcnZlci10ZXN0cy9hcGktcmVwb3J0LWNvbW1pdHMtdGVzdHMuanM6IEFkZGVk
IHVuaXQgdGVzdHMgZm9yICcvYXBpL3JlcG9ydC1jb21taXRzJyB3aGVuIGBpbnNlcnQ9ZmFsc2Vg
LgorICAgICAgICAqIHNlcnZlci10ZXN0cy90b29scy1vcy1idWlsZC1mZXRjaGVyLXRlc3RzLmpz
OiBBZGRlZCBhbmQgdXBkYXRlZCB1bml0IHRlc3RzLgorICAgICAgICAqIHRvb2xzL2pzL29zLWJ1
aWxkLWZldGNoZXIuanM6IEFkZGVkIHRoZSBhYmlsaXR5IHRvIHVwZGF0ZSBjb21taXQgdGVzdGFi
aWxpdHkgd2FybmluZ3MuCisgICAgICAgIChhc3luYy5mZXRjaFJlcG9ydEFuZFVwZGF0ZUNvbW1p
dHMpOgorICAgICAgICAocHJvdG90eXBlLmFzeW5jLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRz
KToKKyAgICAgICAgKHByb3RvdHlwZS5hc3luYy5fZmV0Y2hBdmFpbGFibGVCdWlsZHMpOgorICAg
ICAgICAocHJvdG90eXBlLmFzeW5jLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKToKKyAgICAg
ICAgKHByb3RvdHlwZS5fY29tbWl0c1dpdGhpblJhbmdlKToKKyAgICAgICAgKHByb3RvdHlwZS5h
c3luYy5fcmVwb3J0Q29tbWl0cyk6CisgICAgICAgIChmZXRjaEFuZFJlcG9ydEFsbEluT3JkZXIp
OiBEZWxldGVkLgorICAgICAgICAocHJvdG90eXBlLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzKTog
RGVsZXRlZC4KKyAgICAgICAgKHByb3RvdHlwZS5fZmV0Y2hBdmFpbGFibGVCdWlsZHMpOiBEZWxl
dGVkLgorICAgICAgICAocHJvdG90eXBlLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKHByb3RvdHlwZS5fc3VibWl0Q29tbWl0cyk6IERlbGV0ZWQuCisgICAg
ICAgICogdG9vbHMvc3luYy1vcy12ZXJzaW9ucy5qczoKKyAgICAgICAgKiB1bml0LXRlc3RzL2Nv
bW1pdC1sb2ctdGVzdHMuanM6IEFkZGVkIGEgdW5pdCB0ZXN0IGZvciAndGVzdGFiaWxpdHknLgor
ICAgICAgICAqIHVuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qczogQWRkZWQgdW5pdCB0ZXN0
cyBmb3IgJ2NvbW1pdHNXaXRoVGVzdGFiaWxpdHknLgorCiAyMDE4LTExLTE2ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1hbmlmZXN0IGZpbGUgY2FuIGNvbnRh
aW4gYSB0ZXN0IG1ldHJpYyB3aGljaCByZWZlcmVuY2VzIGEgbm9uLWV4aXN0ZW50IHRlc3QKZGlm
ZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9pbml0LWRhdGFiYXNlLnNxbCBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9pbml0LWRhdGFiYXNlLnNxbAppbmRleCA4MTYxZWZlM2Uy
ODFlMzRhMGRjNDRlZGI4MGNhYjZjM2JiYzM3YmE2Li5jN2I3ZDYwYmM5YzFiMTAwNDY4MDc3Njll
NDVhMzcyNWZiYTA0NDdiIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvaW5p
dC1kYXRhYmFzZS5zcWwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL2luaXQtZGF0YWJh
c2Uuc3FsCkBAIC0xMDEsNiArMTAxLDcgQEAgQ1JFQVRFIFRBQkxFIGNvbW1pdHMgKAogICAgIGNv
bW1pdF9jb21taXR0ZXIgaW50ZWdlciBSRUZFUkVOQ0VTIGNvbW1pdHRlcnMgT04gREVMRVRFIENB
U0NBREUsCiAgICAgY29tbWl0X21lc3NhZ2UgdGV4dCwKICAgICBjb21taXRfcmVwb3J0ZWQgYm9v
bGVhbiBOT1QgTlVMTCBERUZBVUxUIEZBTFNFLAorICAgIGNvbW1pdF90ZXN0YWJpbGl0eSB2YXJj
aGFyKDY0KSBERUZBVUxUIE5VTEwsCiAgICAgQ09OU1RSQUlOVCBjb21taXRfaW5fcmVwb3NpdG9y
eV9tdXN0X2JlX3VuaXF1ZSBVTklRVUUoY29tbWl0X3JlcG9zaXRvcnksIGNvbW1pdF9yZXZpc2lv
bikpOwogQ1JFQVRFIElOREVYIGNvbW1pdF90aW1lX2luZGV4IE9OIGNvbW1pdHMoY29tbWl0X3Rp
bWUpOwogQ1JFQVRFIElOREVYIGNvbW1pdF9vcmRlcl9pbmRleCBPTiBjb21taXRzKGNvbW1pdF9v
cmRlcik7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9y
ZXBvcnQtY29tbWl0cy5waHAgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9y
ZXBvcnQtY29tbWl0cy5waHAKaW5kZXggNmM2NTFhOThhYTRmZjc3ZmYyOTBhMjgyM2EzYWZiNzhi
YzkyMTQ1Yi4uZGE0MTFhZDQ2YjUxZTkyNTlmY2U2ZGJjYWM2YzZhMWYxMzEyYmIwMiAxMDA2NDQK
LS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hcGkvcmVwb3J0LWNvbW1pdHMu
cGhwCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYXBpL3JlcG9ydC1jb21t
aXRzLnBocApAQCAtMSw2ICsxLDcgQEAKIDw/cGhwCiAKIHJlcXVpcmUoJy4uL2luY2x1ZGUvanNv
bi1oZWFkZXIucGhwJyk7CityZXF1aXJlKCcuLi9pbmNsdWRlL2NvbW1pdC11cGRhdGVyLnBocCcp
OwogCiBmdW5jdGlvbiBtYWluKCRwb3N0X2RhdGEpCiB7CkBAIC0xMiw5MyArMTMsMTUgQEAgZnVu
Y3Rpb24gbWFpbigkcG9zdF9kYXRhKQogCiAgICAgdmVyaWZ5X3NsYXZlKCRkYiwgJHJlcG9ydCk7
CiAKLSAgICAkY29tbWl0cyA9IGFycmF5X2dldCgkcmVwb3J0LCAnY29tbWl0cycsIGFycmF5KCkp
OworICAgICRjb21taXRfaW5mb19saXN0ID0gYXJyYXlfZ2V0KCRyZXBvcnQsICdjb21taXRzJywg
YXJyYXkoKSk7CisgICAgJHNob3VsZF9pbnNlcnQgPSBhcnJheV9nZXQoJHJlcG9ydCwgJ2luc2Vy
dCcsIHRydWUpOwogCi0gICAgZm9yZWFjaCAoJGNvbW1pdHMgYXMgJGNvbW1pdF9pbmZvKSB7Ci0g
ICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygncmVwb3NpdG9yeScsICRjb21taXRfaW5mbykp
Ci0gICAgICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ01pc3NpbmdSZXBvc2l0b3J5TmFtZScsIGFy
cmF5KCdjb21taXQnID0+ICRjb21taXRfaW5mbykpOwotICAgICAgICBpZiAoIWFycmF5X2tleV9l
eGlzdHMoJ3JldmlzaW9uJywgJGNvbW1pdF9pbmZvKSkKLSAgICAgICAgICAgIGV4aXRfd2l0aF9l
cnJvcignTWlzc2luZ1JldmlzaW9uJywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7
Ci0gICAgICAgIHJlcXVpcmVfZm9ybWF0KCdSZXZpc2lvbicsICRjb21taXRfaW5mb1sncmV2aXNp
b24nXSwgJy9eW0EtWmEtejAtOSBcLl0rJC8nKTsKLSAgICAgICAgaWYgKGFycmF5X2tleV9leGlz
dHMoJ2F1dGhvcicsICRjb21taXRfaW5mbykgJiYgIWlzX2FycmF5KCRjb21taXRfaW5mb1snYXV0
aG9yJ10pKQotICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdJbnZhbGlkQXV0aG9yRm9ybWF0
JywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7Ci0gICAgfQotCi0gICAgJGRiLT5i
ZWdpbl90cmFuc2FjdGlvbigpOwotICAgIGZvcmVhY2ggKCRjb21taXRzIGFzICRjb21taXRfaW5m
bykgewotICAgICAgICAkcmVwb3NpdG9yeV9pZCA9ICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3co
J3JlcG9zaXRvcmllcycsICdyZXBvc2l0b3J5JywgYXJyYXkoJ25hbWUnID0+ICRjb21taXRfaW5m
b1sncmVwb3NpdG9yeSddLCAnb3duZXInID0+IE5VTEwpKTsKLSAgICAgICAgaWYgKCEkcmVwb3Np
dG9yeV9pZCkgewotICAgICAgICAgICAgJGRiLT5yb2xsYmFja190cmFuc2FjdGlvbigpOwotICAg
ICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdGYWlsZWRUb0luc2VydFJlcG9zaXRvcnknLCBhcnJh
eSgnY29tbWl0JyA9PiAkY29tbWl0X2luZm8pKTsKLSAgICAgICAgfQotICAgICAgICAkb3duZXJf
Y29tbWl0X2lkID0gaW5zZXJ0X2NvbW1pdCgkZGIsICRjb21taXRfaW5mbywgJHJlcG9zaXRvcnlf
aWQsIE5VTEwpOwotICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJ293bmVkQ29tbWl0cycs
ICRjb21taXRfaW5mbykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3JlYWNo
KCRjb21taXRfaW5mb1snb3duZWRDb21taXRzJ10gYXMgJG93bmVkX2NvbW1pdF9yZXBvc2l0b3J5
X25hbWUgPT4gJG93bmVkX2NvbW1pdF9pbmZvKSB7Ci0gICAgICAgICAgICBpZiAoYXJyYXlfa2V5
X2V4aXN0cygndGltZScsICRvd25lZF9jb21taXRfaW5mbykpIHsKLSAgICAgICAgICAgICAgICAk
ZGItPnJvbGxiYWNrX3RyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgZXhpdF93aXRoX2Vy
cm9yKCdPd25lZENvbW1pdFNob3VsZE5vdENvbnRhaW5UaW1lc3RhbXAnLCBhcnJheSgnY29tbWl0
JyA9PiAkb3duZWRfY29tbWl0X2luZm8pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICRv
d25lZF9jb21taXRfcmVwb3NpdG9yeV9pZCA9ICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3coJ3Jl
cG9zaXRvcmllcycsICdyZXBvc2l0b3J5JywgYXJyYXkoJ25hbWUnID0+ICRvd25lZF9jb21taXRf
cmVwb3NpdG9yeV9uYW1lLCAnb3duZXInID0+ICRyZXBvc2l0b3J5X2lkKSk7Ci0gICAgICAgICAg
ICBpZiAoISRvd25lZF9jb21taXRfcmVwb3NpdG9yeV9pZCkgewotICAgICAgICAgICAgICAgICRk
Yi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBleGl0X3dpdGhfZXJy
b3IoJ0ZhaWxlZFRvSW5zZXJ0UmVwb3NpdG9yeScsIGFycmF5KCdjb21taXQnID0+ICRvd25lZF9j
b21taXRfaW5mbykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5zZXJ0X2NvbW1pdCgk
ZGIsICRvd25lZF9jb21taXRfaW5mbywgJG93bmVkX2NvbW1pdF9yZXBvc2l0b3J5X2lkLCAkb3du
ZXJfY29tbWl0X2lkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAkZGItPmNvbW1pdF90cmFuc2Fj
dGlvbigpOworICAgICRjb21taXRfbW9kaWZpZXIgPSBuZXcgQ29tbWl0VXBkYXRlcigkZGIpOwor
ICAgICRjb21taXRfbW9kaWZpZXItPnJlcG9ydF9jb21taXRzKCRjb21taXRfaW5mb19saXN0LCAk
c2hvdWxkX2luc2VydCk7CiAKICAgICBleGl0X3dpdGhfc3VjY2VzcygpOwogfQogCi1mdW5jdGlv
biBpbnNlcnRfY29tbWl0KCRkYiwgJGNvbW1pdF9pbmZvLCAkcmVwb3NpdG9yeV9pZCwgJG93bmVy
X2NvbW1pdF9pZCkKLXsKLSAgICAkYXV0aG9yID0gYXJyYXlfZ2V0KCRjb21taXRfaW5mbywgJ2F1
dGhvcicpOwotICAgICRjb21taXR0ZXJfaWQgPSBOVUxMOwotICAgIGlmICgkYXV0aG9yKSB7Ci0g
ICAgICAgICRhY2NvdW50ID0gYXJyYXlfZ2V0KCRhdXRob3IsICdhY2NvdW50Jyk7Ci0gICAgICAg
ICRjb21taXR0ZXJfcXVlcnkgPSBhcnJheSgncmVwb3NpdG9yeScgPT4gJHJlcG9zaXRvcnlfaWQs
ICdhY2NvdW50JyA9PiAkYWNjb3VudCk7Ci0gICAgICAgICRjb21taXR0ZXJfZGF0YSA9ICRjb21t
aXR0ZXJfcXVlcnk7Ci0gICAgICAgICRuYW1lID0gYXJyYXlfZ2V0KCRhdXRob3IsICduYW1lJyk7
Ci0gICAgICAgIGlmICgkbmFtZSkKLSAgICAgICAgICAgICRjb21taXR0ZXJfZGF0YVsnbmFtZSdd
ID0gJG5hbWU7Ci0gICAgICAgICRjb21taXR0ZXJfaWQgPSAkZGItPnVwZGF0ZV9vcl9pbnNlcnRf
cm93KCdjb21taXR0ZXJzJywgJ2NvbW1pdHRlcicsICRjb21taXR0ZXJfcXVlcnksICRjb21taXR0
ZXJfZGF0YSk7Ci0gICAgICAgIGlmICghJGNvbW1pdHRlcl9pZCkgewotICAgICAgICAgICAgJGRi
LT5yb2xsYmFja190cmFuc2FjdGlvbigpOwotICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdG
YWlsZWRUb0luc2VydENvbW1pdHRlcicsIGFycmF5KCdjb21taXR0ZXInID0+ICRjb21taXR0ZXJf
ZGF0YSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgJHByZXZpb3VzX2NvbW1pdF9yZXZpc2lv
biA9IGFycmF5X2dldCgkY29tbWl0X2luZm8sICdwcmV2aW91c0NvbW1pdCcpOwotICAgICRwcmV2
aW91c19jb21taXRfaWQgPSBOVUxMOwotICAgIGlmICgkcHJldmlvdXNfY29tbWl0X3JldmlzaW9u
KSB7Ci0gICAgICAgICRwcmV2aW91c19jb21taXQgPSAkZGItPnNlbGVjdF9maXJzdF9yb3coJ2Nv
bW1pdHMnLCAnY29tbWl0JywgYXJyYXkoJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLCAn
cmV2aXNpb24nID0+ICRwcmV2aW91c19jb21taXRfcmV2aXNpb24pKTsKLSAgICAgICAgaWYgKCEk
cHJldmlvdXNfY29tbWl0KSB7Ci0gICAgICAgICAgICAkZGItPnJvbGxiYWNrX3RyYW5zYWN0aW9u
KCk7Ci0gICAgICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0ZhaWxlZFRvRmluZFByZXZpb3VzQ29t
bWl0JywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgJHByZXZpb3VzX2NvbW1pdF9pZCA9ICRwcmV2aW91c19jb21taXRbJ2NvbW1pdF9pZCddOwot
ICAgIH0KLQotICAgICRkYXRhID0gYXJyYXkoCi0gICAgICAgICdyZXBvc2l0b3J5JyA9PiAkcmVw
b3NpdG9yeV9pZCwKLSAgICAgICAgJ3JldmlzaW9uJyA9PiAkY29tbWl0X2luZm9bJ3JldmlzaW9u
J10sCi0gICAgICAgICdwcmV2aW91c19jb21taXQnID0+ICRwcmV2aW91c19jb21taXRfaWQsCi0g
ICAgICAgICdvcmRlcicgPT4gYXJyYXlfZ2V0KCRjb21taXRfaW5mbywgJ29yZGVyJyksCi0gICAg
ICAgICd0aW1lJyA9PiBhcnJheV9nZXQoJGNvbW1pdF9pbmZvLCAndGltZScpLAotICAgICAgICAn
Y29tbWl0dGVyJyA9PiAkY29tbWl0dGVyX2lkLAotICAgICAgICAnbWVzc2FnZScgPT4gYXJyYXlf
Z2V0KCRjb21taXRfaW5mbywgJ21lc3NhZ2UnKSwKLSAgICAgICAgJ3JlcG9ydGVkJyA9PiB0cnVl
LAotICAgICk7Ci0gICAgJGluc2VydGVkX2NvbW1pdF9pZCA9ICRkYi0+dXBkYXRlX29yX2luc2Vy
dF9yb3coJ2NvbW1pdHMnLCAnY29tbWl0JywgYXJyYXkoJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0
b3J5X2lkLCAncmV2aXNpb24nID0+ICRkYXRhWydyZXZpc2lvbiddKSwgJGRhdGEpOwotCi0gICAg
aWYgKCRvd25lcl9jb21taXRfaWQpCi0gICAgICAgICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3co
J2NvbW1pdF9vd25lcnNoaXBzJywgJ2NvbW1pdCcsIGFycmF5KCdvd25lcicgPT4gJG93bmVyX2Nv
bW1pdF9pZCwgJ293bmVkJyA9PiAkaW5zZXJ0ZWRfY29tbWl0X2lkKSwgTlVMTCwgJyonKTsKLSAg
ICByZXR1cm4gJGluc2VydGVkX2NvbW1pdF9pZDsKLX0KLQogbWFpbihmaWxlX2dldF9jb250ZW50
cygncGhwOi8vaW5wdXQnKSk7CiAKID8+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocCBiL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9jb21taXQtbG9nLWZldGNoZXIucGhwCmluZGV4
IDljNzYyNjNjYjY2MTZiNTk1YjFkZGRmYjk5MDk0NzJlYTE1ODlkMDguLmQ1ZjYxYTYwODk4YWIx
NTg1ZDc4MGRiNmY1NzFiMGQ2MTdjZjQyNTEgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9jb21taXQtbG9nLWZldGNoZXIucGhwCisrKyBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9jb21taXQtbG9nLWZldGNoZXIucGhw
CkBAIC02Miw2ICs2Miw3IEBAIGNsYXNzIENvbW1pdExvZ0ZldGNoZXIgewogICAgICAgICAgICAg
Y29tbWl0X3JlcG9zaXRvcnkgYXMgInJlcG9zaXRvcnkiLAogICAgICAgICAgICAgY29tbWl0X21l
c3NhZ2UgYXMgIm1lc3NhZ2UiLAogICAgICAgICAgICAgY29tbWl0X29yZGVyIGFzICJvcmRlciIs
CisgICAgICAgICAgICBjb21taXRfdGVzdGFiaWxpdHkgYXMgInRlc3RhYmlsaXR5IiwKICAgICAg
ICAgICAgIEVYSVNUUyhTRUxFQ1QgKiBGUk9NIGNvbW1pdF9vd25lcnNoaXBzIFdIRVJFIGNvbW1p
dF9vd25lciA9IGNvbW1pdF9pZCkgYXMgIm93bnNDb21taXRzIgogICAgICAgICAgICAgRlJPTSBj
b21taXRzIExFRlQgT1VURVIgSk9JTiBjb21taXR0ZXJzIE9OIGNvbW1pdF9jb21taXR0ZXIgPSBj
b21taXR0ZXJfaWQKICAgICAgICAgICAgIFdIRVJFIGNvbW1pdF9yZXBvc2l0b3J5ID0gJDEgQU5E
IGNvbW1pdF9yZXBvcnRlZCA9IHRydWUnOwpAQCAtMjExLDYgKzIxMiw3IEBAIGNsYXNzIENvbW1p
dExvZ0ZldGNoZXIgewogICAgICAgICAgICAgJ2F1dGhvck5hbWUnID0+ICRjb21taXR0ZXJfcm93
ID8gJGNvbW1pdHRlcl9yb3dbJ2NvbW1pdHRlcl9uYW1lJ10gOiBudWxsLAogICAgICAgICAgICAg
J2F1dGhvckVtYWlsJyA9PiAkY29tbWl0dGVyX3JvdyA/ICRjb21taXR0ZXJfcm93Wydjb21taXR0
ZXJfYWNjb3VudCddIDogbnVsbCwKICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAkY29tbWl0X3Jv
d1snY29tbWl0X21lc3NhZ2UnXSwKKyAgICAgICAgICAgICd0ZXN0YWJpbGl0eScgPT4gJGNvbW1p
dF9yb3dbJ2NvbW1pdF90ZXN0YWJpbGl0eSddLAogICAgICAgICAgICAgJ293bnNDb21taXRzJyA9
PiAkb3duc19jb21taXRzCiAgICAgICAgICk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2NvbW1pdC11cGRhdGVyLnBocCBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9jb21taXQtdXBkYXRlci5waHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTdmMTFjODIyYjBlMjkyN2I1ZmYzNzFiMDM2NzZiNzYzYjIxODMzNQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9jb21t
aXQtdXBkYXRlci5waHAKQEAgLTAsMCArMSwyNjEgQEAKKzw/cGhwCisKK2NsYXNzIENvbW1pdFVw
ZGF0ZXIgeworICAgIHByaXZhdGUgJGRiOworICAgIHByaXZhdGUgJHRvcF9sZXZlbF9yZXBvc2l0
b3J5X2lkX2J5X25hbWU7CisgICAgcHJpdmF0ZSAkb3duZWRfcmVwb3NpdG9yeV9ieV9uYW1lX2Fu
ZF9vd25lcl9pZDsKKyAgICBwcml2YXRlICRjb21taXRzX2J5X3JlcG9zaXRvcnlfaWQ7CisgICAg
cHJpdmF0ZSAkYXV0aG9yc19ieV9yZXBvc2l0b3J5X2lkOworICAgIHByaXZhdGUgJHVwZGF0ZXM7
CisgICAgcHJpdmF0ZSAkY29tbWl0X2RhdGFfbGlzdDsKKyAgICBwcml2YXRlICRoYXNfZXhlY3V0
aW5nX3RyYW5zYWN0aW9uOworCisgICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRiKQorICAgIHsK
KyAgICAgICAgJHRoaXMtPmRiID0gJGRiOworICAgICAgICAkdGhpcy0+aGFzX2V4ZWN1dGluZ190
cmFuc2FjdGlvbiA9IGZhbHNlOworICAgICAgICAkdGhpcy0+dG9wX2xldmVsX3JlcG9zaXRvcnlf
aWRfYnlfbmFtZSA9IGFycmF5KCk7CisgICAgICAgICR0aGlzLT5vd25lZF9yZXBvc2l0b3J5X2J5
X25hbWVfYW5kX293bmVyX2lkID0gYXJyYXkoKTsKKyAgICAgICAgJHRoaXMtPmNvbW1pdHNfYnlf
cmVwb3NpdG9yeV9pZCA9IGFycmF5KCk7CisgICAgICAgICR0aGlzLT5hdXRob3JzX2J5X3JlcG9z
aXRvcnlfaWQgPSBhcnJheSgpOworICAgICAgICAkdGhpcy0+dXBkYXRlcyA9IGFycmF5KCk7Cisg
ICAgICAgICR0aGlzLT5jb21taXRfZGF0YV9saXN0ID0gYXJyYXkoKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiByZXBvcnRfY29tbWl0cygmJGNvbW1pdF9pbmZvX2xpc3QsICRzaG91bGRfaW5zZXJ0
KQorICAgIHsKKyAgICAgICAgaWYgKCRzaG91bGRfaW5zZXJ0KQorICAgICAgICAgICAgJHRoaXMt
PnVwZGF0ZV9vcl9pbnNlcnRfY29tbWl0cygkY29tbWl0X2luZm9fbGlzdCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICR0aGlzLT51cGRhdGVfY29tbWl0cygkY29tbWl0X2luZm9fbGlzdCk7
CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiB1cGRhdGVfY29tbWl0cygmJGNvbW1pdF9p
bmZvX2xpc3QpCisgICAgeworICAgICAgICAkdGhpcy0+Y29uc3RydWN0X2NvbW1pdF91cGRhdGVz
KCRjb21taXRfaW5mb19saXN0KTsKKyAgICAgICAgJHRoaXMtPmJlZ2luX2RhdGFiYXNlX3RyYW5z
YWN0aW9uKCk7CisKKyAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnVwZGF0ZXMgYXMgJHVwZGF0ZSkg
eworICAgICAgICAgICAgJGNvbW1pdF91cGRhdGUgPSAkdXBkYXRlWyd1cGRhdGUnXTsKKyAgICAg
ICAgICAgICRjb21taXRfc2VsZWN0X3F1ZXJ5ID0gJHVwZGF0ZVsncXVlcnknXTsKKyAgICAgICAg
ICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdjb21taXR0ZXInLCAkY29tbWl0X3VwZGF0ZSkpIHsK
KyAgICAgICAgICAgICAgICAkY29tbWl0dGVyX2lkID0gJHRoaXMtPnJlc29sdmVfY29tbWl0dGVy
X2J5X3JlcG9zaXRvcnlfaWRfYW5kX2F1dGhvcl9hY2NvdW50KCRjb21taXRfc2VsZWN0X3F1ZXJ5
WydyZXBvc2l0b3J5J10sICRjb21taXRfdXBkYXRlWydjb21taXR0ZXInXSk7CisgICAgICAgICAg
ICAgICAgJGNvbW1pdF91cGRhdGVbJ2NvbW1pdHRlciddID0gJGNvbW1pdHRlcl9pZDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgJHVwZGF0ZWRfY29tbWl0ID0gJHRoaXMtPmRiLT51cGRh
dGVfcm93KCdjb21taXRzJywgJ2NvbW1pdCcsICRjb21taXRfc2VsZWN0X3F1ZXJ5LCAkY29tbWl0
X3VwZGF0ZSk7CisgICAgICAgICAgICBpZiAoISR1cGRhdGVkX2NvbW1pdCkKKyAgICAgICAgICAg
ICAgICAkdGhpcy0+ZXhpdF93aXRoX2Vycm9yKCdGYWlsZWRUb1VwZGF0ZUNvbW1pdCcsIGFycmF5
KCdjb21taXQnID0+ICRjb21taXRfc2VsZWN0X3F1ZXJ5LCAnY29tbWl0VXBkYXRlJyA9PiAkY29t
bWl0X3VwZGF0ZSkpOworICAgICAgICB9CisKKyAgICAgICAgJHRoaXMtPmNvbW1pdF9kYXRhYmFz
ZV90cmFuc2FjdGlvbigpOworICAgIH0KKworICAgIHByaXZhdGUgZnVuY3Rpb24gY29uc3RydWN0
X2NvbW1pdF91cGRhdGVzKCYkY29tbWl0X2luZm9fbGlzdCkKKyAgICB7CisgICAgICAgIGZvcmVh
Y2ggKCRjb21taXRfaW5mb19saXN0IGFzICYkY29tbWl0X2luZm8pIHsKKyAgICAgICAgICAgICRj
b21taXRfdXBkYXRlID0gJiR0aGlzLT52YWxpZGF0ZV9hbmRfY29uc3RydWN0X2NvbW1pdF9kYXRh
X2Zyb21fY29tbWl0X2luZm8oJGNvbW1pdF9pbmZvLCBOVUxMKTsKKworICAgICAgICAgICAgJHJl
cG9zaXRvcnlfaWQgPSAkdGhpcy0+cmVzb2x2ZV9yZXBvc2l0b3J5KCRjb21taXRfaW5mb1sncmVw
b3NpdG9yeSddLCBOVUxMLCBmYWxzZSk7CisgICAgICAgICAgICAkY29tbWl0X3NlbGVjdF9xdWVy
eSA9IGFycmF5KCdyZXBvc2l0b3J5JyA9PiAkcmVwb3NpdG9yeV9pZCwgJ3JldmlzaW9uJyA9PiAk
Y29tbWl0X2luZm9bJ3JldmlzaW9uJ10pOworCisgICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4
aXN0cygndGltZScsICRjb21taXRfaW5mbykpCisgICAgICAgICAgICAgICAgJGNvbW1pdF91cGRh
dGVbJ3RpbWUnXSA9ICRjb21taXRfaW5mb1sndGltZSddOworCisgICAgICAgICAgICBpZiAoYXJy
YXlfa2V5X2V4aXN0cygncHJldmlvdXNDb21taXQnLCAkY29tbWl0X2luZm8pKQorICAgICAgICAg
ICAgICAgICRjb21taXRfdXBkYXRlWydwcmV2aW91c19jb21taXQnXSA9ICR0aGlzLT5yZXNvbHZl
X3ByZXZpb3VzX2NvbW1pdCgkcmVwb3NpdG9yeV9pZCwgJGNvbW1pdF9pbmZvWydwcmV2aW91c0Nv
bW1pdCddKTsKKworICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ293bmVkQ29tbWl0
cycsICRjb21taXRfaW5mbykpCisgICAgICAgICAgICAgICAgJHRoaXMtPmV4aXRfd2l0aF9lcnJv
cignT3duZWRDb21taXRzVXBkYXRlTm90U3VwcG9ydGVkWWV0JywgYXJyYXkoJ2NvbW1pdCcgPT4g
JGNvbW1pdF9pbmZvKSk7CisKKyAgICAgICAgICAgIGlmICghY291bnQoJGNvbW1pdF91cGRhdGUp
KQorICAgICAgICAgICAgICAgICR0aGlzLT5leGl0X3dpdGhfZXJyb3IoJ05vdGhpbmdUb1VwZGF0
ZScsIGFycmF5KCdjb21taXQnID0+ICRjb21taXRfaW5mbykpOworCisgICAgICAgICAgICBhcnJh
eV9wdXNoKCR0aGlzLT51cGRhdGVzLCBhcnJheSgncXVlcnknID0+ICRjb21taXRfc2VsZWN0X3F1
ZXJ5LCAndXBkYXRlJyA9PiAkY29tbWl0X3VwZGF0ZSkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcHJpdmF0ZSBmdW5jdGlvbiB1cGRhdGVfb3JfaW5zZXJ0X2NvbW1pdHMoJGNvbW1pdF9pbmZv
X2xpc3QpCisgICAgeworICAgICAgICAkdGhpcy0+Y29uc3RydWN0X2NvbW1pdF9kYXRhX2xpc3Qo
JGNvbW1pdF9pbmZvX2xpc3QpOworICAgICAgICAkdGhpcy0+YmVnaW5fZGF0YWJhc2VfdHJhbnNh
Y3Rpb24oKTsKKworICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y29tbWl0X2RhdGFfbGlzdCBhcyAm
JGNvbW1pdF9kYXRhKSB7CisgICAgICAgICAgICAkY29tbWl0ID0gJGNvbW1pdF9kYXRhWydjb21t
aXQnXTsKKyAgICAgICAgICAgICRvd25lZF9jb21taXRfbGlzdCA9ICRjb21taXRfZGF0YVsnb3du
ZWRfY29tbWl0cyddOworICAgICAgICAgICAgbGlzdCgkY29tbWl0X2lkLCAkcmVwb3NpdG9yeV9p
ZCkgPSAkdGhpcy0+dXBkYXRlX29yX2luc2VydF9jb21taXQoJGNvbW1pdCwgTlVMTCwgTlVMTCk7
CisgICAgICAgICAgICBmb3JlYWNoICgkb3duZWRfY29tbWl0X2xpc3QgYXMgJiRvd25lZF9jb21t
aXRfZGF0YSkKKyAgICAgICAgICAgICAgICAkdGhpcy0+dXBkYXRlX29yX2luc2VydF9jb21taXQo
JG93bmVkX2NvbW1pdF9kYXRhLCAkY29tbWl0X2lkLCAkcmVwb3NpdG9yeV9pZCk7CisgICAgICAg
IH0KKworICAgICAgICAkdGhpcy0+Y29tbWl0X2RhdGFiYXNlX3RyYW5zYWN0aW9uKCk7CisgICAg
fQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiBjb25zdHJ1Y3RfY29tbWl0X2RhdGFfbGlzdCgmJGNv
bW1pdF9pbmZvX2xpc3QpCisgICAgeworICAgICAgICBmb3JlYWNoICgkY29tbWl0X2luZm9fbGlz
dCBhcyAmJGNvbW1pdF9pbmZvKSB7CisgICAgICAgICAgICAkY29tbWl0X2RhdGEgPSAmJHRoaXMt
PmNvbnN0cnVjdF9jb21taXRfZGF0YSgkY29tbWl0X2luZm8sIE5VTEwpOworCisgICAgICAgICAg
ICAkb3duZWRfY29tbWl0X2xpc3QgPSBhcnJheSgpOworICAgICAgICAgICAgaWYgKGFycmF5X2tl
eV9leGlzdHMoJ293bmVkQ29tbWl0cycsICRjb21taXRfaW5mbykpIHsKKyAgICAgICAgICAgICAg
ICBmb3JlYWNoKCRjb21taXRfaW5mb1snb3duZWRDb21taXRzJ10gYXMgJG93bmVkX2NvbW1pdF9y
ZXBvc2l0b3J5X25hbWUgPT4gJG93bmVkX2NvbW1pdF9pbmZvKQorICAgICAgICAgICAgICAgICAg
ICBhcnJheV9wdXNoKCRvd25lZF9jb21taXRfbGlzdCwgJHRoaXMtPmNvbnN0cnVjdF9jb21taXRf
ZGF0YSgkb3duZWRfY29tbWl0X2luZm8sICRvd25lZF9jb21taXRfcmVwb3NpdG9yeV9uYW1lKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcnJheV9wdXNoKCR0aGlzLT5jb21taXRfZGF0
YV9saXN0LCBhcnJheSgnY29tbWl0JyA9PiAkY29tbWl0X2RhdGEsICdvd25lZF9jb21taXRzJyA9
PiAkb3duZWRfY29tbWl0X2xpc3QpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUg
ZnVuY3Rpb24gJmNvbnN0cnVjdF9jb21taXRfZGF0YSgkY29tbWl0X2luZm8sICRvd25lZF9yZXBv
c2l0b3J5X25hbWUpCisgICAgeworICAgICAgICAkY29tbWl0X2RhdGEgPSAmJHRoaXMtPnZhbGlk
YXRlX2FuZF9jb25zdHJ1Y3RfY29tbWl0X2RhdGFfZnJvbV9jb21taXRfaW5mbygkY29tbWl0X2lu
Zm8sICRvd25lZF9yZXBvc2l0b3J5X25hbWUpOworICAgICAgICAkY29tbWl0X2RhdGFbJ3Jldmlz
aW9uJ10gPSAkY29tbWl0X2luZm9bJ3JldmlzaW9uJ107CisgICAgICAgICRjb21taXRfZGF0YVsn
cmVwb3J0ZWQnXSA9IHRydWU7CisKKyAgICAgICAgaWYoJG93bmVkX3JlcG9zaXRvcnlfbmFtZSkK
KyAgICAgICAgICAgICRjb21taXRfZGF0YVsncmVwb3NpdG9yeSddID0gJG93bmVkX3JlcG9zaXRv
cnlfbmFtZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgJGNvbW1pdF9kYXRhWydyZXBvc2l0
b3J5J10gPSAkY29tbWl0X2luZm9bJ3JlcG9zaXRvcnknXTsKKworICAgICAgICBpZiAoYXJyYXlf
a2V5X2V4aXN0cygndGltZScsICRjb21taXRfaW5mbykpIHsKKyAgICAgICAgICAgIGlmICgkb3du
ZWRfcmVwb3NpdG9yeV9uYW1lKQorICAgICAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJvcignT3du
ZWRDb21taXRTaG91bGROb3RDb250YWluVGltZXN0YW1wJywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNv
bW1pdF9pbmZvKSk7CisgICAgICAgICAgICAkY29tbWl0X2RhdGFbJ3RpbWUnXSA9ICRjb21taXRf
aW5mb1sndGltZSddOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMo
J3ByZXZpb3VzQ29tbWl0JywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgICRjb21taXRfZGF0
YVsncHJldmlvdXNfY29tbWl0J10gPSAkY29tbWl0X2luZm9bJ3ByZXZpb3VzQ29tbWl0J107CisK
KyAgICAgICAgcmV0dXJuICRjb21taXRfZGF0YTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0
aW9uIHVwZGF0ZV9vcl9pbnNlcnRfY29tbWl0KCRjb21taXRfZGF0YSwgJG93bmVyX2NvbW1pdF9p
ZCwgJG93bmVyX3JlcG9zaXRvcnlfaWQpCisgICAgeworICAgICAgICAkcmVwb3NpdG9yeV9pZCA9
ICR0aGlzLT5yZXNvbHZlX3JlcG9zaXRvcnkoJGNvbW1pdF9kYXRhWydyZXBvc2l0b3J5J10sICRv
d25lcl9yZXBvc2l0b3J5X2lkLCB0cnVlKTsKKyAgICAgICAgJGNvbW1pdF9kYXRhWydyZXBvc2l0
b3J5J10gPSAkcmVwb3NpdG9yeV9pZDsKKworICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygn
cHJldmlvdXNfY29tbWl0JywgJGNvbW1pdF9kYXRhKSkKKyAgICAgICAgICAgICRjb21taXRfZGF0
YVsncHJldmlvdXNfY29tbWl0J10gPSAkdGhpcy0+cmVzb2x2ZV9wcmV2aW91c19jb21taXQoJHJl
cG9zaXRvcnlfaWQsICRjb21taXRfZGF0YVsncHJldmlvdXNfY29tbWl0J10pOworCisgICAgICAg
IGlmIChhcnJheV9rZXlfZXhpc3RzKCdjb21taXR0ZXInLCAkY29tbWl0X2RhdGEpKQorICAgICAg
ICAgICAgJGNvbW1pdF9kYXRhWydjb21taXR0ZXInXSA9ICR0aGlzLT5yZXNvbHZlX2NvbW1pdHRl
cl9ieV9yZXBvc2l0b3J5X2lkX2FuZF9hdXRob3JfYWNjb3VudCgkcmVwb3NpdG9yeV9pZCwgJGNv
bW1pdF9kYXRhWydjb21taXR0ZXInXSk7CisKKyAgICAgICAgJGluc2VydGVkX2NvbW1pdF9pZCA9
ICR0aGlzLT5kYi0+dXBkYXRlX29yX2luc2VydF9yb3coJ2NvbW1pdHMnLCAnY29tbWl0JywgYXJy
YXkoJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLCAncmV2aXNpb24nID0+ICRjb21taXRf
ZGF0YVsncmV2aXNpb24nXSksICRjb21taXRfZGF0YSk7CisgICAgICAgIGlmICghJGluc2VydGVk
X2NvbW1pdF9pZCkKKyAgICAgICAgICAgICR0aGlzLT5leGl0X3dpdGhfZXJyb3IoJ0ZhaWxlZFRv
SW5zZXJ0Q29tbWl0JywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9kYXRhKSk7CisKKyAgICAg
ICAgaWYgKCRvd25lcl9jb21taXRfaWQpCisgICAgICAgICAgICAkdGhpcy0+ZGItPnNlbGVjdF9v
cl9pbnNlcnRfcm93KCdjb21taXRfb3duZXJzaGlwcycsICdjb21taXQnLCBhcnJheSgnb3duZXIn
ID0+ICRvd25lcl9jb21taXRfaWQsICdvd25lZCcgPT4gJGluc2VydGVkX2NvbW1pdF9pZCksIE5V
TEwsICcqJyk7CisKKyAgICAgICAgcmV0dXJuIGFycmF5KCRpbnNlcnRlZF9jb21taXRfaWQsICRy
ZXBvc2l0b3J5X2lkKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uICZ2YWxpZGF0ZV9h
bmRfY29uc3RydWN0X2NvbW1pdF9kYXRhX2Zyb21fY29tbWl0X2luZm8oJiRjb21taXRfaW5mbywg
JG93bmVkX3JlcG9zaXRvcnlfbmFtZSkKKyAgICB7CisgICAgICAgIHNlbGY6OnZhbGlkYXRlX2Nv
bW1pdHMoJGNvbW1pdF9pbmZvLCAkb3duZWRfcmVwb3NpdG9yeV9uYW1lKTsKKyAgICAgICAgJGNv
bW1pdF9kYXRhID0gYXJyYXkoKTsKKworICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnYXV0
aG9yJywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgICRjb21taXRfZGF0YVsnY29tbWl0dGVy
J10gPSAkY29tbWl0X2luZm9bJ2F1dGhvciddOworCisgICAgICAgIGlmIChhcnJheV9rZXlfZXhp
c3RzKCdtZXNzYWdlJywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgICRjb21taXRfZGF0YVsn
bWVzc2FnZSddID0gJGNvbW1pdF9pbmZvWydtZXNzYWdlJ107CisKKyAgICAgICAgaWYgKGFycmF5
X2tleV9leGlzdHMoJ29yZGVyJywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgICRjb21taXRf
ZGF0YVsnb3JkZXInXSA9ICRjb21taXRfaW5mb1snb3JkZXInXTsKKworICAgICAgICBpZiAoYXJy
YXlfa2V5X2V4aXN0cygndGVzdGFiaWxpdHknLCAkY29tbWl0X2luZm8pKQorICAgICAgICAgICAg
JGNvbW1pdF9kYXRhWyd0ZXN0YWJpbGl0eSddID0gJGNvbW1pdF9pbmZvWyd0ZXN0YWJpbGl0eSdd
OworCisgICAgICAgIHJldHVybiAkY29tbWl0X2RhdGE7CisgICAgfQorCisgICAgcHJpdmF0ZSBz
dGF0aWMgZnVuY3Rpb24gdmFsaWRhdGVfY29tbWl0cygmJGNvbW1pdF9pbmZvLCAkb3duZWRfcmVw
b3NpdG9yeV9uYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdyZXBv
c2l0b3J5JywgJGNvbW1pdF9pbmZvKSAmJiAhJG93bmVkX3JlcG9zaXRvcnlfbmFtZSkKKyAgICAg
ICAgICAgIGV4aXRfd2l0aF9lcnJvcignTWlzc2luZ1JlcG9zaXRvcnlOYW1lJywgYXJyYXkoJ2Nv
bW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7CisgICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygn
cmV2aXNpb24nLCAkY29tbWl0X2luZm8pKQorICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdN
aXNzaW5nUmV2aXNpb24nLCBhcnJheSgnY29tbWl0JyA9PiAkY29tbWl0X2luZm8pKTsKKyAgICAg
ICAgcmVxdWlyZV9mb3JtYXQoJ1JldmlzaW9uJywgJGNvbW1pdF9pbmZvWydyZXZpc2lvbiddLCAn
L15bQS1aYS16MC05IFwuXSskLycpOworICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnYXV0
aG9yJywgJGNvbW1pdF9pbmZvKSAmJiAhaXNfYXJyYXkoJGNvbW1pdF9pbmZvWydhdXRob3InXSkp
CisgICAgICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ0ludmFsaWRBdXRob3JGb3JtYXQnLCBhcnJh
eSgnY29tbWl0JyA9PiAkY29tbWl0X2luZm8pKTsKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlz
dHMoJ3ByZXZpb3VzQ29tbWl0JywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgIHJlcXVpcmVf
Zm9ybWF0KCdSZXZpc2lvbicsICRjb21taXRfaW5mb1sncHJldmlvdXNDb21taXQnXSwgJy9eW0Et
WmEtejAtOSBcLl0rJC8nKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIHJlc29sdmVf
cmVwb3NpdG9yeSgkcmVwb3NpdG9yeV9uYW1lLCAkb3duZXJfcmVwb3NpdG9yeV9pZCwgJHNob3Vs
ZF9pbnNlcnQpCisgICAgeworICAgICAgICBpZiAoJG93bmVyX3JlcG9zaXRvcnlfaWQpCisgICAg
ICAgICAgICAkcmVwb3NpdG9yeV9pZF9ieV9uYW1lID0gJmFycmF5X2Vuc3VyZV9pdGVtX2hhc19h
cnJheSgkdGhpcy0+b3duZWRfcmVwb3NpdG9yeV9ieV9uYW1lX2FuZF9vd25lcl9pZCwgJG93bmVy
X3JlcG9zaXRvcnlfaWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAkcmVwb3NpdG9yeV9p
ZF9ieV9uYW1lID0gJiR0aGlzLT50b3BfbGV2ZWxfcmVwb3NpdG9yeV9pZF9ieV9uYW1lOworCisg
ICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRyZXBvc2l0b3J5X25hbWUsICRyZXBvc2l0b3J5
X2lkX2J5X25hbWUpKQorICAgICAgICAgICAgcmV0dXJuICRyZXBvc2l0b3J5X2lkX2J5X25hbWVb
JHJlcG9zaXRvcnlfbmFtZV07CisKKyAgICAgICAgaWYgKCRzaG91bGRfaW5zZXJ0KSB7CisgICAg
ICAgICAgICAkcmVwb3NpdG9yeSA9ICR0aGlzLT5kYi0+c2VsZWN0X29yX2luc2VydF9yb3coJ3Jl
cG9zaXRvcmllcycsICdyZXBvc2l0b3J5JywgYXJyYXkoJ25hbWUnID0+ICRyZXBvc2l0b3J5X25h
bWUsICdvd25lcicgPT4gJG93bmVyX3JlcG9zaXRvcnlfaWQpLCBOVUxMLCAnKicpOworICAgICAg
ICAgICAgaWYgKCEkcmVwb3NpdG9yeSkKKyAgICAgICAgICAgICAgICAkdGhpcy0+ZXhpdF93aXRo
X2Vycm9yKCdGYWlsZWRUb0luc2VydFJlcG9zaXRvcnknLCBhcnJheSgncmVwb3NpdG9yeScgPT4g
JHJlcG9zaXRvcnlfbmFtZSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgJHJlcG9zaXRvcnkgPSAkdGhpcy0+ZGItPnNlbGVjdF9maXJzdF9yb3coJ3JlcG9zaXRvcmll
cycsICdyZXBvc2l0b3J5JywgYXJyYXkoJ25hbWUnID0+ICRyZXBvc2l0b3J5X25hbWUsICdvd25l
cicgPT4gJG93bmVyX3JlcG9zaXRvcnlfaWQpKTsKKyAgICAgICAgICAgIGlmICghJHJlcG9zaXRv
cnkpCisgICAgICAgICAgICAgICAgJHRoaXMtPmV4aXRfd2l0aF9lcnJvcignSW52YWxpZFJlcG9z
aXRvcnknLCBhcnJheSgncmVwb3NpdG9yeScgPT4gJHJlcG9zaXRvcnlfbmFtZSkpOworICAgICAg
ICB9CisKKyAgICAgICAgJHJlcG9zaXRvcnlfaWRfYnlfbmFtZVskcmVwb3NpdG9yeV9uYW1lXSA9
ICRyZXBvc2l0b3J5WydyZXBvc2l0b3J5X2lkJ107CisgICAgICAgIHJldHVybiAkcmVwb3NpdG9y
eVsncmVwb3NpdG9yeV9pZCddOworICAgIH0KKworICAgIHByaXZhdGUgZnVuY3Rpb24gcmVzb2x2
ZV9wcmV2aW91c19jb21taXQoJHJlcG9zaXRvcnlfaWQsICRyZXZpc2lvbikKKyAgICB7CisgICAg
ICAgICRjb21taXRfaWRfYnlfcmV2aXNpb24gPSAmYXJyYXlfZW5zdXJlX2l0ZW1faGFzX2FycmF5
KCR0aGlzLT5jb21taXRzX2J5X3JlcG9zaXRvcnlfaWQsICRyZXZpc2lvbik7CisgICAgICAgIGlm
IChhcnJheV9rZXlfZXhpc3RzKCRyZXZpc2lvbiwgJGNvbW1pdF9pZF9ieV9yZXZpc2lvbikpCisg
ICAgICAgICAgICByZXR1cm4gJGNvbW1pdF9pZF9ieV9yZXZpc2lvblskcmV2aXNpb25dOworCisg
ICAgICAgICRwcmV2aW91c19jb21taXQgPSAkdGhpcy0+ZGItPnNlbGVjdF9maXJzdF9yb3coJ2Nv
bW1pdHMnLCAnY29tbWl0JywgYXJyYXkoJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLCAn
cmV2aXNpb24nID0+ICRyZXZpc2lvbikpOworICAgICAgICBpZiAoISRwcmV2aW91c19jb21taXQp
CisgICAgICAgICAgICAkdGhpcy0+ZXhpdF93aXRoX2Vycm9yKCdGYWlsZWRUb0ZpbmRQcmV2aW91
c0NvbW1pdCcsIGFycmF5KCdyZXZpc2lvbicgPT4gJHJldmlzaW9uKSk7CisKKyAgICAgICAgJGNv
bW1pdF9pZF9ieV9yZXZpc2lvblskcmV2aXNpb25dID0gJHByZXZpb3VzX2NvbW1pdFsnY29tbWl0
X2lkJ107CisgICAgICAgIHJldHVybiAkcHJldmlvdXNfY29tbWl0Wydjb21taXRfaWQnXTsKKyAg
ICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIHJlc29sdmVfY29tbWl0dGVyX2J5X3JlcG9zaXRv
cnlfaWRfYW5kX2F1dGhvcl9hY2NvdW50KCRyZXBvc2l0b3J5X2lkLCAkYXV0aG9yKQorICAgIHsK
KyAgICAgICAgJGNvbW1pdHRlcl9pZF9ieV9hY2NvdW50ID0gJmFycmF5X2Vuc3VyZV9pdGVtX2hh
c19hcnJheSgkdGhpcy0+YXV0aG9yc19ieV9yZXBvc2l0b3J5X2lkLCAkcmVwb3NpdG9yeV9pZCk7
CisgICAgICAgICRhY2NvdW50ID0gYXJyYXlfZ2V0KCRhdXRob3IsICdhY2NvdW50Jyk7CisgICAg
ICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRhY2NvdW50LCAkY29tbWl0dGVyX2lkX2J5X2FjY291
bnQpKQorICAgICAgICAgICAgcmV0dXJuICRjb21taXR0ZXJfaWRfYnlfYWNjb3VudFskYWNjb3Vu
dF07CisKKyAgICAgICAgJGNvbW1pdHRlcl9kYXRhID0gYXJyYXkoJ3JlcG9zaXRvcnknID0+ICRy
ZXBvc2l0b3J5X2lkLCAnYWNjb3VudCcgPT4gJGFjY291bnQpOworICAgICAgICAkbmFtZSA9IGFy
cmF5X2dldCgkYXV0aG9yLCAnbmFtZScpOworICAgICAgICBpZiAoJG5hbWUpCisgICAgICAgICAg
ICAkY29tbWl0dGVyX2RhdGFbJ25hbWUnXSA9ICRuYW1lOworICAgICAgICAkY29tbWl0dGVyX2lk
ID0gJHRoaXMtPmRiLT51cGRhdGVfb3JfaW5zZXJ0X3JvdygnY29tbWl0dGVycycsICdjb21taXR0
ZXInLCBhcnJheSgncmVwb3NpdG9yeScgPT4gJHJlcG9zaXRvcnlfaWQsICdhY2NvdW50JyA9PiAk
YWNjb3VudCksICRjb21taXR0ZXJfZGF0YSk7CisKKyAgICAgICAgaWYgKCEkY29tbWl0dGVyX2lk
KQorICAgICAgICAgICAgJHRoaXMtPmV4aXRfd2l0aF9lcnJvcignRmFpbGVkVG9JbnNlcnRDb21t
aXR0ZXInLCBhcnJheSgnY29tbWl0dGVyJyA9PiAkY29tbWl0dGVyX2RhdGEpKTsKKyAgICAgICAg
JGNvbW1pdHRlcl9pZF9ieV9hY2NvdW50WyRhY2NvdW50XSA9ICRjb21taXR0ZXJfaWQ7CisgICAg
ICAgIHJldHVybiAkY29tbWl0dGVyX2lkOworICAgIH0KKworICAgIHByaXZhdGUgZnVuY3Rpb24g
YmVnaW5fZGF0YWJhc2VfdHJhbnNhY3Rpb24oKQorICAgIHsKKyAgICAgICAgJHRoaXMtPmhhc19l
eGVjdXRpbmdfdHJhbnNhY3Rpb24gPSB0cnVlOworICAgICAgICAkdGhpcy0+ZGItPmJlZ2luX3Ry
YW5zYWN0aW9uKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiBjb21taXRfZGF0YWJh
c2VfdHJhbnNhY3Rpb24oKQorICAgIHsKKyAgICAgICAgJHRoaXMtPmRiLT5jb21taXRfdHJhbnNh
Y3Rpb24oKTsKKyAgICAgICAgJHRoaXMtPmhhc19leGVjdXRpbmdfdHJhbnNhY3Rpb24gPSBmYWxz
ZTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIGV4aXRfd2l0aF9lcnJvcigkbWVzc2Fn
ZSwgJGRldGFpbHMpCisgICAgeworICAgICAgICBpZiAoJHRoaXMtPmhhc19leGVjdXRpbmdfdHJh
bnNhY3Rpb24pCisgICAgICAgICAgICAkdGhpcy0+ZGItPnJvbGxiYWNrX3RyYW5zYWN0aW9uKCk7
CisgICAgICAgIGV4aXRfd2l0aF9lcnJvcigkbWVzc2FnZSwgJGRldGFpbHMpOworICAgIH0KK30K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qcwppbmRleCAxMzBjYjkwZjE0
OThhZWJlMzA5OTA3ZjQzYzU1MzVlNDcwM2JlYzM4Li5kOWJkNDM4ZDE1MWIzZWNmMmRiYmRhMWEy
NDBkODFhNjY1YTYyMWU4IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanMKQEAgLTI5LDExICsyOSwxNCBAQCBjbGFz
cyBDb21taXRMb2cgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgICAgICAgICAgdGhpcy5f
cmF3RGF0YS5vd25zQ29tbWl0cyA9IHJhd0RhdGEub3duc0NvbW1pdHM7CiAgICAgICAgIGlmIChy
YXdEYXRhLm9yZGVyKQogICAgICAgICAgICAgdGhpcy5fcmF3RGF0YS5vcmRlciA9IHJhd0RhdGEu
b3JkZXI7CisgICAgICAgIGlmIChyYXdEYXRhLnRlc3RhYmlsaXR5KQorICAgICAgICAgICAgdGhp
cy5fcmF3RGF0YS50ZXN0YWJpbGl0eSA9IHJhd0RhdGEudGVzdGFiaWxpdHk7CiAgICAgfQogCiAg
ICAgcmVwb3NpdG9yeSgpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnk7IH0KICAgICB0aW1lKCkg
eyByZXR1cm4gbmV3IERhdGUodGhpcy5fcmF3RGF0YVsndGltZSddKTsgfQogICAgIGhhc0NvbW1p
dFRpbWUoKSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWyd0aW1lJ10gPiAwICYmIHRoaXMuX3Jhd0Rh
dGFbJ3RpbWUnXSAhPSBudWxsOyB9CisgICAgdGVzdGFiaWxpdHkoKSB7IHJldHVybiB0aGlzLl9y
YXdEYXRhWyd0ZXN0YWJpbGl0eSddOyB9CiAgICAgYXV0aG9yKCkgeyByZXR1cm4gdGhpcy5fcmF3
RGF0YVsnYXV0aG9yTmFtZSddOyB9CiAgICAgcmV2aXNpb24oKSB7IHJldHVybiB0aGlzLl9yYXdE
YXRhWydyZXZpc2lvbiddOyB9CiAgICAgbWVzc2FnZSgpIHsgcmV0dXJuIHRoaXMuX3Jhd0RhdGFb
J21lc3NhZ2UnXTsgfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9tb2RlbHMvY29tbWl0LXNldC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKaW5kZXggOTRhY2M1MzMyODk4Y2I0OTAwYWZlNzhi
N2Y2Y2I2OTc5ZmMzMzUxNi4uNDQ1YjI3MDE3ZjI0OGQ5ZTVhYzRjMTNiODc1NWEwYWFkNTcyMmNh
NCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMv
Y29tbWl0LXNldC5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21v
ZGVscy9jb21taXQtc2V0LmpzCkBAIC03MSw2ICs3MSw4IEBAIGNsYXNzIENvbW1pdFNldCBleHRl
bmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgb3duZXJDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9z
aXRvcnkpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlUb0NvbW1pdE93bmVyTWFwLmdldChyZXBv
c2l0b3J5KTsgfQogICAgIHRvcExldmVsUmVwb3NpdG9yaWVzKCkgeyByZXR1cm4gUmVwb3NpdG9y
eS5zb3J0QnlOYW1lUHJlZmVycmluZ09uZXNXaXRoVVJMKHRoaXMuX3JlcG9zaXRvcmllcy5maWx0
ZXIoKHJlcG9zaXRvcnkpID0+ICF0aGlzLm93bmVyUmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9z
aXRvcnkpKSk7IH0KICAgICBvd25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3NpdG9yeShyZXBv
c2l0b3J5KSB7IHJldHVybiB0aGlzLl9vd25lclJlcG9zaXRvcnlUb093bmVkUmVwb3NpdG9yaWVz
TWFwLmdldChyZXBvc2l0b3J5KTsgfQorICAgIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHkoKSB7IHJl
dHVybiB0aGlzLmNvbW1pdHMoKS5maWx0ZXIoKGNvbW1pdCkgPT4gISFjb21taXQudGVzdGFiaWxp
dHkoKSk7IH0KKyAgICBjb21taXRzKCkgeyByZXR1cm4gIEFycmF5LmZyb20odGhpcy5fcmVwb3Np
dG9yeVRvQ29tbWl0TWFwLnZhbHVlcygpKTsgfQogCiAgICAgcmV2aXNpb25Gb3JSZXBvc2l0b3J5
KHJlcG9zaXRvcnkpCiAgICAgewpAQCAtMzg3LDYgKzM4OSw5IEBAIGNsYXNzIEludGVybWVkaWF0
ZUNvbW1pdFNldCB7CiAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChmZXRjaGluZ1Byb21pc2Vz
KTsKICAgICB9CiAKKyAgICBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MoKSB7IHJldHVy
biB0aGlzLmNvbW1pdHMoKS5maWx0ZXIoKGNvbW1pdCkgPT4gISFjb21taXQudGVzdGFiaWxpdHlX
YXJuaW5nKCkpOyB9CisgICAgY29tbWl0cygpIHsgcmV0dXJuICBBcnJheS5mcm9tKHRoaXMuX2Nv
bW1pdEJ5UmVwb3NpdG9yeS52YWx1ZXMoKSk7IH0KKwogICAgIF9mZXRjaENvbW1pdExvZ0FuZE93
bmVkQ29tbWl0cyhyZXBvc2l0b3J5LCByZXZpc2lvbikKICAgICB7CiAgICAgICAgIHJldHVybiBD
b21taXRMb2cuZmV0Y2hGb3JTaW5nbGVSZXZpc2lvbihyZXBvc2l0b3J5LCByZXZpc2lvbikudGhl
bigoY29tbWl0cykgPT4gewpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Nl
cnZlci10ZXN0cy9hcGktcmVwb3J0LWNvbW1pdHMtdGVzdHMuanMgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvc2VydmVyLXRlc3RzL2FwaS1yZXBvcnQtY29tbWl0cy10ZXN0cy5qcwppbmRleCBm
MjI0ZGY3OWI3Y2IwMjUwMjgwNTFjYTdiNDZjMzQ1OWNjNGE5ZWYwLi5hZDc0NGUzZDA1MzkwZTZl
N2NmYzE3NWViODEzMzUyNWRlMTcxMWZhIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvc2VydmVyLXRlc3RzL2FwaS1yZXBvcnQtY29tbWl0cy10ZXN0cy5qcworKysgYi9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL2FwaS1yZXBvcnQtY29tbWl0cy10ZXN0
cy5qcwpAQCAtNiw3ICs2LDcgQEAgY29uc3QgVGVzdFNlcnZlciA9IHJlcXVpcmUoJy4vcmVzb3Vy
Y2VzL3Rlc3Qtc2VydmVyLmpzJyk7CiBjb25zdCBhZGRTbGF2ZUZvclJlcG9ydCA9IHJlcXVpcmUo
Jy4vcmVzb3VyY2VzL2NvbW1vbi1vcGVyYXRpb25zLmpzJykuYWRkU2xhdmVGb3JSZXBvcnQ7CiBj
b25zdCBwcmVwYXJlU2VydmVyVGVzdCA9IHJlcXVpcmUoJy4vcmVzb3VyY2VzL2NvbW1vbi1vcGVy
YXRpb25zLmpzJykucHJlcGFyZVNlcnZlclRlc3Q7CiAKLWRlc2NyaWJlKCIvYXBpL3JlcG9ydC1j
b21taXRzLyIsIGZ1bmN0aW9uICgpIHsKK2Rlc2NyaWJlKCIvYXBpL3JlcG9ydC1jb21taXRzLyB3
aXRoIGluc2VydD10cnVlIiwgZnVuY3Rpb24gKCkgewogICAgIHByZXBhcmVTZXJ2ZXJUZXN0KHRo
aXMpOwogCiAgICAgY29uc3QgZW1wdHlSZXBvcnQgPSB7CkBAIC01OTEsMyArNTkxLDE2NCBAQCBk
ZXNjcmliZSgiL2FwaS9yZXBvcnQtY29tbWl0cy8iLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgIH0p
OwogICAgIH0pOwogfSk7CisKK2Rlc2NyaWJlKCIvYXBpL3JlcG9ydC1jb21taXRzLyB3aXRoIGlu
c2VydD1mYWxzZSIsIGZ1bmN0aW9uICgpIHsKKyAgICBwcmVwYXJlU2VydmVyVGVzdCh0aGlzKTsK
KworICAgIGNvbnN0IHN1YnZlcnNpb25Db21taXRzID0geworICAgICAgICAic2xhdmVOYW1lIjog
InNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisg
ICAgICAgICJjb21taXRzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJyZXBv
c2l0b3J5IjogIldlYktpdCIsCisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0OCIs
CisgICAgICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0wMS0yMFQwMjo1MjozNC41NzdaIiwKKyAg
ICAgICAgICAgICAgICAiYXV0aG9yIjogeyJuYW1lIjogIlphbGFuIEJ1anRhcyIsICJhY2NvdW50
IjogInphbGFuQGFwcGxlLmNvbSJ9LAorICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImEgbWVz
c2FnZSIsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJy
ZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0
OSIsCisgICAgICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0wMS0yMFQwMzoyMzo1MC42NDVaIiwK
KyAgICAgICAgICAgICAgICAiYXV0aG9yIjogeyJuYW1lIjogIkNocmlzIER1bWV6IiwgImFjY291
bnQiOiAiY2R1bWV6QGFwcGxlLmNvbSJ9LAorICAgICAgICAgICAgICAgICJtZXNzYWdlIjogInNv
bWUgbWVzc2FnZSIsCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJpbnNlcnQi
OiB0cnVlLAorICAgIH07CisKKyAgICBjb25zdCBjb21taXRzVXBkYXRlID0geworICAgICAgICAi
c2xhdmVOYW1lIjogInNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2ZVBhc3N3b3JkIjogInNvbWVQ
YXNzd29yZCIsCisgICAgICAgICJjb21taXRzIjogWworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAgICAgICAgICAgICAgInJldmlzaW9u
IjogIjIxMDk0OCIsCisgICAgICAgICAgICAgICAgInRlc3RhYmlsaXR5IjogIkJyZWFrcyBidWls
ZHMiLAorICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImFub3RoZXIgbWVzc2FnZSIsCisgICAg
ICAgICAgICAgICAgIm9yZGVyIjogMjEwOTQ4LAorICAgICAgICAgICAgICAgICJ0aW1lIjogIjIw
MTctMDEtMjBUMDM6NTI6MzQuNTc3WiIsCisgICAgICAgICAgICAgICAgImF1dGhvciI6IHsibmFt
ZSI6ICJDaHJpcyBEdW1leiIsICJhY2NvdW50IjogImNkdW1lekBhcHBsZS5jb20ifSwKKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgInJlcG9zaXRvcnkiOiAi
V2ViS2l0IiwKKyAgICAgICAgICAgICAgICAicmV2aXNpb24iOiAiMjEwOTQ5IiwKKyAgICAgICAg
ICAgICAgICAicHJldmlvdXNDb21taXQiOiAiMjEwOTQ4IiwKKyAgICAgICAgICAgICAgICAidGVz
dGFiaWxpdHkiOiAiQ3Jhc2hlcyBXZWJLaXQiLAorICAgICAgICAgICAgICAgICJtZXNzYWdlIjog
ImFub3RoZXIgbWVzc2FnZSIsCisgICAgICAgICAgICAgICAgIm9yZGVyIjogMjEwOTQ5LAorICAg
ICAgICAgICAgICAgICJ0aW1lIjogIjIwMTctMDEtMjBUMDQ6MjM6NTAuNjQ1WiIsCisgICAgICAg
ICAgICAgICAgImF1dGhvciI6IHsibmFtZSI6ICJaYWxhbiBCdWp0YXMiLCAiYWNjb3VudCI6ICJ6
YWxhbkBhcHBsZS5jb20ifSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgImlu
c2VydCI6IGZhbHNlLAorICAgIH07CisKKworICAgIGNvbnN0IGNvbW1pdHNVcGRhdGVXaXRoTWlz
c2luZ1JldmlzaW9uID0geworICAgICAgICAic2xhdmVOYW1lIjogInNvbWVTbGF2ZSIsCisgICAg
ICAgICJzbGF2ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJjb21taXRzIjog
WworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIs
CisgICAgICAgICAgICAgICAgInRlc3RhYmlsaXR5IjogIkJyZWFrcyBidWlsZHMiCisgICAgICAg
ICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJpbnNlcnQiOiBmYWxzZSwKKyAgICB9OworCisg
ICAgY29uc3QgY29tbWl0c1VwZGF0ZVdpdGhNaXNzaW5nUmVwb3NpdG9yeSA9IHsKKyAgICAgICAg
InNsYXZlTmFtZSI6ICJzb21lU2xhdmUiLAorICAgICAgICAic2xhdmVQYXNzd29yZCI6ICJzb21l
UGFzc3dvcmQiLAorICAgICAgICAiY29tbWl0cyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAicmV2aXNpb24iOiAiMjEwOTQ4IiwKKyAgICAgICAgICAgICAgICAidGVzdGFiaWxp
dHkiOiAiQnJlYWtzIGJ1aWxkcyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAg
Imluc2VydCI6IGZhbHNlLAorICAgIH07CisKKyAgICBjb25zdCBjb21taXRzVXBkYXRlV2l0aG91
dEFueVVwZGF0ZSA9IHsKKyAgICAgICAgInNsYXZlTmFtZSI6ICJzb21lU2xhdmUiLAorICAgICAg
ICAic2xhdmVQYXNzd29yZCI6ICJzb21lUGFzc3dvcmQiLAorICAgICAgICAiY29tbWl0cyI6IFsK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAicmVwb3NpdG9yeSI6ICJXZWJLaXQiLAor
ICAgICAgICAgICAgICAgICJyZXZpc2lvbiI6ICIyMTA5NDgiCisgICAgICAgICAgICB9CisgICAg
ICAgIF0sCisgICAgICAgICJpbnNlcnQiOiBmYWxzZSwKKyAgICB9OworCisgICAgY29uc3QgY29t
bWl0c1VwZGF0ZVdpdGhPd25lZENvbW1pdHNVcGRhdGUgPSB7CisgICAgICAgICJzbGF2ZU5hbWUi
OiAic29tZVNsYXZlIiwKKyAgICAgICAgInNsYXZlUGFzc3dvcmQiOiAic29tZVBhc3N3b3JkIiwK
KyAgICAgICAgImNvbW1pdHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgInJl
cG9zaXRvcnkiOiAiV2ViS2l0IiwKKyAgICAgICAgICAgICAgICAicmV2aXNpb24iOiAiMjEwOTQ4
IiwKKyAgICAgICAgICAgICAgICAib3duZWRDb21taXRzIjogW10sCisgICAgICAgICAgICB9Cisg
ICAgICAgIF0sCisgICAgICAgICJpbnNlcnQiOiBmYWxzZSwKKyAgICB9OworCisgICAgYXN5bmMg
ZnVuY3Rpb24gc2V0VXBUZXN0c1dpdGhFeHBlY3RlZFN0YXR1cyhjb21taXRzVXBkYXRlLCBleHBl
Y3RlZFN0YXR1cykKKyAgICB7CisgICAgICAgIGF3YWl0IGFkZFNsYXZlRm9yUmVwb3J0KHN1YnZl
cnNpb25Db21taXRzKTsKKyAgICAgICAgYXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5wb3N0
SlNPTignL2FwaS9yZXBvcnQtY29tbWl0cy8nLCBzdWJ2ZXJzaW9uQ29tbWl0cyk7CisgICAgICAg
IGxldCByZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkv
Y29tbWl0cy9XZWJLaXQvJyk7CisgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cydd
LCAnT0snKTsKKyAgICAgICAgbGV0IGNvbW1pdHMgPSByZXN1bHRbJ2NvbW1pdHMnXTsKKyAgICAg
ICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHMubGVuZ3RoLCAyKTsKKyAgICAgICAgYXNzZXJ0LmVxdWFs
KGNvbW1pdHNbMF0udGVzdGFiaWxpdHksIG51bGwpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29t
bWl0c1sxXS50ZXN0YWJpbGl0eSwgbnVsbCk7CisKKyAgICAgICAgcmVzdWx0ID0gYXdhaXQgVGVz
dFNlcnZlci5yZW1vdGVBUEkoKS5wb3N0SlNPTignL2FwaS9yZXBvcnQtY29tbWl0cy8nLCBjb21t
aXRzVXBkYXRlKTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVzJ10sIGV4cGVj
dGVkU3RhdHVzKTsKKyAgICAgICAgcmVzdWx0ID0gYXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEko
KS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvV2ViS2l0LycpOworICAgICAgICByZXR1cm4gcmVzdWx0
Wydjb21taXRzJ107CisgICAgfQorCisgICAgYXN5bmMgZnVuY3Rpb24gdGVzdFdpdGhFeHBlY3Rl
ZEZhaWx1cmUoY29tbWl0c1VwZGF0ZSwgZXhwZWN0ZWRGYWlsdXJlTmFtZSkKKyAgICB7CisgICAg
ICAgIGNvbnN0IGNvbW1pdHMgPSBhd2FpdCBzZXRVcFRlc3RzV2l0aEV4cGVjdGVkU3RhdHVzKGNv
bW1pdHNVcGRhdGUsIGV4cGVjdGVkRmFpbHVyZU5hbWUpOworICAgICAgICBhc3NlcnQuZXF1YWwo
Y29tbWl0cy5sZW5ndGgsIDIpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1swXS50ZXN0
YWJpbGl0eSwgbnVsbCk7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzFdLnRlc3RhYmls
aXR5LCBudWxsKTsKKyAgICB9CisKKyAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCAiTWlzc2luZ1Jl
dmlzaW9uIiBpZiBjb21taXQgdXBkYXRlIGRvZXMgbm90IGhhdmUgY29tbWl0IHJldmlzaW9uIHNw
ZWNpZmllZCcsIGFzeW5jICgpID0+IHsKKyAgICAgICAgYXdhaXQgdGVzdFdpdGhFeHBlY3RlZEZh
aWx1cmUoY29tbWl0c1VwZGF0ZVdpdGhNaXNzaW5nUmV2aXNpb24sICdNaXNzaW5nUmV2aXNpb24n
KTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoICJNaXNzaW5nUmVwb3NpdG9y
eU5hbWUiIGlmIGNvbW1pdCB1cGRhdGUgZG9lcyBub3QgaGF2ZSBjb21taXQgcmV2aXNpb24gc3Bl
Y2lmaWVkJywgYXN5bmMgKCkgPT4geworICAgICAgICBhd2FpdCB0ZXN0V2l0aEV4cGVjdGVkRmFp
bHVyZShjb21taXRzVXBkYXRlV2l0aE1pc3NpbmdSZXBvc2l0b3J5LCAnTWlzc2luZ1JlcG9zaXRv
cnlOYW1lJyk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCAiTm90aGluZ1Rv
VXBkYXRlIiBpZiBjb21taXQgdXBkYXRlIGRvZXMgbm90IGhhdmUgY29tbWl0IHJldmlzaW9uIHNw
ZWNpZmllZCcsIGFzeW5jICgpID0+IHsKKyAgICAgICAgYXdhaXQgdGVzdFdpdGhFeHBlY3RlZEZh
aWx1cmUoY29tbWl0c1VwZGF0ZVdpdGhvdXRBbnlVcGRhdGUsICdOb3RoaW5nVG9VcGRhdGUnKTsK
KyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoICJPd25lZENvbW1pdHNVcGRhdGVO
b3RTdXBwb3J0ZWRZZXQiIHdoZW4gdHJ5aW5nIHRvIHVwZGF0ZSBvd25lZCBjb21taXRzIGluZm8n
LCBhc3luYyAoKSA9PiB7CisgICAgICAgIGF3YWl0IHRlc3RXaXRoRXhwZWN0ZWRGYWlsdXJlKGNv
bW1pdHNVcGRhdGVXaXRoT3duZWRDb21taXRzVXBkYXRlLCAnT3duZWRDb21taXRzVXBkYXRlTm90
U3VwcG9ydGVkWWV0Jyk7CisgICAgfSk7CisKKyAgICBpdCgic2hvdWxkIGJlIGFibGUgdG8gdXBk
YXRlIGNvbW1pdHMgbWVzc2FnZSwgdGltZSwgb3JkZXIsIGF1dGhvciBhbmQgcHJldmlvdXMgY29t
bWl0IiwgYXN5bmMgKCkgPT4geworICAgICAgICBjb25zdCBjb21taXRzID0gYXdhaXQgc2V0VXBU
ZXN0c1dpdGhFeHBlY3RlZFN0YXR1cyhjb21taXRzVXBkYXRlLCAnT0snKTsKKworICAgICAgICBh
c3NlcnQuZXF1YWwoY29tbWl0cy5sZW5ndGgsIDIpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29t
bWl0c1swXS50ZXN0YWJpbGl0eSwgJ0JyZWFrcyBidWlsZHMnKTsKKyAgICAgICAgYXNzZXJ0LmVx
dWFsKGNvbW1pdHNbMV0udGVzdGFiaWxpdHksICdDcmFzaGVzIFdlYktpdCcpOworICAgICAgICBh
c3NlcnQuZXF1YWwoY29tbWl0c1swXS5tZXNzYWdlLCAnYW5vdGhlciBtZXNzYWdlJyk7CisgICAg
ICAgIGFzc2VydC5lcXVhbChjb21taXRzWzFdLm1lc3NhZ2UsICdhbm90aGVyIG1lc3NhZ2UnKTsK
KyAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNbMF0uYXV0aG9yTmFtZSwgJ0NocmlzIER1bWV6
Jyk7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzFdLmF1dGhvck5hbWUsICdaYWxhbiBC
dWp0YXMnKTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNbMF0ub3JkZXIsIDIxMDk0OCk7
CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzFdLm9yZGVyLCAyMTA5NDkpOworICAgICAg
ICBhc3NlcnQuZXF1YWwoY29tbWl0c1swXS50aW1lLCAxNDg0ODg0MzU0NTc3KTsKKyAgICAgICAg
YXNzZXJ0LmVxdWFsKGNvbW1pdHNbMV0udGltZSwgMTQ4NDg4NjIzMDY0NSk7CisgICAgICAgIGFz
c2VydC5lcXVhbChjb21taXRzWzFdLnByZXZpb3VzQ29tbWl0LCBjb21taXRzWzBdLmlkKTsKKyAg
ICB9KTsKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvdG9vbHMtb3MtYnVpbGQtZmV0Y2hlci10
ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvdG9vbHMtb3Mt
YnVpbGQtZmV0Y2hlci10ZXN0cy5qcwppbmRleCBjNmYwZGM5M2JiZTMyODY4NzhjYTdmOTBjOWM0
MWNlZmY1NGVhNzc5Li5mN2ExZWI2NWRmYTQ2MzdjMDAyMmVkYTViMDAwOTg3MzU0NDlmMTBmIDEw
MDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLW9z
LWJ1aWxkLWZldGNoZXItdGVzdHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Nl
cnZlci10ZXN0cy90b29scy1vcy1idWlsZC1mZXRjaGVyLXRlc3RzLmpzCkBAIC0xMzQsMzkgKzEz
NCw1NyBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICB9KTsK
IAogICAgIGRlc2NyaWJlKCdPU0J1aWxkZXJGZXRjaGVyLl9jb21taXRzRm9yQXZhaWxhYmxlQnVp
bGRzJywgKCkgPT4gewotICAgICAgICBpdCgnc2hvdWxkIG9ubHkgcmV0dXJuIGNvbW1pdHMgd2hv
c2Ugb3JkZXJzIGFyZSBoaWdoZXIgdGhhbiBzcGVjaWZpZWQgb3JkZXInLCAoKSA9PiB7CisgICAg
ICAgIGl0KCdzaG91bGQgY29tcGF0aWJsZSB3aXRoIGNvbW1hbmQgb3V0cHV0IG9ubHkgY29udGFp
bnMgbGluZXMgb2YgcmV2aXNpb24nLCBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBs
b2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcg
T1NCdWlsZEZldGNoZXIoe30sIG51bGwsIG51bGwsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwog
ICAgICAgICAgICAgY29uc3Qgd2FpdEZvckludm9jYXRpb25Qcm9taXNlID0gTW9ja1N1YnByb2Nl
c3Mud2FpdEZvckludm9jYXRpb24oKTsKLSAgICAgICAgICAgIGNvbnN0IGZldGNoQ29tbWl0c1By
b21pc2UgPSBmZXRjaGVyLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKCdPU1gnLCBbJ2xpc3Qn
LCAnYnVpbGQxJ10sICdeXFwuKiQnLCAxNjA0MDAwMDAwLCAxNjA2MDAwMDAwKTsKKyAgICAgICAg
ICAgIGNvbnN0IGZldGNoQ29tbWl0c1Byb21pc2UgPSBmZXRjaGVyLl9jb21taXRzRm9yQXZhaWxh
YmxlQnVpbGRzKFsnbGlzdCcsICdidWlsZDEnXSwgJ15cXC4qJCcpOwogCi0gICAgICAgICAgICBy
ZXR1cm4gd2FpdEZvckludm9jYXRpb25Qcm9taXNlLnRoZW4oKCkgPT4gewotICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwot
ICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlv
bnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2J1aWxkMSddKTsKLSAgICAgICAgICAgICAgICBNb2Nr
U3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5yZXNvbHZlKCcxNkQzMjFcbjE2RTMyMXpcblxuMTZG
MzIxJyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoQ29tbWl0c1Byb21pc2U7Ci0gICAg
ICAgICAgICB9KS50aGVuKChyZXN1bHRzKSA9PiB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3VsdHMubGVuZ3RoLCAyKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFs
KHJlc3VsdHNbMF0sIHtyZXBvc2l0b3J5OiAnT1NYJywgb3JkZXI6IDE2MDQwMzIxMjYsIHJldmlz
aW9uOiAnMTZFMzIxeid9KTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3Vs
dHNbMV0sIHtyZXBvc2l0b3J5OiAnT1NYJywgb3JkZXI6IDE2MDUwMzIxMDAsIHJldmlzaW9uOiAn
MTZGMzIxJ30pOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhd2FpdCB3YWl0Rm9ySW52
b2NhdGlvblByb21pc2U7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoTW9ja1N1YnByb2Nlc3Mu
aW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9j
a1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2J1aWxkMSddKTsK
KworICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHRzID0ge2FsbFJldmlzaW9uczogWyIx
NkQzMjEiLCAiMTZFMzIxeiIsICIxNkYzMjEiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eToge319
OworICAgICAgICAgICAgYXdhaXQgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2
ZSgnMTZEMzIxXG4xNkUzMjF6XG5cbjE2RjMyMScpOworICAgICAgICAgICAgY29uc3QgYnVpbGRJ
bmZvID0gYXdhaXQgZmV0Y2hDb21taXRzUHJvbWlzZTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVw
RXF1YWwoZXhwZWN0ZWRSZXN1bHRzLCBidWlsZEluZm8pOwogICAgICAgICB9KTsKIAotICAgICAg
ICBpdCgnc2hvdWxkIG9ubHkgcmV0dXJuIGNvbW1pdHMgd2hvc2Ugb3JkZXJzIGFyZSBoaWdoZXIg
dGhhbiBtaW5PcmRlciBhbmQgbG93ZXIgdGhhbiB0aGUgbWF4T3JkZXInLCAoKSA9PiB7CisgICAg
ICAgIGl0KCdzaG91bGQgcGFyc2UgdGhlIGNvbW1hbmQgb3V0cHV0IGFzIEpTT04gZm9ybWF0Jywg
YXN5bmMgKCkgPT4gewogICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7
CiAgICAgICAgICAgICBjb25zdCBmZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKHt9LCBudWxs
LCBudWxsLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IHdhaXRG
b3JJbnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7
Ci0gICAgICAgICAgICBjb25zdCBmZXRjaENvbW1pdHNQcm9taXNlID0gZmV0Y2hlci5fY29tbWl0
c0ZvckF2YWlsYWJsZUJ1aWxkcygnT1NYJywgWydsaXN0JywgJ2J1aWxkMSddLCAnXlxcLiokJywg
MTYwNDAwMDAwMCwgMTYwNTAwMDAwMCk7CisgICAgICAgICAgICBjb25zdCBmZXRjaENvbW1pdHNQ
cm9taXNlID0gZmV0Y2hlci5fY29tbWl0c0ZvckF2YWlsYWJsZUJ1aWxkcyhbJ2xpc3QnLCAnYnVp
bGQxJ10pOwogCi0gICAgICAgICAgICByZXR1cm4gd2FpdEZvckludm9jYXRpb25Qcm9taXNlLnRo
ZW4oKCkgPT4gewotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChNb2NrU3VicHJvY2Vzcy5p
bnZvY2F0aW9ucy5sZW5ndGgsIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwo
TW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2J1aWxkMSdd
KTsKLSAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5yZXNvbHZl
KCcxNkQzMjFcbjE2RTMyMXpcblxuMTZGMzIxJyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZl
dGNoQ29tbWl0c1Byb21pc2U7Ci0gICAgICAgICAgICB9KS50aGVuKChyZXN1bHRzKSA9PiB7Ci0g
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVuZ3RoLCAxKTsKLSAgICAgICAg
ICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3VsdHNbMF0sIHtyZXBvc2l0b3J5OiAnT1NYJywg
b3JkZXI6IDE2MDQwMzIxMjYsIHJldmlzaW9uOiAnMTZFMzIxeid9KTsKLSAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgYXdhaXQgd2FpdEZvckludm9jYXRpb25Qcm9taXNlOworICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMSk7Cisg
ICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBd
LmNvbW1hbmQsIFsnbGlzdCcsICdidWlsZDEnXSk7CisKKyAgICAgICAgICAgIGNvbnN0IG91dHB1
dE9iamVjdCA9IHthbGxSZXZpc2lvbnM6IFsiMTZEMzIxIiwgIjE2RTMyMXoiLCAiMTZGMzIxIl0s
IGNvbW1pdHNXaXRoVGVzdGFiaWxpdHk6IHsiMTZEMzIxIjogIlBhbmljIn19OworICAgICAgICAg
ICAgYXdhaXQgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmlu
Z2lmeShvdXRwdXRPYmplY3QpKTsKKyAgICAgICAgICAgIGNvbnN0IGJ1aWxkSW5mbyA9IGF3YWl0
IGZldGNoQ29tbWl0c1Byb21pc2U7CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKG91dHB1
dE9iamVjdCwgYnVpbGRJbmZvKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKworICAgIGRlc2Ny
aWJlKCdPU0J1aWxkZXJGZXRjaGVyLl9jb21taXRzV2l0aGluUmFuZ2UnLCAoKSA9PiB7CisgICAg
ICAgIGl0KCdzaG91bGQgb25seSByZXR1cm4gY29tbWl0cyB3aG9zZSBvcmRlcnMgYXJlIGhpZ2hl
ciB0aGFuIHNwZWNpZmllZCBvcmRlcicsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0
IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOworICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5l
dyBPU0J1aWxkRmV0Y2hlcih7fSwgbnVsbCwgbnVsbCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7
CisgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gZmV0Y2hlci5fY29tbWl0c1dpdGhpblJhbmdl
KFsiMTZEMzIxIiwgIjE2RTMyMXoiLCAiMTZGMzIxIl0sICJPU1giLCAxNjA0MDAwMDAwLCAxNjA2
MDAwMDAwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRzLmxlbmd0aCwgMik7Cisg
ICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3VsdHNbMF0sIHtyZXBvc2l0b3J5OiAnT1NY
Jywgb3JkZXI6IDE2MDQwMzIxMjYsIHJldmlzaW9uOiAnMTZFMzIxeid9KTsKKyAgICAgICAgICAg
IGFzc2VydC5kZWVwRXF1YWwocmVzdWx0c1sxXSwge3JlcG9zaXRvcnk6ICdPU1gnLCBvcmRlcjog
MTYwNTAzMjEwMCwgcmV2aXNpb246ICcxNkYzMjEnfSk7CisKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgaXQoJ3Nob3VsZCBvbmx5IHJldHVybiBjb21taXRzIHdob3NlIG9yZGVycyBhcmUgaGlnaGVy
IHRoYW4gbWluT3JkZXIgYW5kIGxvd2VyIHRoYW4gdGhlIG1heE9yZGVyJywgYXN5bmMgKCkgPT4g
eworICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CisgICAgICAgICAg
ICBjb25zdCBmZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKHt9LCBudWxsLCBudWxsLCBNb2Nr
U3VicHJvY2VzcywgbG9nZ2VyKTsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBmZXRjaGVy
Ll9jb21taXRzV2l0aGluUmFuZ2UoWyIxNkQzMjEiLCAiMTZFMzIxeiIsICIxNkYzMjEiXSwgIk9T
WCIsIDE2MDQwMDAwMDAsIDE2MDUwMDAwMDApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
c3VsdHMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzdWx0c1sw
XSwge3JlcG9zaXRvcnk6ICdPU1gnLCBvcmRlcjogMTYwNDAzMjEyNiwgcmV2aXNpb246ICcxNkUz
MjF6J30pOwogICAgICAgICB9KTsKICAgICB9KTsKIApAQCAtMjM5LDkgKzI1Nyw5IEBAIGRlc2Ny
aWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pCi0gICAgfSkKKyAgICB9KTsKIAotICAgIGRlc2Ny
aWJlKCdPU0J1aWxkRmV0Y2hlci5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcycsICgpID0+IHsKKyAg
ICBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMnLCAo
KSA9PiB7CiAgICAgICAgIGNvbnN0IGludm9jYXRpb25zID0gTW9ja1N1YnByb2Nlc3MuaW52b2Nh
dGlvbnM7CiAKICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7CkBAIC0yNTIsMTEgKzI3
MCwxMiBAQCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgIFRlc3RTZXJ2ZXIuZGF0YWJhc2UoKS5kaXNjb25uZWN0KCk7CiAgICAgICAgIH0pOwogCi0g
ICAgICAgIGl0KCdzaG91bGQgcmVwb3J0IGFsbCBidWlsZCBjb21taXRzIHdpdGggb3duZWQtY29t
bWl0cycsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBiZSBiYWNrd2FyZCBjb21wYXRpYmxl
IGFuZCByZXBvcnQgYWxsIGJ1aWxkIGNvbW1pdHMgd2l0aCBvd25lZC1jb21taXRzJywgKCkgPT4g
ewogICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CiAgICAgICAgICAg
ICBjb25zdCBmZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKGNvbmZpZywgVGVzdFNlcnZlci5y
ZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAg
ICAgIGNvbnN0IGRiID0gVGVzdFNlcnZlci5kYXRhYmFzZSgpOwotICAgICAgICAgICAgbGV0IGZl
dGNoQW5kUmVwb3J0UHJvbWlzZSA9IG51bGw7CisKKyAgICAgICAgICAgIGxldCBmZXRjaFJlcG9y
dEFuZFVwZGF0ZUJ1aWxkc1Byb21pc2UgPSBudWxsOwogICAgICAgICAgICAgbGV0IGZldGNoQXZh
aWxhYmxlQnVpbGRzUHJvbWlzZSA9IG51bGw7CiAKICAgICAgICAgICAgIHJldHVybiBhZGRTbGF2
ZUZvclJlcG9ydChlbXB0eVJlcG9ydCkudGhlbigoKSA9PiB7CkBAIC0zMDcsMTAgKzMyNiw5IEBA
IGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAg
IGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ293bmVk
Q29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkUzNCddKTsKICAgICAgICAgICAg
ICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJvd25lZENv
bW1pdFdpdGhXZWJLaXRBbmRKYXZhU2NyaXB0Q29yZSkpOwogICAgICAgICAgICAgICAgIHJldHVy
biBmZXRjaEF2YWlsYWJsZUJ1aWxkc1Byb21pc2U7Ci0gICAgICAgICAgICB9KS50aGVuKChyZXN1
bHRzKSA9PiB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVuZ3RoLCAz
KTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIE1vY2tTdWJw
cm9jZXNzLnJlc2V0KCk7Ci0gICAgICAgICAgICAgICAgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0g
ZmV0Y2hlci5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcygpOworICAgICAgICAgICAgICAgIGZldGNo
UmVwb3J0QW5kVXBkYXRlQnVpbGRzUHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRh
dGVCdWlsZHMoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3Mud2FpdEZv
ckludm9jYXRpb24oKTsKICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwpAQCAtMzM3LDkgKzM1NSwx
NDEgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShhbm90aGVyb3duZWRD
b21taXRXaXRoV2ViS2l0QW5kSmF2YVNjcmlwdENvcmUpKTsKICAgICAgICAgICAgICAgICBhc3Nl
cnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1p
dCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJhMTZFMzQnXSk7CiAKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmV0Y2hBbmRSZXBvcnRQcm9taXNlOworICAgICAgICAgICAgICAgIHJldHVybiBm
ZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkc1Byb21pc2U7CisgICAgICAgICAgICB9KS50aGVuKCgp
ID0+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoWworICAgICAgICAgICAg
ICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0J30p
LAorICAgICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25h
bWUnOiAnSmF2YVNjcmlwdENvcmUnfSksCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJv
d3MoJ2NvbW1pdHMnLCB7J3JldmlzaW9uJzogJ1NpZXJyYTE2RDY5J30pLAorICAgICAgICAgICAg
ICAgICAgICBkYi5zZWxlY3RSb3dzKCdjb21taXRzJywgeydyZXZpc2lvbic6ICdTaWVycmExNkUz
M2gnfSksCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7J3Jl
dmlzaW9uJzogJ1NpZXJyYTE2RTM0J30pXSk7CisgICAgICAgICAgICB9KS50aGVuKChyZXN1bHRz
KSA9PiB7CisgICAgICAgICAgICAgICAgY29uc3Qgd2Via2l0UmVwb3NpdG9yeSA9IHJlc3VsdHNb
MF07CisgICAgICAgICAgICAgICAgY29uc3QganNjUmVwb3NpdG9yeSA9IHJlc3VsdHNbMV07Cisg
ICAgICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0MTZENjkgPSByZXN1bHRzWzJdOworICAgICAg
ICAgICAgICAgIGNvbnN0IG9zeENvbW1pdDE2RTMzaCA9IHJlc3VsdHNbM107CisgICAgICAgICAg
ICAgICAgY29uc3Qgb3N4Q29tbWl0MTZFMzQgPSByZXN1bHRzWzRdOworCisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHdlYmtpdFJlcG9zaXRvcnkubGVuZ3RoLCAxKTsKKyAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwod2Via2l0UmVwb3NpdG9yeVswXVsnb3duZXInXSwgMTApOworICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChqc2NSZXBvc2l0b3J5Lmxlbmd0aCwgMSk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGpzY1JlcG9zaXRvcnlbMF1bJ293bmVyJ10sIDEwKTsK
KworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OS5sZW5ndGgsIDEp
OworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OVswXVsncmVwb3Np
dG9yeSddLCAxMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY5
WzBdWydvcmRlciddLCAxNjAzMDA2OTAwKTsKKworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChvc3hDb21taXQxNkUzM2gubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwob3N4Q29tbWl0MTZFMzNoWzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzNoWzBdWydvcmRlciddLCAxNjA0MDAzMzA4KTsK
KworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzNC5sZW5ndGgsIDEp
OworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzNFswXVsncmVwb3Np
dG9yeSddLCAxMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTM0
WzBdWydvcmRlciddLCAxNjA0MDAzNDAwKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBUZXN0
U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRl
ZD9mcm9tPTE2MDMwMDAwMDAmdG89MTYwMzA5OTkwMCcpOwogICAgICAgICAgICAgfSkudGhlbigo
cmVzdWx0KSA9PiB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVz
J10sICdPSycpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMn
XS5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1p
dHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RDY5Jyk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjAzMDA2OTAwKTsKKwor
ICAgICAgICAgICAgICAgIHJldHVybiBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9h
cGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDQwMDAwMDAmdG89MTYwNDA5OTkw
MCcpOworICAgICAgICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJh
MTZFMzQnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11b
MF1bJ29yZGVyJ10sIDE2MDQwMDM0MDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwor
CisgICAgICAgIGl0KCdzaG91bGQgcmVwb3J0IGFsbCBidWlsZCBjb21taXRzIHdpdGggb3duZWQt
Y29tbWl0cycsICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9n
Z2VyOworICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihjb25m
aWcsIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCksIHNsYXZlQXV0aCwgTW9ja1N1YnByb2Nlc3MsIGxv
Z2dlcik7CisgICAgICAgICAgICBjb25zdCBkYiA9IFRlc3RTZXJ2ZXIuZGF0YWJhc2UoKTsKKyAg
ICAgICAgICAgIGNvbnN0IHJlc3VsdHNGb3JTaWVycmFEID0ge2FsbFJldmlzaW9uczogWyJTaWVy
cmExNkQ2OCIsICJTaWVycmExNkQ2OSJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5OiB7fX07Cisg
ICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2llcnJhRSA9IHthbGxSZXZpc2lvbnM6IFsiU2ll
cnJhMTZFMzIiLCAiU2llcnJhMTZFMzMiLCAiU2llcnJhMTZFMzNoIiwgIlNpZXJyYTE2RTM0Il0s
IGNvbW1pdHNXaXRoVGVzdGFiaWxpdHk6IHt9fTsKKworICAgICAgICAgICAgbGV0IGZldGNoUmVw
b3J0QW5kVXBkYXRlQnVpbGRzUHJvbWlzZSA9IG51bGw7CisgICAgICAgICAgICBsZXQgZmV0Y2hB
dmFpbGFibGVCdWlsZHNQcm9taXNlID0gbnVsbDsKKworICAgICAgICAgICAgcmV0dXJuIGFkZFNs
YXZlRm9yUmVwb3J0KGVtcHR5UmVwb3J0KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUHJvbWlzZS5hbGwoWworICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ3JlcG9z
aXRvcmllcycsIHsnaWQnOiAxMCwgJ25hbWUnOiAnT1NYJ30pLAorICAgICAgICAgICAgICAgICAg
ICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1Np
ZXJyYTE2RDY3JywgJ29yZGVyJzogMTYwMzAwNjcwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAg
ICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwg
J3JldmlzaW9uJzogJ1NpZXJyYTE2RDY4JywgJ29yZGVyJzogMTYwMzAwNjgwMCwgJ3JlcG9ydGVk
JzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3Jl
cG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RDY5JywgJ29yZGVyJzogMTYwMzAw
NjkwMCwgJ3JlcG9ydGVkJzogZmFsc2V9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0
KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkUzMics
ICdvcmRlcic6IDE2MDQwMDMyMDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAg
ICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6
ICdTaWVycmExNkUzMycsICdvcmRlcic6IDE2MDQwMDMzMDAsICdyZXBvcnRlZCc6IHRydWV9KSwK
KyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5Jzog
MTAsICdyZXZpc2lvbic6ICdTaWVycmExNkUzM2cnLCAnb3JkZXInOiAxNjA0MDAzMzA3LCAncmVw
b3J0ZWQnOiB0cnVlfSldKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAg
ICAgICAgIHJldHVybiBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0
cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDMwMDAwMDAmdG89MTYwMzA5OTkwMCcpOworICAg
ICAgICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZENjgnKTsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVy
J10sIDE2MDMwMDY4MDApOworICAgICAgICAgICAgICAgIHJldHVybiBUZXN0U2VydmVyLnJlbW90
ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDQw
MDAwMDAmdG89MTYwNDA5OTkwMCcpOworICAgICAgICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwg
MSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydy
ZXZpc2lvbiddLCAnU2llcnJhMTZFMzNnJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjA0MDAzMzA3KTsKKyAgICAgICAgICAg
ICAgICBjb25zdCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0
Rm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgICAgIGZldGNoQXZhaWxhYmxlQnVpbGRzUHJv
bWlzZSA9IGZldGNoZXIuX2ZldGNoQXZhaWxhYmxlQnVpbGRzKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkg
PT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEp
OworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFu
ZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOworICAgICAgICAgICAgICAgIGlu
dm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52
b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21t
aXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RDY5J10pOworICAgICAgICAgICAgICAg
IGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkob3duZWRDb21taXRXaXRoV2Vi
S2l0KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2Fp
dEZvckludm9jYXRpb24oKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAgICAgICAg
ICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2Fs
bCBvc3ggMTZFeHggYnVpbGRzJ10pOworICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJl
c29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUUpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOworICAg
ICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGlu
dm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChp
bnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3Jl
dmlzaW9uJywgJ1NpZXJyYTE2RTMzaCddKTsKKyAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1sw
XS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJvd25lZENvbW1pdFdpdGhXZWJLaXQpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52
b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21t
aXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RTM0J10pOworICAgICAgICAgICAgICAg
IGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0
V2l0aFdlYktpdEFuZEphdmFTY3JpcHRDb3JlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZl
dGNoQXZhaWxhYmxlQnVpbGRzUHJvbWlzZTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewor
ICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLnJlc2V0KCk7CisgICAgICAgICAgICAgICAg
ZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHNQcm9taXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFu
ZFVwZGF0ZUJ1aWxkcygpOworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53
YWl0Rm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAn
YWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0u
cmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7Cisg
ICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
aW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFs
KGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAn
cmV2aXNpb24nLCAnU2llcnJhMTZENjknXSk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNb
MF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShvd25lZENvbW1pdFdpdGhXZWJLaXQpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlv
bigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRl
ZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkV4eCBi
dWlsZHMnXSk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0
cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRSkpOworICAgICAgICAgICAgICAgIHJldHVybiBNb2Nr
U3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICB9KS50
aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVu
Z3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBd
LmNvbW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2ll
cnJhMTZFMzNoJ10pOworICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNP
Ti5zdHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0V2l0aFdlYktpdCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7Cisg
ICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
aW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5y
ZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJvd25lZENvbW1pdFdpdGhXZWJLaXRBbmRKYXZh
U2NyaXB0Q29yZSkpOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlv
bnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ293bmVkQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbics
ICdTaWVycmExNkUzNCddKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaFJlcG9ydEFu
ZFVwZGF0ZUJ1aWxkc1Byb21pc2U7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoWwogICAgICAgICAgICAgICAgICAgICBkYi5z
ZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0J30pLAogICAgICAgICAg
ICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2YVNj
cmlwdENvcmUnfSksCkBAIC0zODQsMTEgKzUzNCwxMTkgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRj
aGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAKKyAgICAg
ICAgaXQoJ3Nob3VsZCB1cGRhdGUgdGVzdGFiaWxpdHkgd2FybmluZyBmb3IgY29tbWl0cycsIGFz
eW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOwor
ICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihjb25maWcsIFRl
c3RTZXJ2ZXIucmVtb3RlQVBJKCksIHNsYXZlQXV0aCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7
CisgICAgICAgICAgICBjb25zdCBkYiA9IFRlc3RTZXJ2ZXIuZGF0YWJhc2UoKTsKKyAgICAgICAg
ICAgIGNvbnN0IHJlc3VsdHNGb3JTaWVycmFEID0ge2FsbFJldmlzaW9uczogWyJTaWVycmExNkQ2
OCIsICJTaWVycmExNkQ2OSJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5OiB7IlNpZXJyYTE2RDY4
IjogIlBhbmljIiwgIlNpZXJyYTE2RDY5IjogIlNwaW4gQ1BVIn19OworICAgICAgICAgICAgY29u
c3QgcmVzdWx0c0ZvclNpZXJyYUUgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RTMyIiwgIlNp
ZXJyYTE2RTMzIiwgIlNpZXJyYTE2RTMzaCIsICJTaWVycmExNkUzNCJdLCBjb21taXRzV2l0aFRl
c3RhYmlsaXR5OiB7IlNpZXJyYTE2RTMxIjogIldlYktpdCBjcmFzaGVzIn19OworCisgICAgICAg
ICAgICBhd2FpdCBhZGRTbGF2ZUZvclJlcG9ydChlbXB0eVJlcG9ydCk7CisKKyAgICAgICAgICAg
IGF3YWl0IFByb21pc2UuYWxsKFsKKyAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ3JlcG9zaXRv
cmllcycsIHsnaWQnOiAxMCwgJ25hbWUnOiAnT1NYJ30pLAorICAgICAgICAgICAgICAgIGRiLmlu
c2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZE
NjcnLCAnb3JkZXInOiAxNjAzMDA2NzAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAg
ICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6
ICdTaWVycmExNkQ2OCcsICdvcmRlcic6IDE2MDMwMDY4MDAsICdyZXBvcnRlZCc6IHRydWV9KSwK
KyAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwg
J3JldmlzaW9uJzogJ1NpZXJyYTE2RDY5JywgJ29yZGVyJzogMTYwMzAwNjkwMCwgJ3JlcG9ydGVk
JzogZmFsc2V9KSwKKyAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9z
aXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RTMxJywgJ29yZGVyJzogMTYwNDAwMzEw
MCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0
cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZFMzInLCAnb3JkZXIn
OiAxNjA0MDAzMjAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAgICAgZGIuaW5z
ZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkUz
MycsICdvcmRlcic6IDE2MDQwMDMzMDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAg
ICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzog
J1NpZXJyYTE2RTMzZycsICdvcmRlcic6IDE2MDQwMDMzMDcsICdyZXBvcnRlZCc6IHRydWV9KV0p
OworCisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEko
KS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvT1NYL2xhc3QtcmVwb3J0ZWQ/ZnJvbT0xNjAzMDAwMDAw
JnRvPTE2MDMwOTk5MDAnKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29t
bWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21t
aXRzJ11bMF1bJ3JldmlzaW9uJ10sICdTaWVycmExNkQ2OCcpOworICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjAzMDA2ODAwKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGF3YWl0IFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2Fw
aS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwNDAwMDAwMCZ0bz0xNjA0MDk5OTAw
Jyk7CisKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGgs
IDEpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZp
c2lvbiddLCAnU2llcnJhMTZFMzNnJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0
Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDQwMDMzMDcpOworCisgICAgICAgICAgICBjb25z
dCBmZXRjaFJlcG9ydEFuZFVwZGF0ZVByb21pc2UgPSBmZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBk
YXRlQnVpbGRzKCk7CisgICAgICAgICAgICBhd2FpdCBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52
b2NhdGlvbigpOworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3Ro
LCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFu
ZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOworICAgICAgICAgICAgaW52b2Nh
dGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkpOworICAg
ICAgICAgICAgYXdhaXQgTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigp
OworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAg
ICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0
JywgJ293bmVkQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkQ2OSddKTsKKyAg
ICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkob3duZWRDb21t
aXRXaXRoV2ViS2l0KSk7CisgICAgICAgICAgICBhd2FpdCBNb2NrU3VicHJvY2Vzcy5yZXNldEFu
ZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0
aW9ucy5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9u
c1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkV4eCBidWlsZHMnXSk7CisgICAgICAg
ICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVy
cmFFKSk7CisKKyAgICAgICAgICAgIGF3YWl0IE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZv
ckludm9jYXRpb24oKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxl
bmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNv
bW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJh
MTZFMzNoJ10pOworICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmlu
Z2lmeShhbm90aGVyb3duZWRDb21taXRXaXRoV2ViS2l0KSk7CisgICAgICAgICAgICBhd2FpdCAg
TW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBpbnZvY2F0
aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJvd25lZENvbW1pdFdpdGhXZWJL
aXRBbmRKYXZhU2NyaXB0Q29yZSkpOworICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZv
Y2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3Jldmlz
aW9uJywgJ1NpZXJyYTE2RTM0J10pOworCisgICAgICAgICAgICBhd2FpdCBmZXRjaFJlcG9ydEFu
ZFVwZGF0ZVByb21pc2U7CisKKyAgICAgICAgICAgIGNvbnN0IHdlYmtpdFJlcG9zaXRvcnkgPSBh
d2FpdCBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0J30pOwor
ICAgICAgICAgICAgY29uc3QganNjUmVwb3NpdG9yeSA9IGF3YWl0IGRiLnNlbGVjdFJvd3MoJ3Jl
cG9zaXRvcmllcycsIHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29yZSd9KTsKKyAgICAgICAgICAgIGNv
bnN0IG9zeENvbW1pdDE2RDY4ID0gYXdhaXQgZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2
aXNpb24nOiAnU2llcnJhMTZENjgnfSk7CisgICAgICAgICAgICBjb25zdCBvc3hDb21taXQxNkQ2
OSA9IGF3YWl0IGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7J3JldmlzaW9uJzogJ1NpZXJyYTE2
RDY5J30pOworICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0MTZFMzEgPSBhd2FpdCBkYi5zZWxl
Y3RSb3dzKCdjb21taXRzJywgeydyZXZpc2lvbic6ICdTaWVycmExNkUzMSd9KTsKKyAgICAgICAg
ICAgIGNvbnN0IG9zeENvbW1pdDE2RTMzaCA9IGF3YWl0IGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMn
LCB7J3JldmlzaW9uJzogJ1NpZXJyYTE2RTMzaCd9KTsKKyAgICAgICAgICAgIGNvbnN0IG9zeENv
bW1pdDE2RTM0ID0gYXdhaXQgZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAn
U2llcnJhMTZFMzQnfSk7CisKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbCh3ZWJraXRSZXBvc2l0
b3J5Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwod2Via2l0UmVwb3NpdG9y
eVswXVsnb3duZXInXSwgMTApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGpzY1JlcG9zaXRv
cnkubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChqc2NSZXBvc2l0b3J5WzBd
Wydvd25lciddLCAxMCk7CisKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2
OC5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY4WzBd
WydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQx
NkQ2OFswXVsnb3JkZXInXSwgMTYwMzAwNjgwMCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
b3N4Q29tbWl0MTZENjhbMF1bJ3Rlc3RhYmlsaXR5J10sICJQYW5pYyIpOworCisgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZENjkubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChvc3hDb21taXQxNkQ2OVswXVsncmVwb3NpdG9yeSddLCAxMCk7CisgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZENjlbMF1bJ29yZGVyJ10sIDE2MDMwMDY5MDAp
OworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY5WzBdWyd0ZXN0YWJpbGl0
eSddLCAiU3BpbiBDUFUiKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2
RTMxLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzFb
MF1bJ3JlcG9zaXRvcnknXSwgMTApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1p
dDE2RTMxWzBdWydvcmRlciddLCAxNjA0MDAzMTAwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVh
bChvc3hDb21taXQxNkUzMVswXVsndGVzdGFiaWxpdHknXSwgIldlYktpdCBjcmFzaGVzIik7CisK
KyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2gubGVuZ3RoLCAxKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2hbMF1bJ3JlcG9zaXRvcnknXSwg
MTApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMzaFswXVsnb3JkZXIn
XSwgMTYwNDAwMzMwOCk7CisKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUz
NC5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTM0WzBd
WydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQx
NkUzNFswXVsnb3JkZXInXSwgMTYwNDAwMzQwMCk7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGF3
YWl0IFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0
LXJlcG9ydGVkP2Zyb209MTYwMzAwMDAwMCZ0bz0xNjAzMDk5OTAwJyk7CisgICAgICAgICAgICBh
c3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RDY5
Jyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVy
J10sIDE2MDMwMDY5MDApOworCisgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVy
LnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9t
PTE2MDQwMDAwMDAmdG89MTYwNDA5OTkwMCcpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
c3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVz
dWx0Wydjb21taXRzJ11bMF1bJ3JldmlzaW9uJ10sICdTaWVycmExNkUzNCcpOworICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjA0MDAzNDAw
KTsKKyAgICAgICAgfSk7CisKICAgICAgICAgaXQoJ3Nob3VsZCByZXBvcnQgY29tbWl0cyB3aXRo
b3V0IG93bmVkLWNvbW1pdHMgaWYgIm93bmVkQ29tbWl0Q29tbWFuZCIgaXMgbm90IHNwZWNpZmll
ZCBpbiBjb25maWcnLCBhc3luYyAoKSA9PiB7CiAKICAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9
IG5ldyBNb2NrTG9nZ2VyOwogICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxk
RmV0Y2hlcihjb25maWdXaXRob3V0T3duZWRDb21taXRDb21tYW5kLCBUZXN0U2VydmVyLnJlbW90
ZUFQSSgpLCBzbGF2ZUF1dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwogICAgICAgICAgICAg
Y29uc3QgZGIgPSBUZXN0U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAgICBjb25zdCByZXN1
bHRzRm9yU2llcnJhRCA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZENjgiLCAiU2llcnJhMTZE
NjkiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eToge319OworICAgICAgICAgICAgY29uc3QgcmVz
dWx0c0ZvclNpZXJyYUUgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RTMyIiwgIlNpZXJyYTE2
RTMzIiwgIlNpZXJyYTE2RTMzaCIsICJTaWVycmExNkUzNCJdLCBjb21taXRzV2l0aFRlc3RhYmls
aXR5OiB7fX07CiAKICAgICAgICAgICAgIGF3YWl0IGFkZFNsYXZlRm9yUmVwb3J0KGVtcHR5UmVw
b3J0KTsKICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFsKQEAgLTQxMSwxOSArNjY5LDE4
IEBAIGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjA0MDAzMzA3KTsK
IAogICAgICAgICAgICAgY29uc3Qgd2FpdEZvckludm9jYXRpb25Qcm9taXNlID0gTW9ja1N1YnBy
b2Nlc3Mud2FpdEZvckludm9jYXRpb24oKTsKLSAgICAgICAgICAgIGNvbnN0IGZldGNoQW5kUmVw
b3J0UHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMoKTsKKyAgICAgICAg
ICAgIGNvbnN0IGZldGNoUmVwb3J0QW5kVXBkYXRlUHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hSZXBv
cnRBbmRVcGRhdGVCdWlsZHMoKTsKICAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JJbnZvY2F0aW9u
UHJvbWlzZTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEp
OwogICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBb
J2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7Ci0gICAgICAgICAgICBpbnZvY2F0aW9u
c1swXS5yZXNvbHZlKCdcblxuU2llcnJhMTZENjhcblNpZXJyYTE2RDY5Jyk7CisgICAgICAgICAg
ICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFE
KSk7CiAKICAgICAgICAgICAgIGF3YWl0IE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvcklu
dm9jYXRpb24oKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgs
IDEpOwogICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5k
LCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkV4eCBidWlsZHMnXSk7Ci0gICAgICAgICAgICBpbnZvY2F0
aW9uc1swXS5yZXNvbHZlKCdcblxuU2llcnJhMTZFMzJcblNpZXJyYTE2RTMzXG5TaWVycmExNkUz
M2hcblNpZXJyYTE2RTM0Jyk7CisgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpT
T04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFFKSk7CiAKLSAgICAgICAgICAgIHJlc3VsdCA9
IGF3YWl0IGZldGNoQW5kUmVwb3J0UHJvbWlzZTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChy
ZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNo
UmVwb3J0QW5kVXBkYXRlUHJvbWlzZTsKICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2Fp
dCBQcm9taXNlLmFsbChbCiAgICAgICAgICAgICAgICAgZGIuc2VsZWN0Um93cygncmVwb3NpdG9y
aWVzJywgeyduYW1lJzogJ1dlYktpdCd9KSwKICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dz
KCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2YVNjcmlwdENvcmUnfSksCkBAIC00NjcsNiAr
NzI0LDggQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKICAgICAgICAgICAgIGNvbnN0IGZl
dGNoZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoY29uZmlnV2l0aG91dE93bmVkQ29tbWl0Q29tbWFu
ZCwgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBNb2NrU3VicHJvY2VzcywgbG9n
Z2VyKTsKICAgICAgICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZlci5kYXRhYmFzZSgpOworICAg
ICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUQgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJy
YTE2RDY4IiwgIlNpZXJyYTE2RDY5IiwgIlNpZXJyYTE2RDEwMDAwIl0sIGNvbW1pdHNXaXRoVGVz
dGFiaWxpdHk6IHt9fTsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdHNGb3JTaWVycmFFID0ge2Fs
bFJldmlzaW9uczogWyJTaWVycmExNkUzMiIsICJTaWVycmExNkUzMyIsICJTaWVycmExNkUzM2gi
LCAiU2llcnJhMTZFMzQiLCAiU2llcnJhMTZFMTAwMDAiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0
eToge319OwogCiAgICAgICAgICAgICBhd2FpdCBhZGRTbGF2ZUZvclJlcG9ydChlbXB0eVJlcG9y
dCk7CiAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbCkBAIC00ODgsMjAgKzc0NywxOSBA
QCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RTMz
ZycpOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRl
ciddLCAxNjA0MDAzMzA3KTsKICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JJbnZvY2F0aW9uUHJv
bWlzZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7Ci0gICAgICAgICAgICBj
b25zdCBmZXRjaEFuZFJlcG9ydFByb21pc2UgPSBmZXRjaGVyLmZldGNoQW5kUmVwb3J0TmV3QnVp
bGRzKCk7CisgICAgICAgICAgICBjb25zdCBmZXRjaFJlcG9ydEFuZFVwZGF0ZVByb21pc2UgPSBm
ZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzKCk7CiAKICAgICAgICAgICAgIGF3YWl0
IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZv
Y2F0aW9ucy5sZW5ndGgsIDEpOwogICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0
aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7Ci0gICAg
ICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKCdcblxuU2llcnJhMTZENjhcblNpZXJyYTE2
RDY5XG5TaWVycmExNkQxMDAwMCcpOworICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2
ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkpOwogCiAgICAgICAgICAgICBhd2Fp
dCBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CiAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKICAgICAgICAgICAgIGFzc2Vy
dC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZF
eHggYnVpbGRzJ10pOwotICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnXG5cblNp
ZXJyYTE2RTMyXG5TaWVycmExNkUzM1xuU2llcnJhMTZFMzNoXG5TaWVycmExNkUzNFxuU2llcnJh
MTZFMTAwMDAnKTsKKyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJp
bmdpZnkocmVzdWx0c0ZvclNpZXJyYUUpKTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQg
ZmV0Y2hBbmRSZXBvcnRQcm9taXNlOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsn
c3RhdHVzJ10sICdPSycpOworICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hSZXBvcnRB
bmRVcGRhdGVQcm9taXNlOwogICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21p
c2UuYWxsKFsKICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7
J25hbWUnOiAnV2ViS2l0J30pLAogICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ3JlcG9z
aXRvcmllcycsIHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29yZSd9KSwKQEAgLTU0NSw2ICs4MDMsNyBA
QCBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGNv
bnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOwogICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9
IG5ldyBPU0J1aWxkRmV0Y2hlcihjb25maWdUcmFja2luZ09uZU9TLCBUZXN0U2VydmVyLnJlbW90
ZUFQSSgpLCBzbGF2ZUF1dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwogICAgICAgICAgICAg
Y29uc3QgZGIgPSBUZXN0U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAgICBjb25zdCByZXN1
bHRzRm9yU2llcnJhRCA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZENjgiLCAiU2llcnJhMTZE
NjkiLCAiU2llcnJhMTZEMTAwIiwgIlNpZXJyYTE2RDEwMGEiXSwgY29tbWl0c1dpdGhUZXN0YWJp
bGl0eToge319OwogCiAgICAgICAgICAgICBhd2FpdCBhZGRTbGF2ZUZvclJlcG9ydChlbXB0eVJl
cG9ydCk7CiAgICAgICAgICAgICBhd2FpdCBkYi5pbnNlcnQoJ3JlcG9zaXRvcmllcycsIHsnaWQn
OiAxMCwgJ25hbWUnOiAnT1NYJ30pOwpAQCAtNTU2LDE0ICs4MTUsMTMgQEAgZGVzY3JpYmUoJ09T
QnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVz
dWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMwMTAwMDApOwogCiAgICAgICAgICAgICBj
b25zdCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52
b2NhdGlvbigpOwotICAgICAgICAgICAgY29uc3QgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gZmV0
Y2hlci5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcygpOworICAgICAgICAgICAgY29uc3QgZmV0Y2hB
bmRSZXBvcnRQcm9taXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcygpOwog
ICAgICAgICAgICAgYXdhaXQgd2FpdEZvckludm9jYXRpb25Qcm9taXNlOwogICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICBhc3NlcnQu
ZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdhbGwgb3N4IDE2RHh4
IGJ1aWxkcyddKTsKLSAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVy
cmExNkQ2OFxuU2llcnJhMTZENjlcblNpZXJyYTE2RDEwMFxuU2llcnJhMTZEMTAwYVxuJyk7Cisg
ICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNG
b3JTaWVycmFEKSk7CiAKICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoQW5kUmVwb3J0
UHJvbWlzZTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cyddLCAnT0sn
KTsKICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAg
ICAgICAgICAgICAgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ1dlYktp
dCd9KSwKICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25h
bWUnOiAnSmF2YVNjcmlwdENvcmUnfSksCkBAIC01OTQsNiArODUyLDcgQEAgZGVzY3JpYmUoJ09T
QnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBu
ZXcgTW9ja0xvZ2dlcjsKICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZl
dGNoZXIoY29uZmlnVHJhY2tpbmdPbmVPUywgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVB
dXRoLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IGRiID0gVGVz
dFNlcnZlci5kYXRhYmFzZSgpOworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUQg
PSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RDY4IiwgIlNpZXJyYTE2RDY5IiwgIlNpZXJyYTE2
RDEwMCIsICJTaWVycmExNkQxMDEiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eToge319OwogCiAg
ICAgICAgICAgICBhd2FpdCBhZGRTbGF2ZUZvclJlcG9ydChlbXB0eVJlcG9ydCk7CiAgICAgICAg
ICAgICBhd2FpdCBkYi5pbnNlcnQoJ3JlcG9zaXRvcmllcycsIHsnaWQnOiAxMCwgJ25hbWUnOiAn
T1NYJ30pOwpAQCAtNjAyLDE0ICs4NjEsMTMgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywg
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ10u
bGVuZ3RoLCAwKTsKIAogICAgICAgICAgICAgY29uc3Qgd2FpdEZvckludm9jYXRpb25Qcm9taXNl
ID0gTW9ja1N1YnByb2Nlc3Mud2FpdEZvckludm9jYXRpb24oKTsKLSAgICAgICAgICAgIGNvbnN0
IGZldGNoQW5kUmVwb3J0UHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMo
KTsKKyAgICAgICAgICAgIGNvbnN0IGZldGNoUmVwb3J0QW5kVXBkYXRlUHJvbWlzZSA9IGZldGNo
ZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMoKTsKICAgICAgICAgICAgIGF3YWl0IHdhaXRG
b3JJbnZvY2F0aW9uUHJvbWlzZTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9u
cy5sZW5ndGgsIDEpOwogICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1sw
XS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7Ci0gICAgICAgICAg
ICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKCdcblxuU2llcnJhMTZENjhcblNpZXJyYTE2RDY5XG5T
aWVycmExNkQxMDBcblNpZXJyYTE2RDEwMVxuJyk7CisgICAgICAgICAgICBpbnZvY2F0aW9uc1sw
XS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFEKSk7CiAKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoQW5kUmVwb3J0UHJvbWlzZTsKLSAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IGF3YWl0IGZldGNoUmVwb3J0QW5kVXBkYXRlUHJvbWlzZTsKICAgICAgICAgICAgIGNvbnN0IHJl
c3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICAgICAgICAgZGIuc2VsZWN0Um93
cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ1dlYktpdCd9KSwKICAgICAgICAgICAgICAgICBk
Yi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2YVNjcmlwdENvcmUnfSks
CkBAIC02NDYsNiArOTA0LDggQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKICAgICAgICAg
ICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoY29uZmlnLCBUZXN0U2VydmVy
LnJlbW90ZUFQSSgpLCBzbGF2ZUF1dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwogICAgICAg
ICAgICAgY29uc3QgZGIgPSBUZXN0U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAgICBjb25z
dCByZXN1bHRzRm9yU2llcnJhRCA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZENjgiLCAiU2ll
cnJhMTZENjkiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eToge319OworICAgICAgICAgICAgY29u
c3QgcmVzdWx0c0ZvclNpZXJyYUUgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RTMyIiwgIlNp
ZXJyYTE2RTMzIiwgIlNpZXJyYTE2RTMzaCIsICJTaWVycmExNkUzNCJdLCBjb21taXRzV2l0aFRl
c3RhYmlsaXR5OiB7fX07CiAgICAgICAgICAgICBsZXQgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0g
bnVsbDsKIAogICAgICAgICAgICAgcmV0dXJuIGFkZFNsYXZlRm9yUmVwb3J0KGVtcHR5UmVwb3J0
KS50aGVuKCgpID0+IHsKQEAgLTY3MSwxMiArOTMxLDEyIEBAIGRlc2NyaWJlKCdPU0J1aWxkRmV0
Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRb
J2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwNDAwMzMwNyk7CiAKICAgICAgICAgICAgICAgICBj
b25zdCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52
b2NhdGlvbigpOwotICAgICAgICAgICAgICAgIGZldGNoQW5kUmVwb3J0UHJvbWlzZSA9IGZldGNo
ZXIuZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMoKTsKKyAgICAgICAgICAgICAgICBmZXRjaEFuZFJl
cG9ydFByb21pc2UgPSBmZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzKCk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZTsKICAgICAgICAgICAg
IH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9u
cy5sZW5ndGgsIDEpOwogICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlv
bnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOwotICAgICAg
ICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2OFxuU2llcnJh
MTZENjlcbicpOworICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5z
dHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTW9j
a1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOwogICAgICAgICAgICAgfSku
dGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxl
bmd0aCwgMSk7CkBAIC02ODYsNyArOTQ2LDcgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywg
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKICAgICAgICAgICAgICAgICBh
c3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdhbGwgb3N4
IDE2RXh4IGJ1aWxkcyddKTsKLSAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZl
KCdcblxuU2llcnJhMTZFMzJcblNpZXJyYTE2RTMzXG5TaWVycmExNkUzM2hcblNpZXJyYTE2RTM0
Jyk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lm
eShyZXN1bHRzRm9yU2llcnJhRSkpOwogICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJv
Y2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CiAgICAgICAgICAgICB9KS50aGVuKCgp
ID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNv
bW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJh
MTZFMzNoJ10pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pz
L29zLWJ1aWxkLWZldGNoZXIuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMv
b3MtYnVpbGQtZmV0Y2hlci5qcwppbmRleCAwNTFjMjlmY2I3Yjg2MzM2YmY0MTcyZDU1ZjdhNDk4
NmQxNzE0ZmUxLi4wODA2MzI1MTE4YjZlNmQ5MzgzN2RjZDU5OGYyNWQyM2JlMjI3NGNmIDEwMDY0
NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3MtYnVpbGQtZmV0Y2hl
ci5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3MtYnVpbGQtZmV0
Y2hlci5qcwpAQCAtMjIsNTkgKzIyLDU2IEBAIGNsYXNzIE9TQnVpbGRGZXRjaGVyIHsKICAgICAg
ICAgdGhpcy5fbWF4U3VibWl0Q291bnQgPSBvc0NvbmZpZ1snbWF4U3VibWl0Q291bnQnXSB8fCAy
MDsKICAgICB9CiAKLSAgICBzdGF0aWMgZmV0Y2hBbmRSZXBvcnRBbGxJbk9yZGVyKGZldGNoZXJM
aXN0KQorICAgIHN0YXRpYyBhc3luYyBmZXRjaFJlcG9ydEFuZFVwZGF0ZUNvbW1pdHMoZmV0Y2hl
ckxpc3QpCiAgICAgewotICAgICAgICByZXR1cm4gbWFwSW5TZXJpYWxQcm9taXNlQ2hhaW4oZmV0
Y2hlckxpc3QsIChmZXRjaGVyKSA9PiBmZXRjaGVyLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzKCkp
OworICAgICAgICBmb3IgKGNvbnN0IGZldGNoZXIgb2YgZmV0Y2hlckxpc3QpCisgICAgICAgICAg
ICBhd2FpdCBmZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzKCk7CiAgICAgfQogCi0g
ICAgZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMoKQorICAgIGFzeW5jIGZldGNoUmVwb3J0QW5kVXBk
YXRlQnVpbGRzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9mZXRjaEF2YWlsYWJsZUJ1
aWxkcygpLnRoZW4oKHJlc3VsdHMpID0+IHsKLSAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5sb2co
YFN1Ym1pdHRpbmcgJHtyZXN1bHRzLmxlbmd0aH0gYnVpbGRzIGZvciAke3RoaXMuX29zQ29uZmln
WyduYW1lJ119YCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPT0gMCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VibWl0Q29tbWl0cyhyZXN1bHRzKTsKLQotICAgICAg
ICAgICAgY29uc3Qgc3BsaXR0ZWRSZXN1bHRzID0gW107Ci0gICAgICAgICAgICBmb3IgKGxldCBz
dGFydEluZGV4ID0gMDsgc3RhcnRJbmRleCA8IHJlc3VsdHMubGVuZ3RoOyBzdGFydEluZGV4ICs9
IHRoaXMuX21heFN1Ym1pdENvdW50KQotICAgICAgICAgICAgICAgIHNwbGl0dGVkUmVzdWx0cy5w
dXNoKHJlc3VsdHMuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIHRoaXMuX21heFN1Ym1p
dENvdW50KSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBtYXBJblNlcmlhbFByb21pc2VDaGFpbihz
cGxpdHRlZFJlc3VsdHMsIHRoaXMuX3N1Ym1pdENvbW1pdHMuYmluZCh0aGlzKSkudGhlbigocmVz
cG9uc2VzKSA9PiB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KHJlc3BvbnNlcy5ldmVyeSgocmVz
cG9uc2UpID0+IHJlc3BvbnNlWydzdGF0dXMnXSA9PSAnT0snKSk7Ci0gICAgICAgICAgICAgICAg
YXNzZXJ0KHJlc3BvbnNlcy5sZW5ndGggPiAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
cG9uc2VzWzBdOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAgICAgICBjb25zdCB7
bmV3Q29tbWl0c1RvUmVwb3J0LCBjb21taXRzVG9VcGRhdGV9ID0gYXdhaXQgdGhpcy5fZmV0Y2hB
dmFpbGFibGVCdWlsZHMoKTsKKworICAgICAgICB0aGlzLl9sb2dnZXIubG9nKGBTdWJtaXR0aW5n
ICR7bmV3Q29tbWl0c1RvUmVwb3J0Lmxlbmd0aH0gYnVpbGRzIGZvciAke3RoaXMuX29zQ29uZmln
WyduYW1lJ119YCk7CisgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydENvbW1pdHMobmV3Q29tbWl0
c1RvUmVwb3J0LCB0cnVlKTsKKworICAgICAgICB0aGlzLl9sb2dnZXIubG9nKGBVcGRhdGluZyAk
e2NvbW1pdHNUb1VwZGF0ZS5sZW5ndGh9IGJ1aWxkcyBmb3IgJHt0aGlzLl9vc0NvbmZpZ1snbmFt
ZSddfWApOworICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRDb21taXRzKGNvbW1pdHNUb1VwZGF0
ZSwgZmFsc2UpOwogICAgIH0KIAotICAgIF9mZXRjaEF2YWlsYWJsZUJ1aWxkcygpCisgICAgYXN5
bmMgX2ZldGNoQXZhaWxhYmxlQnVpbGRzKCkKICAgICB7CiAgICAgICAgIGNvbnN0IGNvbmZpZyA9
IHRoaXMuX29zQ29uZmlnOwogICAgICAgICBjb25zdCByZXBvc2l0b3J5TmFtZSA9IGNvbmZpZ1sn
bmFtZSddOwotICAgICAgICBsZXQgY3VzdG9tQ29tbWFuZHMgPSBjb25maWdbJ2N1c3RvbUNvbW1h
bmRzJ107CisgICAgICAgIGNvbnN0IG5ld0NvbW1pdHNUb1JlcG9ydCA9IFtdOworICAgICAgICBj
b25zdCBjb21taXRzVG9VcGRhdGUgPSBbXTsKKyAgICAgICAgY29uc3QgIGN1c3RvbUNvbW1hbmRz
ID0gY29uZmlnWydjdXN0b21Db21tYW5kcyddOwogCi0gICAgICAgIHJldHVybiBtYXBJblNlcmlh
bFByb21pc2VDaGFpbihjdXN0b21Db21tYW5kcywgKGNvbW1hbmQpID0+IHsKKyAgICAgICAgZm9y
IChjb25zdCBjb21tYW5kIG9mIGN1c3RvbUNvbW1hbmRzKSB7CiAgICAgICAgICAgICBhc3NlcnQo
Y29tbWFuZFsnbWluUmV2aXNpb24nXSk7CiAgICAgICAgICAgICBhc3NlcnQoY29tbWFuZFsnbWF4
UmV2aXNpb24nXSk7CiAgICAgICAgICAgICBjb25zdCBtaW5SZXZpc2lvbk9yZGVyID0gdGhpcy5f
Y29tcHV0ZU9yZGVyKGNvbW1hbmRbJ21pblJldmlzaW9uJ10pOwogICAgICAgICAgICAgY29uc3Qg
bWF4UmV2aXNpb25PcmRlciA9IHRoaXMuX2NvbXB1dGVPcmRlcihjb21tYW5kWydtYXhSZXZpc2lv
biddKTsKIAogICAgICAgICAgICAgY29uc3QgdXJsID0gYC9hcGkvY29tbWl0cy8ke2VzY2FwZShy
ZXBvc2l0b3J5TmFtZSl9L2xhc3QtcmVwb3J0ZWQ/ZnJvbT0ke21pblJldmlzaW9uT3JkZXJ9JnRv
PSR7bWF4UmV2aXNpb25PcmRlcn1gOworICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQg
dGhpcy5fcmVtb3RlQVBJLmdldEpTT05XaXRoU3RhdHVzKHVybCk7CisgICAgICAgICAgICBjb25z
dCBtaW5PcmRlciA9IHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCA9PSAxID8gcGFyc2VJbnQocmVz
dWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10pICsgMSA6IG1pblJldmlzaW9uT3JkZXI7CiAKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9yZW1vdGVBUEkuZ2V0SlNPTldpdGhTdGF0dXModXJsKS50
aGVuKChyZXN1bHQpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBtaW5PcmRlciA9IHJlc3Vs
dFsnY29tbWl0cyddLmxlbmd0aCA9PSAxID8gcGFyc2VJbnQocmVzdWx0Wydjb21taXRzJ11bMF1b
J29yZGVyJ10pICsgMSA6IG1pblJldmlzaW9uT3JkZXI7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMocmVwb3NpdG9yeU5hbWUsIGNvbW1hbmRb
J2NvbW1hbmQnXSwgY29tbWFuZFsnbGluZXNUb0lnbm9yZSddLCBtaW5PcmRlciwgbWF4UmV2aXNp
b25PcmRlcik7Ci0gICAgICAgICAgICB9KS50aGVuKChjb21taXRzKSA9PiB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgbGFiZWwgPSAnbmFtZScgaW4gY29tbWFuZCA/IGAiJHtjb21tYW5kWyduYW1l
J119ImAgOiBgIiR7Y29tbWFuZFsnbWluUmV2aXNpb24nXX0iIHRvICIke2NvbW1hbmRbJ21heFJl
dmlzaW9uJ119ImA7Ci0gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmxvZyhgRm91bmQgJHtj
b21taXRzLmxlbmd0aH0gYnVpbGRzIGZvciAke2xhYmVsfWApOworICAgICAgICAgICAgY29uc3Qg
Y29tbWl0SW5mbyA9IGF3YWl0IHRoaXMuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMoY29tbWFu
ZFsnY29tbWFuZCddLCBjb21tYW5kWydsaW5lc1RvSWdub3JlJ10pOworICAgICAgICAgICAgY29u
c3QgY29tbWl0cyA9IHRoaXMuX2NvbW1pdHNXaXRoaW5SYW5nZShjb21taXRJbmZvLmFsbFJldmlz
aW9ucywgcmVwb3NpdG9yeU5hbWUsIG1pbk9yZGVyLCBtYXhSZXZpc2lvbk9yZGVyKTsKIAotICAg
ICAgICAgICAgICAgIGlmICgnb3duZWRDb21taXRDb21tYW5kJyBpbiBjb21tYW5kKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5sb2coYFJlc29sdmluZyBvd25lZENvbW1pdHMg
Zm9yICR7bGFiZWx9YCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hZGRPd25l
ZENvbW1pdHNGb3JCdWlsZChjb21taXRzLCBjb21tYW5kWydvd25lZENvbW1pdENvbW1hbmQnXSk7
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgbGFiZWwgPSAnbmFtZScgaW4g
Y29tbWFuZCA/IGAiJHtjb21tYW5kWyduYW1lJ119ImAgOiBgIiR7Y29tbWFuZFsnbWluUmV2aXNp
b24nXX0iIHRvICIke2NvbW1hbmRbJ21heFJldmlzaW9uJ119ImA7CisgICAgICAgICAgICB0aGlz
Ll9sb2dnZXIubG9nKGBGb3VuZCAke2NvbW1pdHMubGVuZ3RofSBidWlsZHMgZm9yICR7bGFiZWx9
YCk7CisgICAgICAgICAgICBpZiAoJ293bmVkQ29tbWl0Q29tbWFuZCcgaW4gY29tbWFuZCkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5sb2coYFJlc29sdmluZyBvd25lZENvbW1pdHMg
Zm9yICR7bGFiZWx9YCk7CisgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fYWRkT3duZWRDb21t
aXRzRm9yQnVpbGQoY29tbWl0cywgY29tbWFuZFsnb3duZWRDb21taXRDb21tYW5kJ10pOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbmV3Q29tbWl0c1RvUmVwb3J0LnB1c2goLi4uY29tbWl0
cyk7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gY29tbWl0czsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9KS50aGVuKChyZXN1bHRzKSA9PiBbXS5jb25jYXQoLi4ucmVzdWx0cykpOworICAg
ICAgICAgICAgZm9yIChjb25zdCBbcmV2aXNpb24sIHRlc3RhYmlsaXR5XSBvZiBPYmplY3QuZW50
cmllcyhjb21taXRJbmZvLmNvbW1pdHNXaXRoVGVzdGFiaWxpdHkpKQorICAgICAgICAgICAgICAg
IGNvbW1pdHNUb1VwZGF0ZS5wdXNoKHtyZXBvc2l0b3J5OiByZXBvc2l0b3J5TmFtZSwgcmV2aXNp
b24sIHRlc3RhYmlsaXR5fSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHtuZXdDb21taXRz
VG9SZXBvcnQsIGNvbW1pdHNUb1VwZGF0ZX07CiAgICAgfQogCiAgICAgX2NvbXB1dGVPcmRlcihy
ZXZpc2lvbikKQEAgLTg5LDE3ICs4NiwyNyBAQCBjbGFzcyBPU0J1aWxkRmV0Y2hlciB7CiAgICAg
ICAgIHJldHVybiAoKG1ham9yICogMTAwICsga2luZCkgKiAxMDAwMCArIG1pbm9yKSAqIDEwMCAr
IHZhcmlhbnQ7CiAgICAgfQogCi0gICAgX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMocmVwb3Np
dG9yeSwgY29tbWFuZCwgbGluZXNUb0lnbm9yZSwgbWluT3JkZXIsIG1heE9yZGVyKQorICAgIGFz
eW5jIF9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKGNvbW1hbmQsIGxpbmVzVG9JZ25vcmUpCiAg
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc3VicHJvY2Vzcy5leGVjdXRlKGNvbW1hbmQpLnRo
ZW4oKG91dHB1dCkgPT4geworICAgICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB0aGlzLl9zdWJw
cm9jZXNzLmV4ZWN1dGUoY29tbWFuZCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1
cm4gSlNPTi5wYXJzZShvdXRwdXQpOworICAgICAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAg
ICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikpCisgICAgICAgICAgICAg
ICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICAgICBsZXQgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xu
Jyk7Ci0gICAgICAgICAgICBpZiAobGluZXNUb0lnbm9yZSl7CisgICAgICAgICAgICBpZiAobGlu
ZXNUb0lnbm9yZSkgewogICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChs
aW5lc1RvSWdub3JlKTsKICAgICAgICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmZpbHRlcigobGlu
ZSkgPT4gIXJlZ2V4LmV4ZWMobGluZSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIGxpbmVzLm1hcCgocmV2aXNpb24pID0+ICh7cmVwb3NpdG9yeSwgcmV2aXNpb24sICdvcmRl
cic6IHRoaXMuX2NvbXB1dGVPcmRlcihyZXZpc2lvbil9KSkKLSAgICAgICAgICAgICAgICAuZmls
dGVyKChjb21taXQpID0+IGNvbW1pdFsnb3JkZXInXSA+PSBtaW5PcmRlciAmJiBjb21taXRbJ29y
ZGVyJ10gPD0gbWF4T3JkZXIpOwotICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiB7YWxs
UmV2aXNpb25zOiBsaW5lcywgY29tbWl0c1dpdGhUZXN0YWJpbGl0eToge319OworICAgICAgICB9
CisgICAgfQorCisgICAgX2NvbW1pdHNXaXRoaW5SYW5nZShyZXZpc2lvbnMsIHJlcG9zaXRvcnks
IG1pbk9yZGVyLCBtYXhPcmRlcikKKyAgICB7CisgICAgICAgIHJldHVybiByZXZpc2lvbnMubWFw
KChyZXZpc2lvbikgPT4gKHtyZXBvc2l0b3J5LCByZXZpc2lvbiwgJ29yZGVyJzogdGhpcy5fY29t
cHV0ZU9yZGVyKHJldmlzaW9uKX0pKQorICAgICAgICAgICAgLmZpbHRlcigoY29tbWl0KSA9PiBj
b21taXRbJ29yZGVyJ10gPj0gbWluT3JkZXIgJiYgY29tbWl0WydvcmRlciddIDw9IG1heE9yZGVy
KTsKICAgICB9CiAKICAgICBfYWRkT3duZWRDb21taXRzRm9yQnVpbGQoY29tbWl0cywgY29tbWFu
ZCkKQEAgLTExOSwxMCArMTI2LDE2IEBAIGNsYXNzIE9TQnVpbGRGZXRjaGVyIHsKICAgICAgICAg
fSk7CiAgICAgfQogCi0gICAgX3N1Ym1pdENvbW1pdHMoY29tbWl0cykKKyAgICBhc3luYyBfcmVw
b3J0Q29tbWl0cyhjb21taXRzVG9Qb3N0LCBpbnNlcnQpCiAgICAgewotICAgICAgICBjb25zdCBj
b21taXRzVG9SZXBvcnQgPSB7InNsYXZlTmFtZSI6IHRoaXMuX3NsYXZlQXV0aFsnbmFtZSddLCAi
c2xhdmVQYXNzd29yZCI6IHRoaXMuX3NsYXZlQXV0aFsncGFzc3dvcmQnXSwgJ2NvbW1pdHMnOiBj
b21taXRzfTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3JlbW90ZUFQSS5wb3N0SlNPTldpdGhTdGF0
dXMoJy9hcGkvcmVwb3J0LWNvbW1pdHMvJywgY29tbWl0c1RvUmVwb3J0KTsKKyAgICAgICAgaWYg
KCFjb21taXRzVG9Qb3N0Lmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBm
b3IobGV0IGNvbW1pdHNUb1N1Ym1pdCA9IGNvbW1pdHNUb1Bvc3Quc3BsaWNlKDAsIHRoaXMuX21h
eFN1Ym1pdENvdW50KTsgY29tbWl0c1RvU3VibWl0Lmxlbmd0aDsgY29tbWl0c1RvU3VibWl0ID0g
Y29tbWl0c1RvUG9zdC5zcGxpY2UoMCwgdGhpcy5fbWF4U3VibWl0Q291bnQpKSB7CisgICAgICAg
ICAgICBjb25zdCByZXBvcnQgPSB7InNsYXZlTmFtZSI6IHRoaXMuX3NsYXZlQXV0aFsnbmFtZSdd
LCAic2xhdmVQYXNzd29yZCI6IHRoaXMuX3NsYXZlQXV0aFsncGFzc3dvcmQnXSwgJ2NvbW1pdHMn
OiBjb21taXRzVG9TdWJtaXQsIGluc2VydH07CisgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9
IGF3YWl0IHRoaXMuX3JlbW90ZUFQSS5wb3N0SlNPTldpdGhTdGF0dXMoJy9hcGkvcmVwb3J0LWNv
bW1pdHMvJywgcmVwb3J0KTsKKyAgICAgICAgICAgIGFzc2VydChyZXNwb25zZVsnc3RhdHVzJ10g
PT09ICdPSycpOworICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvdG9vbHMvc3luYy1vcy12ZXJzaW9ucy5qcyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy90b29scy9zeW5jLW9zLXZlcnNpb25zLmpzCmluZGV4IDc3ZjRhMGE3ZDM0Mzgx
OTQzMDc2YjgzZWM0OGQ1YmM5MGI0ODM1ODYuLjRmYmU1ODJiZjAzODhkYTRhNGIzYTc1MzA3ZDJm
MTZiNjIyOTdjNzggMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9z
eW5jLW9zLXZlcnNpb25zLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9z
eW5jLW9zLXZlcnNpb25zLmpzCkBAIC0yOSw3ICsyOSw3IEBAIGZ1bmN0aW9uIHN5bmNMb29wKG9w
dGlvbnMpCiAgICAgY29uc3QgcmVtb3RlQVBJID0gbmV3IFJlbW90ZUFQSShzZXJ2ZXJDb25maWcu
c2VydmVyKTsKIAogICAgIGNvbnN0IGZldGNoZXJzID0gb3NDb25maWdMaXN0Lm1hcCgob3NDb25m
aWcpID0+IG5ldyBPU0J1aWxkRmV0Y2hlcihvc0NvbmZpZywgcmVtb3RlQVBJLCBzZXJ2ZXJDb25m
aWcuc2xhdmUsIG5ldyBTdWJwcm9jZXNzLCBjb25zb2xlKSk7Ci0gICAgT1NCdWlsZEZldGNoZXIu
ZmV0Y2hBbmRSZXBvcnRBbGxJbk9yZGVyKGZldGNoZXJzKS5jYXRjaCgoZXJyb3IpID0+IHsKKyAg
ICBPU0J1aWxkRmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUNvbW1pdHMoZmV0Y2hlcnMpLmNh
dGNoKChlcnJvcikgPT4gewogICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAg
aWYgKHR5cGVvZihlcnJvci5zdGFjaykgPT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgIGZvciAo
bGV0IGxpbmUgb2YgZXJyb3Iuc3RhY2suc3BsaXQoJ1xuJykpCmRpZmYgLS1naXQgYS9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRlc3RzLmpzIGIvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qcwppbmRleCA1
Zjg4NTI0OTIwNjBlZWE2ZjMzMDViYmMwZjU0ZWI2MGMwMTBiMmEzLi44NmExMjYzMzAxMzgwZWYw
NTNiODdiNGMxN2EwNmIzMTM4MTcxMzcwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRlc3RzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMuanMKQEAgLTU4LDYgKzU4LDE4
IEBAIGZ1bmN0aW9uIG9zeENvbW1pdCgpCiAgICAgfSk7CiB9CiAKK2Z1bmN0aW9uIG9zeENvbW1p
dFdpdGhUZXN0YWJpbGl0eSgpCit7CisgICAgcmV0dXJuIG5ldyBDb21taXRMb2coNSwgeworICAg
ICAgICBpZDogNSwKKyAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3gsCisgICAgICAg
IHJldmlzaW9uOiAnMTAuMTEuNCAxNUU2NScsCisgICAgICAgIHRpbWU6IG51bGwsCisgICAgICAg
IG9yZGVyOiAxNTA0MDY1LAorICAgICAgICB0ZXN0YWJpbGl0eTogIlBhbmljIG9uIGJvb3QiCisg
ICAgfSk7Cit9CisKIGZ1bmN0aW9uIG9sZE9TWENvbW1pdCgpCiB7CiAgICAgcmV0dXJuIG5ldyBD
b21taXRMb2coNiwgewpAQCAtNDE3LDYgKzQyOSwxMyBAQCBkZXNjcmliZSgnQ29tbWl0TG9nJywg
ZnVuY3Rpb24gKCkgewogICAgICAgICB9KTsKICAgICB9KTsKIAorICAgIGRlc2NyaWJlKCd0ZXN0
YWJpbGl0eScsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gInRlc3RhYmlsaXR5
IiBtZXNzYWdlJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gb3N4Q29tbWl0
V2l0aFRlc3RhYmlsaXR5KCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0LnRlc3Rh
YmlsaXR5KCksICdQYW5pYyBvbiBib290Jyk7CisgICAgICAgIH0pOworICAgIH0pOworCiAgICAg
Y29uc3QgY29tbWl0c0FQSVJlc3BvbnNlID0gewogICAgICAgICAiY29tbWl0cyI6W3sKICAgICAg
ICAgICAgICJpZCI6ICI4MzExNTEiLApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanMKaW5kZXggMzlmY2NjNTQ3NTlmODc5
ZjFjZTAzODNiMGE5YjJjZTdmYzViOWE0OS4uN2Q1MmVhNWEyNzJkOWJlZWZmNjliODk4NjA3NDI4
MjM2M2FhZTdmYiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVz
dHMvY29tbWl0LXNldC10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5p
dC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzCkBAIC0xNzAsNiArMTcwLDE4IEBAIGZ1bmN0aW9u
IGFub3RoZXJDb21taXRXaXRoR2l0UmV2aXNpb24oKQogICAgIH0pOwogfQogCitmdW5jdGlvbiBj
b21taXRXaXRoVGVzdGFiaWxpdHkoKQoreworICAgIHJldHVybiBDb21taXRMb2cuZW5zdXJlU2lu
Z2xldG9uKDIwMjMsIHsKKyAgICAgICAgaWQ6IDIwMjMsCisgICAgICAgIHJlcG9zaXRvcnk6IE1v
Y2tNb2RlbHMud2Via2l0R2l0LAorICAgICAgICByZXZpc2lvbjogJ2YyNGZjNjc4NzNhMDA2OGZk
NWEzYTlhZGFjNTk1ZjAwMzZjMjEzMTUnLAorICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisg
ICAgICAgIHRpbWU6IDE0NTY5MzI3NzMwMDAsCisgICAgICAgIHRlc3RhYmlsaXR5OiAnRmFpbGVk
IGNvbXBpbGF0aW9uJworICAgIH0pOworfQorCiBkZXNjcmliZSgnQ29tbWl0U2V0JywgKCkgPT4g
ewogICAgIE1vY2tSZW1vdGVBUEkuaW5qZWN0KG51bGwsIEJyb3dzZXJQcml2aWxlZ2VkQVBJKTsK
ICAgICBNb2NrTW9kZWxzLmluamVjdCgpOwpAQCAtMjk0LDYgKzMwNiwxNSBAQCBkZXNjcmliZSgn
Q29tbWl0U2V0JywgKCkgPT4gewogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBmdW5jdGlvbiBj
b21taXRTZXRXaXRoVGVzdGFiaWxpdHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbW1pdFNl
dC5lbnN1cmVTaW5nbGV0b24oMTYsIHsKKyAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFt7IGNv
bW1pdDogY29tbWl0V2l0aFRlc3RhYmlsaXR5KCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisg
ICAgICAgICAgICAgICAgeyBjb21taXQ6IHdlYmtpdENvbW1pdCgpLCByZXF1aXJlc0J1aWxkOiBm
YWxzZSB9XSwKKyAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXQorICAgICAgICB9KTsKKyAgICB9
CisKICAgICBmdW5jdGlvbiBvbmVNZWFzdXJlbWVudENvbW1pdFNldCgpCiAgICAgewogICAgICAg
ICByZXR1cm4gTWVhc3VyZW1lbnRDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDEsIFsKQEAgLTQw
Niw2ICs0MjcsMjUgQEAgZGVzY3JpYmUoJ0NvbW1pdFNldCcsICgpID0+IHsKICAgICAgICAgICAg
ICAgICAgICAgeycxMSc6IHsgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTAnLCBvd25lclJldmlz
aW9uOiBudWxsLCBwYXRjaDogbnVsbH0sIGN1c3RvbVJvb3RzOiBbNDU2LCA0NThdfV0pOwogICAg
ICAgICB9KTsKICAgICB9KTsKKworICAgIGRlc2NyaWJlKCdjb21taXRzV2l0aFRlc3RhYmlsaXR5
JywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBjb21taXRzIHdpdGggdGVzdGFi
aWxpdHknLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb21taXRzID0gY29tbWl0U2V0V2l0
aFRlc3RhYmlsaXR5KCkuY29tbWl0c1dpdGhUZXN0YWJpbGl0eSgpOworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKGNvbW1pdHMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChj
b21taXRzWzBdLCBjb21taXRXaXRoVGVzdGFiaWxpdHkoKSk7CisgICAgICAgIH0pOworCisgICAg
ICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IGxpc3QgaWYgbm8gY29tbWl0IGluIGNvbW1pdCBz
ZXQgY29udGFpbnMgdGVzdGFiaWxpdHknLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb21t
aXRzID0gY29tbWl0U2V0V2l0aFR3b0NvbW1pdHMoKS5jb21taXRzV2l0aFRlc3RhYmlsaXR5KCk7
CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0cy5sZW5ndGgsIDApOworICAgICAgICB9
KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdjb21taXRzJywgKCkgPT4geworICAgICAgICBp
dCgnc2hvdWxkIHJldHVybiBhbGwgY29tbWl0cyBpbiBjb21taXQgc2V0JywgKCkgPT4geworICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdFNldFdpdGhUd29Db21taXRzKCkuY29tbWl0cygp
Lmxlbmd0aCwgMik7CisgICAgICAgIH0pOworICAgIH0pOwogfSk7CiAKIGRlc2NyaWJlKCdJbnRl
cm1lZGlhdGVDb21taXRTZXQnLCAoKSA9PiB7CkBAIC02MjksOSArNjY5LDcgQEAgZGVzY3JpYmUo
J0ludGVybWVkaWF0ZUNvbW1pdFNldCcsICgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQo
IWNvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMud2Via2l0KSk7CiAgICAg
ICAgICAgICB9KTsKICAgICAgICAgfSk7Ci0KICAgICB9KTsKLQogfSk7CiAKIGRlc2NyaWJlKCdD
dXN0b21Db21taXRTZXQnLCAoKSA9PiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357803</attachid>
            <date>2018-12-20 01:59:39 -0800</date>
            <delta_ts>2018-12-20 14:59:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191557-20181220015938.patch</filename>
            <type>text/plain</type>
            <size>75883</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5MTM1CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBkMDZkYzBjYWRhYTkzNWVkMTM4NzlkNWQzYWM4NDFhOGY3YzJhMDI5Li5lMWE2NTg2YWNi
YTc3NWJkZjEyMDY3YjlhNzcyNDY1MTI4ZjE2ZjQ1IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxOC0xMi0xNCAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmQgY29tbWl0cyB0YWJsZSB0byBjb250YWluIHRl
c3RhYmlsaXR5IGluZm9ybWF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkxNTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gc3RvcmUgdGVzdGFiaWxpdHkgbWVz
c2FnZSBpbiBjb21taXRzIHRhYmxlLgorICAgICAgICBSZWZhY3RvcmVkICcvYXBpL3JlcG9ydC1j
b21taXRzJyB0byBzdXBwb3J0IHVwZGF0aW5nIGNvbW1pdCBvbmx5LgorICAgICAgICBVcGRhdGVk
IG9zIHZlcnNpb24gc3luY2luZyBzY3JpcHQgdG8gYmUgYWJsZSB0byB1cGRhdGUgdGVzdGFiaWxp
dHkgaW5mb3JtYXRpb24uCisKKyAgICAgICAgKiBpbml0LWRhdGFiYXNlLnNxbDogQWRkZWQgJ2Nv
bW1pdF90ZXN0YWJpbGl0eScgZmllbGQgdG8gJ2NvbW1pdHMnIHRhYmxlLgorICAgICAgICAqIHB1
YmxpYy9hcGkvcmVwb3J0LWNvbW1pdHMucGhwOiBSZWZhY3RvciB0aGlzIGFwaSB0byBhbGxvdyBv
bmx5IHVwZGF0ZSBleGlzdGluZyBjb21taXRzLgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2Nv
bW1pdC1sb2ctZmV0Y2hlci5waHA6IEV4cG9zZSB0ZXN0YWJpbGl0eSB3YXJuaW5nIGluZm9ybWF0
aW9uIGluIHRoaXMgQVBJLgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2NvbW1pdC11cGRhdGVy
LnBocDogQWRkZWQgJ0NvbW1pdFVwZGF0ZXInIHRvIG1hbmFnZSBjb21taXQgaW5zZXJ0IGFuZCB1
cGRhdGUuCisgICAgICAgICogcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzOiBDb21taXRM
b2cgb2JqZWN0IHNob3VsZCBleHBvc2UgdGVzdGFiaWxpdHkgd2FybmluZyBpbmZvcm1hdGlvbi4K
KyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUudXBkYXRlU2luZ2xldG9uKToKKyAgICAgICAg
KENvbW1pdExvZy5wcm90b3R5cGUudGVzdGFiaWxpdHkpOgorICAgICAgICAqIHB1YmxpYy92My9t
b2RlbHMvY29tbWl0LXNldC5qczogQWRkZWQgJ2NvbW1pdHNXaXRoVGVzdGFiaWxpdHknIGFuZCAn
Y29tbWl0cycgdG8gQ29tbWl0U2V0IGFuZAorICAgICAgICBJbnRlcm1lZGlhdGVDb21taXRTZXQg
aW5zdGFuY2VzLgorICAgICAgICAoQ29tbWl0U2V0LnByb3RvdHlwZS5jb21taXRzV2l0aFRlc3Rh
YmlsaXR5KToKKyAgICAgICAgKENvbW1pdFNldC5wcm90b3R5cGUuY29tbWl0cyk6CisgICAgICAg
IChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90eXBlLmNvbW1pdHNXaXRoVGVzdGFiaWxpdHkp
OgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5jb21taXRzKToKKyAg
ICAgICAgKiBzZXJ2ZXItdGVzdHMvYXBpLXJlcG9ydC1jb21taXRzLXRlc3RzLmpzOiBBZGRlZCB1
bml0IHRlc3RzIGZvciAnL2FwaS9yZXBvcnQtY29tbWl0cycgd2hlbiBgaW5zZXJ0PWZhbHNlYC4K
KyAgICAgICAgKiBzZXJ2ZXItdGVzdHMvdG9vbHMtb3MtYnVpbGQtZmV0Y2hlci10ZXN0cy5qczog
QWRkZWQgYW5kIHVwZGF0ZWQgdW5pdCB0ZXN0cy4KKyAgICAgICAgKiB0b29scy9qcy9vcy1idWls
ZC1mZXRjaGVyLmpzOiBBZGRlZCB0aGUgYWJpbGl0eSB0byB1cGRhdGUgY29tbWl0IHRlc3RhYmls
aXR5IHdhcm5pbmdzLgorICAgICAgICAoYXN5bmMuZmV0Y2hSZXBvcnRBbmRVcGRhdGVDb21taXRz
KToKKyAgICAgICAgKHByb3RvdHlwZS5hc3luYy5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcyk6
CisgICAgICAgIChwcm90b3R5cGUuYXN5bmMuX2ZldGNoQXZhaWxhYmxlQnVpbGRzKToKKyAgICAg
ICAgKHByb3RvdHlwZS5hc3luYy5fY29tbWl0c0ZvckF2YWlsYWJsZUJ1aWxkcyk6CisgICAgICAg
IChwcm90b3R5cGUuX2NvbW1pdHNXaXRoaW5SYW5nZSk6CisgICAgICAgIChwcm90b3R5cGUuYXN5
bmMuX3JlcG9ydENvbW1pdHMpOgorICAgICAgICAoZmV0Y2hBbmRSZXBvcnRBbGxJbk9yZGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKHByb3RvdHlwZS5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcyk6IERl
bGV0ZWQuCisgICAgICAgIChwcm90b3R5cGUuX2ZldGNoQXZhaWxhYmxlQnVpbGRzKTogRGVsZXRl
ZC4KKyAgICAgICAgKHByb3RvdHlwZS5fY29tbWl0c0ZvckF2YWlsYWJsZUJ1aWxkcyk6IERlbGV0
ZWQuCisgICAgICAgIChwcm90b3R5cGUuX3N1Ym1pdENvbW1pdHMpOiBEZWxldGVkLgorICAgICAg
ICAqIHRvb2xzL3N5bmMtb3MtdmVyc2lvbnMuanM6CisgICAgICAgICogdW5pdC10ZXN0cy9jb21t
aXQtbG9nLXRlc3RzLmpzOiBBZGRlZCBhIHVuaXQgdGVzdCBmb3IgJ3Rlc3RhYmlsaXR5Jy4KKyAg
ICAgICAgKiB1bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanM6IEFkZGVkIHVuaXQgdGVzdHMg
Zm9yICdjb21taXRzV2l0aFRlc3RhYmlsaXR5Jy4KKwogMjAxOC0xMS0xNiAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNYW5pZmVzdCBmaWxlIGNhbiBjb250YWlu
IGEgdGVzdCBtZXRyaWMgd2hpY2ggcmVmZXJlbmNlcyBhIG5vbi1leGlzdGVudCB0ZXN0CmRpZmYg
LS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvaW5pdC1kYXRhYmFzZS5zcWwgYi9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvaW5pdC1kYXRhYmFzZS5zcWwKaW5kZXggODE2MWVmZTNlMjgx
ZTM0YTBkYzQ0ZWRiODBjYWI2YzNiYmMzN2JhNi4uYzdiN2Q2MGJjOWMxYjEwMDQ2ODA3NzY5ZTQ1
YTM3MjVmYmEwNDQ3YiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL2luaXQt
ZGF0YWJhc2Uuc3FsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9pbml0LWRhdGFiYXNl
LnNxbApAQCAtMTAxLDYgKzEwMSw3IEBAIENSRUFURSBUQUJMRSBjb21taXRzICgKICAgICBjb21t
aXRfY29tbWl0dGVyIGludGVnZXIgUkVGRVJFTkNFUyBjb21taXR0ZXJzIE9OIERFTEVURSBDQVND
QURFLAogICAgIGNvbW1pdF9tZXNzYWdlIHRleHQsCiAgICAgY29tbWl0X3JlcG9ydGVkIGJvb2xl
YW4gTk9UIE5VTEwgREVGQVVMVCBGQUxTRSwKKyAgICBjb21taXRfdGVzdGFiaWxpdHkgdmFyY2hh
cig2NCkgREVGQVVMVCBOVUxMLAogICAgIENPTlNUUkFJTlQgY29tbWl0X2luX3JlcG9zaXRvcnlf
bXVzdF9iZV91bmlxdWUgVU5JUVVFKGNvbW1pdF9yZXBvc2l0b3J5LCBjb21taXRfcmV2aXNpb24p
KTsKIENSRUFURSBJTkRFWCBjb21taXRfdGltZV9pbmRleCBPTiBjb21taXRzKGNvbW1pdF90aW1l
KTsKIENSRUFURSBJTkRFWCBjb21taXRfb3JkZXJfaW5kZXggT04gY29tbWl0cyhjb21taXRfb3Jk
ZXIpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hcGkvcmVw
b3J0LWNvbW1pdHMucGhwIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hcGkvcmVw
b3J0LWNvbW1pdHMucGhwCmluZGV4IDZjNjUxYTk4YWE0ZmY3N2ZmMjkwYTI4MjNhM2FmYjc4YmM5
MjE0NWIuLmRhNDExYWQ0NmI1MWU5MjU5ZmNlNmRiY2FjNmM2YTFmMTMxMmJiMDIgMTAwNjQ0Ci0t
LSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYXBpL3JlcG9ydC1jb21taXRzLnBo
cAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9yZXBvcnQtY29tbWl0
cy5waHAKQEAgLTEsNiArMSw3IEBACiA8P3BocAogCiByZXF1aXJlKCcuLi9pbmNsdWRlL2pzb24t
aGVhZGVyLnBocCcpOworcmVxdWlyZSgnLi4vaW5jbHVkZS9jb21taXQtdXBkYXRlci5waHAnKTsK
IAogZnVuY3Rpb24gbWFpbigkcG9zdF9kYXRhKQogewpAQCAtMTIsOTMgKzEzLDE1IEBAIGZ1bmN0
aW9uIG1haW4oJHBvc3RfZGF0YSkKIAogICAgIHZlcmlmeV9zbGF2ZSgkZGIsICRyZXBvcnQpOwog
Ci0gICAgJGNvbW1pdHMgPSBhcnJheV9nZXQoJHJlcG9ydCwgJ2NvbW1pdHMnLCBhcnJheSgpKTsK
KyAgICAkY29tbWl0X2luZm9fbGlzdCA9IGFycmF5X2dldCgkcmVwb3J0LCAnY29tbWl0cycsIGFy
cmF5KCkpOworICAgICRzaG91bGRfaW5zZXJ0ID0gYXJyYXlfZ2V0KCRyZXBvcnQsICdpbnNlcnQn
LCB0cnVlKTsKIAotICAgIGZvcmVhY2ggKCRjb21taXRzIGFzICRjb21taXRfaW5mbykgewotICAg
ICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJ3JlcG9zaXRvcnknLCAkY29tbWl0X2luZm8pKQot
ICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdNaXNzaW5nUmVwb3NpdG9yeU5hbWUnLCBhcnJh
eSgnY29tbWl0JyA9PiAkY29tbWl0X2luZm8pKTsKLSAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhp
c3RzKCdyZXZpc2lvbicsICRjb21taXRfaW5mbykpCi0gICAgICAgICAgICBleGl0X3dpdGhfZXJy
b3IoJ01pc3NpbmdSZXZpc2lvbicsIGFycmF5KCdjb21taXQnID0+ICRjb21taXRfaW5mbykpOwot
ICAgICAgICByZXF1aXJlX2Zvcm1hdCgnUmV2aXNpb24nLCAkY29tbWl0X2luZm9bJ3JldmlzaW9u
J10sICcvXltBLVphLXowLTkgXC5dKyQvJyk7Ci0gICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3Rz
KCdhdXRob3InLCAkY29tbWl0X2luZm8pICYmICFpc19hcnJheSgkY29tbWl0X2luZm9bJ2F1dGhv
ciddKSkKLSAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJvcignSW52YWxpZEF1dGhvckZvcm1hdCcs
IGFycmF5KCdjb21taXQnID0+ICRjb21taXRfaW5mbykpOwotICAgIH0KLQotICAgICRkYi0+YmVn
aW5fdHJhbnNhY3Rpb24oKTsKLSAgICBmb3JlYWNoICgkY29tbWl0cyBhcyAkY29tbWl0X2luZm8p
IHsKLSAgICAgICAgJHJlcG9zaXRvcnlfaWQgPSAkZGItPnNlbGVjdF9vcl9pbnNlcnRfcm93KCdy
ZXBvc2l0b3JpZXMnLCAncmVwb3NpdG9yeScsIGFycmF5KCduYW1lJyA9PiAkY29tbWl0X2luZm9b
J3JlcG9zaXRvcnknXSwgJ293bmVyJyA9PiBOVUxMKSk7Ci0gICAgICAgIGlmICghJHJlcG9zaXRv
cnlfaWQpIHsKLSAgICAgICAgICAgICRkYi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKLSAgICAg
ICAgICAgIGV4aXRfd2l0aF9lcnJvcignRmFpbGVkVG9JbnNlcnRSZXBvc2l0b3J5JywgYXJyYXko
J2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7Ci0gICAgICAgIH0KLSAgICAgICAgJG93bmVyX2Nv
bW1pdF9pZCA9IGluc2VydF9jb21taXQoJGRiLCAkY29tbWl0X2luZm8sICRyZXBvc2l0b3J5X2lk
LCBOVUxMKTsKLSAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdvd25lZENvbW1pdHMnLCAk
Y29tbWl0X2luZm8pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZm9yZWFjaCgk
Y29tbWl0X2luZm9bJ293bmVkQ29tbWl0cyddIGFzICRvd25lZF9jb21taXRfcmVwb3NpdG9yeV9u
YW1lID0+ICRvd25lZF9jb21taXRfaW5mbykgewotICAgICAgICAgICAgaWYgKGFycmF5X2tleV9l
eGlzdHMoJ3RpbWUnLCAkb3duZWRfY29tbWl0X2luZm8pKSB7Ci0gICAgICAgICAgICAgICAgJGRi
LT5yb2xsYmFja190cmFuc2FjdGlvbigpOwotICAgICAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJv
cignT3duZWRDb21taXRTaG91bGROb3RDb250YWluVGltZXN0YW1wJywgYXJyYXkoJ2NvbW1pdCcg
PT4gJG93bmVkX2NvbW1pdF9pbmZvKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAkb3du
ZWRfY29tbWl0X3JlcG9zaXRvcnlfaWQgPSAkZGItPnNlbGVjdF9vcl9pbnNlcnRfcm93KCdyZXBv
c2l0b3JpZXMnLCAncmVwb3NpdG9yeScsIGFycmF5KCduYW1lJyA9PiAkb3duZWRfY29tbWl0X3Jl
cG9zaXRvcnlfbmFtZSwgJ293bmVyJyA9PiAkcmVwb3NpdG9yeV9pZCkpOwotICAgICAgICAgICAg
aWYgKCEkb3duZWRfY29tbWl0X3JlcG9zaXRvcnlfaWQpIHsKLSAgICAgICAgICAgICAgICAkZGIt
PnJvbGxiYWNrX3RyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9y
KCdGYWlsZWRUb0luc2VydFJlcG9zaXRvcnknLCBhcnJheSgnY29tbWl0JyA9PiAkb3duZWRfY29t
bWl0X2luZm8pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluc2VydF9jb21taXQoJGRi
LCAkb3duZWRfY29tbWl0X2luZm8sICRvd25lZF9jb21taXRfcmVwb3NpdG9yeV9pZCwgJG93bmVy
X2NvbW1pdF9pZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgJGRiLT5jb21taXRfdHJhbnNhY3Rp
b24oKTsKKyAgICAkY29tbWl0X21vZGlmaWVyID0gbmV3IENvbW1pdFVwZGF0ZXIoJGRiKTsKKyAg
ICAkY29tbWl0X21vZGlmaWVyLT5yZXBvcnRfY29tbWl0cygkY29tbWl0X2luZm9fbGlzdCwgJHNo
b3VsZF9pbnNlcnQpOwogCiAgICAgZXhpdF93aXRoX3N1Y2Nlc3MoKTsKIH0KIAotZnVuY3Rpb24g
aW5zZXJ0X2NvbW1pdCgkZGIsICRjb21taXRfaW5mbywgJHJlcG9zaXRvcnlfaWQsICRvd25lcl9j
b21taXRfaWQpCi17Ci0gICAgJGF1dGhvciA9IGFycmF5X2dldCgkY29tbWl0X2luZm8sICdhdXRo
b3InKTsKLSAgICAkY29tbWl0dGVyX2lkID0gTlVMTDsKLSAgICBpZiAoJGF1dGhvcikgewotICAg
ICAgICAkYWNjb3VudCA9IGFycmF5X2dldCgkYXV0aG9yLCAnYWNjb3VudCcpOwotICAgICAgICAk
Y29tbWl0dGVyX3F1ZXJ5ID0gYXJyYXkoJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5X2lkLCAn
YWNjb3VudCcgPT4gJGFjY291bnQpOwotICAgICAgICAkY29tbWl0dGVyX2RhdGEgPSAkY29tbWl0
dGVyX3F1ZXJ5OwotICAgICAgICAkbmFtZSA9IGFycmF5X2dldCgkYXV0aG9yLCAnbmFtZScpOwot
ICAgICAgICBpZiAoJG5hbWUpCi0gICAgICAgICAgICAkY29tbWl0dGVyX2RhdGFbJ25hbWUnXSA9
ICRuYW1lOwotICAgICAgICAkY29tbWl0dGVyX2lkID0gJGRiLT51cGRhdGVfb3JfaW5zZXJ0X3Jv
dygnY29tbWl0dGVycycsICdjb21taXR0ZXInLCAkY29tbWl0dGVyX3F1ZXJ5LCAkY29tbWl0dGVy
X2RhdGEpOwotICAgICAgICBpZiAoISRjb21taXR0ZXJfaWQpIHsKLSAgICAgICAgICAgICRkYi0+
cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKLSAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJvcignRmFp
bGVkVG9JbnNlcnRDb21taXR0ZXInLCBhcnJheSgnY29tbWl0dGVyJyA9PiAkY29tbWl0dGVyX2Rh
dGEpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgICRwcmV2aW91c19jb21taXRfcmV2aXNpb24g
PSBhcnJheV9nZXQoJGNvbW1pdF9pbmZvLCAncHJldmlvdXNDb21taXQnKTsKLSAgICAkcHJldmlv
dXNfY29tbWl0X2lkID0gTlVMTDsKLSAgICBpZiAoJHByZXZpb3VzX2NvbW1pdF9yZXZpc2lvbikg
ewotICAgICAgICAkcHJldmlvdXNfY29tbWl0ID0gJGRiLT5zZWxlY3RfZmlyc3Rfcm93KCdjb21t
aXRzJywgJ2NvbW1pdCcsIGFycmF5KCdyZXBvc2l0b3J5JyA9PiAkcmVwb3NpdG9yeV9pZCwgJ3Jl
dmlzaW9uJyA9PiAkcHJldmlvdXNfY29tbWl0X3JldmlzaW9uKSk7Ci0gICAgICAgIGlmICghJHBy
ZXZpb3VzX2NvbW1pdCkgewotICAgICAgICAgICAgJGRiLT5yb2xsYmFja190cmFuc2FjdGlvbigp
OwotICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdGYWlsZWRUb0ZpbmRQcmV2aW91c0NvbW1p
dCcsIGFycmF5KCdjb21taXQnID0+ICRjb21taXRfaW5mbykpOwotICAgICAgICB9Ci0gICAgICAg
ICRwcmV2aW91c19jb21taXRfaWQgPSAkcHJldmlvdXNfY29tbWl0Wydjb21taXRfaWQnXTsKLSAg
ICB9Ci0KLSAgICAkZGF0YSA9IGFycmF5KAotICAgICAgICAncmVwb3NpdG9yeScgPT4gJHJlcG9z
aXRvcnlfaWQsCi0gICAgICAgICdyZXZpc2lvbicgPT4gJGNvbW1pdF9pbmZvWydyZXZpc2lvbidd
LAotICAgICAgICAncHJldmlvdXNfY29tbWl0JyA9PiAkcHJldmlvdXNfY29tbWl0X2lkLAotICAg
ICAgICAnb3JkZXInID0+IGFycmF5X2dldCgkY29tbWl0X2luZm8sICdvcmRlcicpLAotICAgICAg
ICAndGltZScgPT4gYXJyYXlfZ2V0KCRjb21taXRfaW5mbywgJ3RpbWUnKSwKLSAgICAgICAgJ2Nv
bW1pdHRlcicgPT4gJGNvbW1pdHRlcl9pZCwKLSAgICAgICAgJ21lc3NhZ2UnID0+IGFycmF5X2dl
dCgkY29tbWl0X2luZm8sICdtZXNzYWdlJyksCi0gICAgICAgICdyZXBvcnRlZCcgPT4gdHJ1ZSwK
LSAgICApOwotICAgICRpbnNlcnRlZF9jb21taXRfaWQgPSAkZGItPnVwZGF0ZV9vcl9pbnNlcnRf
cm93KCdjb21taXRzJywgJ2NvbW1pdCcsIGFycmF5KCdyZXBvc2l0b3J5JyA9PiAkcmVwb3NpdG9y
eV9pZCwgJ3JldmlzaW9uJyA9PiAkZGF0YVsncmV2aXNpb24nXSksICRkYXRhKTsKLQotICAgIGlm
ICgkb3duZXJfY29tbWl0X2lkKQotICAgICAgICAkZGItPnNlbGVjdF9vcl9pbnNlcnRfcm93KCdj
b21taXRfb3duZXJzaGlwcycsICdjb21taXQnLCBhcnJheSgnb3duZXInID0+ICRvd25lcl9jb21t
aXRfaWQsICdvd25lZCcgPT4gJGluc2VydGVkX2NvbW1pdF9pZCksIE5VTEwsICcqJyk7Ci0gICAg
cmV0dXJuICRpbnNlcnRlZF9jb21taXRfaWQ7Ci19Ci0KIG1haW4oZmlsZV9nZXRfY29udGVudHMo
J3BocDovL2lucHV0JykpOwogCiA/PgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy9pbmNsdWRlL2NvbW1pdC1sb2ctZmV0Y2hlci5waHAgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocAppbmRleCA5
Yzc2MjYzY2I2NjE2YjU5NWIxZGRkZmI5OTA5NDcyZWExNTg5ZDA4Li5kNWY2MWE2MDg5OGFiMTU4
NWQ3ODBkYjZmNTcxYjBkNjE3Y2Y0MjUxIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocAorKysgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocApA
QCAtNjIsNiArNjIsNyBAQCBjbGFzcyBDb21taXRMb2dGZXRjaGVyIHsKICAgICAgICAgICAgIGNv
bW1pdF9yZXBvc2l0b3J5IGFzICJyZXBvc2l0b3J5IiwKICAgICAgICAgICAgIGNvbW1pdF9tZXNz
YWdlIGFzICJtZXNzYWdlIiwKICAgICAgICAgICAgIGNvbW1pdF9vcmRlciBhcyAib3JkZXIiLAor
ICAgICAgICAgICAgY29tbWl0X3Rlc3RhYmlsaXR5IGFzICJ0ZXN0YWJpbGl0eSIsCiAgICAgICAg
ICAgICBFWElTVFMoU0VMRUNUICogRlJPTSBjb21taXRfb3duZXJzaGlwcyBXSEVSRSBjb21taXRf
b3duZXIgPSBjb21taXRfaWQpIGFzICJvd25zQ29tbWl0cyIKICAgICAgICAgICAgIEZST00gY29t
bWl0cyBMRUZUIE9VVEVSIEpPSU4gY29tbWl0dGVycyBPTiBjb21taXRfY29tbWl0dGVyID0gY29t
bWl0dGVyX2lkCiAgICAgICAgICAgICBXSEVSRSBjb21taXRfcmVwb3NpdG9yeSA9ICQxIEFORCBj
b21taXRfcmVwb3J0ZWQgPSB0cnVlJzsKQEAgLTIxMSw2ICsyMTIsNyBAQCBjbGFzcyBDb21taXRM
b2dGZXRjaGVyIHsKICAgICAgICAgICAgICdhdXRob3JOYW1lJyA9PiAkY29tbWl0dGVyX3JvdyA/
ICRjb21taXR0ZXJfcm93Wydjb21taXR0ZXJfbmFtZSddIDogbnVsbCwKICAgICAgICAgICAgICdh
dXRob3JFbWFpbCcgPT4gJGNvbW1pdHRlcl9yb3cgPyAkY29tbWl0dGVyX3Jvd1snY29tbWl0dGVy
X2FjY291bnQnXSA6IG51bGwsCiAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJGNvbW1pdF9yb3db
J2NvbW1pdF9tZXNzYWdlJ10sCisgICAgICAgICAgICAndGVzdGFiaWxpdHknID0+ICRjb21taXRf
cm93Wydjb21taXRfdGVzdGFiaWxpdHknXSwKICAgICAgICAgICAgICdvd25zQ29tbWl0cycgPT4g
JG93bnNfY29tbWl0cwogICAgICAgICApOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9jb21taXQtdXBkYXRlci5waHAgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0LXVwZGF0ZXIucGhwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmYzMzQxZWJhMTIxNTJjODBkMGE3NTUyZmRmODg4ZDM0N2RhYzA2NWMKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0
LXVwZGF0ZXIucGhwCkBAIC0wLDAgKzEsMjI4IEBACis8P3BocAorCitjbGFzcyBDb21taXRVcGRh
dGVyIHsKKyAgICBwcml2YXRlICRkYjsKKyAgICBwcml2YXRlICR0b3BfbGV2ZWxfcmVwb3NpdG9y
eV9pZF9ieV9uYW1lOworICAgIHByaXZhdGUgJG93bmVkX3JlcG9zaXRvcnlfYnlfbmFtZV9hbmRf
b3duZXJfaWQ7CisgICAgcHJpdmF0ZSAkY29tbWl0c19ieV9yZXBvc2l0b3J5X2lkOworICAgIHBy
aXZhdGUgJGF1dGhvcnNfYnlfcmVwb3NpdG9yeV9pZDsKKworICAgIGZ1bmN0aW9uIF9fY29uc3Ry
dWN0KCRkYikKKyAgICB7CisgICAgICAgICR0aGlzLT5kYiA9ICRkYjsKKyAgICAgICAgJHRoaXMt
PnRvcF9sZXZlbF9yZXBvc2l0b3J5X2lkX2J5X25hbWUgPSBhcnJheSgpOworICAgICAgICAkdGhp
cy0+b3duZWRfcmVwb3NpdG9yeV9ieV9uYW1lX2FuZF9vd25lcl9pZCA9IGFycmF5KCk7CisgICAg
ICAgICR0aGlzLT5jb21taXRzX2J5X3JlcG9zaXRvcnlfaWQgPSBhcnJheSgpOworICAgICAgICAk
dGhpcy0+YXV0aG9yc19ieV9yZXBvc2l0b3J5X2lkID0gYXJyYXkoKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiByZXBvcnRfY29tbWl0cygmJGNvbW1pdF9pbmZvX2xpc3QsICRzaG91bGRfaW5zZXJ0
KQorICAgIHsKKyAgICAgICAgJHVwZGF0ZV9kYXRhX2xpc3QgPSAmJHRoaXMtPmNvbnN0cnVjdF91
cGRhdGVfZGF0YV9saXN0KCRjb21taXRfaW5mb19saXN0LCAkc2hvdWxkX2luc2VydCk7CisgICAg
ICAgICR0aGlzLT5kYi0+YmVnaW5fdHJhbnNhY3Rpb24oKTsKKworICAgICAgICBmb3JlYWNoICgk
dXBkYXRlX2RhdGFfbGlzdCBhcyAmJHVwZGF0ZV9kYXRhKQorICAgICAgICAgICAgJHRoaXMtPnVw
ZGF0ZV9jb21taXQoJHVwZGF0ZV9kYXRhLCBOVUxMLCBOVUxMLCAkc2hvdWxkX2luc2VydCk7CisK
KyAgICAgICAgJHRoaXMtPmRiLT5jb21taXRfdHJhbnNhY3Rpb24oKTsKKyAgICB9CisKKyAgICBw
cml2YXRlIGZ1bmN0aW9uIHVwZGF0ZV9jb21taXQoJiR1cGRhdGVfZGF0YSwgJG93bmVyX2NvbW1p
dF9pZCwgJG93bmVyX3JlcG9zaXRvcnlfaWQsICRzaG91bGRfaW5zZXJ0KQorICAgIHsKKyAgICAg
ICAgJGNvbW1pdF9kYXRhID0gJiR0aGlzLT5yZXNvbHZlX2ZpZWxkc19mcm9tX2RhdGFiYXNlKCR1
cGRhdGVfZGF0YSwgJG93bmVyX3JlcG9zaXRvcnlfaWQsICRzaG91bGRfaW5zZXJ0KTsKKworICAg
ICAgICAkY29tbWl0X3NlbGVjdF9xdWVyeSA9IGFycmF5KCdyZXBvc2l0b3J5JyA9PiAkY29tbWl0
X2RhdGFbJ3JlcG9zaXRvcnknXSwgJ3JldmlzaW9uJyA9PiAkY29tbWl0X2RhdGFbJ3JldmlzaW9u
J10pOworICAgICAgICBpZiAoJHNob3VsZF9pbnNlcnQpIHsKKyAgICAgICAgICAgICRjb21taXRf
aWQgPSAkdGhpcy0+ZGItPnVwZGF0ZV9vcl9pbnNlcnRfcm93KCdjb21taXRzJywgJ2NvbW1pdCcs
ICRjb21taXRfc2VsZWN0X3F1ZXJ5LCAkY29tbWl0X2RhdGEpOworICAgICAgICAgICAgaWYgKCEk
Y29tbWl0X2lkKQorICAgICAgICAgICAgICAgICR0aGlzLT5leGl0X3dpdGhfZXJyb3IoJ0ZhaWxl
ZFRvSW5zZXJ0Q29tbWl0JywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9kYXRhKSk7CisKKyAg
ICAgICAgICAgIGlmICgkb3duZXJfY29tbWl0X2lkKQorICAgICAgICAgICAgICAgICR0aGlzLT5k
Yi0+c2VsZWN0X29yX2luc2VydF9yb3coJ2NvbW1pdF9vd25lcnNoaXBzJywgJ2NvbW1pdCcsIGFy
cmF5KCdvd25lcicgPT4gJG93bmVyX2NvbW1pdF9pZCwgJ293bmVkJyA9PiAkY29tbWl0X2lkKSwg
TlVMTCwgJyonKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRjb21taXRfaWQgPSAk
dGhpcy0+ZGItPnVwZGF0ZV9yb3coJ2NvbW1pdHMnLCAnY29tbWl0JywgJGNvbW1pdF9zZWxlY3Rf
cXVlcnksICRjb21taXRfZGF0YSk7CisgICAgICAgICAgICBpZiAoISRjb21taXRfaWQpCisgICAg
ICAgICAgICAgICAgJHRoaXMtPmV4aXRfd2l0aF9lcnJvcignRmFpbGVkVG9VcGRhdGVDb21taXQn
LCBhcnJheSgnY29tbWl0JyA9PiAkY29tbWl0X3NlbGVjdF9xdWVyeSwgJ2NvbW1pdFVwZGF0ZScg
PT4gJGNvbW1pdF9kYXRhKSk7CisKKyAgICAgICAgICAgIGlmICgkb3duZXJfY29tbWl0X2lkKQor
ICAgICAgICAgICAgICAgICR0aGlzLT5leGl0X3dpdGhfZXJyb3IoJ093bmVkQ29tbWl0c1VwZGF0
ZU5vdFN1cHBvcnRlZFlldCcsIGFycmF5KCdjb21taXQnID0+ICRjb21taXRfc2VsZWN0X3F1ZXJ5
KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJ293bmVkX2Nv
bW1pdHMnLCAkdXBkYXRlX2RhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGZv
cmVhY2ggKCR1cGRhdGVfZGF0YVsnb3duZWRfY29tbWl0cyddIGFzICYkb3duZWRfY29tbWl0X3Vw
ZGF0ZV9kYXRhKQorICAgICAgICAgICAgJHRoaXMtPnVwZGF0ZV9jb21taXQoJG93bmVkX2NvbW1p
dF91cGRhdGVfZGF0YSwgJGNvbW1pdF9pZCwgJGNvbW1pdF9kYXRhWydyZXBvc2l0b3J5J10sICRz
aG91bGRfaW5zZXJ0KTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uICZyZXNvbHZlX2Zp
ZWxkc19mcm9tX2RhdGFiYXNlKCYkdXBkYXRlX2RhdGEsICRvd25lcl9yZXBvc2l0b3J5X2lkLCAk
c2hvdWxkX2luc2VydCkKKyAgICB7CisgICAgICAgICRjb21taXRfZGF0YSA9ICYkdXBkYXRlX2Rh
dGFbJ2NvbW1pdCddOworCisgICAgICAgICRyZXBvc2l0b3J5X2lkID0gJHRoaXMtPnJlc29sdmVf
cmVwb3NpdG9yeSgkdXBkYXRlX2RhdGFbJ3JlcG9zaXRvcnknXSwgJG93bmVyX3JlcG9zaXRvcnlf
aWQsICRzaG91bGRfaW5zZXJ0KTsKKyAgICAgICAgJGNvbW1pdF9kYXRhWydyZXBvc2l0b3J5J10g
PSAkcmVwb3NpdG9yeV9pZDsKKworICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygncHJldmlv
dXNfY29tbWl0JywgJHVwZGF0ZV9kYXRhKSkKKyAgICAgICAgICAgICRjb21taXRfZGF0YVsncHJl
dmlvdXNfY29tbWl0J10gPSAkdGhpcy0+cmVzb2x2ZV9wcmV2aW91c19jb21taXQoJHJlcG9zaXRv
cnlfaWQsICR1cGRhdGVfZGF0YVsncHJldmlvdXNfY29tbWl0J10pOworCisgICAgICAgIGlmIChh
cnJheV9rZXlfZXhpc3RzKCdhdXRob3InLCAkdXBkYXRlX2RhdGEpKQorICAgICAgICAgICAgJGNv
bW1pdF9kYXRhWydjb21taXR0ZXInXSA9ICR0aGlzLT5yZXNvbHZlX2NvbW1pdHRlcigkcmVwb3Np
dG9yeV9pZCwgJHVwZGF0ZV9kYXRhWydhdXRob3InXSk7CisKKyAgICAgICAgcmV0dXJuICRjb21t
aXRfZGF0YTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uICZjb25zdHJ1Y3RfdXBkYXRl
X2RhdGFfbGlzdCgmJGNvbW1pdF9pbmZvX2xpc3QsICRzaG91bGRfaW5zZXJ0KQorICAgIHsKKyAg
ICAgICAgJHVwZGF0ZV9kYXRhX2xpc3QgPSBhcnJheSgpOworCisgICAgICAgIGZvcmVhY2ggKCRj
b21taXRfaW5mb19saXN0IGFzICYkY29tbWl0X2luZm8pIHsKKyAgICAgICAgICAgIHNlbGY6OnZh
bGlkYXRlX2NvbW1pdHMoJGNvbW1pdF9pbmZvKTsKKyAgICAgICAgICAgICRjb21taXRfZGF0YSA9
ICZzZWxmOjpjb25zdHJ1Y3RfY29tbWl0X2RhdGEoJGNvbW1pdF9pbmZvLCBOVUxMLCAkc2hvdWxk
X2luc2VydCk7CisgICAgICAgICAgICAkaGFzX3VwZGF0ZSA9IGNvdW50KCRjb21taXRfZGF0YSkg
PiAxOworCisgICAgICAgICAgICAkdXBkYXRlX2RhdGEgPSAgYXJyYXkoJ2NvbW1pdCcgPT4gJGNv
bW1pdF9kYXRhLCAncmVwb3NpdG9yeScgPT4gJGNvbW1pdF9pbmZvWydyZXBvc2l0b3J5J10pOwor
ICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ3ByZXZpb3VzQ29tbWl0JywgJGNvbW1p
dF9pbmZvKSkgeworICAgICAgICAgICAgICAgICRoYXNfdXBkYXRlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAkdXBkYXRlX2RhdGFbJ3ByZXZpb3VzX2NvbW1pdCddID0gJGNvbW1pdF9pbmZvWydw
cmV2aW91c0NvbW1pdCddOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXJyYXlf
a2V5X2V4aXN0cygnYXV0aG9yJywgJGNvbW1pdF9pbmZvKSkgeworICAgICAgICAgICAgICAgICRo
YXNfdXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAkdXBkYXRlX2RhdGFbJ2F1dGhvcidd
ID0gJGNvbW1pdF9pbmZvWydhdXRob3InXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGFycmF5X2tleV9leGlzdHMoJ293bmVkQ29tbWl0cycsICRjb21taXRfaW5mbykgJiYgISRz
aG91bGRfaW5zZXJ0KQorICAgICAgICAgICAgICAgICR0aGlzLT5leGl0X3dpdGhfZXJyb3IoJ093
bmVkQ29tbWl0c1VwZGF0ZU5vdFN1cHBvcnRlZFlldCcsIGFycmF5KCdjb21taXQnID0+ICRjb21t
aXRfaW5mbykpOworCisgICAgICAgICAgICBpZiAoISRzaG91bGRfaW5zZXJ0ICYmICEkaGFzX3Vw
ZGF0ZSkKKyAgICAgICAgICAgICAgICAkdGhpcy0+ZXhpdF93aXRoX2Vycm9yKCdOb3RoaW5nVG9V
cGRhdGUnLCBhcnJheSgnY29tbWl0JyA9PiAkY29tbWl0X2RhdGEpKTsKKworICAgICAgICAgICAg
aWYgKCFhcnJheV9rZXlfZXhpc3RzKCdvd25lZENvbW1pdHMnLCAkY29tbWl0X2luZm8pKSB7Cisg
ICAgICAgICAgICAgICAgJHVwZGF0ZV9kYXRhX2xpc3RbXSA9ICR1cGRhdGVfZGF0YTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgJG93bmVk
X2NvbW1pdF91cGRhdGVfZGF0YV9saXN0ID0gYXJyYXkoKTsKKyAgICAgICAgICAgIGZvcmVhY2go
JGNvbW1pdF9pbmZvWydvd25lZENvbW1pdHMnXSBhcyAkb3duZWRfcmVwb3NpdG9yeV9uYW1lID0+
ICRvd25lZF9jb21taXRfaW5mbykgeworICAgICAgICAgICAgICAgICRvd25lZF9jb21taXQgPSAm
c2VsZjo6Y29uc3RydWN0X2NvbW1pdF9kYXRhKCRvd25lZF9jb21taXRfaW5mbywgJG93bmVkX3Jl
cG9zaXRvcnlfbmFtZSwgJHNob3VsZF9pbnNlcnQpOworICAgICAgICAgICAgICAgICRvd25lZF9j
b21taXRfdXBkYXRlX2RhdGEgPSBhcnJheSgnY29tbWl0JyA9PiAkb3duZWRfY29tbWl0LCAncmVw
b3NpdG9yeScgPT4gJG93bmVkX3JlcG9zaXRvcnlfbmFtZSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoYXJyYXlfa2V5X2V4aXN0cygncHJldmlvdXNDb21taXQnLCAkb3duZWRfY29tbWl0X2luZm8p
KQorICAgICAgICAgICAgICAgICAgICAkb3duZWRfY29tbWl0X3VwZGF0ZV9kYXRhWydwcmV2aW91
c19jb21taXQnXSA9ICRvd25lZF9jb21taXRfaW5mb1sncHJldmlvdXNDb21taXQnXTsKKworICAg
ICAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdhdXRob3InLCAkb3duZWRfY29tbWl0
X2luZm8pKQorICAgICAgICAgICAgICAgICAgICAkb3duZWRfY29tbWl0X3VwZGF0ZV9kYXRhWydh
dXRob3InXSA9ICRvd25lZF9jb21taXRfaW5mb1snYXV0aG9yJ107CisgICAgICAgICAgICAgICAg
JG93bmVkX2NvbW1pdF91cGRhdGVfZGF0YV9saXN0W10gPSAkb3duZWRfY29tbWl0X3VwZGF0ZV9k
YXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvdW50KCRvd25lZF9jb21taXRf
dXBkYXRlX2RhdGFfbGlzdCkpCisgICAgICAgICAgICAgICAgJHVwZGF0ZV9kYXRhWydvd25lZF9j
b21taXRzJ10gPSAkb3duZWRfY29tbWl0X3VwZGF0ZV9kYXRhX2xpc3Q7CisKKyAgICAgICAgICAg
ICR1cGRhdGVfZGF0YV9saXN0W10gPSAkdXBkYXRlX2RhdGE7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gJHVwZGF0ZV9kYXRhX2xpc3Q7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMg
ZnVuY3Rpb24gJmNvbnN0cnVjdF9jb21taXRfZGF0YSgmJGNvbW1pdF9pbmZvLCAkb3duZWRfcmVw
b3NpdG9yeV9uYW1lLCAkc2hvdWxkX2luc2VydCkKKyAgICB7CisgICAgICAgICRjb21taXRfZGF0
YSA9IGFycmF5KCk7CisgICAgICAgICRjb21taXRfZGF0YVsncmV2aXNpb24nXSA9ICRjb21taXRf
aW5mb1sncmV2aXNpb24nXTsKKworICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnbWVzc2Fn
ZScsICRjb21taXRfaW5mbykpCisgICAgICAgICAgICAkY29tbWl0X2RhdGFbJ21lc3NhZ2UnXSA9
ICRjb21taXRfaW5mb1snbWVzc2FnZSddOworCisgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3Rz
KCdvcmRlcicsICRjb21taXRfaW5mbykpCisgICAgICAgICAgICAkY29tbWl0X2RhdGFbJ29yZGVy
J10gPSAkY29tbWl0X2luZm9bJ29yZGVyJ107CisKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlz
dHMoJ3Rlc3RhYmlsaXR5JywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgICRjb21taXRfZGF0
YVsndGVzdGFiaWxpdHknXSA9ICRjb21taXRfaW5mb1sndGVzdGFiaWxpdHknXTsKKworICAgICAg
ICBpZiAoYXJyYXlfa2V5X2V4aXN0cygndGltZScsICRjb21taXRfaW5mbykpIHsKKyAgICAgICAg
ICAgIGlmICgkb3duZWRfcmVwb3NpdG9yeV9uYW1lKQorICAgICAgICAgICAgICAgIGV4aXRfd2l0
aF9lcnJvcignT3duZWRDb21taXRTaG91bGROb3RDb250YWluVGltZXN0YW1wJywgYXJyYXkoJ2Nv
bW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7CisgICAgICAgICAgICAkY29tbWl0X2RhdGFbJ3RpbWUn
XSA9ICRjb21taXRfaW5mb1sndGltZSddOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCRzaG91
bGRfaW5zZXJ0KQorICAgICAgICAgICAgJGNvbW1pdF9kYXRhWydyZXBvcnRlZCddID0gdHJ1ZTsK
KworICAgICAgICByZXR1cm4gJGNvbW1pdF9kYXRhOworICAgIH0KKworICAgIHByaXZhdGUgc3Rh
dGljIGZ1bmN0aW9uIHZhbGlkYXRlX2NvbW1pdHMoJiRjb21taXRfaW5mbykKKyAgICB7CisgICAg
ICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygncmVwb3NpdG9yeScsICRjb21taXRfaW5mbykpCisg
ICAgICAgICAgICBleGl0X3dpdGhfZXJyb3IoJ01pc3NpbmdSZXBvc2l0b3J5TmFtZScsIGFycmF5
KCdjb21taXQnID0+ICRjb21taXRfaW5mbykpOworICAgICAgICBpZiAoIWFycmF5X2tleV9leGlz
dHMoJ3JldmlzaW9uJywgJGNvbW1pdF9pbmZvKSkKKyAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJv
cignTWlzc2luZ1JldmlzaW9uJywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7Cisg
ICAgICAgIHJlcXVpcmVfZm9ybWF0KCdSZXZpc2lvbicsICRjb21taXRfaW5mb1sncmV2aXNpb24n
XSwgJy9eW0EtWmEtejAtOSBcLl0rJC8nKTsKKyAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMo
J2F1dGhvcicsICRjb21taXRfaW5mbykgJiYgIWlzX2FycmF5KCRjb21taXRfaW5mb1snYXV0aG9y
J10pKQorICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdJbnZhbGlkQXV0aG9yRm9ybWF0Jywg
YXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7CisgICAgICAgIGlmIChhcnJheV9rZXlf
ZXhpc3RzKCdwcmV2aW91c0NvbW1pdCcsICRjb21taXRfaW5mbykpCisgICAgICAgICAgICByZXF1
aXJlX2Zvcm1hdCgnUmV2aXNpb24nLCAkY29tbWl0X2luZm9bJ3ByZXZpb3VzQ29tbWl0J10sICcv
XltBLVphLXowLTkgXC5dKyQvJyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiByZXNv
bHZlX3JlcG9zaXRvcnkoJHJlcG9zaXRvcnlfbmFtZSwgJG93bmVyX3JlcG9zaXRvcnlfaWQsICRz
aG91bGRfaW5zZXJ0KQorICAgIHsKKyAgICAgICAgaWYgKCRvd25lcl9yZXBvc2l0b3J5X2lkKQor
ICAgICAgICAgICAgJHJlcG9zaXRvcnlfaWRfYnlfbmFtZSA9ICZhcnJheV9lbnN1cmVfaXRlbV9o
YXNfYXJyYXkoJHRoaXMtPm93bmVkX3JlcG9zaXRvcnlfYnlfbmFtZV9hbmRfb3duZXJfaWQsICRv
d25lcl9yZXBvc2l0b3J5X2lkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgJHJlcG9zaXRv
cnlfaWRfYnlfbmFtZSA9ICYkdGhpcy0+dG9wX2xldmVsX3JlcG9zaXRvcnlfaWRfYnlfbmFtZTsK
KworICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkcmVwb3NpdG9yeV9uYW1lLCAkcmVwb3Np
dG9yeV9pZF9ieV9uYW1lKSkKKyAgICAgICAgICAgIHJldHVybiAkcmVwb3NpdG9yeV9pZF9ieV9u
YW1lWyRyZXBvc2l0b3J5X25hbWVdOworCisgICAgICAgIGlmICgkc2hvdWxkX2luc2VydCkgewor
ICAgICAgICAgICAgJHJlcG9zaXRvcnlfaWQgPSAkdGhpcy0+ZGItPnNlbGVjdF9vcl9pbnNlcnRf
cm93KCdyZXBvc2l0b3JpZXMnLCAncmVwb3NpdG9yeScsIGFycmF5KCduYW1lJyA9PiAkcmVwb3Np
dG9yeV9uYW1lLCAnb3duZXInID0+ICRvd25lcl9yZXBvc2l0b3J5X2lkKSk7CisgICAgICAgICAg
ICBpZiAoISRyZXBvc2l0b3J5X2lkKQorICAgICAgICAgICAgICAgICR0aGlzLT5leGl0X3dpdGhf
ZXJyb3IoJ0ZhaWxlZFRvSW5zZXJ0UmVwb3NpdG9yeScsIGFycmF5KCdyZXBvc2l0b3J5JyA9PiAk
cmVwb3NpdG9yeV9uYW1lLCAnb3duZXInID0+ICRvd25lcl9yZXBvc2l0b3J5X2lkKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkcmVwb3NpdG9yeSA9ICR0aGlzLT5kYi0+c2VsZWN0
X2ZpcnN0X3JvdygncmVwb3NpdG9yaWVzJywgJ3JlcG9zaXRvcnknLCBhcnJheSgnbmFtZScgPT4g
JHJlcG9zaXRvcnlfbmFtZSwgJ293bmVyJyA9PiAkb3duZXJfcmVwb3NpdG9yeV9pZCkpOworICAg
ICAgICAgICAgaWYgKCEkcmVwb3NpdG9yeSkKKyAgICAgICAgICAgICAgICAkdGhpcy0+ZXhpdF93
aXRoX2Vycm9yKCdJbnZhbGlkUmVwb3NpdG9yeScsIGFycmF5KCdyZXBvc2l0b3J5JyA9PiAkcmVw
b3NpdG9yeV9uYW1lKSk7CisgICAgICAgICAgICAkcmVwb3NpdG9yeV9pZCA9ICRyZXBvc2l0b3J5
WydyZXBvc2l0b3J5X2lkJ107CisgICAgICAgIH0KKworICAgICAgICAkcmVwb3NpdG9yeV9pZF9i
eV9uYW1lWyRyZXBvc2l0b3J5X25hbWVdID0gJHJlcG9zaXRvcnlfaWQ7CisgICAgICAgIHJldHVy
biAkcmVwb3NpdG9yeV9pZDsKKyAgICB9CisKKyAgICBwcml2YXRlIGZ1bmN0aW9uIHJlc29sdmVf
cHJldmlvdXNfY29tbWl0KCRyZXBvc2l0b3J5X2lkLCAkcmV2aXNpb24pCisgICAgeworICAgICAg
ICAkY29tbWl0X2lkX2J5X3JldmlzaW9uID0gJmFycmF5X2Vuc3VyZV9pdGVtX2hhc19hcnJheSgk
dGhpcy0+Y29tbWl0c19ieV9yZXBvc2l0b3J5X2lkLCAkcmV2aXNpb24pOworICAgICAgICBpZiAo
YXJyYXlfa2V5X2V4aXN0cygkcmV2aXNpb24sICRjb21taXRfaWRfYnlfcmV2aXNpb24pKQorICAg
ICAgICAgICAgcmV0dXJuICRjb21taXRfaWRfYnlfcmV2aXNpb25bJHJldmlzaW9uXTsKKworICAg
ICAgICAkcHJldmlvdXNfY29tbWl0ID0gJHRoaXMtPmRiLT5zZWxlY3RfZmlyc3Rfcm93KCdjb21t
aXRzJywgJ2NvbW1pdCcsIGFycmF5KCdyZXBvc2l0b3J5JyA9PiAkcmVwb3NpdG9yeV9pZCwgJ3Jl
dmlzaW9uJyA9PiAkcmV2aXNpb24pKTsKKyAgICAgICAgaWYgKCEkcHJldmlvdXNfY29tbWl0KQor
ICAgICAgICAgICAgJHRoaXMtPmV4aXRfd2l0aF9lcnJvcignRmFpbGVkVG9GaW5kUHJldmlvdXND
b21taXQnLCBhcnJheSgncmV2aXNpb24nID0+ICRyZXZpc2lvbikpOworCisgICAgICAgICRjb21t
aXRfaWRfYnlfcmV2aXNpb25bJHJldmlzaW9uXSA9ICRwcmV2aW91c19jb21taXRbJ2NvbW1pdF9p
ZCddOworICAgICAgICByZXR1cm4gJHByZXZpb3VzX2NvbW1pdFsnY29tbWl0X2lkJ107CisgICAg
fQorCisgICAgcHJpdmF0ZSBmdW5jdGlvbiByZXNvbHZlX2NvbW1pdHRlcigkcmVwb3NpdG9yeV9p
ZCwgJGF1dGhvcikKKyAgICB7CisgICAgICAgICRjb21taXR0ZXJfaWRfYnlfYWNjb3VudCA9ICZh
cnJheV9lbnN1cmVfaXRlbV9oYXNfYXJyYXkoJHRoaXMtPmF1dGhvcnNfYnlfcmVwb3NpdG9yeV9p
ZCwgJHJlcG9zaXRvcnlfaWQpOworICAgICAgICAkYWNjb3VudCA9IGFycmF5X2dldCgkYXV0aG9y
LCAnYWNjb3VudCcpOworICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkYWNjb3VudCwgJGNv
bW1pdHRlcl9pZF9ieV9hY2NvdW50KSkKKyAgICAgICAgICAgIHJldHVybiAkY29tbWl0dGVyX2lk
X2J5X2FjY291bnRbJGFjY291bnRdOworCisgICAgICAgICRjb21taXR0ZXJfZGF0YSA9IGFycmF5
KCdyZXBvc2l0b3J5JyA9PiAkcmVwb3NpdG9yeV9pZCwgJ2FjY291bnQnID0+ICRhY2NvdW50KTsK
KyAgICAgICAgJG5hbWUgPSBhcnJheV9nZXQoJGF1dGhvciwgJ25hbWUnKTsKKyAgICAgICAgaWYg
KCRuYW1lKQorICAgICAgICAgICAgJGNvbW1pdHRlcl9kYXRhWyduYW1lJ10gPSAkbmFtZTsKKyAg
ICAgICAgJGNvbW1pdHRlcl9pZCA9ICR0aGlzLT5kYi0+dXBkYXRlX29yX2luc2VydF9yb3coJ2Nv
bW1pdHRlcnMnLCAnY29tbWl0dGVyJywgYXJyYXkoJ3JlcG9zaXRvcnknID0+ICRyZXBvc2l0b3J5
X2lkLCAnYWNjb3VudCcgPT4gJGFjY291bnQpLCAkY29tbWl0dGVyX2RhdGEpOworCisgICAgICAg
IGlmICghJGNvbW1pdHRlcl9pZCkKKyAgICAgICAgICAgICR0aGlzLT5leGl0X3dpdGhfZXJyb3Io
J0ZhaWxlZFRvSW5zZXJ0Q29tbWl0dGVyJywgYXJyYXkoJ2NvbW1pdHRlcicgPT4gJGNvbW1pdHRl
cl9kYXRhKSk7CisgICAgICAgICRjb21taXR0ZXJfaWRfYnlfYWNjb3VudFskYWNjb3VudF0gPSAk
Y29tbWl0dGVyX2lkOworICAgICAgICByZXR1cm4gJGNvbW1pdHRlcl9pZDsKKyAgICB9CisKKyAg
ICBwcml2YXRlIGZ1bmN0aW9uIGV4aXRfd2l0aF9lcnJvcigkbWVzc2FnZSwgJGRldGFpbHMpCisg
ICAgeworICAgICAgICAkdGhpcy0+ZGItPnJvbGxiYWNrX3RyYW5zYWN0aW9uKCk7CisgICAgICAg
IGV4aXRfd2l0aF9lcnJvcigkbWVzc2FnZSwgJGRldGFpbHMpOworICAgIH0KK30KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qcwppbmRleCAxMzBjYjkwZjE0OThhZWJlMzA5
OTA3ZjQzYzU1MzVlNDcwM2JlYzM4Li5kOWJkNDM4ZDE1MWIzZWNmMmRiYmRhMWEyNDBkODFhNjY1
YTYyMWU4IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21v
ZGVscy9jb21taXQtbG9nLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvbW9kZWxzL2NvbW1pdC1sb2cuanMKQEAgLTI5LDExICsyOSwxNCBAQCBjbGFzcyBDb21taXRM
b2cgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgICAgICAgICAgdGhpcy5fcmF3RGF0YS5v
d25zQ29tbWl0cyA9IHJhd0RhdGEub3duc0NvbW1pdHM7CiAgICAgICAgIGlmIChyYXdEYXRhLm9y
ZGVyKQogICAgICAgICAgICAgdGhpcy5fcmF3RGF0YS5vcmRlciA9IHJhd0RhdGEub3JkZXI7Cisg
ICAgICAgIGlmIChyYXdEYXRhLnRlc3RhYmlsaXR5KQorICAgICAgICAgICAgdGhpcy5fcmF3RGF0
YS50ZXN0YWJpbGl0eSA9IHJhd0RhdGEudGVzdGFiaWxpdHk7CiAgICAgfQogCiAgICAgcmVwb3Np
dG9yeSgpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnk7IH0KICAgICB0aW1lKCkgeyByZXR1cm4g
bmV3IERhdGUodGhpcy5fcmF3RGF0YVsndGltZSddKTsgfQogICAgIGhhc0NvbW1pdFRpbWUoKSB7
IHJldHVybiB0aGlzLl9yYXdEYXRhWyd0aW1lJ10gPiAwICYmIHRoaXMuX3Jhd0RhdGFbJ3RpbWUn
XSAhPSBudWxsOyB9CisgICAgdGVzdGFiaWxpdHkoKSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWyd0
ZXN0YWJpbGl0eSddOyB9CiAgICAgYXV0aG9yKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0YVsnYXV0
aG9yTmFtZSddOyB9CiAgICAgcmV2aXNpb24oKSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWydyZXZp
c2lvbiddOyB9CiAgICAgbWVzc2FnZSgpIHsgcmV0dXJuIHRoaXMuX3Jhd0RhdGFbJ21lc3NhZ2Un
XTsgfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2Rl
bHMvY29tbWl0LXNldC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9k
ZWxzL2NvbW1pdC1zZXQuanMKaW5kZXggOTRhY2M1MzMyODk4Y2I0OTAwYWZlNzhiN2Y2Y2I2OTc5
ZmMzMzUxNi4uNDQ1YjI3MDE3ZjI0OGQ5ZTVhYzRjMTNiODc1NWEwYWFkNTcyMmNhNCAxMDA2NDQK
LS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNl
dC5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21t
aXQtc2V0LmpzCkBAIC03MSw2ICs3MSw4IEBAIGNsYXNzIENvbW1pdFNldCBleHRlbmRzIERhdGFN
b2RlbE9iamVjdCB7CiAgICAgb3duZXJDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsg
cmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlUb0NvbW1pdE93bmVyTWFwLmdldChyZXBvc2l0b3J5KTsg
fQogICAgIHRvcExldmVsUmVwb3NpdG9yaWVzKCkgeyByZXR1cm4gUmVwb3NpdG9yeS5zb3J0QnlO
YW1lUHJlZmVycmluZ09uZXNXaXRoVVJMKHRoaXMuX3JlcG9zaXRvcmllcy5maWx0ZXIoKHJlcG9z
aXRvcnkpID0+ICF0aGlzLm93bmVyUmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKSk7
IH0KICAgICBvd25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7
IHJldHVybiB0aGlzLl9vd25lclJlcG9zaXRvcnlUb093bmVkUmVwb3NpdG9yaWVzTWFwLmdldChy
ZXBvc2l0b3J5KTsgfQorICAgIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHkoKSB7IHJldHVybiB0aGlz
LmNvbW1pdHMoKS5maWx0ZXIoKGNvbW1pdCkgPT4gISFjb21taXQudGVzdGFiaWxpdHkoKSk7IH0K
KyAgICBjb21taXRzKCkgeyByZXR1cm4gIEFycmF5LmZyb20odGhpcy5fcmVwb3NpdG9yeVRvQ29t
bWl0TWFwLnZhbHVlcygpKTsgfQogCiAgICAgcmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9zaXRv
cnkpCiAgICAgewpAQCAtMzg3LDYgKzM4OSw5IEBAIGNsYXNzIEludGVybWVkaWF0ZUNvbW1pdFNl
dCB7CiAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChmZXRjaGluZ1Byb21pc2VzKTsKICAgICB9
CiAKKyAgICBjb21taXRzV2l0aFRlc3RhYmlsaXR5V2FybmluZ3MoKSB7IHJldHVybiB0aGlzLmNv
bW1pdHMoKS5maWx0ZXIoKGNvbW1pdCkgPT4gISFjb21taXQudGVzdGFiaWxpdHlXYXJuaW5nKCkp
OyB9CisgICAgY29tbWl0cygpIHsgcmV0dXJuICBBcnJheS5mcm9tKHRoaXMuX2NvbW1pdEJ5UmVw
b3NpdG9yeS52YWx1ZXMoKSk7IH0KKwogICAgIF9mZXRjaENvbW1pdExvZ0FuZE93bmVkQ29tbWl0
cyhyZXBvc2l0b3J5LCByZXZpc2lvbikKICAgICB7CiAgICAgICAgIHJldHVybiBDb21taXRMb2cu
ZmV0Y2hGb3JTaW5nbGVSZXZpc2lvbihyZXBvc2l0b3J5LCByZXZpc2lvbikudGhlbigoY29tbWl0
cykgPT4gewpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0
cy9hcGktcmVwb3J0LWNvbW1pdHMtdGVzdHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
c2VydmVyLXRlc3RzL2FwaS1yZXBvcnQtY29tbWl0cy10ZXN0cy5qcwppbmRleCBmMjI0ZGY3OWI3
Y2IwMjUwMjgwNTFjYTdiNDZjMzQ1OWNjNGE5ZWYwLi5hZDc0NGUzZDA1MzkwZTZlN2NmYzE3NWVi
ODEzMzUyNWRlMTcxMWZhIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2Vy
dmVyLXRlc3RzL2FwaS1yZXBvcnQtY29tbWl0cy10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL2FwaS1yZXBvcnQtY29tbWl0cy10ZXN0cy5qcwpAQCAt
Niw3ICs2LDcgQEAgY29uc3QgVGVzdFNlcnZlciA9IHJlcXVpcmUoJy4vcmVzb3VyY2VzL3Rlc3Qt
c2VydmVyLmpzJyk7CiBjb25zdCBhZGRTbGF2ZUZvclJlcG9ydCA9IHJlcXVpcmUoJy4vcmVzb3Vy
Y2VzL2NvbW1vbi1vcGVyYXRpb25zLmpzJykuYWRkU2xhdmVGb3JSZXBvcnQ7CiBjb25zdCBwcmVw
YXJlU2VydmVyVGVzdCA9IHJlcXVpcmUoJy4vcmVzb3VyY2VzL2NvbW1vbi1vcGVyYXRpb25zLmpz
JykucHJlcGFyZVNlcnZlclRlc3Q7CiAKLWRlc2NyaWJlKCIvYXBpL3JlcG9ydC1jb21taXRzLyIs
IGZ1bmN0aW9uICgpIHsKK2Rlc2NyaWJlKCIvYXBpL3JlcG9ydC1jb21taXRzLyB3aXRoIGluc2Vy
dD10cnVlIiwgZnVuY3Rpb24gKCkgewogICAgIHByZXBhcmVTZXJ2ZXJUZXN0KHRoaXMpOwogCiAg
ICAgY29uc3QgZW1wdHlSZXBvcnQgPSB7CkBAIC01OTEsMyArNTkxLDE2NCBAQCBkZXNjcmliZSgi
L2FwaS9yZXBvcnQtY29tbWl0cy8iLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgIH0pOwogICAgIH0p
OwogfSk7CisKK2Rlc2NyaWJlKCIvYXBpL3JlcG9ydC1jb21taXRzLyB3aXRoIGluc2VydD1mYWxz
ZSIsIGZ1bmN0aW9uICgpIHsKKyAgICBwcmVwYXJlU2VydmVyVGVzdCh0aGlzKTsKKworICAgIGNv
bnN0IHN1YnZlcnNpb25Db21taXRzID0geworICAgICAgICAic2xhdmVOYW1lIjogInNvbWVTbGF2
ZSIsCisgICAgICAgICJzbGF2ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJj
b21taXRzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5Ijog
IldlYktpdCIsCisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0OCIsCisgICAgICAg
ICAgICAgICAgInRpbWUiOiAiMjAxNy0wMS0yMFQwMjo1MjozNC41NzdaIiwKKyAgICAgICAgICAg
ICAgICAiYXV0aG9yIjogeyJuYW1lIjogIlphbGFuIEJ1anRhcyIsICJhY2NvdW50IjogInphbGFu
QGFwcGxlLmNvbSJ9LAorICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImEgbWVzc2FnZSIsCisg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5
IjogIldlYktpdCIsCisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0OSIsCisgICAg
ICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0wMS0yMFQwMzoyMzo1MC42NDVaIiwKKyAgICAgICAg
ICAgICAgICAiYXV0aG9yIjogeyJuYW1lIjogIkNocmlzIER1bWV6IiwgImFjY291bnQiOiAiY2R1
bWV6QGFwcGxlLmNvbSJ9LAorICAgICAgICAgICAgICAgICJtZXNzYWdlIjogInNvbWUgbWVzc2Fn
ZSIsCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJpbnNlcnQiOiB0cnVlLAor
ICAgIH07CisKKyAgICBjb25zdCBjb21taXRzVXBkYXRlID0geworICAgICAgICAic2xhdmVOYW1l
IjogInNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIs
CisgICAgICAgICJjb21taXRzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJy
ZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAgICAgICAgICAgICAgInJldmlzaW9uIjogIjIxMDk0
OCIsCisgICAgICAgICAgICAgICAgInRlc3RhYmlsaXR5IjogIkJyZWFrcyBidWlsZHMiLAorICAg
ICAgICAgICAgICAgICJtZXNzYWdlIjogImFub3RoZXIgbWVzc2FnZSIsCisgICAgICAgICAgICAg
ICAgIm9yZGVyIjogMjEwOTQ4LAorICAgICAgICAgICAgICAgICJ0aW1lIjogIjIwMTctMDEtMjBU
MDM6NTI6MzQuNTc3WiIsCisgICAgICAgICAgICAgICAgImF1dGhvciI6IHsibmFtZSI6ICJDaHJp
cyBEdW1leiIsICJhY2NvdW50IjogImNkdW1lekBhcHBsZS5jb20ifSwKKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgInJlcG9zaXRvcnkiOiAiV2ViS2l0IiwK
KyAgICAgICAgICAgICAgICAicmV2aXNpb24iOiAiMjEwOTQ5IiwKKyAgICAgICAgICAgICAgICAi
cHJldmlvdXNDb21taXQiOiAiMjEwOTQ4IiwKKyAgICAgICAgICAgICAgICAidGVzdGFiaWxpdHki
OiAiQ3Jhc2hlcyBXZWJLaXQiLAorICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImFub3RoZXIg
bWVzc2FnZSIsCisgICAgICAgICAgICAgICAgIm9yZGVyIjogMjEwOTQ5LAorICAgICAgICAgICAg
ICAgICJ0aW1lIjogIjIwMTctMDEtMjBUMDQ6MjM6NTAuNjQ1WiIsCisgICAgICAgICAgICAgICAg
ImF1dGhvciI6IHsibmFtZSI6ICJaYWxhbiBCdWp0YXMiLCAiYWNjb3VudCI6ICJ6YWxhbkBhcHBs
ZS5jb20ifSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgImluc2VydCI6IGZh
bHNlLAorICAgIH07CisKKworICAgIGNvbnN0IGNvbW1pdHNVcGRhdGVXaXRoTWlzc2luZ1Jldmlz
aW9uID0geworICAgICAgICAic2xhdmVOYW1lIjogInNvbWVTbGF2ZSIsCisgICAgICAgICJzbGF2
ZVBhc3N3b3JkIjogInNvbWVQYXNzd29yZCIsCisgICAgICAgICJjb21taXRzIjogWworICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICJyZXBvc2l0b3J5IjogIldlYktpdCIsCisgICAgICAg
ICAgICAgICAgInRlc3RhYmlsaXR5IjogIkJyZWFrcyBidWlsZHMiCisgICAgICAgICAgICB9Cisg
ICAgICAgIF0sCisgICAgICAgICJpbnNlcnQiOiBmYWxzZSwKKyAgICB9OworCisgICAgY29uc3Qg
Y29tbWl0c1VwZGF0ZVdpdGhNaXNzaW5nUmVwb3NpdG9yeSA9IHsKKyAgICAgICAgInNsYXZlTmFt
ZSI6ICJzb21lU2xhdmUiLAorICAgICAgICAic2xhdmVQYXNzd29yZCI6ICJzb21lUGFzc3dvcmQi
LAorICAgICAgICAiY29tbWl0cyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAi
cmV2aXNpb24iOiAiMjEwOTQ4IiwKKyAgICAgICAgICAgICAgICAidGVzdGFiaWxpdHkiOiAiQnJl
YWtzIGJ1aWxkcyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgImluc2VydCI6
IGZhbHNlLAorICAgIH07CisKKyAgICBjb25zdCBjb21taXRzVXBkYXRlV2l0aG91dEFueVVwZGF0
ZSA9IHsKKyAgICAgICAgInNsYXZlTmFtZSI6ICJzb21lU2xhdmUiLAorICAgICAgICAic2xhdmVQ
YXNzd29yZCI6ICJzb21lUGFzc3dvcmQiLAorICAgICAgICAiY29tbWl0cyI6IFsKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAicmVwb3NpdG9yeSI6ICJXZWJLaXQiLAorICAgICAgICAg
ICAgICAgICJyZXZpc2lvbiI6ICIyMTA5NDgiCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisg
ICAgICAgICJpbnNlcnQiOiBmYWxzZSwKKyAgICB9OworCisgICAgY29uc3QgY29tbWl0c1VwZGF0
ZVdpdGhPd25lZENvbW1pdHNVcGRhdGUgPSB7CisgICAgICAgICJzbGF2ZU5hbWUiOiAic29tZVNs
YXZlIiwKKyAgICAgICAgInNsYXZlUGFzc3dvcmQiOiAic29tZVBhc3N3b3JkIiwKKyAgICAgICAg
ImNvbW1pdHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgInJlcG9zaXRvcnki
OiAiV2ViS2l0IiwKKyAgICAgICAgICAgICAgICAicmV2aXNpb24iOiAiMjEwOTQ4IiwKKyAgICAg
ICAgICAgICAgICAib3duZWRDb21taXRzIjogW10sCisgICAgICAgICAgICB9CisgICAgICAgIF0s
CisgICAgICAgICJpbnNlcnQiOiBmYWxzZSwKKyAgICB9OworCisgICAgYXN5bmMgZnVuY3Rpb24g
c2V0VXBUZXN0c1dpdGhFeHBlY3RlZFN0YXR1cyhjb21taXRzVXBkYXRlLCBleHBlY3RlZFN0YXR1
cykKKyAgICB7CisgICAgICAgIGF3YWl0IGFkZFNsYXZlRm9yUmVwb3J0KHN1YnZlcnNpb25Db21t
aXRzKTsKKyAgICAgICAgYXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5wb3N0SlNPTignL2Fw
aS9yZXBvcnQtY29tbWl0cy8nLCBzdWJ2ZXJzaW9uQ29tbWl0cyk7CisgICAgICAgIGxldCByZXN1
bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9X
ZWJLaXQvJyk7CisgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsK
KyAgICAgICAgbGV0IGNvbW1pdHMgPSByZXN1bHRbJ2NvbW1pdHMnXTsKKyAgICAgICAgYXNzZXJ0
LmVxdWFsKGNvbW1pdHMubGVuZ3RoLCAyKTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNb
MF0udGVzdGFiaWxpdHksIG51bGwpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1sxXS50
ZXN0YWJpbGl0eSwgbnVsbCk7CisKKyAgICAgICAgcmVzdWx0ID0gYXdhaXQgVGVzdFNlcnZlci5y
ZW1vdGVBUEkoKS5wb3N0SlNPTignL2FwaS9yZXBvcnQtY29tbWl0cy8nLCBjb21taXRzVXBkYXRl
KTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVzJ10sIGV4cGVjdGVkU3RhdHVz
KTsKKyAgICAgICAgcmVzdWx0ID0gYXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09O
KCcvYXBpL2NvbW1pdHMvV2ViS2l0LycpOworICAgICAgICByZXR1cm4gcmVzdWx0Wydjb21taXRz
J107CisgICAgfQorCisgICAgYXN5bmMgZnVuY3Rpb24gdGVzdFdpdGhFeHBlY3RlZEZhaWx1cmUo
Y29tbWl0c1VwZGF0ZSwgZXhwZWN0ZWRGYWlsdXJlTmFtZSkKKyAgICB7CisgICAgICAgIGNvbnN0
IGNvbW1pdHMgPSBhd2FpdCBzZXRVcFRlc3RzV2l0aEV4cGVjdGVkU3RhdHVzKGNvbW1pdHNVcGRh
dGUsIGV4cGVjdGVkRmFpbHVyZU5hbWUpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0cy5s
ZW5ndGgsIDIpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1swXS50ZXN0YWJpbGl0eSwg
bnVsbCk7CisgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzFdLnRlc3RhYmlsaXR5LCBudWxs
KTsKKyAgICB9CisKKyAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCAiTWlzc2luZ1JldmlzaW9uIiBp
ZiBjb21taXQgdXBkYXRlIGRvZXMgbm90IGhhdmUgY29tbWl0IHJldmlzaW9uIHNwZWNpZmllZCcs
IGFzeW5jICgpID0+IHsKKyAgICAgICAgYXdhaXQgdGVzdFdpdGhFeHBlY3RlZEZhaWx1cmUoY29t
bWl0c1VwZGF0ZVdpdGhNaXNzaW5nUmV2aXNpb24sICdNaXNzaW5nUmV2aXNpb24nKTsKKyAgICB9
KTsKKworICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoICJNaXNzaW5nUmVwb3NpdG9yeU5hbWUiIGlm
IGNvbW1pdCB1cGRhdGUgZG9lcyBub3QgaGF2ZSBjb21taXQgcmV2aXNpb24gc3BlY2lmaWVkJywg
YXN5bmMgKCkgPT4geworICAgICAgICBhd2FpdCB0ZXN0V2l0aEV4cGVjdGVkRmFpbHVyZShjb21t
aXRzVXBkYXRlV2l0aE1pc3NpbmdSZXBvc2l0b3J5LCAnTWlzc2luZ1JlcG9zaXRvcnlOYW1lJyk7
CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCAiTm90aGluZ1RvVXBkYXRlIiBp
ZiBjb21taXQgdXBkYXRlIGRvZXMgbm90IGhhdmUgY29tbWl0IHJldmlzaW9uIHNwZWNpZmllZCcs
IGFzeW5jICgpID0+IHsKKyAgICAgICAgYXdhaXQgdGVzdFdpdGhFeHBlY3RlZEZhaWx1cmUoY29t
bWl0c1VwZGF0ZVdpdGhvdXRBbnlVcGRhdGUsICdOb3RoaW5nVG9VcGRhdGUnKTsKKyAgICB9KTsK
KworICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoICJPd25lZENvbW1pdHNVcGRhdGVOb3RTdXBwb3J0
ZWRZZXQiIHdoZW4gdHJ5aW5nIHRvIHVwZGF0ZSBvd25lZCBjb21taXRzIGluZm8nLCBhc3luYyAo
KSA9PiB7CisgICAgICAgIGF3YWl0IHRlc3RXaXRoRXhwZWN0ZWRGYWlsdXJlKGNvbW1pdHNVcGRh
dGVXaXRoT3duZWRDb21taXRzVXBkYXRlLCAnT3duZWRDb21taXRzVXBkYXRlTm90U3VwcG9ydGVk
WWV0Jyk7CisgICAgfSk7CisKKyAgICBpdCgic2hvdWxkIGJlIGFibGUgdG8gdXBkYXRlIGNvbW1p
dHMgbWVzc2FnZSwgdGltZSwgb3JkZXIsIGF1dGhvciBhbmQgcHJldmlvdXMgY29tbWl0IiwgYXN5
bmMgKCkgPT4geworICAgICAgICBjb25zdCBjb21taXRzID0gYXdhaXQgc2V0VXBUZXN0c1dpdGhF
eHBlY3RlZFN0YXR1cyhjb21taXRzVXBkYXRlLCAnT0snKTsKKworICAgICAgICBhc3NlcnQuZXF1
YWwoY29tbWl0cy5sZW5ndGgsIDIpOworICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0c1swXS50
ZXN0YWJpbGl0eSwgJ0JyZWFrcyBidWlsZHMnKTsKKyAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1p
dHNbMV0udGVzdGFiaWxpdHksICdDcmFzaGVzIFdlYktpdCcpOworICAgICAgICBhc3NlcnQuZXF1
YWwoY29tbWl0c1swXS5tZXNzYWdlLCAnYW5vdGhlciBtZXNzYWdlJyk7CisgICAgICAgIGFzc2Vy
dC5lcXVhbChjb21taXRzWzFdLm1lc3NhZ2UsICdhbm90aGVyIG1lc3NhZ2UnKTsKKyAgICAgICAg
YXNzZXJ0LmVxdWFsKGNvbW1pdHNbMF0uYXV0aG9yTmFtZSwgJ0NocmlzIER1bWV6Jyk7CisgICAg
ICAgIGFzc2VydC5lcXVhbChjb21taXRzWzFdLmF1dGhvck5hbWUsICdaYWxhbiBCdWp0YXMnKTsK
KyAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdHNbMF0ub3JkZXIsIDIxMDk0OCk7CisgICAgICAg
IGFzc2VydC5lcXVhbChjb21taXRzWzFdLm9yZGVyLCAyMTA5NDkpOworICAgICAgICBhc3NlcnQu
ZXF1YWwoY29tbWl0c1swXS50aW1lLCAxNDg0ODg0MzU0NTc3KTsKKyAgICAgICAgYXNzZXJ0LmVx
dWFsKGNvbW1pdHNbMV0udGltZSwgMTQ4NDg4NjIzMDY0NSk7CisgICAgICAgIGFzc2VydC5lcXVh
bChjb21taXRzWzFdLnByZXZpb3VzQ29tbWl0LCBjb21taXRzWzBdLmlkKTsKKyAgICB9KTsKK30p
OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvdG9vbHMtb3MtYnVpbGQtZmV0Y2hlci10ZXN0cy5qcyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvdG9vbHMtb3MtYnVpbGQtZmV0
Y2hlci10ZXN0cy5qcwppbmRleCBjNmYwZGM5M2JiZTMyODY4NzhjYTdmOTBjOWM0MWNlZmY1NGVh
Nzc5Li5mN2ExZWI2NWRmYTQ2MzdjMDAyMmVkYTViMDAwOTg3MzU0NDlmMTBmIDEwMDY0NAotLS0g
YS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLW9zLWJ1aWxkLWZl
dGNoZXItdGVzdHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0
cy90b29scy1vcy1idWlsZC1mZXRjaGVyLXRlc3RzLmpzCkBAIC0xMzQsMzkgKzEzNCw1NyBAQCBk
ZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICB9KTsKIAogICAgIGRl
c2NyaWJlKCdPU0J1aWxkZXJGZXRjaGVyLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzJywgKCkg
PT4gewotICAgICAgICBpdCgnc2hvdWxkIG9ubHkgcmV0dXJuIGNvbW1pdHMgd2hvc2Ugb3JkZXJz
IGFyZSBoaWdoZXIgdGhhbiBzcGVjaWZpZWQgb3JkZXInLCAoKSA9PiB7CisgICAgICAgIGl0KCdz
aG91bGQgY29tcGF0aWJsZSB3aXRoIGNvbW1hbmQgb3V0cHV0IG9ubHkgY29udGFpbnMgbGluZXMg
b2YgcmV2aXNpb24nLCBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBu
ZXcgTW9ja0xvZ2dlcjsKICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZl
dGNoZXIoe30sIG51bGwsIG51bGwsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwogICAgICAgICAg
ICAgY29uc3Qgd2FpdEZvckludm9jYXRpb25Qcm9taXNlID0gTW9ja1N1YnByb2Nlc3Mud2FpdEZv
ckludm9jYXRpb24oKTsKLSAgICAgICAgICAgIGNvbnN0IGZldGNoQ29tbWl0c1Byb21pc2UgPSBm
ZXRjaGVyLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKCdPU1gnLCBbJ2xpc3QnLCAnYnVpbGQx
J10sICdeXFwuKiQnLCAxNjA0MDAwMDAwLCAxNjA2MDAwMDAwKTsKKyAgICAgICAgICAgIGNvbnN0
IGZldGNoQ29tbWl0c1Byb21pc2UgPSBmZXRjaGVyLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRz
KFsnbGlzdCcsICdidWlsZDEnXSwgJ15cXC4qJCcpOwogCi0gICAgICAgICAgICByZXR1cm4gd2Fp
dEZvckludm9jYXRpb25Qcm9taXNlLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwotICAgICAgICAg
ICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0uY29t
bWFuZCwgWydsaXN0JywgJ2J1aWxkMSddKTsKLSAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vz
cy5pbnZvY2F0aW9uc1swXS5yZXNvbHZlKCcxNkQzMjFcbjE2RTMyMXpcblxuMTZGMzIxJyk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoQ29tbWl0c1Byb21pc2U7Ci0gICAgICAgICAgICB9
KS50aGVuKChyZXN1bHRzKSA9PiB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3Vs
dHMubGVuZ3RoLCAyKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3VsdHNb
MF0sIHtyZXBvc2l0b3J5OiAnT1NYJywgb3JkZXI6IDE2MDQwMzIxMjYsIHJldmlzaW9uOiAnMTZF
MzIxeid9KTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3VsdHNbMV0sIHty
ZXBvc2l0b3J5OiAnT1NYJywgb3JkZXI6IDE2MDUwMzIxMDAsIHJldmlzaW9uOiAnMTZGMzIxJ30p
OwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhd2FpdCB3YWl0Rm9ySW52b2NhdGlvblBy
b21pc2U7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlv
bnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nl
c3MuaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2J1aWxkMSddKTsKKworICAgICAg
ICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHRzID0ge2FsbFJldmlzaW9uczogWyIxNkQzMjEiLCAi
MTZFMzIxeiIsICIxNkYzMjEiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eToge319OworICAgICAg
ICAgICAgYXdhaXQgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnMTZEMzIx
XG4xNkUzMjF6XG5cbjE2RjMyMScpOworICAgICAgICAgICAgY29uc3QgYnVpbGRJbmZvID0gYXdh
aXQgZmV0Y2hDb21taXRzUHJvbWlzZTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoZXhw
ZWN0ZWRSZXN1bHRzLCBidWlsZEluZm8pOwogICAgICAgICB9KTsKIAotICAgICAgICBpdCgnc2hv
dWxkIG9ubHkgcmV0dXJuIGNvbW1pdHMgd2hvc2Ugb3JkZXJzIGFyZSBoaWdoZXIgdGhhbiBtaW5P
cmRlciBhbmQgbG93ZXIgdGhhbiB0aGUgbWF4T3JkZXInLCAoKSA9PiB7CisgICAgICAgIGl0KCdz
aG91bGQgcGFyc2UgdGhlIGNvbW1hbmQgb3V0cHV0IGFzIEpTT04gZm9ybWF0JywgYXN5bmMgKCkg
PT4gewogICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CiAgICAgICAg
ICAgICBjb25zdCBmZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKHt9LCBudWxsLCBudWxsLCBN
b2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JJbnZvY2F0
aW9uUHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7Ci0gICAgICAg
ICAgICBjb25zdCBmZXRjaENvbW1pdHNQcm9taXNlID0gZmV0Y2hlci5fY29tbWl0c0ZvckF2YWls
YWJsZUJ1aWxkcygnT1NYJywgWydsaXN0JywgJ2J1aWxkMSddLCAnXlxcLiokJywgMTYwNDAwMDAw
MCwgMTYwNTAwMDAwMCk7CisgICAgICAgICAgICBjb25zdCBmZXRjaENvbW1pdHNQcm9taXNlID0g
ZmV0Y2hlci5fY29tbWl0c0ZvckF2YWlsYWJsZUJ1aWxkcyhbJ2xpc3QnLCAnYnVpbGQxJ10pOwog
Ci0gICAgICAgICAgICByZXR1cm4gd2FpdEZvckludm9jYXRpb25Qcm9taXNlLnRoZW4oKCkgPT4g
ewotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9u
cy5sZW5ndGgsIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnBy
b2Nlc3MuaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2J1aWxkMSddKTsKLSAgICAg
ICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5yZXNvbHZlKCcxNkQzMjFc
bjE2RTMyMXpcblxuMTZGMzIxJyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoQ29tbWl0
c1Byb21pc2U7Ci0gICAgICAgICAgICB9KS50aGVuKChyZXN1bHRzKSA9PiB7Ci0gICAgICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgICAgICBh
c3NlcnQuZGVlcEVxdWFsKHJlc3VsdHNbMF0sIHtyZXBvc2l0b3J5OiAnT1NYJywgb3JkZXI6IDE2
MDQwMzIxMjYsIHJldmlzaW9uOiAnMTZFMzIxeid9KTsKLSAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgYXdhaXQgd2FpdEZvckludm9jYXRpb25Qcm9taXNlOworICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAg
ICBhc3NlcnQuZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLmNvbW1hbmQs
IFsnbGlzdCcsICdidWlsZDEnXSk7CisKKyAgICAgICAgICAgIGNvbnN0IG91dHB1dE9iamVjdCA9
IHthbGxSZXZpc2lvbnM6IFsiMTZEMzIxIiwgIjE2RTMyMXoiLCAiMTZGMzIxIl0sIGNvbW1pdHNX
aXRoVGVzdGFiaWxpdHk6IHsiMTZEMzIxIjogIlBhbmljIn19OworICAgICAgICAgICAgYXdhaXQg
TW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShvdXRw
dXRPYmplY3QpKTsKKyAgICAgICAgICAgIGNvbnN0IGJ1aWxkSW5mbyA9IGF3YWl0IGZldGNoQ29t
bWl0c1Byb21pc2U7CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKG91dHB1dE9iamVjdCwg
YnVpbGRJbmZvKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKworICAgIGRlc2NyaWJlKCdPU0J1
aWxkZXJGZXRjaGVyLl9jb21taXRzV2l0aGluUmFuZ2UnLCAoKSA9PiB7CisgICAgICAgIGl0KCdz
aG91bGQgb25seSByZXR1cm4gY29tbWl0cyB3aG9zZSBvcmRlcnMgYXJlIGhpZ2hlciB0aGFuIHNw
ZWNpZmllZCBvcmRlcicsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9
IG5ldyBNb2NrTG9nZ2VyOworICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxk
RmV0Y2hlcih7fSwgbnVsbCwgbnVsbCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7CisgICAgICAg
ICAgICBjb25zdCByZXN1bHRzID0gZmV0Y2hlci5fY29tbWl0c1dpdGhpblJhbmdlKFsiMTZEMzIx
IiwgIjE2RTMyMXoiLCAiMTZGMzIxIl0sICJPU1giLCAxNjA0MDAwMDAwLCAxNjA2MDAwMDAwKTsK
KyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRzLmxlbmd0aCwgMik7CisgICAgICAgICAg
ICBhc3NlcnQuZGVlcEVxdWFsKHJlc3VsdHNbMF0sIHtyZXBvc2l0b3J5OiAnT1NYJywgb3JkZXI6
IDE2MDQwMzIxMjYsIHJldmlzaW9uOiAnMTZFMzIxeid9KTsKKyAgICAgICAgICAgIGFzc2VydC5k
ZWVwRXF1YWwocmVzdWx0c1sxXSwge3JlcG9zaXRvcnk6ICdPU1gnLCBvcmRlcjogMTYwNTAzMjEw
MCwgcmV2aXNpb246ICcxNkYzMjEnfSk7CisKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3No
b3VsZCBvbmx5IHJldHVybiBjb21taXRzIHdob3NlIG9yZGVycyBhcmUgaGlnaGVyIHRoYW4gbWlu
T3JkZXIgYW5kIGxvd2VyIHRoYW4gdGhlIG1heE9yZGVyJywgYXN5bmMgKCkgPT4geworICAgICAg
ICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CisgICAgICAgICAgICBjb25zdCBm
ZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKHt9LCBudWxsLCBudWxsLCBNb2NrU3VicHJvY2Vz
cywgbG9nZ2VyKTsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBmZXRjaGVyLl9jb21taXRz
V2l0aGluUmFuZ2UoWyIxNkQzMjEiLCAiMTZFMzIxeiIsICIxNkYzMjEiXSwgIk9TWCIsIDE2MDQw
MDAwMDAsIDE2MDUwMDAwMDApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVu
Z3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzdWx0c1swXSwge3JlcG9z
aXRvcnk6ICdPU1gnLCBvcmRlcjogMTYwNDAzMjEyNiwgcmV2aXNpb246ICcxNkUzMjF6J30pOwog
ICAgICAgICB9KTsKICAgICB9KTsKIApAQCAtMjM5LDkgKzI1Nyw5IEBAIGRlc2NyaWJlKCdPU0J1
aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0pCi0gICAgfSkKKyAgICB9KTsKIAotICAgIGRlc2NyaWJlKCdPU0J1
aWxkRmV0Y2hlci5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcycsICgpID0+IHsKKyAgICBkZXNjcmli
ZSgnT1NCdWlsZEZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMnLCAoKSA9PiB7CiAg
ICAgICAgIGNvbnN0IGludm9jYXRpb25zID0gTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnM7CiAK
ICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7CkBAIC0yNTIsMTEgKzI3MCwxMiBAQCBk
ZXNjcmliZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIFRlc3RT
ZXJ2ZXIuZGF0YWJhc2UoKS5kaXNjb25uZWN0KCk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIGl0
KCdzaG91bGQgcmVwb3J0IGFsbCBidWlsZCBjb21taXRzIHdpdGggb3duZWQtY29tbWl0cycsICgp
ID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBiZSBiYWNrd2FyZCBjb21wYXRpYmxlIGFuZCByZXBv
cnQgYWxsIGJ1aWxkIGNvbW1pdHMgd2l0aCBvd25lZC1jb21taXRzJywgKCkgPT4gewogICAgICAg
ICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CiAgICAgICAgICAgICBjb25zdCBm
ZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKGNvbmZpZywgVGVzdFNlcnZlci5yZW1vdGVBUEko
KSwgc2xhdmVBdXRoLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0
IGRiID0gVGVzdFNlcnZlci5kYXRhYmFzZSgpOwotICAgICAgICAgICAgbGV0IGZldGNoQW5kUmVw
b3J0UHJvbWlzZSA9IG51bGw7CisKKyAgICAgICAgICAgIGxldCBmZXRjaFJlcG9ydEFuZFVwZGF0
ZUJ1aWxkc1Byb21pc2UgPSBudWxsOwogICAgICAgICAgICAgbGV0IGZldGNoQXZhaWxhYmxlQnVp
bGRzUHJvbWlzZSA9IG51bGw7CiAKICAgICAgICAgICAgIHJldHVybiBhZGRTbGF2ZUZvclJlcG9y
dChlbXB0eVJlcG9ydCkudGhlbigoKSA9PiB7CkBAIC0zMDcsMTAgKzMyNiw5IEBAIGRlc2NyaWJl
KCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIGFzc2VydC5k
ZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ293bmVkQ29tbWl0Jywg
J2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkUzNCddKTsKICAgICAgICAgICAgICAgICBpbnZv
Y2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJvd25lZENvbW1pdFdpdGhX
ZWJLaXRBbmRKYXZhU2NyaXB0Q29yZSkpOwogICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaEF2
YWlsYWJsZUJ1aWxkc1Byb21pc2U7Ci0gICAgICAgICAgICB9KS50aGVuKChyZXN1bHRzKSA9PiB7
Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVuZ3RoLCAzKTsKKyAgICAg
ICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLnJl
c2V0KCk7Ci0gICAgICAgICAgICAgICAgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gZmV0Y2hlci5m
ZXRjaEFuZFJlcG9ydE5ld0J1aWxkcygpOworICAgICAgICAgICAgICAgIGZldGNoUmVwb3J0QW5k
VXBkYXRlQnVpbGRzUHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRhdGVCdWlsZHMo
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3Mud2FpdEZvckludm9jYXRp
b24oKTsKICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwpAQCAtMzM3LDkgKzM1NSwxNDEgQEAgZGVz
Y3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgaW52
b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShhbm90aGVyb3duZWRDb21taXRXaXRo
V2ViS2l0QW5kSmF2YVNjcmlwdENvcmUpKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVx
dWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1pdCcsICdmb3In
LCAncmV2aXNpb24nLCAnU2llcnJhMTZFMzQnXSk7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmV0Y2hBbmRSZXBvcnRQcm9taXNlOworICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaFJlcG9y
dEFuZFVwZGF0ZUJ1aWxkc1Byb21pc2U7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoWworICAgICAgICAgICAgICAgICAgICBk
Yi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0J30pLAorICAgICAg
ICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2
YVNjcmlwdENvcmUnfSksCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ2NvbW1p
dHMnLCB7J3JldmlzaW9uJzogJ1NpZXJyYTE2RDY5J30pLAorICAgICAgICAgICAgICAgICAgICBk
Yi5zZWxlY3RSb3dzKCdjb21taXRzJywgeydyZXZpc2lvbic6ICdTaWVycmExNkUzM2gnfSksCisg
ICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7J3JldmlzaW9uJzog
J1NpZXJyYTE2RTM0J30pXSk7CisgICAgICAgICAgICB9KS50aGVuKChyZXN1bHRzKSA9PiB7Cisg
ICAgICAgICAgICAgICAgY29uc3Qgd2Via2l0UmVwb3NpdG9yeSA9IHJlc3VsdHNbMF07CisgICAg
ICAgICAgICAgICAgY29uc3QganNjUmVwb3NpdG9yeSA9IHJlc3VsdHNbMV07CisgICAgICAgICAg
ICAgICAgY29uc3Qgb3N4Q29tbWl0MTZENjkgPSByZXN1bHRzWzJdOworICAgICAgICAgICAgICAg
IGNvbnN0IG9zeENvbW1pdDE2RTMzaCA9IHJlc3VsdHNbM107CisgICAgICAgICAgICAgICAgY29u
c3Qgb3N4Q29tbWl0MTZFMzQgPSByZXN1bHRzWzRdOworCisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHdlYmtpdFJlcG9zaXRvcnkubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwod2Via2l0UmVwb3NpdG9yeVswXVsnb3duZXInXSwgMTApOworICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChqc2NSZXBvc2l0b3J5Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKGpzY1JlcG9zaXRvcnlbMF1bJ293bmVyJ10sIDEwKTsKKworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OS5sZW5ndGgsIDEpOworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OVswXVsncmVwb3NpdG9yeSddLCAx
MCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY5WzBdWydvcmRl
ciddLCAxNjAzMDA2OTAwKTsKKworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21t
aXQxNkUzM2gubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29t
bWl0MTZFMzNoWzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwob3N4Q29tbWl0MTZFMzNoWzBdWydvcmRlciddLCAxNjA0MDAzMzA4KTsKKworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzNC5sZW5ndGgsIDEpOworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzNFswXVsncmVwb3NpdG9yeSddLCAx
MCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTM0WzBdWydvcmRl
ciddLCAxNjA0MDAzNDAwKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBUZXN0U2VydmVyLnJl
bW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2
MDMwMDAwMDAmdG89MTYwMzA5OTkwMCcpOwogICAgICAgICAgICAgfSkudGhlbigocmVzdWx0KSA9
PiB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVzJ10sICdPSycp
OworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGgs
IDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsn
cmV2aXNpb24nXSwgJ1NpZXJyYTE2RDY5Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjAzMDA2OTAwKTsKKworICAgICAgICAg
ICAgICAgIHJldHVybiBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0
cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDQwMDAwMDAmdG89MTYwNDA5OTkwMCcpOworICAg
ICAgICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZFMzQnKTsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVy
J10sIDE2MDQwMDM0MDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAg
IGl0KCdzaG91bGQgcmVwb3J0IGFsbCBidWlsZCBjb21taXRzIHdpdGggb3duZWQtY29tbWl0cycs
ICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOworICAg
ICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihjb25maWcsIFRlc3RT
ZXJ2ZXIucmVtb3RlQVBJKCksIHNsYXZlQXV0aCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7Cisg
ICAgICAgICAgICBjb25zdCBkYiA9IFRlc3RTZXJ2ZXIuZGF0YWJhc2UoKTsKKyAgICAgICAgICAg
IGNvbnN0IHJlc3VsdHNGb3JTaWVycmFEID0ge2FsbFJldmlzaW9uczogWyJTaWVycmExNkQ2OCIs
ICJTaWVycmExNkQ2OSJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5OiB7fX07CisgICAgICAgICAg
ICBjb25zdCByZXN1bHRzRm9yU2llcnJhRSA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZFMzIi
LCAiU2llcnJhMTZFMzMiLCAiU2llcnJhMTZFMzNoIiwgIlNpZXJyYTE2RTM0Il0sIGNvbW1pdHNX
aXRoVGVzdGFiaWxpdHk6IHt9fTsKKworICAgICAgICAgICAgbGV0IGZldGNoUmVwb3J0QW5kVXBk
YXRlQnVpbGRzUHJvbWlzZSA9IG51bGw7CisgICAgICAgICAgICBsZXQgZmV0Y2hBdmFpbGFibGVC
dWlsZHNQcm9taXNlID0gbnVsbDsKKworICAgICAgICAgICAgcmV0dXJuIGFkZFNsYXZlRm9yUmVw
b3J0KGVtcHR5UmVwb3J0KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHJv
bWlzZS5hbGwoWworICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ3JlcG9zaXRvcmllcycs
IHsnaWQnOiAxMCwgJ25hbWUnOiAnT1NYJ30pLAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNl
cnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RDY3
JywgJ29yZGVyJzogMTYwMzAwNjcwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAg
ICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9u
JzogJ1NpZXJyYTE2RDY4JywgJ29yZGVyJzogMTYwMzAwNjgwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0p
LAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnkn
OiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RDY5JywgJ29yZGVyJzogMTYwMzAwNjkwMCwgJ3Jl
cG9ydGVkJzogZmFsc2V9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRz
JywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkUzMicsICdvcmRlcic6
IDE2MDQwMDMyMDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIu
aW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmEx
NkUzMycsICdvcmRlcic6IDE2MDQwMDMzMDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAg
ICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZp
c2lvbic6ICdTaWVycmExNkUzM2cnLCAnb3JkZXInOiAxNjA0MDAzMzA3LCAncmVwb3J0ZWQnOiB0
cnVlfSldKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJl
dHVybiBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFz
dC1yZXBvcnRlZD9mcm9tPTE2MDMwMDAwMDAmdG89MTYwMzA5OTkwMCcpOworICAgICAgICAgICAg
fSkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3Vs
dFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
c3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZENjgnKTsKKyAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMw
MDY4MDApOworICAgICAgICAgICAgICAgIHJldHVybiBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdl
dEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDQwMDAwMDAmdG89
MTYwNDA5OTkwMCcpOworICAgICAgICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbidd
LCAnU2llcnJhMTZFMzNnJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsn
Y29tbWl0cyddWzBdWydvcmRlciddLCAxNjA0MDAzMzA3KTsKKyAgICAgICAgICAgICAgICBjb25z
dCB3YWl0Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52b2Nh
dGlvbigpOworICAgICAgICAgICAgICAgIGZldGNoQXZhaWxhYmxlQnVpbGRzUHJvbWlzZSA9IGZl
dGNoZXIuX2ZldGNoQXZhaWxhYmxlQnVpbGRzKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHdh
aXRGb3JJbnZvY2F0aW9uUHJvbWlzZTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAg
ICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0
JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOworICAgICAgICAgICAgICAgIGludm9jYXRpb25z
WzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUQpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigp
OworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBF
cXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9y
JywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RDY5J10pOworICAgICAgICAgICAgICAgIGludm9jYXRp
b25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkob3duZWRDb21taXRXaXRoV2ViS2l0KSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9j
YXRpb24oKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2Vy
dC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZF
eHggYnVpbGRzJ10pOworICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNP
Ti5zdHJpbmdpZnkocmVzdWx0c0ZvclNpZXJyYUUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
TW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAg
fSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25z
Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9u
c1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3JldmlzaW9uJywg
J1NpZXJyYTE2RTMzaCddKTsKKyAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZl
KEpTT04uc3RyaW5naWZ5KGFub3RoZXJvd25lZENvbW1pdFdpdGhXZWJLaXQpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigp
OworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBF
cXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9y
JywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RTM0J10pOworICAgICAgICAgICAgICAgIGludm9jYXRp
b25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlcm93bmVkQ29tbWl0V2l0aFdlYktp
dEFuZEphdmFTY3JpcHRDb3JlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoQXZhaWxh
YmxlQnVpbGRzUHJvbWlzZTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAg
ICAgICAgIE1vY2tTdWJwcm9jZXNzLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgZmV0Y2hSZXBv
cnRBbmRVcGRhdGVCdWlsZHNQcm9taXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1
aWxkcygpOworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52
b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAx
NkR4eCBidWlsZHMnXSk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShK
U09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkpOworICAgICAgICAgICAgICAgIHJldHVy
biBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisgICAgICAgICAg
ICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlv
bnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRp
b25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2aXNpb24n
LCAnU2llcnJhMTZENjknXSk7CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2
ZShKU09OLnN0cmluZ2lmeShvd25lZENvbW1pdFdpdGhXZWJLaXQpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOworICAg
ICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGlu
dm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChp
bnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkV4eCBidWlsZHMnXSk7
CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShy
ZXN1bHRzRm9yU2llcnJhRSkpOworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vz
cy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+
IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQs
IFsnbGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJhMTZFMzNo
J10pOworICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdp
ZnkoYW5vdGhlcm93bmVkQ29tbWl0V2l0aFdlYktpdCkpOworICAgICAgICAgICAgICAgIHJldHVy
biBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CisgICAgICAgICAg
ICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlv
bnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpT
T04uc3RyaW5naWZ5KGFub3RoZXJvd25lZENvbW1pdFdpdGhXZWJLaXRBbmRKYXZhU2NyaXB0Q29y
ZSkpOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29t
bWFuZCwgWydsaXN0JywgJ293bmVkQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmEx
NkUzNCddKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1
aWxkc1Byb21pc2U7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gUHJvbWlzZS5hbGwoWwogICAgICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dz
KCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0J30pLAogICAgICAgICAgICAgICAgICAg
ICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2YVNjcmlwdENvcmUn
fSksCkBAIC0zODQsMTEgKzUzNCwxMTkgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAKKyAgICAgICAgaXQoJ3No
b3VsZCB1cGRhdGUgdGVzdGFiaWxpdHkgd2FybmluZyBmb3IgY29tbWl0cycsIGFzeW5jICgpID0+
IHsKKyAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOworICAgICAgICAg
ICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihjb25maWcsIFRlc3RTZXJ2ZXIu
cmVtb3RlQVBJKCksIHNsYXZlQXV0aCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7CisgICAgICAg
ICAgICBjb25zdCBkYiA9IFRlc3RTZXJ2ZXIuZGF0YWJhc2UoKTsKKyAgICAgICAgICAgIGNvbnN0
IHJlc3VsdHNGb3JTaWVycmFEID0ge2FsbFJldmlzaW9uczogWyJTaWVycmExNkQ2OCIsICJTaWVy
cmExNkQ2OSJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5OiB7IlNpZXJyYTE2RDY4IjogIlBhbmlj
IiwgIlNpZXJyYTE2RDY5IjogIlNwaW4gQ1BVIn19OworICAgICAgICAgICAgY29uc3QgcmVzdWx0
c0ZvclNpZXJyYUUgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RTMyIiwgIlNpZXJyYTE2RTMz
IiwgIlNpZXJyYTE2RTMzaCIsICJTaWVycmExNkUzNCJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5
OiB7IlNpZXJyYTE2RTMxIjogIldlYktpdCBjcmFzaGVzIn19OworCisgICAgICAgICAgICBhd2Fp
dCBhZGRTbGF2ZUZvclJlcG9ydChlbXB0eVJlcG9ydCk7CisKKyAgICAgICAgICAgIGF3YWl0IFBy
b21pc2UuYWxsKFsKKyAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ3JlcG9zaXRvcmllcycsIHsn
aWQnOiAxMCwgJ25hbWUnOiAnT1NYJ30pLAorICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29t
bWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZENjcnLCAnb3Jk
ZXInOiAxNjAzMDA2NzAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAgICAgZGIu
aW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmEx
NkQ2OCcsICdvcmRlcic6IDE2MDMwMDY4MDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAg
ICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9u
JzogJ1NpZXJyYTE2RDY5JywgJ29yZGVyJzogMTYwMzAwNjkwMCwgJ3JlcG9ydGVkJzogZmFsc2V9
KSwKKyAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAx
MCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RTMxJywgJ29yZGVyJzogMTYwNDAwMzEwMCwgJ3JlcG9y
dGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVw
b3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZFMzInLCAnb3JkZXInOiAxNjA0MDAz
MjAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21t
aXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkUzMycsICdvcmRl
cic6IDE2MDQwMDMzMDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICBkYi5p
bnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2
RTMzZycsICdvcmRlcic6IDE2MDQwMDMzMDcsICdyZXBvcnRlZCc6IHRydWV9KV0pOworCisgICAg
ICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09O
KCcvYXBpL2NvbW1pdHMvT1NYL2xhc3QtcmVwb3J0ZWQ/ZnJvbT0xNjAzMDAwMDAwJnRvPTE2MDMw
OTk5MDAnKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxl
bmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1b
J3JldmlzaW9uJ10sICdTaWVycmExNkQ2OCcpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
c3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjAzMDA2ODAwKTsKKyAgICAgICAgICAgIHJl
c3VsdCA9IGF3YWl0IFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRz
L09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwNDAwMDAwMCZ0bz0xNjA0MDk5OTAwJyk7CisKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGgsIDEpOworICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAn
U2llcnJhMTZFMzNnJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRz
J11bMF1bJ29yZGVyJ10sIDE2MDQwMDMzMDcpOworCisgICAgICAgICAgICBjb25zdCBmZXRjaFJl
cG9ydEFuZFVwZGF0ZVByb21pc2UgPSBmZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRz
KCk7CisgICAgICAgICAgICBhd2FpdCBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigp
OworCisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAg
ICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0
JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOworICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0u
cmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkpOworICAgICAgICAgICAg
YXdhaXQgTW9ja1N1YnByb2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOworCisgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAg
IGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ293bmVk
Q29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkQ2OSddKTsKKyAgICAgICAgICAg
IGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkob3duZWRDb21taXRXaXRoV2Vi
S2l0KSk7CisgICAgICAgICAgICBhd2FpdCBNb2NrU3VicHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJ
bnZvY2F0aW9uKCk7CisKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5n
dGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21t
YW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkV4eCBidWlsZHMnXSk7CisgICAgICAgICAgICBpbnZv
Y2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFFKSk7CisK
KyAgICAgICAgICAgIGF3YWl0IE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9jYXRp
b24oKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7
CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsn
bGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJhMTZFMzNoJ10p
OworICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShhbm90
aGVyb3duZWRDb21taXRXaXRoV2ViS2l0KSk7CisgICAgICAgICAgICBhd2FpdCAgTW9ja1N1YnBy
b2Nlc3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5y
ZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJvd25lZENvbW1pdFdpdGhXZWJLaXRBbmRKYXZh
U2NyaXB0Q29yZSkpOworICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1sw
XS5jb21tYW5kLCBbJ2xpc3QnLCAnb3duZWRDb21taXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1Np
ZXJyYTE2RTM0J10pOworCisgICAgICAgICAgICBhd2FpdCBmZXRjaFJlcG9ydEFuZFVwZGF0ZVBy
b21pc2U7CisKKyAgICAgICAgICAgIGNvbnN0IHdlYmtpdFJlcG9zaXRvcnkgPSBhd2FpdCBkYi5z
ZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0J30pOworICAgICAgICAg
ICAgY29uc3QganNjUmVwb3NpdG9yeSA9IGF3YWl0IGRiLnNlbGVjdFJvd3MoJ3JlcG9zaXRvcmll
cycsIHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29yZSd9KTsKKyAgICAgICAgICAgIGNvbnN0IG9zeENv
bW1pdDE2RDY4ID0gYXdhaXQgZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAn
U2llcnJhMTZENjgnfSk7CisgICAgICAgICAgICBjb25zdCBvc3hDb21taXQxNkQ2OSA9IGF3YWl0
IGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7J3JldmlzaW9uJzogJ1NpZXJyYTE2RDY5J30pOwor
ICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0MTZFMzEgPSBhd2FpdCBkYi5zZWxlY3RSb3dzKCdj
b21taXRzJywgeydyZXZpc2lvbic6ICdTaWVycmExNkUzMSd9KTsKKyAgICAgICAgICAgIGNvbnN0
IG9zeENvbW1pdDE2RTMzaCA9IGF3YWl0IGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7J3Jldmlz
aW9uJzogJ1NpZXJyYTE2RTMzaCd9KTsKKyAgICAgICAgICAgIGNvbnN0IG9zeENvbW1pdDE2RTM0
ID0gYXdhaXQgZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZF
MzQnfSk7CisKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbCh3ZWJraXRSZXBvc2l0b3J5Lmxlbmd0
aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwod2Via2l0UmVwb3NpdG9yeVswXVsnb3du
ZXInXSwgMTApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGpzY1JlcG9zaXRvcnkubGVuZ3Ro
LCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChqc2NSZXBvc2l0b3J5WzBdWydvd25lcidd
LCAxMCk7CisKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OC5sZW5ndGgs
IDEpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY4WzBdWydyZXBvc2l0
b3J5J10sIDEwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OFswXVsn
b3JkZXInXSwgMTYwMzAwNjgwMCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0
MTZENjhbMF1bJ3Rlc3RhYmlsaXR5J10sICJQYW5pYyIpOworCisgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwob3N4Q29tbWl0MTZENjkubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVh
bChvc3hDb21taXQxNkQ2OVswXVsncmVwb3NpdG9yeSddLCAxMCk7CisgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwob3N4Q29tbWl0MTZENjlbMF1bJ29yZGVyJ10sIDE2MDMwMDY5MDApOworICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY5WzBdWyd0ZXN0YWJpbGl0eSddLCAiU3Bp
biBDUFUiKTsKKworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMxLmxlbmd0
aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzFbMF1bJ3JlcG9z
aXRvcnknXSwgMTApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMxWzBd
WydvcmRlciddLCAxNjA0MDAzMTAwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21t
aXQxNkUzMVswXVsndGVzdGFiaWxpdHknXSwgIldlYktpdCBjcmFzaGVzIik7CisKKyAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2gubGVuZ3RoLCAxKTsKKyAgICAgICAgICAg
IGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2hbMF1bJ3JlcG9zaXRvcnknXSwgMTApOworICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMzaFswXVsnb3JkZXInXSwgMTYwNDAw
MzMwOCk7CisKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzNC5sZW5ndGgs
IDEpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTM0WzBdWydyZXBvc2l0
b3J5J10sIDEwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzNFswXVsn
b3JkZXInXSwgMTYwNDAwMzQwMCk7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IFRlc3RT
ZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVk
P2Zyb209MTYwMzAwMDAwMCZ0bz0xNjAzMDk5OTAwJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RDY5Jyk7CisgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMw
MDY5MDApOworCisgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBUZXN0U2VydmVyLnJlbW90ZUFQ
SSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDQwMDAw
MDAmdG89MTYwNDA5OTkwMCcpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29t
bWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21t
aXRzJ11bMF1bJ3JldmlzaW9uJ10sICdTaWVycmExNkUzNCcpOworICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjA0MDAzNDAwKTsKKyAgICAg
ICAgfSk7CisKICAgICAgICAgaXQoJ3Nob3VsZCByZXBvcnQgY29tbWl0cyB3aXRob3V0IG93bmVk
LWNvbW1pdHMgaWYgIm93bmVkQ29tbWl0Q29tbWFuZCIgaXMgbm90IHNwZWNpZmllZCBpbiBjb25m
aWcnLCBhc3luYyAoKSA9PiB7CiAKICAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2Nr
TG9nZ2VyOwogICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihj
b25maWdXaXRob3V0T3duZWRDb21taXRDb21tYW5kLCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLCBz
bGF2ZUF1dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwogICAgICAgICAgICAgY29uc3QgZGIg
PSBUZXN0U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2ll
cnJhRCA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZENjgiLCAiU2llcnJhMTZENjkiXSwgY29t
bWl0c1dpdGhUZXN0YWJpbGl0eToge319OworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNp
ZXJyYUUgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RTMyIiwgIlNpZXJyYTE2RTMzIiwgIlNp
ZXJyYTE2RTMzaCIsICJTaWVycmExNkUzNCJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5OiB7fX07
CiAKICAgICAgICAgICAgIGF3YWl0IGFkZFNsYXZlRm9yUmVwb3J0KGVtcHR5UmVwb3J0KTsKICAg
ICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFsKQEAgLTQxMSwxOSArNjY5LDE4IEBAIGRlc2Ny
aWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjA0MDAzMzA3KTsKIAogICAgICAg
ICAgICAgY29uc3Qgd2FpdEZvckludm9jYXRpb25Qcm9taXNlID0gTW9ja1N1YnByb2Nlc3Mud2Fp
dEZvckludm9jYXRpb24oKTsKLSAgICAgICAgICAgIGNvbnN0IGZldGNoQW5kUmVwb3J0UHJvbWlz
ZSA9IGZldGNoZXIuZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMoKTsKKyAgICAgICAgICAgIGNvbnN0
IGZldGNoUmVwb3J0QW5kVXBkYXRlUHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hSZXBvcnRBbmRVcGRh
dGVCdWlsZHMoKTsKICAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZTsK
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwogICAgICAg
ICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAn
YWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7Ci0gICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNv
bHZlKCdcblxuU2llcnJhMTZENjhcblNpZXJyYTE2RDY5Jyk7CisgICAgICAgICAgICBpbnZvY2F0
aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFEKSk7CiAKICAg
ICAgICAgICAgIGF3YWl0IE1vY2tTdWJwcm9jZXNzLnJlc2V0QW5kV2FpdEZvckludm9jYXRpb24o
KTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwogICAg
ICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3Qn
LCAnYWxsIG9zeCAxNkV4eCBidWlsZHMnXSk7Ci0gICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5y
ZXNvbHZlKCdcblxuU2llcnJhMTZFMzJcblNpZXJyYTE2RTMzXG5TaWVycmExNkUzM2hcblNpZXJy
YTE2RTM0Jyk7CisgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5n
aWZ5KHJlc3VsdHNGb3JTaWVycmFFKSk7CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZl
dGNoQW5kUmVwb3J0UHJvbWlzZTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0
YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoUmVwb3J0QW5k
VXBkYXRlUHJvbWlzZTsKICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNl
LmFsbChbCiAgICAgICAgICAgICAgICAgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeydu
YW1lJzogJ1dlYktpdCd9KSwKICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0
b3JpZXMnLCB7J25hbWUnOiAnSmF2YVNjcmlwdENvcmUnfSksCkBAIC00NjcsNiArNzI0LDggQEAg
ZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBjb25z
dCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBu
ZXcgT1NCdWlsZEZldGNoZXIoY29uZmlnV2l0aG91dE93bmVkQ29tbWl0Q29tbWFuZCwgVGVzdFNl
cnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKICAg
ICAgICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZlci5kYXRhYmFzZSgpOworICAgICAgICAgICAg
Y29uc3QgcmVzdWx0c0ZvclNpZXJyYUQgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RDY4Iiwg
IlNpZXJyYTE2RDY5IiwgIlNpZXJyYTE2RDEwMDAwIl0sIGNvbW1pdHNXaXRoVGVzdGFiaWxpdHk6
IHt9fTsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdHNGb3JTaWVycmFFID0ge2FsbFJldmlzaW9u
czogWyJTaWVycmExNkUzMiIsICJTaWVycmExNkUzMyIsICJTaWVycmExNkUzM2giLCAiU2llcnJh
MTZFMzQiLCAiU2llcnJhMTZFMTAwMDAiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eToge319Owog
CiAgICAgICAgICAgICBhd2FpdCBhZGRTbGF2ZUZvclJlcG9ydChlbXB0eVJlcG9ydCk7CiAgICAg
ICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbCkBAIC00ODgsMjAgKzc0NywxOSBAQCBkZXNjcmli
ZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RTMzZycpOwogICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjA0
MDAzMzA3KTsKICAgICAgICAgICAgIGNvbnN0IHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZSA9IE1v
Y2tTdWJwcm9jZXNzLndhaXRGb3JJbnZvY2F0aW9uKCk7Ci0gICAgICAgICAgICBjb25zdCBmZXRj
aEFuZFJlcG9ydFByb21pc2UgPSBmZXRjaGVyLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzKCk7Cisg
ICAgICAgICAgICBjb25zdCBmZXRjaFJlcG9ydEFuZFVwZGF0ZVByb21pc2UgPSBmZXRjaGVyLmZl
dGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzKCk7CiAKICAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JJ
bnZvY2F0aW9uUHJvbWlzZTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5s
ZW5ndGgsIDEpOwogICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5j
b21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7Ci0gICAgICAgICAgICBp
bnZvY2F0aW9uc1swXS5yZXNvbHZlKCdcblxuU2llcnJhMTZENjhcblNpZXJyYTE2RDY5XG5TaWVy
cmExNkQxMDAwMCcpOworICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0
cmluZ2lmeShyZXN1bHRzRm9yU2llcnJhRCkpOwogCiAgICAgICAgICAgICBhd2FpdCBNb2NrU3Vi
cHJvY2Vzcy5yZXNldEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CiAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1
YWwoaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRz
J10pOwotICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnXG5cblNpZXJyYTE2RTMy
XG5TaWVycmExNkUzM1xuU2llcnJhMTZFMzNoXG5TaWVycmExNkUzNFxuU2llcnJhMTZFMTAwMDAn
KTsKKyAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkocmVz
dWx0c0ZvclNpZXJyYUUpKTsKIAotICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hBbmRS
ZXBvcnRQcm9taXNlOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVzJ10s
ICdPSycpOworICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZmV0Y2hSZXBvcnRBbmRVcGRhdGVQ
cm9taXNlOwogICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFsK
ICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAn
V2ViS2l0J30pLAogICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ3JlcG9zaXRvcmllcycs
IHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29yZSd9KSwKQEAgLTU0NSw2ICs4MDMsNyBAQCBkZXNjcmli
ZSgnT1NCdWlsZEZldGNoZXInLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGNvbnN0IGxvZ2dl
ciA9IG5ldyBNb2NrTG9nZ2VyOwogICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1
aWxkRmV0Y2hlcihjb25maWdUcmFja2luZ09uZU9TLCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLCBz
bGF2ZUF1dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwogICAgICAgICAgICAgY29uc3QgZGIg
PSBUZXN0U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAgICBjb25zdCByZXN1bHRzRm9yU2ll
cnJhRCA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZENjgiLCAiU2llcnJhMTZENjkiLCAiU2ll
cnJhMTZEMTAwIiwgIlNpZXJyYTE2RDEwMGEiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eToge319
OwogCiAgICAgICAgICAgICBhd2FpdCBhZGRTbGF2ZUZvclJlcG9ydChlbXB0eVJlcG9ydCk7CiAg
ICAgICAgICAgICBhd2FpdCBkYi5pbnNlcnQoJ3JlcG9zaXRvcmllcycsIHsnaWQnOiAxMCwgJ25h
bWUnOiAnT1NYJ30pOwpAQCAtNTU2LDE0ICs4MTUsMTMgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRj
aGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21t
aXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMwMTAwMDApOwogCiAgICAgICAgICAgICBjb25zdCB3YWl0
Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigp
OwotICAgICAgICAgICAgY29uc3QgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gZmV0Y2hlci5mZXRj
aEFuZFJlcG9ydE5ld0J1aWxkcygpOworICAgICAgICAgICAgY29uc3QgZmV0Y2hBbmRSZXBvcnRQ
cm9taXNlID0gZmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUJ1aWxkcygpOwogICAgICAgICAg
ICAgYXdhaXQgd2FpdEZvckludm9jYXRpb25Qcm9taXNlOwogICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFs
KGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdhbGwgb3N4IDE2RHh4IGJ1aWxkcydd
KTsKLSAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2OFxu
U2llcnJhMTZENjlcblNpZXJyYTE2RDEwMFxuU2llcnJhMTZEMTAwYVxuJyk7CisgICAgICAgICAg
ICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFE
KSk7CiAKICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZldGNoQW5kUmVwb3J0UHJvbWlzZTsK
LSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsKICAgICAg
ICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICAgICAg
ICAgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ1dlYktpdCd9KSwKICAg
ICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2
YVNjcmlwdENvcmUnfSksCkBAIC01OTQsNiArODUyLDcgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRj
aGVyJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xv
Z2dlcjsKICAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoY29u
ZmlnVHJhY2tpbmdPbmVPUywgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBNb2Nr
U3VicHJvY2VzcywgbG9nZ2VyKTsKICAgICAgICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZlci5k
YXRhYmFzZSgpOworICAgICAgICAgICAgY29uc3QgcmVzdWx0c0ZvclNpZXJyYUQgPSB7YWxsUmV2
aXNpb25zOiBbIlNpZXJyYTE2RDY4IiwgIlNpZXJyYTE2RDY5IiwgIlNpZXJyYTE2RDEwMCIsICJT
aWVycmExNkQxMDEiXSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eToge319OwogCiAgICAgICAgICAg
ICBhd2FpdCBhZGRTbGF2ZUZvclJlcG9ydChlbXB0eVJlcG9ydCk7CiAgICAgICAgICAgICBhd2Fp
dCBkYi5pbnNlcnQoJ3JlcG9zaXRvcmllcycsIHsnaWQnOiAxMCwgJ25hbWUnOiAnT1NYJ30pOwpA
QCAtNjAyLDE0ICs4NjEsMTMgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAw
KTsKIAogICAgICAgICAgICAgY29uc3Qgd2FpdEZvckludm9jYXRpb25Qcm9taXNlID0gTW9ja1N1
YnByb2Nlc3Mud2FpdEZvckludm9jYXRpb24oKTsKLSAgICAgICAgICAgIGNvbnN0IGZldGNoQW5k
UmVwb3J0UHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMoKTsKKyAgICAg
ICAgICAgIGNvbnN0IGZldGNoUmVwb3J0QW5kVXBkYXRlUHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hS
ZXBvcnRBbmRVcGRhdGVCdWlsZHMoKTsKICAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JJbnZvY2F0
aW9uUHJvbWlzZTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgs
IDEpOwogICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChpbnZvY2F0aW9uc1swXS5jb21tYW5k
LCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7Ci0gICAgICAgICAgICBpbnZvY2F0
aW9uc1swXS5yZXNvbHZlKCdcblxuU2llcnJhMTZENjhcblNpZXJyYTE2RDY5XG5TaWVycmExNkQx
MDBcblNpZXJyYTE2RDEwMVxuJyk7CisgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZl
KEpTT04uc3RyaW5naWZ5KHJlc3VsdHNGb3JTaWVycmFEKSk7CiAKLSAgICAgICAgICAgIHJlc3Vs
dCA9IGF3YWl0IGZldGNoQW5kUmVwb3J0UHJvbWlzZTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGZl
dGNoUmVwb3J0QW5kVXBkYXRlUHJvbWlzZTsKICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBh
d2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgICAgICAgICAgZGIuc2VsZWN0Um93cygncmVwb3Np
dG9yaWVzJywgeyduYW1lJzogJ1dlYktpdCd9KSwKICAgICAgICAgICAgICAgICBkYi5zZWxlY3RS
b3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2YVNjcmlwdENvcmUnfSksCkBAIC02NDYs
NiArOTA0LDggQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKICAgICAgICAgICAgIGNvbnN0
IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoY29uZmlnLCBUZXN0U2VydmVyLnJlbW90ZUFQ
SSgpLCBzbGF2ZUF1dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwogICAgICAgICAgICAgY29u
c3QgZGIgPSBUZXN0U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAgICBjb25zdCByZXN1bHRz
Rm9yU2llcnJhRCA9IHthbGxSZXZpc2lvbnM6IFsiU2llcnJhMTZENjgiLCAiU2llcnJhMTZENjki
XSwgY29tbWl0c1dpdGhUZXN0YWJpbGl0eToge319OworICAgICAgICAgICAgY29uc3QgcmVzdWx0
c0ZvclNpZXJyYUUgPSB7YWxsUmV2aXNpb25zOiBbIlNpZXJyYTE2RTMyIiwgIlNpZXJyYTE2RTMz
IiwgIlNpZXJyYTE2RTMzaCIsICJTaWVycmExNkUzNCJdLCBjb21taXRzV2l0aFRlc3RhYmlsaXR5
OiB7fX07CiAgICAgICAgICAgICBsZXQgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gbnVsbDsKIAog
ICAgICAgICAgICAgcmV0dXJuIGFkZFNsYXZlRm9yUmVwb3J0KGVtcHR5UmVwb3J0KS50aGVuKCgp
ID0+IHsKQEAgLTY3MSwxMiArOTMxLDEyIEBAIGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1
bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMn
XVswXVsnb3JkZXInXSwgMTYwNDAwMzMwNyk7CiAKICAgICAgICAgICAgICAgICBjb25zdCB3YWl0
Rm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0Rm9ySW52b2NhdGlvbigp
OwotICAgICAgICAgICAgICAgIGZldGNoQW5kUmVwb3J0UHJvbWlzZSA9IGZldGNoZXIuZmV0Y2hB
bmRSZXBvcnROZXdCdWlsZHMoKTsKKyAgICAgICAgICAgICAgICBmZXRjaEFuZFJlcG9ydFByb21p
c2UgPSBmZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzKCk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHdhaXRGb3JJbnZvY2F0aW9uUHJvbWlzZTsKICAgICAgICAgICAgIH0pLnRoZW4o
KCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnZvY2F0aW9ucy5sZW5ndGgs
IDEpOwogICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW52b2NhdGlvbnNbMF0uY29t
bWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOwotICAgICAgICAgICAgICAg
IGludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2OFxuU2llcnJhMTZENjlcbicp
OworICAgICAgICAgICAgICAgIGludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnko
cmVzdWx0c0ZvclNpZXJyYUQpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nl
c3MucmVzZXRBbmRXYWl0Rm9ySW52b2NhdGlvbigpOwogICAgICAgICAgICAgfSkudGhlbigoKSA9
PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludm9jYXRpb25zLmxlbmd0aCwgMSk7
CkBAIC02ODYsNyArOTQ2LDcgQEAgZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwoaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZGVl
cEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnbGlzdCcsICdhbGwgb3N4IDE2RXh4IGJ1
aWxkcyddKTsKLSAgICAgICAgICAgICAgICBpbnZvY2F0aW9uc1swXS5yZXNvbHZlKCdcblxuU2ll
cnJhMTZFMzJcblNpZXJyYTE2RTMzXG5TaWVycmExNkUzM2hcblNpZXJyYTE2RTM0Jyk7CisgICAg
ICAgICAgICAgICAgaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShyZXN1bHRz
Rm9yU2llcnJhRSkpOwogICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy5yZXNl
dEFuZFdhaXRGb3JJbnZvY2F0aW9uKCk7CiAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKICAg
ICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsn
bGlzdCcsICdvd25lZENvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJhMTZFMzNoJ10p
OwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pzL29zLWJ1aWxk
LWZldGNoZXIuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3MtYnVpbGQt
ZmV0Y2hlci5qcwppbmRleCAwNTFjMjlmY2I3Yjg2MzM2YmY0MTcyZDU1ZjdhNDk4NmQxNzE0ZmUx
Li4wODA2MzI1MTE4YjZlNmQ5MzgzN2RjZDU5OGYyNWQyM2JlMjI3NGNmIDEwMDY0NAotLS0gYS9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3MtYnVpbGQtZmV0Y2hlci5qcworKysg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3MtYnVpbGQtZmV0Y2hlci5qcwpA
QCAtMjIsNTkgKzIyLDU2IEBAIGNsYXNzIE9TQnVpbGRGZXRjaGVyIHsKICAgICAgICAgdGhpcy5f
bWF4U3VibWl0Q291bnQgPSBvc0NvbmZpZ1snbWF4U3VibWl0Q291bnQnXSB8fCAyMDsKICAgICB9
CiAKLSAgICBzdGF0aWMgZmV0Y2hBbmRSZXBvcnRBbGxJbk9yZGVyKGZldGNoZXJMaXN0KQorICAg
IHN0YXRpYyBhc3luYyBmZXRjaFJlcG9ydEFuZFVwZGF0ZUNvbW1pdHMoZmV0Y2hlckxpc3QpCiAg
ICAgewotICAgICAgICByZXR1cm4gbWFwSW5TZXJpYWxQcm9taXNlQ2hhaW4oZmV0Y2hlckxpc3Qs
IChmZXRjaGVyKSA9PiBmZXRjaGVyLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzKCkpOworICAgICAg
ICBmb3IgKGNvbnN0IGZldGNoZXIgb2YgZmV0Y2hlckxpc3QpCisgICAgICAgICAgICBhd2FpdCBm
ZXRjaGVyLmZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRzKCk7CiAgICAgfQogCi0gICAgZmV0Y2hB
bmRSZXBvcnROZXdCdWlsZHMoKQorICAgIGFzeW5jIGZldGNoUmVwb3J0QW5kVXBkYXRlQnVpbGRz
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9mZXRjaEF2YWlsYWJsZUJ1aWxkcygpLnRo
ZW4oKHJlc3VsdHMpID0+IHsKLSAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5sb2coYFN1Ym1pdHRp
bmcgJHtyZXN1bHRzLmxlbmd0aH0gYnVpbGRzIGZvciAke3RoaXMuX29zQ29uZmlnWyduYW1lJ119
YCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPT0gMCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fc3VibWl0Q29tbWl0cyhyZXN1bHRzKTsKLQotICAgICAgICAgICAgY29u
c3Qgc3BsaXR0ZWRSZXN1bHRzID0gW107Ci0gICAgICAgICAgICBmb3IgKGxldCBzdGFydEluZGV4
ID0gMDsgc3RhcnRJbmRleCA8IHJlc3VsdHMubGVuZ3RoOyBzdGFydEluZGV4ICs9IHRoaXMuX21h
eFN1Ym1pdENvdW50KQotICAgICAgICAgICAgICAgIHNwbGl0dGVkUmVzdWx0cy5wdXNoKHJlc3Vs
dHMuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIHRoaXMuX21heFN1Ym1pdENvdW50KSk7
Ci0KLSAgICAgICAgICAgIHJldHVybiBtYXBJblNlcmlhbFByb21pc2VDaGFpbihzcGxpdHRlZFJl
c3VsdHMsIHRoaXMuX3N1Ym1pdENvbW1pdHMuYmluZCh0aGlzKSkudGhlbigocmVzcG9uc2VzKSA9
PiB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KHJlc3BvbnNlcy5ldmVyeSgocmVzcG9uc2UpID0+
IHJlc3BvbnNlWydzdGF0dXMnXSA9PSAnT0snKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KHJl
c3BvbnNlcy5sZW5ndGggPiAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VzWzBd
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAgICAgICBjb25zdCB7bmV3Q29tbWl0
c1RvUmVwb3J0LCBjb21taXRzVG9VcGRhdGV9ID0gYXdhaXQgdGhpcy5fZmV0Y2hBdmFpbGFibGVC
dWlsZHMoKTsKKworICAgICAgICB0aGlzLl9sb2dnZXIubG9nKGBTdWJtaXR0aW5nICR7bmV3Q29t
bWl0c1RvUmVwb3J0Lmxlbmd0aH0gYnVpbGRzIGZvciAke3RoaXMuX29zQ29uZmlnWyduYW1lJ119
YCk7CisgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydENvbW1pdHMobmV3Q29tbWl0c1RvUmVwb3J0
LCB0cnVlKTsKKworICAgICAgICB0aGlzLl9sb2dnZXIubG9nKGBVcGRhdGluZyAke2NvbW1pdHNU
b1VwZGF0ZS5sZW5ndGh9IGJ1aWxkcyBmb3IgJHt0aGlzLl9vc0NvbmZpZ1snbmFtZSddfWApOwor
ICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRDb21taXRzKGNvbW1pdHNUb1VwZGF0ZSwgZmFsc2Up
OwogICAgIH0KIAotICAgIF9mZXRjaEF2YWlsYWJsZUJ1aWxkcygpCisgICAgYXN5bmMgX2ZldGNo
QXZhaWxhYmxlQnVpbGRzKCkKICAgICB7CiAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX29z
Q29uZmlnOwogICAgICAgICBjb25zdCByZXBvc2l0b3J5TmFtZSA9IGNvbmZpZ1snbmFtZSddOwot
ICAgICAgICBsZXQgY3VzdG9tQ29tbWFuZHMgPSBjb25maWdbJ2N1c3RvbUNvbW1hbmRzJ107Cisg
ICAgICAgIGNvbnN0IG5ld0NvbW1pdHNUb1JlcG9ydCA9IFtdOworICAgICAgICBjb25zdCBjb21t
aXRzVG9VcGRhdGUgPSBbXTsKKyAgICAgICAgY29uc3QgIGN1c3RvbUNvbW1hbmRzID0gY29uZmln
WydjdXN0b21Db21tYW5kcyddOwogCi0gICAgICAgIHJldHVybiBtYXBJblNlcmlhbFByb21pc2VD
aGFpbihjdXN0b21Db21tYW5kcywgKGNvbW1hbmQpID0+IHsKKyAgICAgICAgZm9yIChjb25zdCBj
b21tYW5kIG9mIGN1c3RvbUNvbW1hbmRzKSB7CiAgICAgICAgICAgICBhc3NlcnQoY29tbWFuZFsn
bWluUmV2aXNpb24nXSk7CiAgICAgICAgICAgICBhc3NlcnQoY29tbWFuZFsnbWF4UmV2aXNpb24n
XSk7CiAgICAgICAgICAgICBjb25zdCBtaW5SZXZpc2lvbk9yZGVyID0gdGhpcy5fY29tcHV0ZU9y
ZGVyKGNvbW1hbmRbJ21pblJldmlzaW9uJ10pOwogICAgICAgICAgICAgY29uc3QgbWF4UmV2aXNp
b25PcmRlciA9IHRoaXMuX2NvbXB1dGVPcmRlcihjb21tYW5kWydtYXhSZXZpc2lvbiddKTsKIAog
ICAgICAgICAgICAgY29uc3QgdXJsID0gYC9hcGkvY29tbWl0cy8ke2VzY2FwZShyZXBvc2l0b3J5
TmFtZSl9L2xhc3QtcmVwb3J0ZWQ/ZnJvbT0ke21pblJldmlzaW9uT3JkZXJ9JnRvPSR7bWF4UmV2
aXNpb25PcmRlcn1gOworICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fcmVt
b3RlQVBJLmdldEpTT05XaXRoU3RhdHVzKHVybCk7CisgICAgICAgICAgICBjb25zdCBtaW5PcmRl
ciA9IHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCA9PSAxID8gcGFyc2VJbnQocmVzdWx0Wydjb21t
aXRzJ11bMF1bJ29yZGVyJ10pICsgMSA6IG1pblJldmlzaW9uT3JkZXI7CiAKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLl9yZW1vdGVBUEkuZ2V0SlNPTldpdGhTdGF0dXModXJsKS50aGVuKChyZXN1
bHQpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBtaW5PcmRlciA9IHJlc3VsdFsnY29tbWl0
cyddLmxlbmd0aCA9PSAxID8gcGFyc2VJbnQocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10p
ICsgMSA6IG1pblJldmlzaW9uT3JkZXI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nv
bW1pdHNGb3JBdmFpbGFibGVCdWlsZHMocmVwb3NpdG9yeU5hbWUsIGNvbW1hbmRbJ2NvbW1hbmQn
XSwgY29tbWFuZFsnbGluZXNUb0lnbm9yZSddLCBtaW5PcmRlciwgbWF4UmV2aXNpb25PcmRlcik7
Ci0gICAgICAgICAgICB9KS50aGVuKChjb21taXRzKSA9PiB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgbGFiZWwgPSAnbmFtZScgaW4gY29tbWFuZCA/IGAiJHtjb21tYW5kWyduYW1lJ119ImAgOiBg
IiR7Y29tbWFuZFsnbWluUmV2aXNpb24nXX0iIHRvICIke2NvbW1hbmRbJ21heFJldmlzaW9uJ119
ImA7Ci0gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmxvZyhgRm91bmQgJHtjb21taXRzLmxl
bmd0aH0gYnVpbGRzIGZvciAke2xhYmVsfWApOworICAgICAgICAgICAgY29uc3QgY29tbWl0SW5m
byA9IGF3YWl0IHRoaXMuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMoY29tbWFuZFsnY29tbWFu
ZCddLCBjb21tYW5kWydsaW5lc1RvSWdub3JlJ10pOworICAgICAgICAgICAgY29uc3QgY29tbWl0
cyA9IHRoaXMuX2NvbW1pdHNXaXRoaW5SYW5nZShjb21taXRJbmZvLmFsbFJldmlzaW9ucywgcmVw
b3NpdG9yeU5hbWUsIG1pbk9yZGVyLCBtYXhSZXZpc2lvbk9yZGVyKTsKIAotICAgICAgICAgICAg
ICAgIGlmICgnb3duZWRDb21taXRDb21tYW5kJyBpbiBjb21tYW5kKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuX2xvZ2dlci5sb2coYFJlc29sdmluZyBvd25lZENvbW1pdHMgZm9yICR7bGFi
ZWx9YCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hZGRPd25lZENvbW1pdHNG
b3JCdWlsZChjb21taXRzLCBjb21tYW5kWydvd25lZENvbW1pdENvbW1hbmQnXSk7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgbGFiZWwgPSAnbmFtZScgaW4gY29tbWFuZCA/
IGAiJHtjb21tYW5kWyduYW1lJ119ImAgOiBgIiR7Y29tbWFuZFsnbWluUmV2aXNpb24nXX0iIHRv
ICIke2NvbW1hbmRbJ21heFJldmlzaW9uJ119ImA7CisgICAgICAgICAgICB0aGlzLl9sb2dnZXIu
bG9nKGBGb3VuZCAke2NvbW1pdHMubGVuZ3RofSBidWlsZHMgZm9yICR7bGFiZWx9YCk7CisgICAg
ICAgICAgICBpZiAoJ293bmVkQ29tbWl0Q29tbWFuZCcgaW4gY29tbWFuZCkgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2xvZ2dlci5sb2coYFJlc29sdmluZyBvd25lZENvbW1pdHMgZm9yICR7bGFi
ZWx9YCk7CisgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fYWRkT3duZWRDb21taXRzRm9yQnVp
bGQoY29tbWl0cywgY29tbWFuZFsnb3duZWRDb21taXRDb21tYW5kJ10pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgbmV3Q29tbWl0c1RvUmVwb3J0LnB1c2goLi4uY29tbWl0cyk7CiAKLSAg
ICAgICAgICAgICAgICByZXR1cm4gY29tbWl0czsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9
KS50aGVuKChyZXN1bHRzKSA9PiBbXS5jb25jYXQoLi4ucmVzdWx0cykpOworICAgICAgICAgICAg
Zm9yIChjb25zdCBbcmV2aXNpb24sIHRlc3RhYmlsaXR5XSBvZiBPYmplY3QuZW50cmllcyhjb21t
aXRJbmZvLmNvbW1pdHNXaXRoVGVzdGFiaWxpdHkpKQorICAgICAgICAgICAgICAgIGNvbW1pdHNU
b1VwZGF0ZS5wdXNoKHtyZXBvc2l0b3J5OiByZXBvc2l0b3J5TmFtZSwgcmV2aXNpb24sIHRlc3Rh
YmlsaXR5fSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHtuZXdDb21taXRzVG9SZXBvcnQs
IGNvbW1pdHNUb1VwZGF0ZX07CiAgICAgfQogCiAgICAgX2NvbXB1dGVPcmRlcihyZXZpc2lvbikK
QEAgLTg5LDE3ICs4NiwyNyBAQCBjbGFzcyBPU0J1aWxkRmV0Y2hlciB7CiAgICAgICAgIHJldHVy
biAoKG1ham9yICogMTAwICsga2luZCkgKiAxMDAwMCArIG1pbm9yKSAqIDEwMCArIHZhcmlhbnQ7
CiAgICAgfQogCi0gICAgX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMocmVwb3NpdG9yeSwgY29t
bWFuZCwgbGluZXNUb0lnbm9yZSwgbWluT3JkZXIsIG1heE9yZGVyKQorICAgIGFzeW5jIF9jb21t
aXRzRm9yQXZhaWxhYmxlQnVpbGRzKGNvbW1hbmQsIGxpbmVzVG9JZ25vcmUpCiAgICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fc3VicHJvY2Vzcy5leGVjdXRlKGNvbW1hbmQpLnRoZW4oKG91dHB1
dCkgPT4geworICAgICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB0aGlzLl9zdWJwcm9jZXNzLmV4
ZWN1dGUoY29tbWFuZCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gSlNPTi5w
YXJzZShvdXRwdXQpOworICAgICAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICAgICAgaWYg
KCEoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikpCisgICAgICAgICAgICAgICAgdGhyb3cg
ZXJyb3I7CiAgICAgICAgICAgICBsZXQgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xuJyk7Ci0gICAg
ICAgICAgICBpZiAobGluZXNUb0lnbm9yZSl7CisgICAgICAgICAgICBpZiAobGluZXNUb0lnbm9y
ZSkgewogICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChsaW5lc1RvSWdu
b3JlKTsKICAgICAgICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmZpbHRlcigobGluZSkgPT4gIXJl
Z2V4LmV4ZWMobGluZSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGxpbmVz
Lm1hcCgocmV2aXNpb24pID0+ICh7cmVwb3NpdG9yeSwgcmV2aXNpb24sICdvcmRlcic6IHRoaXMu
X2NvbXB1dGVPcmRlcihyZXZpc2lvbil9KSkKLSAgICAgICAgICAgICAgICAuZmlsdGVyKChjb21t
aXQpID0+IGNvbW1pdFsnb3JkZXInXSA+PSBtaW5PcmRlciAmJiBjb21taXRbJ29yZGVyJ10gPD0g
bWF4T3JkZXIpOwotICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiB7YWxsUmV2aXNpb25z
OiBsaW5lcywgY29tbWl0c1dpdGhUZXN0YWJpbGl0eToge319OworICAgICAgICB9CisgICAgfQor
CisgICAgX2NvbW1pdHNXaXRoaW5SYW5nZShyZXZpc2lvbnMsIHJlcG9zaXRvcnksIG1pbk9yZGVy
LCBtYXhPcmRlcikKKyAgICB7CisgICAgICAgIHJldHVybiByZXZpc2lvbnMubWFwKChyZXZpc2lv
bikgPT4gKHtyZXBvc2l0b3J5LCByZXZpc2lvbiwgJ29yZGVyJzogdGhpcy5fY29tcHV0ZU9yZGVy
KHJldmlzaW9uKX0pKQorICAgICAgICAgICAgLmZpbHRlcigoY29tbWl0KSA9PiBjb21taXRbJ29y
ZGVyJ10gPj0gbWluT3JkZXIgJiYgY29tbWl0WydvcmRlciddIDw9IG1heE9yZGVyKTsKICAgICB9
CiAKICAgICBfYWRkT3duZWRDb21taXRzRm9yQnVpbGQoY29tbWl0cywgY29tbWFuZCkKQEAgLTEx
OSwxMCArMTI2LDE2IEBAIGNsYXNzIE9TQnVpbGRGZXRjaGVyIHsKICAgICAgICAgfSk7CiAgICAg
fQogCi0gICAgX3N1Ym1pdENvbW1pdHMoY29tbWl0cykKKyAgICBhc3luYyBfcmVwb3J0Q29tbWl0
cyhjb21taXRzVG9Qb3N0LCBpbnNlcnQpCiAgICAgewotICAgICAgICBjb25zdCBjb21taXRzVG9S
ZXBvcnQgPSB7InNsYXZlTmFtZSI6IHRoaXMuX3NsYXZlQXV0aFsnbmFtZSddLCAic2xhdmVQYXNz
d29yZCI6IHRoaXMuX3NsYXZlQXV0aFsncGFzc3dvcmQnXSwgJ2NvbW1pdHMnOiBjb21taXRzfTsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX3JlbW90ZUFQSS5wb3N0SlNPTldpdGhTdGF0dXMoJy9hcGkv
cmVwb3J0LWNvbW1pdHMvJywgY29tbWl0c1RvUmVwb3J0KTsKKyAgICAgICAgaWYgKCFjb21taXRz
VG9Qb3N0Lmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBmb3IobGV0IGNv
bW1pdHNUb1N1Ym1pdCA9IGNvbW1pdHNUb1Bvc3Quc3BsaWNlKDAsIHRoaXMuX21heFN1Ym1pdENv
dW50KTsgY29tbWl0c1RvU3VibWl0Lmxlbmd0aDsgY29tbWl0c1RvU3VibWl0ID0gY29tbWl0c1Rv
UG9zdC5zcGxpY2UoMCwgdGhpcy5fbWF4U3VibWl0Q291bnQpKSB7CisgICAgICAgICAgICBjb25z
dCByZXBvcnQgPSB7InNsYXZlTmFtZSI6IHRoaXMuX3NsYXZlQXV0aFsnbmFtZSddLCAic2xhdmVQ
YXNzd29yZCI6IHRoaXMuX3NsYXZlQXV0aFsncGFzc3dvcmQnXSwgJ2NvbW1pdHMnOiBjb21taXRz
VG9TdWJtaXQsIGluc2VydH07CisgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRo
aXMuX3JlbW90ZUFQSS5wb3N0SlNPTldpdGhTdGF0dXMoJy9hcGkvcmVwb3J0LWNvbW1pdHMvJywg
cmVwb3J0KTsKKyAgICAgICAgICAgIGFzc2VydChyZXNwb25zZVsnc3RhdHVzJ10gPT09ICdPSycp
OworICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvdG9vbHMvc3luYy1vcy12ZXJzaW9ucy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy90b29scy9zeW5jLW9zLXZlcnNpb25zLmpzCmluZGV4IDc3ZjRhMGE3ZDM0MzgxOTQzMDc2Yjgz
ZWM0OGQ1YmM5MGI0ODM1ODYuLjRmYmU1ODJiZjAzODhkYTRhNGIzYTc1MzA3ZDJmMTZiNjIyOTdj
NzggMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9zeW5jLW9zLXZl
cnNpb25zLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9zeW5jLW9zLXZl
cnNpb25zLmpzCkBAIC0yOSw3ICsyOSw3IEBAIGZ1bmN0aW9uIHN5bmNMb29wKG9wdGlvbnMpCiAg
ICAgY29uc3QgcmVtb3RlQVBJID0gbmV3IFJlbW90ZUFQSShzZXJ2ZXJDb25maWcuc2VydmVyKTsK
IAogICAgIGNvbnN0IGZldGNoZXJzID0gb3NDb25maWdMaXN0Lm1hcCgob3NDb25maWcpID0+IG5l
dyBPU0J1aWxkRmV0Y2hlcihvc0NvbmZpZywgcmVtb3RlQVBJLCBzZXJ2ZXJDb25maWcuc2xhdmUs
IG5ldyBTdWJwcm9jZXNzLCBjb25zb2xlKSk7Ci0gICAgT1NCdWlsZEZldGNoZXIuZmV0Y2hBbmRS
ZXBvcnRBbGxJbk9yZGVyKGZldGNoZXJzKS5jYXRjaCgoZXJyb3IpID0+IHsKKyAgICBPU0J1aWxk
RmV0Y2hlci5mZXRjaFJlcG9ydEFuZFVwZGF0ZUNvbW1pdHMoZmV0Y2hlcnMpLmNhdGNoKChlcnJv
cikgPT4gewogICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgaWYgKHR5cGVv
ZihlcnJvci5zdGFjaykgPT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgIGZvciAobGV0IGxpbmUg
b2YgZXJyb3Iuc3RhY2suc3BsaXQoJ1xuJykpCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qcwppbmRleCA1Zjg4NTI0OTIw
NjBlZWE2ZjMzMDViYmMwZjU0ZWI2MGMwMTBiMmEzLi44NmExMjYzMzAxMzgwZWYwNTNiODdiNGMx
N2EwNmIzMTM4MTcxMzcwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5p
dC10ZXN0cy9jb21taXQtbG9nLXRlc3RzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy91bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMuanMKQEAgLTU4LDYgKzU4LDE4IEBAIGZ1bmN0
aW9uIG9zeENvbW1pdCgpCiAgICAgfSk7CiB9CiAKK2Z1bmN0aW9uIG9zeENvbW1pdFdpdGhUZXN0
YWJpbGl0eSgpCit7CisgICAgcmV0dXJuIG5ldyBDb21taXRMb2coNSwgeworICAgICAgICBpZDog
NSwKKyAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vc3gsCisgICAgICAgIHJldmlzaW9u
OiAnMTAuMTEuNCAxNUU2NScsCisgICAgICAgIHRpbWU6IG51bGwsCisgICAgICAgIG9yZGVyOiAx
NTA0MDY1LAorICAgICAgICB0ZXN0YWJpbGl0eTogIlBhbmljIG9uIGJvb3QiCisgICAgfSk7Cit9
CisKIGZ1bmN0aW9uIG9sZE9TWENvbW1pdCgpCiB7CiAgICAgcmV0dXJuIG5ldyBDb21taXRMb2co
NiwgewpAQCAtNDE3LDYgKzQyOSwxMyBAQCBkZXNjcmliZSgnQ29tbWl0TG9nJywgZnVuY3Rpb24g
KCkgewogICAgICAgICB9KTsKICAgICB9KTsKIAorICAgIGRlc2NyaWJlKCd0ZXN0YWJpbGl0eScs
ICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gInRlc3RhYmlsaXR5IiBtZXNzYWdl
JywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gb3N4Q29tbWl0V2l0aFRlc3Rh
YmlsaXR5KCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0LnRlc3RhYmlsaXR5KCks
ICdQYW5pYyBvbiBib290Jyk7CisgICAgICAgIH0pOworICAgIH0pOworCiAgICAgY29uc3QgY29t
bWl0c0FQSVJlc3BvbnNlID0gewogICAgICAgICAiY29tbWl0cyI6W3sKICAgICAgICAgICAgICJp
ZCI6ICI4MzExNTEiLApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQt
dGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0
LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanMKaW5kZXggMzlmY2NjNTQ3NTlmODc5ZjFjZTAzODNi
MGE5YjJjZTdmYzViOWE0OS4uN2Q1MmVhNWEyNzJkOWJlZWZmNjliODk4NjA3NDI4MjM2M2FhZTdm
YiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0
LXNldC10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9j
b21taXQtc2V0LXRlc3RzLmpzCkBAIC0xNzAsNiArMTcwLDE4IEBAIGZ1bmN0aW9uIGFub3RoZXJD
b21taXRXaXRoR2l0UmV2aXNpb24oKQogICAgIH0pOwogfQogCitmdW5jdGlvbiBjb21taXRXaXRo
VGVzdGFiaWxpdHkoKQoreworICAgIHJldHVybiBDb21taXRMb2cuZW5zdXJlU2luZ2xldG9uKDIw
MjMsIHsKKyAgICAgICAgaWQ6IDIwMjMsCisgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMu
d2Via2l0R2l0LAorICAgICAgICByZXZpc2lvbjogJ2YyNGZjNjc4NzNhMDA2OGZkNWEzYTlhZGFj
NTk1ZjAwMzZjMjEzMTUnLAorICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgIHRp
bWU6IDE0NTY5MzI3NzMwMDAsCisgICAgICAgIHRlc3RhYmlsaXR5OiAnRmFpbGVkIGNvbXBpbGF0
aW9uJworICAgIH0pOworfQorCiBkZXNjcmliZSgnQ29tbWl0U2V0JywgKCkgPT4gewogICAgIE1v
Y2tSZW1vdGVBUEkuaW5qZWN0KG51bGwsIEJyb3dzZXJQcml2aWxlZ2VkQVBJKTsKICAgICBNb2Nr
TW9kZWxzLmluamVjdCgpOwpAQCAtMjk0LDYgKzMwNiwxNSBAQCBkZXNjcmliZSgnQ29tbWl0U2V0
JywgKCkgPT4gewogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBmdW5jdGlvbiBjb21taXRTZXRX
aXRoVGVzdGFiaWxpdHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbW1pdFNldC5lbnN1cmVT
aW5nbGV0b24oMTYsIHsKKyAgICAgICAgICAgIHJldmlzaW9uSXRlbXM6IFt7IGNvbW1pdDogY29t
bWl0V2l0aFRlc3RhYmlsaXR5KCksIHJlcXVpcmVzQnVpbGQ6IGZhbHNlIH0sCisgICAgICAgICAg
ICAgICAgeyBjb21taXQ6IHdlYmtpdENvbW1pdCgpLCByZXF1aXJlc0J1aWxkOiBmYWxzZSB9XSwK
KyAgICAgICAgICAgIGN1c3RvbVJvb3RzOiBbXQorICAgICAgICB9KTsKKyAgICB9CisKICAgICBm
dW5jdGlvbiBvbmVNZWFzdXJlbWVudENvbW1pdFNldCgpCiAgICAgewogICAgICAgICByZXR1cm4g
TWVhc3VyZW1lbnRDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKDEsIFsKQEAgLTQwNiw2ICs0Mjcs
MjUgQEAgZGVzY3JpYmUoJ0NvbW1pdFNldCcsICgpID0+IHsKICAgICAgICAgICAgICAgICAgICAg
eycxMSc6IHsgcmV2aXNpb246ICd3ZWJraXQtY29tbWl0LTAnLCBvd25lclJldmlzaW9uOiBudWxs
LCBwYXRjaDogbnVsbH0sIGN1c3RvbVJvb3RzOiBbNDU2LCA0NThdfV0pOwogICAgICAgICB9KTsK
ICAgICB9KTsKKworICAgIGRlc2NyaWJlKCdjb21taXRzV2l0aFRlc3RhYmlsaXR5JywgKCkgPT4g
eworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBjb21taXRzIHdpdGggdGVzdGFiaWxpdHknLCAo
KSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb21taXRzID0gY29tbWl0U2V0V2l0aFRlc3RhYmls
aXR5KCkuY29tbWl0c1dpdGhUZXN0YWJpbGl0eSgpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KGNvbW1pdHMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRzWzBd
LCBjb21taXRXaXRoVGVzdGFiaWxpdHkoKSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdz
aG91bGQgcmV0dXJuIGVtcHR5IGxpc3QgaWYgbm8gY29tbWl0IGluIGNvbW1pdCBzZXQgY29udGFp
bnMgdGVzdGFiaWxpdHknLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb21taXRzID0gY29t
bWl0U2V0V2l0aFR3b0NvbW1pdHMoKS5jb21taXRzV2l0aFRlc3RhYmlsaXR5KCk7CisgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwoY29tbWl0cy5sZW5ndGgsIDApOworICAgICAgICB9KTsKKyAgICB9
KTsKKworICAgIGRlc2NyaWJlKCdjb21taXRzJywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxk
IHJldHVybiBhbGwgY29tbWl0cyBpbiBjb21taXQgc2V0JywgKCkgPT4geworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKGNvbW1pdFNldFdpdGhUd29Db21taXRzKCkuY29tbWl0cygpLmxlbmd0aCwg
Mik7CisgICAgICAgIH0pOworICAgIH0pOwogfSk7CiAKIGRlc2NyaWJlKCdJbnRlcm1lZGlhdGVD
b21taXRTZXQnLCAoKSA9PiB7CkBAIC02MjksOSArNjY5LDcgQEAgZGVzY3JpYmUoJ0ludGVybWVk
aWF0ZUNvbW1pdFNldCcsICgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQoIWNvbW1pdFNl
dC5jb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMud2Via2l0KSk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgfSk7Ci0KICAgICB9KTsKLQogfSk7CiAKIGRlc2NyaWJlKCdDdXN0b21Db21t
aXRTZXQnLCAoKSA9PiB7Cg==
</data>
<flag name="review"
          id="374677"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>