<?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>169542</bug_id>
          
          <creation_ts>2017-03-13 01:26:39 -0700</creation_ts>
          <short_desc>Rewrite &apos;pull-os-versions&apos; script in JavaScript and add ability to report os commits with sub-commits.</short_desc>
          <delta_ts>2017-03-15 01:35:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>dewei_zhu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1287102</commentid>
    <comment_count>0</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2017-03-13 01:26:39 -0700</bug_when>
    <thetext>Rewrite &apos;pull-os-versions&apos; script in JavaScript and add ability to report os commits with sub-commits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1287104</commentid>
    <comment_count>1</comment_count>
      <attachid>304241</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-03-13 01:30:33 -0700</bug_when>
    <thetext>Created attachment 304241
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1287339</commentid>
    <comment_count>2</comment_count>
      <attachid>304241</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-03-13 14:19:37 -0700</bug_when>
    <thetext>Comment on attachment 304241
patch

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

I&apos;d say r- for now given the list of issues I listed below.

&gt; Websites/perf.webkit.org/server-tests/resources/mock-child-process.js:3
&gt; +MockChildProcess = {

As we talked in person, it&apos;s probably best to wrap node&apos;s child_process with some helper class or function which returns a Promise.
That way, we can take the same approach as MockRemoteAPI to assert the expected path etc...

&gt; Websites/perf.webkit.org/server-tests/resources/mock-child-process.js:24
&gt; +    execFile : function(binFile, commandArguments, callback)

I don&apos;t think we want to use the abbreviation such as &quot;bin&quot;. Just say &quot;file&quot; to match the name used in child_process.

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:7
&gt; +let BuildbotSyncer = require(&apos;./buildbot-syncer&apos;).BuildbotSyncer;

I don&apos;t think this statement should exit here.

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:30
&gt; +            return this._remoteAPI.getJSONWithStatus(`/api/commits/${config[&apos;name&apos;]}/last-reported?from=${minRevisionOrder}&amp;to=${maxRevisionOrder}`).then((result) =&gt; {

You probably want to assert that repositoryName doesn&apos;t contain special characters like /, %, etc...
In fact, you might wanna just URL escape the name or assert that it consists of [A-Za-z0-9\-_]

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:34
&gt; +                return this._addSubCommitInfoForBuild(builds, command[&apos;subCommitCommand&apos;]);

We should probably only call this if subCommitCommand is defined.

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:41
&gt; +    _calculateOrder(revision)

I think we usually call these &quot;computeX&quot;.

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:45
&gt; +        const major = parseInt(match[1]);

We should probably assert that the regular expression matches.
In fact, we probably want a test case for that.

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:52
&gt; +    _availableBuildsFromCommand(repositoryName, command, linesToIgnore, minOrder)

This name is a bit misleading since we&apos;re turning an array of commit dictionaries here. _commitsForAvailableBuilds?

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:54
&gt; +        return this._executeCommand(command[0], command.slice(1)).then((output) =&gt; {

I think we should take care of [0] and splitting thing in a newly added wrapper for child_process.

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:57
&gt; +            return lines.map((line) =&gt; {return {&apos;repository&apos;: repositoryName, &apos;revision&apos;: line, &apos;order&apos;: this._calculateOrder(line)}})

You can just do (line) =&gt; ({&apos;repository&apos;: repositoryName})
or even (revision) =&gt; ({repository, revision, order: ~}) if you renamed repositoryName to repository.

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:62
&gt; +    _executeCommand(commandFile, commandArguments)

Like as talked in person, this should probably be a separate class.

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:75
&gt; +    _addSubCommitInfoForBuild(commitInfo, command)

I think we should call the first argument commitList or commits.

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:91
&gt; +    fetchAndReportNewBuilds()

I think it&apos;s best to put this function at the top since it&apos;s a public interface.

&gt; Websites/perf.webkit.org/tools/pull-os-versions.js:48
&gt; +        osConfigList.forEacch(function(osConfig) {

Typo. I think it&apos;s better to use map here.

&gt; Websites/perf.webkit.org/tools/pull-os-versions.js:50
&gt; +            fetcherList.push(fetcher.fetchAndReportNewBuilds(serverConfig));

And just return the fetcher here instead of manually calling push.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1287350</commentid>
    <comment_count>3</comment_count>
      <attachid>304241</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-03-13 14:34:02 -0700</bug_when>
    <thetext>Comment on attachment 304241
patch

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

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:13
&gt; +class MockLogger {

think we should share the with the other test I had.

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:29
&gt; +        MockData.resetV3Models();

You don&apos;t need this.

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:52
&gt; +    const sampleSubCommit0 = {

Please call this otherSampleCommit or something instead of suffixing it with a number.

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:102
&gt; +        it(&apos;should calculate the right order for a given valid revision&apos;, done =&gt; {
&gt; +            new Promise((resolve, reject) =&gt; {

You don&apos;t need to have &quot;done&quot; argument here or wrap the tests in a promise.

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:114
&gt; +        it(&apos;should only return commits whose orders are higher than specified order&apos;, (done) =&gt; {

Instead of taking done here.

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:118
&gt; +            fetchter._availableBuildsFromCommand(&quot;OSX&quot;, [&quot;list&quot;, &quot;build1&quot;], &quot;^\\.*$&quot;, 1604000000).then((results) =&gt; {

Just return this promise.

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:127
&gt; +            done();

In particular, this test is broken because you&apos;re calling done before the promised returned by _availableBuildsFromCommand is resolved.

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:142
&gt; +                assert.equal(results[0][&apos;repository&apos;], sampleCommit[&apos;repository&apos;]);
&gt; +                assert.equal(results[0][&apos;revision&apos;], sampleCommit[&apos;revision&apos;]);

You can also do: assert.deepEqual to compare dictionaries / arrays.

&gt; Websites/perf.webkit.org/tools/pull-os-versions.js:26
&gt; +    global.AnalysisTask._fetchAllPromise = null;

You don&apos;t need any of these.

&gt; Websites/perf.webkit.org/tools/pull-os-versions.js:46
&gt; +    console.log(`Fetching the manifest...`);
&gt; +
&gt; +    Manifest.fetch().then(function () {

It seems like this whole step is completely unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1287979</commentid>
    <comment_count>4</comment_count>
      <attachid>304475</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-03-14 22:05:58 -0700</bug_when>
    <thetext>Created attachment 304475
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1287990</commentid>
    <comment_count>5</comment_count>
      <attachid>304475</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-03-14 22:48:54 -0700</bug_when>
    <thetext>Comment on attachment 304475
Patch

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

&gt; Websites/perf.webkit.org/public/include/commit-log-fetcher.php:88
&gt; +    function fetch_last_reported_between_orders($repository_id, $from=NULL, $to=NULL)

I don&apos;t think we should make $from and $to optional if the function name says between_orders.

&gt; Websites/perf.webkit.org/public/include/commit-log-fetcher.php:97
&gt; +        $statements = &apos;SELECT commit_id as &quot;id&quot;,
&gt; +            commit_revision as &quot;revision&quot;,
&gt; +            commit_previous_commit as &quot;previousCommit&quot;,
&gt; +            commit_time as &quot;time&quot;,
&gt; +            commit_order as &quot;order&quot;,
&gt; +            committer_name as &quot;authorName&quot;,
&gt; +            committer_account as &quot;authorEmail&quot;,
&gt; +            commit_message as &quot;message&quot;

Instead of repeating these names, we can just fetch * and then call format_single_commit.

&gt; Websites/perf.webkit.org/public/include/commit-log-fetcher.php:100
&gt; +        if ($from &amp;&amp; $to) {

Get rid of this if.

&gt; Websites/perf.webkit.org/public/include/commit-log-fetcher.php:103
&gt; +            $statements .= &apos; AND commit_order &gt;=&apos; . $from . &apos; AND commit_order &lt;= &apos; . $to . &apos; ORDER BY commit_order DESC LIMIT 1&apos;;

Please use $1 and $2 instead.

&gt; Websites/perf.webkit.org/public/include/commit-log-fetcher.php:112
&gt; +        foreach ($commits as &amp;$commit)
&gt; +            $commit[&apos;time&apos;] = Database::to_js_time($commit[&apos;time&apos;]);
&gt; +

This is in fact not fetching committer information so this API is kind of broken.

&gt; Websites/perf.webkit.org/server-tests/api-report-commits-tests.js:301
&gt; -    it(&quot;should distinguish between repositories with the asme name but with a different owner.&quot;, () =&gt; {
&gt; +    it(&quot;should distinguish between repositories with the same name but with a different owner.&quot;, function () {

Keep the arrow function.

&gt; Websites/perf.webkit.org/server-tests/resources/mock-subprocess.js:30
&gt; +        var originalSubprocess = global.Subprocess;

Use const.

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:35
&gt; +        &apos;WebKit&apos;: {
&gt; +            &apos;revision&apos;: &apos;141978&apos;,
&gt; +        }

Might wanna put this in a single line for simplicity.

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:41
&gt; +        &apos;WebKit&apos;: {
&gt; +            &apos;revision&apos;: &apos;141999&apos;,
&gt; +        }

Ditto.

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:50
&gt; +        &apos;WebKit&apos;: {
&gt; +            &apos;revision&apos;: &apos;142000&apos;,
&gt; +        },
&gt; +        &apos;JavaScriptCore&apos;: {
&gt; +            &apos;revision&apos;: &apos;142000&apos;,
&gt; +        }

Ditto.

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:106
&gt; +        it(&apos;should calculate the right order for a given valid revision&apos;, (done) =&gt; {

For sync tests, you don&apos;t need &quot;done&quot; at all.

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:134
&gt; +            const fetchCommitsPromise = fetchter._commitsForAvailableBuilds(&apos;OSX&apos;, [&apos;list&apos;, &apos;build1&apos;], &apos;^\\.*$&apos;, 1604000000);

Please declare a local variable like &quot;const minimumOrder = 1604000000&quot; so that the number doesn&apos;t look as mysterious.

&gt; Websites/perf.webkit.org/server-tests/tools-os-build-fetcher-tests.js:148
&gt; +                assert.equal(results.length, 2);
&gt; +                assert.equal(results[0][&apos;repository&apos;], &apos;OSX&apos;);
&gt; +                assert.equal(results[0][&apos;revision&apos;], &apos;16E321z&apos;);
&gt; +                assert.equal(results[0][&apos;order&apos;], 1604032126);
&gt; +                assert.equal(results[1][&apos;repository&apos;], &apos;OSX&apos;);
&gt; +                assert.equal(results[1][&apos;revision&apos;], &apos;16F321&apos;);
&gt; +                assert.equal(results[1][&apos;order&apos;], 1605032100);

You might wanna just do deepEqual here.

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:23
&gt; +        return Promise.all(customCommands.map(command =&gt; {

Nit: We usually wrap arguments in ().

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:29
&gt; +            let fetchCommitsPromise = this._remoteAPI.getJSONWithStatus(`/api/commits/${escape(repositoryName)}/last-reported?from=${minRevisionOrder}&amp;to=${maxRevisionOrder}`).then(result =&gt; {

I think we usually wrap argument in () for arrow functions as in (result) =&gt; {

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:45
&gt; +        const buildNameRegex = /(\d+)([a-zA-z])(\d+)([a-zA-z]*)/;

It should be A-Z, not A-z. You might wanna even add a test!

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:71
&gt; +        commits.forEach((commit) =&gt; {

I think it reads better to use &quot;for (let commit of commits)&quot;

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:75
&gt; +                        commit[&apos;subCommits&apos;] = JSON.parse(subCommitOutput);

I think we should verify that the content returned by the command in a good form.
We might wanna extract that as a separate function along with the call to _subprocess.execute.

And then use Array.prototype.reduce:
return commits.reduce((promise, commit) =&gt; {
    return promise.then(this._executeSubCommitCommand(command, commit[&apos;revision&apos;]));
}, Promise.resolve());

&gt; Websites/perf.webkit.org/tools/js/os-build-fetcher.js:89
&gt; +    fetchAndReportNewBuilds()

Again, please put this right after the constructor.

&gt; Websites/perf.webkit.org/tools/js/subprocess.js:5
&gt; +    call(command) {

We probably should not call this function &quot;call&quot; since we have https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call.
execute()?

&gt; Websites/perf.webkit.org/tools/pull-os-versions.js:30
&gt; +    // v3 models use the global RemoteAPI to access the perf dashboard.
&gt; +    global.RemoteAPI = new RemoteAPI(serverConfig.server);

You can just get rid of the global RemoteAPI here.
I don&apos;t any code uses it.

&gt; Websites/perf.webkit.org/tools/pull-os-versions.js:34
&gt; +    Promise.all(
&gt; +        osConfigList.map(osConfig =&gt; new OSBuildFetcher(osConfig, global.RemoteAPI, new Subprocess, serverConfig.slave, console))
&gt; +    ).catch(function (error) {

I think it reads better to put these three lines into one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288011</commentid>
    <comment_count>6</comment_count>
      <attachid>304487</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-03-15 00:52:43 -0700</bug_when>
    <thetext>Created attachment 304487
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288020</commentid>
    <comment_count>7</comment_count>
      <attachid>304487</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-15 01:35:10 -0700</bug_when>
    <thetext>Comment on attachment 304487
Patch for landing

Clearing flags on attachment: 304487

Committed r213976: &lt;http://trac.webkit.org/changeset/213976&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288021</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-15 01:35:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304241</attachid>
            <date>2017-03-13 01:30:33 -0700</date>
            <delta_ts>2017-03-14 22:05:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>file.patch</filename>
            <type>text/plain</type>
            <size>34012</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFuZ2VMb2cgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvQ2hhbmdlTG9nCmluZGV4IGFiMDViZmMuLmEzYmM3OGMgMTAwNjQ0
Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFuZ2VMb2cKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE3LTAzLTEzICBE
ZXdlaSBaaHUgIDxkZXdlaV96aHVAYXBwbGUuY29tPgorCisgICAgICAgIFJld3JpdGUgJ3B1bGwt
b3MtdmVyc2lvbnMnIHNjcmlwdCBpbiBKYXZhc2NyaXB0IHRvIGFkZCBzdXBwb3J0IGZvciByZXBv
cnRpbmcgb3MgcmV2aXNpb25zIHdpdGggc3ViIGNvbW1pdHMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk1NDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHRlbmQgL2FwaS9jb21taXRzLzxyZXBvc2l0
b3J5Pi9sYXN0LXJlcG9ydGVkIHRvIGFjY2VwdCBhIHJhbmdlIGFuZCByZXR1cm4gbGFzdCByZXBv
cnRlZCBjb21taXRzIGluIGdpdmVuIHJhbmdlLgorICAgICAgICBSZXdyaXRlICdwdWxsLW9zLXZl
cnNpb25zJyBpbiBKYXZhU2NyaXB0IGFuZCBhZGQgdW5pdCB0ZXN0cyBmb3IgaXQuCisKKyAgICAg
ICAgKiBwdWJsaWMvYXBpL2NvbW1pdHMucGhwOgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2Nv
bW1pdC1sb2ctZmV0Y2hlci5waHA6CisgICAgICAgICogc2VydmVyLXRlc3RzL2FwaS1jb21taXRz
LmpzOgorICAgICAgICAodGhlbik6CisgICAgICAgICogc2VydmVyLXRlc3RzL3Jlc291cmNlcy9t
b2NrLWNoaWxkLXByb2Nlc3MuanM6IEFkZGVkLgorICAgICAgICAoTW9ja0NoaWxkUHJvY2Vzcy5f
Y2FsY3VsYXRlS2V5KToKKyAgICAgICAgKE1vY2tDaGlsZFByb2Nlc3MuYWRkQ2FsbE1hcHBpbmcp
OgorICAgICAgICAoTW9ja0NoaWxkUHJvY2Vzcy5fbG9va3VwQ2FsbE1hcHBpbmcpOgorICAgICAg
ICAoTW9ja0NoaWxkUHJvY2Vzcy5jbGVhckNhbGxNYXBwaW5nKToKKyAgICAgICAgKE1vY2tDaGls
ZFByb2Nlc3MuZXhlY0ZpbGUpOgorICAgICAgICAqIHNlcnZlci10ZXN0cy90b29scy1vcy1idWls
ZC1mZXRjaGVyLXRlc3RzLmpzOiBBZGRlZC4KKyAgICAgICAgKE1vY2tMb2dnZXIpOgorICAgICAg
ICAoTW9ja0xvZ2dlci5wcm90b3R5cGUubG9nKToKKyAgICAgICAgKE1vY2tMb2dnZXIucHJvdG90
eXBlLmVycm9yKToKKyAgICAgICAgKGJlZm9yZUVhY2gpOgorICAgICAgICAoZG9uZS5uZXcuUHJv
bWlzZSk6CisgICAgICAgIChkb25lLjE2MDQwMDAwMDAudGhlbik6CisgICAgICAgIChkb25lLnN0
cmluZ19hcHBlYXJlZF9oZXJlLnRoZW4pOgorICAgICAgICAoZG9uZS5hZGRTbGF2ZUZvclJlcG9y
dC5lbXB0eVJlcG9ydC50aGVuKToKKyAgICAgICAgKGRvbmUudGhlbik6CisgICAgICAgICogdG9v
bHMvanMvb3MtYnVpbGQtZmV0Y2hlci5qczogQWRkZWQuCisgICAgICAgIChPU0J1aWxkRmV0Y2hl
cik6CisgICAgICAgIChPU0J1aWxkRmV0Y2hlci5wcm90b3R5cGUuX2ZldGNoQXZhaWxhYmxlQnVp
bGRzKToKKyAgICAgICAgKE9TQnVpbGRGZXRjaGVyLnByb3RvdHlwZS5fY2FsY3VsYXRlT3JkZXIp
OgorICAgICAgICAoT1NCdWlsZEZldGNoZXIucHJvdG90eXBlLl9hdmFpbGFibGVCdWlsZHNGcm9t
Q29tbWFuZC50aGVuKToKKyAgICAgICAgKE9TQnVpbGRGZXRjaGVyLnByb3RvdHlwZS5fYXZhaWxh
YmxlQnVpbGRzRnJvbUNvbW1hbmQpOgorICAgICAgICAoT1NCdWlsZEZldGNoZXIucHJvdG90eXBl
Ll9leGVjdXRlQ29tbWFuZCk6CisgICAgICAgIChPU0J1aWxkRmV0Y2hlci5wcm90b3R5cGUuX2Fk
ZFN1YkNvbW1pdEluZm9Gb3JCdWlsZCk6CisgICAgICAgIChPU0J1aWxkRmV0Y2hlci5wcm90b3R5
cGUuX3N1Ym1pdENvbW1pdHMpOgorICAgICAgICAoT1NCdWlsZEZldGNoZXIucHJvdG90eXBlLmZl
dGNoQW5kUmVwb3J0TmV3QnVpbGRzKToKKyAgICAgICAgKiB0b29scy9wdWxsLW9zLXZlcnNpb25z
LmpzOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAoc3luY0xvb3AuKToKKyAgICAg
ICAgKHN5bmNMb29wKToKKyAgICAgICAgKiB0b29scy9zeW5jLWNvbW1pdHMucHk6CisgICAgICAg
IChSZXBvc2l0b3J5LmZldGNoX2NvbW1pdHNfYW5kX3N1Ym1pdCk6CisKIDIwMTctMDMtMDcgIERl
d2VpIFpodSAgPGRld2VpX3podUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHRoZSBhYmlsaXR5
IHRvIHJlcG9ydCBhIGNvbW1pdCB3aXRoIHN1Yi1jb21taXRzLgpkaWZmIC0tZ2l0IGEvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hcGkvY29tbWl0cy5waHAgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL2FwaS9jb21taXRzLnBocAppbmRleCA4ODJjN2ViLi5hNmE0ZGI4
IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9jb21taXRz
LnBocAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9jb21taXRzLnBo
cApAQCAtMzIsNyArMzIsMTIgQEAgZnVuY3Rpb24gbWFpbigkcGF0aHMpIHsKICAgICB9IGVsc2Ug
aWYgKCRmaWx0ZXIgPT0gJ2xhdGVzdCcpIHsKICAgICAgICAgJGNvbW1pdHMgPSAkZmV0Y2hlci0+
ZmV0Y2hfbGF0ZXN0KCRyZXBvc2l0b3J5X2lkKTsKICAgICB9IGVsc2UgaWYgKCRmaWx0ZXIgPT0g
J2xhc3QtcmVwb3J0ZWQnKSB7Ci0gICAgICAgICRjb21taXRzID0gJGZldGNoZXItPmZldGNoX2xh
c3RfcmVwb3J0ZWQoJHJlcG9zaXRvcnlfaWQpOworICAgICAgICAkZnJvbSA9IGFycmF5X2dldCgk
X0dFVCwgJ2Zyb20nKTsKKyAgICAgICAgJHRvID0gYXJyYXlfZ2V0KCRfR0VULCAndG8nKTsKKyAg
ICAgICAgaWYgKCRmcm9tICYmICR0bykKKyAgICAgICAgICAgICRjb21taXRzID0gJGZldGNoZXIt
PmZldGNoX2xhc3RfcmVwb3J0ZWRfYmV0d2Vlbl9vcmRlcnMoJHJlcG9zaXRvcnlfaWQsICRmcm9t
LCAkdG8pOworICAgICAgICBlbHNlCisgICAgICAgICAgICAkY29tbWl0cyA9ICRmZXRjaGVyLT5m
ZXRjaF9sYXN0X3JlcG9ydGVkKCRyZXBvc2l0b3J5X2lkKTsKICAgICB9IGVsc2UgaWYgKGN0eXBl
X2FsbnVtKCRmaWx0ZXIpKSB7CiAgICAgICAgICRjb21taXRzID0gJGZldGNoZXItPmZldGNoX3Jl
dmlzaW9uKCRyZXBvc2l0b3J5X2lkLCAkZmlsdGVyKTsKICAgICB9IGVsc2UgeyAvLyBWMiBVSSBj
b21wYXRpYmlsaXR5LgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy9pbmNsdWRlL2NvbW1pdC1sb2ctZmV0Y2hlci5waHAgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocAppbmRleCAwZDQyMDVhLi45
ZTZmODA0IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1
ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocApAQCAtMzMsNyArMzMsOCBAQCBj
bGFzcyBDb21taXRMb2dGZXRjaGVyIHsKICAgICAgICAgcmV0dXJuICRyZXBvc2l0b3J5X3Jvd1sw
XVsncmVwb3NpdG9yeV9pZCddOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIGZldGNoX2JldHdlZW4o
JHJlcG9zaXRvcnlfaWQsICRmaXJzdCwgJHNlY29uZCwgJGtleXdvcmQgPSBOVUxMKSB7CisgICAg
ZnVuY3Rpb24gZmV0Y2hfYmV0d2VlbigkcmVwb3NpdG9yeV9pZCwgJGZpcnN0LCAkc2Vjb25kLCAk
a2V5d29yZCA9IE5VTEwpCisgICAgewogICAgICAgICAkc3RhdGVtZW50cyA9ICdTRUxFQ1QgY29t
bWl0X2lkIGFzICJpZCIsCiAgICAgICAgICAgICBjb21taXRfcmV2aXNpb24gYXMgInJldmlzaW9u
IiwKICAgICAgICAgICAgIGNvbW1pdF9wcmV2aW91c19jb21taXQgYXMgInByZXZpb3VzQ29tbWl0
IiwKQEAgLTgzLDYgKzg0LDM1IEBAIGNsYXNzIENvbW1pdExvZ0ZldGNoZXIgewogICAgICAgICBy
ZXR1cm4gJGNvbW1pdHM7CiAgICAgfQogCisgICAgIyBGSVhNRTogdGhpcyBpcyBub3QgRFJZLiBJ
ZGVhbGx5LCAkZGIgc2hvdWxkIHByb3ZpZGUgdGhlIGFiaWxpdHkgdG8gc2VhcmNoIHdpdGggY3Jp
dGVyaWEgdGhhdCBzcGVjaWZpZXMgYSBudWxsIGNvbHVtbi4KKyAgICBmdW5jdGlvbiBmZXRjaF9s
YXN0X3JlcG9ydGVkX2JldHdlZW5fb3JkZXJzKCRyZXBvc2l0b3J5X2lkLCAkZnJvbT1OVUxMLCAk
dG89TlVMTCkKKyAgICB7CisgICAgICAgICRzdGF0ZW1lbnRzID0gJ1NFTEVDVCBjb21taXRfaWQg
YXMgImlkIiwKKyAgICAgICAgICAgIGNvbW1pdF9yZXZpc2lvbiBhcyAicmV2aXNpb24iLAorICAg
ICAgICAgICAgY29tbWl0X3ByZXZpb3VzX2NvbW1pdCBhcyAicHJldmlvdXNDb21taXQiLAorICAg
ICAgICAgICAgY29tbWl0X3RpbWUgYXMgInRpbWUiLAorICAgICAgICAgICAgY29tbWl0X29yZGVy
IGFzICJvcmRlciIsCisgICAgICAgICAgICBjb21taXR0ZXJfbmFtZSBhcyAiYXV0aG9yTmFtZSIs
CisgICAgICAgICAgICBjb21taXR0ZXJfYWNjb3VudCBhcyAiYXV0aG9yRW1haWwiLAorICAgICAg
ICAgICAgY29tbWl0X21lc3NhZ2UgYXMgIm1lc3NhZ2UiCisgICAgICAgICAgICBGUk9NIGNvbW1p
dHMgTEVGVCBPVVRFUiBKT0lOIGNvbW1pdHRlcnMgT04gY29tbWl0X2NvbW1pdHRlciA9IGNvbW1p
dHRlcl9pZAorICAgICAgICAgICAgV0hFUkUgY29tbWl0X3JlcG9zaXRvcnkgPSAkMSBBTkQgY29t
bWl0X3JlcG9ydGVkID0gdHJ1ZSc7CisgICAgICAgIGlmICgkZnJvbSAmJiAkdG8pIHsKKyAgICAg
ICAgICAgICRmcm9tID0gaW50dmFsKCRmcm9tKTsKKyAgICAgICAgICAgICR0byA9IGludHZhbCgk
dG8pOworICAgICAgICAgICAgJHN0YXRlbWVudHMgLj0gJyBBTkQgY29tbWl0X29yZGVyID49ICcg
LiAkZnJvbSAuICcgQU5EIGNvbW1pdF9vcmRlciA8PSAnIC4gJHRvIC4gJyBPUkRFUiBCWSBjb21t
aXRfb3JkZXIgREVTQyBMSU1JVCAxJzsKKyAgICAgICAgfQorCisgICAgICAgICRjb21taXRzID0g
JHRoaXMtPmRiLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKCRzdGF0ZW1lbnRzLCBhcnJheSgkcmVwb3Np
dG9yeV9pZCkpOworICAgICAgICBpZiAoIWlzX2FycmF5KCRjb21taXRzKSkKKyAgICAgICAgICAg
IHJldHVybiBOVUxMOworCisgICAgICAgIGZvcmVhY2ggKCRjb21taXRzIGFzICYkY29tbWl0KQor
ICAgICAgICAgICAgJGNvbW1pdFsndGltZSddID0gRGF0YWJhc2U6OnRvX2pzX3RpbWUoJGNvbW1p
dFsndGltZSddKTsKKworICAgICAgICByZXR1cm4gJGNvbW1pdHM7CisgICAgfQorCiAgICAgZnVu
Y3Rpb24gZmV0Y2hfb2xkZXN0KCRyZXBvc2l0b3J5X2lkKSB7CiAgICAgICAgIHJldHVybiAkdGhp
cy0+Zm9ybWF0X3NpbmdsZV9jb21taXQoJHRoaXMtPmRiLT5zZWxlY3RfZmlyc3Rfcm93KCdjb21t
aXRzJywgJ2NvbW1pdCcsIGFycmF5KCdyZXBvc2l0b3J5JyA9PiAkcmVwb3NpdG9yeV9pZCksIGFy
cmF5KCd0aW1lJywgJ29yZGVyJykpKTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL2FwaS1jb21taXRzLmpzIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3NlcnZlci10ZXN0cy9hcGktY29tbWl0cy5qcwppbmRleCA0YzdjMDA2Li5iYjY4
MzM2IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL2Fw
aS1jb21taXRzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMv
YXBpLWNvbW1pdHMuanMKQEAgLTMwMiw2ICszMDIsNDcgQEAgZGVzY3JpYmUoIi9hcGkvY29tbWl0
cy8iLCAoKSA9PiB7CiAgICAgICAgIH0pOwogICAgIH0pOwogCisgICAgZGVzY3JpYmUoJy9hcGkv
Y29tbWl0cy88cmVwb3NpdG9yeT4vbGFzdC1yZXBvcnRlZD9mcm9tPTxzdGFydF9vcmRlcj4mdG89
PGVuZF9vcmRlcj4nLCAoKSA9PiB7CisgICAgICAgIGl0KCJzaG91bGQgcmV0dXJuIGEgbGlzdCBv
ZiBjb21taXQgaW4gZ2l2ZW4gdmFsaWQgb3JkZXIgcmFuZ2UiLCAoKSA9PiB7CisgICAgICAgICAg
ICBjb25zdCBkYiA9IFRlc3RTZXJ2ZXIuZGF0YWJhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBQ
cm9taXNlLmFsbChbCisgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdyZXBvc2l0b3JpZXMnLCB7
J2lkJzogMSwgJ25hbWUnOiAnT1NYJ30pLAorICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29t
bWl0cycsIHsncmVwb3NpdG9yeSc6IDEsICdyZXZpc2lvbic6ICdTaWVycmExNkM2NycsICdvcmRl
cic6IDM2NywgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgIGRiLmluc2VydCgn
Y29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEsICdyZXZpc2lvbic6ICdTaWVycmExNkM2OCcsICdv
cmRlcic6IDM2OCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgIGRiLmluc2Vy
dCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEsICdyZXZpc2lvbic6ICdTaWVycmExNkM2OScs
ICdvcmRlcic6IDM2OSwgJ3JlcG9ydGVkJzogZmFsc2V9KSwKKyAgICAgICAgICAgICAgICBkYi5p
bnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxLCAncmV2aXNpb24nOiAnU2llcnJhMTZE
MzInLCAnb3JkZXInOiA0MzIsICdyZXBvcnRlZCc6IHRydWV9KQorICAgICAgICAgICAgXSkudGhl
bigoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCku
Z2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MzY3JnRvPTM3MCcp
OworICAgICAgICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+IHsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwocmVzcG9uc2VbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgICAgICBj
b25zdCByZXN1bHRzID0gcmVzcG9uc2VbJ2NvbW1pdHMnXTsKKyAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwocmVzdWx0cy5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1p
dCA9IHJlc3VsdHNbMF07CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5yZXZp
c2lvbiwgJ1NpZXJyYTE2QzY4Jyk7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2Nv
bW1pdHMvT1NYL2xhc3QtcmVwb3J0ZWQ/ZnJvbT0zNzAmdG89MzY3Jyk7CisgICAgICAgICAgICB9
KS50aGVuKChyZXNwb25zZSkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXNw
b25zZVsnc3RhdHVzJ10sICdPSycpOworICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBy
ZXNwb25zZVsnY29tbWl0cyddOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRz
Lmxlbmd0aCwgMCk7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvT1NY
L2xhc3QtcmVwb3J0ZWQ/ZnJvbT0yMDAmdG89Mjk5Jyk7CisgICAgICAgICAgICB9KS50aGVuKChy
ZXNwb25zZSkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXNwb25zZVsnc3Rh
dHVzJ10sICdPSycpOworICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSByZXNwb25zZVsn
Y29tbWl0cyddOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRzLmxlbmd0aCwg
MCk7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
VGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvT1NYL2xhc3QtcmVw
b3J0ZWQ/ZnJvbT0zNjkmdG89NDMyJyk7CisgICAgICAgICAgICB9KS50aGVuKChyZXNwb25zZSkg
PT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXNwb25zZVsnc3RhdHVzJ10sICdP
SycpOworICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSByZXNwb25zZVsnY29tbWl0cydd
OworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRzLmxlbmd0aCwgMSk7CisgICAg
ICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gcmVzdWx0c1swXTsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwoY29tbWl0LnJldmlzaW9uLCAnU2llcnJhMTZEMzInKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKwogICAgIGRlc2NyaWJlKCcvYXBpL2NvbW1pdHMv
PHJlcG9zaXRvcnk+Lzxjb21taXQ+JywgKCkgPT4gewogICAgICAgICBpdCgic2hvdWxkIHJldHVy
biBSZXBvc2l0b3J5Tm90Rm91bmQgd2hlbiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgcmVwb3NpdG9y
eSIsICgpID0+IHsKICAgICAgICAgICAgIHJldHVybiBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdl
dEpTT04oJy9hcGkvY29tbWl0cy9XZWJLaXQvMjEwOTQ5JykudGhlbigocmVzcG9uc2UpID0+IHsK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvcmVzb3Vy
Y2VzL21vY2stY2hpbGQtcHJvY2Vzcy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2
ZXItdGVzdHMvcmVzb3VyY2VzL21vY2stY2hpbGQtcHJvY2Vzcy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi45NzkzMmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0cy9yZXNvdXJjZXMvbW9jay1jaGlsZC1wcm9jZXNz
LmpzCkBAIC0wLDAgKzEsMzYgQEAKK2xldCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKKwor
TW9ja0NoaWxkUHJvY2VzcyA9IHsKKyAgICBfY2FsY3VsYXRlS2V5IDogZnVuY3Rpb24oYmluRmls
ZSwgY29tbWFuZEFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lm
eShbYmluRmlsZV0uY29uY2F0KGNvbW1hbmRBcmd1bWVudHMpKTsKKyAgICB9LAorCisgICAgYWRk
Q2FsbE1hcHBpbmcgOiBmdW5jdGlvbihiaW5GaWxlLCBjb21tYW5kQXJndW1lbnRzLCBjb21tYW5k
T3V0cHV0KQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FsbE1hcHBpbmdbdGhpcy5fY2FsY3VsYXRl
S2V5KGJpbkZpbGUsIGNvbW1hbmRBcmd1bWVudHMpXSA9IGNvbW1hbmRPdXRwdXQ7CisgICAgfSwK
KworICAgIF9sb29rdXBDYWxsTWFwcGluZyA6IGZ1bmN0aW9uKGJpbkZpbGUsIGNvbW1hbmRBcmd1
bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fY2FsbE1hcHBpbmdbdGhpcy5fY2Fs
Y3VsYXRlS2V5KGJpbkZpbGUsIGNvbW1hbmRBcmd1bWVudHMpXTsKKyAgICB9LAorCisgICAgY2xl
YXJDYWxsTWFwcGluZyA6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NhbGxNYXBw
aW5nLmNsZWFyKCk7CisgICAgfSwKKworICAgIGV4ZWNGaWxlIDogZnVuY3Rpb24oYmluRmlsZSwg
Y29tbWFuZEFyZ3VtZW50cywgY2FsbGJhY2spCisgICAgeworICAgICAgICBjb25zdCBjb21tYW5k
T3V0cHV0ID0gdGhpcy5fbG9va3VwQ2FsbE1hcHBpbmcoYmluRmlsZSwgY29tbWFuZEFyZ3VtZW50
cyk7CisgICAgICAgIGFzc2VydChjb21tYW5kT3V0cHV0KTsKKyAgICAgICAgcmV0dXJuIGNhbGxi
YWNrKGNvbW1hbmRPdXRwdXRbJ2Vycm9yJ10sIGNvbW1hbmRPdXRwdXRbJ3N0ZG91dCddLCBjb21t
YW5kT3V0cHV0WydzdGRlcnInXSk7CisgICAgfSwKKworICAgIF9jYWxsTWFwcGluZyA6IG5ldyBN
YXAoKSwKK30KKworCitpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykKKyAgICBtb2R1
bGUuZXhwb3J0cyA9IE1vY2tDaGlsZFByb2Nlc3M7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLW9zLWJ1aWxkLWZldGNoZXItdGVzdHMuanMg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLW9zLWJ1aWxkLWZl
dGNoZXItdGVzdHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4NDVj
YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVz
dHMvdG9vbHMtb3MtYnVpbGQtZmV0Y2hlci10ZXN0cy5qcwpAQCAtMCwwICsxLDMwNCBAQAorJ3Vz
ZSBzdHJpY3QnOworCitjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKKworY29uc3Qg
T1NCdWlsZEZldGNoZXIgPSByZXF1aXJlKCcuLi90b29scy9qcy9vcy1idWlsZC1mZXRjaGVyLmpz
JykuT1NCdWlsZEZldGNoZXI7Citjb25zdCBNb2NrRGF0YSA9IHJlcXVpcmUoJy4vcmVzb3VyY2Vz
L21vY2stZGF0YS5qcycpOworY29uc3QgTW9ja1JlbW90ZUFQSSA9IHJlcXVpcmUoJy4uL3VuaXQt
dGVzdHMvcmVzb3VyY2VzL21vY2stcmVtb3RlLWFwaS5qcycpLk1vY2tSZW1vdGVBUEk7Citjb25z
dCBUZXN0U2VydmVyID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMvdGVzdC1zZXJ2ZXIuanMnKTsKK2Nv
bnN0IGFkZFNsYXZlRm9yUmVwb3J0ID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMvY29tbW9uLW9wZXJh
dGlvbnMuanMnKS5hZGRTbGF2ZUZvclJlcG9ydDsKK2NvbnN0IGNvbm5lY3RUb0RhdGFiYXNlSW5F
dmVyeVRlc3QgPSByZXF1aXJlKCcuL3Jlc291cmNlcy9jb21tb24tb3BlcmF0aW9ucy5qcycpLmNv
bm5lY3RUb0RhdGFiYXNlSW5FdmVyeVRlc3Q7Citjb25zdCBNb2NrQ2hpbGRQcm9jZXNzID0gcmVx
dWlyZSgnLi9yZXNvdXJjZXMvbW9jay1jaGlsZC1wcm9jZXNzJyk7CisKK2NsYXNzIE1vY2tMb2dn
ZXIgeworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xvZ3MgPSBbXTsK
KyAgICB9CisKKyAgICBsb2codGV4dCkgeyB0aGlzLl9sb2dzLnB1c2godGV4dCk7IH0KKyAgICBl
cnJvcih0ZXh0KSB7IHRoaXMuX2xvZ3MucHVzaCh0ZXh0KTsgfQorfQorCitkZXNjcmliZSgnT1NC
dWlsZEZldGNoZXInLCBmdW5jdGlvbiAoKSB7CisgICAgdGhpcy50aW1lb3V0KDEwMDApOworICAg
IFRlc3RTZXJ2ZXIuaW5qZWN0KCk7CisgICAgY29ubmVjdFRvRGF0YWJhc2VJbkV2ZXJ5VGVzdCgp
OworCisgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgIE1vY2tEYXRhLnJlc2V0
VjNNb2RlbHMoKTsKKyAgICAgICAgTW9ja1JlbW90ZUFQSS5yZXNldCgnaHR0cDovL2J1aWxkLndl
YmtpdC5vcmcnKTsKKyAgICAgICAgTW9ja0NoaWxkUHJvY2Vzcy5jbGVhckNhbGxNYXBwaW5nKCk7
CisgICAgfSk7CisKKyAgICBjb25zdCBlbXB0eVJlcG9ydCA9IHsKKyAgICAgICAgInNsYXZlTmFt
ZSI6ICJzb21lU2xhdmUiLAorICAgICAgICAic2xhdmVQYXNzd29yZCI6ICJzb21lUGFzc3dvcmQi
LAorICAgIH07CisKKyAgICBjb25zdCBzbGF2ZUF1dGggPSB7CisgICAgICAgICJuYW1lIjogInNv
bWVTbGF2ZSIsCisgICAgICAgICJwYXNzd29yZCI6ICJzb21lUGFzc3dvcmQiCisgICAgfTsKKwor
ICAgIGNvbnN0IHNhbXBsZVN1YkNvbW1pdCA9IHsKKyAgICAgICAgIldlYktpdCI6IHsKKyAgICAg
ICAgICAgICJyZXZpc2lvbiI6ICIxNDE5NzgiLAorICAgICAgICAgICAgImF1dGhvciI6IHsibmFt
ZSI6ICJDb21taXQgUXVldWUiLCAiYWNjb3VudCI6ICJjb21taXQtcXVldWVAd2Via2l0Lm9yZyJ9
LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiAiV2ViS2l0IENvbW1pdCIsCisgICAgICAgIH0KKyAg
ICB9OworCisgICAgY29uc3Qgc2FtcGxlU3ViQ29tbWl0MCA9IHsKKyAgICAgICAgIldlYktpdCI6
IHsKKyAgICAgICAgICAgICJyZXZpc2lvbiI6ICIxNDE5OTkiLAorICAgICAgICB9CisgICAgfTsK
KworICAgIGNvbnN0IHNhbXBsZVN1YkNvbW1pdDEgPSB7CisgICAgICAgICJXZWJLaXQiOiB7Cisg
ICAgICAgICAgICAicmV2aXNpb24iOiAiMTQyMDAwIiwKKyAgICAgICAgfSwKKyAgICAgICAgIkph
dmFTY3JpcHRDb3JlIjogeworICAgICAgICAgICAgInJldmlzaW9uIjogIjE0MjAwMCIsCisgICAg
ICAgIH0KKyAgICB9OworCisgICAgY29uc3Qgc2FtcGxlQ29tbWl0ID0geworICAgICAgICAicmVw
b3NpdG9yeSI6ICJPU1giLAorICAgICAgICAicmV2aXNpb24iOiAiU2llcnJhMTZEMzIiLAorICAg
ICAgICAib3JkZXIiOiAxNjAzMDAzMjAwCisgICAgfTsKKworICAgIGNvbnN0IHNhbXBsZUNvbW1p
dDAgPSB7CisgICAgICAgICJyZXBvc2l0b3J5IjogIk9TWCIsCisgICAgICAgICJyZXZpc2lvbiI6
ICJTaWVycmExNkUzMiIsCisgICAgICAgICJvcmRlciI6IDE2MDMwMDMyMDAKKyAgICB9OworCisK
KyAgICBjb25zdCBjb25maWcgPSB7CisgICAgICAgICduYW1lJzogJ09TWCcsCisgICAgICAgICdj
dXN0b21Db21tYW5kcyc6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiY29tbWFu
ZCI6IFsibGlzdCIsICJhbGwgb3N4IDE2RHh4IGJ1aWxkcyJdLAorICAgICAgICAgICAgICAgICJz
dWJDb21taXRDb21tYW5kIjogWyJsaXN0IiwgInN1YkNvbW1pdCIsICJmb3IiLCAicmV2aXNpb24i
XSwKKyAgICAgICAgICAgICAgICAibGluZXNUb0lnbm9yZSI6ICJeXFwuKiQiLAorICAgICAgICAg
ICAgICAgICJtaW5SZXZpc2lvbiI6ICJTaWVycmExNkQwIiwKKyAgICAgICAgICAgICAgICAibWF4
UmV2aXNpb24iOiAiU2llcnJhMTZEOTk5IgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAiY29tbWFuZCI6IFsibGlzdCIsICJhbGwgb3N4IDE2RXh4IGJ1aWxk
cyJdLAorICAgICAgICAgICAgICAgICJzdWJDb21taXRDb21tYW5kIjogWyJsaXN0IiwgInN1YkNv
bW1pdCIsICJmb3IiLCAicmV2aXNpb24iXSwKKyAgICAgICAgICAgICAgICAibGluZXNUb0lnbm9y
ZSI6ICJeXFwuKiQiLAorICAgICAgICAgICAgICAgICJtaW5SZXZpc2lvbiI6ICJTaWVycmExNkUw
IiwKKyAgICAgICAgICAgICAgICAibWF4UmV2aXNpb24iOiAiU2llcnJhMTZFOTk5IgorICAgICAg
ICAgICAgfQorICAgICAgICBdCisgICAgfTsKKworICAgIGRlc2NyaWJlKCdPU0J1aWxkZXJGZXRj
aGVyLl9jYWxjdWxhdGVPcmRlcicsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBjYWxjdWxh
dGUgdGhlIHJpZ2h0IG9yZGVyIGZvciBhIGdpdmVuIHZhbGlkIHJldmlzaW9uJywgZG9uZSA9PiB7
CisgICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICAg
ICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcigpOworICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChmZXRjaGVyLl9jYWxjdWxhdGVPcmRlcignU2llcnJhMTZEMzIn
KSwgMTYwMzAwMzIwMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGZldGNoZXIuX2Nh
bGN1bGF0ZU9yZGVyKCcxNkQzMjEnKSwgMTYwMzAzMjEwMCk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKGZldGNoZXIuX2NhbGN1bGF0ZU9yZGVyKCcxNkQzMjF6JyksIDE2MDMwMzIxMjYp
OworCisgICAgICAgICAgICAgICAgZG9uZSgpOworICAgICAgICAgICAgfSkuY2F0Y2goZG9uZSk7
CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ09TQnVpbGRlckZldGNoZXIu
X2F2YWlsYWJsZUJ1aWxkc0Zyb21Db21tYW5kJywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxk
IG9ubHkgcmV0dXJuIGNvbW1pdHMgd2hvc2Ugb3JkZXJzIGFyZSBoaWdoZXIgdGhhbiBzcGVjaWZp
ZWQgb3JkZXInLCAoZG9uZSkgPT4geworICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1v
Y2tMb2dnZXI7CisgICAgICAgICAgICBNb2NrQ2hpbGRQcm9jZXNzLmFkZENhbGxNYXBwaW5nKCJs
aXN0IiwgWyJidWlsZDEiXSwgeydlcnJvcic6IDAsICdzdGRvdXQnOiAiMTZEMzIxXG4xNkUzMjF6
XG5cbjE2RjMyMSIsICdzdGRlcnInOiBudWxsfSk7CisgICAgICAgICAgICBjb25zdCBmZXRjaHRl
ciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihudWxsLCBudWxsLCBudWxsLCBNb2NrQ2hpbGRQcm9jZXNz
LCBsb2dnZXIpOworICAgICAgICAgICAgZmV0Y2h0ZXIuX2F2YWlsYWJsZUJ1aWxkc0Zyb21Db21t
YW5kKCJPU1giLCBbImxpc3QiLCAiYnVpbGQxIl0sICJeXFwuKiQiLCAxNjA0MDAwMDAwKS50aGVu
KChyZXN1bHRzKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVu
Z3RoLCAyKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0c1swXVsncmVwb3Np
dG9yeSddLCAnT1NYJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHNbMF1b
J3JldmlzaW9uJ10sICcxNkUzMjF6Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
c3VsdHNbMF1bJ29yZGVyJ10sIDE2MDQwMzIxMjYpOworICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChyZXN1bHRzWzFdWydyZXBvc2l0b3J5J10sICdPU1gnKTsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwocmVzdWx0c1sxXVsncmV2aXNpb24nXSwgJzE2RjMyMScpOworICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRzWzFdWydvcmRlciddLCAxNjA1MDMyMTAwKTsKKyAg
ICAgICAgICAgIH0pLmNhdGNoKGRvbmUpOworICAgICAgICAgICAgZG9uZSgpOworICAgICAgICB9
KQorICAgIH0pCisKKyAgICBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXIuX2FkZFN1YkNvbW1pdElu
Zm9Gb3JCdWlsZCcsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBhZGQgc3ViLWNvbW1pdCBp
bmZvIGZvciBjb21taXRzJywgZG9uZSA9PiB7CisgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBu
ZXcgTW9ja0xvZ2dlcjsKKyAgICAgICAgICAgIGNvbnN0IGZldGNodGVyID0gbmV3IE9TQnVpbGRG
ZXRjaGVyKG51bGwsIG51bGwsIG51bGwsIE1vY2tDaGlsZFByb2Nlc3MsIGxvZ2dlcik7CisKKyAg
ICAgICAgICAgIE1vY2tDaGlsZFByb2Nlc3MuYWRkQ2FsbE1hcHBpbmcoInN1YkNvbW1pdCIsIFsi
Zm9yIiwgInJldmlzaW9uIiwgIlNpZXJyYTE2RDMyIl0sIHsnZXJyb3InOiAwLCAnc3Rkb3V0Jzog
SlNPTi5zdHJpbmdpZnkoc2FtcGxlU3ViQ29tbWl0KSwgJ3N0ZGVycic6IG51bGx9KTsKKyAgICAg
ICAgICAgIE1vY2tDaGlsZFByb2Nlc3MuYWRkQ2FsbE1hcHBpbmcoInN1YkNvbW1pdCIsIFsiZm9y
IiwgInJldmlzaW9uIiwgIlNpZXJyYTE2RTMyIl0sIHsnZXJyb3InOiAwLCAnc3Rkb3V0JzogSlNP
Ti5zdHJpbmdpZnkoc2FtcGxlU3ViQ29tbWl0MCksICdzdGRlcnInOiBudWxsfSk7CisKKyAgICAg
ICAgICAgIGZldGNodGVyLl9hZGRTdWJDb21taXRJbmZvRm9yQnVpbGQoW3NhbXBsZUNvbW1pdCwg
c2FtcGxlQ29tbWl0MF0sIFsic3ViQ29tbWl0IiwgImZvciIsICJyZXZpc2lvbiJdKS50aGVuKChy
ZXN1bHRzKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVuZ3Ro
LCAyKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0c1swXVsncmVwb3NpdG9y
eSddLCBzYW1wbGVDb21taXRbJ3JlcG9zaXRvcnknXSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3VsdHNbMF1bJ3JldmlzaW9uJ10sIHNhbXBsZUNvbW1pdFsncmV2aXNpb24nXSk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzBdWydzdWJDb21taXRz
J10sIHNhbXBsZVN1YkNvbW1pdCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3Vs
dHNbMV1bJ3JlcG9zaXRvcnknXSwgc2FtcGxlQ29tbWl0MFsncmVwb3NpdG9yeSddKTsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0c1sxXVsncmV2aXNpb24nXSwgc2FtcGxlQ29t
bWl0MFsncmV2aXNpb24nXSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1
bHRzWzFdWydzdWJDb21taXRzJ10sIHNhbXBsZVN1YkNvbW1pdDApOworCisgICAgICAgICAgICAg
ICAgZG9uZSgpOworICAgICAgICAgICAgfSkuY2F0Y2goZG9uZSk7CisgICAgICAgIH0pCisKKyAg
ICAgICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBjb21tYW5kIHRvIGdldCBzdWItY29tbWl0IGlu
Zm8gZmFpbHMnLCBkb25lID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2Nr
TG9nZ2VyOworICAgICAgICAgICAgY29uc3QgZmV0Y2h0ZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIo
bnVsbCwgbnVsbCwgbnVsbCwgTW9ja0NoaWxkUHJvY2VzcywgbG9nZ2VyKTsKKworICAgICAgICAg
ICAgTW9ja0NoaWxkUHJvY2Vzcy5hZGRDYWxsTWFwcGluZygic3ViQ29tbWl0IiwgWyJmb3IiLCAi
cmV2aXNpb24iLCAiU2llcnJhMTZEMzIiXSwgeydlcnJvcic6IDEsICdzdGRvdXQnOiBudWxsLCAn
c3RkZXJyJzogJ0ZhaWxlZCBnZXR0aW5nIHN1Yi1jb21taXQnfSk7CisgICAgICAgICAgICBNb2Nr
Q2hpbGRQcm9jZXNzLmFkZENhbGxNYXBwaW5nKCJzdWJDb21taXQiLCBbImZvciIsICJyZXZpc2lv
biIsICJTaWVycmExNkUzMiJdLCB7J2Vycm9yJzogMCwgJ3N0ZG91dCc6IEpTT04uc3RyaW5naWZ5
KHNhbXBsZVN1YkNvbW1pdDApLCAnc3RkZXJyJzogbnVsbH0pOworCisgICAgICAgICAgICBmZXRj
aHRlci5fYWRkU3ViQ29tbWl0SW5mb0ZvckJ1aWxkKFtzYW1wbGVDb21taXRdLCBbInN1YkNvbW1p
dCIsICJmb3IiLCAicmV2aXNpb24iXSkuY2F0Y2goZXJyb3Jfb3V0cHV0ID0+IHsKKyAgICAgICAg
ICAgICAgICBhc3NlcnQoZXJyb3Jfb3V0cHV0KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwoZXJyb3Jfb3V0cHV0LCAnRmFpbGVkIGdldHRpbmcgc3ViLWNvbW1pdCcpOworICAgICAgICAg
ICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAgIH0pLmNhdGNoKGRvbmUpOworICAgICAgICB9KQor
ICAgIH0pCisKKyAgICBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXIuZmV0Y2hBbmRSZXBvcnROZXdC
dWlsZHMnLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgcmVwb3J0IGFsbCBidWlsZCBjb21t
aXRzIHdpdGggc3ViLWNvbW1pdHMnLCBkb25lID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGxvZ2dl
ciA9IG5ldyBNb2NrTG9nZ2VyOworICAgICAgICAgICAgY29uc3QgZmV0Y2h0ZXIgPSBuZXcgT1NC
dWlsZEZldGNoZXIoY29uZmlnLCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLCBzbGF2ZUF1dGgsIE1v
Y2tDaGlsZFByb2Nlc3MsIGxvZ2dlcik7CisgICAgICAgICAgICBjb25zdCBkYiA9IFRlc3RTZXJ2
ZXIuZGF0YWJhc2UoKTsKKworICAgICAgICAgICAgTW9ja0NoaWxkUHJvY2Vzcy5hZGRDYWxsTWFw
cGluZygibGlzdCIsIFsiYWxsIG9zeCAxNkR4eCBidWlsZHMiXSwgeydlcnJvcic6IDAsICdzdGRv
dXQnOiAiXG5cblNpZXJyYTE2RDY4XG5TaWVycmExNkQ2OVxuIiwgJ3N0ZGVycic6IG51bGx9KTsK
KyAgICAgICAgICAgIE1vY2tDaGlsZFByb2Nlc3MuYWRkQ2FsbE1hcHBpbmcoImxpc3QiLCBbImFs
bCBvc3ggMTZFeHggYnVpbGRzIl0sIHsnZXJyb3InOiAwLCAnc3Rkb3V0JzogIlxuXG5TaWVycmEx
NkUzMlxuU2llcnJhMTZFMzNcblNpZXJyYTE2RTMzaFxuU2llcnJhMTZFMzQiLCAnc3RkZXJyJzog
bnVsbH0pOworICAgICAgICAgICAgTW9ja0NoaWxkUHJvY2Vzcy5hZGRDYWxsTWFwcGluZygibGlz
dCIsIFsic3ViQ29tbWl0IiwgImZvciIsICJyZXZpc2lvbiIsICJTaWVycmExNkQ2OSJdLCB7J2Vy
cm9yJzogMCwgJ3N0ZG91dCc6IEpTT04uc3RyaW5naWZ5KHNhbXBsZVN1YkNvbW1pdCksICdzdGRl
cnInOiBudWxsfSk7CisgICAgICAgICAgICBNb2NrQ2hpbGRQcm9jZXNzLmFkZENhbGxNYXBwaW5n
KCJsaXN0IiwgWyJzdWJDb21taXQiLCAiZm9yIiwgInJldmlzaW9uIiwgIlNpZXJyYTE2RTMzaCJd
LCB7J2Vycm9yJzogMCwgJ3N0ZG91dCc6IEpTT04uc3RyaW5naWZ5KHNhbXBsZVN1YkNvbW1pdDAp
LCAnc3RkZXJyJzogbnVsbH0pOworICAgICAgICAgICAgTW9ja0NoaWxkUHJvY2Vzcy5hZGRDYWxs
TWFwcGluZygibGlzdCIsIFsic3ViQ29tbWl0IiwgImZvciIsICJyZXZpc2lvbiIsICJTaWVycmEx
NkUzNCJdLCB7J2Vycm9yJzogMCwgJ3N0ZG91dCc6IEpTT04uc3RyaW5naWZ5KHNhbXBsZVN1YkNv
bW1pdDEpLCAnc3RkZXJyJzogbnVsbH0pOworCisgICAgICAgICAgICBhZGRTbGF2ZUZvclJlcG9y
dChlbXB0eVJlcG9ydCkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb21p
c2UuYWxsKFsKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdyZXBvc2l0b3JpZXMnLCB7
J2lkJzogMTAsICduYW1lJzogJ09TWCd9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0
KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkQ2Nycs
ICdvcmRlcic6IDE2MDMwMDY3MDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAg
ICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6
ICdTaWVycmExNkQ2OCcsICdvcmRlcic6IDE2MDMwMDY4MDAsICdyZXBvcnRlZCc6IHRydWV9KSwK
KyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5Jzog
MTAsICdyZXZpc2lvbic6ICdTaWVycmExNkQ2OScsICdvcmRlcic6IDE2MDMwMDY5MDAsICdyZXBv
cnRlZCc6IGZhbHNlfSksCisgICAgICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycs
IHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZFMzInLCAnb3JkZXInOiAx
NjA0MDAzMjAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAgICAgICAgIGRiLmlu
c2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZF
MzMnLCAnb3JkZXInOiAxNjA0MDAzMzAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAg
ICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNp
b24nOiAnU2llcnJhMTZFMzNnJywgJ29yZGVyJzogMTYwNDAwMzMwNywgJ3JlcG9ydGVkJzogdHJ1
ZX0pXSk7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvT1NYL2xhc3Qt
cmVwb3J0ZWQ/ZnJvbT0xNjAzMDAwMDAwJnRvPTE2MDMwOTk5MDAnKTsKKyAgICAgICAgICAgIH0p
LnRoZW4ocmVzdWx0ID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydj
b21taXRzJ10ubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0
Wydjb21taXRzJ11bMF1bJ3JldmlzaW9uJ10sICdTaWVycmExNkQ2OCcpOworICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwMzAwNjgw
MCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNP
TignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwNDAwMDAwMCZ0bz0xNjA0
MDk5OTAwJyk7CisgICAgICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2ll
cnJhMTZFMzNnJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0
cyddWzBdWydvcmRlciddLCAxNjA0MDAzMzA3KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmV0
Y2h0ZXIuX2ZldGNoQXZhaWxhYmxlQnVpbGRzKCk7CisgICAgICAgICAgICB9KS50aGVuKHJlc3Vs
dHMgPT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRzLmxlbmd0aCwgMyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNodGVyLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRz
KCk7CisgICAgICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlc3VsdFsnc3RhdHVzJ10sICdPSycpOworICAgICAgICAgICAgICAgIHJldHVy
biBQcm9taXNlLmFsbChbCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ3JlcG9z
aXRvcmllcycsIHsnbmFtZSc6ICdXZWJLaXQnfSksCisgICAgICAgICAgICAgICAgICAgIGRiLnNl
bGVjdFJvd3MoJ3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29yZSd9KSwKKyAg
ICAgICAgICAgICAgICAgICAgZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAn
U2llcnJhMTZENjknfSksCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ2NvbW1p
dHMnLCB7J3JldmlzaW9uJzogJ1NpZXJyYTE2RTMzaCd9KSwKKyAgICAgICAgICAgICAgICAgICAg
ZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZFMzQnfSldKTsK
KyAgICAgICAgICAgIH0pLnRoZW4ocmVzdWx0cyA9PiB7CisgICAgICAgICAgICAgICAgY29uc3Qg
d2Via2l0UmVwb3NpdG9yeSA9IHJlc3VsdHNbMF07CisgICAgICAgICAgICAgICAgY29uc3QganNj
UmVwb3NpdG9yeSA9IHJlc3VsdHNbMV07CisgICAgICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0
MTZENjkgPSByZXN1bHRzWzJdOworICAgICAgICAgICAgICAgIGNvbnN0IG9zeENvbW1pdDE2RTMz
aCA9IHJlc3VsdHNbM107CisgICAgICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0MTZFMzQgPSBy
ZXN1bHRzWzRdOworCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHdlYmtpdFJlcG9zaXRv
cnkubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwod2Via2l0UmVwb3Np
dG9yeVswXVsnb3duZXInXSwgMTApOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChqc2NS
ZXBvc2l0b3J5Lmxlbmd0aCwgMSkKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoanNjUmVw
b3NpdG9yeVswXVsnb3duZXInXSwgMTApOworCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG9zeENvbW1pdDE2RDY5Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG9zeENvbW1pdDE2RDY5WzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwob3N4Q29tbWl0MTZENjlbMF1bJ29yZGVyJ10sIDE2MDMwMDY5MDApOworCisg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMzaC5sZW5ndGgsIDEpOwor
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2hbMF1bJ3JlcG9zaXRv
cnknXSwgMTApOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2hb
MF1bJ29yZGVyJ10sIDE2MDQwMDMzMDgpOworCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG9zeENvbW1pdDE2RTM0Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG9zeENvbW1pdDE2RTM0WzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzRbMF1bJ29yZGVyJ10sIDE2MDQwMDM0MDApOworCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2Fw
aS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwMzAwMDAwMCZ0bz0xNjAzMDk5OTAw
Jyk7CisgICAgICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZE
NjknKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1b
J29yZGVyJ10sIDE2MDMwMDY5MDApOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2
ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zy
b209MTYwNDAwMDAwMCZ0bz0xNjA0MDk5OTAwJyk7CisgICAgICAgICAgICB9KS50aGVuKHJlc3Vs
dCA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxl
bmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cydd
WzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDQwMDM0MDApOworICAgICAg
ICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAgIH0pLmNhdGNoKGRvbmUpOworICAgICAgICB9
KQorCisgICAgICAgIGl0KCdzaG91bGQgc3RvcCByZXBvcnRpbmcgaWYgYW55IGN1c3RvbSBjb21t
YW5kIGZhaWxzJywgZG9uZSA9PiB7CisgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9j
a0xvZ2dlcjsKKyAgICAgICAgICAgIGNvbnN0IGZldGNodGVyID0gbmV3IE9TQnVpbGRGZXRjaGVy
KGNvbmZpZywgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBNb2NrQ2hpbGRQcm9j
ZXNzLCBsb2dnZXIpOworICAgICAgICAgICAgY29uc3QgZGIgPSBUZXN0U2VydmVyLmRhdGFiYXNl
KCk7CisKKyAgICAgICAgICAgIE1vY2tDaGlsZFByb2Nlc3MuYWRkQ2FsbE1hcHBpbmcoImxpc3Qi
LCBbImFsbCBvc3ggMTZEeHggYnVpbGRzIl0sIHsnZXJyb3InOiAwLCAnc3Rkb3V0JzogIlxuXG5T
aWVycmExNkQ2OFxuU2llcnJhMTZENjlcbiIsICdzdGRlcnInOiBudWxsfSk7CisgICAgICAgICAg
ICBNb2NrQ2hpbGRQcm9jZXNzLmFkZENhbGxNYXBwaW5nKCJsaXN0IiwgWyJhbGwgb3N4IDE2RXh4
IGJ1aWxkcyJdLCB7J2Vycm9yJzogMCwgJ3N0ZG91dCc6ICJcblxuU2llcnJhMTZFMzJcblNpZXJy
YTE2RTMzXG5TaWVycmExNkUzM2hcblNpZXJyYTE2RTM0IiwgJ3N0ZGVycic6IG51bGx9KTsKKyAg
ICAgICAgICAgIE1vY2tDaGlsZFByb2Nlc3MuYWRkQ2FsbE1hcHBpbmcoImxpc3QiLCBbInN1YkNv
bW1pdCIsICJmb3IiLCAicmV2aXNpb24iLCAiU2llcnJhMTZENjkiXSwgeydlcnJvcic6IDEsICdz
dGRvdXQnOiBudWxsLCAnc3RkZXJyJzogJ0NvbW1hbmQgZmFpbGVkJ30pOworICAgICAgICAgICAg
TW9ja0NoaWxkUHJvY2Vzcy5hZGRDYWxsTWFwcGluZygibGlzdCIsIFsic3ViQ29tbWl0IiwgImZv
ciIsICJyZXZpc2lvbiIsICJTaWVycmExNkUzM2giXSwgeydlcnJvcic6IDAsICdzdGRvdXQnOiBK
U09OLnN0cmluZ2lmeShzYW1wbGVTdWJDb21taXQwKSwgJ3N0ZGVycic6IG51bGx9KTsKKyAgICAg
ICAgICAgIE1vY2tDaGlsZFByb2Nlc3MuYWRkQ2FsbE1hcHBpbmcoImxpc3QiLCBbInN1YkNvbW1p
dCIsICJmb3IiLCAicmV2aXNpb24iLCAiU2llcnJhMTZFMzQiXSwgeydlcnJvcic6IDAsICdzdGRv
dXQnOiBKU09OLnN0cmluZ2lmeShzYW1wbGVTdWJDb21taXQxKSwgJ3N0ZGVycic6IG51bGx9KTsK
KworICAgICAgICAgICAgYWRkU2xhdmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQpLnRoZW4oKCkgPT4g
eworICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbCisgICAgICAgICAgICAgICAg
ICAgIGRiLmluc2VydCgncmVwb3NpdG9yaWVzJywgeydpZCc6IDEwLCAnbmFtZSc6ICdPU1gnfSks
CisgICAgICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6
IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZENjcnLCAnb3JkZXInOiAxNjAzMDA2NzAwLCAncmVw
b3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycs
IHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZENjgnLCAnb3JkZXInOiAx
NjAzMDA2ODAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAgICAgICAgIGRiLmlu
c2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZE
NjknLCAnb3JkZXInOiAxNjAzMDA2OTAwLCAncmVwb3J0ZWQnOiBmYWxzZX0pLAorICAgICAgICAg
ICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3Jldmlz
aW9uJzogJ1NpZXJyYTE2RTMyJywgJ29yZGVyJzogMTYwNDAwMzIwMCwgJ3JlcG9ydGVkJzogdHJ1
ZX0pLAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRv
cnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RTMzJywgJ29yZGVyJzogMTYwNDAwMzMwMCwg
J3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1p
dHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RTMzZycsICdvcmRl
cic6IDE2MDQwMDMzMDcsICdyZXBvcnRlZCc6IHRydWV9KV0pOworICAgICAgICAgICAgfSkudGhl
bigoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCku
Z2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwMzAwMDAwMCZ0
bz0xNjAzMDk5OTAwJyk7CisgICAgICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbidd
LCAnU2llcnJhMTZENjgnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydj
b21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMwMDY4MDApOworCisgICAgICAgICAgICAgICAgcmV0
dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0
LXJlcG9ydGVkP2Zyb209MTYwNDAwMDAwMCZ0bz0xNjA0MDk5OTAwJyk7CisgICAgICAgICAgICB9
KS50aGVuKHJlc3VsdCA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsn
Y29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3Vs
dFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZFMzNnJyk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjA0MDAz
MzA3KTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaHRlci5mZXRjaEFuZFJlcG9ydE5l
d0J1aWxkcygpOworICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3Jfb3V0cHV0ID0+IHsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQoZXJyb3Jfb3V0cHV0KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwoZXJyb3Jfb3V0cHV0LCAnQ29tbWFuZCBmYWlsZWQnKTsKKworICAgICAgICAgICAgICAg
IHJldHVybiBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gv
bGFzdC1yZXBvcnRlZD9mcm9tPTE2MDMwMDAwMDAmdG89MTYwMzA5OTkwMCcpOworICAgICAgICAg
ICAgfSkudGhlbihyZXN1bHQgPT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1
bHRbJ2NvbW1pdHMnXS5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChy
ZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RDY4Jyk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjAz
MDA2ODAwKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBUZXN0U2VydmVyLnJlbW90ZUFQSSgp
LmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDQwMDAwMDAm
dG89MTYwNDA5OTkwMCcpOworICAgICAgICAgICAgfSkudGhlbihyZXN1bHQgPT4geworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGgsIDEpOworICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24n
XSwgJ1NpZXJyYTE2RTMzZycpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRb
J2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwNDAwMzMwNyk7CisKKyAgICAgICAgICAgICAgICBk
b25lKCk7CisgICAgICAgICAgICB9KS5jYXRjaChkb25lKTsKKyAgICAgICAgfSkKKyAgICB9KQor
fSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3MtYnVp
bGQtZmV0Y2hlci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy9vcy1idWls
ZC1mZXRjaGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Nzg1YmIK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3Mt
YnVpbGQtZmV0Y2hlci5qcwpAQCAtMCwwICsxLDk5IEBACisndXNlIHN0cmljdCc7CisKK2xldCBh
c3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKKworcmVxdWlyZSgnLi92My1tb2RlbHMuanMnKTsK
KworbGV0IEJ1aWxkYm90U3luY2VyID0gcmVxdWlyZSgnLi9idWlsZGJvdC1zeW5jZXInKS5CdWls
ZGJvdFN5bmNlcjsKK2NsYXNzIE9TQnVpbGRGZXRjaGVyIHsKKyAgICBjb25zdHJ1Y3Rvcihvc0Nv
bmZpZywgcmVtb3RlQVBJLCBzbGF2ZUF1dGgsIGNoaWxkUHJvY2VzcywgbG9nZ2VyKQorICAgIHsK
KyAgICAgICAgdGhpcy5fb3NDb25maWcgPSBvc0NvbmZpZzsKKyAgICAgICAgdGhpcy5fcmVwb3J0
ZWRSZXZpc2lvbnMgPSBuZXcgU2V0KCk7CisgICAgICAgIHRoaXMuX2xvZ2dlciA9IGxvZ2dlcjsK
KyAgICAgICAgdGhpcy5fc2xhdmVBdXRoID0gc2xhdmVBdXRoOworICAgICAgICB0aGlzLl9yZW1v
dGVBUEkgPSByZW1vdGVBUEk7CisgICAgICAgIHRoaXMuX2NoaWxkUHJvY2VzcyA9IGNoaWxkUHJv
Y2VzczsKKyAgICB9CisKKyAgICBfZmV0Y2hBdmFpbGFibGVCdWlsZHMoKQorICAgIHsKKyAgICAg
ICAgY29uc3QgcmVwb3NpdG9yeU5hbWUgPSB0aGlzLl9vc0NvbmZpZ1snbmFtZSddOworICAgICAg
ICBjb25zdCBjb25maWcgPSB0aGlzLl9vc0NvbmZpZzsKKyAgICAgICAgYXNzZXJ0KGNvbmZpZ1sn
Y3VzdG9tQ29tbWFuZHMnXSk7CisgICAgICAgIGxldCBjdXN0b21Db21tYW5kcyA9IGNvbmZpZ1sn
Y3VzdG9tQ29tbWFuZHMnXTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGN1c3RvbUNvbW1h
bmRzLm1hcChjb21tYW5kID0+IHsKKyAgICAgICAgICAgIGFzc2VydChjb21tYW5kWydtaW5SZXZp
c2lvbiddKTsKKyAgICAgICAgICAgIGFzc2VydChjb21tYW5kWydtYXhSZXZpc2lvbiddKTsKKyAg
ICAgICAgICAgIGNvbnN0IG1pblJldmlzaW9uT3JkZXIgPSB0aGlzLl9jYWxjdWxhdGVPcmRlcihj
b21tYW5kWydtaW5SZXZpc2lvbiddKTsKKyAgICAgICAgICAgIGNvbnN0IG1heFJldmlzaW9uT3Jk
ZXIgPSB0aGlzLl9jYWxjdWxhdGVPcmRlcihjb21tYW5kWydtYXhSZXZpc2lvbiddKTsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9yZW1vdGVBUEkuZ2V0SlNPTldpdGhTdGF0dXMoYC9hcGkvY29t
bWl0cy8ke2NvbmZpZ1snbmFtZSddfS9sYXN0LXJlcG9ydGVkP2Zyb209JHttaW5SZXZpc2lvbk9y
ZGVyfSZ0bz0ke21heFJldmlzaW9uT3JkZXJ9YCkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAg
ICAgICAgICAgY29uc3QgbWluT3JkZXIgPSByZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGggPT0gMSA/
IHBhcnNlSW50KHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddKSA6IDA7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZUJ1aWxkc0Zyb21Db21tYW5kKHJlcG9zaXRvcnlO
YW1lLCBjb21tYW5kWydjb21tYW5kJ10sIGNvbW1hbmRbJ2xpbmVzVG9JZ25vcmUnXSwgbWluT3Jk
ZXIpOworICAgICAgICAgICAgfSkudGhlbihidWlsZHMgPT4geworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9hZGRTdWJDb21taXRJbmZvRm9yQnVpbGQoYnVpbGRzLCBjb21tYW5kWydzdWJD
b21taXRDb21tYW5kJ10pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pKS50aGVuKHJlc3Vs
dHMgPT4geworICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHko
W10sIHJlc3VsdHMpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBfY2FsY3VsYXRlT3JkZXIo
cmV2aXNpb24pCisgICAgeworICAgICAgICBjb25zdCBidWlsZE5hbWVSZWdleCA9IC8oXGQrKShc
dykoXGQrKShcdyopLzsKKyAgICAgICAgY29uc3QgbWF0Y2ggPSBidWlsZE5hbWVSZWdleC5leGVj
KHJldmlzaW9uKTsKKyAgICAgICAgY29uc3QgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSk7Cisg
ICAgICAgIGNvbnN0IGtpbmQgPSBtYXRjaFsyXS50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCkg
LSAiQSIuY2hhckNvZGVBdCgwKTsKKyAgICAgICAgY29uc3QgbWlub3IgPSBwYXJzZUludChtYXRj
aFszXSk7CisgICAgICAgIGNvbnN0IHZhcmlhbnQgPSBtYXRjaFs0XSA/IG1hdGNoWzRdLnRvVXBw
ZXJDYXNlKCkuY2hhckNvZGVBdCgwKSAtICJBIi5jaGFyQ29kZUF0KDApICsgMSA6IDA7CisgICAg
ICAgIHJldHVybiAoKG1ham9yICogMTAwICsga2luZCkgKiAxMDAwMCArIG1pbm9yKSAqIDEwMCAr
IHZhcmlhbnQ7CisgICAgfQorCisgICAgX2F2YWlsYWJsZUJ1aWxkc0Zyb21Db21tYW5kKHJlcG9z
aXRvcnlOYW1lLCBjb21tYW5kLCBsaW5lc1RvSWdub3JlLCBtaW5PcmRlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9leGVjdXRlQ29tbWFuZChjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNl
KDEpKS50aGVuKChvdXRwdXQpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJl
Z0V4cChsaW5lc1RvSWdub3JlKTsKKyAgICAgICAgICAgIGxldCBsaW5lcyA9IG91dHB1dC5zcGxp
dCgnXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge3JldHVybiAhcmVnZXguZXhlYyhsaW5lKTt9
KTsKKyAgICAgICAgICAgIHJldHVybiBsaW5lcy5tYXAoKGxpbmUpID0+IHtyZXR1cm4geydyZXBv
c2l0b3J5JzogcmVwb3NpdG9yeU5hbWUsICdyZXZpc2lvbic6IGxpbmUsICdvcmRlcic6IHRoaXMu
X2NhbGN1bGF0ZU9yZGVyKGxpbmUpfX0pCisgICAgICAgICAgICAgICAgLmZpbHRlcigoaW5mbykg
PT4ge3JldHVybiBpbmZvWydvcmRlciddID4gbWluT3JkZXI7fSk7CisgICAgICAgIH0pOworICAg
IH0KKworICAgIF9leGVjdXRlQ29tbWFuZChjb21tYW5kRmlsZSwgY29tbWFuZEFyZ3VtZW50cykK
KyAgICB7CisgICAgICAgIHRoaXMuX2xvZ2dlci5sb2coYEV4ZWN1dGluZyBjb21tYW5kcywgYmlu
YXJ5IGZpbGU6ICIke2NvbW1hbmRGaWxlfSIgd2l0aCBhcmd1bWVudHM6ICIke2NvbW1hbmRBcmd1
bWVudHN9ImApOworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkg
PT4geworICAgICAgICAgICAgdGhpcy5fY2hpbGRQcm9jZXNzLmV4ZWNGaWxlKGNvbW1hbmRGaWxl
LCBjb21tYW5kQXJndW1lbnRzLCAoZXJyb3IsIHN0ZG91dCwgc3RkZXJyKSA9PiB7CisgICAgICAg
ICAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgICAgICAgICByZWplY3Qoc3RkZXJyKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3Rkb3V0
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBfYWRkU3ViQ29t
bWl0SW5mb0ZvckJ1aWxkKGNvbW1pdEluZm8sIGNvbW1hbmQpCisgICAgeworICAgICAgICByZXR1
cm4gUHJvbWlzZS5hbGwoY29tbWl0SW5mby5tYXAoKHNpbmdsZUNvbW1pdEluZm8pID0+IHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9leGVjdXRlQ29tbWFuZChjb21tYW5kWzBdLCBjb21tYW5k
LnNsaWNlKDEpLmNvbmNhdChzaW5nbGVDb21taXRJbmZvWydyZXZpc2lvbiddKSkudGhlbigoc3Vi
Q29tbWl0T3V0cHV0KSA9PiB7CisgICAgICAgICAgICAgICAgc2luZ2xlQ29tbWl0SW5mb1snc3Vi
Q29tbWl0cyddID0gSlNPTi5wYXJzZShzdWJDb21taXRPdXRwdXQpOworICAgICAgICAgICAgICAg
IHJldHVybiBzaW5nbGVDb21taXRJbmZvOworICAgICAgICAgICAgfSkKKyAgICAgICAgfSkpOwor
ICAgIH0KKworICAgIF9zdWJtaXRDb21taXRzKGNvbW1pdEluZm8pCisgICAgeworICAgICAgICBj
b25zdCBjb21taXRzID0geyJzbGF2ZU5hbWUiOiB0aGlzLl9zbGF2ZUF1dGhbJ25hbWUnXSwgInNs
YXZlUGFzc3dvcmQiOiB0aGlzLl9zbGF2ZUF1dGhbJ3Bhc3N3b3JkJ10sICdjb21taXRzJzogY29t
bWl0SW5mb307CisgICAgICAgIHJldHVybiB0aGlzLl9yZW1vdGVBUEkucG9zdEpTT05XaXRoU3Rh
dHVzKCcvYXBpL3JlcG9ydC1jb21taXRzLycsIGNvbW1pdHMpOworICAgIH0KKworICAgIGZldGNo
QW5kUmVwb3J0TmV3QnVpbGRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9mZXRjaEF2
YWlsYWJsZUJ1aWxkcygpLnRoZW4oKHJlc3VsdHMpID0+eworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3N1Ym1pdENvbW1pdHMocmVzdWx0cyk7CisgICAgICAgIH0pOworICAgIH0KK30KK2lmICh0
eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnKQorICAgIG1vZHVsZS5leHBvcnRzLk9TQnVpbGRG
ZXRjaGVyID0gT1NCdWlsZEZldGNoZXI7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvdG9vbHMvcHVsbC1vcy12ZXJzaW9ucy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy90b29scy9wdWxsLW9zLXZlcnNpb25zLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjQ3OGQ0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvdG9vbHMvcHVsbC1vcy12ZXJzaW9ucy5qcwpAQCAtMCwwICsxLDY0IEBACisjIS91c3IvbG9j
YWwvYmluL25vZGUKKyd1c2Ugc3RyaWN0JzsKKworCitsZXQgT1NCdWlsZEZldGNoZXIgPSByZXF1
aXJlKCcuL2pzL29zLWJ1aWxkLWZldGNoZXIuanMnKS5CdWlsZGJvdFRyaWdnZXJhYmxlOworbGV0
IFJlbW90ZUFQSSA9IHJlcXVpcmUoJy4vanMvcmVtb3RlLmpzJykuUmVtb3RlQVBJOworbGV0IGZz
ID0gcmVxdWlyZSgnZnMnKTsKK2xldCBwYXJzZUFyZ3VtZW50cyA9IHJlcXVpcmUoJy4vanMvcGFy
c2UtYXJndW1lbnRzLmpzJykucGFyc2VBcmd1bWVudHM7CisKK2Z1bmN0aW9uIG1haW4oYXJndikK
K3sKKyAgICBsZXQgb3B0aW9ucyA9IHBhcnNlQXJndW1lbnRzKGFyZ3YsIFsKKyAgICAgICAge25h
bWU6ICctLW9zLWNvbmZpZy1qc29uJywgcmVxdWlyZWQ6IHRydWV9LAorICAgICAgICB7bmFtZTog
Jy0tc2VydmVyLWNvbmZpZy1qc29uJywgcmVxdWlyZWQ6IHRydWV9LAorICAgICAgICB7bmFtZTog
Jy0tc2Vjb25kcy10by1zbGVlcCcsIHR5cGU6IHBhcnNlRmxvYXQsIGRlZmF1bHQ6IDQzMjAwfSwK
KyAgICBdKTsKKyAgICBpZiAoIW9wdGlvbnMpCisgICAgICAgIHJldHVybjsKKworICAgIHN5bmNM
b29wKG9wdGlvbnMpOworfQorCitmdW5jdGlvbiBzeW5jTG9vcChvcHRpb25zKQoreworICAgIC8v
IEZJWE1FOiBGaXggTWFuaWZlc3QuZmV0Y2goKSB0byB1c2UgZW5zdXJlU2luZ2xldG9uIHRvIGNy
ZWF0ZSBtb2RlbCBvYmplY3RzLgorICAgIGdsb2JhbC5BbmFseXNpc1Rhc2suX2ZldGNoQWxsUHJv
bWlzZSA9IG51bGw7CisgICAgZ2xvYmFsLkFuYWx5c2lzVGFzay5jbGVhclN0YXRpY01hcCgpOwor
ICAgIGdsb2JhbC5CdWlsZFJlcXVlc3QuY2xlYXJTdGF0aWNNYXAoKTsKKyAgICBnbG9iYWwuQ29t
bWl0TG9nLmNsZWFyU3RhdGljTWFwKCk7CisgICAgZ2xvYmFsLk1ldHJpYy5jbGVhclN0YXRpY01h
cCgpOworICAgIGdsb2JhbC5QbGF0Zm9ybS5jbGVhclN0YXRpY01hcCgpOworICAgIGdsb2JhbC5S
ZXBvc2l0b3J5LmNsZWFyU3RhdGljTWFwKCk7CisgICAgZ2xvYmFsLlJvb3RTZXQuY2xlYXJTdGF0
aWNNYXAoKTsKKyAgICBnbG9iYWwuVGVzdC5jbGVhclN0YXRpY01hcCgpOworICAgIGdsb2JhbC5U
ZXN0R3JvdXAuY2xlYXJTdGF0aWNNYXAoKTsKKyAgICBnbG9iYWwuVHJpZ2dlcmFibGUuY2xlYXJT
dGF0aWNNYXAoKTsKKworICAgIGxldCBvc0NvbmZpZ0xpc3QgPSBKU09OLnBhcnNlKGZzLnJlYWRG
aWxlU3luYyhvcHRpb25zWyctLW9zLWNvbmZpZy1qc29uJ10sICd1dGY4JykpOworICAgIGxldCBz
ZXJ2ZXJDb25maWcgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhvcHRpb25zWyctLXNlcnZl
ci1jb25maWctanNvbiddLCAndXRmOCcpKTsKKworICAgIC8vIHYzIG1vZGVscyB1c2UgdGhlIGds
b2JhbCBSZW1vdGVBUEkgdG8gYWNjZXNzIHRoZSBwZXJmIGRhc2hib2FyZC4KKyAgICBnbG9iYWwu
UmVtb3RlQVBJID0gbmV3IFJlbW90ZUFQSShzZXJ2ZXJDb25maWcuc2VydmVyKTsKKworICAgIGNv
bnNvbGUubG9nKGBGZXRjaGluZyB0aGUgbWFuaWZlc3QuLi5gKTsKKworICAgIE1hbmlmZXN0LmZl
dGNoKCkudGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgIGxldCBmZXRjaGVyTGlzdCA9IFtdOwor
ICAgICAgICBvc0NvbmZpZ0xpc3QuZm9yRWFjY2goZnVuY3Rpb24ob3NDb25maWcpIHsKKyAgICAg
ICAgICAgIGxldCBmZXRjaGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKG9zQ29uZmlnLCBnbG9iYWwu
UmVtb3RlQVBJLCBzZXJ2ZXJDb25maWcuc2xhdmUsIGNvbnNvbGUpOworICAgICAgICAgICAgZmV0
Y2hlckxpc3QucHVzaChmZXRjaGVyLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzKHNlcnZlckNvbmZp
ZykpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZldGNoZXJMaXN0
KTsKKyAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAgICAgY29uc29sZS5lcnJv
cihlcnJvcik7CisgICAgICAgIGlmICh0eXBlb2YoZXJyb3Iuc3RhY2spID09ICdzdHJpbmcnKSB7
CisgICAgICAgICAgICBmb3IgKGxldCBsaW5lIG9mIGVycm9yLnN0YWNrLnNwbGl0KCdcbicpKQor
ICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobGluZSk7CisgICAgICAgIH0KKyAgICB9KS50
aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgc2V0VGltZW91dChzeW5jTG9vcC5iaW5kKGdsb2Jh
bCwgb3B0aW9ucyksIG9wdGlvbnNbJy0tc2Vjb25kcy10by1zbGVlcCddICogMTAwMCk7CisgICAg
fSk7Cit9CisKK21haW4ocHJvY2Vzcy5hcmd2KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy90b29scy9zeW5jLWNvbW1pdHMucHkgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvdG9vbHMvc3luYy1jb21taXRzLnB5CmluZGV4IGE5NmVhMjMuLmE4M2M4ZTAgMTAwNzU1Ci0t
LSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9zeW5jLWNvbW1pdHMucHkKKysrIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL3N5bmMtY29tbWl0cy5weQpAQCAtNTksNyAr
NTksNyBAQCBjbGFzcyBSZXBvc2l0b3J5KG9iamVjdCk6CiAKICAgICBkZWYgZmV0Y2hfY29tbWl0
c19hbmRfc3VibWl0KHNlbGYsIHNlcnZlcl9jb25maWcsIG1heF9mZXRjaF9jb3VudCwgbWF4X2Fu
Y2VzdG9yX2ZldGNoX2NvdW50KToKICAgICAgICAgaWYgbm90IHNlbGYuX2xhc3RfZmV0Y2hlZDoK
LSAgICAgICAgICAgIHByaW50ICJEZXRlcm1pbmluZyB0aGUgc3RhdGluZyByZXZpc2lvbiBmb3Ig
JXMiICUgc2VsZi5fbmFtZQorICAgICAgICAgICAgcHJpbnQgIkRldGVybWluaW5nIHRoZSBzdGFy
dGluZyByZXZpc2lvbiBmb3IgJXMiICUgc2VsZi5fbmFtZQogICAgICAgICAgICAgc2VsZi5fbGFz
dF9mZXRjaGVkID0gc2VsZi5kZXRlcm1pbmVfbGFzdF9yZXBvcnRlZF9yZXZpc2lvbihzZXJ2ZXJf
Y29uZmlnKQogCiAgICAgICAgIHBlbmRpbmdfY29tbWl0cyA9IFtdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304475</attachid>
            <date>2017-03-14 22:05:58 -0700</date>
            <delta_ts>2017-03-15 00:52:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169542-20170314220558.patch</filename>
            <type>text/plain</type>
            <size>56794</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEzOTcxCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBlZTk4ZDZiMDVkNzM0MjhmMTYyNWE3ZjkyNDNiNmJjYTNmODVjNTkzLi5iNmZlMmMzMDQ2
Y2NiYzMzNWQzMDU3Yzk5ZjcyODdiMzM5ZTk5ODM2IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw2MSBAQAorMjAxNy0wMy0xNCAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXdyaXRlICdwdWxsLW9zLXZlcnNpb25zJyBzY3JpcHQg
aW4gSmF2YXNjcmlwdCB0byBhZGQgc3VwcG9ydCBmb3IgcmVwb3J0aW5nIG9zIHJldmlzaW9ucyB3
aXRoIHN1YiBjb21taXRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisg
ICAgICAgIEV4dGVuZCAnL2FwaS9jb21taXRzLzxyZXBvc2l0b3J5Pi9sYXN0LXJlcG9ydGVkJyB0
byBhY2NlcHQgYSByYW5nZSBhbmQgcmV0dXJuIGxhc3QgcmVwb3J0ZWQgY29tbWl0cyBpbiBnaXZl
biByYW5nZS4KKyAgICAgICAgUmV3cml0ZSAncHVsbC1vcy12ZXJzaW9ucycgaW4gSmF2YVNjcmlw
dCBhbmQgYWRkIHVuaXQgdGVzdHMgZm9yIGl0LgorICAgICAgICBJbnN0ZWFkIG9mIHdyaXRpbmcg
cXVlcnkgbWFudWFsbHkgd2hpbGUgc2VhcmNoaW5nIGNyaXRlcmlhIGNvbnRhaW5zIG51bGwgY29s
dW1ucywgdXNlIHRoZSBtZXRob2RzIHByb3ZpZGVkIGluICdkYi5waHAnLgorICAgICAgICBBZGQg
Jy5naXRpZ25vcmUnIGZpbGUgdG8gb21taXQgZmlsZXMgZ2VuZXJhdGVkIGJ5IHdoaWxlIHJ1bm5p
bmcgdGVzdHMvaW5zdGFuY2VzIGxvY2FsbHkuCisKKyAgICAgICAgKiAuZ2l0aWdub3JlOiBBZGRl
ZC4KKyAgICAgICAgKiBwdWJsaWMvYXBpL2NvbW1pdHMucGhwOgorICAgICAgICAqIHB1YmxpYy9h
cGkvcmVwb3J0LWNvbW1pdHMucGhwOgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2NvbW1pdC1s
b2ctZmV0Y2hlci5waHA6IFVzZSAKKyAgICAgICAgKiBwdWJsaWMvaW5jbHVkZS9kYi5waHA6ICdu
dWxsX2NvbHVtbnMnIG9mIHByZXBhcmVfcGFyYW1zIHNob3VsZCBiZSBhIHJlZmVyZW5jZS4KKyAg
ICAgICAgKiBwdWJsaWMvaW5jbHVkZS9yZXBvcnQtcHJvY2Vzc29yLnBocDoKKyAgICAgICAgKiBz
ZXJ2ZXItdGVzdHMvYXBpLWNvbW1pdHMuanM6CisgICAgICAgICh0aGVuKToKKyAgICAgICAgKiBz
ZXJ2ZXItdGVzdHMvYXBpLXJlcG9ydC1jb21taXRzLXRlc3RzLmpzOgorICAgICAgICAqIHNlcnZl
ci10ZXN0cy9yZXNvdXJjZXMvbW9jay1sb2dnZXIuanM6IEFkZGVkLgorICAgICAgICAoTW9ja0xv
Z2dlcik6CisgICAgICAgIChNb2NrTG9nZ2VyLnByb3RvdHlwZS5sb2cpOgorICAgICAgICAoTW9j
a0xvZ2dlci5wcm90b3R5cGUuZXJyb3IpOgorICAgICAgICAqIHNlcnZlci10ZXN0cy9yZXNvdXJj
ZXMvbW9jay1zdWJwcm9jZXNzLmpzOiBBZGRlZC4KKyAgICAgICAgKE1vY2tTdWJwcm9jZXNzLmNh
bGwpOgorICAgICAgICAoTW9ja1N1YnByb2Nlc3Mud2FpdGluZ0Zvckludm9jYXRpb24pOgorICAg
ICAgICAoTW9ja1N1YnByb2Nlc3MuaW5qZWN0KToKKyAgICAgICAgKE1vY2tTdWJwcm9jZXNzLnJl
c2V0KToKKyAgICAgICAgKiBzZXJ2ZXItdGVzdHMvdG9vbHMtYnVpbGRib3QtdHJpZ2dlcmFibGUt
dGVzdHMuanM6CisgICAgICAgIChNb2NrTG9nZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKE1vY2tM
b2dnZXIucHJvdG90eXBlLmxvZyk6IERlbGV0ZWQuCisgICAgICAgIChNb2NrTG9nZ2VyLnByb3Rv
dHlwZS5lcnJvcik6IERlbGV0ZWQuCisgICAgICAgICogc2VydmVyLXRlc3RzL3Rvb2xzLW9zLWJ1
aWxkLWZldGNoZXItdGVzdHMuanM6IEFkZGVkLgorICAgICAgICAoYmVmb3JlRWFjaCk6CisgICAg
ICAgIChyZXR1cm4ud2FpdGluZ0Zvckludm9jYXRpb25Qcm9taXNlLnRoZW4pOgorICAgICAgICAo
dGhlbik6CisgICAgICAgIChzdHJpbmdfYXBwZWFyZWRfaGVyZS5yZXR1cm4ud2FpdGluZ0Zvcklu
dm9jYXRpb25Qcm9taXNlLnRoZW4pOgorICAgICAgICAocmV0dXJuLmFkZFNsYXZlRm9yUmVwb3J0
LmVtcHR5UmVwb3J0LnRoZW4pOgorICAgICAgICAqIHRvb2xzL2pzL29zLWJ1aWxkLWZldGNoZXIu
anM6IEFkZGVkLgorICAgICAgICAoT1NCdWlsZEZldGNoZXIpOgorICAgICAgICAoT1NCdWlsZEZl
dGNoZXIucHJvdG90eXBlLl9mZXRjaEF2YWlsYWJsZUJ1aWxkcyk6CisgICAgICAgIChPU0J1aWxk
RmV0Y2hlci5wcm90b3R5cGUuX2NvbXB1dGVPcmRlcik6CisgICAgICAgIChPU0J1aWxkRmV0Y2hl
ci5wcm90b3R5cGUuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMucmV0dXJuLnRoaXMuX3N1YnBy
b2Nlc3MuY2FsbC50aGVuLik6CisgICAgICAgIChPU0J1aWxkRmV0Y2hlci5wcm90b3R5cGUuX2Nv
bW1pdHNGb3JBdmFpbGFibGVCdWlsZHMpOgorICAgICAgICAoT1NCdWlsZEZldGNoZXIucHJvdG90
eXBlLl9hZGRTdWJDb21taXRzRm9yQnVpbGQpOgorICAgICAgICAoT1NCdWlsZEZldGNoZXIucHJv
dG90eXBlLl9zdWJtaXRDb21taXRzKToKKyAgICAgICAgKE9TQnVpbGRGZXRjaGVyLnByb3RvdHlw
ZS5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcyk6CisgICAgICAgICogdG9vbHMvanMvc3VicHJvY2Vz
cy5qczogQWRkZWQuCisgICAgICAgIChjb25zdC5jaGlsZFByb2Nlc3MucmVxdWlyZS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS5TdWJwcm9jZXNzLnByb3RvdHlwZS5jYWxsKToKKyAgICAgICAgKGNvbnN0
LmNoaWxkUHJvY2Vzcy5yZXF1aXJlLnN0cmluZ19hcHBlYXJlZF9oZXJlLlN1YnByb2Nlc3MpOgor
ICAgICAgICAqIHRvb2xzL3B1bGwtb3MtdmVyc2lvbnMuanM6IEFkZGVkLgorICAgICAgICAobWFp
bik6CisgICAgICAgIChzeW5jTG9vcCk6CisgICAgICAgICogdG9vbHMvc3luYy1jb21taXRzLnB5
OgorICAgICAgICAoUmVwb3NpdG9yeS5mZXRjaF9jb21taXRzX2FuZF9zdWJtaXQpOgorCiAyMDE3
LTAzLTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2Ug
c2VydmVyIHRlc3RzIHJldHVybiBhIHByb21pc2UgaW5zdGVhZCBvZiBtYW51YWxseSBjYWxsaW5n
IGRvbmUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy8uZ2l0aWdub3JlIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQ3NjVjNjBj
ZTJiNzY4ZTY2MWU2OTg1YThjY2ZmMzA5NTkwNTBiMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorcHVibGljL2Rh
dGEKK25vZGVfbW9kdWxlcworc2VydmVyLXRlc3RzL3Jlc291cmNlcy90ZXN0LXNlcnZlci5sb2cK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYXBpL2NvbW1pdHMu
cGhwIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9hcGkvY29tbWl0cy5waHAKaW5k
ZXggODgyYzdlYjZjYjZhODlkOTE1NmUyNzJkNmM5MDJjM2NjYzU4YjE5Mi4uYTZhNGRiODZmYThj
YTAxZWNhOTUxNDY0ZThkNTA1ZjBkNjU5OWEzMSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy9hcGkvY29tbWl0cy5waHAKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy9hcGkvY29tbWl0cy5waHAKQEAgLTMyLDcgKzMyLDEyIEBAIGZ1bmN0aW9u
IG1haW4oJHBhdGhzKSB7CiAgICAgfSBlbHNlIGlmICgkZmlsdGVyID09ICdsYXRlc3QnKSB7CiAg
ICAgICAgICRjb21taXRzID0gJGZldGNoZXItPmZldGNoX2xhdGVzdCgkcmVwb3NpdG9yeV9pZCk7
CiAgICAgfSBlbHNlIGlmICgkZmlsdGVyID09ICdsYXN0LXJlcG9ydGVkJykgewotICAgICAgICAk
Y29tbWl0cyA9ICRmZXRjaGVyLT5mZXRjaF9sYXN0X3JlcG9ydGVkKCRyZXBvc2l0b3J5X2lkKTsK
KyAgICAgICAgJGZyb20gPSBhcnJheV9nZXQoJF9HRVQsICdmcm9tJyk7CisgICAgICAgICR0byA9
IGFycmF5X2dldCgkX0dFVCwgJ3RvJyk7CisgICAgICAgIGlmICgkZnJvbSAmJiAkdG8pCisgICAg
ICAgICAgICAkY29tbWl0cyA9ICRmZXRjaGVyLT5mZXRjaF9sYXN0X3JlcG9ydGVkX2JldHdlZW5f
b3JkZXJzKCRyZXBvc2l0b3J5X2lkLCAkZnJvbSwgJHRvKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgJGNvbW1pdHMgPSAkZmV0Y2hlci0+ZmV0Y2hfbGFzdF9yZXBvcnRlZCgkcmVwb3NpdG9y
eV9pZCk7CiAgICAgfSBlbHNlIGlmIChjdHlwZV9hbG51bSgkZmlsdGVyKSkgewogICAgICAgICAk
Y29tbWl0cyA9ICRmZXRjaGVyLT5mZXRjaF9yZXZpc2lvbigkcmVwb3NpdG9yeV9pZCwgJGZpbHRl
cik7CiAgICAgfSBlbHNlIHsgLy8gVjIgVUkgY29tcGF0aWJpbGl0eS4KZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYXBpL3JlcG9ydC1jb21taXRzLnBocCBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYXBpL3JlcG9ydC1jb21taXRzLnBocAppbmRl
eCA1MWE5NGMyYTc4NDczNDJiOWYxOTljNzczNGZhZTMxZWJjMzQxODFkLi5kYzJlZDhkOTFlNDAx
YzNlYjk5MjVlMjkwODU1NjI0MGQxYmMyMGMxIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL2FwaS9yZXBvcnQtY29tbWl0cy5waHAKKysrIGIvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy9hcGkvcmVwb3J0LWNvbW1pdHMucGhwCkBAIC0yNiw3ICsyNiw3
IEBAIGZ1bmN0aW9uIG1haW4oJHBvc3RfZGF0YSkKIAogICAgICRkYi0+YmVnaW5fdHJhbnNhY3Rp
b24oKTsKICAgICBmb3JlYWNoICgkY29tbWl0cyBhcyAkY29tbWl0X2luZm8pIHsKLSAgICAgICAg
JHJlcG9zaXRvcnlfaWQgPSAkZGItPnNlbGVjdF9vcl9pbnNlcnRfcmVwb3NpdG9yeV9yb3coJGNv
bW1pdF9pbmZvWydyZXBvc2l0b3J5J10sIE5VTEwpOworICAgICAgICAkcmVwb3NpdG9yeV9pZCA9
ICRkYi0+c2VsZWN0X29yX2luc2VydF9yb3coJ3JlcG9zaXRvcmllcycsICdyZXBvc2l0b3J5Jywg
YXJyYXkoJ25hbWUnID0+ICRjb21taXRfaW5mb1sncmVwb3NpdG9yeSddLCAnb3duZXInID0+IE5V
TEwpKTsKICAgICAgICAgaWYgKCEkcmVwb3NpdG9yeV9pZCkgewogICAgICAgICAgICAgJGRiLT5y
b2xsYmFja190cmFuc2FjdGlvbigpOwogICAgICAgICAgICAgZXhpdF93aXRoX2Vycm9yKCdGYWls
ZWRUb0luc2VydFJlcG9zaXRvcnknLCBhcnJheSgnY29tbWl0JyA9PiAkY29tbWl0X2luZm8pKTsK
QEAgLTQwLDcgKzQwLDcgQEAgZnVuY3Rpb24gbWFpbigkcG9zdF9kYXRhKQogICAgICAgICAgICAg
ICAgICRkYi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKICAgICAgICAgICAgICAgICBleGl0X3dp
dGhfZXJyb3IoJ1N1YkNvbW1pdFNob3VsZE5vdENvbnRhaW5UaW1lc3RhbXAnLCBhcnJheSgnY29t
bWl0JyA9PiAkc3ViX2NvbW1pdF9pbmZvKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAk
c3ViX2NvbW1pdF9yZXBvc2l0b3J5X2lkID0gJGRiLT5zZWxlY3Rfb3JfaW5zZXJ0X3JlcG9zaXRv
cnlfcm93KCRzdWJfY29tbWl0X3JlcG9zaXRvcnlfbmFtZSwgJHJlcG9zaXRvcnlfaWQpOworICAg
ICAgICAgICAgJHN1Yl9jb21taXRfcmVwb3NpdG9yeV9pZCA9ICRkYi0+c2VsZWN0X29yX2luc2Vy
dF9yb3coJ3JlcG9zaXRvcmllcycsICdyZXBvc2l0b3J5JywgYXJyYXkoJ25hbWUnID0+ICRzdWJf
Y29tbWl0X3JlcG9zaXRvcnlfbmFtZSwgJ293bmVyJyA9PiAkcmVwb3NpdG9yeV9pZCkpOwogICAg
ICAgICAgICAgaWYgKCEkc3ViX2NvbW1pdF9yZXBvc2l0b3J5X2lkKSB7CiAgICAgICAgICAgICAg
ICAgJGRiLT5yb2xsYmFja190cmFuc2FjdGlvbigpOwogICAgICAgICAgICAgICAgIGV4aXRfd2l0
aF9lcnJvcignRmFpbGVkVG9JbnNlcnRSZXBvc2l0b3J5JywgYXJyYXkoJ2NvbW1pdCcgPT4gJHN1
Yl9jb21taXRfaW5mbykpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy9pbmNsdWRlL2NvbW1pdC1sb2ctZmV0Y2hlci5waHAgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocAppbmRleCAwZDQyMDVh
ZGEwMzYzYjA0YWE2ZDhhY2Y2ZjNlMWJkNTAzYWI0ZGFiLi5jN2M2Yzk3MGNjMDI5ZGQyMjQwNGI5
Y2ZjYTc5MWNjMzg4ZDMxM2NhIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocAorKysgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvY29tbWl0LWxvZy1mZXRjaGVyLnBocApAQCAtMjcs
MTMgKzI3LDE0IEBAIGNsYXNzIENvbW1pdExvZ0ZldGNoZXIgewogCiAgICAgZnVuY3Rpb24gcmVw
b3NpdG9yeV9pZF9mcm9tX25hbWUoJG5hbWUpCiAgICAgewotICAgICAgICAkcmVwb3NpdG9yeV9y
b3cgPSAkdGhpcy0+ZGItPnF1ZXJ5X2FuZF9mZXRjaF9hbGwoJ1NFTEVDVCByZXBvc2l0b3J5X2lk
IEZST00gcmVwb3NpdG9yaWVzIFdIRVJFIHJlcG9zaXRvcnlfbmFtZSA9ICQxIEFORCByZXBvc2l0
b3J5X293bmVyIGlzIE5VTEwnLCBhcnJheSgkbmFtZSkpOworICAgICAgICAkcmVwb3NpdG9yeV9y
b3cgPSAkdGhpcy0+ZGItPnNlbGVjdF9maXJzdF9yb3coJ3JlcG9zaXRvcmllcycsICdyZXBvc2l0
b3J5JywgYXJyYXkoJ25hbWUnID0+ICRuYW1lLCAnb3duZXInID0+IE5VTEwpKTsKICAgICAgICAg
aWYgKCEkcmVwb3NpdG9yeV9yb3cpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAg
cmV0dXJuICRyZXBvc2l0b3J5X3Jvd1swXVsncmVwb3NpdG9yeV9pZCddOworICAgICAgICByZXR1
cm4gJHJlcG9zaXRvcnlfcm93WydyZXBvc2l0b3J5X2lkJ107CiAgICAgfQogCi0gICAgZnVuY3Rp
b24gZmV0Y2hfYmV0d2VlbigkcmVwb3NpdG9yeV9pZCwgJGZpcnN0LCAkc2Vjb25kLCAka2V5d29y
ZCA9IE5VTEwpIHsKKyAgICBmdW5jdGlvbiBmZXRjaF9iZXR3ZWVuKCRyZXBvc2l0b3J5X2lkLCAk
Zmlyc3QsICRzZWNvbmQsICRrZXl3b3JkID0gTlVMTCkKKyAgICB7CiAgICAgICAgICRzdGF0ZW1l
bnRzID0gJ1NFTEVDVCBjb21taXRfaWQgYXMgImlkIiwKICAgICAgICAgICAgIGNvbW1pdF9yZXZp
c2lvbiBhcyAicmV2aXNpb24iLAogICAgICAgICAgICAgY29tbWl0X3ByZXZpb3VzX2NvbW1pdCBh
cyAicHJldmlvdXNDb21taXQiLApAQCAtODMsNiArODQsMzUgQEAgY2xhc3MgQ29tbWl0TG9nRmV0
Y2hlciB7CiAgICAgICAgIHJldHVybiAkY29tbWl0czsKICAgICB9CiAKKyAgICAjIEZJWE1FOiB0
aGlzIGlzIG5vdCBEUlkuIElkZWFsbHksICRkYiBzaG91bGQgcHJvdmlkZSB0aGUgYWJpbGl0eSB0
byBzZWFyY2ggd2l0aCBjcml0ZXJpYSB0aGF0IHNwZWNpZmllcyBhIHJhbmdlLgorICAgIGZ1bmN0
aW9uIGZldGNoX2xhc3RfcmVwb3J0ZWRfYmV0d2Vlbl9vcmRlcnMoJHJlcG9zaXRvcnlfaWQsICRm
cm9tPU5VTEwsICR0bz1OVUxMKQorICAgIHsKKyAgICAgICAgJHN0YXRlbWVudHMgPSAnU0VMRUNU
IGNvbW1pdF9pZCBhcyAiaWQiLAorICAgICAgICAgICAgY29tbWl0X3JldmlzaW9uIGFzICJyZXZp
c2lvbiIsCisgICAgICAgICAgICBjb21taXRfcHJldmlvdXNfY29tbWl0IGFzICJwcmV2aW91c0Nv
bW1pdCIsCisgICAgICAgICAgICBjb21taXRfdGltZSBhcyAidGltZSIsCisgICAgICAgICAgICBj
b21taXRfb3JkZXIgYXMgIm9yZGVyIiwKKyAgICAgICAgICAgIGNvbW1pdHRlcl9uYW1lIGFzICJh
dXRob3JOYW1lIiwKKyAgICAgICAgICAgIGNvbW1pdHRlcl9hY2NvdW50IGFzICJhdXRob3JFbWFp
bCIsCisgICAgICAgICAgICBjb21taXRfbWVzc2FnZSBhcyAibWVzc2FnZSIKKyAgICAgICAgICAg
IEZST00gY29tbWl0cyBMRUZUIE9VVEVSIEpPSU4gY29tbWl0dGVycyBPTiBjb21taXRfY29tbWl0
dGVyID0gY29tbWl0dGVyX2lkCisgICAgICAgICAgICBXSEVSRSBjb21taXRfcmVwb3NpdG9yeSA9
ICQxIEFORCBjb21taXRfcmVwb3J0ZWQgPSB0cnVlJzsKKyAgICAgICAgaWYgKCRmcm9tICYmICR0
bykgeworICAgICAgICAgICAgJGZyb20gPSBpbnR2YWwoJGZyb20pOworICAgICAgICAgICAgJHRv
ID0gaW50dmFsKCR0byk7CisgICAgICAgICAgICAkc3RhdGVtZW50cyAuPSAnIEFORCBjb21taXRf
b3JkZXIgPj0nIC4gJGZyb20gLiAnIEFORCBjb21taXRfb3JkZXIgPD0gJyAuICR0byAuICcgT1JE
RVIgQlkgY29tbWl0X29yZGVyIERFU0MgTElNSVQgMSc7CisgICAgICAgIH0KKworICAgICAgICAk
Y29tbWl0cyA9ICR0aGlzLT5kYi0+cXVlcnlfYW5kX2ZldGNoX2FsbCgkc3RhdGVtZW50cywgYXJy
YXkoJHJlcG9zaXRvcnlfaWQpKTsKKyAgICAgICAgaWYgKCFpc19hcnJheSgkY29tbWl0cykpCisg
ICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBmb3JlYWNoICgkY29tbWl0cyBhcyAm
JGNvbW1pdCkKKyAgICAgICAgICAgICRjb21taXRbJ3RpbWUnXSA9IERhdGFiYXNlOjp0b19qc190
aW1lKCRjb21taXRbJ3RpbWUnXSk7CisKKyAgICAgICAgcmV0dXJuICRjb21taXRzOworICAgIH0K
KwogICAgIGZ1bmN0aW9uIGZldGNoX29sZGVzdCgkcmVwb3NpdG9yeV9pZCkgewogICAgICAgICBy
ZXR1cm4gJHRoaXMtPmZvcm1hdF9zaW5nbGVfY29tbWl0KCR0aGlzLT5kYi0+c2VsZWN0X2ZpcnN0
X3JvdygnY29tbWl0cycsICdjb21taXQnLCBhcnJheSgncmVwb3NpdG9yeScgPT4gJHJlcG9zaXRv
cnlfaWQpLCBhcnJheSgndGltZScsICdvcmRlcicpKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2RiLnBocCBiL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9kYi5waHAKaW5kZXggMmNlYjZkZWE4MTI2Zjcz
N2JkOTBhMThmYjM1NDZmZGM1YmFlOGViZC4uMjIxMmYwZmVmNmZmYjI2ZDkwODVhNTI4ZTEyNWE3
NTBkZTlkOWMxYiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9p
bmNsdWRlL2RiLnBocAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1
ZGUvZGIucGhwCkBAIC0xMDUsNyArMTA1LDcgQEAgY2xhc3MgRGF0YWJhc2UKICAgICAgICAgcmV0
dXJuICRwcmVmaXggPyAkcHJlZml4IC4gJ18nIC4gJGNvbHVtbiA6ICRjb2x1bW47CiAgICAgfQog
Ci0gICAgcHJpdmF0ZSBmdW5jdGlvbiBwcmVwYXJlX3BhcmFtcygkcGFyYW1zLCAmJHBsYWNlaG9s
ZGVycywgJiR2YWx1ZXMsICRudWxsX2NvbHVtbnMgPSBOVUxMKSB7CisgICAgcHJpdmF0ZSBmdW5j
dGlvbiBwcmVwYXJlX3BhcmFtcygkcGFyYW1zLCAmJHBsYWNlaG9sZGVycywgJiR2YWx1ZXMsICYk
bnVsbF9jb2x1bW5zID0gTlVMTCkgewogICAgICAgICAkY29sdW1uX25hbWVzID0gYXJyYXkoKTsK
IAogICAgICAgICAkaSA9IGNvdW50KCR2YWx1ZXMpICsgMTsKQEAgLTIwNywyNiArMjA3LDYgQEAg
Y2xhc3MgRGF0YWJhc2UKICAgICAgICAgcmV0dXJuICRyb3dzID8gKCRyZXR1cm5pbmcgPT0gJyon
ID8gJHJvd3NbMF0gOiAkcm93c1swXVskcmV0dXJuaW5nX2NvbHVtbl9uYW1lXSkgOiBOVUxMOwog
ICAgIH0KIAotICAgIC8vIEZJWE1FOiBTaG91bGQgaW1wcm92ZSBfc2VsZWN0X3VwZGF0ZV9vcl9p
bnNlcnRfcm93IHRvIGhhbmRsZSB0aGUgTlVMTCBjb2x1bW4gY2FzZS4KLSAgICBmdW5jdGlvbiBz
ZWxlY3Rfb3JfaW5zZXJ0X3JlcG9zaXRvcnlfcm93KCRyZXBvc2l0b3J5X25hbWUsICRyZXBvc2l0
b3J5X293bmVyX2lkKQotICAgIHsKLSAgICAgICAgJHJlc3VsdCA9IE5VTEw7Ci0gICAgICAgIGlm
ICgkcmVwb3NpdG9yeV9vd25lcl9pZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAkcmVzdWx0ID0g
JHRoaXMtPnF1ZXJ5X2FuZF9mZXRjaF9hbGwoJ0lOU0VSVCBJTlRPIHJlcG9zaXRvcmllcyAocmVw
b3NpdG9yeV9uYW1lKSBTRUxFQ1QgJDEKLSAgICAgICAgICAgICAgICBXSEVSRSBOT1QgRVhJU1RT
IChTRUxFQ1QgcmVwb3NpdG9yeV9pZCBGUk9NIHJlcG9zaXRvcmllcyBXSEVSRSByZXBvc2l0b3J5
X25hbWUgPSAkMiBBTkQgcmVwb3NpdG9yeV9vd25lciBJUyBOVUxMKSBSRVRVUk5JTkcgcmVwb3Np
dG9yeV9pZCcsCi0gICAgICAgICAgICAgICAgYXJyYXkoJHJlcG9zaXRvcnlfbmFtZSwgJHJlcG9z
aXRvcnlfbmFtZSkpOwotICAgICAgICAgICAgaWYgKCEkcmVzdWx0KQotICAgICAgICAgICAgICAg
ICRyZXN1bHQgPSAkdGhpcy0+cXVlcnlfYW5kX2ZldGNoX2FsbCgnU0VMRUNUIHJlcG9zaXRvcnlf
aWQgRlJPTSByZXBvc2l0b3JpZXMgV0hFUkUgcmVwb3NpdG9yeV9uYW1lID0gJDEgQU5EIHJlcG9z
aXRvcnlfb3duZXIgSVMgTlVMTCcsIGFycmF5KCRyZXBvc2l0b3J5X25hbWUpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+cXVlcnlfYW5kX2ZldGNoX2Fs
bCgnSU5TRVJUIElOVE8gcmVwb3NpdG9yaWVzIChyZXBvc2l0b3J5X25hbWUsIHJlcG9zaXRvcnlf
b3duZXIpIFNFTEVDVCAkMSwgJDIKLSAgICAgICAgICAgICAgICBXSEVSRSBOT1QgRVhJU1RTIChT
RUxFQ1QgcmVwb3NpdG9yeV9pZCBGUk9NIHJlcG9zaXRvcmllcyBXSEVSRSAocmVwb3NpdG9yeV9u
YW1lLCByZXBvc2l0b3J5X293bmVyKSA9ICgkMywgJDQpKSBSRVRVUk5JTkcgcmVwb3NpdG9yeV9p
ZCcsCi0gICAgICAgICAgICAgICAgYXJyYXkoJHJlcG9zaXRvcnlfbmFtZSwgJHJlcG9zaXRvcnlf
b3duZXJfaWQsICRyZXBvc2l0b3J5X25hbWUsICRyZXBvc2l0b3J5X293bmVyX2lkKSk7Ci0gICAg
ICAgICAgICBpZiAoISRyZXN1bHQpCi0gICAgICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5x
dWVyeV9hbmRfZmV0Y2hfYWxsKCdTRUxFQ1QgcmVwb3NpdG9yeV9pZCBGUk9NIHJlcG9zaXRvcmll
cyBXSEVSRSAocmVwb3NpdG9yeV9uYW1lLCByZXBvc2l0b3J5X293bmVyKSA9ICgkMSwgJDIpJywg
YXJyYXkoJHJlcG9zaXRvcnlfbmFtZSwgJHJlcG9zaXRvcnlfb3duZXJfaWQpKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gJHJlc3VsdCA/ICRyZXN1bHRbMF1bJ3JlcG9zaXRvcnlfaWQnXSA6
IE5VTEw7Ci0gICAgfQotCiAgICAgZnVuY3Rpb24gc2VsZWN0X2ZpcnN0X3JvdygkdGFibGUsICRw
cmVmaXgsICRwYXJhbXMsICRvcmRlcl9ieSA9IE5VTEwpIHsKICAgICAgICAgcmV0dXJuICR0aGlz
LT5zZWxlY3RfZmlyc3Rfb3JfbGFzdF9yb3coJHRhYmxlLCAkcHJlZml4LCAkcGFyYW1zLCAkb3Jk
ZXJfYnksIEZBTFNFKTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL2luY2x1ZGUvcmVwb3J0LXByb2Nlc3Nvci5waHAgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL2luY2x1ZGUvcmVwb3J0LXByb2Nlc3Nvci5waHAKaW5kZXggNDkwODk4
MGI4MTQ2ZDVhMTRkMWQ4NWU5NWY3NmE0NDliODUzY2E4NS4uN2ExNzIyOGYzNDZlYWRmZGY1ZTI0
Y2RhYmE3NzNiNDYyYTdmMWU0ZSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy9pbmNsdWRlL3JlcG9ydC1wcm9jZXNzb3IucGhwCisrKyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvaW5jbHVkZS9yZXBvcnQtcHJvY2Vzc29yLnBocApAQCAtMTUwLDcg
KzE1MCw3IEBAIGNsYXNzIFJlcG9ydFByb2Nlc3NvciB7CiAKIAogICAgICAgICBmb3JlYWNoICgk
cmV2aXNpb25zIGFzICRyZXBvc2l0b3J5X25hbWUgPT4gJHJldmlzaW9uX2RhdGEpIHsKLSAgICAg
ICAgICAgICRyZXBvc2l0b3J5X2lkID0gJHRoaXMtPmRiLT5zZWxlY3Rfb3JfaW5zZXJ0X3JlcG9z
aXRvcnlfcm93KCRyZXBvc2l0b3J5X25hbWUsIE5VTEwpOworICAgICAgICAgICAgJHJlcG9zaXRv
cnlfaWQgPSAkdGhpcy0+ZGItPnNlbGVjdF9vcl9pbnNlcnRfcm93KCdyZXBvc2l0b3JpZXMnLCAn
cmVwb3NpdG9yeScsIGFycmF5KCduYW1lJyA9PiAkcmVwb3NpdG9yeV9uYW1lLCAnb3duZXInID0+
IE5VTEwpKTsKICAgICAgICAgICAgIGlmICghJHJlcG9zaXRvcnlfaWQpCiAgICAgICAgICAgICAg
ICAgJHRoaXMtPmV4aXRfd2l0aF9lcnJvcignRmFpbGVkVG9JbnNlcnRSZXBvc2l0b3J5JywgYXJy
YXkoJ25hbWUnID0+ICRyZXBvc2l0b3J5X25hbWUpKTsKIApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0cy9hcGktY29tbWl0cy5qcyBiL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvYXBpLWNvbW1pdHMuanMKaW5kZXggMGVhOTQ4MTE3
NzdiZGUwZjYyMGQ5MmU0NDY1YWQ4YTNmMWNkMWY4MC4uNDdlYzU0YTMyYmRhNDFlYTEwOWFhYzc5
Y2RmZjRiOGViM2E2YzI4NSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Nl
cnZlci10ZXN0cy9hcGktY29tbWl0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
c2VydmVyLXRlc3RzL2FwaS1jb21taXRzLmpzCkBAIC0zMDEsNiArMzAxLDQ3IEBAIGRlc2NyaWJl
KCIvYXBpL2NvbW1pdHMvIiwgZnVuY3Rpb24gKCkgewogICAgICAgICB9KTsKICAgICB9KTsKIAor
ICAgIGRlc2NyaWJlKCcvYXBpL2NvbW1pdHMvPHJlcG9zaXRvcnk+L2xhc3QtcmVwb3J0ZWQ/ZnJv
bT08c3RhcnRfb3JkZXI+JnRvPTxlbmRfb3JkZXI+JywgKCkgPT4geworICAgICAgICBpdCgic2hv
dWxkIHJldHVybiBhIGxpc3Qgb2YgY29tbWl0IGluIGdpdmVuIHZhbGlkIG9yZGVyIHJhbmdlIiwg
KCkgPT4geworICAgICAgICAgICAgY29uc3QgZGIgPSBUZXN0U2VydmVyLmRhdGFiYXNlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoWworICAgICAgICAgICAgICAgIGRiLmluc2Vy
dCgncmVwb3NpdG9yaWVzJywgeydpZCc6IDEsICduYW1lJzogJ09TWCd9KSwKKyAgICAgICAgICAg
ICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxLCAncmV2aXNpb24nOiAn
U2llcnJhMTZDNjcnLCAnb3JkZXInOiAzNjcsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAg
ICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxLCAncmV2aXNpb24n
OiAnU2llcnJhMTZDNjgnLCAnb3JkZXInOiAzNjgsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAg
ICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxLCAncmV2aXNp
b24nOiAnU2llcnJhMTZDNjknLCAnb3JkZXInOiAzNjksICdyZXBvcnRlZCc6IGZhbHNlfSksCisg
ICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMSwgJ3Jl
dmlzaW9uJzogJ1NpZXJyYTE2RDMyJywgJ29yZGVyJzogNDMyLCAncmVwb3J0ZWQnOiB0cnVlfSkK
KyAgICAgICAgICAgIF0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBUZXN0
U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRl
ZD9mcm9tPTM2NyZ0bz0zNzAnKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3BvbnNlWydzdGF0dXMnXSwgJ09LJyk7
CisgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IHJlc3BvbnNlWydjb21taXRzJ107Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHMubGVuZ3RoLCAxKTsKKyAgICAgICAg
ICAgICAgICBjb25zdCBjb21taXQgPSByZXN1bHRzWzBdOworICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChjb21taXQucmV2aXNpb24sICdTaWVycmExNkM2OCcpOworICAgICAgICAgICAgfSku
dGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJ
KCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MzcwJnRvPTM2
NycpOworICAgICAgICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+IHsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwocmVzcG9uc2VbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgICAg
ICBjb25zdCByZXN1bHRzID0gcmVzcG9uc2VbJ2NvbW1pdHMnXTsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwocmVzdWx0cy5sZW5ndGgsIDApOworICAgICAgICAgICAgfSkudGhlbigoKSA9
PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNP
TignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MjAwJnRvPTI5OScpOworICAg
ICAgICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwocmVzcG9uc2VbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgICAgICBjb25zdCBy
ZXN1bHRzID0gcmVzcG9uc2VbJ2NvbW1pdHMnXTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVzdWx0cy5sZW5ndGgsIDApOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9j
b21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MzY5JnRvPTQzMicpOworICAgICAgICAgICAg
fSkudGhlbigocmVzcG9uc2UpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVz
cG9uc2VbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0g
cmVzcG9uc2VbJ2NvbW1pdHMnXTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0
cy5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IHJlc3VsdHNbMF07
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5yZXZpc2lvbiwgJ1NpZXJyYTE2
RDMyJyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKICAgICBkZXNj
cmliZSgnL2FwaS9jb21taXRzLzxyZXBvc2l0b3J5Pi88Y29tbWl0PicsICgpID0+IHsKICAgICAg
ICAgaXQoInNob3VsZCByZXR1cm4gUmVwb3NpdG9yeU5vdEZvdW5kIHdoZW4gdGhlcmUgYXJlIG5v
IG1hdGNoaW5nIHJlcG9zaXRvcnkiLCAoKSA9PiB7CiAgICAgICAgICAgICByZXR1cm4gVGVzdFNl
cnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvV2ViS2l0LzIxMDk0OScpLnRo
ZW4oKHJlc3BvbnNlKSA9PiB7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
c2VydmVyLXRlc3RzL2FwaS1yZXBvcnQtY29tbWl0cy10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvYXBpLXJlcG9ydC1jb21taXRzLXRlc3RzLmpzCmluZGV4
IGYxYWQ3NjFiNjA1OWY4MTQzNWJmNTgzNDQ4NjA5ZTc5ZDE3NmU1ZWQuLjdjNDg4YTYwMmY0ZWJj
NDFlNDgyNGVmMzVmYzg1MzQ5ZjMyNmVjNDUgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9zZXJ2ZXItdGVzdHMvYXBpLXJlcG9ydC1jb21taXRzLXRlc3RzLmpzCisrKyBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvYXBpLXJlcG9ydC1jb21taXRzLXRl
c3RzLmpzCkBAIC0yOTgsNyArMjk4LDcgQEAgZGVzY3JpYmUoIi9hcGkvcmVwb3J0LWNvbW1pdHMv
IiwgZnVuY3Rpb24gKCkgewogICAgICAgICBdCiAgICAgfQogCi0gICAgaXQoInNob3VsZCBkaXN0
aW5ndWlzaCBiZXR3ZWVuIHJlcG9zaXRvcmllcyB3aXRoIHRoZSBhc21lIG5hbWUgYnV0IHdpdGgg
YSBkaWZmZXJlbnQgb3duZXIuIiwgKCkgPT4geworICAgIGl0KCJzaG91bGQgZGlzdGluZ3Vpc2gg
YmV0d2VlbiByZXBvc2l0b3JpZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dCB3aXRoIGEgZGlmZmVy
ZW50IG93bmVyLiIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgcmV0dXJuIGFkZFNsYXZlRm9yUmVw
b3J0KHNhbWVSZXBvc2l0b3J5TmFtZUluU3ViQ29tbWl0QW5kTWFqb3JDb21taXQpLnRoZW4oKCkg
PT4gewogICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkucG9zdEpTT04o
Jy9hcGkvcmVwb3J0LWNvbW1pdHMvJywgc2FtZVJlcG9zaXRvcnlOYW1lSW5TdWJDb21taXRBbmRN
YWpvckNvbW1pdCk7CiAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7CmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Jlc291cmNlcy9tb2NrLWxv
Z2dlci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvcmVzb3VyY2Vz
L21vY2stbG9nZ2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhZWRiYTM4OTIxOTMxNDY1YzgzMTA3NTY5NWI5
NjZkZmQxYzUyOWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
c2VydmVyLXRlc3RzL3Jlc291cmNlcy9tb2NrLWxvZ2dlci5qcwpAQCAtMCwwICsxLDE0IEBACisn
dXNlIHN0cmljdCc7CisKK2NsYXNzIE1vY2tMb2dnZXIgeworICAgIGNvbnN0cnVjdG9yKCkKKyAg
ICB7CisgICAgICAgIHRoaXMuX2xvZ3MgPSBbXTsKKyAgICB9CisKKyAgICBsb2codGV4dCkgeyB0
aGlzLl9sb2dzLnB1c2godGV4dCk7IH0KKyAgICBlcnJvcih0ZXh0KSB7IHRoaXMuX2xvZ3MucHVz
aCh0ZXh0KTsgfQorfQorCitpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykKKyAgICBt
b2R1bGUuZXhwb3J0cy5Nb2NrTG9nZ2VyID0gTW9ja0xvZ2dlcjsKZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvcmVzb3VyY2VzL21vY2stc3VicHJvY2Vz
cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvcmVzb3VyY2VzL21v
Y2stc3VicHJvY2Vzcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNDY0N2FiM2EzY2IwOTE4YmJhMGMyNTM0Nzkw
NDRjM2U1ZGJiOWU1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3NlcnZlci10ZXN0cy9yZXNvdXJjZXMvbW9jay1zdWJwcm9jZXNzLmpzCkBAIC0wLDAgKzEsNTcg
QEAKK3ZhciBNb2NrU3VicHJvY2VzcyA9IHsKKyAgICBjYWxsOiBmdW5jdGlvbiAoY29tbWFuZCkK
KyAgICB7CisgICAgICAgIGNvbnN0IGludm9jYXRpb24gPSB7Y29tbWFuZH07CisgICAgICAgIGlu
dm9jYXRpb24ucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKKyAg
ICAgICAgICAgIGludm9jYXRpb24ucmVzb2x2ZSA9IHJlc29sdmU7CisgICAgICAgICAgICBpbnZv
Y2F0aW9uLnJlamVjdCA9IHJlamVjdDsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKHRoaXMu
X3dhaXRpbmdJbnZvY2F0aW9uKSB7CisgICAgICAgICAgICB0aGlzLl93YWl0aW5nSW52b2NhdGlv
blJlc29sdmVyKCk7CisgICAgICAgICAgICB0aGlzLl93YWl0aW5nSW52b2NhdGlvbiA9IG51bGw7
CisgICAgICAgICAgICB0aGlzLl93YWl0aW5nSW52b2NhdGlvblJlc29sdmVyID0gbnVsbDsKKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMuaW52b2NhdGlvbnMucHVzaChpbnZvY2F0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIGludm9jYXRpb24ucHJvbWlzZTsKKyAgICB9LAorICAgIHdhaXRpbmdGb3JJ
bnZvY2F0aW9uOiBmdW5jdGlvbiAoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl93YWl0aW5n
SW52b2NhdGlvbikgeworICAgICAgICAgICAgdGhpcy5fd2FpdGluZ0ludm9jYXRpb24gPSBuZXcg
UHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICAgICAgTW9j
a1N1YnByb2Nlc3MuX3dhaXRpbmdJbnZvY2F0aW9uUmVzb2x2ZXIgPSByZXNvbHZlOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3dhaXRpbmdJbnZvY2F0
aW9uOworICAgIH0sCisgICAgaW5qZWN0OiBmdW5jdGlvbiAoKQorICAgIHsKKyAgICAgICAgdmFy
IG9yaWdpbmFsU3VicHJvY2VzcyA9IGdsb2JhbC5TdWJwcm9jZXNzOworCisgICAgICAgIGJlZm9y
ZUVhY2goZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MucmVzZXQoKTsK
KyAgICAgICAgICAgIG9yaWdpbmFsU3VicHJvY2VzcyA9IGdsb2JhbC5TdWJwcm9jZXNzOworICAg
ICAgICAgICAgZ2xvYmFsLlN1YnByb2Nlc3MgPSBNb2NrU3VicHJvY2VzczsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGdsb2JhbC5T
dWJwcm9jZXNzID0gb3JpZ2luYWxTdWJwcm9jZXNzOworICAgICAgICB9KTsKKworICAgICAgICBy
ZXR1cm4gIE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zIDsKKyAgICB9LAorICAgIHJlc2V0OiBm
dW5jdGlvbiAoKQorICAgIHsKKyAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnMgPSBb
XTsKKyAgICAgICAgTW9ja1N1YnByb2Nlc3MuX3dhaXRpbmdJbnZvY2F0aW9uID0gbnVsbDsKKyAg
ICAgICAgTW9ja1N1YnByb2Nlc3MuX3dhaXRpbmdJbnZvY2F0aW9uUmVzb2x2ZXIgPSBudWxsOwor
ICAgIH0sCisKKyAgICBfd2FpdGluZ0ludm9jYXRpb246IG51bGwsCisgICAgX3dhaXRpbmdJbnZv
Y2F0aW9uUmVzb2x2ZXI6IG51bGwsCisgICAgaW52b2NhdGlvbnM6IFtdLAorfTsKKworaWYgKHR5
cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpCisgICAgbW9kdWxlLmV4cG9ydHMuTW9ja1N1YnBy
b2Nlc3MgPSBNb2NrU3VicHJvY2VzczsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9zZXJ2ZXItdGVzdHMvdG9vbHMtYnVpbGRib3QtdHJpZ2dlcmFibGUtdGVzdHMuanMgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLWJ1aWxkYm90LXRyaWdn
ZXJhYmxlLXRlc3RzLmpzCmluZGV4IGY0MzA3ZDA1MWI0MTU5ZDU1ZmUwY2U0ODk5YWNlYTc4Yzhj
YTlkYTguLmNhZTBiZWZjOTY0ZjFkMmQyNTQ3ZWIwY2IyOWI1ZjE2YTVmMDNmODcgMTAwNjQ0Ci0t
LSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMvdG9vbHMtYnVpbGRib3Qt
dHJpZ2dlcmFibGUtdGVzdHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZl
ci10ZXN0cy90b29scy1idWlsZGJvdC10cmlnZ2VyYWJsZS10ZXN0cy5qcwpAQCAtNywxNiArNyw3
IEBAIGNvbnN0IE1vY2tEYXRhID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMvbW9jay1kYXRhLmpzJyk7
CiBjb25zdCBNb2NrUmVtb3RlQVBJID0gcmVxdWlyZSgnLi4vdW5pdC10ZXN0cy9yZXNvdXJjZXMv
bW9jay1yZW1vdGUtYXBpLmpzJykuTW9ja1JlbW90ZUFQSTsKIGNvbnN0IFRlc3RTZXJ2ZXIgPSBy
ZXF1aXJlKCcuL3Jlc291cmNlcy90ZXN0LXNlcnZlci5qcycpOwogY29uc3QgcHJlcGFyZVNlcnZl
clRlc3QgPSByZXF1aXJlKCcuL3Jlc291cmNlcy9jb21tb24tb3BlcmF0aW9ucy5qcycpLnByZXBh
cmVTZXJ2ZXJUZXN0OwotCi1jbGFzcyBNb2NrTG9nZ2VyIHsKLSAgICBjb25zdHJ1Y3RvcigpCi0g
ICAgewotICAgICAgICB0aGlzLl9sb2dzID0gW107Ci0gICAgfQotCi0gICAgbG9nKHRleHQpIHsg
dGhpcy5fbG9ncy5wdXNoKHRleHQpOyB9Ci0gICAgZXJyb3IodGV4dCkgeyB0aGlzLl9sb2dzLnB1
c2godGV4dCk7IH0KLX0KK2NvbnN0IE1vY2tMb2dnZXIgPSByZXF1aXJlKCcuL3Jlc291cmNlcy9t
b2NrLWxvZ2dlci5qcycpLk1vY2tMb2dnZXI7CiAKIGRlc2NyaWJlKCdCdWlsZGJvdFRyaWdnZXJh
YmxlJywgZnVuY3Rpb24gKCkgewogICAgIHByZXBhcmVTZXJ2ZXJUZXN0KHRoaXMpOwpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0cy90b29scy1vcy1idWls
ZC1mZXRjaGVyLXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0
cy90b29scy1vcy1idWlsZC1mZXRjaGVyLXRlc3RzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1YjJlYWYwN2Qz
M2UxMDc5ZWNiMTZlOTY1MTA3MGU1NjE2NWJlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLW9zLWJ1aWxkLWZldGNoZXItdGVz
dHMuanMKQEAgLTAsMCArMSw0OTggQEAKKyd1c2Ugc3RyaWN0JzsKKworY29uc3QgYXNzZXJ0ID0g
cmVxdWlyZSgnYXNzZXJ0Jyk7CisKK2NvbnN0IE9TQnVpbGRGZXRjaGVyID0gcmVxdWlyZSgnLi4v
dG9vbHMvanMvb3MtYnVpbGQtZmV0Y2hlci5qcycpLk9TQnVpbGRGZXRjaGVyOworY29uc3QgTW9j
a1JlbW90ZUFQSSA9IHJlcXVpcmUoJy4uL3VuaXQtdGVzdHMvcmVzb3VyY2VzL21vY2stcmVtb3Rl
LWFwaS5qcycpLk1vY2tSZW1vdGVBUEk7Citjb25zdCBUZXN0U2VydmVyID0gcmVxdWlyZSgnLi9y
ZXNvdXJjZXMvdGVzdC1zZXJ2ZXIuanMnKTsKK2NvbnN0IGFkZFNsYXZlRm9yUmVwb3J0ID0gcmVx
dWlyZSgnLi9yZXNvdXJjZXMvY29tbW9uLW9wZXJhdGlvbnMuanMnKS5hZGRTbGF2ZUZvclJlcG9y
dDsKK2NvbnN0IHByZXBhcmVTZXJ2ZXJUZXN0ID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMvY29tbW9u
LW9wZXJhdGlvbnMuanMnKS5wcmVwYXJlU2VydmVyVGVzdDsKK2NvbnN0IE1vY2tTdWJwcm9jZXNz
ID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMvbW9jay1zdWJwcm9jZXNzLmpzJykuTW9ja1N1YnByb2Nl
c3M7Citjb25zdCBNb2NrTG9nZ2VyID0gcmVxdWlyZSgnLi9yZXNvdXJjZXMvbW9jay1sb2dnZXIu
anMnKS5Nb2NrTG9nZ2VyOworCisKK2Rlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlcicsIGZ1bmN0aW9u
KCkgeworICAgIHByZXBhcmVTZXJ2ZXJUZXN0KHRoaXMpOworCisgICAgYmVmb3JlRWFjaChmdW5j
dGlvbiAoKSB7CisgICAgICAgIE1vY2tSZW1vdGVBUEkucmVzZXQoJ2h0dHA6Ly9idWlsZC53ZWJr
aXQub3JnJyk7CisgICAgICAgIE1vY2tTdWJwcm9jZXNzLnJlc2V0KCk7CisgICAgfSk7CisKKyAg
ICBjb25zdCBlbXB0eVJlcG9ydCA9IHsKKyAgICAgICAgJ3NsYXZlTmFtZSc6ICdzb21lU2xhdmUn
LAorICAgICAgICAnc2xhdmVQYXNzd29yZCc6ICdzb21lUGFzc3dvcmQnLAorICAgIH07CisKKyAg
ICBjb25zdCBzbGF2ZUF1dGggPSB7CisgICAgICAgICduYW1lJzogJ3NvbWVTbGF2ZScsCisgICAg
ICAgICdwYXNzd29yZCc6ICdzb21lUGFzc3dvcmQnCisgICAgfTsKKworICAgIGNvbnN0IHN1YkNv
bW1pdFdpdGhXZWJLaXQgPSB7CisgICAgICAgICdXZWJLaXQnOiB7CisgICAgICAgICAgICAncmV2
aXNpb24nOiAnMTQxOTc4JywKKyAgICAgICAgfQorICAgIH07CisKKyAgICBjb25zdCBhbm90aGVy
U3ViQ29tbWl0V2l0aFdlYktpdCA9IHsKKyAgICAgICAgJ1dlYktpdCc6IHsKKyAgICAgICAgICAg
ICdyZXZpc2lvbic6ICcxNDE5OTknLAorICAgICAgICB9CisgICAgfTsKKworICAgIGNvbnN0IGFu
b3RoZXJTdWJDb21taXRXaXRoV2ViS2l0QW5kSmF2YVNjcmlwdENvcmUgPSB7CisgICAgICAgICdX
ZWJLaXQnOiB7CisgICAgICAgICAgICAncmV2aXNpb24nOiAnMTQyMDAwJywKKyAgICAgICAgfSwK
KyAgICAgICAgJ0phdmFTY3JpcHRDb3JlJzogeworICAgICAgICAgICAgJ3JldmlzaW9uJzogJzE0
MjAwMCcsCisgICAgICAgIH0KKyAgICB9OworCisgICAgY29uc3Qgb3N4Q29tbWl0ID0geworICAg
ICAgICAncmVwb3NpdG9yeSc6ICdPU1gnLAorICAgICAgICAncmV2aXNpb24nOiAnU2llcnJhMTZE
MzInLAorICAgICAgICAnb3JkZXInOiAxNjAzMDAzMjAwCisgICAgfTsKKworICAgIGNvbnN0IGFu
b3RoZXJPU1hDb21taXQgPSB7CisgICAgICAgICdyZXBvc2l0b3J5JzogJ09TWCcsCisgICAgICAg
ICdyZXZpc2lvbic6ICdTaWVycmExNkUzMicsCisgICAgICAgICdvcmRlcic6IDE2MDMwMDMyMDAK
KyAgICB9OworCisKKyAgICBjb25zdCBjb25maWcgPSB7CisgICAgICAgICduYW1lJzogJ09TWCcs
CisgICAgICAgICdjdXN0b21Db21tYW5kcyc6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAnY29tbWFuZCc6IFsnbGlzdCcsICdhbGwgb3N4IDE2RHh4IGJ1aWxkcyddLAorICAgICAg
ICAgICAgICAgICdzdWJDb21taXRDb21tYW5kJzogWydsaXN0JywgJ3N1YkNvbW1pdCcsICdmb3In
LCAncmV2aXNpb24nXSwKKyAgICAgICAgICAgICAgICAnbGluZXNUb0lnbm9yZSc6ICdeXFwuKiQn
LAorICAgICAgICAgICAgICAgICdtaW5SZXZpc2lvbic6ICdTaWVycmExNkQwJywKKyAgICAgICAg
ICAgICAgICAnbWF4UmV2aXNpb24nOiAnU2llcnJhMTZEOTk5JworICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnY29tbWFuZCc6IFsnbGlzdCcsICdhbGwgb3N4
IDE2RXh4IGJ1aWxkcyddLAorICAgICAgICAgICAgICAgICdzdWJDb21taXRDb21tYW5kJzogWyds
aXN0JywgJ3N1YkNvbW1pdCcsICdmb3InLCAncmV2aXNpb24nXSwKKyAgICAgICAgICAgICAgICAn
bGluZXNUb0lnbm9yZSc6ICdeXFwuKiQnLAorICAgICAgICAgICAgICAgICdtaW5SZXZpc2lvbic6
ICdTaWVycmExNkUwJywKKyAgICAgICAgICAgICAgICAnbWF4UmV2aXNpb24nOiAnU2llcnJhMTZF
OTk5JworICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfTsKKworCisgICAgY29uc3QgY29u
ZmlnV2l0aG91dFN1YkNvbW1pdENvbW1hbmQgPSB7CisgICAgICAgICduYW1lJzogJ09TWCcsCisg
ICAgICAgICdjdXN0b21Db21tYW5kcyc6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAnY29tbWFuZCc6IFsnbGlzdCcsICdhbGwgb3N4IDE2RHh4IGJ1aWxkcyddLAorICAgICAgICAg
ICAgICAgICdsaW5lc1RvSWdub3JlJzogJ15cXC4qJCcsCisgICAgICAgICAgICAgICAgJ21pblJl
dmlzaW9uJzogJ1NpZXJyYTE2RDAnLAorICAgICAgICAgICAgICAgICdtYXhSZXZpc2lvbic6ICdT
aWVycmExNkQ5OTknCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICdjb21tYW5kJzogWydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRzJ10sCisgICAgICAg
ICAgICAgICAgJ2xpbmVzVG9JZ25vcmUnOiAnXlxcLiokJywKKyAgICAgICAgICAgICAgICAnbWlu
UmV2aXNpb24nOiAnU2llcnJhMTZFMCcsCisgICAgICAgICAgICAgICAgJ21heFJldmlzaW9uJzog
J1NpZXJyYTE2RTk5OScKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH07CisKKyAgICBk
ZXNjcmliZSgnT1NCdWlsZGVyRmV0Y2hlci5fY29tcHV0ZU9yZGVyJywgKCkgPT4geworICAgICAg
ICBpdCgnc2hvdWxkIGNhbGN1bGF0ZSB0aGUgcmlnaHQgb3JkZXIgZm9yIGEgZ2l2ZW4gdmFsaWQg
cmV2aXNpb24nLCAoZG9uZSkgPT4geworICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBP
U0J1aWxkRmV0Y2hlcigpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGZldGNoZXIuX2NvbXB1
dGVPcmRlcignU2llcnJhMTZEMzInKSwgMTYwMzAwMzIwMCk7CisgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwoZmV0Y2hlci5fY29tcHV0ZU9yZGVyKCcxNkQzMjEnKSwgMTYwMzAzMjEwMCk7CisgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwoZmV0Y2hlci5fY29tcHV0ZU9yZGVyKCcxNmQzMjEnKSwgMTYw
MzAzMjEwMCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoZmV0Y2hlci5fY29tcHV0ZU9yZGVy
KCcxNkQzMjF6JyksIDE2MDMwMzIxMjYpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGZldGNo
ZXIuX2NvbXB1dGVPcmRlcignMTZkMzIxWicpLCAxNjAzMDMyMTI2KTsKKyAgICAgICAgICAgIGRv
bmUoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhc3NlcnRpb24g
ZXJyb3Igd2hlbiBnaXZlbiBhIGludmFsaWQgcmV2aXNpb24nLCAoZG9uZSkgPT4geworICAgICAg
ICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcigpOworICAgICAgICAgICAg
YXNzZXJ0LnRocm93cygoKSA9PiBmZXRjaGVyLl9jb21wdXRlT3JkZXIoJ2ludmFsaWQnKSwgKGVy
cm9yKSA9PiBlcnJvci5uYW1lID09ICdBc3NlcnRpb25FcnJvcicpOworICAgICAgICAgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBmZXRjaGVyLl9jb21wdXRlT3JkZXIoJycpLCAoZXJyb3IpID0+IGVy
cm9yLm5hbWUgPT0gJ0Fzc2VydGlvbkVycm9yJyk7CisgICAgICAgICAgICBhc3NlcnQudGhyb3dz
KCgpID0+IGZldGNoZXIuX2NvbXB1dGVPcmRlcignMTYnKSwgKGVycm9yKSA9PiBlcnJvci5uYW1l
ID09ICdBc3NlcnRpb25FcnJvcicpOworICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBm
ZXRjaGVyLl9jb21wdXRlT3JkZXIoJzE2RCcpLCAoZXJyb3IpID0+IGVycm9yLm5hbWUgPT0gJ0Fz
c2VydGlvbkVycm9yJyk7CisgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZldGNoZXIu
X2NvbXB1dGVPcmRlcignMTIzJyksIChlcnJvcikgPT4gZXJyb3IubmFtZSA9PSAnQXNzZXJ0aW9u
RXJyb3InKTsKKyAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZmV0Y2hlci5fY29tcHV0
ZU9yZGVyKCdEMTIzJyksIChlcnJvcikgPT4gZXJyb3IubmFtZSA9PSAnQXNzZXJ0aW9uRXJyb3In
KTsKKyAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZmV0Y2hlci5fY29tcHV0ZU9yZGVy
KCcxMjN6JyksIChlcnJvcikgPT4gZXJyb3IubmFtZSA9PSAnQXNzZXJ0aW9uRXJyb3InKTsKKyAg
ICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgfSkKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdP
U0J1aWxkZXJGZXRjaGVyLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzJywgKCkgPT4geworICAg
ICAgICBpdCgnc2hvdWxkIG9ubHkgcmV0dXJuIGNvbW1pdHMgd2hvc2Ugb3JkZXJzIGFyZSBoaWdo
ZXIgdGhhbiBzcGVjaWZpZWQgb3JkZXInLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBsb2dn
ZXIgPSBuZXcgTW9ja0xvZ2dlcjsKKyAgICAgICAgICAgIGNvbnN0IGZldGNodGVyID0gbmV3IE9T
QnVpbGRGZXRjaGVyKG51bGwsIG51bGwsIG51bGwsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOwor
ICAgICAgICAgICAgY29uc3Qgd2FpdGluZ0Zvckludm9jYXRpb25Qcm9taXNlID0gTW9ja1N1YnBy
b2Nlc3Mud2FpdGluZ0Zvckludm9jYXRpb24oKTsKKyAgICAgICAgICAgIGNvbnN0IGZldGNoQ29t
bWl0c1Byb21pc2UgPSBmZXRjaHRlci5fY29tbWl0c0ZvckF2YWlsYWJsZUJ1aWxkcygnT1NYJywg
WydsaXN0JywgJ2J1aWxkMSddLCAnXlxcLiokJywgMTYwNDAwMDAwMCk7CisKKyAgICAgICAgICAg
IHJldHVybiB3YWl0aW5nRm9ySW52b2NhdGlvblByb21pc2UudGhlbigoKSA9PiB7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwg
MSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZv
Y2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYnVpbGQxJ10pOworICAgICAgICAgICAgICAg
IE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLnJlc29sdmUoJzE2RDMyMVxuMTZFMzIxelxu
XG4xNkYzMjEnKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hDb21taXRzUHJvbWlzZTsK
KyAgICAgICAgICAgIH0pLnRoZW4ocmVzdWx0cyA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3VsdHMubGVuZ3RoLCAyKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cmVzdWx0c1swXVsncmVwb3NpdG9yeSddLCAnT1NYJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3VsdHNbMF1bJ3JldmlzaW9uJ10sICcxNkUzMjF6Jyk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHNbMF1bJ29yZGVyJ10sIDE2MDQwMzIxMjYpOworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRzWzFdWydyZXBvc2l0b3J5J10sICdPU1gnKTsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0c1sxXVsncmV2aXNpb24nXSwgJzE2
RjMyMScpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRzWzFdWydvcmRlcidd
LCAxNjA1MDMyMTAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKwor
ICAgIGRlc2NyaWJlKCdPU0J1aWxkRmV0Y2hlci5fYWRkU3ViQ29tbWl0c0ZvckJ1aWxkJywgKCkg
PT4geworICAgICAgICBpdCgnc2hvdWxkIGFkZCBzdWItY29tbWl0IGluZm8gZm9yIGNvbW1pdHMn
LCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKKyAg
ICAgICAgICAgIGNvbnN0IGZldGNodGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKG51bGwsIG51bGws
IG51bGwsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOworICAgICAgICAgICAgY29uc3Qgd2FpdGlu
Z0Zvckludm9jYXRpb25Qcm9taXNlID0gTW9ja1N1YnByb2Nlc3Mud2FpdGluZ0Zvckludm9jYXRp
b24oKTsKKyAgICAgICAgICAgIGNvbnN0IGFkZFN1YkNvbW1pdFByb21pc2UgPSBmZXRjaHRlci5f
YWRkU3ViQ29tbWl0c0ZvckJ1aWxkKFtvc3hDb21taXQsIGFub3RoZXJPU1hDb21taXRdLCBbJ3N1
YkNvbW1pdCcsICdmb3InLCAncmV2aXNpb24nXSk7CisKKyAgICAgICAgICAgIHJldHVybiB3YWl0
aW5nRm9ySW52b2NhdGlvblByb21pc2UudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5j
b21tYW5kLCBbJ3N1YkNvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJhMTZEMzInXSk7
CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShK
U09OLnN0cmluZ2lmeShzdWJDb21taXRXaXRoV2ViS2l0KSk7CisgICAgICAgICAgICAgICAgTW9j
a1N1YnByb2Nlc3MucmVzZXQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nl
c3Mud2FpdGluZ0Zvckludm9jYXRpb24oKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewor
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5s
ZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nl
c3MuaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydzdWJDb21taXQnLCAnZm9yJywgJ3JldmlzaW9u
JywgJ1NpZXJyYTE2RTMyJ10pOworICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLmludm9j
YXRpb25zWzBdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlclN1YkNvbW1pdFdpdGhXZWJL
aXQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkU3ViQ29tbWl0UHJvbWlzZTsKKyAgICAg
ICAgICAgIH0pLnRoZW4ocmVzdWx0cyA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlc3VsdHMubGVuZ3RoLCAyKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0
c1swXVsncmVwb3NpdG9yeSddLCBvc3hDb21taXRbJ3JlcG9zaXRvcnknXSk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHNbMF1bJ3JldmlzaW9uJ10sIG9zeENvbW1pdFsncmV2
aXNpb24nXSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzBdWydz
dWJDb21taXRzJ10sIHN1YkNvbW1pdFdpdGhXZWJLaXQpOworICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChyZXN1bHRzWzFdWydyZXBvc2l0b3J5J10sIGFub3RoZXJPU1hDb21taXRbJ3JlcG9z
aXRvcnknXSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHNbMV1bJ3Jldmlz
aW9uJ10sIGFub3RoZXJPU1hDb21taXRbJ3JldmlzaW9uJ10pOworICAgICAgICAgICAgICAgIGFz
c2VydC5kZWVwRXF1YWwocmVzdWx0c1sxXVsnc3ViQ29tbWl0cyddLCBhbm90aGVyU3ViQ29tbWl0
V2l0aFdlYktpdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQo
J3Nob3VsZCBmYWlsIGlmIHRoZSBjb21tYW5kIHRvIGdldCBzdWItY29tbWl0IGluZm8gZmFpbHMn
LCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKKyAg
ICAgICAgICAgIGNvbnN0IGZldGNodGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKG51bGwsIG51bGws
IG51bGwsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOworICAgICAgICAgICAgY29uc3Qgd2FpdGlu
Z0Zvckludm9jYXRpb25Qcm9taXNlID0gTW9ja1N1YnByb2Nlc3Mud2FpdGluZ0Zvckludm9jYXRp
b24oKTsKKyAgICAgICAgICAgIGNvbnN0IGFkZFN1YkNvbW1pdFByb21pc2UgPSBmZXRjaHRlci5f
YWRkU3ViQ29tbWl0c0ZvckJ1aWxkKFtvc3hDb21taXRdLCBbJ3N1YkNvbW1pdCcsICdmb3InLCAn
cmV2aXNpb24nXSkKKworICAgICAgICAgICAgcmV0dXJuIHdhaXRpbmdGb3JJbnZvY2F0aW9uUHJv
bWlzZS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoTW9ja1N1YnBy
b2Nlc3MuaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVl
cEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnc3ViQ29tbWl0
JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkQzMiddKTsKKyAgICAgICAgICAgICAgICBN
b2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5yZWplY3QoJ0ZhaWxlZCBnZXR0aW5nIHN1Yi1j
b21taXQnKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkU3ViQ29tbWl0UHJvbWlzZTsKKyAg
ICAgICAgICAgIH0pLmNhdGNoKGVycm9yX291dHB1dCA9PiB7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0KGVycm9yX291dHB1dCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGVycm9yX291
dHB1dCwgJ0ZhaWxlZCBnZXR0aW5nIHN1Yi1jb21taXQnKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KQorICAgIH0pCisKKyAgICBkZXNjcmliZSgnT1NCdWlsZEZldGNoZXIuZmV0Y2hBbmRS
ZXBvcnROZXdCdWlsZHMnLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgcmVwb3J0IGFsbCBi
dWlsZCBjb21taXRzIHdpdGggc3ViLWNvbW1pdHMnLCAoKSA9PiB7CisgICAgICAgICAgICBjb25z
dCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKKyAgICAgICAgICAgIGNvbnN0IGZldGNodGVyID0g
bmV3IE9TQnVpbGRGZXRjaGVyKGNvbmZpZywgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVB
dXRoLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKKyAgICAgICAgICAgIGNvbnN0IGRiID0gVGVz
dFNlcnZlci5kYXRhYmFzZSgpOworICAgICAgICAgICAgbGV0IGZldGNoQW5kUmVwb3J0UHJvbWlz
ZSA9IG51bGw7CisgICAgICAgICAgICBsZXQgZmV0Y2hBdmFpbGFibGVCdWlsZHNQcm9taXNlID0g
bnVsbDsKKworICAgICAgICAgICAgcmV0dXJuIGFkZFNsYXZlRm9yUmVwb3J0KGVtcHR5UmVwb3J0
KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoWworICAg
ICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ3JlcG9zaXRvcmllcycsIHsnaWQnOiAxMCwgJ25h
bWUnOiAnT1NYJ30pLAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7
J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RDY3JywgJ29yZGVyJzogMTYw
MzAwNjcwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNl
cnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RDY4
JywgJ29yZGVyJzogMTYwMzAwNjgwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAg
ICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9u
JzogJ1NpZXJyYTE2RDY5JywgJ29yZGVyJzogMTYwMzAwNjkwMCwgJ3JlcG9ydGVkJzogZmFsc2V9
KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5
JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkUzMicsICdvcmRlcic6IDE2MDQwMDMyMDAsICdy
ZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRz
JywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkUzMycsICdvcmRlcic6
IDE2MDQwMDMzMDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIu
aW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmEx
NkUzM2cnLCAnb3JkZXInOiAxNjA0MDAzMzA3LCAncmVwb3J0ZWQnOiB0cnVlfSldKTsKKyAgICAg
ICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBUZXN0U2VydmVy
LnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9t
PTE2MDMwMDAwMDAmdG89MTYwMzA5OTkwMCcpOworICAgICAgICAgICAgfSkudGhlbihyZXN1bHQg
PT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5n
dGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVsw
XVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RDY4Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjAzMDA2ODAwKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1p
dHMvT1NYL2xhc3QtcmVwb3J0ZWQ/ZnJvbT0xNjA0MDAwMDAwJnRvPTE2MDQwOTk5MDAnKTsKKyAg
ICAgICAgICAgIH0pLnRoZW4ocmVzdWx0ID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ3JldmlzaW9uJ10sICdTaWVycmExNkUzM2cnKTsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVy
J10sIDE2MDQwMDMzMDcpOworICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRpbmdGb3JJbnZvY2F0
aW9uUHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRpbmdGb3JJbnZvY2F0aW9uKCk7CisgICAg
ICAgICAgICAgICAgZmV0Y2hBdmFpbGFibGVCdWlsZHNQcm9taXNlID0gZmV0Y2h0ZXIuX2ZldGNo
QXZhaWxhYmxlQnVpbGRzKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRpbmdGb3JJbnZv
Y2F0aW9uUHJvbWlzZTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAg
ICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0aW5nRm9ySW52b2NhdGlvbigpOworICAgICAg
ICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52
b2NhdGlvbnMuc29ydCgoaW52b2NhdGlvbiwgYW50b2hlckludm9jYXRpb24pID0+IGludm9jYXRp
b25bJ2NvbW1hbmQnXSA+IGFudG9oZXJJbnZvY2F0aW9uWydjb21tYW5kJ10pOworICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5sZW5ndGgsIDIp
OworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2Nh
dGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOworICAg
ICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNb
MV0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOworICAgICAgICAg
ICAgICAgIE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmEx
NkQ2OFxuU2llcnJhMTZENjlcbicpOworICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLmlu
dm9jYXRpb25zWzFdLnJlc29sdmUoJ1xuXG5TaWVycmExNkUzMlxuU2llcnJhMTZFMzNcblNpZXJy
YTE2RTMzaFxuU2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5y
ZXNldCgpOworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0aW5nRm9y
SW52b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAg
ICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnMuc29ydCgoaW52b2NhdGlvbiwgYW50b2hlcklu
dm9jYXRpb24pID0+IGludm9jYXRpb25bJ2NvbW1hbmQnXSA+IGFudG9oZXJJbnZvY2F0aW9uWydj
b21tYW5kJ10pOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChNb2NrU3VicHJvY2Vzcy5p
bnZvY2F0aW9ucy5sZW5ndGgsIDIpOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwo
TW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ3N1YkNvbW1p
dCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJhMTZENjknXSk7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1sxXS5jb21tYW5kLCBb
J2xpc3QnLCAnc3ViQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkUzM2gnXSk7
CisKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5yZXNvbHZl
KEpTT04uc3RyaW5naWZ5KHN1YkNvbW1pdFdpdGhXZWJLaXQpKTsKKyAgICAgICAgICAgICAgICBN
b2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1sxXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3Ro
ZXJTdWJDb21taXRXaXRoV2ViS2l0KSk7CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3Mu
cmVzZXQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3Mud2FpdGluZ0Zv
ckludm9jYXRpb24oKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5sZW5ndGgsIDEpOwor
ICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlv
bnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ3N1YkNvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAn
U2llcnJhMTZFMzQnXSk7CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlv
bnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShhbm90aGVyU3ViQ29tbWl0V2l0aFdlYktpdEFu
ZEphdmFTY3JpcHRDb3JlKSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hBdmFpbGFi
bGVCdWlsZHNQcm9taXNlOworICAgICAgICAgICAgfSkudGhlbihyZXN1bHRzID0+IHsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0cy5sZW5ndGgsIDMpOworICAgICAgICAgICAg
ICAgIE1vY2tTdWJwcm9jZXNzLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgZmV0Y2hBbmRSZXBv
cnRQcm9taXNlID0gZmV0Y2h0ZXIuZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3Mud2FpdGluZ0Zvckludm9jYXRpb24oKTsKKyAg
ICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3Vi
cHJvY2Vzcy53YWl0aW5nRm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9
PiB7CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnMuc29ydCgoaW52
b2NhdGlvbiwgYW50b2hlckludm9jYXRpb24pID0+IGludm9jYXRpb25bJ2NvbW1hbmQnXSA+IGFu
dG9oZXJJbnZvY2F0aW9uWydjb21tYW5kJ10pOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5sZW5ndGgsIDIpOworICAgICAgICAgICAgICAg
IGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0uY29tbWFuZCwg
WydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOworICAgICAgICAgICAgICAgIGFzc2Vy
dC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMV0uY29tbWFuZCwgWydsaXN0
JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOworICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9j
ZXNzLmludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2OFxuU2llcnJhMTZENjlc
bicpOworICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzFdLnJlc29s
dmUoJ1xuXG5TaWVycmExNkUzMlxuU2llcnJhMTZFMzNcblNpZXJyYTE2RTMzaFxuU2llcnJhMTZF
MzQnKTsKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5yZXNldCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0aW5nRm9ySW52b2NhdGlvbigpOworICAg
ICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3Mu
aW52b2NhdGlvbnMuc29ydCgoaW52b2NhdGlvbiwgYW50b2hlckludm9jYXRpb24pID0+IGludm9j
YXRpb25bJ2NvbW1hbmQnXSA+IGFudG9oZXJJbnZvY2F0aW9uWydjb21tYW5kJ10pOworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5sZW5ndGgs
IDIpOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52
b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ3N1YkNvbW1pdCcsICdmb3InLCAncmV2aXNp
b24nLCAnU2llcnJhMTZENjknXSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChN
b2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1sxXS5jb21tYW5kLCBbJ2xpc3QnLCAnc3ViQ29tbWl0
JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkUzM2gnXSk7CisKKyAgICAgICAgICAgICAg
ICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHN1
YkNvbW1pdFdpdGhXZWJLaXQpKTsKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5pbnZv
Y2F0aW9uc1sxXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJTdWJDb21taXRXaXRoV2Vi
S2l0KSk7CisKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5yZXNldCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0aW5nRm9ySW52b2NhdGlvbigpOwor
ICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAg
TW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShhbm90
aGVyU3ViQ29tbWl0V2l0aFdlYktpdEFuZEphdmFTY3JpcHRDb3JlKSk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5jb21tYW5k
LCBbJ2xpc3QnLCAnc3ViQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkUzNCdd
KTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaEFuZFJlcG9ydFByb21pc2U7CisgICAg
ICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlc3VsdFsnc3RhdHVzJ10sICdPSycpOworICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNl
LmFsbChbCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ3JlcG9zaXRvcmllcycs
IHsnbmFtZSc6ICdXZWJLaXQnfSksCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3Mo
J3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29yZSd9KSwKKyAgICAgICAgICAg
ICAgICAgICAgZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZE
NjknfSksCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7J3Jl
dmlzaW9uJzogJ1NpZXJyYTE2RTMzaCd9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuc2VsZWN0
Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZFMzQnfSldKTsKKyAgICAgICAg
ICAgIH0pLnRoZW4ocmVzdWx0cyA9PiB7CisgICAgICAgICAgICAgICAgY29uc3Qgd2Via2l0UmVw
b3NpdG9yeSA9IHJlc3VsdHNbMF07CisgICAgICAgICAgICAgICAgY29uc3QganNjUmVwb3NpdG9y
eSA9IHJlc3VsdHNbMV07CisgICAgICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0MTZENjkgPSBy
ZXN1bHRzWzJdOworICAgICAgICAgICAgICAgIGNvbnN0IG9zeENvbW1pdDE2RTMzaCA9IHJlc3Vs
dHNbM107CisgICAgICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0MTZFMzQgPSByZXN1bHRzWzRd
OworCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHdlYmtpdFJlcG9zaXRvcnkubGVuZ3Ro
LCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwod2Via2l0UmVwb3NpdG9yeVswXVsn
b3duZXInXSwgMTApOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChqc2NSZXBvc2l0b3J5
Lmxlbmd0aCwgMSkKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoanNjUmVwb3NpdG9yeVsw
XVsnb3duZXInXSwgMTApOworCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1p
dDE2RDY5Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1p
dDE2RDY5WzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwob3N4Q29tbWl0MTZENjlbMF1bJ29yZGVyJ10sIDE2MDMwMDY5MDApOworCisgICAgICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMzaC5sZW5ndGgsIDEpOworICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2hbMF1bJ3JlcG9zaXRvcnknXSwgMTAp
OworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2hbMF1bJ29yZGVy
J10sIDE2MDQwMDMzMDgpOworCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1p
dDE2RTM0Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1p
dDE2RTM0WzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwob3N4Q29tbWl0MTZFMzRbMF1bJ29yZGVyJ10sIDE2MDQwMDM0MDApOworCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRz
L09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwMzAwMDAwMCZ0bz0xNjAzMDk5OTAwJyk7CisgICAg
ICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZENjknKTsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10s
IDE2MDMwMDY5MDApOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3Rl
QVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwNDAw
MDAwMCZ0bz0xNjA0MDk5OTAwJyk7CisgICAgICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZp
c2lvbiddLCAnU2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVz
dWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDQwMDM0MDApOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgcmVwb3J0IGNvbW1pdHMgd2l0aG91
dCBzdWItY29tbWl0cyBpZiAic3ViQ29tbWl0Q29tbWFuZCIgaXMgbm90IHNwZWNpZmllZCBpbiBj
b25maWcnLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dl
cjsKKyAgICAgICAgICAgIGNvbnN0IGZldGNodGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKGNvbmZp
Z1dpdGhvdXRTdWJDb21taXRDb21tYW5kLCBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLCBzbGF2ZUF1
dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOworICAgICAgICAgICAgY29uc3QgZGIgPSBUZXN0
U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAgICBsZXQgZmV0Y2hBbmRSZXBvcnRQcm9taXNl
ID0gbnVsbDsKKyAgICAgICAgICAgIGxldCBmZXRjaEF2YWlsYWJsZUJ1aWxkc1Byb21pc2UgPSBu
dWxsOworCisgICAgICAgICAgICByZXR1cm4gYWRkU2xhdmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQp
LnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbCisgICAg
ICAgICAgICAgICAgICAgIGRiLmluc2VydCgncmVwb3NpdG9yaWVzJywgeydpZCc6IDEwLCAnbmFt
ZSc6ICdPU1gnfSksCisgICAgICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsn
cmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZENjcnLCAnb3JkZXInOiAxNjAz
MDA2NzAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAgICAgICAgIGRiLmluc2Vy
dCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZENjgn
LCAnb3JkZXInOiAxNjAzMDA2ODAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAg
ICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24n
OiAnU2llcnJhMTZENjknLCAnb3JkZXInOiAxNjAzMDA2OTAwLCAncmVwb3J0ZWQnOiBmYWxzZX0p
LAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnkn
OiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RTMyJywgJ29yZGVyJzogMTYwNDAwMzIwMCwgJ3Jl
cG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMn
LCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RTMzJywgJ29yZGVyJzog
MTYwNDAwMzMwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgICAgICBkYi5p
bnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2
RTMzZycsICdvcmRlcic6IDE2MDQwMDMzMDcsICdyZXBvcnRlZCc6IHRydWV9KV0pOworICAgICAg
ICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIu
cmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209
MTYwMzAwMDAwMCZ0bz0xNjAzMDk5OTAwJyk7CisgICAgICAgICAgICB9KS50aGVuKHJlc3VsdCA9
PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0
aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBd
WydyZXZpc2lvbiddLCAnU2llcnJhMTZENjgnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMwMDY4MDApOworCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21t
aXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwNDAwMDAwMCZ0bz0xNjA0MDk5OTAwJyk7Cisg
ICAgICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZFMzNnJyk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRl
ciddLCAxNjA0MDAzMzA3KTsKKyAgICAgICAgICAgICAgICBjb25zdCB3YWl0aW5nRm9ySW52b2Nh
dGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53YWl0aW5nRm9ySW52b2NhdGlvbigpOworICAg
ICAgICAgICAgICAgIGZldGNoQW5kUmVwb3J0UHJvbWlzZSA9IGZldGNodGVyLmZldGNoQW5kUmVw
b3J0TmV3QnVpbGRzKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRpbmdGb3JJbnZvY2F0
aW9uUHJvbWlzZTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAg
IHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0aW5nRm9ySW52b2NhdGlvbigpOworICAgICAgICAg
ICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2Nh
dGlvbnMuc29ydCgoaW52b2NhdGlvbiwgYW50b2hlckludm9jYXRpb24pID0+IGludm9jYXRpb25b
J2NvbW1hbmQnXSA+IGFudG9oZXJJbnZvY2F0aW9uWydjb21tYW5kJ10pOworICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5sZW5ndGgsIDIpOwor
ICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlv
bnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOworICAgICAg
ICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMV0u
Y29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOworICAgICAgICAgICAg
ICAgIE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2
OFxuU2llcnJhMTZENjlcbicpOworICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLmludm9j
YXRpb25zWzFdLnJlc29sdmUoJ1xuXG5TaWVycmExNkUzMlxuU2llcnJhMTZFMzNcblNpZXJyYTE2
RTMzaFxuU2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hBbmRSZXBv
cnRQcm9taXNlOworICAgICAgICAgICAgfSkudGhlbihyZXN1bHQgPT4geworICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUHJvbWlzZS5hbGwoWworICAgICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dz
KCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnV2ViS2l0J30pLAorICAgICAgICAgICAgICAgICAg
ICBkYi5zZWxlY3RSb3dzKCdyZXBvc2l0b3JpZXMnLCB7J25hbWUnOiAnSmF2YVNjcmlwdENvcmUn
fSksCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7J3Jldmlz
aW9uJzogJ1NpZXJyYTE2RDY5J30pLAorICAgICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dz
KCdjb21taXRzJywgeydyZXZpc2lvbic6ICdTaWVycmExNkUzM2gnfSksCisgICAgICAgICAgICAg
ICAgICAgIGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7J3JldmlzaW9uJzogJ1NpZXJyYTE2RTM0
J30pXSk7CisgICAgICAgICAgICB9KS50aGVuKHJlc3VsdHMgPT4geworICAgICAgICAgICAgICAg
IGNvbnN0IHdlYmtpdFJlcG9zaXRvcnkgPSByZXN1bHRzWzBdOworICAgICAgICAgICAgICAgIGNv
bnN0IGpzY1JlcG9zaXRvcnkgPSByZXN1bHRzWzFdOworICAgICAgICAgICAgICAgIGNvbnN0IG9z
eENvbW1pdDE2RDY5ID0gcmVzdWx0c1syXTsKKyAgICAgICAgICAgICAgICBjb25zdCBvc3hDb21t
aXQxNkUzM2ggPSByZXN1bHRzWzNdOworICAgICAgICAgICAgICAgIGNvbnN0IG9zeENvbW1pdDE2
RTM0ID0gcmVzdWx0c1s0XTsKKworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbCh3ZWJraXRS
ZXBvc2l0b3J5Lmxlbmd0aCwgMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGpzY1Jl
cG9zaXRvcnkubGVuZ3RoLCAwKQorCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENv
bW1pdDE2RDY5Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENv
bW1pdDE2RDY5WzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwob3N4Q29tbWl0MTZENjlbMF1bJ29yZGVyJ10sIDE2MDMwMDY5MDApOworCisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTMzaC5sZW5ndGgsIDEpOworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2hbMF1bJ3JlcG9zaXRvcnknXSwg
MTApOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzM2hbMF1bJ29y
ZGVyJ10sIDE2MDQwMDMzMDgpOworCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENv
bW1pdDE2RTM0Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENv
bW1pdDE2RTM0WzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwob3N4Q29tbWl0MTZFMzRbMF1bJ29yZGVyJ10sIDE2MDQwMDM0MDApOworCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21t
aXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwMzAwMDAwMCZ0bz0xNjAzMDk5OTAwJyk7Cisg
ICAgICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZENjknKTsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVy
J10sIDE2MDMwMDY5MDApOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVt
b3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYw
NDAwMDAwMCZ0bz0xNjA0MDk5OTAwJyk7CisgICAgICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwg
MSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydy
ZXZpc2lvbiddLCAnU2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDQwMDM0MDApOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgc3RvcCByZXBvcnRpbmcgaWYg
YW55IGN1c3RvbSBjb21tYW5kIGZhaWxzJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgbG9n
Z2VyID0gbmV3IE1vY2tMb2dnZXI7CisgICAgICAgICAgICBjb25zdCBmZXRjaHRlciA9IG5ldyBP
U0J1aWxkRmV0Y2hlcihjb25maWcsIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCksIHNsYXZlQXV0aCwg
TW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7CisgICAgICAgICAgICBjb25zdCBkYiA9IFRlc3RTZXJ2
ZXIuZGF0YWJhc2UoKTsKKyAgICAgICAgICAgIGxldCBmZXRjaEFuZFJlcG9ydFByb21pc2UgPSBu
dWxsOworCisgICAgICAgICAgICByZXR1cm4gYWRkU2xhdmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQp
LnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbCisgICAg
ICAgICAgICAgICAgICAgIGRiLmluc2VydCgncmVwb3NpdG9yaWVzJywgeydpZCc6IDEwLCAnbmFt
ZSc6ICdPU1gnfSksCisgICAgICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsn
cmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZENjcnLCAnb3JkZXInOiAxNjAz
MDA2NzAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAgICAgICAgIGRiLmluc2Vy
dCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZENjgn
LCAnb3JkZXInOiAxNjAzMDA2ODAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAg
ICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24n
OiAnU2llcnJhMTZENjknLCAnb3JkZXInOiAxNjAzMDA2OTAwLCAncmVwb3J0ZWQnOiBmYWxzZX0p
LAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnkn
OiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RTMyJywgJ29yZGVyJzogMTYwNDAwMzIwMCwgJ3Jl
cG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMn
LCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RTMzJywgJ29yZGVyJzog
MTYwNDAwMzMwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAgICAgICBkYi5p
bnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2
RTMzZycsICdvcmRlcic6IDE2MDQwMDMzMDcsICdyZXBvcnRlZCc6IHRydWV9KV0pOworICAgICAg
ICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIu
cmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209
MTYwMzAwMDAwMCZ0bz0xNjAzMDk5OTAwJyk7CisgICAgICAgICAgICB9KS50aGVuKHJlc3VsdCA9
PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0
aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBd
WydyZXZpc2lvbiddLCAnU2llcnJhMTZENjgnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMwMDY4MDApOworCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21t
aXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwNDAwMDAwMCZ0bz0xNjA0MDk5OTAwJyk7Cisg
ICAgICAgICAgICB9KS50aGVuKHJlc3VsdCA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZFMzNnJyk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRl
ciddLCAxNjA0MDAzMzA3KTsKKworICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRpbmdGb3JJbnZv
Y2F0aW9uUHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRpbmdGb3JJbnZvY2F0aW9uKCk7Cisg
ICAgICAgICAgICAgICAgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gZmV0Y2h0ZXIuZmV0Y2hBbmRS
ZXBvcnROZXdCdWlsZHMoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gd2FpdGluZ0Zvckludm9j
YXRpb25Qcm9taXNlOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIE1vY2tTdWJwcm9jZXNzLndhaXRpbmdGb3JJbnZvY2F0aW9uKCk7CisgICAgICAg
ICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5pbnZv
Y2F0aW9ucy5zb3J0KChpbnZvY2F0aW9uLCBhbnRvaGVySW52b2NhdGlvbikgPT4gaW52b2NhdGlv
blsnY29tbWFuZCddID4gYW50b2hlckludm9jYXRpb25bJ2NvbW1hbmQnXSk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMik7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0
aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1sx
XS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkV4eCBidWlsZHMnXSk7CisgICAgICAgICAg
ICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnXG5cblNpZXJyYTE2
RDY4XG5TaWVycmExNkQ2OVxuJyk7CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52
b2NhdGlvbnNbMV0ucmVzb2x2ZSgnXG5cblNpZXJyYTE2RTMyXG5TaWVycmExNkUzM1xuU2llcnJh
MTZFMzNoXG5TaWVycmExNkUzNCcpOworICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLnJl
c2V0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vY2tTdWJwcm9jZXNzLndhaXRpbmdGb3JJ
bnZvY2F0aW9uKCk7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAg
ICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5zb3J0KChpbnZvY2F0aW9uLCBhbnRvaGVySW52
b2NhdGlvbikgPT4gaW52b2NhdGlvblsnY29tbWFuZCddID4gYW50b2hlckludm9jYXRpb25bJ2Nv
bW1hbmQnXSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmlu
dm9jYXRpb25zLmxlbmd0aCwgMik7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChN
b2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnc3ViQ29tbWl0
JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkQ2OSddKTsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzFdLmNvbW1hbmQsIFsn
bGlzdCcsICdzdWJDb21taXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RTMzaCddKTsK
KworICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLnJlc29sdmUo
SlNPTi5zdHJpbmdpZnkoc3ViQ29tbWl0V2l0aFdlYktpdCkpOworICAgICAgICAgICAgICAgIE1v
Y2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzFdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhl
clN1YkNvbW1pdFdpdGhXZWJLaXQpKTsKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5y
ZXNldCgpOworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0aW5nRm9y
SW52b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMSk7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9u
c1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnc3ViQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdT
aWVycmExNkUzNCddKTsKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9u
c1swXS5yZWplY3QoJ0NvbW1hbmQgZmFpbGVkJyk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmV0Y2hBbmRSZXBvcnRQcm9taXNlOworICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3Jfb3V0cHV0
ID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQoZXJyb3Jfb3V0cHV0KTsKKyAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwoZXJyb3Jfb3V0cHV0LCAnQ29tbWFuZCBmYWlsZWQnKTsKKworICAg
ICAgICAgICAgICAgIHJldHVybiBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkv
Y29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2MDMwMDAwMDAmdG89MTYwMzA5OTkwMCcp
OworICAgICAgICAgICAgfSkudGhlbihyZXN1bHQgPT4geworICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RDY4
Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydv
cmRlciddLCAxNjAzMDA2ODAwKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBUZXN0U2VydmVy
LnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9t
PTE2MDQwMDAwMDAmdG89MTYwNDA5OTkwMCcpOworICAgICAgICAgICAgfSkudGhlbihyZXN1bHQg
PT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5n
dGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVsw
XVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RTMzZycpOworICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwNDAwMzMwNyk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSkKKyAgICB9KQorfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3MtYnVpbGQtZmV0Y2hlci5qcyBiL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy90b29scy9qcy9vcy1idWlsZC1mZXRjaGVyLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMx
ODhlMmNhOTQ5ZjhlZmQ1MTRlMDVjNzhmMzI4ZDEwYWFjZWVlNTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3MtYnVpbGQtZmV0Y2hlci5qcwpA
QCAtMCwwICsxLDk3IEBACisndXNlIHN0cmljdCc7CisKK2xldCBhc3NlcnQgPSByZXF1aXJlKCdh
c3NlcnQnKTsKKworY2xhc3MgT1NCdWlsZEZldGNoZXIgeworCisgICAgY29uc3RydWN0b3Iob3ND
b25maWcsIHJlbW90ZUFQSSwgc2xhdmVBdXRoLCBzdWJwcm9jZXNzLCBsb2dnZXIpCisgICAgewor
ICAgICAgICB0aGlzLl9vc0NvbmZpZyA9IG9zQ29uZmlnOworICAgICAgICB0aGlzLl9yZXBvcnRl
ZFJldmlzaW9ucyA9IG5ldyBTZXQoKTsKKyAgICAgICAgdGhpcy5fbG9nZ2VyID0gbG9nZ2VyOwor
ICAgICAgICB0aGlzLl9zbGF2ZUF1dGggPSBzbGF2ZUF1dGg7CisgICAgICAgIHRoaXMuX3JlbW90
ZUFQSSA9IHJlbW90ZUFQSTsKKyAgICAgICAgdGhpcy5fc3VicHJvY2VzcyA9IHN1YnByb2Nlc3M7
CisgICAgfQorCisgICAgX2ZldGNoQXZhaWxhYmxlQnVpbGRzKCkKKyAgICB7CisgICAgICAgIGNv
bnN0IGNvbmZpZyA9IHRoaXMuX29zQ29uZmlnOworICAgICAgICBjb25zdCByZXBvc2l0b3J5TmFt
ZSA9IGNvbmZpZ1snbmFtZSddOworICAgICAgICBsZXQgY3VzdG9tQ29tbWFuZHMgPSBjb25maWdb
J2N1c3RvbUNvbW1hbmRzJ107CisKKyAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGN1c3RvbUNv
bW1hbmRzLm1hcChjb21tYW5kID0+IHsKKyAgICAgICAgICAgIGFzc2VydChjb21tYW5kWydtaW5S
ZXZpc2lvbiddKTsKKyAgICAgICAgICAgIGFzc2VydChjb21tYW5kWydtYXhSZXZpc2lvbiddKTsK
KyAgICAgICAgICAgIGNvbnN0IG1pblJldmlzaW9uT3JkZXIgPSB0aGlzLl9jb21wdXRlT3JkZXIo
Y29tbWFuZFsnbWluUmV2aXNpb24nXSk7CisgICAgICAgICAgICBjb25zdCBtYXhSZXZpc2lvbk9y
ZGVyID0gdGhpcy5fY29tcHV0ZU9yZGVyKGNvbW1hbmRbJ21heFJldmlzaW9uJ10pOworCisgICAg
ICAgICAgICBsZXQgZmV0Y2hDb21taXRzUHJvbWlzZSA9IHRoaXMuX3JlbW90ZUFQSS5nZXRKU09O
V2l0aFN0YXR1cyhgL2FwaS9jb21taXRzLyR7ZXNjYXBlKHJlcG9zaXRvcnlOYW1lKX0vbGFzdC1y
ZXBvcnRlZD9mcm9tPSR7bWluUmV2aXNpb25PcmRlcn0mdG89JHttYXhSZXZpc2lvbk9yZGVyfWAp
LnRoZW4ocmVzdWx0ID0+IHsKKyAgICAgICAgICAgICAgICBjb25zdCBtaW5PcmRlciA9IHJlc3Vs
dFsnY29tbWl0cyddLmxlbmd0aCA9PSAxID8gcGFyc2VJbnQocmVzdWx0Wydjb21taXRzJ11bMF1b
J29yZGVyJ10pIDogMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tbWl0c0ZvckF2
YWlsYWJsZUJ1aWxkcyhyZXBvc2l0b3J5TmFtZSwgY29tbWFuZFsnY29tbWFuZCddLCBjb21tYW5k
WydsaW5lc1RvSWdub3JlJ10sIG1pbk9yZGVyKTsKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAg
ICAgIGlmICgnc3ViQ29tbWl0Q29tbWFuZCcgaW4gY29tbWFuZCkKKyAgICAgICAgICAgICAgICBm
ZXRjaENvbW1pdHNQcm9taXNlID0gZmV0Y2hDb21taXRzUHJvbWlzZS50aGVuKGNvbW1pdHMgPT4g
dGhpcy5fYWRkU3ViQ29tbWl0c0ZvckJ1aWxkKGNvbW1pdHMsIGNvbW1hbmRbJ3N1YkNvbW1pdENv
bW1hbmQnXSkpOworCisgICAgICAgICAgICByZXR1cm4gZmV0Y2hDb21taXRzUHJvbWlzZTsKKyAg
ICAgICAgfSkpLnRoZW4ocmVzdWx0cyA9PiB7CisgICAgICAgICAgICByZXR1cm4gQXJyYXkucHJv
dG90eXBlLmNvbmNhdC5hcHBseShbXSwgcmVzdWx0cyk7CisgICAgICAgIH0pOworICAgIH0KKwor
ICAgIF9jb21wdXRlT3JkZXIocmV2aXNpb24pCisgICAgeworICAgICAgICBjb25zdCBidWlsZE5h
bWVSZWdleCA9IC8oXGQrKShbYS16QS16XSkoXGQrKShbYS16QS16XSopLzsKKyAgICAgICAgY29u
c3QgbWF0Y2ggPSBidWlsZE5hbWVSZWdleC5leGVjKHJldmlzaW9uKTsKKyAgICAgICAgYXNzZXJ0
KG1hdGNoKTsKKyAgICAgICAgY29uc3QgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSk7CisgICAg
ICAgIGNvbnN0IGtpbmQgPSBtYXRjaFsyXS50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCkgLSAi
QSIuY2hhckNvZGVBdCgwKTsKKyAgICAgICAgY29uc3QgbWlub3IgPSBwYXJzZUludChtYXRjaFsz
XSk7CisgICAgICAgIGNvbnN0IHZhcmlhbnQgPSBtYXRjaFs0XSA/IG1hdGNoWzRdLnRvVXBwZXJD
YXNlKCkuY2hhckNvZGVBdCgwKSAtICJBIi5jaGFyQ29kZUF0KDApICsgMSA6IDA7CisgICAgICAg
IHJldHVybiAoKG1ham9yICogMTAwICsga2luZCkgKiAxMDAwMCArIG1pbm9yKSAqIDEwMCArIHZh
cmlhbnQ7CisgICAgfQorCisgICAgX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMocmVwb3NpdG9y
eSwgY29tbWFuZCwgbGluZXNUb0lnbm9yZSwgbWluT3JkZXIpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fc3VicHJvY2Vzcy5jYWxsKGNvbW1hbmQpLnRoZW4oKG91dHB1dCkgPT4geworICAg
ICAgICAgICAgbGV0IGxpbmVzID0gb3V0cHV0LnNwbGl0KCdcbicpOworICAgICAgICAgICAgaWYg
KGxpbmVzVG9JZ25vcmUpeworICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4
cChsaW5lc1RvSWdub3JlKTsKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmZpbHRlcihm
dW5jdGlvbihsaW5lKSB7cmV0dXJuICFyZWdleC5leGVjKGxpbmUpO30pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGxpbmVzLm1hcChyZXZpc2lvbiA9PiAoe3JlcG9zaXRvcnks
IHJldmlzaW9uLCAnb3JkZXInOiB0aGlzLl9jb21wdXRlT3JkZXIocmV2aXNpb24pfSkpCisgICAg
ICAgICAgICAgICAgLmZpbHRlcihjb21taXQgPT4gY29tbWl0WydvcmRlciddID4gbWluT3JkZXIp
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBfYWRkU3ViQ29tbWl0c0ZvckJ1aWxkKGNvbW1p
dHMsIGNvbW1hbmQpCisgICAgeworICAgICAgICBsZXQgYWRkU3ViQ29tbWl0c1Byb21pc2UgPSBQ
cm9taXNlLnJlc29sdmUoKTsKKyAgICAgICAgY29tbWl0cy5mb3JFYWNoKChjb21taXQpID0+IHsK
KyAgICAgICAgICAgIGFkZFN1YkNvbW1pdHNQcm9taXNlID0gYWRkU3ViQ29tbWl0c1Byb21pc2Uu
dGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnByb2Nlc3MuY2Fs
bChjb21tYW5kLmNvbmNhdChjb21taXRbJ3JldmlzaW9uJ10pKQorICAgICAgICAgICAgICAgICAg
ICAudGhlbihzdWJDb21taXRPdXRwdXQgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgY29t
bWl0WydzdWJDb21taXRzJ10gPSBKU09OLnBhcnNlKHN1YkNvbW1pdE91dHB1dCk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAg
IHJldHVybiBhZGRTdWJDb21taXRzUHJvbWlzZS50aGVuKCgpID0+IGNvbW1pdHMpOworICAgIH0K
KworICAgIF9zdWJtaXRDb21taXRzKGNvbW1pdEluZm8pCisgICAgeworICAgICAgICBjb25zdCBj
b21taXRzID0geyJzbGF2ZU5hbWUiOiB0aGlzLl9zbGF2ZUF1dGhbJ25hbWUnXSwgInNsYXZlUGFz
c3dvcmQiOiB0aGlzLl9zbGF2ZUF1dGhbJ3Bhc3N3b3JkJ10sICdjb21taXRzJzogY29tbWl0SW5m
b307CisgICAgICAgIHJldHVybiB0aGlzLl9yZW1vdGVBUEkucG9zdEpTT05XaXRoU3RhdHVzKCcv
YXBpL3JlcG9ydC1jb21taXRzLycsIGNvbW1pdHMpOworICAgIH0KKworICAgIGZldGNoQW5kUmVw
b3J0TmV3QnVpbGRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9mZXRjaEF2YWlsYWJs
ZUJ1aWxkcygpLnRoZW4oKHJlc3VsdHMpID0+eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1
Ym1pdENvbW1pdHMocmVzdWx0cyk7CisgICAgICAgIH0pOworICAgIH0KK30KK2lmICh0eXBlb2Yg
bW9kdWxlICE9ICd1bmRlZmluZWQnKQorICAgIG1vZHVsZS5leHBvcnRzLk9TQnVpbGRGZXRjaGVy
ID0gT1NCdWlsZEZldGNoZXI7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
dG9vbHMvanMvc3VicHJvY2Vzcy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9q
cy9zdWJwcm9jZXNzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlNGI0ZTM3Nzk2NDI4MTYzMGM4NjdjMTk4MTZi
NGI2NDI5ZjNmOTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
dG9vbHMvanMvc3VicHJvY2Vzcy5qcwpAQCAtMCwwICsxLDE4IEBACisndXNlIHN0cmljdCc7Citj
b25zdCBjaGlsZFByb2Nlc3MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuQ2hpbGRQcm9jZXNz
OworCitjbGFzcyBTdWJwcm9jZXNzIHsKKyAgICBjYWxsKGNvbW1hbmQpIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKKyAgICAgICAgICAgIHRoaXMu
X2NoaWxkUHJvY2Vzcy5leGVjRmlsZShjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNlKDEpLCAoZXJy
b3IsIHN0ZG91dCwgc3RkZXJyKSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKGVycm9yKQorICAg
ICAgICAgICAgICAgICAgICByZWplY3Qoc3RkZXJyKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3Rkb3V0KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKyAgICB9Cit9OworCitpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykK
KyAgICBtb2R1bGUuZXhwb3J0cy5TdWJwcm9jZXNzID0gU3VicHJvY2VzczsKZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9wdWxsLW9zLXZlcnNpb25zLmpzIGIvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL3B1bGwtb3MtdmVyc2lvbnMuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZmE4N2U2YzRiYTA3YTBhYzZmYjViZTU0YjRlMGU0YTI2OWYzYzkwZQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9wdWxsLW9zLXZlcnNpb25zLmpz
CkBAIC0wLDAgKzEsNDUgQEAKKyMhL3Vzci9sb2NhbC9iaW4vbm9kZQorJ3VzZSBzdHJpY3QnOwor
CisKK2xldCBPU0J1aWxkRmV0Y2hlciA9IHJlcXVpcmUoJy4vanMvb3MtYnVpbGQtZmV0Y2hlci5q
cycpLk9TQnVpbGRGZXRjaGVyOworbGV0IFJlbW90ZUFQSSA9IHJlcXVpcmUoJy4vanMvcmVtb3Rl
LmpzJykuUmVtb3RlQVBJOworbGV0IFN1YnByb2Nlc3MgPSByZXF1aXJlKCcuL2pzL3N1YnByb2Nl
c3MuanMnKS5TdWJwcm9jZXNzOworbGV0IGZzID0gcmVxdWlyZSgnZnMnKTsKK2xldCBwYXJzZUFy
Z3VtZW50cyA9IHJlcXVpcmUoJy4vanMvcGFyc2UtYXJndW1lbnRzLmpzJykucGFyc2VBcmd1bWVu
dHM7CisKK2Z1bmN0aW9uIG1haW4oYXJndikKK3sKKyAgICBsZXQgb3B0aW9ucyA9IHBhcnNlQXJn
dW1lbnRzKGFyZ3YsIFsKKyAgICAgICAge25hbWU6ICctLW9zLWNvbmZpZy1qc29uJywgcmVxdWly
ZWQ6IHRydWV9LAorICAgICAgICB7bmFtZTogJy0tc2VydmVyLWNvbmZpZy1qc29uJywgcmVxdWly
ZWQ6IHRydWV9LAorICAgICAgICB7bmFtZTogJy0tc2Vjb25kcy10by1zbGVlcCcsIHR5cGU6IHBh
cnNlRmxvYXQsIGRlZmF1bHQ6IDQzMjAwfSwKKyAgICBdKTsKKyAgICBpZiAoIW9wdGlvbnMpCisg
ICAgICAgIHJldHVybjsKKworICAgIHN5bmNMb29wKG9wdGlvbnMpOworfQorCitmdW5jdGlvbiBz
eW5jTG9vcChvcHRpb25zKQoreworICAgIGxldCBvc0NvbmZpZ0xpc3QgPSBKU09OLnBhcnNlKGZz
LnJlYWRGaWxlU3luYyhvcHRpb25zWyctLW9zLWNvbmZpZy1qc29uJ10sICd1dGY4JykpOworICAg
IGxldCBzZXJ2ZXJDb25maWcgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhvcHRpb25zWyct
LXNlcnZlci1jb25maWctanNvbiddLCAndXRmOCcpKTsKKworICAgIC8vIHYzIG1vZGVscyB1c2Ug
dGhlIGdsb2JhbCBSZW1vdGVBUEkgdG8gYWNjZXNzIHRoZSBwZXJmIGRhc2hib2FyZC4KKyAgICBn
bG9iYWwuUmVtb3RlQVBJID0gbmV3IFJlbW90ZUFQSShzZXJ2ZXJDb25maWcuc2VydmVyKTsKKwor
ICAgIFByb21pc2UuYWxsKAorICAgICAgICBvc0NvbmZpZ0xpc3QubWFwKG9zQ29uZmlnID0+IG5l
dyBPU0J1aWxkRmV0Y2hlcihvc0NvbmZpZywgZ2xvYmFsLlJlbW90ZUFQSSwgbmV3IFN1YnByb2Nl
c3MsIHNlcnZlckNvbmZpZy5zbGF2ZSwgY29uc29sZSkpCisgICAgKS5jYXRjaChmdW5jdGlvbiAo
ZXJyb3IpIHsKKyAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7CisgICAgICAgIGlmICh0eXBl
b2YoZXJyb3Iuc3RhY2spID09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICBmb3IgKGxldCBsaW5l
IG9mIGVycm9yLnN0YWNrLnNwbGl0KCdcbicpKQorICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJy
b3IobGluZSk7CisgICAgICAgIH0KKyAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
c2V0VGltZW91dChzeW5jTG9vcC5iaW5kKGdsb2JhbCwgb3B0aW9ucyksIG9wdGlvbnNbJy0tc2Vj
b25kcy10by1zbGVlcCddICogMTAwMCk7CisgICAgfSk7Cit9CisKK21haW4ocHJvY2Vzcy5hcmd2
KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9zeW5jLWNvbW1p
dHMucHkgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvc3luYy1jb21taXRzLnB5Cmlu
ZGV4IGE5NmVhMjNkM2RmNDg5OTI1ODE4MTM1NmQ5N2JhOTcwMmZlZjE1NGIuLmE4M2M4ZTBkODU3
YmEyNjA2NjZhZmQxZDk0YTJiNjU1YWQ0YTliMzIgMTAwNzU1Ci0tLSBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy90b29scy9zeW5jLWNvbW1pdHMucHkKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3Rvb2xzL3N5bmMtY29tbWl0cy5weQpAQCAtNTksNyArNTksNyBAQCBjbGFzcyBSZXBv
c2l0b3J5KG9iamVjdCk6CiAKICAgICBkZWYgZmV0Y2hfY29tbWl0c19hbmRfc3VibWl0KHNlbGYs
IHNlcnZlcl9jb25maWcsIG1heF9mZXRjaF9jb3VudCwgbWF4X2FuY2VzdG9yX2ZldGNoX2NvdW50
KToKICAgICAgICAgaWYgbm90IHNlbGYuX2xhc3RfZmV0Y2hlZDoKLSAgICAgICAgICAgIHByaW50
ICJEZXRlcm1pbmluZyB0aGUgc3RhdGluZyByZXZpc2lvbiBmb3IgJXMiICUgc2VsZi5fbmFtZQor
ICAgICAgICAgICAgcHJpbnQgIkRldGVybWluaW5nIHRoZSBzdGFydGluZyByZXZpc2lvbiBmb3Ig
JXMiICUgc2VsZi5fbmFtZQogICAgICAgICAgICAgc2VsZi5fbGFzdF9mZXRjaGVkID0gc2VsZi5k
ZXRlcm1pbmVfbGFzdF9yZXBvcnRlZF9yZXZpc2lvbihzZXJ2ZXJfY29uZmlnKQogCiAgICAgICAg
IHBlbmRpbmdfY29tbWl0cyA9IFtdCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304487</attachid>
            <date>2017-03-15 00:52:43 -0700</date>
            <delta_ts>2017-03-15 01:35:10 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-169542-20170315005242.patch</filename>
            <type>text/plain</type>
            <size>57957</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEzOTcxCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBlZTk4ZDZiMDVkNzM0MjhmMTYyNWE3ZjkyNDNiNmJjYTNmODVjNTkzLi42ZDRmZDJlZmRm
OGNhMmRhMTE2MWIzNDFhZWRiNjlhZjVjM2YxYzdiIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw2MSBAQAorMjAxNy0wMy0xNCAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXdyaXRlICdwdWxsLW9zLXZlcnNpb25zJyBzY3JpcHQg
aW4gSmF2YXNjcmlwdCB0byBhZGQgc3VwcG9ydCBmb3IgcmVwb3J0aW5nIG9zIHJldmlzaW9ucyB3
aXRoIHN1YiBjb21taXRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisg
ICAgICAgIEV4dGVuZCAnL2FwaS9jb21taXRzLzxyZXBvc2l0b3J5Pi9sYXN0LXJlcG9ydGVkJyB0
byBhY2NlcHQgYSByYW5nZSBhbmQgcmV0dXJuIGxhc3QgcmVwb3J0ZWQgY29tbWl0cyBpbiBnaXZl
biByYW5nZS4KKyAgICAgICAgUmV3cml0ZSAncHVsbC1vcy12ZXJzaW9ucycgaW4gSmF2YVNjcmlw
dCBhbmQgYWRkIHVuaXQgdGVzdHMgZm9yIGl0LgorICAgICAgICBJbnN0ZWFkIG9mIHdyaXRpbmcg
cXVlcnkgbWFudWFsbHkgd2hpbGUgc2VhcmNoaW5nIGNyaXRlcmlhIGNvbnRhaW5zIG51bGwgY29s
dW1ucywgdXNlIHRoZSBtZXRob2RzIHByb3ZpZGVkIGluICdkYi5waHAnLgorICAgICAgICBBZGQg
Jy5naXRpZ25vcmUnIGZpbGUgdG8gb21taXQgZmlsZXMgZ2VuZXJhdGVkIGJ5IHdoaWxlIHJ1bm5p
bmcgdGVzdHMvaW5zdGFuY2VzIGxvY2FsbHkuCisKKyAgICAgICAgKiAuZ2l0aWdub3JlOiBBZGRl
ZC4KKyAgICAgICAgKiBwdWJsaWMvYXBpL2NvbW1pdHMucGhwOgorICAgICAgICAqIHB1YmxpYy9h
cGkvcmVwb3J0LWNvbW1pdHMucGhwOgorICAgICAgICAqIHB1YmxpYy9pbmNsdWRlL2NvbW1pdC1s
b2ctZmV0Y2hlci5waHA6CisgICAgICAgICogcHVibGljL2luY2x1ZGUvZGIucGhwOiAnbnVsbF9j
b2x1bW5zJyBvZiBwcmVwYXJlX3BhcmFtcyBzaG91bGQgYmUgYSByZWZlcmVuY2UuCisgICAgICAg
ICogcHVibGljL2luY2x1ZGUvcmVwb3J0LXByb2Nlc3Nvci5waHA6CisgICAgICAgICogc2VydmVy
LXRlc3RzL2FwaS1jb21taXRzLmpzOgorICAgICAgICAodGhlbik6CisgICAgICAgICogc2VydmVy
LXRlc3RzL2FwaS1yZXBvcnQtY29tbWl0cy10ZXN0cy5qczoKKyAgICAgICAgKiBzZXJ2ZXItdGVz
dHMvcmVzb3VyY2VzL21vY2stbG9nZ2VyLmpzOiBBZGRlZC4KKyAgICAgICAgKE1vY2tMb2dnZXIp
OgorICAgICAgICAoTW9ja0xvZ2dlci5wcm90b3R5cGUubG9nKToKKyAgICAgICAgKE1vY2tMb2dn
ZXIucHJvdG90eXBlLmVycm9yKToKKyAgICAgICAgKiBzZXJ2ZXItdGVzdHMvcmVzb3VyY2VzL21v
Y2stc3VicHJvY2Vzcy5qczogQWRkZWQuCisgICAgICAgIChNb2NrU3VicHJvY2Vzcy5jYWxsKToK
KyAgICAgICAgKE1vY2tTdWJwcm9jZXNzLndhaXRpbmdGb3JJbnZvY2F0aW9uKToKKyAgICAgICAg
KE1vY2tTdWJwcm9jZXNzLmluamVjdCk6CisgICAgICAgIChNb2NrU3VicHJvY2Vzcy5yZXNldCk6
CisgICAgICAgICogc2VydmVyLXRlc3RzL3Rvb2xzLWJ1aWxkYm90LXRyaWdnZXJhYmxlLXRlc3Rz
LmpzOgorICAgICAgICAoTW9ja0xvZ2dlcik6IERlbGV0ZWQuCisgICAgICAgIChNb2NrTG9nZ2Vy
LnByb3RvdHlwZS5sb2cpOiBEZWxldGVkLgorICAgICAgICAoTW9ja0xvZ2dlci5wcm90b3R5cGUu
ZXJyb3IpOiBEZWxldGVkLgorICAgICAgICAqIHNlcnZlci10ZXN0cy90b29scy1vcy1idWlsZC1m
ZXRjaGVyLXRlc3RzLmpzOiBBZGRlZC4KKyAgICAgICAgKGJlZm9yZUVhY2gpOgorICAgICAgICAo
cmV0dXJuLndhaXRpbmdGb3JJbnZvY2F0aW9uUHJvbWlzZS50aGVuKToKKyAgICAgICAgKHRoZW4p
OgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUucmV0dXJuLndhaXRpbmdGb3JJbnZvY2F0
aW9uUHJvbWlzZS50aGVuKToKKyAgICAgICAgKHJldHVybi5hZGRTbGF2ZUZvclJlcG9ydC5lbXB0
eVJlcG9ydC50aGVuKToKKyAgICAgICAgKiB0b29scy9qcy9vcy1idWlsZC1mZXRjaGVyLmpzOiBB
ZGRlZC4KKyAgICAgICAgKE9TQnVpbGRGZXRjaGVyKToKKyAgICAgICAgKE9TQnVpbGRGZXRjaGVy
LnByb3RvdHlwZS5fZmV0Y2hBdmFpbGFibGVCdWlsZHMpOgorICAgICAgICAoT1NCdWlsZEZldGNo
ZXIucHJvdG90eXBlLl9jb21wdXRlT3JkZXIpOgorICAgICAgICAoT1NCdWlsZEZldGNoZXIucHJv
dG90eXBlLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzLnJldHVybi50aGlzLl9zdWJwcm9jZXNz
LmNhbGwudGhlbi4pOgorICAgICAgICAoT1NCdWlsZEZldGNoZXIucHJvdG90eXBlLl9jb21taXRz
Rm9yQXZhaWxhYmxlQnVpbGRzKToKKyAgICAgICAgKE9TQnVpbGRGZXRjaGVyLnByb3RvdHlwZS5f
YWRkU3ViQ29tbWl0c0ZvckJ1aWxkKToKKyAgICAgICAgKE9TQnVpbGRGZXRjaGVyLnByb3RvdHlw
ZS5fc3VibWl0Q29tbWl0cyk6CisgICAgICAgIChPU0J1aWxkRmV0Y2hlci5wcm90b3R5cGUuZmV0
Y2hBbmRSZXBvcnROZXdCdWlsZHMpOgorICAgICAgICAqIHRvb2xzL2pzL3N1YnByb2Nlc3MuanM6
IEFkZGVkLgorICAgICAgICAoY29uc3QuY2hpbGRQcm9jZXNzLnJlcXVpcmUuc3RyaW5nX2FwcGVh
cmVkX2hlcmUuU3VicHJvY2Vzcy5wcm90b3R5cGUuY2FsbCk6CisgICAgICAgIChjb25zdC5jaGls
ZFByb2Nlc3MucmVxdWlyZS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5TdWJwcm9jZXNzKToKKyAgICAg
ICAgKiB0b29scy9wdWxsLW9zLXZlcnNpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgor
ICAgICAgICAoc3luY0xvb3ApOgorICAgICAgICAqIHRvb2xzL3N5bmMtY29tbWl0cy5weToKKyAg
ICAgICAgKFJlcG9zaXRvcnkuZmV0Y2hfY29tbWl0c19hbmRfc3VibWl0KToKKwogMjAxNy0wMy0x
NCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIHNlcnZl
ciB0ZXN0cyByZXR1cm4gYSBwcm9taXNlIGluc3RlYWQgb2YgbWFudWFsbHkgY2FsbGluZyBkb25l
CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvLmdpdGlnbm9yZSBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0NzY1YzYwY2UyYjc2
OGU2NjFlNjk4NWE4Y2NmZjMwOTU5MDUwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKK3B1YmxpYy9kYXRhCitu
b2RlX21vZHVsZXMKK3NlcnZlci10ZXN0cy9yZXNvdXJjZXMvdGVzdC1zZXJ2ZXIubG9nCmRpZmYg
LS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9jb21taXRzLnBocCBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvYXBpL2NvbW1pdHMucGhwCmluZGV4IDg4
MmM3ZWI2Y2I2YTg5ZDkxNTZlMjcyZDZjOTAyYzNjY2M1OGIxOTIuLmE2YTRkYjg2ZmE4Y2EwMWVj
YTk1MTQ2NGU4ZDUwNWYwZDY1OTlhMzEgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvYXBpL2NvbW1pdHMucGhwCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvYXBpL2NvbW1pdHMucGhwCkBAIC0zMiw3ICszMiwxMiBAQCBmdW5jdGlvbiBtYWlu
KCRwYXRocykgewogICAgIH0gZWxzZSBpZiAoJGZpbHRlciA9PSAnbGF0ZXN0JykgewogICAgICAg
ICAkY29tbWl0cyA9ICRmZXRjaGVyLT5mZXRjaF9sYXRlc3QoJHJlcG9zaXRvcnlfaWQpOwogICAg
IH0gZWxzZSBpZiAoJGZpbHRlciA9PSAnbGFzdC1yZXBvcnRlZCcpIHsKLSAgICAgICAgJGNvbW1p
dHMgPSAkZmV0Y2hlci0+ZmV0Y2hfbGFzdF9yZXBvcnRlZCgkcmVwb3NpdG9yeV9pZCk7CisgICAg
ICAgICRmcm9tID0gYXJyYXlfZ2V0KCRfR0VULCAnZnJvbScpOworICAgICAgICAkdG8gPSBhcnJh
eV9nZXQoJF9HRVQsICd0bycpOworICAgICAgICBpZiAoJGZyb20gJiYgJHRvKQorICAgICAgICAg
ICAgJGNvbW1pdHMgPSAkZmV0Y2hlci0+ZmV0Y2hfbGFzdF9yZXBvcnRlZF9iZXR3ZWVuX29yZGVy
cygkcmVwb3NpdG9yeV9pZCwgJGZyb20sICR0byk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICRjb21taXRzID0gJGZldGNoZXItPmZldGNoX2xhc3RfcmVwb3J0ZWQoJHJlcG9zaXRvcnlfaWQp
OwogICAgIH0gZWxzZSBpZiAoY3R5cGVfYWxudW0oJGZpbHRlcikpIHsKICAgICAgICAgJGNvbW1p
dHMgPSAkZmV0Y2hlci0+ZmV0Y2hfcmV2aXNpb24oJHJlcG9zaXRvcnlfaWQsICRmaWx0ZXIpOwog
ICAgIH0gZWxzZSB7IC8vIFYyIFVJIGNvbXBhdGliaWxpdHkuCmRpZmYgLS1naXQgYS9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9yZXBvcnQtY29tbWl0cy5waHAgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2FwaS9yZXBvcnQtY29tbWl0cy5waHAKaW5kZXggNTFh
OTRjMmE3ODQ3MzQyYjlmMTk5Yzc3MzRmYWUzMWViYzM0MTgxZC4uZGMyZWQ4ZDkxZTQwMWMzZWI5
OTI1ZTI5MDg1NTYyNDBkMWJjMjBjMSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy9hcGkvcmVwb3J0LWNvbW1pdHMucGhwCisrKyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvYXBpL3JlcG9ydC1jb21taXRzLnBocApAQCAtMjYsNyArMjYsNyBAQCBm
dW5jdGlvbiBtYWluKCRwb3N0X2RhdGEpCiAKICAgICAkZGItPmJlZ2luX3RyYW5zYWN0aW9uKCk7
CiAgICAgZm9yZWFjaCAoJGNvbW1pdHMgYXMgJGNvbW1pdF9pbmZvKSB7Ci0gICAgICAgICRyZXBv
c2l0b3J5X2lkID0gJGRiLT5zZWxlY3Rfb3JfaW5zZXJ0X3JlcG9zaXRvcnlfcm93KCRjb21taXRf
aW5mb1sncmVwb3NpdG9yeSddLCBOVUxMKTsKKyAgICAgICAgJHJlcG9zaXRvcnlfaWQgPSAkZGIt
PnNlbGVjdF9vcl9pbnNlcnRfcm93KCdyZXBvc2l0b3JpZXMnLCAncmVwb3NpdG9yeScsIGFycmF5
KCduYW1lJyA9PiAkY29tbWl0X2luZm9bJ3JlcG9zaXRvcnknXSwgJ293bmVyJyA9PiBOVUxMKSk7
CiAgICAgICAgIGlmICghJHJlcG9zaXRvcnlfaWQpIHsKICAgICAgICAgICAgICRkYi0+cm9sbGJh
Y2tfdHJhbnNhY3Rpb24oKTsKICAgICAgICAgICAgIGV4aXRfd2l0aF9lcnJvcignRmFpbGVkVG9J
bnNlcnRSZXBvc2l0b3J5JywgYXJyYXkoJ2NvbW1pdCcgPT4gJGNvbW1pdF9pbmZvKSk7CkBAIC00
MCw3ICs0MCw3IEBAIGZ1bmN0aW9uIG1haW4oJHBvc3RfZGF0YSkKICAgICAgICAgICAgICAgICAk
ZGItPnJvbGxiYWNrX3RyYW5zYWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgZXhpdF93aXRoX2Vy
cm9yKCdTdWJDb21taXRTaG91bGROb3RDb250YWluVGltZXN0YW1wJywgYXJyYXkoJ2NvbW1pdCcg
PT4gJHN1Yl9jb21taXRfaW5mbykpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgJHN1Yl9j
b21taXRfcmVwb3NpdG9yeV9pZCA9ICRkYi0+c2VsZWN0X29yX2luc2VydF9yZXBvc2l0b3J5X3Jv
dygkc3ViX2NvbW1pdF9yZXBvc2l0b3J5X25hbWUsICRyZXBvc2l0b3J5X2lkKTsKKyAgICAgICAg
ICAgICRzdWJfY29tbWl0X3JlcG9zaXRvcnlfaWQgPSAkZGItPnNlbGVjdF9vcl9pbnNlcnRfcm93
KCdyZXBvc2l0b3JpZXMnLCAncmVwb3NpdG9yeScsIGFycmF5KCduYW1lJyA9PiAkc3ViX2NvbW1p
dF9yZXBvc2l0b3J5X25hbWUsICdvd25lcicgPT4gJHJlcG9zaXRvcnlfaWQpKTsKICAgICAgICAg
ICAgIGlmICghJHN1Yl9jb21taXRfcmVwb3NpdG9yeV9pZCkgewogICAgICAgICAgICAgICAgICRk
Yi0+cm9sbGJhY2tfdHJhbnNhY3Rpb24oKTsKICAgICAgICAgICAgICAgICBleGl0X3dpdGhfZXJy
b3IoJ0ZhaWxlZFRvSW5zZXJ0UmVwb3NpdG9yeScsIGFycmF5KCdjb21taXQnID0+ICRzdWJfY29t
bWl0X2luZm8pKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
aW5jbHVkZS9jb21taXQtbG9nLWZldGNoZXIucGhwIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy9pbmNsdWRlL2NvbW1pdC1sb2ctZmV0Y2hlci5waHAKaW5kZXggMGQ0MjA1YWRhMDM2
M2IwNGFhNmQ4YWNmNmYzZTFiZDUwM2FiNGRhYi4uMDVkMGEwMWNjYWFmNzQ1MDk3YTE4OWU5ZTFj
NmM2OGY4OWYxZWRmMiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy9pbmNsdWRlL2NvbW1pdC1sb2ctZmV0Y2hlci5waHAKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy9pbmNsdWRlL2NvbW1pdC1sb2ctZmV0Y2hlci5waHAKQEAgLTI3LDEzICsy
NywxNCBAQCBjbGFzcyBDb21taXRMb2dGZXRjaGVyIHsKIAogICAgIGZ1bmN0aW9uIHJlcG9zaXRv
cnlfaWRfZnJvbV9uYW1lKCRuYW1lKQogICAgIHsKLSAgICAgICAgJHJlcG9zaXRvcnlfcm93ID0g
JHRoaXMtPmRiLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKCdTRUxFQ1QgcmVwb3NpdG9yeV9pZCBGUk9N
IHJlcG9zaXRvcmllcyBXSEVSRSByZXBvc2l0b3J5X25hbWUgPSAkMSBBTkQgcmVwb3NpdG9yeV9v
d25lciBpcyBOVUxMJywgYXJyYXkoJG5hbWUpKTsKKyAgICAgICAgJHJlcG9zaXRvcnlfcm93ID0g
JHRoaXMtPmRiLT5zZWxlY3RfZmlyc3Rfcm93KCdyZXBvc2l0b3JpZXMnLCAncmVwb3NpdG9yeScs
IGFycmF5KCduYW1lJyA9PiAkbmFtZSwgJ293bmVyJyA9PiBOVUxMKSk7CiAgICAgICAgIGlmICgh
JHJlcG9zaXRvcnlfcm93KQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJldHVy
biAkcmVwb3NpdG9yeV9yb3dbMF1bJ3JlcG9zaXRvcnlfaWQnXTsKKyAgICAgICAgcmV0dXJuICRy
ZXBvc2l0b3J5X3Jvd1sncmVwb3NpdG9yeV9pZCddOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIGZl
dGNoX2JldHdlZW4oJHJlcG9zaXRvcnlfaWQsICRmaXJzdCwgJHNlY29uZCwgJGtleXdvcmQgPSBO
VUxMKSB7CisgICAgZnVuY3Rpb24gZmV0Y2hfYmV0d2VlbigkcmVwb3NpdG9yeV9pZCwgJGZpcnN0
LCAkc2Vjb25kLCAka2V5d29yZCA9IE5VTEwpCisgICAgewogICAgICAgICAkc3RhdGVtZW50cyA9
ICdTRUxFQ1QgY29tbWl0X2lkIGFzICJpZCIsCiAgICAgICAgICAgICBjb21taXRfcmV2aXNpb24g
YXMgInJldmlzaW9uIiwKICAgICAgICAgICAgIGNvbW1pdF9wcmV2aW91c19jb21taXQgYXMgInBy
ZXZpb3VzQ29tbWl0IiwKQEAgLTgzLDYgKzg0LDI1IEBAIGNsYXNzIENvbW1pdExvZ0ZldGNoZXIg
ewogICAgICAgICByZXR1cm4gJGNvbW1pdHM7CiAgICAgfQogCisgICAgIyBGSVhNRTogdGhpcyBp
cyBub3QgRFJZLiBJZGVhbGx5LCAkZGIgc2hvdWxkIHByb3ZpZGUgdGhlIGFiaWxpdHkgdG8gc2Vh
cmNoIHdpdGggY3JpdGVyaWEgdGhhdCBzcGVjaWZpZXMgYSByYW5nZS4KKyAgICBmdW5jdGlvbiBm
ZXRjaF9sYXN0X3JlcG9ydGVkX2JldHdlZW5fb3JkZXJzKCRyZXBvc2l0b3J5X2lkLCAkZnJvbSwg
JHRvKQorICAgIHsKKyAgICAgICAgJHN0YXRlbWVudHMgPSAnU0VMRUNUICogRlJPTSBjb21taXRz
IExFRlQgT1VURVIgSk9JTiBjb21taXR0ZXJzIE9OIGNvbW1pdF9jb21taXR0ZXIgPSBjb21taXR0
ZXJfaWQKKyAgICAgICAgICAgIFdIRVJFIGNvbW1pdF9yZXBvc2l0b3J5ID0gJDEgQU5EIGNvbW1p
dF9yZXBvcnRlZCA9IHRydWUnOworICAgICAgICAkZnJvbSA9IGludHZhbCgkZnJvbSk7CisgICAg
ICAgICR0byA9IGludHZhbCgkdG8pOworICAgICAgICAkc3RhdGVtZW50cyAuPSAnIEFORCBjb21t
aXRfb3JkZXIgPj0gJDIgQU5EIGNvbW1pdF9vcmRlciA8PSAkMyBPUkRFUiBCWSBjb21taXRfb3Jk
ZXIgREVTQyBMSU1JVCAxJzsKKworICAgICAgICAkY29tbWl0cyA9ICR0aGlzLT5kYi0+cXVlcnlf
YW5kX2ZldGNoX2FsbCgkc3RhdGVtZW50cywgYXJyYXkoJHJlcG9zaXRvcnlfaWQsICRmcm9tLCAk
dG8pKTsKKyAgICAgICAgaWYgKCFpc19hcnJheSgkY29tbWl0cykpCisgICAgICAgICAgICByZXR1
cm4gTlVMTDsKKworICAgICAgICBmb3JlYWNoICgkY29tbWl0cyBhcyAmJGNvbW1pdCkKKyAgICAg
ICAgICAgICRjb21taXQgPSAkdGhpcy0+Zm9ybWF0X3NpbmdsZV9jb21taXQoJGNvbW1pdClbMF07
CisKKyAgICAgICAgcmV0dXJuICRjb21taXRzOworICAgIH0KKwogICAgIGZ1bmN0aW9uIGZldGNo
X29sZGVzdCgkcmVwb3NpdG9yeV9pZCkgewogICAgICAgICByZXR1cm4gJHRoaXMtPmZvcm1hdF9z
aW5nbGVfY29tbWl0KCR0aGlzLT5kYi0+c2VsZWN0X2ZpcnN0X3JvdygnY29tbWl0cycsICdjb21t
aXQnLCBhcnJheSgncmVwb3NpdG9yeScgPT4gJHJlcG9zaXRvcnlfaWQpLCBhcnJheSgndGltZScs
ICdvcmRlcicpKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy9pbmNsdWRlL2RiLnBocCBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
aW5jbHVkZS9kYi5waHAKaW5kZXggMmNlYjZkZWE4MTI2ZjczN2JkOTBhMThmYjM1NDZmZGM1YmFl
OGViZC4uMjIxMmYwZmVmNmZmYjI2ZDkwODVhNTI4ZTEyNWE3NTBkZTlkOWMxYiAxMDA2NDQKLS0t
IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL2RiLnBocAorKysgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvZGIucGhwCkBAIC0xMDUsNyAr
MTA1LDcgQEAgY2xhc3MgRGF0YWJhc2UKICAgICAgICAgcmV0dXJuICRwcmVmaXggPyAkcHJlZml4
IC4gJ18nIC4gJGNvbHVtbiA6ICRjb2x1bW47CiAgICAgfQogCi0gICAgcHJpdmF0ZSBmdW5jdGlv
biBwcmVwYXJlX3BhcmFtcygkcGFyYW1zLCAmJHBsYWNlaG9sZGVycywgJiR2YWx1ZXMsICRudWxs
X2NvbHVtbnMgPSBOVUxMKSB7CisgICAgcHJpdmF0ZSBmdW5jdGlvbiBwcmVwYXJlX3BhcmFtcygk
cGFyYW1zLCAmJHBsYWNlaG9sZGVycywgJiR2YWx1ZXMsICYkbnVsbF9jb2x1bW5zID0gTlVMTCkg
ewogICAgICAgICAkY29sdW1uX25hbWVzID0gYXJyYXkoKTsKIAogICAgICAgICAkaSA9IGNvdW50
KCR2YWx1ZXMpICsgMTsKQEAgLTIwNywyNiArMjA3LDYgQEAgY2xhc3MgRGF0YWJhc2UKICAgICAg
ICAgcmV0dXJuICRyb3dzID8gKCRyZXR1cm5pbmcgPT0gJyonID8gJHJvd3NbMF0gOiAkcm93c1sw
XVskcmV0dXJuaW5nX2NvbHVtbl9uYW1lXSkgOiBOVUxMOwogICAgIH0KIAotICAgIC8vIEZJWE1F
OiBTaG91bGQgaW1wcm92ZSBfc2VsZWN0X3VwZGF0ZV9vcl9pbnNlcnRfcm93IHRvIGhhbmRsZSB0
aGUgTlVMTCBjb2x1bW4gY2FzZS4KLSAgICBmdW5jdGlvbiBzZWxlY3Rfb3JfaW5zZXJ0X3JlcG9z
aXRvcnlfcm93KCRyZXBvc2l0b3J5X25hbWUsICRyZXBvc2l0b3J5X293bmVyX2lkKQotICAgIHsK
LSAgICAgICAgJHJlc3VsdCA9IE5VTEw7Ci0gICAgICAgIGlmICgkcmVwb3NpdG9yeV9vd25lcl9p
ZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnF1ZXJ5X2FuZF9mZXRj
aF9hbGwoJ0lOU0VSVCBJTlRPIHJlcG9zaXRvcmllcyAocmVwb3NpdG9yeV9uYW1lKSBTRUxFQ1Qg
JDEKLSAgICAgICAgICAgICAgICBXSEVSRSBOT1QgRVhJU1RTIChTRUxFQ1QgcmVwb3NpdG9yeV9p
ZCBGUk9NIHJlcG9zaXRvcmllcyBXSEVSRSByZXBvc2l0b3J5X25hbWUgPSAkMiBBTkQgcmVwb3Np
dG9yeV9vd25lciBJUyBOVUxMKSBSRVRVUk5JTkcgcmVwb3NpdG9yeV9pZCcsCi0gICAgICAgICAg
ICAgICAgYXJyYXkoJHJlcG9zaXRvcnlfbmFtZSwgJHJlcG9zaXRvcnlfbmFtZSkpOwotICAgICAg
ICAgICAgaWYgKCEkcmVzdWx0KQotICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+cXVl
cnlfYW5kX2ZldGNoX2FsbCgnU0VMRUNUIHJlcG9zaXRvcnlfaWQgRlJPTSByZXBvc2l0b3JpZXMg
V0hFUkUgcmVwb3NpdG9yeV9uYW1lID0gJDEgQU5EIHJlcG9zaXRvcnlfb3duZXIgSVMgTlVMTCcs
IGFycmF5KCRyZXBvc2l0b3J5X25hbWUpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICRyZXN1bHQgPSAkdGhpcy0+cXVlcnlfYW5kX2ZldGNoX2FsbCgnSU5TRVJUIElOVE8gcmVwb3Np
dG9yaWVzIChyZXBvc2l0b3J5X25hbWUsIHJlcG9zaXRvcnlfb3duZXIpIFNFTEVDVCAkMSwgJDIK
LSAgICAgICAgICAgICAgICBXSEVSRSBOT1QgRVhJU1RTIChTRUxFQ1QgcmVwb3NpdG9yeV9pZCBG
Uk9NIHJlcG9zaXRvcmllcyBXSEVSRSAocmVwb3NpdG9yeV9uYW1lLCByZXBvc2l0b3J5X293bmVy
KSA9ICgkMywgJDQpKSBSRVRVUk5JTkcgcmVwb3NpdG9yeV9pZCcsCi0gICAgICAgICAgICAgICAg
YXJyYXkoJHJlcG9zaXRvcnlfbmFtZSwgJHJlcG9zaXRvcnlfb3duZXJfaWQsICRyZXBvc2l0b3J5
X25hbWUsICRyZXBvc2l0b3J5X293bmVyX2lkKSk7Ci0gICAgICAgICAgICBpZiAoISRyZXN1bHQp
Ci0gICAgICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5xdWVyeV9hbmRfZmV0Y2hfYWxsKCdT
RUxFQ1QgcmVwb3NpdG9yeV9pZCBGUk9NIHJlcG9zaXRvcmllcyBXSEVSRSAocmVwb3NpdG9yeV9u
YW1lLCByZXBvc2l0b3J5X293bmVyKSA9ICgkMSwgJDIpJywgYXJyYXkoJHJlcG9zaXRvcnlfbmFt
ZSwgJHJlcG9zaXRvcnlfb3duZXJfaWQpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gJHJl
c3VsdCA/ICRyZXN1bHRbMF1bJ3JlcG9zaXRvcnlfaWQnXSA6IE5VTEw7Ci0gICAgfQotCiAgICAg
ZnVuY3Rpb24gc2VsZWN0X2ZpcnN0X3JvdygkdGFibGUsICRwcmVmaXgsICRwYXJhbXMsICRvcmRl
cl9ieSA9IE5VTEwpIHsKICAgICAgICAgcmV0dXJuICR0aGlzLT5zZWxlY3RfZmlyc3Rfb3JfbGFz
dF9yb3coJHRhYmxlLCAkcHJlZml4LCAkcGFyYW1zLCAkb3JkZXJfYnksIEZBTFNFKTsKICAgICB9
CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1ZGUvcmVw
b3J0LXByb2Nlc3Nvci5waHAgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL2luY2x1
ZGUvcmVwb3J0LXByb2Nlc3Nvci5waHAKaW5kZXggNDkwODk4MGI4MTQ2ZDVhMTRkMWQ4NWU5NWY3
NmE0NDliODUzY2E4NS4uN2ExNzIyOGYzNDZlYWRmZGY1ZTI0Y2RhYmE3NzNiNDYyYTdmMWU0ZSAx
MDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy9pbmNsdWRlL3JlcG9y
dC1wcm9jZXNzb3IucGhwCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvaW5j
bHVkZS9yZXBvcnQtcHJvY2Vzc29yLnBocApAQCAtMTUwLDcgKzE1MCw3IEBAIGNsYXNzIFJlcG9y
dFByb2Nlc3NvciB7CiAKIAogICAgICAgICBmb3JlYWNoICgkcmV2aXNpb25zIGFzICRyZXBvc2l0
b3J5X25hbWUgPT4gJHJldmlzaW9uX2RhdGEpIHsKLSAgICAgICAgICAgICRyZXBvc2l0b3J5X2lk
ID0gJHRoaXMtPmRiLT5zZWxlY3Rfb3JfaW5zZXJ0X3JlcG9zaXRvcnlfcm93KCRyZXBvc2l0b3J5
X25hbWUsIE5VTEwpOworICAgICAgICAgICAgJHJlcG9zaXRvcnlfaWQgPSAkdGhpcy0+ZGItPnNl
bGVjdF9vcl9pbnNlcnRfcm93KCdyZXBvc2l0b3JpZXMnLCAncmVwb3NpdG9yeScsIGFycmF5KCdu
YW1lJyA9PiAkcmVwb3NpdG9yeV9uYW1lLCAnb3duZXInID0+IE5VTEwpKTsKICAgICAgICAgICAg
IGlmICghJHJlcG9zaXRvcnlfaWQpCiAgICAgICAgICAgICAgICAgJHRoaXMtPmV4aXRfd2l0aF9l
cnJvcignRmFpbGVkVG9JbnNlcnRSZXBvc2l0b3J5JywgYXJyYXkoJ25hbWUnID0+ICRyZXBvc2l0
b3J5X25hbWUpKTsKIApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZl
ci10ZXN0cy9hcGktY29tbWl0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXIt
dGVzdHMvYXBpLWNvbW1pdHMuanMKaW5kZXggMGVhOTQ4MTE3NzdiZGUwZjYyMGQ5MmU0NDY1YWQ4
YTNmMWNkMWY4MC4uNDdlYzU0YTMyYmRhNDFlYTEwOWFhYzc5Y2RmZjRiOGViM2E2YzI4NSAxMDA2
NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0cy9hcGktY29tbWl0
cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL2FwaS1jb21t
aXRzLmpzCkBAIC0zMDEsNiArMzAxLDQ3IEBAIGRlc2NyaWJlKCIvYXBpL2NvbW1pdHMvIiwgZnVu
Y3Rpb24gKCkgewogICAgICAgICB9KTsKICAgICB9KTsKIAorICAgIGRlc2NyaWJlKCcvYXBpL2Nv
bW1pdHMvPHJlcG9zaXRvcnk+L2xhc3QtcmVwb3J0ZWQ/ZnJvbT08c3RhcnRfb3JkZXI+JnRvPTxl
bmRfb3JkZXI+JywgKCkgPT4geworICAgICAgICBpdCgic2hvdWxkIHJldHVybiBhIGxpc3Qgb2Yg
Y29tbWl0IGluIGdpdmVuIHZhbGlkIG9yZGVyIHJhbmdlIiwgKCkgPT4geworICAgICAgICAgICAg
Y29uc3QgZGIgPSBUZXN0U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAgICByZXR1cm4gUHJv
bWlzZS5hbGwoWworICAgICAgICAgICAgICAgIGRiLmluc2VydCgncmVwb3NpdG9yaWVzJywgeydp
ZCc6IDEsICduYW1lJzogJ09TWCd9KSwKKyAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1p
dHMnLCB7J3JlcG9zaXRvcnknOiAxLCAncmV2aXNpb24nOiAnU2llcnJhMTZDNjcnLCAnb3JkZXIn
OiAzNjcsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2Nv
bW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxLCAncmV2aXNpb24nOiAnU2llcnJhMTZDNjgnLCAnb3Jk
ZXInOiAzNjgsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICBkYi5pbnNlcnQo
J2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxLCAncmV2aXNpb24nOiAnU2llcnJhMTZDNjknLCAn
b3JkZXInOiAzNjksICdyZXBvcnRlZCc6IGZhbHNlfSksCisgICAgICAgICAgICAgICAgZGIuaW5z
ZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMSwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RDMy
JywgJ29yZGVyJzogNDMyLCAncmVwb3J0ZWQnOiB0cnVlfSkKKyAgICAgICAgICAgIF0pLnRoZW4o
KCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdl
dEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTM2NyZ0bz0zNzAnKTsK
KyAgICAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlc3BvbnNlWydzdGF0dXMnXSwgJ09LJyk7CisgICAgICAgICAgICAgICAgY29u
c3QgcmVzdWx0cyA9IHJlc3BvbnNlWydjb21taXRzJ107CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlc3VsdHMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBjb25zdCBjb21taXQg
PSByZXN1bHRzWzBdOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXQucmV2aXNp
b24sICdTaWVycmExNkM2OCcpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21t
aXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MzcwJnRvPTM2NycpOworICAgICAgICAgICAgfSku
dGhlbigocmVzcG9uc2UpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzcG9u
c2VbJ3N0YXR1cyddLCAnT0snKTsKKyAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gcmVz
cG9uc2VbJ2NvbW1pdHMnXTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0cy5s
ZW5ndGgsIDApOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9s
YXN0LXJlcG9ydGVkP2Zyb209MjAwJnRvPTI5OScpOworICAgICAgICAgICAgfSkudGhlbigocmVz
cG9uc2UpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzcG9uc2VbJ3N0YXR1
cyddLCAnT0snKTsKKyAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gcmVzcG9uc2VbJ2Nv
bW1pdHMnXTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0cy5sZW5ndGgsIDAp
OworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRl
c3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9y
dGVkP2Zyb209MzY5JnRvPTQzMicpOworICAgICAgICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+
IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzcG9uc2VbJ3N0YXR1cyddLCAnT0sn
KTsKKyAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gcmVzcG9uc2VbJ2NvbW1pdHMnXTsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0cy5sZW5ndGgsIDEpOworICAgICAg
ICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IHJlc3VsdHNbMF07CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKGNvbW1pdC5yZXZpc2lvbiwgJ1NpZXJyYTE2RDMyJyk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKICAgICBkZXNjcmliZSgnL2FwaS9jb21taXRzLzxy
ZXBvc2l0b3J5Pi88Y29tbWl0PicsICgpID0+IHsKICAgICAgICAgaXQoInNob3VsZCByZXR1cm4g
UmVwb3NpdG9yeU5vdEZvdW5kIHdoZW4gdGhlcmUgYXJlIG5vIG1hdGNoaW5nIHJlcG9zaXRvcnki
LCAoKSA9PiB7CiAgICAgICAgICAgICByZXR1cm4gVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRK
U09OKCcvYXBpL2NvbW1pdHMvV2ViS2l0LzIxMDk0OScpLnRoZW4oKHJlc3BvbnNlKSA9PiB7CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL2FwaS1yZXBv
cnQtY29tbWl0cy10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVz
dHMvYXBpLXJlcG9ydC1jb21taXRzLXRlc3RzLmpzCmluZGV4IGYxYWQ3NjFiNjA1OWY4MTQzNWJm
NTgzNDQ4NjA5ZTc5ZDE3NmU1ZWQuLjZlZWJhM2JiOWVhMzFkNTFlMDI1NmQxYmY1OGNlYzc2NzU0
NzYxMjYgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXItdGVzdHMv
YXBpLXJlcG9ydC1jb21taXRzLXRlc3RzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9zZXJ2ZXItdGVzdHMvYXBpLXJlcG9ydC1jb21taXRzLXRlc3RzLmpzCkBAIC0yOTgsNyArMjk4
LDcgQEAgZGVzY3JpYmUoIi9hcGkvcmVwb3J0LWNvbW1pdHMvIiwgZnVuY3Rpb24gKCkgewogICAg
ICAgICBdCiAgICAgfQogCi0gICAgaXQoInNob3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHJlcG9z
aXRvcmllcyB3aXRoIHRoZSBhc21lIG5hbWUgYnV0IHdpdGggYSBkaWZmZXJlbnQgb3duZXIuIiwg
KCkgPT4geworICAgIGl0KCJzaG91bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiByZXBvc2l0b3JpZXMg
d2l0aCB0aGUgc2FtZSBuYW1lIGJ1dCB3aXRoIGEgZGlmZmVyZW50IG93bmVyLiIsICgpID0+IHsK
ICAgICAgICAgcmV0dXJuIGFkZFNsYXZlRm9yUmVwb3J0KHNhbWVSZXBvc2l0b3J5TmFtZUluU3Vi
Q29tbWl0QW5kTWFqb3JDb21taXQpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgcmV0dXJuIFRl
c3RTZXJ2ZXIucmVtb3RlQVBJKCkucG9zdEpTT04oJy9hcGkvcmVwb3J0LWNvbW1pdHMvJywgc2Ft
ZVJlcG9zaXRvcnlOYW1lSW5TdWJDb21taXRBbmRNYWpvckNvbW1pdCk7CiAgICAgICAgIH0pLnRo
ZW4oKHJlc3BvbnNlKSA9PiB7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
c2VydmVyLXRlc3RzL3Jlc291cmNlcy9tb2NrLWxvZ2dlci5qcyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9zZXJ2ZXItdGVzdHMvcmVzb3VyY2VzL21vY2stbG9nZ2VyLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRhZWRiYTM4OTIxOTMxNDY1YzgzMTA3NTY5NWI5NjZkZmQxYzUyOWUKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Jlc291cmNlcy9tb2Nr
LWxvZ2dlci5qcwpAQCAtMCwwICsxLDE0IEBACisndXNlIHN0cmljdCc7CisKK2NsYXNzIE1vY2tM
b2dnZXIgeworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xvZ3MgPSBb
XTsKKyAgICB9CisKKyAgICBsb2codGV4dCkgeyB0aGlzLl9sb2dzLnB1c2godGV4dCk7IH0KKyAg
ICBlcnJvcih0ZXh0KSB7IHRoaXMuX2xvZ3MucHVzaCh0ZXh0KTsgfQorfQorCitpZiAodHlwZW9m
IG1vZHVsZSAhPSAndW5kZWZpbmVkJykKKyAgICBtb2R1bGUuZXhwb3J0cy5Nb2NrTG9nZ2VyID0g
TW9ja0xvZ2dlcjsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2ZXIt
dGVzdHMvcmVzb3VyY2VzL21vY2stc3VicHJvY2Vzcy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9zZXJ2ZXItdGVzdHMvcmVzb3VyY2VzL21vY2stc3VicHJvY2Vzcy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NzViOTNhMzNkYThiZWZiZWEyYjJlOGJlZmFkMDhhZjA5ZTQzNTU4Ci0tLSAvZGV2L251bGwK
KysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0cy9yZXNvdXJjZXMvbW9j
ay1zdWJwcm9jZXNzLmpzCkBAIC0wLDAgKzEsNTcgQEAKK3ZhciBNb2NrU3VicHJvY2VzcyA9IHsK
KyAgICBleGVjdXRlOiBmdW5jdGlvbiAoY29tbWFuZCkKKyAgICB7CisgICAgICAgIGNvbnN0IGlu
dm9jYXRpb24gPSB7Y29tbWFuZH07CisgICAgICAgIGludm9jYXRpb24ucHJvbWlzZSA9IG5ldyBQ
cm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKKyAgICAgICAgICAgIGludm9jYXRpb24ucmVz
b2x2ZSA9IHJlc29sdmU7CisgICAgICAgICAgICBpbnZvY2F0aW9uLnJlamVjdCA9IHJlamVjdDsK
KyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKHRoaXMuX3dhaXRpbmdJbnZvY2F0aW9uKSB7Cisg
ICAgICAgICAgICB0aGlzLl93YWl0aW5nSW52b2NhdGlvblJlc29sdmVyKCk7CisgICAgICAgICAg
ICB0aGlzLl93YWl0aW5nSW52b2NhdGlvbiA9IG51bGw7CisgICAgICAgICAgICB0aGlzLl93YWl0
aW5nSW52b2NhdGlvblJlc29sdmVyID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMu
aW52b2NhdGlvbnMucHVzaChpbnZvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuIGludm9jYXRpb24u
cHJvbWlzZTsKKyAgICB9LAorICAgIHdhaXRpbmdGb3JJbnZvY2F0aW9uOiBmdW5jdGlvbiAoKQor
ICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl93YWl0aW5nSW52b2NhdGlvbikgeworICAgICAgICAg
ICAgdGhpcy5fd2FpdGluZ0ludm9jYXRpb24gPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2
ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuX3dhaXRpbmdJbnZv
Y2F0aW9uUmVzb2x2ZXIgPSByZXNvbHZlOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3dhaXRpbmdJbnZvY2F0aW9uOworICAgIH0sCisgICAgaW5qZWN0
OiBmdW5jdGlvbiAoKQorICAgIHsKKyAgICAgICAgY29uc3Qgb3JpZ2luYWxTdWJwcm9jZXNzID0g
Z2xvYmFsLlN1YnByb2Nlc3M7CisKKyAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5yZXNldCgpOworICAgICAgICAgICAgb3JpZ2luYWxT
dWJwcm9jZXNzID0gZ2xvYmFsLlN1YnByb2Nlc3M7CisgICAgICAgICAgICBnbG9iYWwuU3VicHJv
Y2VzcyA9IE1vY2tTdWJwcm9jZXNzOworICAgICAgICB9KTsKKworICAgICAgICBhZnRlckVhY2go
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZ2xvYmFsLlN1YnByb2Nlc3MgPSBvcmlnaW5hbFN1
YnByb2Nlc3M7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiAgTW9ja1N1YnByb2Nlc3Mu
aW52b2NhdGlvbnMgOworICAgIH0sCisgICAgcmVzZXQ6IGZ1bmN0aW9uICgpCisgICAgeworICAg
ICAgICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucyA9IFtdOworICAgICAgICBNb2NrU3VicHJv
Y2Vzcy5fd2FpdGluZ0ludm9jYXRpb24gPSBudWxsOworICAgICAgICBNb2NrU3VicHJvY2Vzcy5f
d2FpdGluZ0ludm9jYXRpb25SZXNvbHZlciA9IG51bGw7CisgICAgfSwKKworICAgIF93YWl0aW5n
SW52b2NhdGlvbjogbnVsbCwKKyAgICBfd2FpdGluZ0ludm9jYXRpb25SZXNvbHZlcjogbnVsbCwK
KyAgICBpbnZvY2F0aW9uczogW10sCit9OworCitpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZp
bmVkJykKKyAgICBtb2R1bGUuZXhwb3J0cy5Nb2NrU3VicHJvY2VzcyA9IE1vY2tTdWJwcm9jZXNz
OwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3NlcnZlci10ZXN0cy90b29s
cy1idWlsZGJvdC10cmlnZ2VyYWJsZS10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9zZXJ2ZXItdGVzdHMvdG9vbHMtYnVpbGRib3QtdHJpZ2dlcmFibGUtdGVzdHMuanMKaW5kZXgg
ZjQzMDdkMDUxYjQxNTlkNTVmZTBjZTQ4OTlhY2VhNzhjOGNhOWRhOC4uY2FlMGJlZmM5NjRmMWQy
ZDI1NDdlYjBjYjI5YjVmMTZhNWYwM2Y4NyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3NlcnZlci10ZXN0cy90b29scy1idWlsZGJvdC10cmlnZ2VyYWJsZS10ZXN0cy5qcwor
KysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLWJ1aWxkYm90
LXRyaWdnZXJhYmxlLXRlc3RzLmpzCkBAIC03LDE2ICs3LDcgQEAgY29uc3QgTW9ja0RhdGEgPSBy
ZXF1aXJlKCcuL3Jlc291cmNlcy9tb2NrLWRhdGEuanMnKTsKIGNvbnN0IE1vY2tSZW1vdGVBUEkg
PSByZXF1aXJlKCcuLi91bml0LXRlc3RzL3Jlc291cmNlcy9tb2NrLXJlbW90ZS1hcGkuanMnKS5N
b2NrUmVtb3RlQVBJOwogY29uc3QgVGVzdFNlcnZlciA9IHJlcXVpcmUoJy4vcmVzb3VyY2VzL3Rl
c3Qtc2VydmVyLmpzJyk7CiBjb25zdCBwcmVwYXJlU2VydmVyVGVzdCA9IHJlcXVpcmUoJy4vcmVz
b3VyY2VzL2NvbW1vbi1vcGVyYXRpb25zLmpzJykucHJlcGFyZVNlcnZlclRlc3Q7Ci0KLWNsYXNz
IE1vY2tMb2dnZXIgewotICAgIGNvbnN0cnVjdG9yKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2xv
Z3MgPSBbXTsKLSAgICB9Ci0KLSAgICBsb2codGV4dCkgeyB0aGlzLl9sb2dzLnB1c2godGV4dCk7
IH0KLSAgICBlcnJvcih0ZXh0KSB7IHRoaXMuX2xvZ3MucHVzaCh0ZXh0KTsgfQotfQorY29uc3Qg
TW9ja0xvZ2dlciA9IHJlcXVpcmUoJy4vcmVzb3VyY2VzL21vY2stbG9nZ2VyLmpzJykuTW9ja0xv
Z2dlcjsKIAogZGVzY3JpYmUoJ0J1aWxkYm90VHJpZ2dlcmFibGUnLCBmdW5jdGlvbiAoKSB7CiAg
ICAgcHJlcGFyZVNlcnZlclRlc3QodGhpcyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLW9zLWJ1aWxkLWZldGNoZXItdGVzdHMuanMgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvc2VydmVyLXRlc3RzL3Rvb2xzLW9zLWJ1aWxkLWZldGNo
ZXItdGVzdHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZiY2Q1OTk3MzVjN2I4MjAxMmVlZjAyNDdiNmE2ZmI2
MGJhNDQxNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9zZXJ2
ZXItdGVzdHMvdG9vbHMtb3MtYnVpbGQtZmV0Y2hlci10ZXN0cy5qcwpAQCAtMCwwICsxLDUxNSBA
QAorJ3VzZSBzdHJpY3QnOworCitjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKKwor
Y29uc3QgT1NCdWlsZEZldGNoZXIgPSByZXF1aXJlKCcuLi90b29scy9qcy9vcy1idWlsZC1mZXRj
aGVyLmpzJykuT1NCdWlsZEZldGNoZXI7Citjb25zdCBNb2NrUmVtb3RlQVBJID0gcmVxdWlyZSgn
Li4vdW5pdC10ZXN0cy9yZXNvdXJjZXMvbW9jay1yZW1vdGUtYXBpLmpzJykuTW9ja1JlbW90ZUFQ
STsKK2NvbnN0IFRlc3RTZXJ2ZXIgPSByZXF1aXJlKCcuL3Jlc291cmNlcy90ZXN0LXNlcnZlci5q
cycpOworY29uc3QgYWRkU2xhdmVGb3JSZXBvcnQgPSByZXF1aXJlKCcuL3Jlc291cmNlcy9jb21t
b24tb3BlcmF0aW9ucy5qcycpLmFkZFNsYXZlRm9yUmVwb3J0OworY29uc3QgcHJlcGFyZVNlcnZl
clRlc3QgPSByZXF1aXJlKCcuL3Jlc291cmNlcy9jb21tb24tb3BlcmF0aW9ucy5qcycpLnByZXBh
cmVTZXJ2ZXJUZXN0OworY29uc3QgTW9ja1N1YnByb2Nlc3MgPSByZXF1aXJlKCcuL3Jlc291cmNl
cy9tb2NrLXN1YnByb2Nlc3MuanMnKS5Nb2NrU3VicHJvY2VzczsKK2NvbnN0IE1vY2tMb2dnZXIg
PSByZXF1aXJlKCcuL3Jlc291cmNlcy9tb2NrLWxvZ2dlci5qcycpLk1vY2tMb2dnZXI7CisKKwor
ZGVzY3JpYmUoJ09TQnVpbGRGZXRjaGVyJywgZnVuY3Rpb24oKSB7CisgICAgcHJlcGFyZVNlcnZl
clRlc3QodGhpcyk7CisKKyAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgTW9j
a1JlbW90ZUFQSS5yZXNldCgnaHR0cDovL2J1aWxkLndlYmtpdC5vcmcnKTsKKyAgICAgICAgTW9j
a1N1YnByb2Nlc3MucmVzZXQoKTsKKyAgICB9KTsKKworICAgIGNvbnN0IGVtcHR5UmVwb3J0ID0g
eworICAgICAgICAnc2xhdmVOYW1lJzogJ3NvbWVTbGF2ZScsCisgICAgICAgICdzbGF2ZVBhc3N3
b3JkJzogJ3NvbWVQYXNzd29yZCcsCisgICAgfTsKKworICAgIGNvbnN0IHNsYXZlQXV0aCA9IHsK
KyAgICAgICAgJ25hbWUnOiAnc29tZVNsYXZlJywKKyAgICAgICAgJ3Bhc3N3b3JkJzogJ3NvbWVQ
YXNzd29yZCcKKyAgICB9OworCisgICAgY29uc3Qgc3ViQ29tbWl0V2l0aFdlYktpdCA9IHsKKyAg
ICAgICAgJ1dlYktpdCc6IHsncmV2aXNpb24nOiAnMTQxOTc4J30KKyAgICB9OworCisgICAgY29u
c3QgYW5vdGhlclN1YkNvbW1pdFdpdGhXZWJLaXQgPSB7CisgICAgICAgICdXZWJLaXQnOiB7J3Jl
dmlzaW9uJzogJzE0MTk5OScsfQorICAgIH07CisKKyAgICBjb25zdCBhbm90aGVyU3ViQ29tbWl0
V2l0aFdlYktpdEFuZEphdmFTY3JpcHRDb3JlID0geworICAgICAgICAnV2ViS2l0JzogeydyZXZp
c2lvbic6ICcxNDIwMDAnfSwKKyAgICAgICAgJ0phdmFTY3JpcHRDb3JlJzogeydyZXZpc2lvbic6
ICcxNDIwMDAnfQorICAgIH07CisKKyAgICBjb25zdCBvc3hDb21taXQgPSB7CisgICAgICAgICdy
ZXBvc2l0b3J5JzogJ09TWCcsCisgICAgICAgICdyZXZpc2lvbic6ICdTaWVycmExNkQzMicsCisg
ICAgICAgICdvcmRlcic6IDE2MDMwMDMyMDAKKyAgICB9OworCisgICAgY29uc3QgYW5vdGhlck9T
WENvbW1pdCA9IHsKKyAgICAgICAgJ3JlcG9zaXRvcnknOiAnT1NYJywKKyAgICAgICAgJ3Jldmlz
aW9uJzogJ1NpZXJyYTE2RTMyJywKKyAgICAgICAgJ29yZGVyJzogMTYwMzAwMzIwMAorICAgIH07
CisKKworICAgIGNvbnN0IGNvbmZpZyA9IHsKKyAgICAgICAgJ25hbWUnOiAnT1NYJywKKyAgICAg
ICAgJ2N1c3RvbUNvbW1hbmRzJzogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICdj
b21tYW5kJzogWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10sCisgICAgICAgICAgICAg
ICAgJ3N1YkNvbW1pdENvbW1hbmQnOiBbJ2xpc3QnLCAnc3ViQ29tbWl0JywgJ2ZvcicsICdyZXZp
c2lvbiddLAorICAgICAgICAgICAgICAgICdsaW5lc1RvSWdub3JlJzogJ15cXC4qJCcsCisgICAg
ICAgICAgICAgICAgJ21pblJldmlzaW9uJzogJ1NpZXJyYTE2RDAnLAorICAgICAgICAgICAgICAg
ICdtYXhSZXZpc2lvbic6ICdTaWVycmExNkQ5OTknCisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICdjb21tYW5kJzogWydsaXN0JywgJ2FsbCBvc3ggMTZFeHgg
YnVpbGRzJ10sCisgICAgICAgICAgICAgICAgJ3N1YkNvbW1pdENvbW1hbmQnOiBbJ2xpc3QnLCAn
c3ViQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbiddLAorICAgICAgICAgICAgICAgICdsaW5lc1Rv
SWdub3JlJzogJ15cXC4qJCcsCisgICAgICAgICAgICAgICAgJ21pblJldmlzaW9uJzogJ1NpZXJy
YTE2RTAnLAorICAgICAgICAgICAgICAgICdtYXhSZXZpc2lvbic6ICdTaWVycmExNkU5OTknCisg
ICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9OworCisKKyAgICBjb25zdCBjb25maWdXaXRo
b3V0U3ViQ29tbWl0Q29tbWFuZCA9IHsKKyAgICAgICAgJ25hbWUnOiAnT1NYJywKKyAgICAgICAg
J2N1c3RvbUNvbW1hbmRzJzogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICdjb21t
YW5kJzogWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10sCisgICAgICAgICAgICAgICAg
J2xpbmVzVG9JZ25vcmUnOiAnXlxcLiokJywKKyAgICAgICAgICAgICAgICAnbWluUmV2aXNpb24n
OiAnU2llcnJhMTZEMCcsCisgICAgICAgICAgICAgICAgJ21heFJldmlzaW9uJzogJ1NpZXJyYTE2
RDk5OScKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJ2Nv
bW1hbmQnOiBbJ2xpc3QnLCAnYWxsIG9zeCAxNkV4eCBidWlsZHMnXSwKKyAgICAgICAgICAgICAg
ICAnbGluZXNUb0lnbm9yZSc6ICdeXFwuKiQnLAorICAgICAgICAgICAgICAgICdtaW5SZXZpc2lv
bic6ICdTaWVycmExNkUwJywKKyAgICAgICAgICAgICAgICAnbWF4UmV2aXNpb24nOiAnU2llcnJh
MTZFOTk5JworICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfTsKKworICAgIGRlc2NyaWJl
KCdPU0J1aWxkZXJGZXRjaGVyLl9jb21wdXRlT3JkZXInLCAoKSA9PiB7CisgICAgICAgIGl0KCdz
aG91bGQgY2FsY3VsYXRlIHRoZSByaWdodCBvcmRlciBmb3IgYSBnaXZlbiB2YWxpZCByZXZpc2lv
bicsICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGZldGNoZXIgPSBuZXcgT1NCdWlsZEZldGNo
ZXIoKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChmZXRjaGVyLl9jb21wdXRlT3JkZXIoJ1Np
ZXJyYTE2RDMyJyksIDE2MDMwMDMyMDApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGZldGNo
ZXIuX2NvbXB1dGVPcmRlcignMTZEMzIxJyksIDE2MDMwMzIxMDApOworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKGZldGNoZXIuX2NvbXB1dGVPcmRlcignMTZkMzIxJyksIDE2MDMwMzIxMDApOwor
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGZldGNoZXIuX2NvbXB1dGVPcmRlcignMTZEMzIxeicp
LCAxNjAzMDMyMTI2KTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChmZXRjaGVyLl9jb21wdXRl
T3JkZXIoJzE2ZDMyMVonKSwgMTYwMzAzMjEyNik7CisgICAgICAgIH0pOworCisgICAgICAgIGl0
KCdzaG91bGQgdGhyb3cgYXNzZXJ0aW9uIGVycm9yIHdoZW4gZ2l2ZW4gYSBpbnZhbGlkIHJldmlz
aW9uJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgZmV0Y2hlciA9IG5ldyBPU0J1aWxkRmV0
Y2hlcigpOworICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBmZXRjaGVyLl9jb21wdXRl
T3JkZXIoJ2ludmFsaWQnKSwgKGVycm9yKSA9PiBlcnJvci5uYW1lID09ICdBc3NlcnRpb25FcnJv
cicpOworICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBmZXRjaGVyLl9jb21wdXRlT3Jk
ZXIoJycpLCAoZXJyb3IpID0+IGVycm9yLm5hbWUgPT0gJ0Fzc2VydGlvbkVycm9yJyk7CisgICAg
ICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZldGNoZXIuX2NvbXB1dGVPcmRlcignMTYnKSwg
KGVycm9yKSA9PiBlcnJvci5uYW1lID09ICdBc3NlcnRpb25FcnJvcicpOworICAgICAgICAgICAg
YXNzZXJ0LnRocm93cygoKSA9PiBmZXRjaGVyLl9jb21wdXRlT3JkZXIoJzE2RCcpLCAoZXJyb3Ip
ID0+IGVycm9yLm5hbWUgPT0gJ0Fzc2VydGlvbkVycm9yJyk7CisgICAgICAgICAgICBhc3NlcnQu
dGhyb3dzKCgpID0+IGZldGNoZXIuX2NvbXB1dGVPcmRlcignMTIzJyksIChlcnJvcikgPT4gZXJy
b3IubmFtZSA9PSAnQXNzZXJ0aW9uRXJyb3InKTsKKyAgICAgICAgICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gZmV0Y2hlci5fY29tcHV0ZU9yZGVyKCdEMTIzJyksIChlcnJvcikgPT4gZXJyb3IubmFt
ZSA9PSAnQXNzZXJ0aW9uRXJyb3InKTsKKyAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4g
ZmV0Y2hlci5fY29tcHV0ZU9yZGVyKCcxMjN6JyksIChlcnJvcikgPT4gZXJyb3IubmFtZSA9PSAn
QXNzZXJ0aW9uRXJyb3InKTsKKyAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZmV0Y2hl
ci5fY29tcHV0ZU9yZGVyKCcxNlsxNjMnKSwgKGVycm9yKSA9PiBlcnJvci5uYW1lID09ICdBc3Nl
cnRpb25FcnJvcicpOworICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBmZXRjaGVyLl9j
b21wdXRlT3JkZXIoJzE2RDE2M1snKSwgKGVycm9yKSA9PiBlcnJvci5uYW1lID09ICdBc3NlcnRp
b25FcnJvcicpOworICAgICAgICB9KQorICAgIH0pOworCisgICAgZGVzY3JpYmUoJ09TQnVpbGRl
ckZldGNoZXIuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMnLCAoKSA9PiB7CisgICAgICAgIGl0
KCdzaG91bGQgb25seSByZXR1cm4gY29tbWl0cyB3aG9zZSBvcmRlcnMgYXJlIGhpZ2hlciB0aGFu
IHNwZWNpZmllZCBvcmRlcicsICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5l
dyBNb2NrTG9nZ2VyOworICAgICAgICAgICAgY29uc3QgZmV0Y2h0ZXIgPSBuZXcgT1NCdWlsZEZl
dGNoZXIobnVsbCwgbnVsbCwgbnVsbCwgTW9ja1N1YnByb2Nlc3MsIGxvZ2dlcik7CisgICAgICAg
ICAgICBjb25zdCB3YWl0aW5nRm9ySW52b2NhdGlvblByb21pc2UgPSBNb2NrU3VicHJvY2Vzcy53
YWl0aW5nRm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgY29uc3QgZmV0Y2hDb21taXRzUHJv
bWlzZSA9IGZldGNodGVyLl9jb21taXRzRm9yQXZhaWxhYmxlQnVpbGRzKCdPU1gnLCBbJ2xpc3Qn
LCAnYnVpbGQxJ10sICdeXFwuKiQnLCAxNjA0MDAwMDAwKTsKKworICAgICAgICAgICAgcmV0dXJu
IHdhaXRpbmdGb3JJbnZvY2F0aW9uUHJvbWlzZS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25z
WzBdLmNvbW1hbmQsIFsnbGlzdCcsICdidWlsZDEnXSk7CisgICAgICAgICAgICAgICAgTW9ja1N1
YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnMTZEMzIxXG4xNkUzMjF6XG5cbjE2RjMy
MScpOworICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaENvbW1pdHNQcm9taXNlOworICAgICAg
ICAgICAgfSkudGhlbigocmVzdWx0cykgPT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXN1bHRzLmxlbmd0aCwgMik7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3Vs
dHNbMF1bJ3JlcG9zaXRvcnknXSwgJ09TWCcpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXN1bHRzWzBdWydyZXZpc2lvbiddLCAnMTZFMzIxeicpOworICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXN1bHRzWzBdWydvcmRlciddLCAxNjA0MDMyMTI2KTsKKyAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVzdWx0c1sxXVsncmVwb3NpdG9yeSddLCAnT1NYJyk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHNbMV1bJ3JldmlzaW9uJ10sICcxNkYzMjEn
KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0c1sxXVsnb3JkZXInXSwgMTYw
NTAzMjEwMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBk
ZXNjcmliZSgnT1NCdWlsZEZldGNoZXIuX2FkZFN1YkNvbW1pdHNGb3JCdWlsZCcsICgpID0+IHsK
KyAgICAgICAgaXQoJ3Nob3VsZCBhZGQgc3ViLWNvbW1pdCBpbmZvIGZvciBjb21taXRzJywgKCkg
PT4geworICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbmV3IE1vY2tMb2dnZXI7CisgICAgICAg
ICAgICBjb25zdCBmZXRjaHRlciA9IG5ldyBPU0J1aWxkRmV0Y2hlcihudWxsLCBudWxsLCBudWxs
LCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKKyAgICAgICAgICAgIGNvbnN0IHdhaXRpbmdGb3JJ
bnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRpbmdGb3JJbnZvY2F0aW9uKCk7
CisgICAgICAgICAgICBjb25zdCBhZGRTdWJDb21taXRQcm9taXNlID0gZmV0Y2h0ZXIuX2FkZFN1
YkNvbW1pdHNGb3JCdWlsZChbb3N4Q29tbWl0LCBhbm90aGVyT1NYQ29tbWl0XSwgWydzdWJDb21t
aXQnLCAnZm9yJywgJ3JldmlzaW9uJ10pOworCisgICAgICAgICAgICByZXR1cm4gd2FpdGluZ0Zv
ckludm9jYXRpb25Qcm9taXNlLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAgICAgICAg
ICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0uY29tbWFu
ZCwgWydzdWJDb21taXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RDMyJ10pOworICAg
ICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5z
dHJpbmdpZnkoc3ViQ29tbWl0V2l0aFdlYktpdCkpOworICAgICAgICAgICAgICAgIE1vY2tTdWJw
cm9jZXNzLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vY2tTdWJwcm9jZXNzLndh
aXRpbmdGb3JJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnMubGVuZ3Ro
LCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmlu
dm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnc3ViQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdT
aWVycmExNkUzMiddKTsKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9u
c1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJTdWJDb21taXRXaXRoV2ViS2l0KSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZFN1YkNvbW1pdFByb21pc2U7CisgICAgICAgICAg
ICB9KS50aGVuKChyZXN1bHRzKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
c3VsdHMubGVuZ3RoLCAyKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0c1sw
XVsncmVwb3NpdG9yeSddLCBvc3hDb21taXRbJ3JlcG9zaXRvcnknXSk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHNbMF1bJ3JldmlzaW9uJ10sIG9zeENvbW1pdFsncmV2aXNp
b24nXSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHRzWzBdWydzdWJD
b21taXRzJ10sIHN1YkNvbW1pdFdpdGhXZWJLaXQpOworICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChyZXN1bHRzWzFdWydyZXBvc2l0b3J5J10sIGFub3RoZXJPU1hDb21taXRbJ3JlcG9zaXRv
cnknXSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdHNbMV1bJ3JldmlzaW9u
J10sIGFub3RoZXJPU1hDb21taXRbJ3JldmlzaW9uJ10pOworICAgICAgICAgICAgICAgIGFzc2Vy
dC5kZWVwRXF1YWwocmVzdWx0c1sxXVsnc3ViQ29tbWl0cyddLCBhbm90aGVyU3ViQ29tbWl0V2l0
aFdlYktpdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3No
b3VsZCBmYWlsIGlmIHRoZSBjb21tYW5kIHRvIGdldCBzdWItY29tbWl0IGluZm8gZmFpbHMnLCAo
KSA9PiB7CisgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcgTW9ja0xvZ2dlcjsKKyAgICAg
ICAgICAgIGNvbnN0IGZldGNodGVyID0gbmV3IE9TQnVpbGRGZXRjaGVyKG51bGwsIG51bGwsIG51
bGwsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOworICAgICAgICAgICAgY29uc3Qgd2FpdGluZ0Zv
ckludm9jYXRpb25Qcm9taXNlID0gTW9ja1N1YnByb2Nlc3Mud2FpdGluZ0Zvckludm9jYXRpb24o
KTsKKyAgICAgICAgICAgIGNvbnN0IGFkZFN1YkNvbW1pdFByb21pc2UgPSBmZXRjaHRlci5fYWRk
U3ViQ29tbWl0c0ZvckJ1aWxkKFtvc3hDb21taXRdLCBbJ3N1YkNvbW1pdCcsICdmb3InLCAncmV2
aXNpb24nXSkKKworICAgICAgICAgICAgcmV0dXJuIHdhaXRpbmdGb3JJbnZvY2F0aW9uUHJvbWlz
ZS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoTW9ja1N1YnByb2Nl
c3MuaW52b2NhdGlvbnMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVx
dWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLmNvbW1hbmQsIFsnc3ViQ29tbWl0Jywg
J2ZvcicsICdyZXZpc2lvbicsICdTaWVycmExNkQzMiddKTsKKyAgICAgICAgICAgICAgICBNb2Nr
U3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5yZWplY3QoJ0ZhaWxlZCBnZXR0aW5nIHN1Yi1jb21t
aXQnKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBhZGRTdWJDb21taXRQcm9taXNlLnRoZW4o
KCkgPT4geworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsICdzaG91bGQgbmV2ZXIg
YmUgcmVhY2hlZCcpOworICAgICAgICAgICAgICAgIH0sIChlcnJvcl9vdXRwdXQpID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0KGVycm9yX291dHB1dCk7CisgICAgICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChlcnJvcl9vdXRwdXQsICdGYWlsZWQgZ2V0dGluZyBzdWItY29tbWl0
Jyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisK
KworICAgICAgICBpdCgnc2hvdWxkIGZhaWwgaWYgZW50cmllcyBpbiBzdWItY29tbWl0cyBkb2Vz
IG5vdCBjb250YWluIHJldmlzaW9uJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgbG9nZ2Vy
ID0gbmV3IE1vY2tMb2dnZXI7CisgICAgICAgICAgICBjb25zdCBmZXRjaHRlciA9IG5ldyBPU0J1
aWxkRmV0Y2hlcihudWxsLCBudWxsLCBudWxsLCBNb2NrU3VicHJvY2VzcywgbG9nZ2VyKTsKKyAg
ICAgICAgICAgIGNvbnN0IHdhaXRpbmdGb3JJbnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tTdWJwcm9j
ZXNzLndhaXRpbmdGb3JJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICBjb25zdCBhZGRTdWJDb21t
aXRQcm9taXNlID0gZmV0Y2h0ZXIuX2FkZFN1YkNvbW1pdHNGb3JCdWlsZChbb3N4Q29tbWl0XSwg
WydzdWJDb21taXQnLCAnZm9yJywgJ3JldmlzaW9uJ10pCisKKyAgICAgICAgICAgIHJldHVybiB3
YWl0aW5nRm9ySW52b2NhdGlvblByb21pc2UudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1sw
XS5jb21tYW5kLCBbJ3N1YkNvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJhMTZEMzIn
XSk7CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2
ZSgneyJXZWJLaXQiOnsiUmFuZG9tS2V5IjogIlJhbmRvbVZhbHVlIn19Jyk7CisKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYWRkU3ViQ29tbWl0UHJvbWlzZS50aGVuKCgpID0+IHsKKyAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCAnc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQnKTsKKyAg
ICAgICAgICAgICAgICB9LCAoZXJyb3Jfb3V0cHV0KSA9PiB7CisgICAgICAgICAgICAgICAgICAg
IGFzc2VydChlcnJvcl9vdXRwdXQpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
ZXJyb3Jfb3V0cHV0Lm5hbWUsICdBc3NlcnRpb25FcnJvcicpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pCisgICAgfSkKKworICAgIGRlc2NyaWJlKCdP
U0J1aWxkRmV0Y2hlci5mZXRjaEFuZFJlcG9ydE5ld0J1aWxkcycsICgpID0+IHsKKyAgICAgICAg
aXQoJ3Nob3VsZCByZXBvcnQgYWxsIGJ1aWxkIGNvbW1pdHMgd2l0aCBzdWItY29tbWl0cycsICgp
ID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOworICAgICAg
ICAgICAgY29uc3QgZmV0Y2h0ZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoY29uZmlnLCBUZXN0U2Vy
dmVyLnJlbW90ZUFQSSgpLCBzbGF2ZUF1dGgsIE1vY2tTdWJwcm9jZXNzLCBsb2dnZXIpOworICAg
ICAgICAgICAgY29uc3QgZGIgPSBUZXN0U2VydmVyLmRhdGFiYXNlKCk7CisgICAgICAgICAgICBs
ZXQgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gbnVsbDsKKyAgICAgICAgICAgIGxldCBmZXRjaEF2
YWlsYWJsZUJ1aWxkc1Byb21pc2UgPSBudWxsOworCisgICAgICAgICAgICByZXR1cm4gYWRkU2xh
dmVGb3JSZXBvcnQoZW1wdHlSZXBvcnQpLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJl
dHVybiBQcm9taXNlLmFsbChbCisgICAgICAgICAgICAgICAgICAgIGRiLmluc2VydCgncmVwb3Np
dG9yaWVzJywgeydpZCc6IDEwLCAnbmFtZSc6ICdPU1gnfSksCisgICAgICAgICAgICAgICAgICAg
IGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2ll
cnJhMTZENjcnLCAnb3JkZXInOiAxNjAzMDA2NzAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAg
ICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAn
cmV2aXNpb24nOiAnU2llcnJhMTZENjgnLCAnb3JkZXInOiAxNjAzMDA2ODAwLCAncmVwb3J0ZWQn
OiB0cnVlfSksCisgICAgICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVw
b3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZENjknLCAnb3JkZXInOiAxNjAzMDA2
OTAwLCAncmVwb3J0ZWQnOiBmYWxzZX0pLAorICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQo
J2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RTMyJywg
J29yZGVyJzogMTYwNDAwMzIwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAorICAgICAgICAgICAgICAg
ICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAxMCwgJ3JldmlzaW9uJzog
J1NpZXJyYTE2RTMzJywgJ29yZGVyJzogMTYwNDAwMzMwMCwgJ3JlcG9ydGVkJzogdHJ1ZX0pLAor
ICAgICAgICAgICAgICAgICAgICBkYi5pbnNlcnQoJ2NvbW1pdHMnLCB7J3JlcG9zaXRvcnknOiAx
MCwgJ3JldmlzaW9uJzogJ1NpZXJyYTE2RTMzZycsICdvcmRlcic6IDE2MDQwMDMzMDcsICdyZXBv
cnRlZCc6IHRydWV9KV0pOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRz
L09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwMzAwMDAwMCZ0bz0xNjAzMDk5OTAwJyk7CisgICAg
ICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ3JldmlzaW9uJ10sICdTaWVycmExNkQ2OCcpOwor
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXIn
XSwgMTYwMzAwNjgwMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3Rl
QVBJKCkuZ2V0SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwNDAw
MDAwMCZ0bz0xNjA0MDk5OTAwJyk7CisgICAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAx
KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ3Jl
dmlzaW9uJ10sICdTaWVycmExNkUzM2cnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDQwMDMzMDcpOworICAgICAgICAgICAg
ICAgIGNvbnN0IHdhaXRpbmdGb3JJbnZvY2F0aW9uUHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndh
aXRpbmdGb3JJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICAgICAgZmV0Y2hBdmFpbGFibGVCdWls
ZHNQcm9taXNlID0gZmV0Y2h0ZXIuX2ZldGNoQXZhaWxhYmxlQnVpbGRzKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHdhaXRpbmdGb3JJbnZvY2F0aW9uUHJvbWlzZTsKKyAgICAgICAgICAgIH0p
LnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0
aW5nRm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAg
ICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnMuc29ydCgoaW52b2NhdGlvbiwgYW50
b2hlckludm9jYXRpb24pID0+IGludm9jYXRpb25bJ2NvbW1hbmQnXSA+IGFudG9oZXJJbnZvY2F0
aW9uWydjb21tYW5kJ10pOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChNb2NrU3VicHJv
Y2Vzcy5pbnZvY2F0aW9ucy5sZW5ndGgsIDIpOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVw
RXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2Fs
bCBvc3ggMTZEeHggYnVpbGRzJ10pOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwo
TW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMV0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3gg
MTZFeHggYnVpbGRzJ10pOworICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLmludm9jYXRp
b25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2OFxuU2llcnJhMTZENjlcbicpOworICAgICAg
ICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzFdLnJlc29sdmUoJ1xuXG5TaWVy
cmExNkUzMlxuU2llcnJhMTZFMzNcblNpZXJyYTE2RTMzaFxuU2llcnJhMTZFMzQnKTsKKyAgICAg
ICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5yZXNldCgpOworICAgICAgICAgICAgICAgIHJldHVy
biBNb2NrU3VicHJvY2Vzcy53YWl0aW5nRm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgfSku
dGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnMu
c29ydCgoaW52b2NhdGlvbiwgYW50b2hlckludm9jYXRpb24pID0+IGludm9jYXRpb25bJ2NvbW1h
bmQnXSA+IGFudG9oZXJJbnZvY2F0aW9uWydjb21tYW5kJ10pOworICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5sZW5ndGgsIDIpOworICAgICAg
ICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0u
Y29tbWFuZCwgWydsaXN0JywgJ3N1YkNvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJh
MTZENjknXSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJvY2Vz
cy5pbnZvY2F0aW9uc1sxXS5jb21tYW5kLCBbJ2xpc3QnLCAnc3ViQ29tbWl0JywgJ2ZvcicsICdy
ZXZpc2lvbicsICdTaWVycmExNkUzM2gnXSk7CisKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJv
Y2Vzcy5pbnZvY2F0aW9uc1swXS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHN1YkNvbW1pdFdpdGhX
ZWJLaXQpKTsKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1sxXS5y
ZXNvbHZlKEpTT04uc3RyaW5naWZ5KGFub3RoZXJTdWJDb21taXRXaXRoV2ViS2l0KSk7CisgICAg
ICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MucmVzZXQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gTW9ja1N1YnByb2Nlc3Mud2FpdGluZ0Zvckludm9jYXRpb24oKTsKKyAgICAgICAgICAgIH0p
LnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChNb2NrU3VicHJvY2Vz
cy5pbnZvY2F0aW9ucy5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1
YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ3N1YkNv
bW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJhMTZFMzQnXSk7CisgICAgICAgICAgICAg
ICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2ZShKU09OLnN0cmluZ2lmeShh
bm90aGVyU3ViQ29tbWl0V2l0aFdlYktpdEFuZEphdmFTY3JpcHRDb3JlKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZldGNoQXZhaWxhYmxlQnVpbGRzUHJvbWlzZTsKKyAgICAgICAgICAgIH0p
LnRoZW4oKHJlc3VsdHMpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0
cy5sZW5ndGgsIDMpOworICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLnJlc2V0KCk7Cisg
ICAgICAgICAgICAgICAgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gZmV0Y2h0ZXIuZmV0Y2hBbmRS
ZXBvcnROZXdCdWlsZHMoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTW9ja1N1YnByb2Nlc3Mu
d2FpdGluZ0Zvckludm9jYXRpb24oKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAg
ICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0aW5nRm9ySW52b2NhdGlvbigp
OworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgTW9ja1N1YnBy
b2Nlc3MuaW52b2NhdGlvbnMuc29ydCgoaW52b2NhdGlvbiwgYW50b2hlckludm9jYXRpb24pID0+
IGludm9jYXRpb25bJ2NvbW1hbmQnXSA+IGFudG9oZXJJbnZvY2F0aW9uWydjb21tYW5kJ10pOwor
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5s
ZW5ndGgsIDIpOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nl
c3MuaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRz
J10pOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52
b2NhdGlvbnNbMV0uY29tbWFuZCwgWydsaXN0JywgJ2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOwor
ICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xu
XG5TaWVycmExNkQ2OFxuU2llcnJhMTZENjlcbicpOworICAgICAgICAgICAgICAgIE1vY2tTdWJw
cm9jZXNzLmludm9jYXRpb25zWzFdLnJlc29sdmUoJ1xuXG5TaWVycmExNkUzMlxuU2llcnJhMTZF
MzNcblNpZXJyYTE2RTMzaFxuU2llcnJhMTZFMzQnKTsKKyAgICAgICAgICAgICAgICBNb2NrU3Vi
cHJvY2Vzcy5yZXNldCgpOworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53
YWl0aW5nRm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAg
ICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnMuc29ydCgoaW52b2NhdGlvbiwg
YW50b2hlckludm9jYXRpb24pID0+IGludm9jYXRpb25bJ2NvbW1hbmQnXSA+IGFudG9oZXJJbnZv
Y2F0aW9uWydjb21tYW5kJ10pOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChNb2NrU3Vi
cHJvY2Vzcy5pbnZvY2F0aW9ucy5sZW5ndGgsIDIpOworICAgICAgICAgICAgICAgIGFzc2VydC5k
ZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWydsaXN0Jywg
J3N1YkNvbW1pdCcsICdmb3InLCAncmV2aXNpb24nLCAnU2llcnJhMTZENjknXSk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1sxXS5j
b21tYW5kLCBbJ2xpc3QnLCAnc3ViQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmEx
NkUzM2gnXSk7CisKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1sw
XS5yZXNvbHZlKEpTT04uc3RyaW5naWZ5KHN1YkNvbW1pdFdpdGhXZWJLaXQpKTsKKyAgICAgICAg
ICAgICAgICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1sxXS5yZXNvbHZlKEpTT04uc3RyaW5n
aWZ5KGFub3RoZXJTdWJDb21taXRXaXRoV2ViS2l0KSk7CisKKyAgICAgICAgICAgICAgICBNb2Nr
U3VicHJvY2Vzcy5yZXNldCgpOworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vz
cy53YWl0aW5nRm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxl
bmd0aCwgMSk7CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0u
cmVzb2x2ZShKU09OLnN0cmluZ2lmeShhbm90aGVyU3ViQ29tbWl0V2l0aFdlYktpdEFuZEphdmFT
Y3JpcHRDb3JlKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJv
Y2Vzcy5pbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnc3ViQ29tbWl0JywgJ2Zvcics
ICdyZXZpc2lvbicsICdTaWVycmExNkUzNCddKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBm
ZXRjaEFuZFJlcG9ydFByb21pc2U7CisgICAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0WydzdGF0dXMnXSwgJ09LJyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFsKKyAgICAgICAgICAgICAgICAgICAg
ZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ1dlYktpdCd9KSwKKyAgICAg
ICAgICAgICAgICAgICAgZGIuc2VsZWN0Um93cygncmVwb3NpdG9yaWVzJywgeyduYW1lJzogJ0ph
dmFTY3JpcHRDb3JlJ30pLAorICAgICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdjb21t
aXRzJywgeydyZXZpc2lvbic6ICdTaWVycmExNkQ2OSd9KSwKKyAgICAgICAgICAgICAgICAgICAg
ZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZFMzNoJ30pLAor
ICAgICAgICAgICAgICAgICAgICBkYi5zZWxlY3RSb3dzKCdjb21taXRzJywgeydyZXZpc2lvbic6
ICdTaWVycmExNkUzNCd9KV0pOworICAgICAgICAgICAgfSkudGhlbigocmVzdWx0cykgPT4gewor
ICAgICAgICAgICAgICAgIGNvbnN0IHdlYmtpdFJlcG9zaXRvcnkgPSByZXN1bHRzWzBdOworICAg
ICAgICAgICAgICAgIGNvbnN0IGpzY1JlcG9zaXRvcnkgPSByZXN1bHRzWzFdOworICAgICAgICAg
ICAgICAgIGNvbnN0IG9zeENvbW1pdDE2RDY5ID0gcmVzdWx0c1syXTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBvc3hDb21taXQxNkUzM2ggPSByZXN1bHRzWzNdOworICAgICAgICAgICAgICAgIGNv
bnN0IG9zeENvbW1pdDE2RTM0ID0gcmVzdWx0c1s0XTsKKworICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbCh3ZWJraXRSZXBvc2l0b3J5Lmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHdlYmtpdFJlcG9zaXRvcnlbMF1bJ293bmVyJ10sIDEwKTsKKyAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwoanNjUmVwb3NpdG9yeS5sZW5ndGgsIDEpCisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKGpzY1JlcG9zaXRvcnlbMF1bJ293bmVyJ10sIDEwKTsKKworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OS5sZW5ndGgsIDEpOworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OVswXVsncmVwb3NpdG9yeSddLCAx
MCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RDY5WzBdWydvcmRl
ciddLCAxNjAzMDA2OTAwKTsKKworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21t
aXQxNkUzM2gubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29t
bWl0MTZFMzNoWzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwob3N4Q29tbWl0MTZFMzNoWzBdWydvcmRlciddLCAxNjA0MDAzMzA4KTsKKworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzNC5sZW5ndGgsIDEpOworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzNFswXVsncmVwb3NpdG9yeSddLCAx
MCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1pdDE2RTM0WzBdWydvcmRl
ciddLCAxNjA0MDAzNDAwKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBUZXN0U2VydmVyLnJl
bW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRlZD9mcm9tPTE2
MDMwMDAwMDAmdG89MTYwMzA5OTkwMCcpOworICAgICAgICAgICAgfSkudGhlbigocmVzdWx0KSA9
PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddLmxlbmd0
aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBd
WydyZXZpc2lvbiddLCAnU2llcnJhMTZENjknKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMwMDY5MDApOworCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0SlNPTignL2FwaS9jb21t
aXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwNDAwMDAwMCZ0bz0xNjA0MDk5OTAwJyk7Cisg
ICAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ3JldmlzaW9uJ10sICdTaWVycmExNkUzNCcp
OworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3Jk
ZXInXSwgMTYwNDAwMzQwMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgaXQoJ3Nob3VsZCByZXBvcnQgY29tbWl0cyB3aXRob3V0IHN1Yi1jb21taXRzIGlmICJzdWJD
b21taXRDb21tYW5kIiBpcyBub3Qgc3BlY2lmaWVkIGluIGNvbmZpZycsICgpID0+IHsKKyAgICAg
ICAgICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBNb2NrTG9nZ2VyOworICAgICAgICAgICAgY29uc3Qg
ZmV0Y2h0ZXIgPSBuZXcgT1NCdWlsZEZldGNoZXIoY29uZmlnV2l0aG91dFN1YkNvbW1pdENvbW1h
bmQsIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCksIHNsYXZlQXV0aCwgTW9ja1N1YnByb2Nlc3MsIGxv
Z2dlcik7CisgICAgICAgICAgICBjb25zdCBkYiA9IFRlc3RTZXJ2ZXIuZGF0YWJhc2UoKTsKKyAg
ICAgICAgICAgIGxldCBmZXRjaEFuZFJlcG9ydFByb21pc2UgPSBudWxsOworICAgICAgICAgICAg
bGV0IGZldGNoQXZhaWxhYmxlQnVpbGRzUHJvbWlzZSA9IG51bGw7CisKKyAgICAgICAgICAgIHJl
dHVybiBhZGRTbGF2ZUZvclJlcG9ydChlbXB0eVJlcG9ydCkudGhlbigoKSA9PiB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFsKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5z
ZXJ0KCdyZXBvc2l0b3JpZXMnLCB7J2lkJzogMTAsICduYW1lJzogJ09TWCd9KSwKKyAgICAgICAg
ICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZp
c2lvbic6ICdTaWVycmExNkQ2NycsICdvcmRlcic6IDE2MDMwMDY3MDAsICdyZXBvcnRlZCc6IHRy
dWV9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0
b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkQ2OCcsICdvcmRlcic6IDE2MDMwMDY4MDAs
ICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21t
aXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkQ2OScsICdvcmRl
cic6IDE2MDMwMDY5MDAsICdyZXBvcnRlZCc6IGZhbHNlfSksCisgICAgICAgICAgICAgICAgICAg
IGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2ll
cnJhMTZFMzInLCAnb3JkZXInOiAxNjA0MDAzMjAwLCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAg
ICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAn
cmV2aXNpb24nOiAnU2llcnJhMTZFMzMnLCAnb3JkZXInOiAxNjA0MDAzMzAwLCAncmVwb3J0ZWQn
OiB0cnVlfSksCisgICAgICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVw
b3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZFMzNnJywgJ29yZGVyJzogMTYwNDAw
MzMwNywgJ3JlcG9ydGVkJzogdHJ1ZX0pXSk7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcv
YXBpL2NvbW1pdHMvT1NYL2xhc3QtcmVwb3J0ZWQ/ZnJvbT0xNjAzMDAwMDAwJnRvPTE2MDMwOTk5
MDAnKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4geworICAgICAgICAgICAgICAg
IGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGgsIDEpOworICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJy
YTE2RDY4Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cydd
WzBdWydvcmRlciddLCAxNjAzMDA2ODAwKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBUZXN0
U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1yZXBvcnRl
ZD9mcm9tPTE2MDQwMDAwMDAmdG89MTYwNDA5OTkwMCcpOworICAgICAgICAgICAgfSkudGhlbigo
cmVzdWx0KSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0
cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29t
bWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZFMzNnJyk7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjA0MDAzMzA3KTsK
KyAgICAgICAgICAgICAgICBjb25zdCB3YWl0aW5nRm9ySW52b2NhdGlvblByb21pc2UgPSBNb2Nr
U3VicHJvY2Vzcy53YWl0aW5nRm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgICAgIGZldGNo
QW5kUmVwb3J0UHJvbWlzZSA9IGZldGNodGVyLmZldGNoQW5kUmVwb3J0TmV3QnVpbGRzKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRpbmdGb3JJbnZvY2F0aW9uUHJvbWlzZTsKKyAgICAg
ICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJv
Y2Vzcy53YWl0aW5nRm9ySW52b2NhdGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7
CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnMuc29ydCgoaW52b2Nh
dGlvbiwgYW50b2hlckludm9jYXRpb24pID0+IGludm9jYXRpb25bJ2NvbW1hbmQnXSA+IGFudG9o
ZXJJbnZvY2F0aW9uWydjb21tYW5kJ10pOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChN
b2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5sZW5ndGgsIDIpOworICAgICAgICAgICAgICAgIGFz
c2VydC5kZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0uY29tbWFuZCwgWyds
aXN0JywgJ2FsbCBvc3ggMTZEeHggYnVpbGRzJ10pOworICAgICAgICAgICAgICAgIGFzc2VydC5k
ZWVwRXF1YWwoTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMV0uY29tbWFuZCwgWydsaXN0Jywg
J2FsbCBvc3ggMTZFeHggYnVpbGRzJ10pOworICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNz
Lmludm9jYXRpb25zWzBdLnJlc29sdmUoJ1xuXG5TaWVycmExNkQ2OFxuU2llcnJhMTZENjlcbicp
OworICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzFdLnJlc29sdmUo
J1xuXG5TaWVycmExNkUzMlxuU2llcnJhMTZFMzNcblNpZXJyYTE2RTMzaFxuU2llcnJhMTZFMzQn
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hBbmRSZXBvcnRQcm9taXNlOworICAgICAg
ICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlc3VsdFsnc3RhdHVzJ10sICdPSycpOworICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNl
LmFsbChbCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ3JlcG9zaXRvcmllcycs
IHsnbmFtZSc6ICdXZWJLaXQnfSksCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3Mo
J3JlcG9zaXRvcmllcycsIHsnbmFtZSc6ICdKYXZhU2NyaXB0Q29yZSd9KSwKKyAgICAgICAgICAg
ICAgICAgICAgZGIuc2VsZWN0Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZE
NjknfSksCisgICAgICAgICAgICAgICAgICAgIGRiLnNlbGVjdFJvd3MoJ2NvbW1pdHMnLCB7J3Jl
dmlzaW9uJzogJ1NpZXJyYTE2RTMzaCd9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuc2VsZWN0
Um93cygnY29tbWl0cycsIHsncmV2aXNpb24nOiAnU2llcnJhMTZFMzQnfSldKTsKKyAgICAgICAg
ICAgIH0pLnRoZW4oKHJlc3VsdHMpID0+IHsKKyAgICAgICAgICAgICAgICBjb25zdCB3ZWJraXRS
ZXBvc2l0b3J5ID0gcmVzdWx0c1swXTsKKyAgICAgICAgICAgICAgICBjb25zdCBqc2NSZXBvc2l0
b3J5ID0gcmVzdWx0c1sxXTsKKyAgICAgICAgICAgICAgICBjb25zdCBvc3hDb21taXQxNkQ2OSA9
IHJlc3VsdHNbMl07CisgICAgICAgICAgICAgICAgY29uc3Qgb3N4Q29tbWl0MTZFMzNoID0gcmVz
dWx0c1szXTsKKyAgICAgICAgICAgICAgICBjb25zdCBvc3hDb21taXQxNkUzNCA9IHJlc3VsdHNb
NF07CisKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwod2Via2l0UmVwb3NpdG9yeS5sZW5n
dGgsIDApOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChqc2NSZXBvc2l0b3J5Lmxlbmd0
aCwgMCkKKworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OS5sZW5n
dGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkQ2OVswXVsn
cmVwb3NpdG9yeSddLCAxMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1p
dDE2RDY5WzBdWydvcmRlciddLCAxNjAzMDA2OTAwKTsKKworICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChvc3hDb21taXQxNkUzM2gubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwob3N4Q29tbWl0MTZFMzNoWzBdWydyZXBvc2l0b3J5J10sIDEwKTsKKyAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwob3N4Q29tbWl0MTZFMzNoWzBdWydvcmRlciddLCAxNjA0MDAz
MzA4KTsKKworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzNC5sZW5n
dGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvc3hDb21taXQxNkUzNFswXVsn
cmVwb3NpdG9yeSddLCAxMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG9zeENvbW1p
dDE2RTM0WzBdWydvcmRlciddLCAxNjA0MDAzNDAwKTsKKworICAgICAgICAgICAgICAgIHJldHVy
biBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gvbGFzdC1y
ZXBvcnRlZD9mcm9tPTE2MDMwMDAwMDAmdG89MTYwMzA5OTkwMCcpOworICAgICAgICAgICAgfSku
dGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsn
Y29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3Vs
dFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZENjknKTsKKyAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ29yZGVyJ10sIDE2MDMwMDY5
MDApOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0
SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwNDAwMDAwMCZ0bz0x
NjA0MDk5OTAwJyk7CisgICAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAxKTsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ3JldmlzaW9uJ10s
ICdTaWVycmExNkUzNCcpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2Nv
bW1pdHMnXVswXVsnb3JkZXInXSwgMTYwNDAwMzQwMCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBzdG9wIHJlcG9ydGluZyBpZiBhbnkgY3VzdG9t
IGNvbW1hbmQgZmFpbHMnLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBuZXcg
TW9ja0xvZ2dlcjsKKyAgICAgICAgICAgIGNvbnN0IGZldGNodGVyID0gbmV3IE9TQnVpbGRGZXRj
aGVyKGNvbmZpZywgVGVzdFNlcnZlci5yZW1vdGVBUEkoKSwgc2xhdmVBdXRoLCBNb2NrU3VicHJv
Y2VzcywgbG9nZ2VyKTsKKyAgICAgICAgICAgIGNvbnN0IGRiID0gVGVzdFNlcnZlci5kYXRhYmFz
ZSgpOworICAgICAgICAgICAgbGV0IGZldGNoQW5kUmVwb3J0UHJvbWlzZSA9IG51bGw7CisKKyAg
ICAgICAgICAgIHJldHVybiBhZGRTbGF2ZUZvclJlcG9ydChlbXB0eVJlcG9ydCkudGhlbigoKSA9
PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFsKKyAgICAgICAgICAgICAg
ICAgICAgZGIuaW5zZXJ0KCdyZXBvc2l0b3JpZXMnLCB7J2lkJzogMTAsICduYW1lJzogJ09TWCd9
KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5
JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkQ2NycsICdvcmRlcic6IDE2MDMwMDY3MDAsICdy
ZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIuaW5zZXJ0KCdjb21taXRz
JywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmExNkQ2OCcsICdvcmRlcic6
IDE2MDMwMDY4MDAsICdyZXBvcnRlZCc6IHRydWV9KSwKKyAgICAgICAgICAgICAgICAgICAgZGIu
aW5zZXJ0KCdjb21taXRzJywgeydyZXBvc2l0b3J5JzogMTAsICdyZXZpc2lvbic6ICdTaWVycmEx
NkQ2OScsICdvcmRlcic6IDE2MDMwMDY5MDAsICdyZXBvcnRlZCc6IGZhbHNlfSksCisgICAgICAg
ICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2
aXNpb24nOiAnU2llcnJhMTZFMzInLCAnb3JkZXInOiAxNjA0MDAzMjAwLCAncmVwb3J0ZWQnOiB0
cnVlfSksCisgICAgICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29tbWl0cycsIHsncmVwb3Np
dG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZFMzMnLCAnb3JkZXInOiAxNjA0MDAzMzAw
LCAncmVwb3J0ZWQnOiB0cnVlfSksCisgICAgICAgICAgICAgICAgICAgIGRiLmluc2VydCgnY29t
bWl0cycsIHsncmVwb3NpdG9yeSc6IDEwLCAncmV2aXNpb24nOiAnU2llcnJhMTZFMzNnJywgJ29y
ZGVyJzogMTYwNDAwMzMwNywgJ3JlcG9ydGVkJzogdHJ1ZX0pXSk7CisgICAgICAgICAgICB9KS50
aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVGVzdFNlcnZlci5yZW1vdGVBUEko
KS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvT1NYL2xhc3QtcmVwb3J0ZWQ/ZnJvbT0xNjAzMDAwMDAw
JnRvPTE2MDMwOTk5MDAnKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4geworICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGgsIDEpOwor
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNp
b24nXSwgJ1NpZXJyYTE2RDY4Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3Vs
dFsnY29tbWl0cyddWzBdWydvcmRlciddLCAxNjAzMDA2ODAwKTsKKworICAgICAgICAgICAgICAg
IHJldHVybiBUZXN0U2VydmVyLnJlbW90ZUFQSSgpLmdldEpTT04oJy9hcGkvY29tbWl0cy9PU1gv
bGFzdC1yZXBvcnRlZD9mcm9tPTE2MDQwMDAwMDAmdG89MTYwNDA5OTkwMCcpOworICAgICAgICAg
ICAgfSkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
c3VsdFsnY29tbWl0cyddLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlc3VsdFsnY29tbWl0cyddWzBdWydyZXZpc2lvbiddLCAnU2llcnJhMTZFMzNnJyk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddLCAx
NjA0MDAzMzA3KTsKKworICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRpbmdGb3JJbnZvY2F0aW9u
UHJvbWlzZSA9IE1vY2tTdWJwcm9jZXNzLndhaXRpbmdGb3JJbnZvY2F0aW9uKCk7CisgICAgICAg
ICAgICAgICAgZmV0Y2hBbmRSZXBvcnRQcm9taXNlID0gZmV0Y2h0ZXIuZmV0Y2hBbmRSZXBvcnRO
ZXdCdWlsZHMoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gd2FpdGluZ0Zvckludm9jYXRpb25Q
cm9taXNlOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIE1vY2tTdWJwcm9jZXNzLndhaXRpbmdGb3JJbnZvY2F0aW9uKCk7CisgICAgICAgICAgICB9
KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9u
cy5zb3J0KChpbnZvY2F0aW9uLCBhbnRvaGVySW52b2NhdGlvbikgPT4gaW52b2NhdGlvblsnY29t
bWFuZCddID4gYW50b2hlckludm9jYXRpb25bJ2NvbW1hbmQnXSk7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMik7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1sw
XS5jb21tYW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkR4eCBidWlsZHMnXSk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1sxXS5jb21t
YW5kLCBbJ2xpc3QnLCAnYWxsIG9zeCAxNkV4eCBidWlsZHMnXSk7CisgICAgICAgICAgICAgICAg
TW9ja1N1YnByb2Nlc3MuaW52b2NhdGlvbnNbMF0ucmVzb2x2ZSgnXG5cblNpZXJyYTE2RDY4XG5T
aWVycmExNkQ2OVxuJyk7CisgICAgICAgICAgICAgICAgTW9ja1N1YnByb2Nlc3MuaW52b2NhdGlv
bnNbMV0ucmVzb2x2ZSgnXG5cblNpZXJyYTE2RTMyXG5TaWVycmExNkUzM1xuU2llcnJhMTZFMzNo
XG5TaWVycmExNkUzNCcpOworICAgICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLnJlc2V0KCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vY2tTdWJwcm9jZXNzLndhaXRpbmdGb3JJbnZvY2F0
aW9uKCk7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBNb2Nr
U3VicHJvY2Vzcy5pbnZvY2F0aW9ucy5zb3J0KChpbnZvY2F0aW9uLCBhbnRvaGVySW52b2NhdGlv
bikgPT4gaW52b2NhdGlvblsnY29tbWFuZCddID4gYW50b2hlckludm9jYXRpb25bJ2NvbW1hbmQn
XSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRp
b25zLmxlbmd0aCwgMik7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3Vi
cHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5jb21tYW5kLCBbJ2xpc3QnLCAnc3ViQ29tbWl0JywgJ2Zv
cicsICdyZXZpc2lvbicsICdTaWVycmExNkQ2OSddKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZGVlcEVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzFdLmNvbW1hbmQsIFsnbGlzdCcs
ICdzdWJDb21taXQnLCAnZm9yJywgJ3JldmlzaW9uJywgJ1NpZXJyYTE2RTMzaCddKTsKKworICAg
ICAgICAgICAgICAgIE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zWzBdLnJlc29sdmUoSlNPTi5z
dHJpbmdpZnkoc3ViQ29tbWl0V2l0aFdlYktpdCkpOworICAgICAgICAgICAgICAgIE1vY2tTdWJw
cm9jZXNzLmludm9jYXRpb25zWzFdLnJlc29sdmUoSlNPTi5zdHJpbmdpZnkoYW5vdGhlclN1YkNv
bW1pdFdpdGhXZWJLaXQpKTsKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5yZXNldCgp
OworICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU3VicHJvY2Vzcy53YWl0aW5nRm9ySW52b2Nh
dGlvbigpOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKE1vY2tTdWJwcm9jZXNzLmludm9jYXRpb25zLmxlbmd0aCwgMSk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5j
b21tYW5kLCBbJ2xpc3QnLCAnc3ViQ29tbWl0JywgJ2ZvcicsICdyZXZpc2lvbicsICdTaWVycmEx
NkUzNCddKTsKKyAgICAgICAgICAgICAgICBNb2NrU3VicHJvY2Vzcy5pbnZvY2F0aW9uc1swXS5y
ZWplY3QoJ0NvbW1hbmQgZmFpbGVkJyk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hB
bmRSZXBvcnRQcm9taXNlLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgICAgICBhc3NlcnQo
ZmFsc2UsICdzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZCcpOworICAgICAgICAgICAgICAgIH0sIChl
cnJvcl9vdXRwdXQpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGVycm9yX291dHB1
dCk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChlcnJvcl9vdXRwdXQsICdDb21t
YW5kIGZhaWxlZCcpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSkudGhlbigo
KSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTZXJ2ZXIucmVtb3RlQVBJKCkuZ2V0
SlNPTignL2FwaS9jb21taXRzL09TWC9sYXN0LXJlcG9ydGVkP2Zyb209MTYwMzAwMDAwMCZ0bz0x
NjAzMDk5OTAwJyk7CisgICAgICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ10ubGVuZ3RoLCAxKTsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0Wydjb21taXRzJ11bMF1bJ3JldmlzaW9uJ10s
ICdTaWVycmExNkQ2OCcpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2Nv
bW1pdHMnXVswXVsnb3JkZXInXSwgMTYwMzAwNjgwMCk7CisKKyAgICAgICAgICAgICAgICByZXR1
cm4gVGVzdFNlcnZlci5yZW1vdGVBUEkoKS5nZXRKU09OKCcvYXBpL2NvbW1pdHMvT1NYL2xhc3Qt
cmVwb3J0ZWQ/ZnJvbT0xNjA0MDAwMDAwJnRvPTE2MDQwOTk5MDAnKTsKKyAgICAgICAgICAgIH0p
LnRoZW4oKHJlc3VsdCkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRb
J2NvbW1pdHMnXS5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXN1
bHRbJ2NvbW1pdHMnXVswXVsncmV2aXNpb24nXSwgJ1NpZXJyYTE2RTMzZycpOworICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbJ2NvbW1pdHMnXVswXVsnb3JkZXInXSwgMTYwNDAw
MzMwNyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSkKKyAgICB9KQorfSk7CmRpZmYgLS1n
aXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3MtYnVpbGQtZmV0Y2hlci5q
cyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy9vcy1idWlsZC1mZXRjaGVyLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjIyNTZlMmUyOGI0MzFlMWVkYjRiMzU0MTEyM2Q4ODc0M2QxODk0YzMKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvb3MtYnVp
bGQtZmV0Y2hlci5qcwpAQCAtMCwwICsxLDk4IEBACisndXNlIHN0cmljdCc7CisKK2xldCBhc3Nl
cnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKKworY2xhc3MgT1NCdWlsZEZldGNoZXIgeworCisgICAg
Y29uc3RydWN0b3Iob3NDb25maWcsIHJlbW90ZUFQSSwgc2xhdmVBdXRoLCBzdWJwcm9jZXNzLCBs
b2dnZXIpCisgICAgeworICAgICAgICB0aGlzLl9vc0NvbmZpZyA9IG9zQ29uZmlnOworICAgICAg
ICB0aGlzLl9yZXBvcnRlZFJldmlzaW9ucyA9IG5ldyBTZXQoKTsKKyAgICAgICAgdGhpcy5fbG9n
Z2VyID0gbG9nZ2VyOworICAgICAgICB0aGlzLl9zbGF2ZUF1dGggPSBzbGF2ZUF1dGg7CisgICAg
ICAgIHRoaXMuX3JlbW90ZUFQSSA9IHJlbW90ZUFQSTsKKyAgICAgICAgdGhpcy5fc3VicHJvY2Vz
cyA9IHN1YnByb2Nlc3M7CisgICAgfQorCisgICAgZmV0Y2hBbmRSZXBvcnROZXdCdWlsZHMoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoQXZhaWxhYmxlQnVpbGRzKCkudGhlbigo
cmVzdWx0cykgPT57CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VibWl0Q29tbWl0cyhyZXN1
bHRzKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgX2ZldGNoQXZhaWxhYmxlQnVpbGRzKCkK
KyAgICB7CisgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX29zQ29uZmlnOworICAgICAgICBj
b25zdCByZXBvc2l0b3J5TmFtZSA9IGNvbmZpZ1snbmFtZSddOworICAgICAgICBsZXQgY3VzdG9t
Q29tbWFuZHMgPSBjb25maWdbJ2N1c3RvbUNvbW1hbmRzJ107CisKKyAgICAgICAgcmV0dXJuIFBy
b21pc2UuYWxsKGN1c3RvbUNvbW1hbmRzLm1hcCgoY29tbWFuZCkgPT4geworICAgICAgICAgICAg
YXNzZXJ0KGNvbW1hbmRbJ21pblJldmlzaW9uJ10pOworICAgICAgICAgICAgYXNzZXJ0KGNvbW1h
bmRbJ21heFJldmlzaW9uJ10pOworICAgICAgICAgICAgY29uc3QgbWluUmV2aXNpb25PcmRlciA9
IHRoaXMuX2NvbXB1dGVPcmRlcihjb21tYW5kWydtaW5SZXZpc2lvbiddKTsKKyAgICAgICAgICAg
IGNvbnN0IG1heFJldmlzaW9uT3JkZXIgPSB0aGlzLl9jb21wdXRlT3JkZXIoY29tbWFuZFsnbWF4
UmV2aXNpb24nXSk7CisKKyAgICAgICAgICAgIGxldCBmZXRjaENvbW1pdHNQcm9taXNlID0gdGhp
cy5fcmVtb3RlQVBJLmdldEpTT05XaXRoU3RhdHVzKGAvYXBpL2NvbW1pdHMvJHtlc2NhcGUocmVw
b3NpdG9yeU5hbWUpfS9sYXN0LXJlcG9ydGVkP2Zyb209JHttaW5SZXZpc2lvbk9yZGVyfSZ0bz0k
e21heFJldmlzaW9uT3JkZXJ9YCkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAgICAgICAg
Y29uc3QgbWluT3JkZXIgPSByZXN1bHRbJ2NvbW1pdHMnXS5sZW5ndGggPT0gMSA/IHBhcnNlSW50
KHJlc3VsdFsnY29tbWl0cyddWzBdWydvcmRlciddKSA6IDA7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2NvbW1pdHNGb3JBdmFpbGFibGVCdWlsZHMocmVwb3NpdG9yeU5hbWUsIGNvbW1h
bmRbJ2NvbW1hbmQnXSwgY29tbWFuZFsnbGluZXNUb0lnbm9yZSddLCBtaW5PcmRlcik7CisgICAg
ICAgICAgICB9KQorCisgICAgICAgICAgICBpZiAoJ3N1YkNvbW1pdENvbW1hbmQnIGluIGNvbW1h
bmQpCisgICAgICAgICAgICAgICAgZmV0Y2hDb21taXRzUHJvbWlzZSA9IGZldGNoQ29tbWl0c1By
b21pc2UudGhlbigoY29tbWl0cykgPT4gdGhpcy5fYWRkU3ViQ29tbWl0c0ZvckJ1aWxkKGNvbW1p
dHMsIGNvbW1hbmRbJ3N1YkNvbW1pdENvbW1hbmQnXSkpOworCisgICAgICAgICAgICByZXR1cm4g
ZmV0Y2hDb21taXRzUHJvbWlzZTsKKyAgICAgICAgfSkpLnRoZW4ocmVzdWx0cyA9PiB7CisgICAg
ICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgcmVzdWx0cyk7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIF9jb21wdXRlT3JkZXIocmV2aXNpb24pCisgICAg
eworICAgICAgICBjb25zdCBidWlsZE5hbWVSZWdleCA9IC8oXGQrKShbYS16QS1aXSkoXGQrKShb
YS16QS1aXSopJC87CisgICAgICAgIGNvbnN0IG1hdGNoID0gYnVpbGROYW1lUmVnZXguZXhlYyhy
ZXZpc2lvbik7CisgICAgICAgIGFzc2VydChtYXRjaCk7CisgICAgICAgIGNvbnN0IG1ham9yID0g
cGFyc2VJbnQobWF0Y2hbMV0pOworICAgICAgICBjb25zdCBraW5kID0gbWF0Y2hbMl0udG9VcHBl
ckNhc2UoKS5jaGFyQ29kZUF0KDApIC0gIkEiLmNoYXJDb2RlQXQoMCk7CisgICAgICAgIGNvbnN0
IG1pbm9yID0gcGFyc2VJbnQobWF0Y2hbM10pOworICAgICAgICBjb25zdCB2YXJpYW50ID0gbWF0
Y2hbNF0gPyBtYXRjaFs0XS50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCkgLSAiQSIuY2hhckNv
ZGVBdCgwKSArIDEgOiAwOworICAgICAgICByZXR1cm4gKChtYWpvciAqIDEwMCArIGtpbmQpICog
MTAwMDAgKyBtaW5vcikgKiAxMDAgKyB2YXJpYW50OworICAgIH0KKworICAgIF9jb21taXRzRm9y
QXZhaWxhYmxlQnVpbGRzKHJlcG9zaXRvcnksIGNvbW1hbmQsIGxpbmVzVG9JZ25vcmUsIG1pbk9y
ZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnByb2Nlc3MuZXhlY3V0ZShjb21t
YW5kKS50aGVuKChvdXRwdXQpID0+IHsKKyAgICAgICAgICAgIGxldCBsaW5lcyA9IG91dHB1dC5z
cGxpdCgnXG4nKTsKKyAgICAgICAgICAgIGlmIChsaW5lc1RvSWdub3JlKXsKKyAgICAgICAgICAg
ICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAobGluZXNUb0lnbm9yZSk7CisgICAgICAgICAg
ICAgICAgbGluZXMgPSBsaW5lcy5maWx0ZXIoZnVuY3Rpb24obGluZSkge3JldHVybiAhcmVnZXgu
ZXhlYyhsaW5lKTt9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsaW5lcy5t
YXAocmV2aXNpb24gPT4gKHtyZXBvc2l0b3J5LCByZXZpc2lvbiwgJ29yZGVyJzogdGhpcy5fY29t
cHV0ZU9yZGVyKHJldmlzaW9uKX0pKQorICAgICAgICAgICAgICAgIC5maWx0ZXIoY29tbWl0ID0+
IGNvbW1pdFsnb3JkZXInXSA+IG1pbk9yZGVyKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
X2FkZFN1YkNvbW1pdHNGb3JCdWlsZChjb21taXRzLCBjb21tYW5kKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNvbW1pdHMucmVkdWNlKChwcm9taXNlLCBjb21taXQpID0+IHsKKyAgICAgICAgICAg
IHJldHVybiBwcm9taXNlLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9zdWJwcm9jZXNzLmV4ZWN1dGUoY29tbWFuZC5jb25jYXQoY29tbWl0WydyZXZpc2lvbiddKSk7
CisgICAgICAgICAgICB9KS50aGVuKChzdWJDb21taXRPdXRwdXQpID0+IHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBzdWJDb21taXRzID0gSlNPTi5wYXJzZShzdWJDb21taXRPdXRwdXQpOworICAg
ICAgICAgICAgICAgIGZvciAobGV0IHJlcG9zaXRvcnlOYW1lIGluIHN1YkNvbW1pdHMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViQ29tbWl0ID0gc3ViQ29tbWl0c1tyZXBvc2l0b3J5
TmFtZV07CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdWJDb21taXRbJ3JldmlzaW9uJ10p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb21taXRbJ3N1YkNvbW1pdHMn
XSA9IHN1YkNvbW1pdHM7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgUHJvbWlzZS5yZXNv
bHZlKCkpLnRoZW4oKCkgPT4gY29tbWl0cyk7CisgICAgfQorCisgICAgX3N1Ym1pdENvbW1pdHMo
Y29tbWl0cykKKyAgICB7CisgICAgICAgIGNvbnN0IGNvbW1pdHNUb1JlcG9ydCA9IHsic2xhdmVO
YW1lIjogdGhpcy5fc2xhdmVBdXRoWyduYW1lJ10sICJzbGF2ZVBhc3N3b3JkIjogdGhpcy5fc2xh
dmVBdXRoWydwYXNzd29yZCddLCAnY29tbWl0cyc6IGNvbW1pdHN9OworICAgICAgICByZXR1cm4g
dGhpcy5fcmVtb3RlQVBJLnBvc3RKU09OV2l0aFN0YXR1cygnL2FwaS9yZXBvcnQtY29tbWl0cy8n
LCBjb21taXRzVG9SZXBvcnQpOworICAgIH0KK30KK2lmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRl
ZmluZWQnKQorICAgIG1vZHVsZS5leHBvcnRzLk9TQnVpbGRGZXRjaGVyID0gT1NCdWlsZEZldGNo
ZXI7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvc3VicHJv
Y2Vzcy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy9zdWJwcm9jZXNzLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjhlNWFiOWM4NjE1NDJiMmI2MDU1ZmIxZjViMmE0ZmJlY2ZmODlhMjIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvc3VicHJv
Y2Vzcy5qcwpAQCAtMCwwICsxLDE4IEBACisndXNlIHN0cmljdCc7Citjb25zdCBjaGlsZFByb2Nl
c3MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuQ2hpbGRQcm9jZXNzOworCitjbGFzcyBTdWJw
cm9jZXNzIHsKKyAgICBleGVjdXRlKGNvbW1hbmQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9t
aXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKKyAgICAgICAgICAgIHRoaXMuX2NoaWxkUHJvY2Vz
cy5leGVjRmlsZShjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNlKDEpLCAoZXJyb3IsIHN0ZG91dCwg
c3RkZXJyKSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgICAg
ICAgICByZWplY3Qoc3RkZXJyKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHJlc29sdmUoc3Rkb3V0KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAg
ICB9Cit9OworCitpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykKKyAgICBtb2R1bGUu
ZXhwb3J0cy5TdWJwcm9jZXNzID0gU3VicHJvY2VzczsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy90b29scy9wdWxsLW9zLXZlcnNpb25zLmpzIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3Rvb2xzL3B1bGwtb3MtdmVyc2lvbnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGEyNDU1Nzc5
N2JhYzI1Y2VmN2E1MmE2NzNjNTM2NWU0YTAxMDU0ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9wdWxsLW9zLXZlcnNpb25zLmpzCkBAIC0wLDAgKzEs
NDMgQEAKKyMhL3Vzci9sb2NhbC9iaW4vbm9kZQorJ3VzZSBzdHJpY3QnOworCisKK2xldCBPU0J1
aWxkRmV0Y2hlciA9IHJlcXVpcmUoJy4vanMvb3MtYnVpbGQtZmV0Y2hlci5qcycpLk9TQnVpbGRG
ZXRjaGVyOworbGV0IFJlbW90ZUFQSSA9IHJlcXVpcmUoJy4vanMvcmVtb3RlLmpzJykuUmVtb3Rl
QVBJOworbGV0IFN1YnByb2Nlc3MgPSByZXF1aXJlKCcuL2pzL3N1YnByb2Nlc3MuanMnKS5TdWJw
cm9jZXNzOworbGV0IGZzID0gcmVxdWlyZSgnZnMnKTsKK2xldCBwYXJzZUFyZ3VtZW50cyA9IHJl
cXVpcmUoJy4vanMvcGFyc2UtYXJndW1lbnRzLmpzJykucGFyc2VBcmd1bWVudHM7CisKK2Z1bmN0
aW9uIG1haW4oYXJndikKK3sKKyAgICBsZXQgb3B0aW9ucyA9IHBhcnNlQXJndW1lbnRzKGFyZ3Ys
IFsKKyAgICAgICAge25hbWU6ICctLW9zLWNvbmZpZy1qc29uJywgcmVxdWlyZWQ6IHRydWV9LAor
ICAgICAgICB7bmFtZTogJy0tc2VydmVyLWNvbmZpZy1qc29uJywgcmVxdWlyZWQ6IHRydWV9LAor
ICAgICAgICB7bmFtZTogJy0tc2Vjb25kcy10by1zbGVlcCcsIHR5cGU6IHBhcnNlRmxvYXQsIGRl
ZmF1bHQ6IDQzMjAwfSwKKyAgICBdKTsKKyAgICBpZiAoIW9wdGlvbnMpCisgICAgICAgIHJldHVy
bjsKKworICAgIHN5bmNMb29wKG9wdGlvbnMpOworfQorCitmdW5jdGlvbiBzeW5jTG9vcChvcHRp
b25zKQoreworICAgIGxldCBvc0NvbmZpZ0xpc3QgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3lu
YyhvcHRpb25zWyctLW9zLWNvbmZpZy1qc29uJ10sICd1dGY4JykpOworICAgIGxldCBzZXJ2ZXJD
b25maWcgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhvcHRpb25zWyctLXNlcnZlci1jb25m
aWctanNvbiddLCAndXRmOCcpKTsKKworICAgIC8vIHYzIG1vZGVscyB1c2UgdGhlIGdsb2JhbCBS
ZW1vdGVBUEkgdG8gYWNjZXNzIHRoZSBwZXJmIGRhc2hib2FyZC4KKyAgICBnbG9iYWwuUmVtb3Rl
QVBJID0gbmV3IFJlbW90ZUFQSShzZXJ2ZXJDb25maWcuc2VydmVyKTsKKworICAgIFByb21pc2Uu
YWxsKG9zQ29uZmlnTGlzdC5tYXAob3NDb25maWcgPT4gbmV3IE9TQnVpbGRGZXRjaGVyKG9zQ29u
ZmlnLCBnbG9iYWwuUmVtb3RlQVBJLCBuZXcgU3VicHJvY2Vzcywgc2VydmVyQ29uZmlnLnNsYXZl
LCBjb25zb2xlKSkpLmNhdGNoKChlcnJvcikgPT4geworICAgICAgICBjb25zb2xlLmVycm9yKGVy
cm9yKTsKKyAgICAgICAgaWYgKHR5cGVvZihlcnJvci5zdGFjaykgPT0gJ3N0cmluZycpIHsKKyAg
ICAgICAgICAgIGZvciAobGV0IGxpbmUgb2YgZXJyb3Iuc3RhY2suc3BsaXQoJ1xuJykpCisgICAg
ICAgICAgICAgICAgY29uc29sZS5lcnJvcihsaW5lKTsKKyAgICAgICAgfQorICAgIH0pLnRoZW4o
ZnVuY3Rpb24gKCkgeworICAgICAgICBzZXRUaW1lb3V0KHN5bmNMb29wLmJpbmQoZ2xvYmFsLCBv
cHRpb25zKSwgb3B0aW9uc1snLS1zZWNvbmRzLXRvLXNsZWVwJ10gKiAxMDAwKTsKKyAgICB9KTsK
K30KKworbWFpbihwcm9jZXNzLmFyZ3YpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3Rvb2xzL3N5bmMtY29tbWl0cy5weSBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90
b29scy9zeW5jLWNvbW1pdHMucHkKaW5kZXggYTk2ZWEyM2QzZGY0ODk5MjU4MTgxMzU2ZDk3YmE5
NzAyZmVmMTU0Yi4uYTgzYzhlMGQ4NTdiYTI2MDY2NmFmZDFkOTRhMmI2NTVhZDRhOWIzMiAxMDA3
NTUKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL3N5bmMtY29tbWl0cy5weQor
KysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvc3luYy1jb21taXRzLnB5CkBAIC01
OSw3ICs1OSw3IEBAIGNsYXNzIFJlcG9zaXRvcnkob2JqZWN0KToKIAogICAgIGRlZiBmZXRjaF9j
b21taXRzX2FuZF9zdWJtaXQoc2VsZiwgc2VydmVyX2NvbmZpZywgbWF4X2ZldGNoX2NvdW50LCBt
YXhfYW5jZXN0b3JfZmV0Y2hfY291bnQpOgogICAgICAgICBpZiBub3Qgc2VsZi5fbGFzdF9mZXRj
aGVkOgotICAgICAgICAgICAgcHJpbnQgIkRldGVybWluaW5nIHRoZSBzdGF0aW5nIHJldmlzaW9u
IGZvciAlcyIgJSBzZWxmLl9uYW1lCisgICAgICAgICAgICBwcmludCAiRGV0ZXJtaW5pbmcgdGhl
IHN0YXJ0aW5nIHJldmlzaW9uIGZvciAlcyIgJSBzZWxmLl9uYW1lCiAgICAgICAgICAgICBzZWxm
Ll9sYXN0X2ZldGNoZWQgPSBzZWxmLmRldGVybWluZV9sYXN0X3JlcG9ydGVkX3JldmlzaW9uKHNl
cnZlcl9jb25maWcpCiAKICAgICAgICAgcGVuZGluZ19jb21taXRzID0gW10K
</data>

          </attachment>
      

    </bug>

</bugzilla>