<?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>169462</bug_id>
          
          <creation_ts>2017-03-09 23:41:36 -0800</creation_ts>
          <short_desc>Add a script to automate W3c web-platform-tests pull request creations from WebKit commits</short_desc>
          <delta_ts>2017-12-16 18:54:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>167911</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>joepeck</cc>
    
    <cc>lforschler</cc>
    
    <cc>mike</cc>
    
    <cc>philip</cc>
    
    <cc>rniwa</cc>
    
    <cc>robertma</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1285770</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-03-09 23:41:36 -0800</bug_when>
    <thetext>Add a script to automate W3c web-platform-tests pull request creations from WebKit commits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285771</commentid>
    <comment_count>1</comment_count>
      <attachid>304035</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-03-09 23:55:55 -0800</bug_when>
    <thetext>Created attachment 304035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285772</commentid>
    <comment_count>2</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-03-09 23:57:16 -0800</bug_when>
    <thetext>Current patch is creating the branch in the GitHub personal repo.
Adding PR creation from that should be straightforward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1287037</commentid>
    <comment_count>3</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-03-12 22:28:24 -0700</bug_when>
    <thetext>Script might be useful for those changing imported/w3c/web-platform-tests tests.
Only working for those using git.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289976</commentid>
    <comment_count>4</comment_count>
      <attachid>305076</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-03-21 22:26:16 -0700</bug_when>
    <thetext>Created attachment 305076
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289979</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-03-21 22:32:48 -0700</bug_when>
    <thetext>wpt_github.py is a copy of the corresponding chromium file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305815</commentid>
    <comment_count>6</comment_count>
      <attachid>309348</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-05-07 23:56:25 -0700</bug_when>
    <thetext>Created attachment 309348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305816</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-07 23:58:29 -0700</bug_when>
    <thetext>Attachment 309348 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/common/net/web_mock.py:46:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/Scripts/webkitpy/common/net/web_mock.py:43:  Bad option value &apos;unused-argument&apos;  [pylint/E0012] [5]
ERROR: Tools/Scripts/webkitpy/common/net/web_mock.py:43:  Bad option value &apos;unused-argument&apos;  [pylint/E0012] [5]
ERROR: Tools/Scripts/webkitpy/common/net/web_mock.py:44:  [MockWeb.request] Instance of &apos;MockWeb&apos; has no &apos;responses&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py:96:  [TestExporterTest.test_export] Instance of &apos;WPTGitHub&apos; has no &apos;calls&apos; member (but some types could not be inferred)  [pylint/E1103] [5]
ERROR: Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py:112:  [TestExporterTest.test_export] Instance of &apos;Bugzilla&apos; has no &apos;calls&apos; member (but some types could not be inferred)  [pylint/E1103] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github.py:176:  too many blank lines (3)  [pep8/E303] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github_mock.py:19:  Bad option value &apos;unused-argument&apos;  [pylint/E0012] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github_mock.py:19:  Bad option value &apos;unused-argument&apos;  [pylint/E0012] [5]
Total errors found: 9 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305836</commentid>
    <comment_count>8</comment_count>
      <attachid>309348</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-08 04:35:23 -0700</bug_when>
    <thetext>Comment on attachment 309348
Patch

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

&gt; Tools/Scripts/webkitpy/w3c/wpt_github.py:3
&gt; +# Copyright 2016 The Chromium Authors. All rights reserved.
&gt; +# Use of this source code is governed by a BSD-style license that can be
&gt; +# found in the LICENSE file.

We don&apos;t have this LICENSE file in our repository.  I&apos;m not sure what to do with this license, but we can&apos;t just put this in as this patch exists now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305859</commentid>
    <comment_count>9</comment_count>
      <attachid>309359</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-05-08 08:25:01 -0700</bug_when>
    <thetext>Created attachment 309359
Adding URL to Chromium license</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305860</commentid>
    <comment_count>10</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-05-08 08:25:55 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #8)
&gt; Comment on attachment 309348 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=309348&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/w3c/wpt_github.py:3
&gt; &gt; +# Copyright 2016 The Chromium Authors. All rights reserved.
&gt; &gt; +# Use of this source code is governed by a BSD-style license that can be
&gt; &gt; +# found in the LICENSE file.
&gt; 
&gt; We don&apos;t have this LICENSE file in our repository.  I&apos;m not sure what to do
&gt; with this license, but we can&apos;t just put this in as this patch exists now.

Good point.
I updated the patch to add the chromium repository LICENSE url</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305862</commentid>
    <comment_count>11</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-08 08:27:02 -0700</bug_when>
    <thetext>Attachment 309359 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/common/net/web_mock.py:44:  Bad option value &apos;unused-argument&apos;  [pylint/E0012] [5]
ERROR: Tools/Scripts/webkitpy/common/net/web_mock.py:44:  Bad option value &apos;unused-argument&apos;  [pylint/E0012] [5]
ERROR: Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py:96:  [TestExporterTest.test_export] Instance of &apos;WPTGitHub&apos; has no &apos;calls&apos; member (but some types could not be inferred)  [pylint/E1103] [5]
ERROR: Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py:112:  [TestExporterTest.test_export] Instance of &apos;Bugzilla&apos; has no &apos;calls&apos; member (but some types could not be inferred)  [pylint/E1103] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github.py:180:  too many blank lines (3)  [pep8/E303] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github_mock.py:23:  Bad option value &apos;unused-argument&apos;  [pylint/E0012] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github_mock.py:23:  Bad option value &apos;unused-argument&apos;  [pylint/E0012] [5]
Total errors found: 7 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308576</commentid>
    <comment_count>12</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-05-14 22:55:54 -0700</bug_when>
    <thetext>Ping review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308753</commentid>
    <comment_count>13</comment_count>
      <attachid>309359</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-15 12:33:12 -0700</bug_when>
    <thetext>Comment on attachment 309359
Adding URL to Chromium license

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

&gt; Tools/Scripts/webkitpy/w3c/wpt_github.py:7
&gt; +# The LICENSE file referenced above can be found at
&gt; +# https://chromium.googlesource.com/chromium/src.git/+/master/LICENSE

I think we should include the LICENSE file in this repository to avoid problems if google changes how this server responds, the server location, the location on the server, etc. or if someone doesn&apos;t have access to their server for some reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308760</commentid>
    <comment_count>14</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-05-15 12:48:06 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #13)
&gt; Comment on attachment 309359 [details]
&gt; Adding URL to Chromium license
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=309359&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/w3c/wpt_github.py:7
&gt; &gt; +# The LICENSE file referenced above can be found at
&gt; &gt; +# https://chromium.googlesource.com/chromium/src.git/+/master/LICENSE
&gt; 
&gt; I think we should include the LICENSE file in this repository to avoid
&gt; problems if google changes how this server responds, the server location,
&gt; the location on the server, etc. or if someone doesn&apos;t have access to their
&gt; server for some reason.

Talking with Geoff about it, the idea would be to inline the LICENSE in each file.
I&apos;ll do that in a follow-up or landing patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308960</commentid>
    <comment_count>15</comment_count>
      <attachid>309359</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-15 20:56:16 -0700</bug_when>
    <thetext>Comment on attachment 309359
Adding URL to Chromium license

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

It&apos;s exciting to get this script working.

By the way, the question of where to put tests to be exported hasn&apos;t been settled.
e.g. Maciej in https://lists.webkit.org/pipermail/webkit-dev/2017-May/029022.html says:
&quot; think it would be cleaner to have a separate directory of tests intended for [export], separate from imported tests. It could be right next to imported/w3c/web-platform-tests. I think mixing tests that are imported from upstream and tests intended for eventual upstreaming is more confusing than helpful.&quot;

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:587
&gt; +    def reset_hard(self, revision):

Instead of just using the Git lingo, we should clarify what it does.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:588
&gt; +        return self._run_git([&apos;reset&apos;, &apos;--hard&apos;, revision])

It&apos;s strange that we sometimes call this function with revision being a Git hashish but other times it&apos;s a branch name.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:590
&gt; +    def am(self, options):

Please give a more descriptive name like &quot;apply_mail_patch&quot; or &quot;apply_git_patch&quot;.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:593
&gt; +        args = [&apos;am&apos;]
&gt; +        args.extend(options)
&gt; +        return self._run_git(args)

More idiomatic way to write this in Python would be self._run_git([&apos;am&apos;] + options)

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:595
&gt; +    def commit(self, options):

I&apos;d call this local_commit or commit_local since scm interface is shared with SVN.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:602
&gt; +    def format_patch(self, options):
&gt; +        args = [&apos;format-patch&apos;]
&gt; +        args.extend(options)

We should just use scm().create_patch(git_commit=commit_id) instead.
r- because of this feature duplication.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:51
&gt; +        self.bugzilla = bugzillaClass()

These instance variables should be prefixed with _ since they&apos;re more or less private to this class.
If they&apos;re intended to be publicly accessible variable, then we have too many of those in this class.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:52
&gt; +        self.webKitGit = gitClass(&apos;.&apos;, None, executive=self._host.executive, filesystem=self._filesystem)

In general, I don&apos;t really like tools relying on the current working directory like this.
It&apos;s fine to use the current working directory in the case no option was specified,
but it&apos;s better if the directory name of the WPT checkout was explicitly specifiable in an option
so that it&apos;s easier to call this function from another script for example.

Also, why are we assuming that WebKit checkout is a Git checkout?
Why can&apos;t we just let the host object automatically detect the SCM type?

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:60
&gt; +        self.repository_directory = options.repository_directory

It&apos;s not obvious at all whether this repository refers to WebKit checkout to WPT checkout.
We should probably prefix each and every instance variable in this class by _webkit_ or _wpt_.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:66
&gt; +        self.username = options.username
&gt; +        if not self.username:
&gt; +            self.username = os.environ.get(&apos;GITHUB_WPT_USER&apos;)
&gt; +            if not self.username:
&gt; +                raise ValueError(&quot;Missing GitHub username.&quot;)

We should also get it from git config user.name and keychain. See webkitpy/common/net/credentials.py
r- because of this.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:78
&gt; +        self.branch_name = &quot;webkit-&quot; + str(self.bug_id)
&gt; +        self.bugzilla_url = &quot;https://bugs.webkit.org/show_bug.cgi?id=&quot; + str(self.bug_id)
&gt; +        self.commit_title = &apos;WebKit export of &apos; + self.bugzilla_url

We should use % or .format.

I also think &quot;webkit-169462&quot; is not exotic enough not to conflict with user-created branch name.
It should be something more unique like &quot;wpt-export-for-webkit-169462&quot;

In addition, it&apos;s ambiguous as to what commit_title means in this context. It&apos;s the commit message / PR description in WPT,
so I think a better name would be self._wpt_commit_message or self._wpt_pr_title.

Finally, &quot;WebKit export of 169462&quot; is a strange title for a PR request.
I would have phrased it like &quot;Test updates for WebKit bug 169462&quot;.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:82
&gt; +        if not self.repository_remote:
&gt; +            self.repository_remote = self.username

What&apos;s the point of this code? Why do we need to push to a specific user&apos;s repo?
I&apos;ve never had to specify repository name like this since I usually only have one remote in my GitHub fork.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:84
&gt; +        self.repository_origin_url = &quot;https://&quot; + self.username + &quot;@github.com/&quot; + self.username + &quot;/web-platform-tests.git&quot;

We should just run git config --get remote.origin.url instead.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:85
&gt; +        self.repository_public_url = &quot;https://github.com/&quot; + self.username + &quot;/web-platform-tests.git&quot; if not options.repository_public_url else options.repository_public_url

This instance variable is never used other than the line below so it should be a local variable.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:86
&gt; +        self.repository_public_tree_url = self.repository_public_url[:-4] + &quot;/tree/&quot;

Are we truncating &quot;.git&quot; by [:-4]? That is not obvious at all.
Also, it looks like this is only used in logging.
If we used &quot;git config --get&quot; above (please add a new method on Git class),
then we should be able to parse that result and construct this URL instead.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:95
&gt; +    def _init_repository(self, url, repository_directory, gitClass):

I think we should call this _ensure_wpt_checkout or something since we&apos;re not init&apos;ing a new git repository.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:109
&gt; +        patchOptions = [&quot;--no-update&quot;, &quot;--no-clean&quot;, &quot;--local-commit&quot;]

Nit: should be patch_options.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:121
&gt; +        # webKitPatch = WebKitPatch(self._filesystem.join(self._filesystem.abspath(__file__), &quot;..&quot;, &quot;..&quot;))
&gt; +        #(options, args) = webKitPatch.parse_args(patchOptions)
&gt; +        #return webKitPatch.check_arguments_and_execute(options, args)

Please remove this commented out code. r- because of this.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:128
&gt; +        self.git.reset_hard(&apos;origin/master&apos;)
&gt; +        if not self.options.git_commit:
&gt; +            self.webKitGit.reset_hard(&apos;HEAD~1&apos;)

It&apos;s confusing that we&apos;re calling reset_hard with a branch name or hashish.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:138
&gt; +            _log.info(&quot;Retrying to create the branch&quot;)
&gt; +            self.git.delete_branch(self.branch_name)
&gt; +            self.git.checkout_new_branch(self.branch_name)

I don&apos;t think we should automatically delete a branch created by an user like this.
We should ask the user to confirm it&apos;s okay to delete the branch at minimum.
We can also add a flag to automatically delete the branch if there is a conflicting one
but doing so by default without giving any warning to the user is dangerous.
r- because of this.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:141
&gt; +        try:
&gt; +            self.git.am([patch, &apos;--exclude&apos;, &apos;*-expected.txt&apos;])
&gt; +        except Exception as e:

It&apos;s not a good idea to capture any exception like this.
Also, capturing the exception should probably happen in git.apply_patch (or whatever its name will be) instead.
That way, that function can take a patch name and files to exclude as arguments
instead o an arbitrary list of options.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:148
&gt; +    def push_to_public_repository(self):

This is a very vague name. It should be something like push_to_remote_wpt_fork.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:157
&gt; +        response = self.gitHub.create_pr(self.repository_remote + &apos;:&apos; + self.branch_name, self.commit_title, description)

It&apos;s not obvious at all that the first argument is a branch name.
I think we should use the name arguments as in: create_pr(remote_branch_name=self.repository_remote + &apos;:&apos; + self.branch_name).

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:170
&gt; +        patch_data = self.webKitGit.format_patch([git_commit, &apos;LayoutTests/imported/w3c/web-platform-tests&apos;, &apos;--stdout&apos;])

Again, we should be using scm.create_patch(git_commit=commit_id) instead.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:175
&gt; +        patch_data = patch_data.replace(&apos;LayoutTests/imported/w3c/web-platform-tests/&apos;, &apos;&apos;)

It seems a little risky to do a global replaccement like this but I suppose text like this would never appear in the tests themselves.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:184
&gt; +            _log.info(&quot;Will push branch to &quot; + self.git.remote([&quot;get-url&quot;, self.repository_remote]).strip())
&gt; +            return
&gt; +        _log.info(&quot;Will push branch to &quot; + self.repository_origin_url)

Again, it&apos;s not obvious what repository_remote and repository_origin_url refer to.

&gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:222
&gt; +    -    USERNAME may be set using the environment variable GITHUB_WPT_USER or as a command line option.
&gt; +    -    Github credential may be set using the environment variable GITHUB_WPT_AUTH or as a command line option. (Please provide a valid GitHub &apos;Personal access token&apos; with &apos;repo&apos; as scope)

We should support pulling username &amp; password from the keychain.
Having to do this extra step is really annoying.
Even asking the user the password manually is better than requiring the user to get this extra token thing.
Also, if you have SSH key setup with GitHub, it should just work without having to do any authentication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328192</commentid>
    <comment_count>16</comment_count>
      <attachid>309359</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2017-07-12 12:57:40 -0700</bug_when>
    <thetext>Comment on attachment 309359
Adding URL to Chromium license

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

Added some comments on the Git additions.

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:587
&gt;&gt; +    def reset_hard(self, revision):
&gt; 
&gt; Instead of just using the Git lingo, we should clarify what it does.

Maybe a docstring can do this? I find it written as-is to be the ideal way to write it as someone who&apos;s used git for some time. The same way for an SVN function that calls &apos;svn revert&apos; I would expect it to be named &apos;revert&apos; on an SVN class.

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:588
&gt;&gt; +        return self._run_git([&apos;reset&apos;, &apos;--hard&apos;, revision])
&gt; 
&gt; It&apos;s strange that we sometimes call this function with revision being a Git hashish but other times it&apos;s a branch name.

Maybe a better name for revision would be commit_identifier? Or commit_reference?

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:590
&gt;&gt; +    def am(self, options):
&gt; 
&gt; Please give a more descriptive name like &quot;apply_mail_patch&quot; or &quot;apply_git_patch&quot;.

Given we&apos;re using the `am` argument, and this `Git` class is supposed to be representative of the `git` binary (as I understand it), am seems correct. That being said, I have not used this command before, so it may be worth writing a docstring explaining what the function is expected to do.

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:593
&gt;&gt; +        return self._run_git(args)
&gt; 
&gt; More idiomatic way to write this in Python would be self._run_git([&apos;am&apos;] + options)

+1.

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:595
&gt;&gt; +    def commit(self, options):
&gt; 
&gt; I&apos;d call this local_commit or commit_local since scm interface is shared with SVN.

Maybe we should have commit do a few things as to adhere to the SVN interface (or maybe this is a terrible idea):
1. Add a push=True default argument to the `commit` function definition, which adheres to the SVN interface, and therefore unifies the SCM interface(s).
2. locally commit.
3. update the repository and push if push=True.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:625
&gt;          if quiet:

There should be Git unit tests near this file; can you please add some for the new functionality and ensure existing tests still pass?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356991</commentid>
    <comment_count>17</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-05 05:40:40 -0700</bug_when>
    <thetext>Thanks for the review.
I&apos;ll try to provide a new version of the patch soon.

&gt; By the way, the question of where to put tests to be exported hasn&apos;t been
&gt; settled.
&gt; e.g. Maciej in
&gt; https://lists.webkit.org/pipermail/webkit-dev/2017-May/029022.html says:
&gt; &quot; think it would be cleaner to have a separate directory of tests intended
&gt; for [export], separate from imported tests. It could be right next to
&gt; imported/w3c/web-platform-tests. I think mixing tests that are imported from
&gt; upstream and tests intended for eventual upstreaming is more confusing than
&gt; helpful.&quot;

That is how all other browsers are doing.
Splitting the folders will make it very hard to export tests given that some links to common resources will no longer work.

&gt; What&apos;s the point of this code? Why do we need to push to a specific user&apos;s
&gt; repo?
&gt; I&apos;ve never had to specify repository name like this since I usually only
&gt; have one remote in my GitHub fork.

The point here is that one pushes the commit to a GitHub repository.
Then a PR request is made from that repository to the WPT repository.
The local WPT repo will have these two remotes, one for getting updates from WPT and one to push changes.

Ideally, it should be a bot account/bot repository since the bot should run this script.
This should also work with whoever wants to run the script on its own.

&gt; &gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:222
&gt; &gt; +    -    USERNAME may be set using the environment variable GITHUB_WPT_USER or as a command line option.
&gt; &gt; +    -    Github credential may be set using the environment variable GITHUB_WPT_AUTH or as a command line option. (Please provide a valid GitHub &apos;Personal access token&apos; with &apos;repo&apos; as scope)
&gt; 
&gt; We should support pulling username &amp; password from the keychain.
&gt; Having to do this extra step is really annoying.
&gt; Even asking the user the password manually is better than requiring the user
&gt; to get this extra token thing.
&gt; Also, if you have SSH key setup with GitHub, it should just work without
&gt; having to do any authentication.

The token is used for creating the PR not for pushing to the user repo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357023</commentid>
    <comment_count>18</comment_count>
    <who name="Robert Ma">robertma</who>
    <bug_when>2017-10-05 07:34:11 -0700</bug_when>
    <thetext>Hi everyone, I&apos;m the current maintainer of the Chromium import/export codebase. Glad to see the code is useful to you! Also happy to see WebKit setting up auto export! More contributors, better WPT :)

I notice the patch is a few months old. In the past few months, we&apos;ve made some major cleanups and fixed a few bugs/TODOs in wpt_github.py. Most notably, the API and error handling are much more consistent now. Instead of swallowing the error and returning None, an exception is thrown for all unexpected API errors. It&apos;d be great if you could pull in the newest version, Youenn.

The API indeed changed a bit in the process. Looks like the only change needed in this patch is the use of WPTGitHub.create_pr. Instead of returning the full response dict, a PR issue number (int) is now returned. Hence, you need to construct the PR URL from a string template rather than using `response[&apos;html_url&apos;]`. (And you might want to catch WPTGitHub.GitHubError and retry if you want to make the script more robust against server errors.)

Let me know if you have any questions! Thanks again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357269</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-05 15:11:52 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #17)
&gt; Thanks for the review.
&gt; I&apos;ll try to provide a new version of the patch soon.
&gt; 
&gt; &gt; By the way, the question of where to put tests to be exported hasn&apos;t been
&gt; &gt; settled.
&gt; &gt; e.g. Maciej in
&gt; &gt; https://lists.webkit.org/pipermail/webkit-dev/2017-May/029022.html says:
&gt; &gt; &quot; think it would be cleaner to have a separate directory of tests intended
&gt; &gt; for [export], separate from imported tests. It could be right next to
&gt; &gt; imported/w3c/web-platform-tests. I think mixing tests that are imported from
&gt; &gt; upstream and tests intended for eventual upstreaming is more confusing than
&gt; &gt; helpful.&quot;
&gt; 
&gt; That is how all other browsers are doing.

I don&apos;t think that&apos;s a good enough reason to take that approach. You need to get the community consensus before you can take that approach.

&gt; Splitting the folders will make it very hard to export tests given that some
&gt; links to common resources will no longer work.

Why? We can just make a copy of resources or superimpose files to be exported on top of existing files when running tests.

&gt; &gt; &gt; Tools/Scripts/webkitpy/w3c/test_exporter.py:222
&gt; &gt; &gt; +    -    USERNAME may be set using the environment variable GITHUB_WPT_USER or as a command line option.
&gt; &gt; &gt; +    -    Github credential may be set using the environment variable GITHUB_WPT_AUTH or as a command line option. (Please provide a valid GitHub &apos;Personal access token&apos; with &apos;repo&apos; as scope)
&gt; &gt; 
&gt; &gt; We should support pulling username &amp; password from the keychain.
&gt; &gt; Having to do this extra step is really annoying.
&gt; &gt; Even asking the user the password manually is better than requiring the user
&gt; &gt; to get this extra token thing.
&gt; &gt; Also, if you have SSH key setup with GitHub, it should just work without
&gt; &gt; having to do any authentication.
&gt; 
&gt; The token is used for creating the PR not for pushing to the user repo.

Regardless, it&apos;s not okay to require users to set random environmental variables like these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360450</commentid>
    <comment_count>20</comment_count>
      <attachid>323815</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-14 12:07:12 -0700</bug_when>
    <thetext>Created attachment 323815
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360451</commentid>
    <comment_count>21</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-14 12:08:24 -0700</bug_when>
    <thetext>Attachment 323815 did not pass style-queue:

Traceback (most recent call last):
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkit-patch&quot;, line 84, in &lt;module&gt;
    main()
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkit-patch&quot;, line 79, in main
    WebKitPatch(os.path.abspath(__file__)).main()
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 305, in main
    result = command.check_arguments_and_execute(options, args, self)
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 123, in check_arguments_and_execute
    return self.execute(options, args, tool) or 0
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/commands/abstractsequencedcommand.py&quot;, line 55, in execute
    self._sequence.run_and_handle_errors(tool, options, state)
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 73, in run_and_handle_errors
    self._run(tool, options, state)
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 67, in _run
    step(tool, options).run(state)
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/steps/checkstyle.py&quot;, line 54, in run
    args.extend(self._changed_files(state))
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/steps/abstractstep.py&quot;, line 44, in _changed_files
    return self.cached_lookup(state, &quot;changed_files&quot;)
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/steps/abstractstep.py&quot;, line 62, in cached_lookup
    state[key] = promise(self, state)
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/steps/abstractstep.py&quot;, line 51, in &lt;lambda&gt;
    &quot;changed_files&quot;: lambda self, state: self._tool.scm().changed_files(self._options.git_commit),
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/git.py&quot;, line 235, in changed_files
    status_command = [self.executable_name, &apos;diff&apos;, &apos;-r&apos;, &apos;--name-status&apos;, &quot;--no-renames&quot;, &quot;--no-ext-diff&quot;, &quot;--full-index&quot;, self.merge_base(git_commit), &apos;--&apos;]
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/git.py&quot;, line 215, in merge_base
    return self.remote_merge_base()
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/git.py&quot;, line 517, in remote_merge_base
    return self._run_git([&apos;merge-base&apos;, self.remote_branch_ref(), &apos;HEAD&apos;]).strip()
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/git.py&quot;, line 524, in remote_branch_ref
    if not self._branch_ref_exists(remote_master_ref):
AttributeError: &apos;Git&apos; object has no attribute &apos;_branch_ref_exists&apos;


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360481</commentid>
    <comment_count>22</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-14 16:02:02 -0700</bug_when>
    <thetext>Let&apos;s start with small steps.
The proposed script would be used by WebKit developers to make contributions to WPT by directly making edits to LayoutTests/imported/w3c/web-platform-tests.
The usual rules (commit WPT changes to WebKit when merged in WPT, merge WPT PR if r+ed in WebKit) remain unchanged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360524</commentid>
    <comment_count>23</comment_count>
      <attachid>323815</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-14 17:42:59 -0700</bug_when>
    <thetext>Comment on attachment 323815
Patch

Again, I don&apos;t think we should take this approach until such a consensus is reached on webkit-dev.

People had varying opinions of how this should work, but one most obvious feedback was that we didn&apos;t want to modify imported tests directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360544</commentid>
    <comment_count>24</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-14 22:17:14 -0700</bug_when>
    <thetext>&gt; Again, I don&apos;t think we should take this approach until such a consensus is
&gt; reached on webkit-dev.

I&apos;ll be happy to ping webkit-dev but I am not sure how much it will help for this particular patch.

This script is allowing to author changes to existing WPT tests/create new WPT tests in a WebKit checkout instead of a separate WPT checkout. Coupling this authoring with WebKit patch authoring has obvious benefits, as well as coupling bugzilla patch/WPT PR processes.

It may also be seen as a step towards one solution for which I am fine discussing more the details.
But it is useful on its own.

&gt; People had varying opinions of how this should work, but one most obvious
&gt; feedback was that we didn&apos;t want to modify imported tests directly.

The concern I heard was about WebKit repository containing changes in LayoutTests/imported/w3c/web-platform-tests that would not be in WPT GitHub repository. I do not see how this particular script goes against this valid concern.
Are there other concerns?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360590</commentid>
    <comment_count>25</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-15 14:36:48 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #24)
&gt; &gt; Again, I don&apos;t think we should take this approach until such a consensus is
&gt; &gt; reached on webkit-dev.
&gt; 
&gt; I&apos;ll be happy to ping webkit-dev but I am not sure how much it will help for
&gt; this particular patch.
&gt; 
&gt; This script is allowing to author changes to existing WPT tests/create new
&gt; WPT tests in a WebKit checkout instead of a separate WPT checkout. Coupling
&gt; this authoring with WebKit patch authoring has obvious benefits, as well as
&gt; coupling bugzilla patch/WPT PR processes.
&gt; 
&gt; It may also be seen as a step towards one solution for which I am fine
&gt; discussing more the details.
&gt; But it is useful on its own.

The problem here is that the previous webkit-dev discussion resulted in people opposing to the workflow of modifying imported scripts. This script will encourage that workflow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374251</commentid>
    <comment_count>26</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-22 11:37:00 -0800</bug_when>
    <thetext>Oops, I probably should not have done review+ given the discussion above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374331</commentid>
    <comment_count>27</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-11-22 21:14:03 -0800</bug_when>
    <thetext>We discussed this with Ryosuke and agreed with this first step.
There was no push back on WebKit dev either.
I’ll wait to land the patch for a few days in case I misunderstood things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374332</commentid>
    <comment_count>28</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-11-22 21:18:00 -0800</bug_when>
    <thetext>(In reply to Robert Ma from comment #18)
&gt; Hi everyone, I&apos;m the current maintainer of the Chromium import/export
&gt; codebase. Glad to see the code is useful to you! Also happy to see WebKit
&gt; setting up auto export! More contributors, better WPT :)
&gt; 
&gt; I notice the patch is a few months old. In the past few months, we&apos;ve made
&gt; some major cleanups and fixed a few bugs/TODOs in wpt_github.py. Most
&gt; notably, the API and error handling are much more consistent now. Instead of
&gt; swallowing the error and returning None, an exception is thrown for all
&gt; unexpected API errors. It&apos;d be great if you could pull in the newest
&gt; version, Youenn.
&gt; 
&gt; The API indeed changed a bit in the process. Looks like the only change
&gt; needed in this patch is the use of WPTGitHub.create_pr. Instead of returning
&gt; the full response dict, a PR issue number (int) is now returned. Hence, you
&gt; need to construct the PR URL from a string template rather than using
&gt; `response[&apos;html_url&apos;]`. (And you might want to catch WPTGitHub.GitHubError
&gt; and retry if you want to make the script more robust against server errors.)
&gt; 
&gt; Let me know if you have any questions! Thanks again!

Thanks for the information, the patch now uses the latest wpt_github.py now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380115</commentid>
    <comment_count>29</comment_count>
      <attachid>328944</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-12-10 19:43:09 -0800</bug_when>
    <thetext>Created attachment 328944
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380116</commentid>
    <comment_count>30</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-10 19:44:40 -0800</bug_when>
    <thetext>Attachment 328944 did not pass style-queue:

Traceback (most recent call last):
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkit-patch&quot;, line 84, in &lt;module&gt;
    main()
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkit-patch&quot;, line 79, in main
    WebKitPatch(os.path.abspath(__file__)).main()
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 305, in main
    result = command.check_arguments_and_execute(options, args, self)
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/multicommandtool.py&quot;, line 123, in check_arguments_and_execute
    return self.execute(options, args, tool) or 0
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/commands/abstractsequencedcommand.py&quot;, line 55, in execute
    self._sequence.run_and_handle_errors(tool, options, state)
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 73, in run_and_handle_errors
    self._run(tool, options, state)
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 67, in _run
    step(tool, options).run(state)
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/steps/checkstyle.py&quot;, line 54, in run
    args.extend(self._changed_files(state))
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/steps/abstractstep.py&quot;, line 44, in _changed_files
    return self.cached_lookup(state, &quot;changed_files&quot;)
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/steps/abstractstep.py&quot;, line 62, in cached_lookup
    state[key] = promise(self, state)
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/tool/steps/abstractstep.py&quot;, line 51, in &lt;lambda&gt;
    &quot;changed_files&quot;: lambda self, state: self._tool.scm().changed_files(self._options.git_commit),
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/git.py&quot;, line 235, in changed_files
    status_command = [self.executable_name, &apos;diff&apos;, &apos;-r&apos;, &apos;--name-status&apos;, &quot;--no-renames&quot;, &quot;--no-ext-diff&quot;, &quot;--full-index&quot;, self.merge_base(git_commit), &apos;--&apos;]
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/git.py&quot;, line 215, in merge_base
    return self.remote_merge_base()
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/git.py&quot;, line 517, in remote_merge_base
    return self._run_git([&apos;merge-base&apos;, self.remote_branch_ref(), &apos;HEAD&apos;]).strip()
  File &quot;/Volumes/Data/StyleQueue/WebKit/Tools/Scripts/webkitpy/common/checkout/scm/git.py&quot;, line 524, in remote_branch_ref
    if not self._branch_ref_exists(remote_master_ref):
AttributeError: &apos;Git&apos; object has no attribute &apos;_branch_ref_exists&apos;


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380117</commentid>
    <comment_count>31</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-12-10 19:45:42 -0800</bug_when>
    <thetext>Updated the patch to add a --remote-url option so that ssh GitHub configurations can be supported.
It might be beneficial to split the configuration of the WPT clone in its own dedicated script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380118</commentid>
    <comment_count>32</comment_count>
      <attachid>328945</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-12-10 19:48:06 -0800</bug_when>
    <thetext>Created attachment 328945
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380119</commentid>
    <comment_count>33</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-10 19:49:33 -0800</bug_when>
    <thetext>Attachment 328945 did not pass style-queue:

Can&apos;t find a branch to diff against. svn-remote.svn.fetch is not in the git config and refs/remotes/origin/master does not exist


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380125</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-10 20:50:17 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 328945:

media/modern-media-controls/seek-backward-support/seek-backward-support.html bug 174916 (authors: graouts@apple.com, mcatanzaro@igalia.com, and ryanhaddad@apple.com)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380128</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-10 20:50:40 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 328945:

svg/animations/svgtransform-animation-1.html bug 179354 (authors: ap@webkit.org, arv@chromium.org, krit@webkit.org, mark.lam@apple.com, and zimmermann@kde.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380130</commentid>
    <comment_count>36</comment_count>
      <attachid>328945</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-10 21:04:37 -0800</bug_when>
    <thetext>Comment on attachment 328945
Patch for landing

Clearing flags on attachment: 328945

Committed r225737: &lt;https://trac.webkit.org/changeset/225737&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380131</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-10 21:04:39 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380132</commentid>
    <comment_count>38</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-10 21:06:37 -0800</bug_when>
    <thetext>&lt;rdar://problem/35960387&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380156</commentid>
    <comment_count>39</comment_count>
      <attachid>328945</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-12-11 02:03:33 -0800</bug_when>
    <thetext>Comment on attachment 328945
Patch for landing

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

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:524
&gt; -            if not self._branch_ref_exists(remote_master_ref):
&gt; +            if not self.branch_ref_exists(remote_master_ref):

This breaks uploads from a Git clone of the repository, since now `git show-ref` is verifying the &apos;refs/heads/refs/remotes/origin/master&apos; ref, which doesn&apos;t exist, while before it verified the &apos;refs/remotes/origin/master&apos; ref.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380159</commentid>
    <comment_count>40</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-12-11 02:13:08 -0800</bug_when>
    <thetext>(In reply to Build Bot from comment #33)
&gt; Attachment 328945 [details] did not pass style-queue:
&gt; 
&gt; Can&apos;t find a branch to diff against. svn-remote.svn.fetch is not in the git
&gt; config and refs/remotes/origin/master does not exist
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

This is an example of that error.

All EWSs seem to be affected, so I&apos;ll roll this out.

Otherwise, a temporary workaround for this would be adding a svn-remote.svn.fetch entry:

$ git config --add svn-remote.svn.fetch &quot;refs/remotes/origin/master&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380160</commentid>
    <comment_count>41</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-12-11 02:17:06 -0800</bug_when>
    <thetext>Reverted r225737 for reason:

Breaks

Committed r225742: &lt;https://trac.webkit.org/changeset/225742&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382556</commentid>
    <comment_count>42</comment_count>
      <attachid>329587</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-12-16 17:34:26 -0800</bug_when>
    <thetext>Created attachment 329587
Fixing refs/heads regression</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382557</commentid>
    <comment_count>43</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-16 17:35:51 -0800</bug_when>
    <thetext>Attachment 329587 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/common/net/web_mock.py:44:  Bad option value &apos;unused-argument&apos;  [pylint/E0012] [5]
ERROR: Tools/Scripts/webkitpy/common/net/web_mock.py:44:  Bad option value &apos;unused-argument&apos;  [pylint/E0012] [5]
ERROR: Tools/Scripts/webkitpy/w3c/test_exporter_unittest.py:130:  [TestExporterTest.test_export] Instance of &apos;Bugzilla&apos; has no &apos;calls&apos; member (but some types could not be inferred)  [pylint/E1103] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github.py:91:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github.py:159:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github.py:178:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github.py:228:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github.py:260:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github.py:280:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github.py:305:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github.py:330:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github.py:409:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Tools/Scripts/webkitpy/w3c/wpt_github_mock.py:35:  Bad option value &apos;unused-argument&apos;  [pylint/E0012] [5]
Total errors found: 13 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382558</commentid>
    <comment_count>44</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-12-16 17:38:23 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #41)
&gt; Reverted r225737 for reason:
&gt; 
&gt; Breaks
&gt; 
&gt; Committed r225742: &lt;https://trac.webkit.org/changeset/225742&gt;

Thanks Zan for reverting it.
I fixed the patch and the style checker seems happy now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382562</commentid>
    <comment_count>45</comment_count>
      <attachid>329587</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-16 18:54:17 -0800</bug_when>
    <thetext>Comment on attachment 329587
Fixing refs/heads regression

Clearing flags on attachment: 329587

Committed r226009: &lt;https://trac.webkit.org/changeset/226009&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382563</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-16 18:54:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304035</attachid>
            <date>2017-03-09 23:55:55 -0800</date>
            <delta_ts>2017-03-21 22:26:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169462-20170309235555.patch</filename>
            <type>text/plain</type>
            <size>12276</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEzNjU0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDE1YWM4YThhYmJlZTJjMzczMTc5ZGY5MGYwMDY3NDY4
MGU4MDUwZi4uYTFjZDM4MWNmZTI3MjQ4MmRhNTFkNzhmNmYyYzI4ODU5NWMzNzBkYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3
IEBACisyMDE3LTAzLTA5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgYSBzY3JpcHQgdG8gYXV0b21hdGUgVzNjIHdlYi1wbGF0Zm9ybS10ZXN0cyBwdWxs
IHJlcXVlc3QgY3JlYXRpb25zIGZyb20gV2ViS2l0IGNvbW1pdHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQ2MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBzY3JpcHQgaXMgYXV0b21hdGluZyB0
aGUgZXh0cmFjdGlvbiBvZiB3ZWItcGxhdGZvcm0tdGVzdHMgY2hhbmdlcyBmcm9tIGEgV2ViS2l0
IGNvbW1pdC4KKyAgICAgICAgSXQgdGhlbiBleHBvcnRzIHRoZXNlIGNoYW5nZXMgdG8gYSBicmFu
Y2ggaW4gYSBnaXRodWIgY2xvbmUgb2YgdzNjIHdlYi1wbGFmdGZvcm0tdGVzdHMgcmVwby4KKyAg
ICAgICAgSXQgdGhlbiBjcmVhdGVzIGEgcHVsbCByZXF1ZXN0IHRvIHczYyB3ZWItcGxhdGZvcm0t
dGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL2V4cG9ydC13M2MtdGVzdC1jaGFuZ2VzOiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X3VwbG9hZGVyLnB5OiBBZGRl
ZC4KKwogMjAxNy0wMy0wOSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAK
ICAgICAgICAgU3RhbmRhcmRpemUgZGV2aWNlL3NpbXVsYXRvciBuYW1pbmcgY29udmVudGlvbnMK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMgYi9Ub29s
cy9TY3JpcHRzL2V4cG9ydC13M2MtdGVzdC1jaGFuZ2VzCm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExZGRkNGMwOWVl
ODRhNDVjNmE3NGEzZjdhMTg3ZDFkMDM2NWQyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL2V4cG9ydC13M2MtdGVzdC1jaGFuZ2VzCkBAIC0wLDAgKzEsMzUgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoQykgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29y
cG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlCisjICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisjICAgIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKyMgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCisjICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBB
TlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisjIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyMgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisjIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorIyBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyMgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0gg
REFNQUdFLgorCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkudzNjIGltcG9ydCB0ZXN0X3Vw
bG9hZGVyCisKKworc3lzLmV4aXQodGVzdF91cGxvYWRlci5tYWluKHN5cy5hcmd2WzE6XSwgc3lz
LnN0ZG91dCwgc3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY2hlY2tvdXQvc2NtL2dpdC5weQppbmRleCBlZDZlZTdmMmFjMThiZGJjZmY5NjZmOTA5NWVm
Y2NmNjJjNjYwN2U4Li5iNjE5ZGIzYzZlNDFmZjljYTdhOGVhMTFiNjJjM2ViMGM0NTRiZTBhIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQu
cHkKQEAgLTU4NCw2ICs1ODQsMzIgQEAgY2xhc3MgR2l0KFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAg
ICAgZGVmIGZldGNoKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ2ZldGNo
J10pCiAKKyAgICBkZWYgcmVzZXRfaGFyZChzZWxmLCByZXZpc2lvbik6CisgICAgICAgIHJldHVy
biBzZWxmLl9ydW5fZ2l0KFsncmVzZXQnLCAnLS1oYXJkJywgcmV2aXNpb25dKQorCisgICAgZGVm
IGFtKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBhcmdzID0gWydhbSddCisgICAgICAgIGFyZ3Mu
ZXh0ZW5kKG9wdGlvbnMpCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0KGFyZ3MpCisKKyAg
ICBkZWYgZm9ybWF0X3BhdGNoKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBhcmdzID0gWydmb3Jt
YXQtcGF0Y2gnXQorICAgICAgICBhcmdzLmV4dGVuZChvcHRpb25zKQorICAgICAgICByZXR1cm4g
c2VsZi5fcnVuX2dpdChhcmdzKQorCisgICAgZGVmIHJlbW90ZShzZWxmLCBvcHRpb25zKToKKyAg
ICAgICAgYXJncyA9IFsncmVtb3RlJ10KKyAgICAgICAgYXJncy5leHRlbmQob3B0aW9ucykKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoYXJncykKKworICAgIGRlZiBwdXNoKHNlbGYsIG9w
dGlvbnMpOgorICAgICAgICBhcmdzID0gWydwdXNoJ10KKyAgICAgICAgYXJncy5leHRlbmQob3B0
aW9ucykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoYXJncykKKworICAgIGRlZiBjaGVj
a291dF9uZXdfYnJhbmNoKHNlbGYsIGJyYW5jaF9uYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3J1bl9naXQoWydjaGVja291dCcsICctYicsIGJyYW5jaF9uYW1lXSkKKwogICAgIGRlZiBjaGVj
a291dChzZWxmLCByZXZpc2lvbiwgcXVpZXQ9Tm9uZSk6CiAgICAgICAgIGNvbW1hbmQgPSBbJ2No
ZWNrb3V0JywgcmV2aXNpb25dCiAgICAgICAgIGlmIHF1aWV0OgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF91cGxvYWRlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdzNjL3Rlc3RfdXBsb2FkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAxMTlmNzk2MGE4YTU3MDEx
MDVlMDVjYjkxYmVhOWU3NGQ5NjcyYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdzNjL3Rlc3RfdXBsb2FkZXIucHkKQEAgLTAsMCArMSwxNjggQEAKKworIyBDb3B5
cmlnaHQgKGMpIDIwMTcsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIKKyBUaGlzIHNjcmlwdCB1cGxv
YWRzIGNoYW5nZXMgbWFkZSB0byBXM0Mgd2ViLXBsYXRmb3JtLXRlc3RzIHRlc3RzLgorIiIiCisK
K2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5naXQgaW1wb3J0IEdpdAorZnJvbSB3ZWJraXRweS5j
b21tb24uaG9zdCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24ud2Via2l0X2ZpbmRl
ciBpbXBvcnQgV2ViS2l0RmluZGVyCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKKworCitjbGFzcyBUZXN0VXBsb2FkZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBob3N0LCByZXBvc2l0b3J5X2RpcmVjdG9yeSk6CisgICAgICAgIHNlbGYuX2hvc3QgPSBo
b3N0CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBob3N0LmZpbGVzeXN0ZW0KKyAgICAgICAg
c2VsZi5yZXBvc2l0b3J5X2RpcmVjdG9yeSA9IHJlcG9zaXRvcnlfZGlyZWN0b3J5CisKKyAgICAg
ICAgaWYgbm90IHNlbGYucmVwb3NpdG9yeV9kaXJlY3Rvcnk6CisgICAgICAgICAgICB3ZWJraXRf
ZmluZGVyID0gV2ViS2l0RmluZGVyKHNlbGYuX2ZpbGVzeXN0ZW0pCisgICAgICAgICAgICBzZWxm
LnJlcG9zaXRvcnlfZGlyZWN0b3J5ID0gd2Via2l0X2ZpbmRlci5wYXRoX2Zyb21fd2Via2l0X2Jh
c2UoJ1dlYktpdEJ1aWxkJywgJ3czYy10ZXN0cycsICd3ZWItcGxhdGZvcm0tdGVzdHMnKQorCisg
ICAgICAgIHNlbGYuZ2l0ID0gc2VsZi5faW5pdF9yZXBvc2l0b3J5KCJodHRwczovL2dpdGh1Yi5j
b20vdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy5naXQiLCBzZWxmLnJlcG9zaXRvcnlfZGlyZWN0b3J5
KQorCisgICAgZGVmIF9pbml0X3JlcG9zaXRvcnkoc2VsZiwgdXJsLCByZXBvc2l0b3J5X2RpcmVj
dG9yeSk6CisgICAgICAgIGdpdCA9IE5vbmUKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0
ZW0uZXhpc3RzKHJlcG9zaXRvcnlfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIF9sb2cuaW5mbygn
Q2xvbmluZyAlcyBpbnRvICVzLi4uJyAlICh1cmwsIHJlcG9zaXRvcnlfZGlyZWN0b3J5KSkKKyAg
ICAgICAgICAgIEdpdC5jbG9uZSh1cmwsIHJlcG9zaXRvcnlfZGlyZWN0b3J5LCBzZWxmLl9ob3N0
LmV4ZWN1dGl2ZSkKKyAgICAgICAgZ2l0ID0gR2l0KHJlcG9zaXRvcnlfZGlyZWN0b3J5LCBOb25l
LCBleGVjdXRpdmU9c2VsZi5faG9zdC5leGVjdXRpdmUsIGZpbGVzeXN0ZW09c2VsZi5fZmlsZXN5
c3RlbSkKKyAgICAgICAgX2xvZy5pbmZvKCdGZXRjaGluZyByZXBvc2l0b3J5JykKKyAgICAgICAg
Z2l0LmZldGNoKCkKKyAgICAgICAgX2xvZy5pbmZvKCdDbGVhbmluZyBtYXN0ZXIgYnJhbmNoJykK
KyAgICAgICAgZ2l0LmNoZWNrb3V0KCdtYXN0ZXInKQorICAgICAgICBnaXQucmVzZXRfaGFyZCgn
bWFzdGVyJykKKyAgICAgICAgcmV0dXJuIGdpdAorCisgICAgZGVmIGNyZWF0ZV9icmFuY2hfd2l0
aF9wYXRjaChzZWxmLCBwYXRjaCwgYnJhbmNoX25hbWUpOgorICAgICAgICBfbG9nLmluZm8oJ0Fw
cGx5aW5nIHBhdGNoIHRvIGJyYW5jaCAnICsgYnJhbmNoX25hbWUpCisgICAgICAgIHNlbGYuZ2l0
LmNoZWNrb3V0X25ld19icmFuY2goYnJhbmNoX25hbWUpCisgICAgICAgIHNlbGYuZ2l0LmFtKFtw
YXRjaCwgJy0tZXhjbHVkZScsICcqLWV4cGVjdGVkLnR4dCddKQorCisgICAgZGVmIHB1c2hfdG9f
cHVibGljX3JlcG9zaXRvcnkoc2VsZiwgb3JpZ2luLCBicmFuY2hfbmFtZSk6CisgICAgICAgIF9s
b2cuaW5mbygnUHVzaGluZyBicmFuY2ggJyArIGJyYW5jaF9uYW1lKQorICAgICAgICBzZWxmLmdp
dC5wdXNoKFtvcmlnaW4sIGJyYW5jaF9uYW1lLCAnLWYnXSkKKworICAgIGRlZiBtYWtlX3B1bGxf
cmVxdWVzdChzZWxmLCBwdWJsaWNfdXJsLCBicmFuY2hfbmFtZSk6CisgICAgICAgIF9sb2cuaW5m
bygnTWFraW5nIHB1bGwgcmVxdWVzdCcpCisgICAgICAgICNzZWxmLmdpdC5wdWxsX3JlcXVlc3Qo
J0hFQUR+MScsIHB1YmxpY191cmwpCisKKyAgICBkZWYgZGVsZXRlX2xvY2FsX2JyYW5jaChzZWxm
LCBicmFuY2hfbmFtZSk6CisgICAgICAgIF9sb2cuaW5mbygnQ2xlYW5pbmcgYnJhbmNoJykKKyAg
ICAgICAgc2VsZi5naXQuY2hlY2tvdXQoJ21hc3RlcicpCisgICAgICAgIHNlbGYuZ2l0LmRlbGV0
ZV9icmFuY2goYnJhbmNoX25hbWUpCisKKyAgICBkZWYgY3JlYXRlX2dpdF9wYXRjaChzZWxmLCBn
aXRfcmV2aXNpb24pOgorICAgICAgICBwYXRjaF9maWxlID0gJy4vcGF0Y2gudGVtcC4nICsgc3Ry
KHRpbWUuY2xvY2soKSkKKyAgICAgICAgZ2l0ID0gR2l0KCcuJywgTm9uZSwgZXhlY3V0aXZlPXNl
bGYuX2hvc3QuZXhlY3V0aXZlLCBmaWxlc3lzdGVtPXNlbGYuX2ZpbGVzeXN0ZW0pCisgICAgICAg
IHBhdGNoX2RhdGEgPSBnaXQuZm9ybWF0X3BhdGNoKFtnaXRfcmV2aXNpb24sICdMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzJywgJy0tc3Rkb3V0J10pCisKKyAgICAg
ICAgaWYgbm90IHBhdGNoX2RhdGE6CisgICAgICAgICAgICBfbG9nLmluZm8oJ05vIGNoYW5nZXMg
dG8gdXBzdHJlYW0nKQorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIHBhdGNoX2RhdGEg
PSBwYXRjaF9kYXRhLnJlcGxhY2UoJ0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvJywgJycpCisgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBmdXJ0aGVyIGZpbHRl
ciBwYXRjaF9kYXRhIGlmIGl0IGNvbnRhaW5zIFdlYktpdCBzcGVjaWZpYyBjaGFuZ2VzLCBsaWtl
IHBhdGhzIHRvIHRlc3RoYXJuZXNzLmpzCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVf
dGV4dF9maWxlKHBhdGNoX2ZpbGUsIHBhdGNoX2RhdGEpCisgICAgICAgIHJldHVybiBzZWxmLl9m
aWxlc3lzdGVtLmFic3BhdGgocGF0Y2hfZmlsZSkKKworICAgIGRlZiBjcmVhdGVfdXBsb2FkX3Jl
bW90ZShzZWxmLCBuYW1lLCB1cmwpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYuZ2l0LnJlbW90
ZShbXSk6CisgICAgICAgICAgICBfbG9nLmluZm8oIldpbGwgcHVzaCBicmFuY2ggdG8gIiArIHNl
bGYuZ2l0LnJlbW90ZShbImdldC11cmwiLCBuYW1lXSkuc3RyaXAoKSkKKyAgICAgICAgICAgIHJl
dHVybgorICAgICAgICBfbG9nLmluZm8oIldpbGwgcHVzaCBicmFuY2ggdG8gIiArIHVybCkKKyAg
ICAgICAgc2VsZi5naXQucmVtb3RlKFsiYWRkIiwgbmFtZSwgdXJsXSkKKworCitkZWYgcGFyc2Vf
YXJncyhhcmdzKToKKyAgICBkZXNjcmlwdGlvbiA9ICIiIlNjcmlwdCB0byBnZW5lcmF0ZSBhIHB1
bGwgcmVxdWVzdCB0byBXM2Mgd2ViLXBsYXRmb3JtLXRlc3RzIHJlcG9zaXRvcnkKKyAgICBUb29s
cy9TY3JpcHRzL21ha2UtdzNjLXRlc3RzLXByIC1nIEhFQUR+MS4uSEVBRCAtYiBCUkFOQ0hYWCAt
byBVU0VSTkFNRSB3aWxsOgorICAgIC0gQ3JlYXRlIGEgcmVtb3RlIGJyYW5jaCBuYW1lZCBCUkFO
Q0hYWCBvbiBodHRwczovL2dpdGh1Yi5jb20vVVNFUk5BTUUvd2ViLXBsYXRmb3JtLXRlc3RzLmdp
dCByZXBvc2l0b3J5LgorICAgIC0gTWFrZSB0aGUgcmVsYXRlZCBwdWxsIHJlcXVlc3Qgb24gaHR0
cHM6Ly9naXRodWIuY29tL3czYy93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0IHJlcG9zaXRvcnkuCisg
ICAgIiIiCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nY3JlYXRl
LXczYy1wdWxsLXJlcXVlc3QgLi4uJywgZGVzY3JpcHRpb249ZGVzY3JpcHRpb24sIGZvcm1hdHRl
cl9jbGFzcz1hcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIpCisKKyAgICBwYXJz
ZXIuYWRkX2FyZ3VtZW50KCctZycsICctLWdpdC1yYW5nZScsIGRlc3Q9J3JhbmdlJywgZGVmYXVs
dD1Ob25lLCBoZWxwPSdHaXQgY29tbWl0cyB0byBhcHBseScpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnLXAnLCAnLS1wYXRjaCcsIGRlc3Q9J3BhdGNoJywgZGVmYXVsdD1Ob25lLCBoZWxwPSdQ
YXRjaCB0byBhcHBseScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCAnLS1icmFuY2gn
LCBkZXN0PSdicmFuY2hfbmFtZScsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nQnJhbmNoIG5hbWUgdG8g
dXNlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdScsICctLXVybCcsIGRlc3Q9J3B1Ymxp
Y19yZXBvc2l0b3J5X3VybCcsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nUHVibGljIHJlcG9zaXRvcnkg
dXJsJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW9yaWdpbicsIGRlc3Q9J3B1
YmxpY19yZXBvc2l0b3J5X29yaWdpbicsIGRlZmF1bHQ9Tm9uZSwgaGVscD0ncmVwb3NpdG9yeSBv
cmlnaW4gdG8gdXNlIHRvIHB1c2gnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1yJywgJy0t
cmVwb3NpdG9yeScsIGRlc3Q9J3JlcG9zaXRvcnlfZGlyZWN0b3J5JywgZGVmYXVsdD1Ob25lLCBo
ZWxwPSdyZXBvc2l0b3J5IGRpcmVjdG9yeScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW4n
LCAnLS1uYW1lJywgZGVzdD0ndXNlcm5hbWUnLCBkZWZhdWx0PU5vbmUsIGhlbHA9J2dpdGh1YiB1
c2VyIG5hbWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1jJywgJy0tY3JlYXRlLXByJywg
ZGVzdD0nY3JlYXRlX3B1bGxfcmVxdWVzdCcsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J2NyZWF0ZSBw
dWxsIHJlcXVlc3QgdG8gdzNjIHdlYi1wbGF0Zm9ybS10ZXN0cycpCisKKyAgICBvcHRpb25zLCBh
cmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJncykKKyAgICByZXR1cm4gb3B0aW9ucwor
CisKK2RlZiBjb25maWd1cmVfbG9nZ2luZygpOgorICAgIGNsYXNzIExvZ0hhbmRsZXIobG9nZ2lu
Zy5TdHJlYW1IYW5kbGVyKToKKworICAgICAgICBkZWYgZm9ybWF0KHNlbGYsIHJlY29yZCk6Cisg
ICAgICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+IGxvZ2dpbmcuSU5GTzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIiVzOiAlcyIgJSAocmVjb3JkLmxldmVsbmFtZSwgcmVjb3JkLmdldE1lc3Nh
Z2UoKSkKKyAgICAgICAgICAgIHJldHVybiByZWNvcmQuZ2V0TWVzc2FnZSgpCisKKyAgICBsb2dn
ZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5G
TykKKyAgICBoYW5kbGVyID0gTG9nSGFuZGxlcigpCisgICAgaGFuZGxlci5zZXRMZXZlbChsb2dn
aW5nLklORk8pCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKyAgICByZXR1cm4gaGFu
ZGxlcgorCisKK2RlZiBtYWluKF9hcmd2LCBfc3Rkb3V0LCBfc3RkZXJyKToKKyAgICBvcHRpb25z
ID0gcGFyc2VfYXJncyhfYXJndikKKworICAgIGNvbmZpZ3VyZV9sb2dnaW5nKCkKKworICAgIHRl
c3RfdXBsb2FkZXIgPSBUZXN0VXBsb2FkZXIoSG9zdCgpLCBvcHRpb25zLnJlcG9zaXRvcnlfZGly
ZWN0b3J5KQorCisgICAgZ2l0X3BhdGNoX2ZpbGUgPSBOb25lCisgICAgaWYgbm90IG9wdGlvbnMu
cGF0Y2g6CisgICAgICAgIG9wdGlvbnMucGF0Y2ggPSB0ZXN0X3VwbG9hZGVyLmNyZWF0ZV9naXRf
cGF0Y2gob3B0aW9ucy5yYW5nZSkKKyAgICAgICAgaWYgbm90IG9wdGlvbnMucGF0Y2g6CisgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgZ2l0X3BhdGNoX2ZpbGUgPSBvcHRpb25zLnBhdGNoCisg
ICAgdGVzdF91cGxvYWRlci5jcmVhdGVfYnJhbmNoX3dpdGhfcGF0Y2gob3B0aW9ucy5wYXRjaCwg
b3B0aW9ucy5icmFuY2hfbmFtZSkKKyAgICBpZiBnaXRfcGF0Y2hfZmlsZToKKyAgICAgICAgdGVz
dF91cGxvYWRlci5fZmlsZXN5c3RlbS5yZW1vdmUoZ2l0X3BhdGNoX2ZpbGUpCisKKyAgICBpZiBv
cHRpb25zLnVzZXJuYW1lOgorICAgICAgICBpZiBub3Qgb3B0aW9ucy5wdWJsaWNfcmVwb3NpdG9y
eV91cmw6CisgICAgICAgICAgICBvcHRpb25zLnB1YmxpY19yZXBvc2l0b3J5X3VybCA9ICJodHRw
czovL2dpdGh1Yi5jb20vIiArIG9wdGlvbnMudXNlcm5hbWUgKyAiL3dlYi1wbGF0Zm9ybS10ZXN0
cy5naXQiCisgICAgICAgIGlmIG5vdCBvcHRpb25zLnB1YmxpY19yZXBvc2l0b3J5X29yaWdpbjoK
KyAgICAgICAgICAgIG9wdGlvbnMucHVibGljX3JlcG9zaXRvcnlfb3JpZ2luID0gb3B0aW9ucy51
c2VybmFtZQorICAgICAgICAgICAgdGVzdF91cGxvYWRlci5jcmVhdGVfdXBsb2FkX3JlbW90ZShv
cHRpb25zLnB1YmxpY19yZXBvc2l0b3J5X29yaWdpbiwgImh0dHBzOi8vIiArIG9wdGlvbnMudXNl
cm5hbWUgKyAiQGdpdGh1Yi5jb20vIiArIG9wdGlvbnMudXNlcm5hbWUgKyAiL3dlYi1wbGF0Zm9y
bS10ZXN0cy5naXQiKQorCisgICAgdGVzdF91cGxvYWRlci5wdXNoX3RvX3B1YmxpY19yZXBvc2l0
b3J5KG9wdGlvbnMucHVibGljX3JlcG9zaXRvcnlfb3JpZ2luLCBvcHRpb25zLmJyYW5jaF9uYW1l
KQorICAgIGlmIG9wdGlvbnMuY3JlYXRlX3B1bGxfcmVxdWVzdDoKKyAgICAgICAgdGVzdF91cGxv
YWRlci5tYWtlX3B1bGxfcmVxdWVzdChvcHRpb25zLnB1YmxpY19yZXBvc2l0b3J5X3VybCwgb3B0
aW9ucy5icmFuY2hfbmFtZSkKKyAgICB0ZXN0X3VwbG9hZGVyLmRlbGV0ZV9sb2NhbF9icmFuY2go
b3B0aW9ucy5icmFuY2hfbmFtZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305076</attachid>
            <date>2017-03-21 22:26:16 -0700</date>
            <delta_ts>2017-05-07 23:56:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169462-20170321222615.patch</filename>
            <type>text/plain</type>
            <size>24605</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0MjIyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDY3NzA4MjVmZTI4YmNiNzY1ZDNhMGU5ZjIxZGRjN2Ri
YTM2ZjVjMy4uOTNjODgwODMzZjYwZGRlYzA3Y2U2ZTdjMTlhNmViYmU0ZjUyMjM5YiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1
IEBACisyMDE3LTAzLTIxICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgYSBzY3JpcHQgdG8gYXV0b21hdGUgVzNjIHdlYi1wbGF0Zm9ybS10ZXN0cyBwdWxs
IHJlcXVlc3QgY3JlYXRpb25zIGZyb20gV2ViS2l0IGNvbW1pdHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQ2MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9leHBvcnQtdzNjLXRlc3Qt
Y2hhbmdlczogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvc2NtL2dpdC5weToKKyAgICAgICAgKEdpdC5yZXNldF9oYXJkKToKKyAgICAgICAgKEdpdCk6
CisgICAgICAgIChHaXQuYW0pOgorICAgICAgICAoR2l0LmNvbW1pdCk6CisgICAgICAgIChHaXQu
Zm9ybWF0X3BhdGNoKToKKyAgICAgICAgKEdpdC5yZXF1ZXN0X3B1bGwpOgorICAgICAgICAoR2l0
LnJlbW90ZSk6CisgICAgICAgIChHaXQucHVzaCk6CisgICAgICAgIChHaXQuY2hlY2tvdXRfbmV3
X2JyYW5jaCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weToK
KyAgICAgICAgKFdlYi5nZXRfYmluYXJ5KToKKyAgICAgICAgKFdlYik6CisgICAgICAgIChXZWIu
cmVxdWVzdCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF91cGxvYWRlci5w
eTogQWRkZWQuCisgICAgICAgIChUZXN0VXBsb2FkZXIpOgorICAgICAgICAoVGVzdFVwbG9hZGVy
Ll9faW5pdF9fKToKKyAgICAgICAgKFRlc3RVcGxvYWRlci5faW5pdF9yZXBvc2l0b3J5KToKKyAg
ICAgICAgKFRlc3RVcGxvYWRlci5kb3dubG9hZF9hbmRfY29tbWl0X3BhdGNoKToKKyAgICAgICAg
KFRlc3RVcGxvYWRlci5jbGVhbik6CisgICAgICAgIChUZXN0VXBsb2FkZXIuY3JlYXRlX2JyYW5j
aF93aXRoX3BhdGNoKToKKyAgICAgICAgKFRlc3RVcGxvYWRlci5wdXNoX3RvX3B1YmxpY19yZXBv
c2l0b3J5KToKKyAgICAgICAgKFRlc3RVcGxvYWRlci5tYWtlX3B1bGxfcmVxdWVzdCk6CisgICAg
ICAgIChUZXN0VXBsb2FkZXIuZGVsZXRlX2xvY2FsX2JyYW5jaCk6CisgICAgICAgIChUZXN0VXBs
b2FkZXIuY3JlYXRlX2dpdF9wYXRjaCk6CisgICAgICAgIChUZXN0VXBsb2FkZXIuY3JlYXRlX3Vw
bG9hZF9yZW1vdGVfaWZfbmVlZGVkKToKKyAgICAgICAgKHBhcnNlX2FyZ3MpOgorICAgICAgICAo
Y29uZmlndXJlX2xvZ2dpbmcpOgorICAgICAgICAoY29uZmlndXJlX2xvZ2dpbmcuTG9nSGFuZGxl
cik6CisgICAgICAgIChjb25maWd1cmVfbG9nZ2luZy5Mb2dIYW5kbGVyLmZvcm1hdCk6CisgICAg
ICAgIChtYWluKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3czYy93cHRfZ2l0aHViLnB5
OiBBZGRlZC4KKyAgICAgICAgKFdQVEdpdEh1Yik6CisgICAgICAgIChXUFRHaXRIdWIuX19pbml0
X18pOgorICAgICAgICAoV1BUR2l0SHViLmF1dGhfdG9rZW4pOgorICAgICAgICAoV1BUR2l0SHVi
LnJlcXVlc3QpOgorICAgICAgICAoV1BUR2l0SHViLmNyZWF0ZV9wcik6CisgICAgICAgIChXUFRH
aXRIdWIuYWRkX2xhYmVsKToKKyAgICAgICAgKFdQVEdpdEh1Yi5pbl9mbGlnaHRfcHVsbF9yZXF1
ZXN0cyk6CisgICAgICAgIChXUFRHaXRIdWIuZ2V0X3ByX2JyYW5jaCk6CisgICAgICAgIChXUFRH
aXRIdWIubWVyZ2VfcHVsbF9yZXF1ZXN0KToKKyAgICAgICAgKFdQVEdpdEh1Yi5kZWxldGVfcmVt
b3RlX2JyYW5jaCk6CisgICAgICAgIChNZXJnZUVycm9yKToKKwogMjAxNy0wMy0yMCAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBzeXN0ZW0g
dHJhY2UgcG9pbnQgZm9yIG1lbW9yeSB3YXJuaW5nIGhhbmRsaW5nCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL2V4cG9ydC13M2MtdGVzdC1jaGFuZ2VzIGIvVG9vbHMvU2NyaXB0cy9leHBvcnQt
dzNjLXRlc3QtY2hhbmdlcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMWRkZDRjMDllZTg0YTQ1YzZhNzRhM2Y3YTE4
N2QxZDAzNjVkMmEyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9leHBvcnQtdzNj
LXRlc3QtY2hhbmdlcwpAQCAtMCwwICsxLDM1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKwor
IyBDb3B5cmlnaHQgKEMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMK
KyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZQorIyAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworIyAgICBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisjICAgIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworIyAgICBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisj
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBCRQorIyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisjIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorIyBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IKKyMgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GCisjIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KKworaW1wb3J0
IHN5cworCitmcm9tIHdlYmtpdHB5LnczYyBpbXBvcnQgdGVzdF91cGxvYWRlcgorCisKK3N5cy5l
eGl0KHRlc3RfdXBsb2FkZXIubWFpbihzeXMuYXJndlsxOl0sIHN5cy5zdGRvdXQsIHN5cy5zdGRl
cnIpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
c2NtL2dpdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9n
aXQucHkKaW5kZXggMmZmOTVhMjc4M2MzNjdkYjFmNmRkYzViMTgyZTNiYmFjMjc3M2I5ZC4uOTUw
ZmNlNTQyODZlMzliNjc1ZWU4YTc0MmQxNmI4ODg1YWIyZDljYSAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5CkBAIC01ODQsNiArNTg0
LDQyIEBAIGNsYXNzIEdpdChTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgIGRlZiBmZXRjaChzZWxm
KToKICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWydmZXRjaCddKQogCisgICAgZGVmIHJl
c2V0X2hhcmQoc2VsZiwgcmV2aXNpb24pOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChb
J3Jlc2V0JywgJy0taGFyZCcsIHJldmlzaW9uXSkKKworICAgIGRlZiBhbShzZWxmLCBvcHRpb25z
KToKKyAgICAgICAgYXJncyA9IFsnYW0nXQorICAgICAgICBhcmdzLmV4dGVuZChvcHRpb25zKQor
ICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChhcmdzKQorCisgICAgZGVmIGNvbW1pdChzZWxm
LCBvcHRpb25zKToKKyAgICAgICAgYXJncyA9IFsnY29tbWl0J10KKyAgICAgICAgYXJncy5leHRl
bmQob3B0aW9ucykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoYXJncykKKworICAgIGRl
ZiBmb3JtYXRfcGF0Y2goc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIGFyZ3MgPSBbJ2Zvcm1hdC1w
YXRjaCddCisgICAgICAgIGFyZ3MuZXh0ZW5kKG9wdGlvbnMpCisgICAgICAgIHJldHVybiBzZWxm
Ll9ydW5fZ2l0KGFyZ3MpCisKKyAgICBkZWYgcmVxdWVzdF9wdWxsKHNlbGYsIG9wdGlvbnMpOgor
ICAgICAgICBhcmdzID0gWydyZXF1ZXN0LXB1bGwnXQorICAgICAgICBhcmdzLmV4dGVuZChvcHRp
b25zKQorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChhcmdzKQorCisgICAgZGVmIHJlbW90
ZShzZWxmLCBvcHRpb25zKToKKyAgICAgICAgYXJncyA9IFsncmVtb3RlJ10KKyAgICAgICAgYXJn
cy5leHRlbmQob3B0aW9ucykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoYXJncykKKwor
ICAgIGRlZiBwdXNoKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBhcmdzID0gWydwdXNoJ10KKyAg
ICAgICAgYXJncy5leHRlbmQob3B0aW9ucykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQo
YXJncykKKworICAgIGRlZiBjaGVja291dF9uZXdfYnJhbmNoKHNlbGYsIGJyYW5jaF9uYW1lKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWydjaGVja291dCcsICctYicsIGJyYW5jaF9u
YW1lXSkKKwogICAgIGRlZiBjaGVja291dChzZWxmLCByZXZpc2lvbiwgcXVpZXQ9Tm9uZSk6CiAg
ICAgICAgIGNvbW1hbmQgPSBbJ2NoZWNrb3V0JywgcmV2aXNpb25dCiAgICAgICAgIGlmIHF1aWV0
OgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC93ZWIucHkKaW5kZXggYjhhMDZlNTc0
NjhkMDVmMDRiNjhmMTI5ZGNkZTZhY2EwODc3NDcwYi4uNWVlZjUwZTQ2NTcxMzRkNjdkMGYxMTQ5
YjZjOTkzZDIyNDdmMTQwOCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vbmV0L3dlYi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvd2Vi
LnB5CkBAIC0zNCwzICszNCwxNiBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQubmV0d29ya3Ry
YW5zYWN0aW9uIGltcG9ydCBOZXR3b3JrVHJhbnNhY3Rpb24KIGNsYXNzIFdlYihvYmplY3QpOgog
ICAgIGRlZiBnZXRfYmluYXJ5KHNlbGYsIHVybCwgY29udmVydF80MDRfdG9fTm9uZT1GYWxzZSk6
CiAgICAgICAgIHJldHVybiBOZXR3b3JrVHJhbnNhY3Rpb24oY29udmVydF80MDRfdG9fTm9uZT1j
b252ZXJ0XzQwNF90b19Ob25lKS5ydW4obGFtYmRhOiB1cmxsaWIyLnVybG9wZW4odXJsKS5yZWFk
KCkpCisKKyAgICBkZWYgcmVxdWVzdChzZWxmLCBtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycz1O
b25lKToKKyAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIodXJsbGliMi5IVFRQ
SGFuZGxlcikKKyAgICAgICAgcmVxdWVzdCA9IHVybGxpYjIuUmVxdWVzdCh1cmw9dXJsLCBkYXRh
PWRhdGEpCisgICAgICAgIHJlcXVlc3QuZ2V0X21ldGhvZCA9IGxhbWJkYTogbWV0aG9kCisKKyAg
ICAgICAgaWYgaGVhZGVyczoKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGhlYWRlcnMu
aXRlbXMoKToKKyAgICAgICAgICAgICAgICByZXF1ZXN0LmFkZF9oZWFkZXIoa2V5LCB2YWx1ZSkK
KyAgICAgICAgcHJpbnQgaGVhZGVycworICAgICAgICBwcmludCB1cmwKKyAgICAgICAgcHJpbnQg
ZGF0YQorICAgICAgICByZXR1cm4gb3BlbmVyLm9wZW4ocmVxdWVzdCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfdXBsb2FkZXIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3czYy90ZXN0X3VwbG9hZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkOTAwZmY1NzBiM2Zm
MzBmYzVmMmRlZGFmMTU2MDRkMjZmNDFjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3czYy90ZXN0X3VwbG9hZGVyLnB5CkBAIC0wLDAgKzEsMjY4IEBACisKKyMg
Q29weXJpZ2h0IChjKSAyMDE3LCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiCisgVGhpcyBzY3JpcHQg
dXBsb2FkcyBjaGFuZ2VzIG1hZGUgdG8gVzNDIHdlYi1wbGF0Zm9ybS10ZXN0cyB0ZXN0cy4KKyIi
IgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCB0
aW1lCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0IGltcG9ydCBDaGVja291dAorZnJv
bSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtLmdpdCBpbXBvcnQgR2l0Citmcm9tIHdlYmtp
dHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVn
emlsbGEgaW1wb3J0IEJ1Z3ppbGxhCitmcm9tIHdlYmtpdHB5LmNvbW1vbi53ZWJraXRfZmluZGVy
IGltcG9ydCBXZWJLaXRGaW5kZXIKK2Zyb20gd2Via2l0cHkudG9vbC5tYWluIGltcG9ydCBXZWJL
aXRQYXRjaAorZnJvbSB3ZWJraXRweS53M2Mud3B0X2dpdGh1YiBpbXBvcnQgV1BUR2l0SHViCisK
K19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBUZXN0VXBsb2Fk
ZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBvcHRpb25zKToKKyAg
ICAgICAgc2VsZi5faG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IGhvc3Qu
ZmlsZXN5c3RlbQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCisKKyAgICAgICAgc2Vs
Zi5idWd6aWxsYSA9IEJ1Z3ppbGxhKCkKKyAgICAgICAgc2VsZi53ZWJLaXRHaXQgPSBHaXQoJy4n
LCBOb25lLCBleGVjdXRpdmU9c2VsZi5faG9zdC5leGVjdXRpdmUsIGZpbGVzeXN0ZW09c2VsZi5f
ZmlsZXN5c3RlbSkKKyAgICAgICAgc2VsZi5idWdfaWQgPSBvcHRpb25zLmJ1Z19pZAorICAgICAg
ICBpZiBub3Qgc2VsZi5idWdfaWQ6CisgICAgICAgICAgICBpZiBvcHRpb25zLmF0dGFjaG1lbnRf
aWQ6CisgICAgICAgICAgICAgICAgc2VsZi5idWdfaWQgPSBzZWxmLmJ1Z3ppbGxhLmJ1Z19pZF9m
b3JfYXR0YWNobWVudF9pZChvcHRpb25zLmF0dGFjaG1lbnRfaWQpCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIHByaW50IG9wdGlvbnMuZ2l0X2NvbW1pdAorICAgICAgICAgICAg
ICAgIHNlbGYuYnVnX2lkID0gQ2hlY2tvdXQoc2VsZi53ZWJLaXRHaXQpLmJ1Z19pZF9mb3JfdGhp
c19jb21taXQob3B0aW9ucy5naXRfY29tbWl0KQorCisgICAgICAgIHNlbGYucmVwb3NpdG9yeV9k
aXJlY3RvcnkgPSBvcHRpb25zLnJlcG9zaXRvcnlfZGlyZWN0b3J5CisKKyAgICAgICAgc2VsZi51
c2VybmFtZSA9IG9wdGlvbnMudXNlcm5hbWUKKyAgICAgICAgaWYgbm90IHNlbGYudXNlcm5hbWU6
CisgICAgICAgICAgICBzZWxmLnVzZXJuYW1lID0gb3MuZW52aXJvbi5nZXQoJ0dJVEhVQl9XUFRf
VVNFUicpCisgICAgICAgICAgICBwcmludCAiVXNpbmcgZ2l0aHViIHVzZXIgIiArIHNlbGYudXNl
cm5hbWUKKyAgICAgICAgc2VsZi50b2tlbiA9IG9wdGlvbnMudG9rZW4KKyAgICAgICAgaWYgbm90
IHNlbGYudG9rZW46CisgICAgICAgICAgICBzZWxmLnRva2VuID0gb3MuZW52aXJvbi5nZXQoJ0dJ
VEhVQl9XUFRfQVVUSCcpCisKKyAgICAgICAgc2VsZi5icmFuY2hfbmFtZSA9ICJ3ZWJraXQtIiAr
IHN0cihzZWxmLmJ1Z19pZCkKKyAgICAgICAgc2VsZi5idWd6aWxsYV91cmwgPSAiaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPSIgKyBzdHIoc2VsZi5idWdfaWQpCisgICAg
ICAgIHNlbGYuY29tbWl0X3RpdGxlID0gJ1dlYktpdCBleHBvcnQgb2YgJyArIHNlbGYuYnVnemls
bGFfdXJsCisKKyAgICAgICAgc2VsZi5yZXBvc2l0b3J5X3JlbW90ZSA9IG9wdGlvbnMucmVwb3Np
dG9yeV9yZW1vdGUKKyAgICAgICAgaWYgbm90IHNlbGYucmVwb3NpdG9yeV9yZW1vdGU6CisgICAg
ICAgICAgICBzZWxmLnJlcG9zaXRvcnlfcmVtb3RlID0gc2VsZi51c2VybmFtZQorCisgICAgICAg
IHNlbGYucmVwb3NpdG9yeV9vcmlnaW5fdXJsID0gImh0dHBzOi8vIiArIHNlbGYudXNlcm5hbWUg
KyAiQGdpdGh1Yi5jb20vIiArIHNlbGYudXNlcm5hbWUgKyAiL3dlYi1wbGF0Zm9ybS10ZXN0cy5n
aXQiCisgICAgICAgIHNlbGYucmVwb3NpdG9yeV9wdWJsaWNfdXJsID0gImh0dHBzOi8vZ2l0aHVi
LmNvbS8iICsgc2VsZi51c2VybmFtZSArICIvd2ViLXBsYXRmb3JtLXRlc3RzLmdpdCIgaWYgbm90
IG9wdGlvbnMucmVwb3NpdG9yeV9wdWJsaWNfdXJsIGVsc2Ugb3B0aW9ucy5yZXBvc2l0b3J5X3B1
YmxpY191cmwKKyAgICAgICAgc2VsZi5yZXBvc2l0b3J5X3B1YmxpY190cmVlX3VybCA9IHNlbGYu
cmVwb3NpdG9yeV9wdWJsaWNfdXJsWzotNF0gKyAiL3RyZWUvIgorCisgICAgICAgIGlmIG5vdCBz
ZWxmLnJlcG9zaXRvcnlfZGlyZWN0b3J5OgorICAgICAgICAgICAgd2Via2l0X2ZpbmRlciA9IFdl
YktpdEZpbmRlcihzZWxmLl9maWxlc3lzdGVtKQorICAgICAgICAgICAgc2VsZi5yZXBvc2l0b3J5
X2RpcmVjdG9yeSA9IHdlYmtpdF9maW5kZXIucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJLaXRC
dWlsZCcsICd3M2MtdGVzdHMnLCAnd2ViLXBsYXRmb3JtLXRlc3RzJykKKworICAgICAgICBzZWxm
LmdpdCA9IHNlbGYuX2luaXRfcmVwb3NpdG9yeSgiaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMuZ2l0Iiwgc2VsZi5yZXBvc2l0b3J5X2RpcmVjdG9yeSkKKyAgICAgICAg
c2VsZi5jbGVhbigpCisKKyAgICBkZWYgX2luaXRfcmVwb3NpdG9yeShzZWxmLCB1cmwsIHJlcG9z
aXRvcnlfZGlyZWN0b3J5KToKKyAgICAgICAgZ2l0ID0gTm9uZQorICAgICAgICBpZiBub3Qgc2Vs
Zi5fZmlsZXN5c3RlbS5leGlzdHMocmVwb3NpdG9yeV9kaXJlY3RvcnkpOgorICAgICAgICAgICAg
X2xvZy5pbmZvKCdDbG9uaW5nICVzIGludG8gJXMuLi4nICUgKHVybCwgcmVwb3NpdG9yeV9kaXJl
Y3RvcnkpKQorICAgICAgICAgICAgR2l0LmNsb25lKHVybCwgcmVwb3NpdG9yeV9kaXJlY3Rvcnks
IHNlbGYuX2hvc3QuZXhlY3V0aXZlKQorICAgICAgICBnaXQgPSBHaXQocmVwb3NpdG9yeV9kaXJl
Y3RvcnksIE5vbmUsIGV4ZWN1dGl2ZT1zZWxmLl9ob3N0LmV4ZWN1dGl2ZSwgZmlsZXN5c3RlbT1z
ZWxmLl9maWxlc3lzdGVtKQorICAgICAgICBfbG9nLmluZm8oJ0ZldGNoaW5nIHdlYi1wbGF0Zm9y
bS10ZXN0cyByZXBvc2l0b3J5JykKKyAgICAgICAgZ2l0LmZldGNoKCkKKyAgICAgICAgcmV0dXJu
IGdpdAorCisgICAgZGVmIGRvd25sb2FkX2FuZF9jb21taXRfcGF0Y2goc2VsZik6CisgICAgICAg
IGlmIHNlbGYub3B0aW9ucy5naXRfY29tbWl0OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKwor
ICAgICAgICBwYXRjaE9wdGlvbnMgPSBbIi0tbm8tdXBkYXRlIiwgIi0tbm8tY2xlYW4iLCAiLS1s
b2NhbC1jb21taXQiXQorICAgICAgICBpZiBzZWxmLm9wdGlvbnMuYXR0YWNobWVudF9pZDoKKyAg
ICAgICAgICAgIHBhdGNoT3B0aW9ucy5pbnNlcnQoImFwcGx5LWF0dGFjaG1lbnQiKQorICAgICAg
ICAgICAgcGF0Y2hPcHRpb25zLmFwcGVuZChzZWxmLm9wdGlvbnMuYXR0YWNobWVudF9pZCkKKyAg
ICAgICAgZWxpZiBzZWxmLm9wdGlvbnMuYnVnX2lkOgorICAgICAgICAgICAgcGF0Y2hPcHRpb25z
Lmluc2VydCgiYXBwbHktZnJvbS1idWciKQorICAgICAgICAgICAgcGF0Y2hPcHRpb25zLmFwcGVu
ZChzZWxmLm9wdGlvbnMuYnVnX2lkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2Ug
IkVycm9yOiBubyBjb21taXQsIGJ1ZyBpZCBvciBhdHRhY2htZW50IGlkIHByb3ZpZGVkIgorICAg
ICAgICByYWlzZSAiRXJyb3I6IG5vdCB5ZXQgaW1wbGVtZW50ZWQiCisgICAgICAgICMgd2ViS2l0
UGF0Y2ggPSBXZWJLaXRQYXRjaChzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fZmlsZXN5c3Rl
bS5hYnNwYXRoKF9fZmlsZV9fKSwgIi4uIiwgIi4uIikpCisgICAgICAgICMob3B0aW9ucywgYXJn
cykgPSB3ZWJLaXRQYXRjaC5wYXJzZV9hcmdzKHBhdGNoT3B0aW9ucykKKyAgICAgICAgI3JldHVy
biB3ZWJLaXRQYXRjaC5jaGVja19hcmd1bWVudHNfYW5kX2V4ZWN1dGUob3B0aW9ucywgYXJncykK
KworICAgIGRlZiBjbGVhbihzZWxmKToKKyAgICAgICAgX2xvZy5pbmZvKCdDbGVhbmluZyB3ZWIt
cGxhdGZvcm0tdGVzdHMgbWFzdGVyIGJyYW5jaCcpCisgICAgICAgIHNlbGYuZ2l0LmNoZWNrb3V0
KCdtYXN0ZXInKQorICAgICAgICBzZWxmLmdpdC5yZXNldF9oYXJkKCdvcmlnaW4vbWFzdGVyJykK
KyAgICAgICAgaWYgbm90IHNlbGYub3B0aW9ucy5naXRfY29tbWl0OgorICAgICAgICAgICAgc2Vs
Zi53ZWJLaXRHaXQucmVzZXRfaGFyZCgnSEVBRH4xJykKKworICAgIGRlZiBjcmVhdGVfYnJhbmNo
X3dpdGhfcGF0Y2goc2VsZiwgcGF0Y2gpOgorICAgICAgICBfbG9nLmluZm8oJ0FwcGx5aW5nIHBh
dGNoIHRvIHdlYi1wbGF0Zm9ybS10ZXN0cyBicmFuY2ggJyArIHNlbGYuYnJhbmNoX25hbWUpCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZ2l0LmNoZWNrb3V0X25ld19icmFuY2goc2Vs
Zi5icmFuY2hfbmFtZSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAg
ICAgX2xvZy53YXJuaW5nKGUpCisgICAgICAgICAgICBfbG9nLmluZm8oIlJldHJ5aW5nIHRvIGNy
ZWF0ZSB0aGUgYnJhbmNoIikKKyAgICAgICAgICAgIHNlbGYuZ2l0LmRlbGV0ZV9icmFuY2goc2Vs
Zi5icmFuY2hfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuZ2l0LmNoZWNrb3V0X25ld19icmFuY2go
c2VsZi5icmFuY2hfbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5naXQuYW0o
W3BhdGNoLCAnLS1leGNsdWRlJywgJyotZXhwZWN0ZWQudHh0J10pCisgICAgICAgIGV4Y2VwdCBF
eGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIF9sb2cud2FybmluZyhlKQorICAgICAgICAgICAg
c2VsZi5naXQuYW0oWyctLWFib3J0J10pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgc2VsZi5naXQuY29tbWl0KFsnLS1hbWVuZCcsICctbScsIHNlbGYuY29tbWl0X3RpdGxlXSkK
KyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBwdXNoX3RvX3B1YmxpY19yZXBvc2l0b3J5
KHNlbGYpOgorICAgICAgICBzZWxmLmNyZWF0ZV91cGxvYWRfcmVtb3RlX2lmX25lZWRlZCgpCisg
ICAgICAgIF9sb2cuaW5mbygnUHVzaGluZyBicmFuY2ggJyArIHNlbGYuYnJhbmNoX25hbWUgKyAi
IHRvICIgKyBzZWxmLnJlcG9zaXRvcnlfcHVibGljX3RyZWVfdXJsICsgc2VsZi5icmFuY2hfbmFt
ZSkKKyAgICAgICAgc2VsZi5naXQucHVzaChbc2VsZi5yZXBvc2l0b3J5X3JlbW90ZSwgc2VsZi5i
cmFuY2hfbmFtZSwgJy1mJ10pCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgbWFrZV9w
dWxsX3JlcXVlc3Qoc2VsZik6CisgICAgICAgIF9sb2cuaW5mbygnTWFraW5nIHB1bGwgcmVxdWVz
dCcpCisgICAgICAgIGRlc2NyaXB0aW9uID0gc2VsZi5idWd6aWxsYS5mZXRjaF9idWdfZGljdGlv
bmFyeShzZWxmLmJ1Z19pZClbInRpdGxlIl0KKyAgICAgICAgcmVzcG9uc2UgPSBXUFRHaXRIdWIo
c2VsZi5faG9zdCwgc2VsZi51c2VybmFtZSwgc2VsZi50b2tlbikuY3JlYXRlX3ByKHNlbGYucmVw
b3NpdG9yeV9yZW1vdGUgKyAnOicgKyBzZWxmLmJyYW5jaF9uYW1lLCBzZWxmLmNvbW1pdF90aXRs
ZSwgZGVzY3JpcHRpb24pCisgICAgICAgIGh0bWxfdXJsID0gcmVzcG9uc2VbImh0bWxfdXJsIl0K
KyAgICAgICAgaWYgc2VsZi5idWdfaWQ6CisgICAgICAgICAgICBzZWxmLmJ1Z3ppbGxhLnBvc3Rf
Y29tbWVudF90b19idWcoc2VsZi5idWdfaWQsICJTdWJtaXR0ZWQgd2ViLXBsYXRmb3JtLXRlc3Rz
IHB1bGwgcmVxdWVzdDogIiArIGh0bWxfdXJsKQorCisgICAgZGVmIGRlbGV0ZV9sb2NhbF9icmFu
Y2goc2VsZik6CisgICAgICAgIF9sb2cuaW5mbygnQ2xlYW5pbmcgYnJhbmNoJykKKyAgICAgICAg
c2VsZi5naXQuY2hlY2tvdXQoJ21hc3RlcicpCisgICAgICAgIHNlbGYuZ2l0LmRlbGV0ZV9icmFu
Y2goc2VsZi5icmFuY2hfbmFtZSkKKworICAgIGRlZiBjcmVhdGVfZ2l0X3BhdGNoKHNlbGYpOgor
ICAgICAgICBwYXRjaF9maWxlID0gJy4vcGF0Y2gudGVtcC4nICsgc3RyKHRpbWUuY2xvY2soKSkK
KyAgICAgICAgZ2l0X2NvbW1pdCA9ICItMSIgaWYgbm90IHNlbGYub3B0aW9ucy5naXRfY29tbWl0
IGVsc2Ugc2VsZi5vcHRpb25zLmdpdF9jb21taXQgKyAifjEuLiIgKyBzZWxmLm9wdGlvbnMuZ2l0
X2NvbW1pdAorICAgICAgICBwYXRjaF9kYXRhID0gc2VsZi53ZWJLaXRHaXQuZm9ybWF0X3BhdGNo
KFtnaXRfY29tbWl0LCAnTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cycsICctLXN0ZG91dCddKQorCisgICAgICAgIGlmIG5vdCBwYXRjaF9kYXRhOgorICAgICAgICAg
ICAgX2xvZy5pbmZvKCdObyBjaGFuZ2VzIHRvIHVwc3RyZWFtJykKKyAgICAgICAgICAgIHJldHVy
biAnJworICAgICAgICBwYXRjaF9kYXRhID0gcGF0Y2hfZGF0YS5yZXBsYWNlKCdMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzLycsICcnKQorICAgICAgICBzZWxmLl9m
aWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShwYXRjaF9maWxlLCBwYXRjaF9kYXRhKQorICAgICAg
ICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5hYnNwYXRoKHBhdGNoX2ZpbGUpCisKKyAgICBkZWYg
Y3JlYXRlX3VwbG9hZF9yZW1vdGVfaWZfbmVlZGVkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJl
cG9zaXRvcnlfcmVtb3RlIGluIHNlbGYuZ2l0LnJlbW90ZShbXSk6CisgICAgICAgICAgICBfbG9n
LmluZm8oIldpbGwgcHVzaCBicmFuY2ggdG8gIiArIHNlbGYuZ2l0LnJlbW90ZShbImdldC11cmwi
LCBzZWxmLnJlcG9zaXRvcnlfcmVtb3RlXSkuc3RyaXAoKSkKKyAgICAgICAgICAgIHJldHVybgor
ICAgICAgICBfbG9nLmluZm8oIldpbGwgcHVzaCBicmFuY2ggdG8gIiArIHNlbGYucmVwb3NpdG9y
eV9vcmlnaW5fdXJsKQorICAgICAgICBzZWxmLmdpdC5yZW1vdGUoWyJhZGQiLCBzZWxmLnJlcG9z
aXRvcnlfcmVtb3RlLCBzZWxmLnJlcG9zaXRvcnlfb3JpZ2luX3VybF0pCisKKworZGVmIHBhcnNl
X2FyZ3MoYXJncyk6CisgICAgZGVzY3JpcHRpb24gPSAiIiJTY3JpcHQgdG8gZ2VuZXJhdGUgYSBw
dWxsIHJlcXVlc3QgdG8gVzNDIHdlYi1wbGF0Zm9ybS10ZXN0cyByZXBvc2l0b3J5CisgICAgVG9v
bHMvU2NyaXB0cy9tYWtlLXczYy10ZXN0cy1wciAtZyBIRUFEIHdpbGw6CisgICAgLSBHYXRoZXIg
V2ViS2l0IGJ1ZyBpZCBYWVogYnVnIGFuZCBjaGFuZ2VzIHRvIGFwcGx5IHRvIHdlYi1wbGF0Zm9y
bS10ZXN0cyByZXBvc2l0b3J5CisgICAgLSBDcmVhdGUgYSByZW1vdGUgYnJhbmNoIG5hbWVkIHdl
YmtpdC1YWVogb24gaHR0cHM6Ly9naXRodWIuY29tL1VTRVJOQU1FL3dlYi1wbGF0Zm9ybS10ZXN0
cy5naXQgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aGUgbG9jYWxseSBhcHBsaWVkIHBhdGNoLgorICAg
IC0gICAgVVNFUk5BTUUgbWF5IGJlIHNldCB1c2luZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUg
R0lUSFVCX1dQVF9VU0VSCisgICAgLSAgICBHaXRodWIgY3JlZGVudGlhbCBtYXkgYmUgc2V0IHVz
aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBHSVRIVUJfV1BUX0FVVEggKFBsZWFzZSBwcm92
aWRlIGEgdmFsaWQgR2l0SHViICdQZXJzb25hbCBhY2Nlc3MgdG9rZW4nIHdpdGggJ3JlcG8nIGFz
IHNjb3BlKQorICAgIC0gTWFrZSB0aGUgcmVsYXRlZCBwdWxsIHJlcXVlc3Qgb24gaHR0cHM6Ly9n
aXRodWIuY29tL3czYy93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0IHJlcG9zaXRvcnkuCisgICAgLSBD
bGVhbiB0aGUgbG9jYWwgR2l0IHJlcG9zaXRvcnkKKyAgICBOb3RlczoKKyAgICAtIEl0IGlzIHNh
ZmVyIHRvIHByb3ZpZGUgYSBidWcgaWQgdXNpbmcgLWIgb3B0aW9uIChidWcgaWQgZnJvbSBhIGdp
dCBjb21taXQgaXMgbm90IGFsd2F5cyB3b3JraW5nKS4KKyAgICAtIEFzIGEgZHJ5IHJ1biwgb25l
IGNhbiBzdGFydCBieSBydW5uaW5nIHRoZSBzY3JpcHQgd2l0aG91dCAtYy4gVGhpcyB3aWxsIG9u
bHkgY3JlYXRlIHRoZSBicmFuY2ggb24gdGhlIHVzZXIgcHVibGljIEdpdEh1YiByZXBvc2l0b3J5
LgorICAgIEZJWE1FOgorICAgIC0gQWRkIGEgbGFiZWwgb24gZ2l0aHViIGlzc3VlcworICAgIC0g
VGhlIHNjcmlwdCBpcyBub3QgeWV0IGFibGUgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIHB1bGwgcmVx
dWVzdAorICAgIC0gQWRkIHRoZSBnaXRodWIgaXNzdWUgVVJMIHRvICdTZWUgYWxzbycKKyAgICAt
IE5lZWQgYSB3YXkgdG8gbW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHB1bCByZXF1ZXN0IHNv
IHRoYXQgc3RhdHVzIG9mIGFsbCBwZW5kaW5nIHB1bGwgcmVxdWVzdHMgY2FuIGJlIGRvbmUgYXQg
aW1wb3J0IHRpbWUuCisgICAgIiIiCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJz
ZXIocHJvZz0nY3JlYXRlLXczYy1wdWxsLXJlcXVlc3QgLi4uJywgZGVzY3JpcHRpb249ZGVzY3Jp
cHRpb24sIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0
ZXIpCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZycsICctLWdpdC1jb21taXQnLCBkZXN0
PSdnaXRfY29tbWl0JywgZGVmYXVsdD1Ob25lLCBoZWxwPSdHaXQgY29tbWl0IHRvIGFwcGx5JykK
KyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJ1ZycsIGRlc3Q9J2J1Z19pZCcsIGRl
ZmF1bHQ9Tm9uZSwgaGVscD0nQnVnIElEIHRvIHNlYXJjaCBmb3IgcGF0Y2gnKQorICAgIHBhcnNl
ci5hZGRfYXJndW1lbnQoJy1hJywgJy0tYXR0YWNobWVudCcsIGRlc3Q9J2F0dGFjaG1lbnRfaWQn
LCBkZWZhdWx0PU5vbmUsIGhlbHA9J0F0dGFjaG1lbnQgSUQgdG8gc2VhcmNoIGZvciBwYXRjaCcp
CisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW4nLCAnLS1uYW1lJywgZGVzdD0ndXNlcm5hbWUn
LCBkZWZhdWx0PU5vbmUsIGhlbHA9J2dpdGh1YiB1c2VyIG5hbWUgaWYgR0hfVVNFUiBpcyBub3Qg
ZGVmaW5lZCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10b2tlbicsIGRlc3Q9
J3Rva2VuJywgZGVmYXVsdD1Ob25lLCBoZWxwPSdnaXRodWIgdG9rZW4sIG5lZWRlZCBmb3IgY3Jl
YXRpbmcgcHVsbCByZXF1ZXN0cyBvbmx5IGlmIEdJVEhVQl9XUFRfQVVUSCBpcyBub3QgZGVmaW5l
ZCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXUnLCAnLS11cmwnLCBkZXN0PSdyZXBvc2l0
b3J5X3B1YmxpY191cmwnLCBkZWZhdWx0PU5vbmUsIGhlbHA9J1B1YmxpYyByZXBvc2l0b3J5IHVy
bCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXInLCAnLS1yZW1vdGUnLCBkZXN0PSdyZXBv
c2l0b3J5X3JlbW90ZScsIGRlZmF1bHQ9Tm9uZSwgaGVscD0ncmVwb3NpdG9yeSBvcmlnaW4gdG8g
dXNlIHRvIHB1c2gnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tcmVwb3NpdG9y
eScsIGRlc3Q9J3JlcG9zaXRvcnlfZGlyZWN0b3J5JywgZGVmYXVsdD1Ob25lLCBoZWxwPSdyZXBv
c2l0b3J5IGRpcmVjdG9yeScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWMnLCAnLS1jcmVh
dGUtcHInLCBkZXN0PSdjcmVhdGVfcHVsbF9yZXF1ZXN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywg
ZGVmYXVsdD1GYWxzZSwgaGVscD0nY3JlYXRlIHB1bGwgcmVxdWVzdCB0byB3M2Mgd2ViLXBsYXRm
b3JtLXRlc3RzJykKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJn
cyhhcmdzKQorCisgICAgcmV0dXJuIG9wdGlvbnMKKworCitkZWYgY29uZmlndXJlX2xvZ2dpbmco
KToKKyAgICBjbGFzcyBMb2dIYW5kbGVyKGxvZ2dpbmcuU3RyZWFtSGFuZGxlcik6CisKKyAgICAg
ICAgZGVmIGZvcm1hdChzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgaWYgcmVjb3JkLmxldmVs
bm8gPiBsb2dnaW5nLklORk86CisgICAgICAgICAgICAgICAgcmV0dXJuICIlczogJXMiICUgKHJl
Y29yZC5sZXZlbG5hbWUsIHJlY29yZC5nZXRNZXNzYWdlKCkpCisgICAgICAgICAgICByZXR1cm4g
cmVjb3JkLmdldE1lc3NhZ2UoKQorCisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQor
ICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgaGFuZGxlciA9IExvZ0hhbmRs
ZXIoKQorICAgIGhhbmRsZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIGxvZ2dlci5hZGRI
YW5kbGVyKGhhbmRsZXIpCisgICAgcmV0dXJuIGhhbmRsZXIKKworCitkZWYgbWFpbihfYXJndiwg
X3N0ZG91dCwgX3N0ZGVycik6CisgICAgb3B0aW9ucyA9IHBhcnNlX2FyZ3MoX2FyZ3YpCisKKyAg
ICBjb25maWd1cmVfbG9nZ2luZygpCisKKyAgICBpZiBub3Qgb3B0aW9ucy5idWdfaWQgYW5kIG5v
dCBvcHRpb25zLmF0dGFjaG1lbnRfaWQgYW5kIG5vdCBvcHRpb25zLmdpdF9jb21taXQ6CisgICAg
ICAgIF9sb2cuZXJyb3IoIlBsZWFzZSBwcm92aWRlIGVpdGhlciBhIGJ1ZyBJRCwgYW4gYXR0YWNo
bWVudCBJRCBvciBhIGxvY2FsIGdpdCBjb21taXQgdG8gZW5hYmxlIGdldHRpbmcgdGhlIGNoYW5n
ZXMgdG8gZXhwb3J0IikKKyAgICAgICAgcmV0dXJuCisKKyAgICB0ZXN0X3VwbG9hZGVyID0gVGVz
dFVwbG9hZGVyKEhvc3QoKSwgb3B0aW9ucykKKworICAgIGlmIG5vdCB0ZXN0X3VwbG9hZGVyLmRv
d25sb2FkX2FuZF9jb21taXRfcGF0Y2goKToKKyAgICAgICAgX2xvZy5lcnJvcigiVW5hYmxlIHRv
IGRvd25sb2FkIGFuZCBhcHBseSB0aGUgcGF0Y2ggdG8gZXhwb3J0IikKKyAgICAgICAgcmV0dXJu
CisKKyAgICBnaXRfcGF0Y2hfZmlsZSA9IHRlc3RfdXBsb2FkZXIuY3JlYXRlX2dpdF9wYXRjaCgp
CisKKyAgICBpZiBub3QgZ2l0X3BhdGNoX2ZpbGU6CisgICAgICAgIF9sb2cuZXJyb3IoIlVuYWJs
ZSB0byBhcHBseSB0aGUgcGF0Y2ggdG8gd2ViLXBsYXRmb3JtLXRlc3RzIHJlcG9zaXRvcnkiKQor
ICAgICAgICByZXR1cm4KKworICAgIGlmIG5vdCB0ZXN0X3VwbG9hZGVyLmNyZWF0ZV9icmFuY2hf
d2l0aF9wYXRjaChnaXRfcGF0Y2hfZmlsZSk6CisgICAgICAgIF9sb2cuZXJyb3IoIkNhbm5vdCBj
cmVhdGUgYnJhbmNoIGZyb20gdGhlIHBhdGNoIikKKyAgICAgICAgdGVzdF91cGxvYWRlci5kZWxl
dGVfbG9jYWxfYnJhbmNoKCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBnaXRfcGF0Y2hfZmls
ZToKKyAgICAgICAgdGVzdF91cGxvYWRlci5fZmlsZXN5c3RlbS5yZW1vdmUoZ2l0X3BhdGNoX2Zp
bGUpCisKKyAgICB0cnk6CisgICAgICAgIGlmIHRlc3RfdXBsb2FkZXIucHVzaF90b19wdWJsaWNf
cmVwb3NpdG9yeSgpOgorICAgICAgICAgICAgaWYgb3B0aW9ucy5jcmVhdGVfcHVsbF9yZXF1ZXN0
OgorICAgICAgICAgICAgICAgIHRlc3RfdXBsb2FkZXIubWFrZV9wdWxsX3JlcXVlc3QoKQorICAg
IGZpbmFsbHk6CisgICAgICAgIHRlc3RfdXBsb2FkZXIuZGVsZXRlX2xvY2FsX2JyYW5jaCgpCisg
ICAgICAgIHRlc3RfdXBsb2FkZXIuY2xlYW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93M2Mvd3B0X2dpdGh1Yi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dw
dF9naXRodWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmNmMzcyNDYzY2ZlYWU1NTFkMjVlZThmYWU1YzYwZWMx
ZDJjY2I3OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dw
dF9naXRodWIucHkKQEAgLTAsMCArMSwxNDAgQEAKKyMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9t
aXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworaW1wb3J0IGJhc2U2NAoraW1wb3J0IGpzb24KK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgdXJsbGliMgorCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBu
YW1lZHR1cGxlCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorQVBJX0JB
U0UgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbScKK0VYUE9SVF9MQUJFTCA9ICd3ZWJraXQtZXhw
b3J0JworCisKK2NsYXNzIFdQVEdpdEh1YihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGhvc3QsIHVzZXIsIHRva2VuKToKKyAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAorICAgICAg
ICBzZWxmLnVzZXIgPSB1c2VyCisgICAgICAgIHNlbGYudG9rZW4gPSB0b2tlbgorICAgICAgICBh
c3NlcnQgc2VsZi51c2VyIGFuZCBzZWxmLnRva2VuCisKKyAgICBkZWYgYXV0aF90b2tlbihzZWxm
KToKKyAgICAgICAgcmV0dXJuIGJhc2U2NC5iNjRlbmNvZGUoJ3t9Ont9Jy5mb3JtYXQoc2VsZi51
c2VyLCBzZWxmLnRva2VuKSkKKworICAgIGRlZiByZXF1ZXN0KHNlbGYsIHBhdGgsIG1ldGhvZCwg
Ym9keT1Ob25lKToKKyAgICAgICAgYXNzZXJ0IHBhdGguc3RhcnRzd2l0aCgnLycpCisKKyAgICAg
ICAgaWYgYm9keToKKyAgICAgICAgICAgIGJvZHkgPSBqc29uLmR1bXBzKGJvZHkpCisKKyAgICAg
ICAgcmVzcG9uc2UgPSBzZWxmLmhvc3Qud2ViLnJlcXVlc3QoCisgICAgICAgICAgICBtZXRob2Q9
bWV0aG9kLAorICAgICAgICAgICAgdXJsPUFQSV9CQVNFICsgcGF0aCwKKyAgICAgICAgICAgIGRh
dGE9Ym9keSwKKyAgICAgICAgICAgIGhlYWRlcnM9eworICAgICAgICAgICAgICAgICdBY2NlcHQn
OiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uJywKKyAgICAgICAgICAgICAgICAnQXV0
aG9yaXphdGlvbic6ICdCYXNpYyB7fScuZm9ybWF0KHNlbGYuYXV0aF90b2tlbigpKSwKKyAgICAg
ICAgICAgIH0sCisgICAgICAgICkKKworICAgICAgICBzdGF0dXNfY29kZSA9IHJlc3BvbnNlLmdl
dGNvZGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkKHJlc3Bv
bnNlKSwgc3RhdHVzX2NvZGUKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAg
ICByZXR1cm4gTm9uZSwgc3RhdHVzX2NvZGUKKworICAgIGRlZiBjcmVhdGVfcHIoc2VsZiwgcmVt
b3RlX2JyYW5jaF9uYW1lLCBkZXNjX3RpdGxlLCBib2R5KToKKyAgICAgICAgIiIiQ3JlYXRlcyBh
IFBSIG9uIEdpdEh1Yi4KKworICAgICAgICBBUEkgZG9jOiBodHRwczovL2RldmVsb3Blci5naXRo
dWIuY29tL3YzL3B1bGxzLyNjcmVhdGUtYS1wdWxsLXJlcXVlc3QKKworICAgICAgICBSZXR1cm5z
OgorICAgICAgICAgICAgQSByYXcgcmVzcG9uc2Ugb2JqZWN0IGlmIHN1Y2Nlc3NmdWwsIE5vbmUg
aWYgbm90LgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IHJlbW90ZV9icmFuY2hfbmFtZQor
ICAgICAgICBhc3NlcnQgZGVzY190aXRsZQorICAgICAgICBhc3NlcnQgYm9keQorCisgICAgICAg
IHBhdGggPSAnL3JlcG9zL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcHVsbHMnCisgICAgICAgIGJv
ZHkgPSB7CisgICAgICAgICAgICAndGl0bGUnOiBkZXNjX3RpdGxlLAorICAgICAgICAgICAgJ2Jv
ZHknOiBib2R5LAorICAgICAgICAgICAgJ2hlYWQnOiByZW1vdGVfYnJhbmNoX25hbWUsCisgICAg
ICAgICAgICAnYmFzZSc6ICdtYXN0ZXInLAorICAgICAgICB9CisgICAgICAgIGRhdGEsIHN0YXR1
c19jb2RlID0gc2VsZi5yZXF1ZXN0KHBhdGgsIG1ldGhvZD0nUE9TVCcsIGJvZHk9Ym9keSkKKwor
ICAgICAgICBpZiBzdGF0dXNfY29kZSAhPSAyMDE6CisgICAgICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgYWRkX2xhYmVsKHNlbGYsIG51bWJlcik6
CisgICAgICAgIHBhdGggPSAnL3JlcG9zL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaXNzdWVzLyVk
L2xhYmVscycgJSBudW1iZXIKKyAgICAgICAgYm9keSA9IFtFWFBPUlRfTEFCRUxdCisgICAgICAg
IHJldHVybiBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdQT1NUJywgYm9keT1ib2R5KQorCisg
ICAgZGVmIGluX2ZsaWdodF9wdWxsX3JlcXVlc3RzKHNlbGYpOgorICAgICAgICBwYXRoID0gJy9z
ZWFyY2gvaXNzdWVzP3E9cmVwbzp3M2Mvd2ViLXBsYXRmb3JtLXRlc3RzJTIwaXM6b3BlbiUyMHR5
cGU6cHIlMjBsYWJlbDp7fScuZm9ybWF0KEVYUE9SVF9MQUJFTCkKKyAgICAgICAgZGF0YSwgc3Rh
dHVzX2NvZGUgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdHRVQnKQorICAgICAgICBpZiBz
dGF0dXNfY29kZSA9PSAyMDA6CisgICAgICAgICAgICByZXR1cm4gW1B1bGxSZXF1ZXN0KHRpdGxl
PWl0ZW1bJ3RpdGxlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcj1p
dGVtWydudW1iZXInXSkgZm9yIGl0ZW0gaW4gZGF0YVsnaXRlbXMnXV0KKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignTm9uLTIwMCBzdGF0dXMgY29kZSAoJXMpOiAl
cycgJSAoc3RhdHVzX2NvZGUsIGRhdGEpKQorCisgICAgZGVmIGdldF9wcl9icmFuY2goc2VsZiwg
cHJfbnVtYmVyKToKKyAgICAgICAgcGF0aCA9ICcvcmVwb3MvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9wdWxscy97fScuZm9ybWF0KHByX251bWJlcikKKyAgICAgICAgZGF0YSwgc3RhdHVzX2NvZGUg
PSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdHRVQnKQorICAgICAgICBpZiBzdGF0dXNfY29k
ZSA9PSAyMDA6CisgICAgICAgICAgICByZXR1cm4gZGF0YVsnaGVhZCddWydyZWYnXQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdOb24tMjAwIHN0YXR1cyBjb2Rl
ICglcyk6ICVzJyAlIChzdGF0dXNfY29kZSwgZGF0YSkpCisKKyAgICBkZWYgbWVyZ2VfcHVsbF9y
ZXF1ZXN0KHNlbGYsIHB1bGxfcmVxdWVzdF9udW1iZXIpOgorICAgICAgICBwYXRoID0gJy9yZXBv
cy93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3B1bGxzLyVkL21lcmdlJyAlIHB1bGxfcmVxdWVzdF9u
dW1iZXIKKyAgICAgICAgYm9keSA9IHsKKyAgICAgICAgICAgICMgVGhpcyBjdXJyZW50bHkgd2ls
bCBub29wIGJlY2F1c2UgdGhlIGZlYXR1cmUgaXMgaW4gYW4gb3B0LWluIGJldGEuCisgICAgICAg
ICAgICAjIE9uY2UgaXQgbGVhdmVzIGJldGEgdGhpcyB3aWxsIHN0YXJ0IHdvcmtpbmcuCisgICAg
ICAgICAgICAnbWVyZ2VfbWV0aG9kJzogJ3JlYmFzZScsCisgICAgICAgIH0KKworICAgICAgICB0
cnk6CisgICAgICAgICAgICBkYXRhLCBzdGF0dXNfY29kZSA9IHNlbGYucmVxdWVzdChwYXRoLCBt
ZXRob2Q9J1BVVCcsIGJvZHk9Ym9keSkKKyAgICAgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9y
IGFzIGU6CisgICAgICAgICAgICBpZiBlLmNvZGUgPT0gNDA1OgorICAgICAgICAgICAgICAgIHJh
aXNlIE1lcmdlRXJyb3IoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlz
ZQorCisgICAgICAgIGlmIHN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAgICAgIHJhaXNlIEV4
Y2VwdGlvbignUmVjZWl2ZWQgbm9uLTIwMCBzdGF0dXMgY29kZSAoJWQpIHdoaWxlIG1lcmdpbmcg
UFIgIyVkJyAlIChzdGF0dXNfY29kZSwgcHVsbF9yZXF1ZXN0X251bWJlcikpCisKKyAgICAgICAg
cmV0dXJuIGRhdGEKKworICAgIGRlZiBkZWxldGVfcmVtb3RlX2JyYW5jaChzZWxmLCByZW1vdGVf
YnJhbmNoX25hbWUpOgorICAgICAgICAjIFRPRE8oamVmZmNhcnApOiBVbml0IHRlc3QgdGhpcyBt
ZXRob2QKKyAgICAgICAgcGF0aCA9ICcvcmVwb3MvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9naXQv
cmVmcy9oZWFkcy8lcycgJSByZW1vdGVfYnJhbmNoX25hbWUKKyAgICAgICAgZGF0YSwgc3RhdHVz
X2NvZGUgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdERUxFVEUnKQorCisgICAgICAgIGlm
IHN0YXR1c19jb2RlICE9IDIwNDoKKyAgICAgICAgICAgICMgVE9ETyhqZWZmY2FycCk6IFJhaXNl
IG1vcmUgc3BlY2lmaWMgZXhjZXB0aW9uIChjcmVhdGUgTWVyZ2VFcnJvciBjbGFzcz8pCisgICAg
ICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1JlY2VpdmVkIG5vbi0yMDQgc3RhdHVzIGNvZGUgYXR0
ZW1wdGluZyB0byBkZWxldGUgcmVtb3RlIGJyYW5jaDoge30nLmZvcm1hdChzdGF0dXNfY29kZSkp
CisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworCitjbGFzcyBNZXJnZUVycm9yKEV4Y2VwdGlvbik6
CisgICAgIiIiQW4gZXJyb3Igc3BlY2lmaWNhbGx5IGZvciB3aGVuIGEgUFIgY2Fubm90IGJlIG1l
cmdlZC4KKworICAgIFRoaXMgc2hvdWxkIG9ubHkgYmUgdGhyb3duIHdoZW4gR2l0SHViIHJldHVy
bnMgc3RhdHVzIGNvZGUgNDA1LAorICAgIGluZGljYXRpbmcgdGhhdCB0aGUgUFIgY291bGQgbm90
IGJlIG1lcmdlZC4KKyAgICAiIiIKKyAgICBwYXNzCisKK1B1bGxSZXF1ZXN0ID0gbmFtZWR0dXBs
ZSgnUHVsbFJlcXVlc3QnLCBbJ3RpdGxlJywgJ251bWJlciddKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309348</attachid>
            <date>2017-05-07 23:56:25 -0700</date>
            <delta_ts>2017-05-08 08:24:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169462-20170507235624.patch</filename>
            <type>text/plain</type>
            <size>39067</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MzUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWE1NjQ4NjViZjlkZWQwN2EyYzE2ODcxYmE2MjRjMmI0
ODJlMGJmZi4uZmYwMmEzNWRkZjk3ZTAzN2YwZDM2MzcxMGU2NmFhY2E2M2U5ZTg4OCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1
IEBACisyMDE3LTA1LTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgYSBzY3JpcHQgdG8gYXV0b21hdGUgVzNjIHdlYi1wbGF0Zm9ybS10ZXN0cyBwdWxs
IHJlcXVlc3QgY3JlYXRpb25zIGZyb20gV2ViS2l0IGNvbW1pdHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQ2MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBzb21lIGdpdCBoZWxwZXIgcm91
dGluZXMgdXNlZCBieSBXUFQgZXhwb3J0ZXIuCisgICAgICAgIENvcHlpbmcgV1BUIGdpdGh1YiB1
dGlsaXR5IGZpbGVzIGZyb20gQ2hyb21pdW0uCisgICAgICAgIFVwZGF0aW5nIHdlYi5weS93ZWJf
bW9jay5weSB0byBjb3BlIHdpdGggdGhlc2UgbmV3IGZpbGVzLgorCisgICAgICAgIEltcGxlbWVu
dGluZyB0ZXN0IGV4cG9ydGVyIGluIHRlc3RfZXhwb3J0ZXIucHkuCisgICAgICAgIFRoaXMgc2Ny
aXB0IHRha2VzIGEgV2ViS2l0IGNvbW1pdCBhcyBpbnB1dCBhbmQgd2lsbCBjcmVhdGUgYSBXUFQg
Y29tbWl0IGluIGEgbG9jYWwgV1BUIGNsb25lLgorICAgICAgICBJdCB3aWxsIHRoZW4gcHVzaCB0
aGUgY29tbWl0IHRvIGEgcHVibGljIEdpdEh1YiByZXBvc2l0b3J5IGFuZCB3aWxsIG1ha2UgYSBw
dWxsIHJlcXVlc3QgdG8gdGhlIG9mZmljaWFsIFdQVCBHaXRIdWIgcmVwb3NpdG9yeS4KKyAgICAg
ICAgQSBjb21tZW50IGlzIGFkZGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIGJ1Z3ppbGxhLgorCisg
ICAgICAgICogU2NyaXB0cy9leHBvcnQtdzNjLXRlc3QtY2hhbmdlczogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weToKKyAgICAgICAg
KEdpdC5yZXNldF9oYXJkKToKKyAgICAgICAgKEdpdCk6CisgICAgICAgIChHaXQuYW0pOgorICAg
ICAgICAoR2l0LmNvbW1pdCk6CisgICAgICAgIChHaXQuZm9ybWF0X3BhdGNoKToKKyAgICAgICAg
KEdpdC5yZXF1ZXN0X3B1bGwpOgorICAgICAgICAoR2l0LnJlbW90ZSk6CisgICAgICAgIChHaXQu
cHVzaCk6CisgICAgICAgIChHaXQuY2hlY2tvdXRfbmV3X2JyYW5jaCk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weToKKyAgICAgICAgKFdlYi5yZXF1ZXN0KTog
Q29waWVkIGZyb20gQ2hyb21pdW0uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bmV0L3dlYl9tb2NrLnB5OiBDb3BpZWQgbmVlZGVkIGNvZGUgZnJvbSBDaHJvbWl1bS4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyLnB5OiBBZGRlZC4KKyAgICAg
ICAgKFRlc3RFeHBvcnRlcik6CisgICAgICAgIChUZXN0RXhwb3J0ZXIuX19pbml0X18pOgorICAg
ICAgICAoVGVzdEV4cG9ydGVyLl9pbml0X3JlcG9zaXRvcnkpOgorICAgICAgICAoVGVzdEV4cG9y
dGVyLmRvd25sb2FkX2FuZF9jb21taXRfcGF0Y2gpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLmNs
ZWFuKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfYnJhbmNoX3dpdGhfcGF0Y2gpOgor
ICAgICAgICAoVGVzdEV4cG9ydGVyLnB1c2hfdG9fcHVibGljX3JlcG9zaXRvcnkpOgorICAgICAg
ICAoVGVzdEV4cG9ydGVyLm1ha2VfcHVsbF9yZXF1ZXN0KToKKyAgICAgICAgKFRlc3RFeHBvcnRl
ci5kZWxldGVfbG9jYWxfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfZ2l0
X3BhdGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfdXBsb2FkX3JlbW90ZV9pZl9u
ZWVkZWQpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLmRvX2V4cG9ydCk6CisgICAgICAgIChwYXJz
ZV9hcmdzKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nKToKKyAgICAgICAgKGNvbmZpZ3Vy
ZV9sb2dnaW5nLkxvZ0hhbmRsZXIpOgorICAgICAgICAoY29uZmlndXJlX2xvZ2dpbmcuTG9nSGFu
ZGxlci5mb3JtYXQpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS93M2MvdGVzdF9leHBvcnRlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0RXhw
b3J0ZXJUZXN0KToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhKToKKyAg
ICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLl9faW5pdF9fKToKKyAgICAgICAg
KFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLmZldGNoX2J1Z19kaWN0aW9uYXJ5KToKKyAg
ICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLnBvc3RfY29tbWVudF90b19idWcp
OgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC5Nb2NrR2l0KToKKyAgICAgICAgKFRlc3RFeHBv
cnRlclRlc3QuTW9ja0dpdC5jbG9uZSk6CisgICAgICAgIChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tH
aXQuX19pbml0X18pOgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC5Nb2NrR2l0LmZldGNoKToK
KyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5jaGVja291dCk6CisgICAgICAgIChU
ZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQucmVzZXRfaGFyZCk6CisgICAgICAgIChUZXN0RXhwb3J0
ZXJUZXN0Lk1vY2tHaXQucHVzaCk6CisgICAgICAgIChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQu
Zm9ybWF0X3BhdGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5kZWxldGVf
YnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5jaGVja291dF9uZXdf
YnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5hbSk6CisgICAgICAg
IChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQuY29tbWl0KToKKyAgICAgICAgKFRlc3RFeHBvcnRl
clRlc3QuTW9ja0dpdC5yZW1vdGUpOgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC50ZXN0X2V4
cG9ydCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dpdGh1Yi5weTogQ29w
aWVkIGZyb20gY2hyb21pdW0uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dp
dGh1Yl9tb2NrLnB5OiBDb3BpZWQgZnJvbSBjaHJvbWl1bS4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3czYy93cHRfZ2l0aHViX3VuaXR0ZXN0LnB5OiBDb3BpZWQgZnJvbSBjaHJvbWl1bS4K
KwogMjAxNy0wNS0wNyAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dUS10gQ2Fubm90IHNpZ24gaW4gd2l0aCBuZXcgR29vZ2xlIHNpZ24taW4g
cGFnZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9leHBvcnQtdzNjLXRlc3QtY2hhbmdlcyBi
L1Rvb2xzL1NjcmlwdHMvZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMKbmV3IGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2VjMDFm
MzAyZWM3NzQ3ODM1MTYwZDUwNzUzZWI0OTI0YjVkMmUzYQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMKQEAgLTAsMCArMSwzNSBAQAorIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEFkb2JlIFN5c3RlbXMg
SW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyMgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyMgICAgZGlzY2xhaW1lci4KKyMgMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZworIyAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKKyMgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIg
QU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyMgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAor
IyBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorIyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyMgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisjIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorIyBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRweS53M2MgaW1wb3J0IHRl
c3RfZXhwb3J0ZXIKKworCitzeXMuZXhpdCh0ZXN0X2V4cG9ydGVyLm1haW4oc3lzLmFyZ3ZbMTpd
LCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5CmluZGV4IGNhZDU3YWJmYTE0NWExYmU2MDcyMDJk
ZmY2MTgwMmRhN2RhMmJjYTEuLjQ0MzBkNGE4Mjg3OTMxNDNiZDZmOTFhNWU5ZjRkNzQyMDI5YmMy
YjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3Nj
bS9naXQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2Nt
L2dpdC5weQpAQCAtNTg0LDYgKzU4NCw0MiBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5
KToKICAgICBkZWYgZmV0Y2goc2VsZiwgcmVtb3RlPSdvcmlnaW4nKToKICAgICAgICAgcmV0dXJu
IHNlbGYuX3J1bl9naXQoWydmZXRjaCcsIHJlbW90ZV0pCiAKKyAgICBkZWYgcmVzZXRfaGFyZChz
ZWxmLCByZXZpc2lvbik6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0KFsncmVzZXQnLCAn
LS1oYXJkJywgcmV2aXNpb25dKQorCisgICAgZGVmIGFtKHNlbGYsIG9wdGlvbnMpOgorICAgICAg
ICBhcmdzID0gWydhbSddCisgICAgICAgIGFyZ3MuZXh0ZW5kKG9wdGlvbnMpCisgICAgICAgIHJl
dHVybiBzZWxmLl9ydW5fZ2l0KGFyZ3MpCisKKyAgICBkZWYgY29tbWl0KHNlbGYsIG9wdGlvbnMp
OgorICAgICAgICBhcmdzID0gWydjb21taXQnXQorICAgICAgICBhcmdzLmV4dGVuZChvcHRpb25z
KQorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChhcmdzKQorCisgICAgZGVmIGZvcm1hdF9w
YXRjaChzZWxmLCBvcHRpb25zKToKKyAgICAgICAgYXJncyA9IFsnZm9ybWF0LXBhdGNoJ10KKyAg
ICAgICAgYXJncy5leHRlbmQob3B0aW9ucykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQo
YXJncykKKworICAgIGRlZiByZXF1ZXN0X3B1bGwoc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIGFy
Z3MgPSBbJ3JlcXVlc3QtcHVsbCddCisgICAgICAgIGFyZ3MuZXh0ZW5kKG9wdGlvbnMpCisgICAg
ICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0KGFyZ3MpCisKKyAgICBkZWYgcmVtb3RlKHNlbGYsIG9w
dGlvbnMpOgorICAgICAgICBhcmdzID0gWydyZW1vdGUnXQorICAgICAgICBhcmdzLmV4dGVuZChv
cHRpb25zKQorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChhcmdzKQorCisgICAgZGVmIHB1
c2goc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIGFyZ3MgPSBbJ3B1c2gnXQorICAgICAgICBhcmdz
LmV4dGVuZChvcHRpb25zKQorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChhcmdzKQorCisg
ICAgZGVmIGNoZWNrb3V0X25ld19icmFuY2goc2VsZiwgYnJhbmNoX25hbWUpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fcnVuX2dpdChbJ2NoZWNrb3V0JywgJy1iJywgYnJhbmNoX25hbWVdKQorCiAg
ICAgZGVmIGNoZWNrb3V0KHNlbGYsIHJldmlzaW9uLCBxdWlldD1Ob25lKToKICAgICAgICAgY29t
bWFuZCA9IFsnY2hlY2tvdXQnLCByZXZpc2lvbl0KICAgICAgICAgaWYgcXVpZXQ6CmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvd2ViLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weQppbmRleCBiOGEwNmU1NzQ2OGQwNWYwNGI2
OGYxMjlkY2RlNmFjYTA4Nzc0NzBiLi44NzlhYTA3YzE2YzhkNjYzNzY0MzZmODYxMTQ4ZWVhZjU1
M2YyMzQ4IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvd2Vi
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC93ZWIucHkKQEAgLTM0
LDMgKzM0LDEzIEBAIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5uZXR3b3JrdHJhbnNhY3Rpb24g
aW1wb3J0IE5ldHdvcmtUcmFuc2FjdGlvbgogY2xhc3MgV2ViKG9iamVjdCk6CiAgICAgZGVmIGdl
dF9iaW5hcnkoc2VsZiwgdXJsLCBjb252ZXJ0XzQwNF90b19Ob25lPUZhbHNlKToKICAgICAgICAg
cmV0dXJuIE5ldHdvcmtUcmFuc2FjdGlvbihjb252ZXJ0XzQwNF90b19Ob25lPWNvbnZlcnRfNDA0
X3RvX05vbmUpLnJ1bihsYW1iZGE6IHVybGxpYjIudXJsb3Blbih1cmwpLnJlYWQoKSkKKworICAg
IGRlZiByZXF1ZXN0KHNlbGYsIG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzPU5vbmUpOgorICAg
ICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcih1cmxsaWIyLkhUVFBIYW5kbGVyKQor
ICAgICAgICByZXF1ZXN0ID0gdXJsbGliMi5SZXF1ZXN0KHVybD11cmwsIGRhdGE9ZGF0YSkKKyAg
ICAgICAgcmVxdWVzdC5nZXRfbWV0aG9kID0gbGFtYmRhOiBtZXRob2QKKworICAgICAgICBpZiBo
ZWFkZXJzOgorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gaGVhZGVycy5pdGVtcygpOgor
ICAgICAgICAgICAgICAgIHJlcXVlc3QuYWRkX2hlYWRlcihrZXksIHZhbHVlKQorICAgICAgICBy
ZXR1cm4gb3BlbmVyLm9wZW4ocmVxdWVzdCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL25ldC93ZWJfbW9jay5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL25ldC93ZWJfbW9jay5weQppbmRleCA2ZjA5YmE0NGQwY2VlN2FkYjg4ZDE0YzU3NDEzYzcw
YmNjZjM4YjNlLi40ODRjMTlhYjZmMjQ3OGRmM2Y1YzA2ODRlYzJmYWUxYmQ3MGM5MmY1IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvd2ViX21vY2sucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYl9tb2NrLnB5CkBAIC0yNyw3
ICsyNyw3IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBTdHJpbmdJTwotCitpbXBvcnQgdXJs
bGliMgogCiBjbGFzcyBNb2NrV2ViKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVy
bHM9Tm9uZSk6CkBAIC00MCw2ICs0MCwyOCBAQCBjbGFzcyBNb2NrV2ViKG9iamVjdCk6CiAgICAg
ICAgICAgICByZXR1cm4gc2VsZi51cmxzW3VybF0KICAgICAgICAgcmV0dXJuICJNT0NLIFdlYiBy
ZXN1bHQsIGNvbnZlcnQgNDA0IHRvIE5vbmU9JXMiICUgY29udmVydF80MDRfdG9fTm9uZQogCisg
ICAgZGVmIHJlcXVlc3Qoc2VsZiwgbWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRlcnM9Tm9uZSk6ICAj
IHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKKyAgICAgICAgcmV0dXJuIE1vY2tSZXNw
b25zZShzZWxmLnJlc3BvbnNlcy5wb3AoMCkpCisKK2NsYXNzIE1vY2tSZXNwb25zZShvYmplY3Qp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZXMpOgorICAgICAgICBzZWxmLnN0YXR1c19j
b2RlID0gdmFsdWVzWydzdGF0dXNfY29kZSddCisgICAgICAgIHNlbGYudXJsID0gJycKKyAgICAg
ICAgc2VsZi5ib2R5ID0gdmFsdWVzLmdldCgnYm9keScsICcnKQorCisgICAgICAgIGlmIGludChz
ZWxmLnN0YXR1c19jb2RlKSA+PSA0MDA6CisgICAgICAgICAgICByYWlzZSB1cmxsaWIyLkhUVFBF
cnJvcigKKyAgICAgICAgICAgICAgICB1cmw9c2VsZi51cmwsCisgICAgICAgICAgICAgICAgY29k
ZT1zZWxmLnN0YXR1c19jb2RlLAorICAgICAgICAgICAgICAgIG1zZz0nUmVjZWl2ZWQgZXJyb3Ig
c3RhdHVzIGNvZGU6IHt9Jy5mb3JtYXQoc2VsZi5zdGF0dXNfY29kZSksCisgICAgICAgICAgICAg
ICAgaGRycz17fSwKKyAgICAgICAgICAgICAgICBmcD1Ob25lKQorCisgICAgZGVmIGdldGNvZGUo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnN0YXR1c19jb2RlCisKKyAgICBkZWYgcmVhZChz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYm9keQogCiAjIEZJWE1FOiBDbGFzc2VzIHdoaWNo
IGFyZSB1c2luZyBCcm93c2VyIHByb2JhYmx5IHdhbnQgdG8gdXNlIFdlYiBpbnN0ZWFkLgogY2xh
c3MgTW9ja0Jyb3dzZXIob2JqZWN0KToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdzNjL3Rlc3RfZXhwb3J0ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0
X2V4cG9ydGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwNTY2YjBkYzBhYzgxZDdhOWRjNTJmNzYyMDc0NmE0
MmE5MjgwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90
ZXN0X2V4cG9ydGVyLnB5CkBAIC0wLDAgKzEsMjc4IEBACisKKyMgQ29weXJpZ2h0IChjKSAyMDE3
LCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworIiIiCisgVGhpcyBzY3JpcHQgdXBsb2FkcyBjaGFuZ2VzIG1h
ZGUgdG8gVzNDIHdlYi1wbGF0Zm9ybS10ZXN0cyB0ZXN0cy4KKyIiIgorCitpbXBvcnQgYXJncGFy
c2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0
cHkuY29tbW9uLmNoZWNrb3V0IGltcG9ydCBDaGVja291dAorZnJvbSB3ZWJraXRweS5jb21tb24u
Y2hlY2tvdXQuc2NtLmdpdCBpbXBvcnQgR2l0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGlt
cG9ydCBIb3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0IEJ1Z3pp
bGxhCitmcm9tIHdlYmtpdHB5LmNvbW1vbi53ZWJraXRfZmluZGVyIGltcG9ydCBXZWJLaXRGaW5k
ZXIKK2Zyb20gd2Via2l0cHkudG9vbC5tYWluIGltcG9ydCBXZWJLaXRQYXRjaAorZnJvbSB3ZWJr
aXRweS53M2Mud3B0X2dpdGh1YiBpbXBvcnQgV1BUR2l0SHViCisKK19sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBUZXN0RXhwb3J0ZXIob2JqZWN0KToKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBvcHRpb25zLCBnaXRDbGFzcz1HaXQsIGJ1Z3ppbGxh
Q2xhc3M9QnVnemlsbGEsIFdQVEdpdEh1YkNsYXNzPVdQVEdpdEh1Yik6CisgICAgICAgIHNlbGYu
X2hvc3QgPSBob3N0CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBob3N0LmZpbGVzeXN0ZW0K
KyAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucworCisgICAgICAgIHNlbGYuYnVnemlsbGEg
PSBidWd6aWxsYUNsYXNzKCkKKyAgICAgICAgc2VsZi53ZWJLaXRHaXQgPSBnaXRDbGFzcygnLics
IE5vbmUsIGV4ZWN1dGl2ZT1zZWxmLl9ob3N0LmV4ZWN1dGl2ZSwgZmlsZXN5c3RlbT1zZWxmLl9m
aWxlc3lzdGVtKQorICAgICAgICBzZWxmLmJ1Z19pZCA9IG9wdGlvbnMuYnVnX2lkCisgICAgICAg
IGlmIG5vdCBzZWxmLmJ1Z19pZDoKKyAgICAgICAgICAgIGlmIG9wdGlvbnMuYXR0YWNobWVudF9p
ZDoKKyAgICAgICAgICAgICAgICBzZWxmLmJ1Z19pZCA9IHNlbGYuYnVnemlsbGEuYnVnX2lkX2Zv
cl9hdHRhY2htZW50X2lkKG9wdGlvbnMuYXR0YWNobWVudF9pZCkKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgc2VsZi5idWdfaWQgPSBDaGVja291dChzZWxmLndlYktpdEdpdCku
YnVnX2lkX2Zvcl90aGlzX2NvbW1pdChvcHRpb25zLmdpdF9jb21taXQpCisKKyAgICAgICAgc2Vs
Zi5yZXBvc2l0b3J5X2RpcmVjdG9yeSA9IG9wdGlvbnMucmVwb3NpdG9yeV9kaXJlY3RvcnkKKwor
ICAgICAgICBzZWxmLnVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZQorICAgICAgICBpZiBub3Qg
c2VsZi51c2VybmFtZToKKyAgICAgICAgICAgIHNlbGYudXNlcm5hbWUgPSBvcy5lbnZpcm9uLmdl
dCgnR0lUSFVCX1dQVF9VU0VSJykKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnVzZXJuYW1lOgor
ICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk1pc3NpbmcgR2l0SHViIHVzZXJuYW1l
LiIpCisKKyAgICAgICAgc2VsZi50b2tlbiA9IG9wdGlvbnMudG9rZW4KKyAgICAgICAgaWYgbm90
IHNlbGYudG9rZW46CisgICAgICAgICAgICBzZWxmLnRva2VuID0gb3MuZW52aXJvbi5nZXQoJ0dJ
VEhVQl9XUFRfQVVUSCcpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi50b2tlbjoKKyAgICAgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJNaXNzaW5nIEdpdEh1YiB0b2tlbiIpCisKKyAgICAg
ICAgc2VsZi5naXRIdWIgPSBXUFRHaXRIdWJDbGFzcyhzZWxmLl9ob3N0LCBzZWxmLnVzZXJuYW1l
LCBzZWxmLnRva2VuKQorCisgICAgICAgIHNlbGYuYnJhbmNoX25hbWUgPSAid2Via2l0LSIgKyBz
dHIoc2VsZi5idWdfaWQpCisgICAgICAgIHNlbGYuYnVnemlsbGFfdXJsID0gImh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0iICsgc3RyKHNlbGYuYnVnX2lkKQorICAgICAg
ICBzZWxmLmNvbW1pdF90aXRsZSA9ICdXZWJLaXQgZXhwb3J0IG9mICcgKyBzZWxmLmJ1Z3ppbGxh
X3VybAorCisgICAgICAgIHNlbGYucmVwb3NpdG9yeV9yZW1vdGUgPSBvcHRpb25zLnJlcG9zaXRv
cnlfcmVtb3RlCisgICAgICAgIGlmIG5vdCBzZWxmLnJlcG9zaXRvcnlfcmVtb3RlOgorICAgICAg
ICAgICAgc2VsZi5yZXBvc2l0b3J5X3JlbW90ZSA9IHNlbGYudXNlcm5hbWUKKworICAgICAgICBz
ZWxmLnJlcG9zaXRvcnlfb3JpZ2luX3VybCA9ICJodHRwczovLyIgKyBzZWxmLnVzZXJuYW1lICsg
IkBnaXRodWIuY29tLyIgKyBzZWxmLnVzZXJuYW1lICsgIi93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0
IgorICAgICAgICBzZWxmLnJlcG9zaXRvcnlfcHVibGljX3VybCA9ICJodHRwczovL2dpdGh1Yi5j
b20vIiArIHNlbGYudXNlcm5hbWUgKyAiL3dlYi1wbGF0Zm9ybS10ZXN0cy5naXQiIGlmIG5vdCBv
cHRpb25zLnJlcG9zaXRvcnlfcHVibGljX3VybCBlbHNlIG9wdGlvbnMucmVwb3NpdG9yeV9wdWJs
aWNfdXJsCisgICAgICAgIHNlbGYucmVwb3NpdG9yeV9wdWJsaWNfdHJlZV91cmwgPSBzZWxmLnJl
cG9zaXRvcnlfcHVibGljX3VybFs6LTRdICsgIi90cmVlLyIKKworICAgICAgICBpZiBub3Qgc2Vs
Zi5yZXBvc2l0b3J5X2RpcmVjdG9yeToKKyAgICAgICAgICAgIHdlYmtpdF9maW5kZXIgPSBXZWJL
aXRGaW5kZXIoc2VsZi5fZmlsZXN5c3RlbSkKKyAgICAgICAgICAgIHNlbGYucmVwb3NpdG9yeV9k
aXJlY3RvcnkgPSB3ZWJraXRfZmluZGVyLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnV2ViS2l0QnVp
bGQnLCAndzNjLXRlc3RzJywgJ3dlYi1wbGF0Zm9ybS10ZXN0cycpCisKKyAgICAgICAgc2VsZi5n
aXQgPSBzZWxmLl9pbml0X3JlcG9zaXRvcnkoImh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzLmdpdCIsIHNlbGYucmVwb3NpdG9yeV9kaXJlY3RvcnksIGdpdENsYXNzKQor
ICAgICAgICBzZWxmLmNsZWFuKCkKKworICAgIGRlZiBfaW5pdF9yZXBvc2l0b3J5KHNlbGYsIHVy
bCwgcmVwb3NpdG9yeV9kaXJlY3RvcnksIGdpdENsYXNzKToKKyAgICAgICAgZ2l0ID0gTm9uZQor
ICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocmVwb3NpdG9yeV9kaXJlY3Rv
cnkpOgorICAgICAgICAgICAgX2xvZy5pbmZvKCdDbG9uaW5nICVzIGludG8gJXMuLi4nICUgKHVy
bCwgcmVwb3NpdG9yeV9kaXJlY3RvcnkpKQorICAgICAgICAgICAgZ2l0Q2xhc3MuY2xvbmUodXJs
LCByZXBvc2l0b3J5X2RpcmVjdG9yeSwgc2VsZi5faG9zdC5leGVjdXRpdmUpCisgICAgICAgIGdp
dCA9IGdpdENsYXNzKHJlcG9zaXRvcnlfZGlyZWN0b3J5LCBOb25lLCBleGVjdXRpdmU9c2VsZi5f
aG9zdC5leGVjdXRpdmUsIGZpbGVzeXN0ZW09c2VsZi5fZmlsZXN5c3RlbSkKKyAgICAgICAgX2xv
Zy5pbmZvKCdGZXRjaGluZyB3ZWItcGxhdGZvcm0tdGVzdHMgcmVwb3NpdG9yeScpCisgICAgICAg
IGdpdC5mZXRjaCgpCisgICAgICAgIHJldHVybiBnaXQKKworICAgIGRlZiBkb3dubG9hZF9hbmRf
Y29tbWl0X3BhdGNoKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm9wdGlvbnMuZ2l0X2NvbW1pdDoK
KyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcGF0Y2hPcHRpb25zID0gWyItLW5v
LXVwZGF0ZSIsICItLW5vLWNsZWFuIiwgIi0tbG9jYWwtY29tbWl0Il0KKyAgICAgICAgaWYgc2Vs
Zi5vcHRpb25zLmF0dGFjaG1lbnRfaWQ6CisgICAgICAgICAgICBwYXRjaE9wdGlvbnMuaW5zZXJ0
KCJhcHBseS1hdHRhY2htZW50IikKKyAgICAgICAgICAgIHBhdGNoT3B0aW9ucy5hcHBlbmQoc2Vs
Zi5vcHRpb25zLmF0dGFjaG1lbnRfaWQpCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLmJ1Z19p
ZDoKKyAgICAgICAgICAgIHBhdGNoT3B0aW9ucy5pbnNlcnQoImFwcGx5LWZyb20tYnVnIikKKyAg
ICAgICAgICAgIHBhdGNoT3B0aW9ucy5hcHBlbmQoc2VsZi5vcHRpb25zLmJ1Z19pZCkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk5vIGNvbW1pdCwgYnVnIGlk
IG9yIGF0dGFjaG1lbnQgaWQgcHJvdmlkZWQiKQorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlJl
dHJpZXZhbCBvZiBwYXRjaCBmcm9tIGJ1Z3ppbGxhIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQiKQor
ICAgICAgICAjIHdlYktpdFBhdGNoID0gV2ViS2l0UGF0Y2goc2VsZi5fZmlsZXN5c3RlbS5qb2lu
KHNlbGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChfX2ZpbGVfXyksICIuLiIsICIuLiIpKQorICAgICAg
ICAjKG9wdGlvbnMsIGFyZ3MpID0gd2ViS2l0UGF0Y2gucGFyc2VfYXJncyhwYXRjaE9wdGlvbnMp
CisgICAgICAgICNyZXR1cm4gd2ViS2l0UGF0Y2guY2hlY2tfYXJndW1lbnRzX2FuZF9leGVjdXRl
KG9wdGlvbnMsIGFyZ3MpCisKKyAgICBkZWYgY2xlYW4oc2VsZik6CisgICAgICAgIF9sb2cuaW5m
bygnQ2xlYW5pbmcgd2ViLXBsYXRmb3JtLXRlc3RzIG1hc3RlciBicmFuY2gnKQorICAgICAgICBz
ZWxmLmdpdC5jaGVja291dCgnbWFzdGVyJykKKyAgICAgICAgc2VsZi5naXQucmVzZXRfaGFyZCgn
b3JpZ2luL21hc3RlcicpCisgICAgICAgIGlmIG5vdCBzZWxmLm9wdGlvbnMuZ2l0X2NvbW1pdDoK
KyAgICAgICAgICAgIHNlbGYud2ViS2l0R2l0LnJlc2V0X2hhcmQoJ0hFQUR+MScpCisKKyAgICBk
ZWYgY3JlYXRlX2JyYW5jaF93aXRoX3BhdGNoKHNlbGYsIHBhdGNoKToKKyAgICAgICAgX2xvZy5p
bmZvKCdBcHBseWluZyBwYXRjaCB0byB3ZWItcGxhdGZvcm0tdGVzdHMgYnJhbmNoICcgKyBzZWxm
LmJyYW5jaF9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmdpdC5jaGVja291
dF9uZXdfYnJhbmNoKHNlbGYuYnJhbmNoX25hbWUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24g
YXMgZToKKyAgICAgICAgICAgIF9sb2cud2FybmluZyhlKQorICAgICAgICAgICAgX2xvZy5pbmZv
KCJSZXRyeWluZyB0byBjcmVhdGUgdGhlIGJyYW5jaCIpCisgICAgICAgICAgICBzZWxmLmdpdC5k
ZWxldGVfYnJhbmNoKHNlbGYuYnJhbmNoX25hbWUpCisgICAgICAgICAgICBzZWxmLmdpdC5jaGVj
a291dF9uZXdfYnJhbmNoKHNlbGYuYnJhbmNoX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHNlbGYuZ2l0LmFtKFtwYXRjaCwgJy0tZXhjbHVkZScsICcqLWV4cGVjdGVkLnR4dCddKQor
ICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBfbG9nLndhcm5pbmco
ZSkKKyAgICAgICAgICAgIHNlbGYuZ2l0LmFtKFsnLS1hYm9ydCddKQorICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgICAgIHNlbGYuZ2l0LmNvbW1pdChbJy0tYW1lbmQnLCAnLW0nLCAnIicg
KyBzZWxmLmNvbW1pdF90aXRsZSArICciJ10pCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBk
ZWYgcHVzaF90b19wdWJsaWNfcmVwb3NpdG9yeShzZWxmKToKKyAgICAgICAgc2VsZi5jcmVhdGVf
dXBsb2FkX3JlbW90ZV9pZl9uZWVkZWQoKQorICAgICAgICBfbG9nLmluZm8oJ1B1c2hpbmcgYnJh
bmNoICcgKyBzZWxmLmJyYW5jaF9uYW1lICsgIiB0byAiICsgc2VsZi5yZXBvc2l0b3J5X3B1Ymxp
Y190cmVlX3VybCArIHNlbGYuYnJhbmNoX25hbWUpCisgICAgICAgIHNlbGYuZ2l0LnB1c2goW3Nl
bGYucmVwb3NpdG9yeV9yZW1vdGUsIHNlbGYuYnJhbmNoX25hbWUsICctZiddKQorICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgZGVmIG1ha2VfcHVsbF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICBf
bG9nLmluZm8oJ01ha2luZyBwdWxsIHJlcXVlc3QnKQorICAgICAgICBkZXNjcmlwdGlvbiA9IHNl
bGYuYnVnemlsbGEuZmV0Y2hfYnVnX2RpY3Rpb25hcnkoc2VsZi5idWdfaWQpWyJ0aXRsZSJdCisg
ICAgICAgIHJlc3BvbnNlID0gc2VsZi5naXRIdWIuY3JlYXRlX3ByKHNlbGYucmVwb3NpdG9yeV9y
ZW1vdGUgKyAnOicgKyBzZWxmLmJyYW5jaF9uYW1lLCBzZWxmLmNvbW1pdF90aXRsZSwgZGVzY3Jp
cHRpb24pCisgICAgICAgIGh0bWxfdXJsID0gcmVzcG9uc2VbImh0bWxfdXJsIl0KKyAgICAgICAg
aWYgc2VsZi5idWdfaWQ6CisgICAgICAgICAgICBzZWxmLmJ1Z3ppbGxhLnBvc3RfY29tbWVudF90
b19idWcoc2VsZi5idWdfaWQsICJTdWJtaXR0ZWQgd2ViLXBsYXRmb3JtLXRlc3RzIHB1bGwgcmVx
dWVzdDogIiArIGh0bWxfdXJsKQorCisgICAgZGVmIGRlbGV0ZV9sb2NhbF9icmFuY2goc2VsZik6
CisgICAgICAgIF9sb2cuaW5mbygnQ2xlYW5pbmcgYnJhbmNoJykKKyAgICAgICAgc2VsZi5naXQu
Y2hlY2tvdXQoJ21hc3RlcicpCisgICAgICAgIHNlbGYuZ2l0LmRlbGV0ZV9icmFuY2goc2VsZi5i
cmFuY2hfbmFtZSkKKworICAgIGRlZiBjcmVhdGVfZ2l0X3BhdGNoKHNlbGYpOgorICAgICAgICBw
YXRjaF9maWxlID0gJy4vcGF0Y2gudGVtcC4nICsgc3RyKHRpbWUuY2xvY2soKSkKKyAgICAgICAg
Z2l0X2NvbW1pdCA9ICItMSIgaWYgbm90IHNlbGYub3B0aW9ucy5naXRfY29tbWl0IGVsc2Ugc2Vs
Zi5vcHRpb25zLmdpdF9jb21taXQgKyAifjEuLiIgKyBzZWxmLm9wdGlvbnMuZ2l0X2NvbW1pdAor
ICAgICAgICBwYXRjaF9kYXRhID0gc2VsZi53ZWJLaXRHaXQuZm9ybWF0X3BhdGNoKFtnaXRfY29t
bWl0LCAnTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cycsICctLXN0
ZG91dCddKQorCisgICAgICAgIGlmIG5vdCBwYXRjaF9kYXRhOgorICAgICAgICAgICAgX2xvZy5p
bmZvKCdObyBjaGFuZ2VzIHRvIHVwc3RyZWFtJykKKyAgICAgICAgICAgIHJldHVybiAnJworICAg
ICAgICBwYXRjaF9kYXRhID0gcGF0Y2hfZGF0YS5yZXBsYWNlKCdMYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzLycsICcnKQorICAgICAgICBwYXRjaF9maWxlID0gc2Vs
Zi5fZmlsZXN5c3RlbS5hYnNwYXRoKHBhdGNoX2ZpbGUpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0
ZW0ud3JpdGVfdGV4dF9maWxlKHBhdGNoX2ZpbGUsIHBhdGNoX2RhdGEpCisgICAgICAgIHJldHVy
biBwYXRjaF9maWxlCisKKyAgICBkZWYgY3JlYXRlX3VwbG9hZF9yZW1vdGVfaWZfbmVlZGVkKHNl
bGYpOgorICAgICAgICBpZiBzZWxmLnJlcG9zaXRvcnlfcmVtb3RlIGluIHNlbGYuZ2l0LnJlbW90
ZShbXSk6CisgICAgICAgICAgICBfbG9nLmluZm8oIldpbGwgcHVzaCBicmFuY2ggdG8gIiArIHNl
bGYuZ2l0LnJlbW90ZShbImdldC11cmwiLCBzZWxmLnJlcG9zaXRvcnlfcmVtb3RlXSkuc3RyaXAo
KSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBfbG9nLmluZm8oIldpbGwgcHVzaCBicmFu
Y2ggdG8gIiArIHNlbGYucmVwb3NpdG9yeV9vcmlnaW5fdXJsKQorICAgICAgICBzZWxmLmdpdC5y
ZW1vdGUoWyJhZGQiLCBzZWxmLnJlcG9zaXRvcnlfcmVtb3RlLCBzZWxmLnJlcG9zaXRvcnlfb3Jp
Z2luX3VybF0pCisKKyAgICBkZWYgZG9fZXhwb3J0KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2Vs
Zi5kb3dubG9hZF9hbmRfY29tbWl0X3BhdGNoKCk6CisgICAgICAgICAgICBfbG9nLmVycm9yKCJV
bmFibGUgdG8gZG93bmxvYWQgYW5kIGFwcGx5IHRoZSBwYXRjaCB0byBleHBvcnQiKQorICAgICAg
ICAgICAgcmV0dXJuCisKKyAgICAgICAgZ2l0X3BhdGNoX2ZpbGUgPSBzZWxmLmNyZWF0ZV9naXRf
cGF0Y2goKQorCisgICAgICAgIGlmIG5vdCBnaXRfcGF0Y2hfZmlsZToKKyAgICAgICAgICAgIF9s
b2cuZXJyb3IoIlVuYWJsZSB0byBhcHBseSB0aGUgcGF0Y2ggdG8gd2ViLXBsYXRmb3JtLXRlc3Rz
IHJlcG9zaXRvcnkiKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHNlbGYu
Y3JlYXRlX2JyYW5jaF93aXRoX3BhdGNoKGdpdF9wYXRjaF9maWxlKToKKyAgICAgICAgICAgIF9s
b2cuZXJyb3IoIkNhbm5vdCBjcmVhdGUgYnJhbmNoIGZyb20gdGhlIHBhdGNoIikKKyAgICAgICAg
ICAgIHNlbGYuZGVsZXRlX2xvY2FsX2JyYW5jaCgpCisgICAgICAgICAgICByZXR1cm4KKworICAg
ICAgICBpZiBnaXRfcGF0Y2hfZmlsZToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVt
b3ZlKGdpdF9wYXRjaF9maWxlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYu
cHVzaF90b19wdWJsaWNfcmVwb3NpdG9yeSgpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYub3B0
aW9ucy5jcmVhdGVfcHVsbF9yZXF1ZXN0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLm1ha2Vf
cHVsbF9yZXF1ZXN0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuZGVsZXRl
X2xvY2FsX2JyYW5jaCgpCisgICAgICAgICAgICBzZWxmLmNsZWFuKCkKKworCitkZWYgcGFyc2Vf
YXJncyhhcmdzKToKKyAgICBkZXNjcmlwdGlvbiA9ICIiIlNjcmlwdCB0byBnZW5lcmF0ZSBhIHB1
bGwgcmVxdWVzdCB0byBXM0Mgd2ViLXBsYXRmb3JtLXRlc3RzIHJlcG9zaXRvcnkKKyAgICAnVG9v
bHMvU2NyaXB0cy9leHBvcnQtdzNjLXRlc3QtY2hhbmdlcyAtZyBIRUFEIC1iIFhZWicgd2lsbCBk
byB0aGUgZm9sbG93aW5nOgorICAgIC0gQ2xvbmUgd2ViLXBsYXRmb3JtLXRlc3RzIHJlcG9zaXRv
cnkgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgc2V0IGl0IHVwIGZvciBwdXNoaW5nIGJyYW5jaGVz
LgorICAgIC0gR2F0aGVyIFdlYktpdCBidWcgaWQgWFlaIGJ1ZyBhbmQgY2hhbmdlcyB0byBhcHBs
eSB0byB3ZWItcGxhdGZvcm0tdGVzdHMgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aGUgSEVBRCBjb21t
aXQKKyAgICAtIENyZWF0ZSBhIHJlbW90ZSBicmFuY2ggbmFtZWQgd2Via2l0LVhZWiBvbiBodHRw
czovL2dpdGh1Yi5jb20vVVNFUk5BTUUvd2ViLXBsYXRmb3JtLXRlc3RzLmdpdCByZXBvc2l0b3J5
IGJhc2VkIG9uIHRoZSBsb2NhbGx5IGFwcGxpZWQgcGF0Y2guCisgICAgLSAgICBVU0VSTkFNRSBt
YXkgYmUgc2V0IHVzaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBHSVRIVUJfV1BUX1VTRVIg
b3IgYXMgYSBjb21tYW5kIGxpbmUgb3B0aW9uLgorICAgIC0gICAgR2l0aHViIGNyZWRlbnRpYWwg
bWF5IGJlIHNldCB1c2luZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgR0lUSFVCX1dQVF9BVVRI
IG9yIGFzIGEgY29tbWFuZCBsaW5lIG9wdGlvbi4gKFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgR2l0
SHViICdQZXJzb25hbCBhY2Nlc3MgdG9rZW4nIHdpdGggJ3JlcG8nIGFzIHNjb3BlKQorICAgIC0g
TWFrZSB0aGUgcmVsYXRlZCBwdWxsIHJlcXVlc3Qgb24gaHR0cHM6Ly9naXRodWIuY29tL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMuZ2l0IHJlcG9zaXRvcnkuCisgICAgLSBDbGVhbiB0aGUgbG9jYWwg
R2l0IHJlcG9zaXRvcnkKKyAgICBOb3RlczoKKyAgICAtIEl0IGlzIHNhZmVyIHRvIHByb3ZpZGUg
YSBidWcgaWQgdXNpbmcgLWIgb3B0aW9uIChidWcgaWQgZnJvbSBhIGdpdCBjb21taXQgaXMgbm90
IGFsd2F5cyB3b3JraW5nKS4KKyAgICAtIEFzIGEgZHJ5IHJ1biwgb25lIGNhbiBzdGFydCBieSBy
dW5uaW5nIHRoZSBzY3JpcHQgd2l0aG91dCAtYy4gVGhpcyB3aWxsIG9ubHkgY3JlYXRlIHRoZSBi
cmFuY2ggb24gdGhlIHVzZXIgcHVibGljIEdpdEh1YiByZXBvc2l0b3J5LgorICAgIEZJWE1FOgor
ICAgIC0gQWRkIGEgbGFiZWwgb24gZ2l0aHViIGlzc3VlcworICAgIC0gVGhlIHNjcmlwdCBpcyBu
b3QgeWV0IGFibGUgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIHB1bGwgcmVxdWVzdAorICAgIC0gQWRk
IHRoZSBnaXRodWIgaXNzdWUgVVJMIHRvICdTZWUgYWxzbycKKyAgICAtIE5lZWQgYSB3YXkgdG8g
bW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHB1bCByZXF1ZXN0IHNvIHRoYXQgc3RhdHVzIG9m
IGFsbCBwZW5kaW5nIHB1bGwgcmVxdWVzdHMgY2FuIGJlIGRvbmUgYXQgaW1wb3J0IHRpbWUuCisg
ICAgIiIiCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nZXhwb3J0
LXczYy10ZXN0LWNoYW5nZXMgLi4uJywgZGVzY3JpcHRpb249ZGVzY3JpcHRpb24sIGZvcm1hdHRl
cl9jbGFzcz1hcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIpCisKKyAgICBwYXJz
ZXIuYWRkX2FyZ3VtZW50KCctZycsICctLWdpdC1jb21taXQnLCBkZXN0PSdnaXRfY29tbWl0Jywg
ZGVmYXVsdD1Ob25lLCBoZWxwPSdHaXQgY29tbWl0IHRvIGFwcGx5JykKKyAgICBwYXJzZXIuYWRk
X2FyZ3VtZW50KCctYicsICctLWJ1ZycsIGRlc3Q9J2J1Z19pZCcsIGRlZmF1bHQ9Tm9uZSwgaGVs
cD0nQnVnIElEIHRvIHNlYXJjaCBmb3IgcGF0Y2gnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQo
Jy1hJywgJy0tYXR0YWNobWVudCcsIGRlc3Q9J2F0dGFjaG1lbnRfaWQnLCBkZWZhdWx0PU5vbmUs
IGhlbHA9J0F0dGFjaG1lbnQgSUQgdG8gc2VhcmNoIGZvciBwYXRjaCcpCisgICAgcGFyc2VyLmFk
ZF9hcmd1bWVudCgnLW4nLCAnLS1uYW1lJywgZGVzdD0ndXNlcm5hbWUnLCBkZWZhdWx0PU5vbmUs
IGhlbHA9J2dpdGh1YiB1c2VyIG5hbWUgaWYgR0lUSFVCX1dQVF9VU0VSIGlzIG5vdCBkZWZpbmVk
JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdCcsICctLXRva2VuJywgZGVzdD0ndG9rZW4n
LCBkZWZhdWx0PU5vbmUsIGhlbHA9J2dpdGh1YiB0b2tlbiwgbmVlZGVkIGZvciBjcmVhdGluZyBw
dWxsIHJlcXVlc3RzIG9ubHkgaWYgR0lUSFVCX1dQVF9BVVRIIGlzIG5vdCBkZWZpbmVkJykKKyAg
ICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdScsICctLXVybCcsIGRlc3Q9J3JlcG9zaXRvcnlfcHVi
bGljX3VybCcsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nUHVibGljIHJlcG9zaXRvcnkgdXJsJykKKyAg
ICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcicsICctLXJlbW90ZScsIGRlc3Q9J3JlcG9zaXRvcnlf
cmVtb3RlJywgZGVmYXVsdD1Ob25lLCBoZWxwPSdyZXBvc2l0b3J5IG9yaWdpbiB0byB1c2UgdG8g
cHVzaCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1yZXBvc2l0b3J5JywgZGVz
dD0ncmVwb3NpdG9yeV9kaXJlY3RvcnknLCBkZWZhdWx0PU5vbmUsIGhlbHA9J3JlcG9zaXRvcnkg
ZGlyZWN0b3J5JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYycsICctLWNyZWF0ZS1wcics
IGRlc3Q9J2NyZWF0ZV9wdWxsX3JlcXVlc3QnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0
PUZhbHNlLCBoZWxwPSdjcmVhdGUgcHVsbCByZXF1ZXN0IHRvIHczYyB3ZWItcGxhdGZvcm0tdGVz
dHMnKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3Mp
CisKKyAgICByZXR1cm4gb3B0aW9ucworCisKK2RlZiBjb25maWd1cmVfbG9nZ2luZygpOgorICAg
IGNsYXNzIExvZ0hhbmRsZXIobG9nZ2luZy5TdHJlYW1IYW5kbGVyKToKKworICAgICAgICBkZWYg
Zm9ybWF0KHNlbGYsIHJlY29yZCk6CisgICAgICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+IGxv
Z2dpbmcuSU5GTzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVzOiAlcyIgJSAocmVjb3JkLmxl
dmVsbmFtZSwgcmVjb3JkLmdldE1lc3NhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiByZWNvcmQu
Z2V0TWVzc2FnZSgpCisKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgbG9n
Z2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBoYW5kbGVyID0gTG9nSGFuZGxlcigpCisg
ICAgaGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIo
aGFuZGxlcikKKyAgICByZXR1cm4gaGFuZGxlcgorCisKK2RlZiBtYWluKF9hcmd2LCBfc3Rkb3V0
LCBfc3RkZXJyKToKKyAgICBvcHRpb25zID0gcGFyc2VfYXJncyhfYXJndikKKworICAgIGNvbmZp
Z3VyZV9sb2dnaW5nKCkKKworICAgIGlmIG5vdCBvcHRpb25zLmJ1Z19pZCBhbmQgbm90IG9wdGlv
bnMuYXR0YWNobWVudF9pZCBhbmQgbm90IG9wdGlvbnMuZ2l0X2NvbW1pdDoKKyAgICAgICAgX2xv
Zy5lcnJvcigiUGxlYXNlIHByb3ZpZGUgZWl0aGVyIGEgYnVnIElELCBhbiBhdHRhY2htZW50IElE
IG9yIGEgbG9jYWwgZ2l0IGNvbW1pdCB0byBlbmFibGUgZ2V0dGluZyB0aGUgY2hhbmdlcyB0byBl
eHBvcnQiKQorICAgICAgICByZXR1cm4KKworICAgIHRlc3RfZXhwb3J0ZXIgPSBUZXN0RXhwb3J0
ZXIoSG9zdCgpLCBvcHRpb25zKQorCisgICAgdGVzdF9leHBvcnRlci5kb19leHBvcnQoKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF9leHBvcnRlcl91bml0dGVz
dC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfZXhwb3J0ZXJfdW5pdHRlc3Qu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWY2YTQ3ZDk0MjE3OTk3YTUwOTQ3MTdjNDY3OTIxNmIxMDUyOTU2MQot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfZXhwb3J0
ZXJfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwxMTQgQEAKKworIyBDb3B5cmlnaHQgKGMpIDIwMTcs
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21t
b24uaG9zdF9tb2NrIGltcG9ydCBNb2NrSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KK2Zyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZTIKK2Zyb20gd2Vi
a2l0cHkudzNjLnRlc3RfZXhwb3J0ZXIgaW1wb3J0IFRlc3RFeHBvcnRlciwgcGFyc2VfYXJncwor
ZnJvbSB3ZWJraXRweS53M2Mud3B0X2dpdGh1Yl9tb2NrIGltcG9ydCBNb2NrV1BUR2l0SHViCisK
KworY2xhc3MgVGVzdEV4cG9ydGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFz
cyBNb2NrQnVnemlsbGEob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAg
ICAgICAgICAgc2VsZi5jYWxscyA9IFtdCisKKyAgICAgICAgZGVmIGZldGNoX2J1Z19kaWN0aW9u
YXJ5KHNlbGYsIGlkKToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdmZXRjaCBidWcg
JyArIGlkKQorICAgICAgICAgICAgcmV0dXJuIHsidGl0bGUiOiAibXkgYnVnIHRpdGxlIn0KKwor
ICAgICAgICBkZWYgcG9zdF9jb21tZW50X3RvX2J1ZyhzZWxmLCBpZCwgY29tbWVudCk6CisgICAg
ICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgncG9zdCBjb21tZW50IHRvIGJ1ZyAnICsgaWQgKyAn
IDogJyArIGNvbW1lbnQpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgY2xhc3MgTW9j
a0dpdChvYmplY3QpOgorICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGNsb25lKGNs
cywgdXJsLCBkaXJlY3RvcnksIGV4ZWN1dGl2ZT1Ob25lKToKKyAgICAgICAgICAgIHJldHVybiBU
cnVlCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcG9zaXRvcnlfZGlyZWN0b3J5LCBw
YXRjaF9kaXJlY3RvcmllcywgZXhlY3V0aXZlLCBmaWxlc3lzdGVtKToKKyAgICAgICAgICAgIHNl
bGYuY2FsbHMgPSBbcmVwb3NpdG9yeV9kaXJlY3RvcnldCisKKyAgICAgICAgZGVmIGZldGNoKHNl
bGYpOgorICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ2ZldGNoJykKKworICAgICAgICBk
ZWYgY2hlY2tvdXQoc2VsZiwgYnJhbmNoKToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5k
KCdjaGVja291dCAnICsgYnJhbmNoKQorCisgICAgICAgIGRlZiByZXNldF9oYXJkKHNlbGYsIGNv
bW1pdCk6CisgICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgncmVzZXQgaGFyZCAnICsgY29t
bWl0KQorCisgICAgICAgIGRlZiBwdXNoKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICAgICAgc2Vs
Zi5jYWxscy5hcHBlbmQoJ3B1c2ggJyArICcgJy5qb2luKG9wdGlvbnMpKQorCisgICAgICAgIGRl
ZiBmb3JtYXRfcGF0Y2goc2VsZiwgb3B0aW9ucyk6CisgICAgICAgICAgICBzZWxmLmNhbGxzLmFw
cGVuZCgnZm9ybWF0IHBhdGNoICcgKyAnICcuam9pbihvcHRpb25zKSkKKyAgICAgICAgICAgIHJl
dHVybiAnZm9ybWF0dGVkIHBhdGNoIHdpdGggY2hhbmdlcyBkb25lIHRvIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdGVzdDEuaHRtbCcKKworICAgICAgICBkZWYg
ZGVsZXRlX2JyYW5jaChzZWxmLCBicmFuY2hfbmFtZSk6CisgICAgICAgICAgICBzZWxmLmNhbGxz
LmFwcGVuZCgnZGVsZXRlIGJyYW5jaCAnICsgYnJhbmNoX25hbWUpCisKKyAgICAgICAgZGVmIGNo
ZWNrb3V0X25ld19icmFuY2goc2VsZiwgYnJhbmNoX25hbWUpOgorICAgICAgICAgICAgc2VsZi5j
YWxscy5hcHBlbmQoJ2NoZWNrb3V0IG5ldyBicmFuY2ggJyArIGJyYW5jaF9uYW1lKQorCisgICAg
ICAgIGRlZiBhbShzZWxmLCBvcHRpb25zKToKKyAgICAgICAgICAgICMgZmlsdGVyaW5nIG9wdGlv
bnNbMF0gYXMgaXQgY2hhbmdlcyBmb3IgZXZlcnkgcnVuCisgICAgICAgICAgICBzZWxmLmNhbGxz
LmFwcGVuZCgnYW0gcGF0Y2gudGVtcCAnICsgJyAnLmpvaW4ob3B0aW9uc1sxOl0pKQorCisgICAg
ICAgIGRlZiBjb21taXQoc2VsZiwgb3B0aW9ucyk6CisgICAgICAgICAgICBzZWxmLmNhbGxzLmFw
cGVuZCgnY29tbWl0ICcgKyAnICcuam9pbihvcHRpb25zKSkKKworICAgICAgICBkZWYgcmVtb3Rl
KHNlbGYsIG9wdGlvbnMpOgorICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ3JlbW90ZSAn
ICsgJyAnLmpvaW4ob3B0aW9ucykpCisgICAgICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiB0
ZXN0X2V4cG9ydChzZWxmKToKKyAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKKyAgICAgICAgaG9z
dC5leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihleGNlcHRpb249T1NFcnJvcigpKQorICAgICAg
ICBob3N0LmZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbSgpCisKKyAgICAgICAgb3B0aW9ucyA9
IHBhcnNlX2FyZ3MoWyd0ZXN0X2V4cG9ydGVyLnB5JywgJy1nJywgJ0hFQUQnLCAnLWInLCAnMTIz
NCcsICctYycsICctbicsICdVU0VSJywgJy10JywgJ1RPS0VOJ10pCisgICAgICAgIGV4cG9ydGVy
ID0gVGVzdEV4cG9ydGVyKGhvc3QsIG9wdGlvbnMsIFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdCwg
VGVzdEV4cG9ydGVyVGVzdC5Nb2NrQnVnemlsbGEsIE1vY2tXUFRHaXRIdWIpCisgICAgICAgIGV4
cG9ydGVyLmRvX2V4cG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cG9ydGVyLmdp
dEh1Yi5jYWxscywgWydjcmVhdGVfcHInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhw
b3J0ZXIuZ2l0LmNhbGxzLCBbCisgICAgICAgICAgICAnL21vY2stY2hlY2tvdXQvV2ViS2l0QnVp
bGQvdzNjLXRlc3RzL3dlYi1wbGF0Zm9ybS10ZXN0cycsCisgICAgICAgICAgICAnZmV0Y2gnLAor
ICAgICAgICAgICAgJ2NoZWNrb3V0IG1hc3RlcicsCisgICAgICAgICAgICAncmVzZXQgaGFyZCBv
cmlnaW4vbWFzdGVyJywKKyAgICAgICAgICAgICdjaGVja291dCBuZXcgYnJhbmNoIHdlYmtpdC0x
MjM0JywKKyAgICAgICAgICAgICdhbSBwYXRjaC50ZW1wIC0tZXhjbHVkZSAqLWV4cGVjdGVkLnR4
dCcsCisgICAgICAgICAgICAnY29tbWl0IC0tYW1lbmQgLW0gIldlYktpdCBleHBvcnQgb2YgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzQiJywKKyAgICAgICAgICAg
ICdyZW1vdGUgJywKKyAgICAgICAgICAgICdyZW1vdGUgYWRkIFVTRVIgaHR0cHM6Ly9VU0VSQGdp
dGh1Yi5jb20vVVNFUi93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0JywKKyAgICAgICAgICAgICdwdXNo
IFVTRVIgd2Via2l0LTEyMzQgLWYnLAorICAgICAgICAgICAgJ2NoZWNrb3V0IG1hc3RlcicsCisg
ICAgICAgICAgICAnZGVsZXRlIGJyYW5jaCB3ZWJraXQtMTIzNCcsCisgICAgICAgICAgICAnY2hl
Y2tvdXQgbWFzdGVyJywKKyAgICAgICAgICAgICdyZXNldCBoYXJkIG9yaWdpbi9tYXN0ZXInXSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwb3J0ZXIuYnVnemlsbGEuY2FsbHMsIFsKKyAg
ICAgICAgICAgICdmZXRjaCBidWcgMTIzNCcsCisgICAgICAgICAgICAncG9zdCBjb21tZW50IHRv
IGJ1ZyAxMjM0IDogU3VibWl0dGVkIHdlYi1wbGF0Zm9ybS10ZXN0cyBwdWxsIHJlcXVlc3Q6IG15
LWdpdGh1Yi11cmwnXSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dw
dF9naXRodWIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy93cHRfZ2l0aHViLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ3ZmM1YjU4OGYwZDZkYzRkNWYwN2U0MjczMDU5NWY2N2U4NjVmMTIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy93cHRfZ2l0aHViLnB5CkBA
IC0wLDAgKzEsMTg0IEBACisjIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisjIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisKK2ltcG9ydCBiYXNlNjQKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHVybGxpYjIKKworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorZnJv
bSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCisKKworX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorQVBJX0JBU0UgPSAnaHR0cHM6Ly9hcGkuZ2l0aHVi
LmNvbScKK0VYUE9SVF9MQUJFTCA9ICd3ZWJraXQtZXhwb3J0JworCisKK2NsYXNzIFdQVEdpdEh1
YihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHVzZXIsIHRva2VuLCBw
cl9oaXN0b3J5X3dpbmRvdz0zMCk6CisgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKKyAgICAgICAg
c2VsZi51c2VyID0gdXNlcgorICAgICAgICBzZWxmLnRva2VuID0gdG9rZW4KKyAgICAgICAgYXNz
ZXJ0IHNlbGYudXNlciBhbmQgc2VsZi50b2tlbgorCisgICAgICAgIHNlbGYuX3ByX2hpc3Rvcnlf
d2luZG93ID0gcHJfaGlzdG9yeV93aW5kb3cKKworICAgIGRlZiBhdXRoX3Rva2VuKHNlbGYpOgor
ICAgICAgICByZXR1cm4gYmFzZTY0LmI2NGVuY29kZSgne306e30nLmZvcm1hdChzZWxmLnVzZXIs
IHNlbGYudG9rZW4pKQorCisgICAgZGVmIHJlcXVlc3Qoc2VsZiwgcGF0aCwgbWV0aG9kLCBib2R5
PU5vbmUpOgorICAgICAgICBhc3NlcnQgcGF0aC5zdGFydHN3aXRoKCcvJykKKworICAgICAgICBp
ZiBib2R5OgorICAgICAgICAgICAgYm9keSA9IGpzb24uZHVtcHMoYm9keSkKKworICAgICAgICBy
ZXNwb25zZSA9IHNlbGYuaG9zdC53ZWIucmVxdWVzdCgKKyAgICAgICAgICAgIG1ldGhvZD1tZXRo
b2QsCisgICAgICAgICAgICB1cmw9QVBJX0JBU0UgKyBwYXRoLAorICAgICAgICAgICAgZGF0YT1i
b2R5LAorICAgICAgICAgICAgaGVhZGVycz17CisgICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdh
cHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb24nLAorICAgICAgICAgICAgICAgICdBdXRob3Jp
emF0aW9uJzogJ0Jhc2ljIHt9Jy5mb3JtYXQoc2VsZi5hdXRoX3Rva2VuKCkpLAorICAgICAgICAg
ICAgfSwKKyAgICAgICAgKQorCisgICAgICAgIHN0YXR1c19jb2RlID0gcmVzcG9uc2UuZ2V0Y29k
ZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWQocmVzcG9uc2Up
LCBzdGF0dXNfY29kZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJl
dHVybiBOb25lLCBzdGF0dXNfY29kZQorCisgICAgZGVmIGNyZWF0ZV9wcihzZWxmLCByZW1vdGVf
YnJhbmNoX25hbWUsIGRlc2NfdGl0bGUsIGJvZHkpOgorICAgICAgICAiIiJDcmVhdGVzIGEgUFIg
b24gR2l0SHViLgorCisgICAgICAgIEFQSSBkb2M6IGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5j
b20vdjMvcHVsbHMvI2NyZWF0ZS1hLXB1bGwtcmVxdWVzdAorCisgICAgICAgIFJldHVybnM6Cisg
ICAgICAgICAgICBBIHJhdyByZXNwb25zZSBvYmplY3QgaWYgc3VjY2Vzc2Z1bCwgTm9uZSBpZiBu
b3QuCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgcmVtb3RlX2JyYW5jaF9uYW1lCisgICAg
ICAgIGFzc2VydCBkZXNjX3RpdGxlCisgICAgICAgIGFzc2VydCBib2R5CisKKyAgICAgICAgcGF0
aCA9ICcvcmVwb3MvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9wdWxscycKKyAgICAgICAgYm9keSA9
IHsKKyAgICAgICAgICAgICd0aXRsZSc6IGRlc2NfdGl0bGUsCisgICAgICAgICAgICAnYm9keSc6
IGJvZHksCisgICAgICAgICAgICAnaGVhZCc6IHJlbW90ZV9icmFuY2hfbmFtZSwKKyAgICAgICAg
ICAgICdiYXNlJzogJ21hc3RlcicsCisgICAgICAgIH0KKyAgICAgICAgZGF0YSwgc3RhdHVzX2Nv
ZGUgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdQT1NUJywgYm9keT1ib2R5KQorCisgICAg
ICAgIGlmIHN0YXR1c19jb2RlICE9IDIwMToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBhZGRfbGFiZWwoc2VsZiwgbnVtYmVyKToKKyAg
ICAgICAgcGF0aCA9ICcvcmVwb3MvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9pc3N1ZXMvJWQvbGFi
ZWxzJyAlIG51bWJlcgorICAgICAgICBib2R5ID0gW0VYUE9SVF9MQUJFTF0KKyAgICAgICAgcmV0
dXJuIHNlbGYucmVxdWVzdChwYXRoLCBtZXRob2Q9J1BPU1QnLCBib2R5PWJvZHkpCisKKyAgICBk
ZWYgaW5fZmxpZ2h0X3B1bGxfcmVxdWVzdHMoc2VsZik6CisgICAgICAgIHBhdGggPSAnL3NlYXJj
aC9pc3N1ZXM/cT1yZXBvOnczYy93ZWItcGxhdGZvcm0tdGVzdHMlMjBpczpvcGVuJTIwdHlwZTpw
ciUyMGxhYmVsOnt9Jy5mb3JtYXQoRVhQT1JUX0xBQkVMKQorICAgICAgICBkYXRhLCBzdGF0dXNf
Y29kZSA9IHNlbGYucmVxdWVzdChwYXRoLCBtZXRob2Q9J0dFVCcpCisgICAgICAgIGlmIHN0YXR1
c19jb2RlID09IDIwMDoKKyAgICAgICAgICAgIHJldHVybiBbc2VsZi5tYWtlX3ByX2Zyb21faXRl
bShpdGVtKSBmb3IgaXRlbSBpbiBkYXRhWydpdGVtcyddXQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKCdOb24tMjAwIHN0YXR1cyBjb2RlICglcyk6ICVzJyAlIChz
dGF0dXNfY29kZSwgZGF0YSkpCisKKyAgICBkZWYgbWFrZV9wcl9mcm9tX2l0ZW0oc2VsZiwgaXRl
bSk6CisgICAgICAgIHJldHVybiBQdWxsUmVxdWVzdCgKKyAgICAgICAgICAgIHRpdGxlPWl0ZW1b
J3RpdGxlJ10sCisgICAgICAgICAgICBudW1iZXI9aXRlbVsnbnVtYmVyJ10sCisgICAgICAgICAg
ICBib2R5PWl0ZW1bJ2JvZHknXSwKKyAgICAgICAgICAgIHN0YXRlPWl0ZW1bJ3N0YXRlJ10pCisK
KyAgICBAbWVtb2l6ZWQKKyAgICBkZWYgYWxsX3B1bGxfcmVxdWVzdHMoc2VsZik6CisgICAgICAg
ICMgVE9ETyhqZWZmY2FycCk6IEFkZCBwYWdpbmF0aW9uIHRvIGZldGNoID45OSBQUnMKKyAgICAg
ICAgYXNzZXJ0IHNlbGYuX3ByX2hpc3Rvcnlfd2luZG93IDw9IDEwMCwgJ01heGltdW0gR2l0SHVi
IHBhZ2Ugc2l6ZSBleGNlZWRlZC4nCisgICAgICAgIHBhdGggPSAoJy9zZWFyY2gvaXNzdWVzJwor
ICAgICAgICAgICAgICAgICc/cT1yZXBvOnczYy93ZWItcGxhdGZvcm0tdGVzdHMlMjB0eXBlOnBy
JTIwbGFiZWw6e30nCisgICAgICAgICAgICAgICAgJyZwYWdlPTEnCisgICAgICAgICAgICAgICAg
JyZwZXJfcGFnZT17fScpLmZvcm1hdChFWFBPUlRfTEFCRUwsIHNlbGYuX3ByX2hpc3Rvcnlfd2lu
ZG93KQorICAgICAgICBkYXRhLCBzdGF0dXNfY29kZSA9IHNlbGYucmVxdWVzdChwYXRoLCBtZXRo
b2Q9J0dFVCcpCisgICAgICAgIGlmIHN0YXR1c19jb2RlID09IDIwMDoKKyAgICAgICAgICAgIHJl
dHVybiBbc2VsZi5tYWtlX3ByX2Zyb21faXRlbShpdGVtKSBmb3IgaXRlbSBpbiBkYXRhWydpdGVt
cyddXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdOb24tMjAw
IHN0YXR1cyBjb2RlICglcyk6ICVzJyAlIChzdGF0dXNfY29kZSwgZGF0YSkpCisKKyAgICBkZWYg
Z2V0X3ByX2JyYW5jaChzZWxmLCBwcl9udW1iZXIpOgorICAgICAgICBwYXRoID0gJy9yZXBvcy93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3B1bGxzL3t9Jy5mb3JtYXQocHJfbnVtYmVyKQorICAgICAg
ICBkYXRhLCBzdGF0dXNfY29kZSA9IHNlbGYucmVxdWVzdChwYXRoLCBtZXRob2Q9J0dFVCcpCisg
ICAgICAgIGlmIHN0YXR1c19jb2RlID09IDIwMDoKKyAgICAgICAgICAgIHJldHVybiBkYXRhWydo
ZWFkJ11bJ3JlZiddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
J05vbi0yMDAgc3RhdHVzIGNvZGUgKCVzKTogJXMnICUgKHN0YXR1c19jb2RlLCBkYXRhKSkKKwor
ICAgIGRlZiBtZXJnZV9wdWxsX3JlcXVlc3Qoc2VsZiwgcHVsbF9yZXF1ZXN0X251bWJlcik6Cisg
ICAgICAgIHBhdGggPSAnL3JlcG9zL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcHVsbHMvJWQvbWVy
Z2UnICUgcHVsbF9yZXF1ZXN0X251bWJlcgorICAgICAgICBib2R5ID0geworICAgICAgICAgICAg
IyBUaGlzIGN1cnJlbnRseSB3aWxsIG5vb3AgYmVjYXVzZSB0aGUgZmVhdHVyZSBpcyBpbiBhbiBv
cHQtaW4gYmV0YS4KKyAgICAgICAgICAgICMgT25jZSBpdCBsZWF2ZXMgYmV0YSB0aGlzIHdpbGwg
c3RhcnQgd29ya2luZy4KKyAgICAgICAgICAgICdtZXJnZV9tZXRob2QnOiAncmViYXNlJywKKyAg
ICAgICAgfQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEsIHN0YXR1c19jb2RlID0g
c2VsZi5yZXF1ZXN0KHBhdGgsIG1ldGhvZD0nUFVUJywgYm9keT1ib2R5KQorICAgICAgICBleGNl
cHQgdXJsbGliMi5IVFRQRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuY29kZSA9PSA0MDU6
CisgICAgICAgICAgICAgICAgcmFpc2UgTWVyZ2VFcnJvcigpCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgaWYgc3RhdHVzX2NvZGUgIT0gMjAwOgor
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdSZWNlaXZlZCBub24tMjAwIHN0YXR1cyBjb2Rl
ICglZCkgd2hpbGUgbWVyZ2luZyBQUiAjJWQnICUgKHN0YXR1c19jb2RlLCBwdWxsX3JlcXVlc3Rf
bnVtYmVyKSkKKworICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIGRlbGV0ZV9yZW1vdGVf
YnJhbmNoKHNlbGYsIHJlbW90ZV9icmFuY2hfbmFtZSk6CisgICAgICAgICMgVE9ETyhqZWZmY2Fy
cCk6IFVuaXQgdGVzdCB0aGlzIG1ldGhvZAorICAgICAgICBwYXRoID0gJy9yZXBvcy93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2dpdC9yZWZzL2hlYWRzLyVzJyAlIHJlbW90ZV9icmFuY2hfbmFtZQor
ICAgICAgICBkYXRhLCBzdGF0dXNfY29kZSA9IHNlbGYucmVxdWVzdChwYXRoLCBtZXRob2Q9J0RF
TEVURScpCisKKyAgICAgICAgaWYgc3RhdHVzX2NvZGUgIT0gMjA0OgorICAgICAgICAgICAgIyBU
T0RPKGplZmZjYXJwKTogUmFpc2UgbW9yZSBzcGVjaWZpYyBleGNlcHRpb24gKGNyZWF0ZSBNZXJn
ZUVycm9yIGNsYXNzPykKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignUmVjZWl2ZWQgbm9u
LTIwNCBzdGF0dXMgY29kZSBhdHRlbXB0aW5nIHRvIGRlbGV0ZSByZW1vdGUgYnJhbmNoOiB7fScu
Zm9ybWF0KHN0YXR1c19jb2RlKSkKKworICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHBy
X3dpdGhfY2hhbmdlX2lkKHNlbGYsIHRhcmdldF9jaGFuZ2VfaWQpOgorICAgICAgICBmb3IgcHVs
bF9yZXF1ZXN0IGluIHNlbGYuYWxsX3B1bGxfcmVxdWVzdHMoKToKKyAgICAgICAgICAgIGNoYW5n
ZV9pZCA9IHNlbGYuX2V4dHJhY3RfbWV0YWRhdGEoJ0NoYW5nZS1JZDogJywgcHVsbF9yZXF1ZXN0
LmJvZHkpCisgICAgICAgICAgICBpZiBjaGFuZ2VfaWQgPT0gdGFyZ2V0X2NoYW5nZV9pZDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcHVsbF9yZXF1ZXN0CisgICAgICAgIHJldHVybiBOb25lCisK
KyAgICBkZWYgcHJfd2l0aF9wb3NpdGlvbihzZWxmLCBwb3NpdGlvbik6CisgICAgICAgIGZvciBw
dWxsX3JlcXVlc3QgaW4gc2VsZi5hbGxfcHVsbF9yZXF1ZXN0cygpOgorICAgICAgICAgICAgcHJf
Y29tbWl0X3Bvc2l0aW9uID0gc2VsZi5fZXh0cmFjdF9tZXRhZGF0YSgnQ3ItQ29tbWl0LVBvc2l0
aW9uOiAnLCBwdWxsX3JlcXVlc3QuYm9keSkKKyAgICAgICAgICAgIGlmIHBvc2l0aW9uID09IHBy
X2NvbW1pdF9wb3NpdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gcHVsbF9yZXF1ZXN0Cisg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2V4dHJhY3RfbWV0YWRhdGEoc2VsZiwgdGFn
LCBjb21taXRfYm9keSk6CisgICAgICAgIGZvciBsaW5lIGluIGNvbW1pdF9ib2R5LnNwbGl0bGlu
ZXMoKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCh0YWcpOgorICAgICAgICAgICAg
ICAgIHJldHVybiBsaW5lW2xlbih0YWcpOl0KKyAgICAgICAgcmV0dXJuIE5vbmUKKworCisKK2Ns
YXNzIE1lcmdlRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJBbiBlcnJvciBzcGVjaWZpY2FsbHkg
Zm9yIHdoZW4gYSBQUiBjYW5ub3QgYmUgbWVyZ2VkLgorCisgICAgVGhpcyBzaG91bGQgb25seSBi
ZSB0aHJvd24gd2hlbiBHaXRIdWIgcmV0dXJucyBzdGF0dXMgY29kZSA0MDUsCisgICAgaW5kaWNh
dGluZyB0aGF0IHRoZSBQUiBjb3VsZCBub3QgYmUgbWVyZ2VkLgorICAgICIiIgorICAgIHBhc3MK
KworUHVsbFJlcXVlc3QgPSBuYW1lZHR1cGxlKCdQdWxsUmVxdWVzdCcsIFsndGl0bGUnLCAnbnVt
YmVyJywgJ2JvZHknLCAnc3RhdGUnXSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdzNjL3dwdF9naXRodWJfbW9jay5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dw
dF9naXRodWJfbW9jay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzc1NjZjYjhmZTU4YjEzMWZlMzllNGQ1MTg1
NzViNmRmMDRkNGUxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93
M2Mvd3B0X2dpdGh1Yl9tb2NrLnB5CkBAIC0wLDAgKzEsNjMgQEAKKyMgQ29weXJpZ2h0IDIwMTcg
VGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKyMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworZnJvbSB3ZWJraXRweS53M2Mud3B0
X2dpdGh1YiBpbXBvcnQgTWVyZ2VFcnJvcgorCisKK2NsYXNzIE1vY2tXUFRHaXRIdWIob2JqZWN0
KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwdWxsX3JlcXVlc3RzLCB1bnN1Y2Nlc3NmdWxf
bWVyZ2VfaW5kZXg9LTEsIGNyZWF0ZV9wcl9mYWlsX2luZGV4PS0xKToKKyAgICAgICAgc2VsZi5w
dWxsX3JlcXVlc3RzID0gcHVsbF9yZXF1ZXN0cworICAgICAgICBzZWxmLmNhbGxzID0gW10KKyAg
ICAgICAgc2VsZi5wdWxsX3JlcXVlc3RzX2NyZWF0ZWQgPSBbXQorICAgICAgICBzZWxmLnB1bGxf
cmVxdWVzdHNfbWVyZ2VkID0gW10KKyAgICAgICAgc2VsZi51bnN1Y2Nlc3NmdWxfbWVyZ2VfaW5k
ZXggPSB1bnN1Y2Nlc3NmdWxfbWVyZ2VfaW5kZXgKKyAgICAgICAgc2VsZi5jcmVhdGVfcHJfaW5k
ZXggPSAwCisgICAgICAgIHNlbGYuY3JlYXRlX3ByX2ZhaWxfaW5kZXggPSBjcmVhdGVfcHJfZmFp
bF9pbmRleAorCisgICAgZGVmIGFsbF9wdWxsX3JlcXVlc3RzKHNlbGYsIGxpbWl0PTMwKTogICMg
cHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAorICAgICAgICBzZWxmLmNhbGxzLmFwcGVu
ZCgnYWxsX3B1bGxfcmVxdWVzdHMnKQorICAgICAgICByZXR1cm4gc2VsZi5wdWxsX3JlcXVlc3Rz
CisKKyAgICBkZWYgbWVyZ2VfcHVsbF9yZXF1ZXN0KHNlbGYsIG51bWJlcik6CisgICAgICAgIHNl
bGYuY2FsbHMuYXBwZW5kKCdtZXJnZV9wdWxsX3JlcXVlc3QnKQorCisgICAgICAgIGZvciBpbmRl
eCwgcHIgaW4gZW51bWVyYXRlKHNlbGYucHVsbF9yZXF1ZXN0cyk6CisgICAgICAgICAgICBpZiBw
ci5udW1iZXIgPT0gbnVtYmVyIGFuZCBpbmRleCA9PSBzZWxmLnVuc3VjY2Vzc2Z1bF9tZXJnZV9p
bmRleDoKKyAgICAgICAgICAgICAgICByYWlzZSBNZXJnZUVycm9yKCkKKworICAgICAgICBzZWxm
LnB1bGxfcmVxdWVzdHNfbWVyZ2VkLmFwcGVuZChudW1iZXIpCisKKyAgICBkZWYgY3JlYXRlX3By
KHNlbGYsIHJlbW90ZV9icmFuY2hfbmFtZSwgZGVzY190aXRsZSwgYm9keSk6CisgICAgICAgIHNl
bGYuY2FsbHMuYXBwZW5kKCdjcmVhdGVfcHInKQorCisgICAgICAgIGFzc2VydCByZW1vdGVfYnJh
bmNoX25hbWUKKyAgICAgICAgYXNzZXJ0IGRlc2NfdGl0bGUKKyAgICAgICAgYXNzZXJ0IGJvZHkK
KworICAgICAgICBpZiBzZWxmLmNyZWF0ZV9wcl9mYWlsX2luZGV4ICE9IHNlbGYuY3JlYXRlX3By
X2luZGV4OgorICAgICAgICAgICAgc2VsZi5wdWxsX3JlcXVlc3RzX2NyZWF0ZWQuYXBwZW5kKChy
ZW1vdGVfYnJhbmNoX25hbWUsIGRlc2NfdGl0bGUsIGJvZHkpKQorCisgICAgICAgIHNlbGYuY3Jl
YXRlX3ByX2luZGV4ICs9IDEKKworICAgICAgICByZXR1cm4geyJodG1sX3VybCI6ICJteS1naXRo
dWItdXJsIn0KKworICAgIGRlZiBkZWxldGVfcmVtb3RlX2JyYW5jaChzZWxmLCBfKToKKyAgICAg
ICAgc2VsZi5jYWxscy5hcHBlbmQoJ2RlbGV0ZV9yZW1vdGVfYnJhbmNoJykKKworICAgIGRlZiBn
ZXRfcHJfYnJhbmNoKHNlbGYsIG51bWJlcik6CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdn
ZXRfcHJfYnJhbmNoJykKKyAgICAgICAgcmV0dXJuICdmYWtlIGJyYW5jaCBmb3IgUFIge30nLmZv
cm1hdChudW1iZXIpCisKKyAgICBkZWYgcHJfd2l0aF9wb3NpdGlvbihzZWxmLCBwb3NpdGlvbik6
CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdwcl93aXRoX3Bvc2l0aW9uJykKKyAgICAgICAg
Zm9yIHByIGluIHNlbGYucHVsbF9yZXF1ZXN0czoKKyAgICAgICAgICAgIGlmIHBvc2l0aW9uIGlu
IHByLmJvZHk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHByCisKKyAgICBkZWYgcHJfd2l0aF9j
aGFuZ2VfaWQoc2VsZiwgY2hhbmdlX2lkKToKKyAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ3By
X3dpdGhfY2hhbmdlX2lkJykKKyAgICAgICAgZm9yIHByIGluIHNlbGYucHVsbF9yZXF1ZXN0czoK
KyAgICAgICAgICAgIGlmIGNoYW5nZV9pZCBpbiBwci5ib2R5OgorICAgICAgICAgICAgICAgIHJl
dHVybiBwcgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dpdGh1
Yl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWJfdW5p
dHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQ5M2EwMDFhMGQ4Y2M0MTYyN2I1ZDllMTYyY2ZjNzU0YmFh
Nzc0OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9n
aXRodWJfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwzNSBAQAorIyBDb3B5cmlnaHQgMjAxNiBUaGUg
Q2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
IyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCitpbXBvcnQgYmFzZTY0CitpbXBvcnQgdW5p
dHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdF9tb2NrIGltcG9ydCBNb2NrSG9zdAor
ZnJvbSB3ZWJraXRweS53M2Mud3B0X2dpdGh1YiBpbXBvcnQgV1BUR2l0SHViLCBNZXJnZUVycm9y
CisKKworY2xhc3MgV1BUR2l0SHViVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYg
c2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYud3B0X2dpdGh1YiA9IFdQVEdpdEh1YihNb2NrSG9z
dCgpLCB1c2VyPSdydXRhYmFnYScsIHRva2VuPSdkZWNhZmJhZCcpCisKKyAgICBkZWYgdGVzdF9p
bml0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud3B0X2dpdGh1Yi51c2Vy
LCAncnV0YWJhZ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud3B0X2dpdGh1Yi50
b2tlbiwgJ2RlY2FmYmFkJykKKworICAgIGRlZiB0ZXN0X2F1dGhfdG9rZW4oc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLndwdF9naXRodWIuYXV0aF90
b2tlbigpLAorICAgICAgICAgICAgYmFzZTY0LmVuY29kZXN0cmluZygncnV0YWJhZ2E6ZGVjYWZi
YWQnKS5zdHJpcCgpKQorCisgICAgZGVmIHRlc3RfbWVyZ2VfcHVsbF9yZXF1ZXN0X3Rocm93c19t
ZXJnZV9lcnJvcl9vbl80MDUoc2VsZik6CisgICAgICAgIHNlbGYud3B0X2dpdGh1Yi5ob3N0Lndl
Yi5yZXNwb25zZXMgPSBbCisgICAgICAgICAgICB7J3N0YXR1c19jb2RlJzogMjAwfSwKKyAgICAg
ICAgICAgIHsnc3RhdHVzX2NvZGUnOiA0MDV9LAorICAgICAgICBdCisKKyAgICAgICAgc2VsZi53
cHRfZ2l0aHViLm1lcmdlX3B1bGxfcmVxdWVzdCgxMjM0KQorCisgICAgICAgIHdpdGggc2VsZi5h
c3NlcnRSYWlzZXMoTWVyZ2VFcnJvcik6CisgICAgICAgICAgICBzZWxmLndwdF9naXRodWIubWVy
Z2VfcHVsbF9yZXF1ZXN0KDU2NzgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309359</attachid>
            <date>2017-05-08 08:25:01 -0700</date>
            <delta_ts>2017-10-14 12:07:10 -0700</delta_ts>
            <desc>Adding URL to Chromium license</desc>
            <filename>bug-169462-20170508082502.patch</filename>
            <type>text/plain</type>
            <size>39844</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MzUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWE1NjQ4NjViZjlkZWQwN2EyYzE2ODcxYmE2MjRjMmI0
ODJlMGJmZi4uZmYwMmEzNWRkZjk3ZTAzN2YwZDM2MzcxMGU2NmFhY2E2M2U5ZTg4OCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1
IEBACisyMDE3LTA1LTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgYSBzY3JpcHQgdG8gYXV0b21hdGUgVzNjIHdlYi1wbGF0Zm9ybS10ZXN0cyBwdWxs
IHJlcXVlc3QgY3JlYXRpb25zIGZyb20gV2ViS2l0IGNvbW1pdHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQ2MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBzb21lIGdpdCBoZWxwZXIgcm91
dGluZXMgdXNlZCBieSBXUFQgZXhwb3J0ZXIuCisgICAgICAgIENvcHlpbmcgV1BUIGdpdGh1YiB1
dGlsaXR5IGZpbGVzIGZyb20gQ2hyb21pdW0uCisgICAgICAgIFVwZGF0aW5nIHdlYi5weS93ZWJf
bW9jay5weSB0byBjb3BlIHdpdGggdGhlc2UgbmV3IGZpbGVzLgorCisgICAgICAgIEltcGxlbWVu
dGluZyB0ZXN0IGV4cG9ydGVyIGluIHRlc3RfZXhwb3J0ZXIucHkuCisgICAgICAgIFRoaXMgc2Ny
aXB0IHRha2VzIGEgV2ViS2l0IGNvbW1pdCBhcyBpbnB1dCBhbmQgd2lsbCBjcmVhdGUgYSBXUFQg
Y29tbWl0IGluIGEgbG9jYWwgV1BUIGNsb25lLgorICAgICAgICBJdCB3aWxsIHRoZW4gcHVzaCB0
aGUgY29tbWl0IHRvIGEgcHVibGljIEdpdEh1YiByZXBvc2l0b3J5IGFuZCB3aWxsIG1ha2UgYSBw
dWxsIHJlcXVlc3QgdG8gdGhlIG9mZmljaWFsIFdQVCBHaXRIdWIgcmVwb3NpdG9yeS4KKyAgICAg
ICAgQSBjb21tZW50IGlzIGFkZGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIGJ1Z3ppbGxhLgorCisg
ICAgICAgICogU2NyaXB0cy9leHBvcnQtdzNjLXRlc3QtY2hhbmdlczogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weToKKyAgICAgICAg
KEdpdC5yZXNldF9oYXJkKToKKyAgICAgICAgKEdpdCk6CisgICAgICAgIChHaXQuYW0pOgorICAg
ICAgICAoR2l0LmNvbW1pdCk6CisgICAgICAgIChHaXQuZm9ybWF0X3BhdGNoKToKKyAgICAgICAg
KEdpdC5yZXF1ZXN0X3B1bGwpOgorICAgICAgICAoR2l0LnJlbW90ZSk6CisgICAgICAgIChHaXQu
cHVzaCk6CisgICAgICAgIChHaXQuY2hlY2tvdXRfbmV3X2JyYW5jaCk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weToKKyAgICAgICAgKFdlYi5yZXF1ZXN0KTog
Q29waWVkIGZyb20gQ2hyb21pdW0uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bmV0L3dlYl9tb2NrLnB5OiBDb3BpZWQgbmVlZGVkIGNvZGUgZnJvbSBDaHJvbWl1bS4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyLnB5OiBBZGRlZC4KKyAgICAg
ICAgKFRlc3RFeHBvcnRlcik6CisgICAgICAgIChUZXN0RXhwb3J0ZXIuX19pbml0X18pOgorICAg
ICAgICAoVGVzdEV4cG9ydGVyLl9pbml0X3JlcG9zaXRvcnkpOgorICAgICAgICAoVGVzdEV4cG9y
dGVyLmRvd25sb2FkX2FuZF9jb21taXRfcGF0Y2gpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLmNs
ZWFuKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfYnJhbmNoX3dpdGhfcGF0Y2gpOgor
ICAgICAgICAoVGVzdEV4cG9ydGVyLnB1c2hfdG9fcHVibGljX3JlcG9zaXRvcnkpOgorICAgICAg
ICAoVGVzdEV4cG9ydGVyLm1ha2VfcHVsbF9yZXF1ZXN0KToKKyAgICAgICAgKFRlc3RFeHBvcnRl
ci5kZWxldGVfbG9jYWxfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfZ2l0
X3BhdGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfdXBsb2FkX3JlbW90ZV9pZl9u
ZWVkZWQpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLmRvX2V4cG9ydCk6CisgICAgICAgIChwYXJz
ZV9hcmdzKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nKToKKyAgICAgICAgKGNvbmZpZ3Vy
ZV9sb2dnaW5nLkxvZ0hhbmRsZXIpOgorICAgICAgICAoY29uZmlndXJlX2xvZ2dpbmcuTG9nSGFu
ZGxlci5mb3JtYXQpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS93M2MvdGVzdF9leHBvcnRlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0RXhw
b3J0ZXJUZXN0KToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhKToKKyAg
ICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLl9faW5pdF9fKToKKyAgICAgICAg
KFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLmZldGNoX2J1Z19kaWN0aW9uYXJ5KToKKyAg
ICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLnBvc3RfY29tbWVudF90b19idWcp
OgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC5Nb2NrR2l0KToKKyAgICAgICAgKFRlc3RFeHBv
cnRlclRlc3QuTW9ja0dpdC5jbG9uZSk6CisgICAgICAgIChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tH
aXQuX19pbml0X18pOgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC5Nb2NrR2l0LmZldGNoKToK
KyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5jaGVja291dCk6CisgICAgICAgIChU
ZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQucmVzZXRfaGFyZCk6CisgICAgICAgIChUZXN0RXhwb3J0
ZXJUZXN0Lk1vY2tHaXQucHVzaCk6CisgICAgICAgIChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQu
Zm9ybWF0X3BhdGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5kZWxldGVf
YnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5jaGVja291dF9uZXdf
YnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5hbSk6CisgICAgICAg
IChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQuY29tbWl0KToKKyAgICAgICAgKFRlc3RFeHBvcnRl
clRlc3QuTW9ja0dpdC5yZW1vdGUpOgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC50ZXN0X2V4
cG9ydCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dpdGh1Yi5weTogQ29w
aWVkIGZyb20gY2hyb21pdW0uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dp
dGh1Yl9tb2NrLnB5OiBDb3BpZWQgZnJvbSBjaHJvbWl1bS4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3czYy93cHRfZ2l0aHViX3VuaXR0ZXN0LnB5OiBDb3BpZWQgZnJvbSBjaHJvbWl1bS4K
KwogMjAxNy0wNS0wNyAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dUS10gQ2Fubm90IHNpZ24gaW4gd2l0aCBuZXcgR29vZ2xlIHNpZ24taW4g
cGFnZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9leHBvcnQtdzNjLXRlc3QtY2hhbmdlcyBi
L1Rvb2xzL1NjcmlwdHMvZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMKbmV3IGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGRkM2Fi
MGZlYmMyZjAyYzlhNzM4MzBhNjA0ZDEzY2NkM2E4NzY1YQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMKQEAgLTAsMCArMSwzNSBAQAorIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluY29ycG9y
YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlCisjICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisjICAgIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyMgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzCisjICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkK
KyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyMgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisjIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUgorIyBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyMgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkudzNjIGltcG9ydCB0ZXN0X2V4cG9y
dGVyCisKKworc3lzLmV4aXQodGVzdF9leHBvcnRlci5tYWluKHN5cy5hcmd2WzE6XSwgc3lzLnN0
ZG91dCwgc3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y2hlY2tvdXQvc2NtL2dpdC5weQppbmRleCBjYWQ1N2FiZmExNDVhMWJlNjA3MjAyZGZmNjE4MDJk
YTdkYTJiY2ExLi40NDMwZDRhODI4NzkzMTQzYmQ2ZjkxYTVlOWY0ZDc0MjAyOWJjMmIwIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkK
QEAgLTU4NCw2ICs1ODQsNDIgQEAgY2xhc3MgR2l0KFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAg
ZGVmIGZldGNoKHNlbGYsIHJlbW90ZT0nb3JpZ2luJyk6CiAgICAgICAgIHJldHVybiBzZWxmLl9y
dW5fZ2l0KFsnZmV0Y2gnLCByZW1vdGVdKQogCisgICAgZGVmIHJlc2V0X2hhcmQoc2VsZiwgcmV2
aXNpb24pOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ3Jlc2V0JywgJy0taGFyZCcs
IHJldmlzaW9uXSkKKworICAgIGRlZiBhbShzZWxmLCBvcHRpb25zKToKKyAgICAgICAgYXJncyA9
IFsnYW0nXQorICAgICAgICBhcmdzLmV4dGVuZChvcHRpb25zKQorICAgICAgICByZXR1cm4gc2Vs
Zi5fcnVuX2dpdChhcmdzKQorCisgICAgZGVmIGNvbW1pdChzZWxmLCBvcHRpb25zKToKKyAgICAg
ICAgYXJncyA9IFsnY29tbWl0J10KKyAgICAgICAgYXJncy5leHRlbmQob3B0aW9ucykKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoYXJncykKKworICAgIGRlZiBmb3JtYXRfcGF0Y2goc2Vs
Ziwgb3B0aW9ucyk6CisgICAgICAgIGFyZ3MgPSBbJ2Zvcm1hdC1wYXRjaCddCisgICAgICAgIGFy
Z3MuZXh0ZW5kKG9wdGlvbnMpCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0KGFyZ3MpCisK
KyAgICBkZWYgcmVxdWVzdF9wdWxsKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBhcmdzID0gWydy
ZXF1ZXN0LXB1bGwnXQorICAgICAgICBhcmdzLmV4dGVuZChvcHRpb25zKQorICAgICAgICByZXR1
cm4gc2VsZi5fcnVuX2dpdChhcmdzKQorCisgICAgZGVmIHJlbW90ZShzZWxmLCBvcHRpb25zKToK
KyAgICAgICAgYXJncyA9IFsncmVtb3RlJ10KKyAgICAgICAgYXJncy5leHRlbmQob3B0aW9ucykK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoYXJncykKKworICAgIGRlZiBwdXNoKHNlbGYs
IG9wdGlvbnMpOgorICAgICAgICBhcmdzID0gWydwdXNoJ10KKyAgICAgICAgYXJncy5leHRlbmQo
b3B0aW9ucykKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoYXJncykKKworICAgIGRlZiBj
aGVja291dF9uZXdfYnJhbmNoKHNlbGYsIGJyYW5jaF9uYW1lKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX3J1bl9naXQoWydjaGVja291dCcsICctYicsIGJyYW5jaF9uYW1lXSkKKwogICAgIGRlZiBj
aGVja291dChzZWxmLCByZXZpc2lvbiwgcXVpZXQ9Tm9uZSk6CiAgICAgICAgIGNvbW1hbmQgPSBb
J2NoZWNrb3V0JywgcmV2aXNpb25dCiAgICAgICAgIGlmIHF1aWV0OgpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL25ldC93ZWIucHkKaW5kZXggYjhhMDZlNTc0NjhkMDVmMDRiNjhmMTI5ZGNk
ZTZhY2EwODc3NDcwYi4uODc5YWEwN2MxNmM4ZDY2Mzc2NDM2Zjg2MTE0OGVlYWY1NTNmMjM0OCAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvd2ViLnB5CkBAIC0zNCwzICszNCwx
MyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQubmV0d29ya3RyYW5zYWN0aW9uIGltcG9ydCBO
ZXR3b3JrVHJhbnNhY3Rpb24KIGNsYXNzIFdlYihvYmplY3QpOgogICAgIGRlZiBnZXRfYmluYXJ5
KHNlbGYsIHVybCwgY29udmVydF80MDRfdG9fTm9uZT1GYWxzZSk6CiAgICAgICAgIHJldHVybiBO
ZXR3b3JrVHJhbnNhY3Rpb24oY29udmVydF80MDRfdG9fTm9uZT1jb252ZXJ0XzQwNF90b19Ob25l
KS5ydW4obGFtYmRhOiB1cmxsaWIyLnVybG9wZW4odXJsKS5yZWFkKCkpCisKKyAgICBkZWYgcmVx
dWVzdChzZWxmLCBtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycz1Ob25lKToKKyAgICAgICAgb3Bl
bmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIodXJsbGliMi5IVFRQSGFuZGxlcikKKyAgICAgICAg
cmVxdWVzdCA9IHVybGxpYjIuUmVxdWVzdCh1cmw9dXJsLCBkYXRhPWRhdGEpCisgICAgICAgIHJl
cXVlc3QuZ2V0X21ldGhvZCA9IGxhbWJkYTogbWV0aG9kCisKKyAgICAgICAgaWYgaGVhZGVyczoK
KyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGhlYWRlcnMuaXRlbXMoKToKKyAgICAgICAg
ICAgICAgICByZXF1ZXN0LmFkZF9oZWFkZXIoa2V5LCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIG9w
ZW5lci5vcGVuKHJlcXVlc3QpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9uZXQvd2ViX21vY2sucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQv
d2ViX21vY2sucHkKaW5kZXggNmYwOWJhNDRkMGNlZTdhZGI4OGQxNGM1NzQxM2M3MGJjY2YzOGIz
ZS4uYjQxMDU5OTg5YWNlMTUyOTZhOWE5OGUzZTVhNTY5NjI5MDQxZjU1NiAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYl9tb2NrLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC93ZWJfbW9jay5weQpAQCAtMjcsMTIgKzI3LDEz
IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBTdHJpbmdJTwotCitpbXBvcnQgdXJsbGliMgog
CiBjbGFzcyBNb2NrV2ViKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybHM9Tm9u
ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybHM9Tm9uZSwgcmVzcG9uc2VzPVtdKToKICAg
ICAgICAgc2VsZi51cmxzID0gdXJscyBvciB7fQogICAgICAgICBzZWxmLnVybHNfZmV0Y2hlZCA9
IFtdCisgICAgICAgIHNlbGYucmVzcG9uc2VzID0gcmVzcG9uc2VzCiAKICAgICBkZWYgZ2V0X2Jp
bmFyeShzZWxmLCB1cmwsIGNvbnZlcnRfNDA0X3RvX05vbmU9RmFsc2UpOgogICAgICAgICBzZWxm
LnVybHNfZmV0Y2hlZC5hcHBlbmQodXJsKQpAQCAtNDAsNiArNDEsMjkgQEAgY2xhc3MgTW9ja1dl
YihvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYudXJsc1t1cmxdCiAgICAgICAgIHJl
dHVybiAiTU9DSyBXZWIgcmVzdWx0LCBjb252ZXJ0IDQwNCB0byBOb25lPSVzIiAlIGNvbnZlcnRf
NDA0X3RvX05vbmUKIAorICAgIGRlZiByZXF1ZXN0KHNlbGYsIG1ldGhvZCwgdXJsLCBkYXRhLCBo
ZWFkZXJzPU5vbmUpOiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50CisgICAgICAg
IHJldHVybiBNb2NrUmVzcG9uc2Uoc2VsZi5yZXNwb25zZXMucG9wKDApKQorCisKK2NsYXNzIE1v
Y2tSZXNwb25zZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZXMpOgorICAg
ICAgICBzZWxmLnN0YXR1c19jb2RlID0gdmFsdWVzWydzdGF0dXNfY29kZSddCisgICAgICAgIHNl
bGYudXJsID0gJycKKyAgICAgICAgc2VsZi5ib2R5ID0gdmFsdWVzLmdldCgnYm9keScsICcnKQor
CisgICAgICAgIGlmIGludChzZWxmLnN0YXR1c19jb2RlKSA+PSA0MDA6CisgICAgICAgICAgICBy
YWlzZSB1cmxsaWIyLkhUVFBFcnJvcigKKyAgICAgICAgICAgICAgICB1cmw9c2VsZi51cmwsCisg
ICAgICAgICAgICAgICAgY29kZT1zZWxmLnN0YXR1c19jb2RlLAorICAgICAgICAgICAgICAgIG1z
Zz0nUmVjZWl2ZWQgZXJyb3Igc3RhdHVzIGNvZGU6IHt9Jy5mb3JtYXQoc2VsZi5zdGF0dXNfY29k
ZSksCisgICAgICAgICAgICAgICAgaGRycz17fSwKKyAgICAgICAgICAgICAgICBmcD1Ob25lKQor
CisgICAgZGVmIGdldGNvZGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnN0YXR1c19jb2Rl
CisKKyAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYm9keQogCiAjIEZJ
WE1FOiBDbGFzc2VzIHdoaWNoIGFyZSB1c2luZyBCcm93c2VyIHByb2JhYmx5IHdhbnQgdG8gdXNl
IFdlYiBpbnN0ZWFkLgogY2xhc3MgTW9ja0Jyb3dzZXIob2JqZWN0KToKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfZXhwb3J0ZXIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwNTY2YjBkYzBhYzgx
ZDdhOWRjNTJmNzYyMDc0NmE0MmE5MjgwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyLnB5CkBAIC0wLDAgKzEsMjc4IEBACisKKyMg
Q29weXJpZ2h0IChjKSAyMDE3LCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiCisgVGhpcyBzY3JpcHQg
dXBsb2FkcyBjaGFuZ2VzIG1hZGUgdG8gVzNDIHdlYi1wbGF0Zm9ybS10ZXN0cyB0ZXN0cy4KKyIi
IgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCB0
aW1lCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0IGltcG9ydCBDaGVja291dAorZnJv
bSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtLmdpdCBpbXBvcnQgR2l0Citmcm9tIHdlYmtp
dHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVn
emlsbGEgaW1wb3J0IEJ1Z3ppbGxhCitmcm9tIHdlYmtpdHB5LmNvbW1vbi53ZWJraXRfZmluZGVy
IGltcG9ydCBXZWJLaXRGaW5kZXIKK2Zyb20gd2Via2l0cHkudG9vbC5tYWluIGltcG9ydCBXZWJL
aXRQYXRjaAorZnJvbSB3ZWJraXRweS53M2Mud3B0X2dpdGh1YiBpbXBvcnQgV1BUR2l0SHViCisK
K19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBUZXN0RXhwb3J0
ZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBvcHRpb25zLCBnaXRD
bGFzcz1HaXQsIGJ1Z3ppbGxhQ2xhc3M9QnVnemlsbGEsIFdQVEdpdEh1YkNsYXNzPVdQVEdpdEh1
Yik6CisgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0g
PSBob3N0LmZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucworCisgICAg
ICAgIHNlbGYuYnVnemlsbGEgPSBidWd6aWxsYUNsYXNzKCkKKyAgICAgICAgc2VsZi53ZWJLaXRH
aXQgPSBnaXRDbGFzcygnLicsIE5vbmUsIGV4ZWN1dGl2ZT1zZWxmLl9ob3N0LmV4ZWN1dGl2ZSwg
ZmlsZXN5c3RlbT1zZWxmLl9maWxlc3lzdGVtKQorICAgICAgICBzZWxmLmJ1Z19pZCA9IG9wdGlv
bnMuYnVnX2lkCisgICAgICAgIGlmIG5vdCBzZWxmLmJ1Z19pZDoKKyAgICAgICAgICAgIGlmIG9w
dGlvbnMuYXR0YWNobWVudF9pZDoKKyAgICAgICAgICAgICAgICBzZWxmLmJ1Z19pZCA9IHNlbGYu
YnVnemlsbGEuYnVnX2lkX2Zvcl9hdHRhY2htZW50X2lkKG9wdGlvbnMuYXR0YWNobWVudF9pZCkK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5idWdfaWQgPSBDaGVja291
dChzZWxmLndlYktpdEdpdCkuYnVnX2lkX2Zvcl90aGlzX2NvbW1pdChvcHRpb25zLmdpdF9jb21t
aXQpCisKKyAgICAgICAgc2VsZi5yZXBvc2l0b3J5X2RpcmVjdG9yeSA9IG9wdGlvbnMucmVwb3Np
dG9yeV9kaXJlY3RvcnkKKworICAgICAgICBzZWxmLnVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFt
ZQorICAgICAgICBpZiBub3Qgc2VsZi51c2VybmFtZToKKyAgICAgICAgICAgIHNlbGYudXNlcm5h
bWUgPSBvcy5lbnZpcm9uLmdldCgnR0lUSFVCX1dQVF9VU0VSJykKKyAgICAgICAgICAgIGlmIG5v
dCBzZWxmLnVzZXJuYW1lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk1pc3Np
bmcgR2l0SHViIHVzZXJuYW1lLiIpCisKKyAgICAgICAgc2VsZi50b2tlbiA9IG9wdGlvbnMudG9r
ZW4KKyAgICAgICAgaWYgbm90IHNlbGYudG9rZW46CisgICAgICAgICAgICBzZWxmLnRva2VuID0g
b3MuZW52aXJvbi5nZXQoJ0dJVEhVQl9XUFRfQVVUSCcpCisgICAgICAgICAgICBpZiBub3Qgc2Vs
Zi50b2tlbjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJNaXNzaW5nIEdpdEh1
YiB0b2tlbiIpCisKKyAgICAgICAgc2VsZi5naXRIdWIgPSBXUFRHaXRIdWJDbGFzcyhzZWxmLl9o
b3N0LCBzZWxmLnVzZXJuYW1lLCBzZWxmLnRva2VuKQorCisgICAgICAgIHNlbGYuYnJhbmNoX25h
bWUgPSAid2Via2l0LSIgKyBzdHIoc2VsZi5idWdfaWQpCisgICAgICAgIHNlbGYuYnVnemlsbGFf
dXJsID0gImh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0iICsgc3RyKHNl
bGYuYnVnX2lkKQorICAgICAgICBzZWxmLmNvbW1pdF90aXRsZSA9ICdXZWJLaXQgZXhwb3J0IG9m
ICcgKyBzZWxmLmJ1Z3ppbGxhX3VybAorCisgICAgICAgIHNlbGYucmVwb3NpdG9yeV9yZW1vdGUg
PSBvcHRpb25zLnJlcG9zaXRvcnlfcmVtb3RlCisgICAgICAgIGlmIG5vdCBzZWxmLnJlcG9zaXRv
cnlfcmVtb3RlOgorICAgICAgICAgICAgc2VsZi5yZXBvc2l0b3J5X3JlbW90ZSA9IHNlbGYudXNl
cm5hbWUKKworICAgICAgICBzZWxmLnJlcG9zaXRvcnlfb3JpZ2luX3VybCA9ICJodHRwczovLyIg
KyBzZWxmLnVzZXJuYW1lICsgIkBnaXRodWIuY29tLyIgKyBzZWxmLnVzZXJuYW1lICsgIi93ZWIt
cGxhdGZvcm0tdGVzdHMuZ2l0IgorICAgICAgICBzZWxmLnJlcG9zaXRvcnlfcHVibGljX3VybCA9
ICJodHRwczovL2dpdGh1Yi5jb20vIiArIHNlbGYudXNlcm5hbWUgKyAiL3dlYi1wbGF0Zm9ybS10
ZXN0cy5naXQiIGlmIG5vdCBvcHRpb25zLnJlcG9zaXRvcnlfcHVibGljX3VybCBlbHNlIG9wdGlv
bnMucmVwb3NpdG9yeV9wdWJsaWNfdXJsCisgICAgICAgIHNlbGYucmVwb3NpdG9yeV9wdWJsaWNf
dHJlZV91cmwgPSBzZWxmLnJlcG9zaXRvcnlfcHVibGljX3VybFs6LTRdICsgIi90cmVlLyIKKwor
ICAgICAgICBpZiBub3Qgc2VsZi5yZXBvc2l0b3J5X2RpcmVjdG9yeToKKyAgICAgICAgICAgIHdl
YmtpdF9maW5kZXIgPSBXZWJLaXRGaW5kZXIoc2VsZi5fZmlsZXN5c3RlbSkKKyAgICAgICAgICAg
IHNlbGYucmVwb3NpdG9yeV9kaXJlY3RvcnkgPSB3ZWJraXRfZmluZGVyLnBhdGhfZnJvbV93ZWJr
aXRfYmFzZSgnV2ViS2l0QnVpbGQnLCAndzNjLXRlc3RzJywgJ3dlYi1wbGF0Zm9ybS10ZXN0cycp
CisKKyAgICAgICAgc2VsZi5naXQgPSBzZWxmLl9pbml0X3JlcG9zaXRvcnkoImh0dHBzOi8vZ2l0
aHViLmNvbS93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzLmdpdCIsIHNlbGYucmVwb3NpdG9yeV9kaXJl
Y3RvcnksIGdpdENsYXNzKQorICAgICAgICBzZWxmLmNsZWFuKCkKKworICAgIGRlZiBfaW5pdF9y
ZXBvc2l0b3J5KHNlbGYsIHVybCwgcmVwb3NpdG9yeV9kaXJlY3RvcnksIGdpdENsYXNzKToKKyAg
ICAgICAgZ2l0ID0gTm9uZQorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMo
cmVwb3NpdG9yeV9kaXJlY3RvcnkpOgorICAgICAgICAgICAgX2xvZy5pbmZvKCdDbG9uaW5nICVz
IGludG8gJXMuLi4nICUgKHVybCwgcmVwb3NpdG9yeV9kaXJlY3RvcnkpKQorICAgICAgICAgICAg
Z2l0Q2xhc3MuY2xvbmUodXJsLCByZXBvc2l0b3J5X2RpcmVjdG9yeSwgc2VsZi5faG9zdC5leGVj
dXRpdmUpCisgICAgICAgIGdpdCA9IGdpdENsYXNzKHJlcG9zaXRvcnlfZGlyZWN0b3J5LCBOb25l
LCBleGVjdXRpdmU9c2VsZi5faG9zdC5leGVjdXRpdmUsIGZpbGVzeXN0ZW09c2VsZi5fZmlsZXN5
c3RlbSkKKyAgICAgICAgX2xvZy5pbmZvKCdGZXRjaGluZyB3ZWItcGxhdGZvcm0tdGVzdHMgcmVw
b3NpdG9yeScpCisgICAgICAgIGdpdC5mZXRjaCgpCisgICAgICAgIHJldHVybiBnaXQKKworICAg
IGRlZiBkb3dubG9hZF9hbmRfY29tbWl0X3BhdGNoKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm9w
dGlvbnMuZ2l0X2NvbW1pdDoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcGF0
Y2hPcHRpb25zID0gWyItLW5vLXVwZGF0ZSIsICItLW5vLWNsZWFuIiwgIi0tbG9jYWwtY29tbWl0
Il0KKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLmF0dGFjaG1lbnRfaWQ6CisgICAgICAgICAgICBw
YXRjaE9wdGlvbnMuaW5zZXJ0KCJhcHBseS1hdHRhY2htZW50IikKKyAgICAgICAgICAgIHBhdGNo
T3B0aW9ucy5hcHBlbmQoc2VsZi5vcHRpb25zLmF0dGFjaG1lbnRfaWQpCisgICAgICAgIGVsaWYg
c2VsZi5vcHRpb25zLmJ1Z19pZDoKKyAgICAgICAgICAgIHBhdGNoT3B0aW9ucy5pbnNlcnQoImFw
cGx5LWZyb20tYnVnIikKKyAgICAgICAgICAgIHBhdGNoT3B0aW9ucy5hcHBlbmQoc2VsZi5vcHRp
b25zLmJ1Z19pZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
Ik5vIGNvbW1pdCwgYnVnIGlkIG9yIGF0dGFjaG1lbnQgaWQgcHJvdmlkZWQiKQorICAgICAgICBy
YWlzZSBUeXBlRXJyb3IoIlJldHJpZXZhbCBvZiBwYXRjaCBmcm9tIGJ1Z3ppbGxhIGlzIG5vdCB5
ZXQgaW1wbGVtZW50ZWQiKQorICAgICAgICAjIHdlYktpdFBhdGNoID0gV2ViS2l0UGF0Y2goc2Vs
Zi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChfX2ZpbGVfXyksICIu
LiIsICIuLiIpKQorICAgICAgICAjKG9wdGlvbnMsIGFyZ3MpID0gd2ViS2l0UGF0Y2gucGFyc2Vf
YXJncyhwYXRjaE9wdGlvbnMpCisgICAgICAgICNyZXR1cm4gd2ViS2l0UGF0Y2guY2hlY2tfYXJn
dW1lbnRzX2FuZF9leGVjdXRlKG9wdGlvbnMsIGFyZ3MpCisKKyAgICBkZWYgY2xlYW4oc2VsZik6
CisgICAgICAgIF9sb2cuaW5mbygnQ2xlYW5pbmcgd2ViLXBsYXRmb3JtLXRlc3RzIG1hc3RlciBi
cmFuY2gnKQorICAgICAgICBzZWxmLmdpdC5jaGVja291dCgnbWFzdGVyJykKKyAgICAgICAgc2Vs
Zi5naXQucmVzZXRfaGFyZCgnb3JpZ2luL21hc3RlcicpCisgICAgICAgIGlmIG5vdCBzZWxmLm9w
dGlvbnMuZ2l0X2NvbW1pdDoKKyAgICAgICAgICAgIHNlbGYud2ViS2l0R2l0LnJlc2V0X2hhcmQo
J0hFQUR+MScpCisKKyAgICBkZWYgY3JlYXRlX2JyYW5jaF93aXRoX3BhdGNoKHNlbGYsIHBhdGNo
KToKKyAgICAgICAgX2xvZy5pbmZvKCdBcHBseWluZyBwYXRjaCB0byB3ZWItcGxhdGZvcm0tdGVz
dHMgYnJhbmNoICcgKyBzZWxmLmJyYW5jaF9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBzZWxmLmdpdC5jaGVja291dF9uZXdfYnJhbmNoKHNlbGYuYnJhbmNoX25hbWUpCisgICAgICAg
IGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIF9sb2cud2FybmluZyhlKQorICAg
ICAgICAgICAgX2xvZy5pbmZvKCJSZXRyeWluZyB0byBjcmVhdGUgdGhlIGJyYW5jaCIpCisgICAg
ICAgICAgICBzZWxmLmdpdC5kZWxldGVfYnJhbmNoKHNlbGYuYnJhbmNoX25hbWUpCisgICAgICAg
ICAgICBzZWxmLmdpdC5jaGVja291dF9uZXdfYnJhbmNoKHNlbGYuYnJhbmNoX25hbWUpCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZ2l0LmFtKFtwYXRjaCwgJy0tZXhjbHVkZScsICcq
LWV4cGVjdGVkLnR4dCddKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAg
ICAgICBfbG9nLndhcm5pbmcoZSkKKyAgICAgICAgICAgIHNlbGYuZ2l0LmFtKFsnLS1hYm9ydCdd
KQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYuZ2l0LmNvbW1pdChbJy0t
YW1lbmQnLCAnLW0nLCAnIicgKyBzZWxmLmNvbW1pdF90aXRsZSArICciJ10pCisgICAgICAgIHJl
dHVybiBUcnVlCisKKyAgICBkZWYgcHVzaF90b19wdWJsaWNfcmVwb3NpdG9yeShzZWxmKToKKyAg
ICAgICAgc2VsZi5jcmVhdGVfdXBsb2FkX3JlbW90ZV9pZl9uZWVkZWQoKQorICAgICAgICBfbG9n
LmluZm8oJ1B1c2hpbmcgYnJhbmNoICcgKyBzZWxmLmJyYW5jaF9uYW1lICsgIiB0byAiICsgc2Vs
Zi5yZXBvc2l0b3J5X3B1YmxpY190cmVlX3VybCArIHNlbGYuYnJhbmNoX25hbWUpCisgICAgICAg
IHNlbGYuZ2l0LnB1c2goW3NlbGYucmVwb3NpdG9yeV9yZW1vdGUsIHNlbGYuYnJhbmNoX25hbWUs
ICctZiddKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIG1ha2VfcHVsbF9yZXF1ZXN0
KHNlbGYpOgorICAgICAgICBfbG9nLmluZm8oJ01ha2luZyBwdWxsIHJlcXVlc3QnKQorICAgICAg
ICBkZXNjcmlwdGlvbiA9IHNlbGYuYnVnemlsbGEuZmV0Y2hfYnVnX2RpY3Rpb25hcnkoc2VsZi5i
dWdfaWQpWyJ0aXRsZSJdCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5naXRIdWIuY3JlYXRlX3By
KHNlbGYucmVwb3NpdG9yeV9yZW1vdGUgKyAnOicgKyBzZWxmLmJyYW5jaF9uYW1lLCBzZWxmLmNv
bW1pdF90aXRsZSwgZGVzY3JpcHRpb24pCisgICAgICAgIGh0bWxfdXJsID0gcmVzcG9uc2VbImh0
bWxfdXJsIl0KKyAgICAgICAgaWYgc2VsZi5idWdfaWQ6CisgICAgICAgICAgICBzZWxmLmJ1Z3pp
bGxhLnBvc3RfY29tbWVudF90b19idWcoc2VsZi5idWdfaWQsICJTdWJtaXR0ZWQgd2ViLXBsYXRm
b3JtLXRlc3RzIHB1bGwgcmVxdWVzdDogIiArIGh0bWxfdXJsKQorCisgICAgZGVmIGRlbGV0ZV9s
b2NhbF9icmFuY2goc2VsZik6CisgICAgICAgIF9sb2cuaW5mbygnQ2xlYW5pbmcgYnJhbmNoJykK
KyAgICAgICAgc2VsZi5naXQuY2hlY2tvdXQoJ21hc3RlcicpCisgICAgICAgIHNlbGYuZ2l0LmRl
bGV0ZV9icmFuY2goc2VsZi5icmFuY2hfbmFtZSkKKworICAgIGRlZiBjcmVhdGVfZ2l0X3BhdGNo
KHNlbGYpOgorICAgICAgICBwYXRjaF9maWxlID0gJy4vcGF0Y2gudGVtcC4nICsgc3RyKHRpbWUu
Y2xvY2soKSkKKyAgICAgICAgZ2l0X2NvbW1pdCA9ICItMSIgaWYgbm90IHNlbGYub3B0aW9ucy5n
aXRfY29tbWl0IGVsc2Ugc2VsZi5vcHRpb25zLmdpdF9jb21taXQgKyAifjEuLiIgKyBzZWxmLm9w
dGlvbnMuZ2l0X2NvbW1pdAorICAgICAgICBwYXRjaF9kYXRhID0gc2VsZi53ZWJLaXRHaXQuZm9y
bWF0X3BhdGNoKFtnaXRfY29tbWl0LCAnTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cycsICctLXN0ZG91dCddKQorCisgICAgICAgIGlmIG5vdCBwYXRjaF9kYXRhOgor
ICAgICAgICAgICAgX2xvZy5pbmZvKCdObyBjaGFuZ2VzIHRvIHVwc3RyZWFtJykKKyAgICAgICAg
ICAgIHJldHVybiAnJworICAgICAgICBwYXRjaF9kYXRhID0gcGF0Y2hfZGF0YS5yZXBsYWNlKCdM
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzLycsICcnKQorICAgICAg
ICBwYXRjaF9maWxlID0gc2VsZi5fZmlsZXN5c3RlbS5hYnNwYXRoKHBhdGNoX2ZpbGUpCisgICAg
ICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHBhdGNoX2ZpbGUsIHBhdGNoX2Rh
dGEpCisgICAgICAgIHJldHVybiBwYXRjaF9maWxlCisKKyAgICBkZWYgY3JlYXRlX3VwbG9hZF9y
ZW1vdGVfaWZfbmVlZGVkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJlcG9zaXRvcnlfcmVtb3Rl
IGluIHNlbGYuZ2l0LnJlbW90ZShbXSk6CisgICAgICAgICAgICBfbG9nLmluZm8oIldpbGwgcHVz
aCBicmFuY2ggdG8gIiArIHNlbGYuZ2l0LnJlbW90ZShbImdldC11cmwiLCBzZWxmLnJlcG9zaXRv
cnlfcmVtb3RlXSkuc3RyaXAoKSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBfbG9nLmlu
Zm8oIldpbGwgcHVzaCBicmFuY2ggdG8gIiArIHNlbGYucmVwb3NpdG9yeV9vcmlnaW5fdXJsKQor
ICAgICAgICBzZWxmLmdpdC5yZW1vdGUoWyJhZGQiLCBzZWxmLnJlcG9zaXRvcnlfcmVtb3RlLCBz
ZWxmLnJlcG9zaXRvcnlfb3JpZ2luX3VybF0pCisKKyAgICBkZWYgZG9fZXhwb3J0KHNlbGYpOgor
ICAgICAgICBpZiBub3Qgc2VsZi5kb3dubG9hZF9hbmRfY29tbWl0X3BhdGNoKCk6CisgICAgICAg
ICAgICBfbG9nLmVycm9yKCJVbmFibGUgdG8gZG93bmxvYWQgYW5kIGFwcGx5IHRoZSBwYXRjaCB0
byBleHBvcnQiKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZ2l0X3BhdGNoX2ZpbGUg
PSBzZWxmLmNyZWF0ZV9naXRfcGF0Y2goKQorCisgICAgICAgIGlmIG5vdCBnaXRfcGF0Y2hfZmls
ZToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIlVuYWJsZSB0byBhcHBseSB0aGUgcGF0Y2ggdG8g
d2ViLXBsYXRmb3JtLXRlc3RzIHJlcG9zaXRvcnkiKQorICAgICAgICAgICAgcmV0dXJuCisKKyAg
ICAgICAgaWYgbm90IHNlbGYuY3JlYXRlX2JyYW5jaF93aXRoX3BhdGNoKGdpdF9wYXRjaF9maWxl
KToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIkNhbm5vdCBjcmVhdGUgYnJhbmNoIGZyb20gdGhl
IHBhdGNoIikKKyAgICAgICAgICAgIHNlbGYuZGVsZXRlX2xvY2FsX2JyYW5jaCgpCisgICAgICAg
ICAgICByZXR1cm4KKworICAgICAgICBpZiBnaXRfcGF0Y2hfZmlsZToKKyAgICAgICAgICAgIHNl
bGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKGdpdF9wYXRjaF9maWxlKQorCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIGlmIHNlbGYucHVzaF90b19wdWJsaWNfcmVwb3NpdG9yeSgpOgorICAgICAgICAg
ICAgICAgIGlmIHNlbGYub3B0aW9ucy5jcmVhdGVfcHVsbF9yZXF1ZXN0OgorICAgICAgICAgICAg
ICAgICAgICBzZWxmLm1ha2VfcHVsbF9yZXF1ZXN0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgIHNlbGYuZGVsZXRlX2xvY2FsX2JyYW5jaCgpCisgICAgICAgICAgICBzZWxmLmNsZWFu
KCkKKworCitkZWYgcGFyc2VfYXJncyhhcmdzKToKKyAgICBkZXNjcmlwdGlvbiA9ICIiIlNjcmlw
dCB0byBnZW5lcmF0ZSBhIHB1bGwgcmVxdWVzdCB0byBXM0Mgd2ViLXBsYXRmb3JtLXRlc3RzIHJl
cG9zaXRvcnkKKyAgICAnVG9vbHMvU2NyaXB0cy9leHBvcnQtdzNjLXRlc3QtY2hhbmdlcyAtZyBI
RUFEIC1iIFhZWicgd2lsbCBkbyB0aGUgZm9sbG93aW5nOgorICAgIC0gQ2xvbmUgd2ViLXBsYXRm
b3JtLXRlc3RzIHJlcG9zaXRvcnkgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgc2V0IGl0IHVwIGZv
ciBwdXNoaW5nIGJyYW5jaGVzLgorICAgIC0gR2F0aGVyIFdlYktpdCBidWcgaWQgWFlaIGJ1ZyBh
bmQgY2hhbmdlcyB0byBhcHBseSB0byB3ZWItcGxhdGZvcm0tdGVzdHMgcmVwb3NpdG9yeSBiYXNl
ZCBvbiB0aGUgSEVBRCBjb21taXQKKyAgICAtIENyZWF0ZSBhIHJlbW90ZSBicmFuY2ggbmFtZWQg
d2Via2l0LVhZWiBvbiBodHRwczovL2dpdGh1Yi5jb20vVVNFUk5BTUUvd2ViLXBsYXRmb3JtLXRl
c3RzLmdpdCByZXBvc2l0b3J5IGJhc2VkIG9uIHRoZSBsb2NhbGx5IGFwcGxpZWQgcGF0Y2guCisg
ICAgLSAgICBVU0VSTkFNRSBtYXkgYmUgc2V0IHVzaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJs
ZSBHSVRIVUJfV1BUX1VTRVIgb3IgYXMgYSBjb21tYW5kIGxpbmUgb3B0aW9uLgorICAgIC0gICAg
R2l0aHViIGNyZWRlbnRpYWwgbWF5IGJlIHNldCB1c2luZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFi
bGUgR0lUSFVCX1dQVF9BVVRIIG9yIGFzIGEgY29tbWFuZCBsaW5lIG9wdGlvbi4gKFBsZWFzZSBw
cm92aWRlIGEgdmFsaWQgR2l0SHViICdQZXJzb25hbCBhY2Nlc3MgdG9rZW4nIHdpdGggJ3JlcG8n
IGFzIHNjb3BlKQorICAgIC0gTWFrZSB0aGUgcmVsYXRlZCBwdWxsIHJlcXVlc3Qgb24gaHR0cHM6
Ly9naXRodWIuY29tL3czYy93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0IHJlcG9zaXRvcnkuCisgICAg
LSBDbGVhbiB0aGUgbG9jYWwgR2l0IHJlcG9zaXRvcnkKKyAgICBOb3RlczoKKyAgICAtIEl0IGlz
IHNhZmVyIHRvIHByb3ZpZGUgYSBidWcgaWQgdXNpbmcgLWIgb3B0aW9uIChidWcgaWQgZnJvbSBh
IGdpdCBjb21taXQgaXMgbm90IGFsd2F5cyB3b3JraW5nKS4KKyAgICAtIEFzIGEgZHJ5IHJ1biwg
b25lIGNhbiBzdGFydCBieSBydW5uaW5nIHRoZSBzY3JpcHQgd2l0aG91dCAtYy4gVGhpcyB3aWxs
IG9ubHkgY3JlYXRlIHRoZSBicmFuY2ggb24gdGhlIHVzZXIgcHVibGljIEdpdEh1YiByZXBvc2l0
b3J5LgorICAgIEZJWE1FOgorICAgIC0gQWRkIGEgbGFiZWwgb24gZ2l0aHViIGlzc3VlcworICAg
IC0gVGhlIHNjcmlwdCBpcyBub3QgeWV0IGFibGUgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIHB1bGwg
cmVxdWVzdAorICAgIC0gQWRkIHRoZSBnaXRodWIgaXNzdWUgVVJMIHRvICdTZWUgYWxzbycKKyAg
ICAtIE5lZWQgYSB3YXkgdG8gbW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHB1bCByZXF1ZXN0
IHNvIHRoYXQgc3RhdHVzIG9mIGFsbCBwZW5kaW5nIHB1bGwgcmVxdWVzdHMgY2FuIGJlIGRvbmUg
YXQgaW1wb3J0IHRpbWUuCisgICAgIiIiCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQ
YXJzZXIocHJvZz0nZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMgLi4uJywgZGVzY3JpcHRpb249ZGVz
Y3JpcHRpb24sIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3Jt
YXR0ZXIpCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZycsICctLWdpdC1jb21taXQnLCBk
ZXN0PSdnaXRfY29tbWl0JywgZGVmYXVsdD1Ob25lLCBoZWxwPSdHaXQgY29tbWl0IHRvIGFwcGx5
JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJ1ZycsIGRlc3Q9J2J1Z19pZCcs
IGRlZmF1bHQ9Tm9uZSwgaGVscD0nQnVnIElEIHRvIHNlYXJjaCBmb3IgcGF0Y2gnKQorICAgIHBh
cnNlci5hZGRfYXJndW1lbnQoJy1hJywgJy0tYXR0YWNobWVudCcsIGRlc3Q9J2F0dGFjaG1lbnRf
aWQnLCBkZWZhdWx0PU5vbmUsIGhlbHA9J0F0dGFjaG1lbnQgSUQgdG8gc2VhcmNoIGZvciBwYXRj
aCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW4nLCAnLS1uYW1lJywgZGVzdD0ndXNlcm5h
bWUnLCBkZWZhdWx0PU5vbmUsIGhlbHA9J2dpdGh1YiB1c2VyIG5hbWUgaWYgR0lUSFVCX1dQVF9V
U0VSIGlzIG5vdCBkZWZpbmVkJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdCcsICctLXRv
a2VuJywgZGVzdD0ndG9rZW4nLCBkZWZhdWx0PU5vbmUsIGhlbHA9J2dpdGh1YiB0b2tlbiwgbmVl
ZGVkIGZvciBjcmVhdGluZyBwdWxsIHJlcXVlc3RzIG9ubHkgaWYgR0lUSFVCX1dQVF9BVVRIIGlz
IG5vdCBkZWZpbmVkJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdScsICctLXVybCcsIGRl
c3Q9J3JlcG9zaXRvcnlfcHVibGljX3VybCcsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nUHVibGljIHJl
cG9zaXRvcnkgdXJsJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcicsICctLXJlbW90ZScs
IGRlc3Q9J3JlcG9zaXRvcnlfcmVtb3RlJywgZGVmYXVsdD1Ob25lLCBoZWxwPSdyZXBvc2l0b3J5
IG9yaWdpbiB0byB1c2UgdG8gcHVzaCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAn
LS1yZXBvc2l0b3J5JywgZGVzdD0ncmVwb3NpdG9yeV9kaXJlY3RvcnknLCBkZWZhdWx0PU5vbmUs
IGhlbHA9J3JlcG9zaXRvcnkgZGlyZWN0b3J5JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCct
YycsICctLWNyZWF0ZS1wcicsIGRlc3Q9J2NyZWF0ZV9wdWxsX3JlcXVlc3QnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdjcmVhdGUgcHVsbCByZXF1ZXN0IHRvIHcz
YyB3ZWItcGxhdGZvcm0tdGVzdHMnKQorCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJz
ZV9rbm93bl9hcmdzKGFyZ3MpCisKKyAgICByZXR1cm4gb3B0aW9ucworCisKK2RlZiBjb25maWd1
cmVfbG9nZ2luZygpOgorICAgIGNsYXNzIExvZ0hhbmRsZXIobG9nZ2luZy5TdHJlYW1IYW5kbGVy
KToKKworICAgICAgICBkZWYgZm9ybWF0KHNlbGYsIHJlY29yZCk6CisgICAgICAgICAgICBpZiBy
ZWNvcmQubGV2ZWxubyA+IGxvZ2dpbmcuSU5GTzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVz
OiAlcyIgJSAocmVjb3JkLmxldmVsbmFtZSwgcmVjb3JkLmdldE1lc3NhZ2UoKSkKKyAgICAgICAg
ICAgIHJldHVybiByZWNvcmQuZ2V0TWVzc2FnZSgpCisKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdl
dExvZ2dlcigpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBoYW5kbGVy
ID0gTG9nSGFuZGxlcigpCisgICAgaGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAg
bG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKyAgICByZXR1cm4gaGFuZGxlcgorCisKK2RlZiBt
YWluKF9hcmd2LCBfc3Rkb3V0LCBfc3RkZXJyKToKKyAgICBvcHRpb25zID0gcGFyc2VfYXJncyhf
YXJndikKKworICAgIGNvbmZpZ3VyZV9sb2dnaW5nKCkKKworICAgIGlmIG5vdCBvcHRpb25zLmJ1
Z19pZCBhbmQgbm90IG9wdGlvbnMuYXR0YWNobWVudF9pZCBhbmQgbm90IG9wdGlvbnMuZ2l0X2Nv
bW1pdDoKKyAgICAgICAgX2xvZy5lcnJvcigiUGxlYXNlIHByb3ZpZGUgZWl0aGVyIGEgYnVnIElE
LCBhbiBhdHRhY2htZW50IElEIG9yIGEgbG9jYWwgZ2l0IGNvbW1pdCB0byBlbmFibGUgZ2V0dGlu
ZyB0aGUgY2hhbmdlcyB0byBleHBvcnQiKQorICAgICAgICByZXR1cm4KKworICAgIHRlc3RfZXhw
b3J0ZXIgPSBUZXN0RXhwb3J0ZXIoSG9zdCgpLCBvcHRpb25zKQorCisgICAgdGVzdF9leHBvcnRl
ci5kb19leHBvcnQoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvdGVz
dF9leHBvcnRlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3Rf
ZXhwb3J0ZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY2YTQ3ZDk0MjE3OTk3YTUwOTQ3MTdj
NDY3OTIxNmIxMDUyOTU2MQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdzNjL3Rlc3RfZXhwb3J0ZXJfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwxMTQgQEAKKworIyBD
b3B5cmlnaHQgKGMpIDIwMTcsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QKKwor
ZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdF9tb2NrIGltcG9ydCBNb2NrSG9zdAorZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0K
K2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4
ZWN1dGl2ZTIKK2Zyb20gd2Via2l0cHkudzNjLnRlc3RfZXhwb3J0ZXIgaW1wb3J0IFRlc3RFeHBv
cnRlciwgcGFyc2VfYXJncworZnJvbSB3ZWJraXRweS53M2Mud3B0X2dpdGh1Yl9tb2NrIGltcG9y
dCBNb2NrV1BUR2l0SHViCisKKworY2xhc3MgVGVzdEV4cG9ydGVyVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CisKKyAgICBjbGFzcyBNb2NrQnVnemlsbGEob2JqZWN0KToKKyAgICAgICAgZGVmIF9f
aW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5jYWxscyA9IFtdCisKKyAgICAgICAgZGVm
IGZldGNoX2J1Z19kaWN0aW9uYXJ5KHNlbGYsIGlkKToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMu
YXBwZW5kKCdmZXRjaCBidWcgJyArIGlkKQorICAgICAgICAgICAgcmV0dXJuIHsidGl0bGUiOiAi
bXkgYnVnIHRpdGxlIn0KKworICAgICAgICBkZWYgcG9zdF9jb21tZW50X3RvX2J1ZyhzZWxmLCBp
ZCwgY29tbWVudCk6CisgICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgncG9zdCBjb21tZW50
IHRvIGJ1ZyAnICsgaWQgKyAnIDogJyArIGNvbW1lbnQpCisgICAgICAgICAgICByZXR1cm4gVHJ1
ZQorCisgICAgY2xhc3MgTW9ja0dpdChvYmplY3QpOgorICAgICAgICBAY2xhc3NtZXRob2QKKyAg
ICAgICAgZGVmIGNsb25lKGNscywgdXJsLCBkaXJlY3RvcnksIGV4ZWN1dGl2ZT1Ob25lKToKKyAg
ICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcG9z
aXRvcnlfZGlyZWN0b3J5LCBwYXRjaF9kaXJlY3RvcmllcywgZXhlY3V0aXZlLCBmaWxlc3lzdGVt
KToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMgPSBbcmVwb3NpdG9yeV9kaXJlY3RvcnldCisKKyAg
ICAgICAgZGVmIGZldGNoKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ2Zl
dGNoJykKKworICAgICAgICBkZWYgY2hlY2tvdXQoc2VsZiwgYnJhbmNoKToKKyAgICAgICAgICAg
IHNlbGYuY2FsbHMuYXBwZW5kKCdjaGVja291dCAnICsgYnJhbmNoKQorCisgICAgICAgIGRlZiBy
ZXNldF9oYXJkKHNlbGYsIGNvbW1pdCk6CisgICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgn
cmVzZXQgaGFyZCAnICsgY29tbWl0KQorCisgICAgICAgIGRlZiBwdXNoKHNlbGYsIG9wdGlvbnMp
OgorICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ3B1c2ggJyArICcgJy5qb2luKG9wdGlv
bnMpKQorCisgICAgICAgIGRlZiBmb3JtYXRfcGF0Y2goc2VsZiwgb3B0aW9ucyk6CisgICAgICAg
ICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnZm9ybWF0IHBhdGNoICcgKyAnICcuam9pbihvcHRpb25z
KSkKKyAgICAgICAgICAgIHJldHVybiAnZm9ybWF0dGVkIHBhdGNoIHdpdGggY2hhbmdlcyBkb25l
IHRvIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdGVzdDEuaHRt
bCcKKworICAgICAgICBkZWYgZGVsZXRlX2JyYW5jaChzZWxmLCBicmFuY2hfbmFtZSk6CisgICAg
ICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnZGVsZXRlIGJyYW5jaCAnICsgYnJhbmNoX25hbWUp
CisKKyAgICAgICAgZGVmIGNoZWNrb3V0X25ld19icmFuY2goc2VsZiwgYnJhbmNoX25hbWUpOgor
ICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ2NoZWNrb3V0IG5ldyBicmFuY2ggJyArIGJy
YW5jaF9uYW1lKQorCisgICAgICAgIGRlZiBhbShzZWxmLCBvcHRpb25zKToKKyAgICAgICAgICAg
ICMgZmlsdGVyaW5nIG9wdGlvbnNbMF0gYXMgaXQgY2hhbmdlcyBmb3IgZXZlcnkgcnVuCisgICAg
ICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnYW0gcGF0Y2gudGVtcCAnICsgJyAnLmpvaW4ob3B0
aW9uc1sxOl0pKQorCisgICAgICAgIGRlZiBjb21taXQoc2VsZiwgb3B0aW9ucyk6CisgICAgICAg
ICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnY29tbWl0ICcgKyAnICcuam9pbihvcHRpb25zKSkKKwor
ICAgICAgICBkZWYgcmVtb3RlKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICAgICAgc2VsZi5jYWxs
cy5hcHBlbmQoJ3JlbW90ZSAnICsgJyAnLmpvaW4ob3B0aW9ucykpCisgICAgICAgICAgICByZXR1
cm4gW10KKworICAgIGRlZiB0ZXN0X2V4cG9ydChzZWxmKToKKyAgICAgICAgaG9zdCA9IE1vY2tI
b3N0KCkKKyAgICAgICAgaG9zdC5leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihleGNlcHRpb249
T1NFcnJvcigpKQorICAgICAgICBob3N0LmZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbSgpCisK
KyAgICAgICAgb3B0aW9ucyA9IHBhcnNlX2FyZ3MoWyd0ZXN0X2V4cG9ydGVyLnB5JywgJy1nJywg
J0hFQUQnLCAnLWInLCAnMTIzNCcsICctYycsICctbicsICdVU0VSJywgJy10JywgJ1RPS0VOJ10p
CisgICAgICAgIGV4cG9ydGVyID0gVGVzdEV4cG9ydGVyKGhvc3QsIG9wdGlvbnMsIFRlc3RFeHBv
cnRlclRlc3QuTW9ja0dpdCwgVGVzdEV4cG9ydGVyVGVzdC5Nb2NrQnVnemlsbGEsIE1vY2tXUFRH
aXRIdWIpCisgICAgICAgIGV4cG9ydGVyLmRvX2V4cG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGV4cG9ydGVyLmdpdEh1Yi5jYWxscywgWydjcmVhdGVfcHInXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoZXhwb3J0ZXIuZ2l0LmNhbGxzLCBbCisgICAgICAgICAgICAnL21vY2st
Y2hlY2tvdXQvV2ViS2l0QnVpbGQvdzNjLXRlc3RzL3dlYi1wbGF0Zm9ybS10ZXN0cycsCisgICAg
ICAgICAgICAnZmV0Y2gnLAorICAgICAgICAgICAgJ2NoZWNrb3V0IG1hc3RlcicsCisgICAgICAg
ICAgICAncmVzZXQgaGFyZCBvcmlnaW4vbWFzdGVyJywKKyAgICAgICAgICAgICdjaGVja291dCBu
ZXcgYnJhbmNoIHdlYmtpdC0xMjM0JywKKyAgICAgICAgICAgICdhbSBwYXRjaC50ZW1wIC0tZXhj
bHVkZSAqLWV4cGVjdGVkLnR4dCcsCisgICAgICAgICAgICAnY29tbWl0IC0tYW1lbmQgLW0gIldl
YktpdCBleHBvcnQgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MzQiJywKKyAgICAgICAgICAgICdyZW1vdGUgJywKKyAgICAgICAgICAgICdyZW1vdGUgYWRkIFVT
RVIgaHR0cHM6Ly9VU0VSQGdpdGh1Yi5jb20vVVNFUi93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0JywK
KyAgICAgICAgICAgICdwdXNoIFVTRVIgd2Via2l0LTEyMzQgLWYnLAorICAgICAgICAgICAgJ2No
ZWNrb3V0IG1hc3RlcicsCisgICAgICAgICAgICAnZGVsZXRlIGJyYW5jaCB3ZWJraXQtMTIzNCcs
CisgICAgICAgICAgICAnY2hlY2tvdXQgbWFzdGVyJywKKyAgICAgICAgICAgICdyZXNldCBoYXJk
IG9yaWdpbi9tYXN0ZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwb3J0ZXIuYnVn
emlsbGEuY2FsbHMsIFsKKyAgICAgICAgICAgICdmZXRjaCBidWcgMTIzNCcsCisgICAgICAgICAg
ICAncG9zdCBjb21tZW50IHRvIGJ1ZyAxMjM0IDogU3VibWl0dGVkIHdlYi1wbGF0Zm9ybS10ZXN0
cyBwdWxsIHJlcXVlc3Q6IG15LWdpdGh1Yi11cmwnXSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3cz
Yy93cHRfZ2l0aHViLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyM2IwY2E5ZmFkZjJiM2RhMzlkMjI1Nzg2NDg2
Zjc3ZTI2NDU1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3cz
Yy93cHRfZ2l0aHViLnB5CkBAIC0wLDAgKzEsMTg4IEBACisjIENvcHlyaWdodCAyMDE2IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisj
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyMgVGhpcyBmaWxlIGlzIGltcG9ydGVkIGZy
b20gQ2hyb21pdW0gcmVwb3NpdG9yeS4KKyMgVGhlIExJQ0VOU0UgZmlsZSByZWZlcmVuY2VkIGFi
b3ZlIGNhbiBiZSBmb3VuZCBhdAorIyBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjLmdpdC8rL21hc3Rlci9MSUNFTlNFCisKK2ltcG9ydCBiYXNlNjQKK2ltcG9y
dCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHVybGxpYjIKKworZnJvbSBjb2xsZWN0aW9u
cyBpbXBvcnQgbmFtZWR0dXBsZQorZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0
IG1lbW9pemVkCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorQVBJX0JB
U0UgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbScKK0VYUE9SVF9MQUJFTCA9ICd3ZWJraXQtZXhw
b3J0JworCisKK2NsYXNzIFdQVEdpdEh1YihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGhvc3QsIHVzZXIsIHRva2VuLCBwcl9oaXN0b3J5X3dpbmRvdz0zMCk6CisgICAgICAgIHNl
bGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi51c2VyID0gdXNlcgorICAgICAgICBzZWxmLnRv
a2VuID0gdG9rZW4KKyAgICAgICAgYXNzZXJ0IHNlbGYudXNlciBhbmQgc2VsZi50b2tlbgorCisg
ICAgICAgIHNlbGYuX3ByX2hpc3Rvcnlfd2luZG93ID0gcHJfaGlzdG9yeV93aW5kb3cKKworICAg
IGRlZiBhdXRoX3Rva2VuKHNlbGYpOgorICAgICAgICByZXR1cm4gYmFzZTY0LmI2NGVuY29kZSgn
e306e30nLmZvcm1hdChzZWxmLnVzZXIsIHNlbGYudG9rZW4pKQorCisgICAgZGVmIHJlcXVlc3Qo
c2VsZiwgcGF0aCwgbWV0aG9kLCBib2R5PU5vbmUpOgorICAgICAgICBhc3NlcnQgcGF0aC5zdGFy
dHN3aXRoKCcvJykKKworICAgICAgICBpZiBib2R5OgorICAgICAgICAgICAgYm9keSA9IGpzb24u
ZHVtcHMoYm9keSkKKworICAgICAgICByZXNwb25zZSA9IHNlbGYuaG9zdC53ZWIucmVxdWVzdCgK
KyAgICAgICAgICAgIG1ldGhvZD1tZXRob2QsCisgICAgICAgICAgICB1cmw9QVBJX0JBU0UgKyBw
YXRoLAorICAgICAgICAgICAgZGF0YT1ib2R5LAorICAgICAgICAgICAgaGVhZGVycz17CisgICAg
ICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb24nLAor
ICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0Jhc2ljIHt9Jy5mb3JtYXQoc2VsZi5h
dXRoX3Rva2VuKCkpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgKQorCisgICAgICAgIHN0YXR1
c19jb2RlID0gcmVzcG9uc2UuZ2V0Y29kZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJl
dHVybiBqc29uLmxvYWQocmVzcG9uc2UpLCBzdGF0dXNfY29kZQorICAgICAgICBleGNlcHQgVmFs
dWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBzdGF0dXNfY29kZQorCisgICAgZGVm
IGNyZWF0ZV9wcihzZWxmLCByZW1vdGVfYnJhbmNoX25hbWUsIGRlc2NfdGl0bGUsIGJvZHkpOgor
ICAgICAgICAiIiJDcmVhdGVzIGEgUFIgb24gR2l0SHViLgorCisgICAgICAgIEFQSSBkb2M6IGh0
dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvcHVsbHMvI2NyZWF0ZS1hLXB1bGwtcmVxdWVz
dAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIHJhdyByZXNwb25zZSBvYmplY3Qg
aWYgc3VjY2Vzc2Z1bCwgTm9uZSBpZiBub3QuCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQg
cmVtb3RlX2JyYW5jaF9uYW1lCisgICAgICAgIGFzc2VydCBkZXNjX3RpdGxlCisgICAgICAgIGFz
c2VydCBib2R5CisKKyAgICAgICAgcGF0aCA9ICcvcmVwb3MvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9wdWxscycKKyAgICAgICAgYm9keSA9IHsKKyAgICAgICAgICAgICd0aXRsZSc6IGRlc2NfdGl0
bGUsCisgICAgICAgICAgICAnYm9keSc6IGJvZHksCisgICAgICAgICAgICAnaGVhZCc6IHJlbW90
ZV9icmFuY2hfbmFtZSwKKyAgICAgICAgICAgICdiYXNlJzogJ21hc3RlcicsCisgICAgICAgIH0K
KyAgICAgICAgZGF0YSwgc3RhdHVzX2NvZGUgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdQ
T1NUJywgYm9keT1ib2R5KQorCisgICAgICAgIGlmIHN0YXR1c19jb2RlICE9IDIwMToKKyAgICAg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBhZGRf
bGFiZWwoc2VsZiwgbnVtYmVyKToKKyAgICAgICAgcGF0aCA9ICcvcmVwb3MvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9pc3N1ZXMvJWQvbGFiZWxzJyAlIG51bWJlcgorICAgICAgICBib2R5ID0gW0VY
UE9SVF9MQUJFTF0KKyAgICAgICAgcmV0dXJuIHNlbGYucmVxdWVzdChwYXRoLCBtZXRob2Q9J1BP
U1QnLCBib2R5PWJvZHkpCisKKyAgICBkZWYgaW5fZmxpZ2h0X3B1bGxfcmVxdWVzdHMoc2VsZik6
CisgICAgICAgIHBhdGggPSAnL3NlYXJjaC9pc3N1ZXM/cT1yZXBvOnczYy93ZWItcGxhdGZvcm0t
dGVzdHMlMjBpczpvcGVuJTIwdHlwZTpwciUyMGxhYmVsOnt9Jy5mb3JtYXQoRVhQT1JUX0xBQkVM
KQorICAgICAgICBkYXRhLCBzdGF0dXNfY29kZSA9IHNlbGYucmVxdWVzdChwYXRoLCBtZXRob2Q9
J0dFVCcpCisgICAgICAgIGlmIHN0YXR1c19jb2RlID09IDIwMDoKKyAgICAgICAgICAgIHJldHVy
biBbc2VsZi5tYWtlX3ByX2Zyb21faXRlbShpdGVtKSBmb3IgaXRlbSBpbiBkYXRhWydpdGVtcydd
XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdOb24tMjAwIHN0
YXR1cyBjb2RlICglcyk6ICVzJyAlIChzdGF0dXNfY29kZSwgZGF0YSkpCisKKyAgICBkZWYgbWFr
ZV9wcl9mcm9tX2l0ZW0oc2VsZiwgaXRlbSk6CisgICAgICAgIHJldHVybiBQdWxsUmVxdWVzdCgK
KyAgICAgICAgICAgIHRpdGxlPWl0ZW1bJ3RpdGxlJ10sCisgICAgICAgICAgICBudW1iZXI9aXRl
bVsnbnVtYmVyJ10sCisgICAgICAgICAgICBib2R5PWl0ZW1bJ2JvZHknXSwKKyAgICAgICAgICAg
IHN0YXRlPWl0ZW1bJ3N0YXRlJ10pCisKKyAgICBAbWVtb2l6ZWQKKyAgICBkZWYgYWxsX3B1bGxf
cmVxdWVzdHMoc2VsZik6CisgICAgICAgICMgVE9ETyhqZWZmY2FycCk6IEFkZCBwYWdpbmF0aW9u
IHRvIGZldGNoID45OSBQUnMKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3ByX2hpc3Rvcnlfd2luZG93
IDw9IDEwMCwgJ01heGltdW0gR2l0SHViIHBhZ2Ugc2l6ZSBleGNlZWRlZC4nCisgICAgICAgIHBh
dGggPSAoJy9zZWFyY2gvaXNzdWVzJworICAgICAgICAgICAgICAgICc/cT1yZXBvOnczYy93ZWIt
cGxhdGZvcm0tdGVzdHMlMjB0eXBlOnByJTIwbGFiZWw6e30nCisgICAgICAgICAgICAgICAgJyZw
YWdlPTEnCisgICAgICAgICAgICAgICAgJyZwZXJfcGFnZT17fScpLmZvcm1hdChFWFBPUlRfTEFC
RUwsIHNlbGYuX3ByX2hpc3Rvcnlfd2luZG93KQorICAgICAgICBkYXRhLCBzdGF0dXNfY29kZSA9
IHNlbGYucmVxdWVzdChwYXRoLCBtZXRob2Q9J0dFVCcpCisgICAgICAgIGlmIHN0YXR1c19jb2Rl
ID09IDIwMDoKKyAgICAgICAgICAgIHJldHVybiBbc2VsZi5tYWtlX3ByX2Zyb21faXRlbShpdGVt
KSBmb3IgaXRlbSBpbiBkYXRhWydpdGVtcyddXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCdOb24tMjAwIHN0YXR1cyBjb2RlICglcyk6ICVzJyAlIChzdGF0dXNf
Y29kZSwgZGF0YSkpCisKKyAgICBkZWYgZ2V0X3ByX2JyYW5jaChzZWxmLCBwcl9udW1iZXIpOgor
ICAgICAgICBwYXRoID0gJy9yZXBvcy93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3B1bGxzL3t9Jy5m
b3JtYXQocHJfbnVtYmVyKQorICAgICAgICBkYXRhLCBzdGF0dXNfY29kZSA9IHNlbGYucmVxdWVz
dChwYXRoLCBtZXRob2Q9J0dFVCcpCisgICAgICAgIGlmIHN0YXR1c19jb2RlID09IDIwMDoKKyAg
ICAgICAgICAgIHJldHVybiBkYXRhWydoZWFkJ11bJ3JlZiddCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICByYWlzZSBFeGNlcHRpb24oJ05vbi0yMDAgc3RhdHVzIGNvZGUgKCVzKTogJXMnICUg
KHN0YXR1c19jb2RlLCBkYXRhKSkKKworICAgIGRlZiBtZXJnZV9wdWxsX3JlcXVlc3Qoc2VsZiwg
cHVsbF9yZXF1ZXN0X251bWJlcik6CisgICAgICAgIHBhdGggPSAnL3JlcG9zL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcHVsbHMvJWQvbWVyZ2UnICUgcHVsbF9yZXF1ZXN0X251bWJlcgorICAgICAg
ICBib2R5ID0geworICAgICAgICAgICAgIyBUaGlzIGN1cnJlbnRseSB3aWxsIG5vb3AgYmVjYXVz
ZSB0aGUgZmVhdHVyZSBpcyBpbiBhbiBvcHQtaW4gYmV0YS4KKyAgICAgICAgICAgICMgT25jZSBp
dCBsZWF2ZXMgYmV0YSB0aGlzIHdpbGwgc3RhcnQgd29ya2luZy4KKyAgICAgICAgICAgICdtZXJn
ZV9tZXRob2QnOiAncmViYXNlJywKKyAgICAgICAgfQorCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIGRhdGEsIHN0YXR1c19jb2RlID0gc2VsZi5yZXF1ZXN0KHBhdGgsIG1ldGhvZD0nUFVUJywg
Ym9keT1ib2R5KQorICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IgYXMgZToKKyAgICAg
ICAgICAgIGlmIGUuY29kZSA9PSA0MDU6CisgICAgICAgICAgICAgICAgcmFpc2UgTWVyZ2VFcnJv
cigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAg
aWYgc3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdSZWNl
aXZlZCBub24tMjAwIHN0YXR1cyBjb2RlICglZCkgd2hpbGUgbWVyZ2luZyBQUiAjJWQnICUgKHN0
YXR1c19jb2RlLCBwdWxsX3JlcXVlc3RfbnVtYmVyKSkKKworICAgICAgICByZXR1cm4gZGF0YQor
CisgICAgZGVmIGRlbGV0ZV9yZW1vdGVfYnJhbmNoKHNlbGYsIHJlbW90ZV9icmFuY2hfbmFtZSk6
CisgICAgICAgICMgVE9ETyhqZWZmY2FycCk6IFVuaXQgdGVzdCB0aGlzIG1ldGhvZAorICAgICAg
ICBwYXRoID0gJy9yZXBvcy93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2dpdC9yZWZzL2hlYWRzLyVz
JyAlIHJlbW90ZV9icmFuY2hfbmFtZQorICAgICAgICBkYXRhLCBzdGF0dXNfY29kZSA9IHNlbGYu
cmVxdWVzdChwYXRoLCBtZXRob2Q9J0RFTEVURScpCisKKyAgICAgICAgaWYgc3RhdHVzX2NvZGUg
IT0gMjA0OgorICAgICAgICAgICAgIyBUT0RPKGplZmZjYXJwKTogUmFpc2UgbW9yZSBzcGVjaWZp
YyBleGNlcHRpb24gKGNyZWF0ZSBNZXJnZUVycm9yIGNsYXNzPykKKyAgICAgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbignUmVjZWl2ZWQgbm9uLTIwNCBzdGF0dXMgY29kZSBhdHRlbXB0aW5nIHRvIGRl
bGV0ZSByZW1vdGUgYnJhbmNoOiB7fScuZm9ybWF0KHN0YXR1c19jb2RlKSkKKworICAgICAgICBy
ZXR1cm4gZGF0YQorCisgICAgZGVmIHByX3dpdGhfY2hhbmdlX2lkKHNlbGYsIHRhcmdldF9jaGFu
Z2VfaWQpOgorICAgICAgICBmb3IgcHVsbF9yZXF1ZXN0IGluIHNlbGYuYWxsX3B1bGxfcmVxdWVz
dHMoKToKKyAgICAgICAgICAgIGNoYW5nZV9pZCA9IHNlbGYuX2V4dHJhY3RfbWV0YWRhdGEoJ0No
YW5nZS1JZDogJywgcHVsbF9yZXF1ZXN0LmJvZHkpCisgICAgICAgICAgICBpZiBjaGFuZ2VfaWQg
PT0gdGFyZ2V0X2NoYW5nZV9pZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gcHVsbF9yZXF1ZXN0
CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcHJfd2l0aF9wb3NpdGlvbihzZWxmLCBw
b3NpdGlvbik6CisgICAgICAgIGZvciBwdWxsX3JlcXVlc3QgaW4gc2VsZi5hbGxfcHVsbF9yZXF1
ZXN0cygpOgorICAgICAgICAgICAgcHJfY29tbWl0X3Bvc2l0aW9uID0gc2VsZi5fZXh0cmFjdF9t
ZXRhZGF0YSgnQ3ItQ29tbWl0LVBvc2l0aW9uOiAnLCBwdWxsX3JlcXVlc3QuYm9keSkKKyAgICAg
ICAgICAgIGlmIHBvc2l0aW9uID09IHByX2NvbW1pdF9wb3NpdGlvbjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcHVsbF9yZXF1ZXN0CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2V4
dHJhY3RfbWV0YWRhdGEoc2VsZiwgdGFnLCBjb21taXRfYm9keSk6CisgICAgICAgIGZvciBsaW5l
IGluIGNvbW1pdF9ib2R5LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRz
d2l0aCh0YWcpOgorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lW2xlbih0YWcpOl0KKyAgICAg
ICAgcmV0dXJuIE5vbmUKKworCisKK2NsYXNzIE1lcmdlRXJyb3IoRXhjZXB0aW9uKToKKyAgICAi
IiJBbiBlcnJvciBzcGVjaWZpY2FsbHkgZm9yIHdoZW4gYSBQUiBjYW5ub3QgYmUgbWVyZ2VkLgor
CisgICAgVGhpcyBzaG91bGQgb25seSBiZSB0aHJvd24gd2hlbiBHaXRIdWIgcmV0dXJucyBzdGF0
dXMgY29kZSA0MDUsCisgICAgaW5kaWNhdGluZyB0aGF0IHRoZSBQUiBjb3VsZCBub3QgYmUgbWVy
Z2VkLgorICAgICIiIgorICAgIHBhc3MKKworUHVsbFJlcXVlc3QgPSBuYW1lZHR1cGxlKCdQdWxs
UmVxdWVzdCcsIFsndGl0bGUnLCAnbnVtYmVyJywgJ2JvZHknLCAnc3RhdGUnXSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWJfbW9jay5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWJfbW9jay5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjQ2
ZmE3ZjY5N2EwZWRjN2E4MWFjYmE5OTViMTcyNzhhNjE2ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dpdGh1Yl9tb2NrLnB5CkBAIC0wLDAgKzEs
NjcgQEAKKyMgQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KworIyBUaGlzIGZpbGUgaXMgaW1wb3J0ZWQgZnJvbSBDaHJvbWl1bSByZXBvc2l0b3J5LgorIyBU
aGUgTElDRU5TRSBmaWxlIHJlZmVyZW5jZWQgYWJvdmUgY2FuIGJlIGZvdW5kIGF0CisjIGh0dHBz
Oi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMuZ2l0LysvbWFzdGVyL0xJ
Q0VOU0UKKworZnJvbSB3ZWJraXRweS53M2Mud3B0X2dpdGh1YiBpbXBvcnQgTWVyZ2VFcnJvcgor
CisKK2NsYXNzIE1vY2tXUFRHaXRIdWIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBwdWxsX3JlcXVlc3RzLCB1bnN1Y2Nlc3NmdWxfbWVyZ2VfaW5kZXg9LTEsIGNyZWF0ZV9wcl9m
YWlsX2luZGV4PS0xKToKKyAgICAgICAgc2VsZi5wdWxsX3JlcXVlc3RzID0gcHVsbF9yZXF1ZXN0
cworICAgICAgICBzZWxmLmNhbGxzID0gW10KKyAgICAgICAgc2VsZi5wdWxsX3JlcXVlc3RzX2Ny
ZWF0ZWQgPSBbXQorICAgICAgICBzZWxmLnB1bGxfcmVxdWVzdHNfbWVyZ2VkID0gW10KKyAgICAg
ICAgc2VsZi51bnN1Y2Nlc3NmdWxfbWVyZ2VfaW5kZXggPSB1bnN1Y2Nlc3NmdWxfbWVyZ2VfaW5k
ZXgKKyAgICAgICAgc2VsZi5jcmVhdGVfcHJfaW5kZXggPSAwCisgICAgICAgIHNlbGYuY3JlYXRl
X3ByX2ZhaWxfaW5kZXggPSBjcmVhdGVfcHJfZmFpbF9pbmRleAorCisgICAgZGVmIGFsbF9wdWxs
X3JlcXVlc3RzKHNlbGYsIGxpbWl0PTMwKTogICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1
bWVudAorICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnYWxsX3B1bGxfcmVxdWVzdHMnKQorICAg
ICAgICByZXR1cm4gc2VsZi5wdWxsX3JlcXVlc3RzCisKKyAgICBkZWYgbWVyZ2VfcHVsbF9yZXF1
ZXN0KHNlbGYsIG51bWJlcik6CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdtZXJnZV9wdWxs
X3JlcXVlc3QnKQorCisgICAgICAgIGZvciBpbmRleCwgcHIgaW4gZW51bWVyYXRlKHNlbGYucHVs
bF9yZXF1ZXN0cyk6CisgICAgICAgICAgICBpZiBwci5udW1iZXIgPT0gbnVtYmVyIGFuZCBpbmRl
eCA9PSBzZWxmLnVuc3VjY2Vzc2Z1bF9tZXJnZV9pbmRleDoKKyAgICAgICAgICAgICAgICByYWlz
ZSBNZXJnZUVycm9yKCkKKworICAgICAgICBzZWxmLnB1bGxfcmVxdWVzdHNfbWVyZ2VkLmFwcGVu
ZChudW1iZXIpCisKKyAgICBkZWYgY3JlYXRlX3ByKHNlbGYsIHJlbW90ZV9icmFuY2hfbmFtZSwg
ZGVzY190aXRsZSwgYm9keSk6CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdjcmVhdGVfcHIn
KQorCisgICAgICAgIGFzc2VydCByZW1vdGVfYnJhbmNoX25hbWUKKyAgICAgICAgYXNzZXJ0IGRl
c2NfdGl0bGUKKyAgICAgICAgYXNzZXJ0IGJvZHkKKworICAgICAgICBpZiBzZWxmLmNyZWF0ZV9w
cl9mYWlsX2luZGV4ICE9IHNlbGYuY3JlYXRlX3ByX2luZGV4OgorICAgICAgICAgICAgc2VsZi5w
dWxsX3JlcXVlc3RzX2NyZWF0ZWQuYXBwZW5kKChyZW1vdGVfYnJhbmNoX25hbWUsIGRlc2NfdGl0
bGUsIGJvZHkpKQorCisgICAgICAgIHNlbGYuY3JlYXRlX3ByX2luZGV4ICs9IDEKKworICAgICAg
ICByZXR1cm4geyJodG1sX3VybCI6ICJteS1naXRodWItdXJsIn0KKworICAgIGRlZiBkZWxldGVf
cmVtb3RlX2JyYW5jaChzZWxmLCBfKToKKyAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ2RlbGV0
ZV9yZW1vdGVfYnJhbmNoJykKKworICAgIGRlZiBnZXRfcHJfYnJhbmNoKHNlbGYsIG51bWJlcik6
CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdnZXRfcHJfYnJhbmNoJykKKyAgICAgICAgcmV0
dXJuICdmYWtlIGJyYW5jaCBmb3IgUFIge30nLmZvcm1hdChudW1iZXIpCisKKyAgICBkZWYgcHJf
d2l0aF9wb3NpdGlvbihzZWxmLCBwb3NpdGlvbik6CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5k
KCdwcl93aXRoX3Bvc2l0aW9uJykKKyAgICAgICAgZm9yIHByIGluIHNlbGYucHVsbF9yZXF1ZXN0
czoKKyAgICAgICAgICAgIGlmIHBvc2l0aW9uIGluIHByLmJvZHk6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHByCisKKyAgICBkZWYgcHJfd2l0aF9jaGFuZ2VfaWQoc2VsZiwgY2hhbmdlX2lkKToK
KyAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ3ByX3dpdGhfY2hhbmdlX2lkJykKKyAgICAgICAg
Zm9yIHByIGluIHNlbGYucHVsbF9yZXF1ZXN0czoKKyAgICAgICAgICAgIGlmIGNoYW5nZV9pZCBp
biBwci5ib2R5OgorICAgICAgICAgICAgICAgIHJldHVybiBwcgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dpdGh1Yl91bml0dGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTJkM2Nk
YTJhZTYwYjJmMjY3MTU0MWExMGY3ODU1NzU5MDEzYmNlOAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWJfdW5pdHRlc3QucHkKQEAgLTAsMCAr
MSwzOSBAQAorIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorCisjIFRoaXMgZmlsZSBpcyBpbXBvcnRlZCBmcm9tIENocm9taXVtIHJlcG9zaXRvcnkuCisj
IFRoZSBMSUNFTlNFIGZpbGUgcmVmZXJlbmNlZCBhYm92ZSBjYW4gYmUgZm91bmQgYXQKKyMgaHR0
cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYy5naXQvKy9tYXN0ZXIv
TElDRU5TRQorCitpbXBvcnQgYmFzZTY0CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRw
eS5jb21tb24uaG9zdF9tb2NrIGltcG9ydCBNb2NrSG9zdAorZnJvbSB3ZWJraXRweS53M2Mud3B0
X2dpdGh1YiBpbXBvcnQgV1BUR2l0SHViLCBNZXJnZUVycm9yCisKKworY2xhc3MgV1BUR2l0SHVi
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAg
IHNlbGYud3B0X2dpdGh1YiA9IFdQVEdpdEh1YihNb2NrSG9zdCgpLCB1c2VyPSdydXRhYmFnYScs
IHRva2VuPSdkZWNhZmJhZCcpCisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYud3B0X2dpdGh1Yi51c2VyLCAncnV0YWJhZ2EnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud3B0X2dpdGh1Yi50b2tlbiwgJ2RlY2FmYmFkJykKKwor
ICAgIGRlZiB0ZXN0X2F1dGhfdG9rZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
CisgICAgICAgICAgICBzZWxmLndwdF9naXRodWIuYXV0aF90b2tlbigpLAorICAgICAgICAgICAg
YmFzZTY0LmVuY29kZXN0cmluZygncnV0YWJhZ2E6ZGVjYWZiYWQnKS5zdHJpcCgpKQorCisgICAg
ZGVmIHRlc3RfbWVyZ2VfcHVsbF9yZXF1ZXN0X3Rocm93c19tZXJnZV9lcnJvcl9vbl80MDUoc2Vs
Zik6CisgICAgICAgIHNlbGYud3B0X2dpdGh1Yi5ob3N0LndlYi5yZXNwb25zZXMgPSBbCisgICAg
ICAgICAgICB7J3N0YXR1c19jb2RlJzogMjAwfSwKKyAgICAgICAgICAgIHsnc3RhdHVzX2NvZGUn
OiA0MDV9LAorICAgICAgICBdCisKKyAgICAgICAgc2VsZi53cHRfZ2l0aHViLm1lcmdlX3B1bGxf
cmVxdWVzdCgxMjM0KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTWVyZ2VFcnJv
cik6CisgICAgICAgICAgICBzZWxmLndwdF9naXRodWIubWVyZ2VfcHVsbF9yZXF1ZXN0KDU2Nzgp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323815</attachid>
            <date>2017-10-14 12:07:12 -0700</date>
            <delta_ts>2017-12-10 19:43:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169462-20171014120711.patch</filename>
            <type>text/plain</type>
            <size>58873</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzMjc5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWQ3M2FhYzVjMmVkODIzNDJiZWE4MWMyMTNjMTYxOTEy
NjI0OGVhMC4uNDQyZTM1ZTA5OTg4Y2Y4NWU5NmY0ODdhNDIzYTdmZDFmMzQwOTFkZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgx
IEBACisyMDE3LTEwLTA1ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgYSBzY3JpcHQgdG8gYXV0b21hdGUgVzNjIHdlYi1wbGF0Zm9ybS10ZXN0cyBwdWxs
IHJlcXVlc3QgY3JlYXRpb25zIGZyb20gV2ViS2l0IGNvbW1pdHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQ2MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBzb21lIGdpdCBoZWxwZXIgcm91
dGluZXMgdXNlZCBieSBXUFQgZXhwb3J0ZXIuCisgICAgICAgIENvcHlpbmcgV1BUIGdpdGh1YiB1
dGlsaXR5IGZpbGVzIGZyb20gQ2hyb21pdW0uCisgICAgICAgIFVwZGF0aW5nIHdlYi5weS93ZWJf
bW9jay5weSB0byBjb3BlIHdpdGggdGhlc2UgbmV3IGZpbGVzLgorCisgICAgICAgIEltcGxlbWVu
dGluZyB0ZXN0IGV4cG9ydGVyIGluIHRlc3RfZXhwb3J0ZXIucHkuCisgICAgICAgIFRoaXMgc2Ny
aXB0IHRha2VzIGEgV2ViS2l0IGNvbW1pdCBhcyBpbnB1dCBhbmQgd2lsbCBjcmVhdGUgYSBXUFQg
Y29tbWl0IGluIGEgbG9jYWwgV1BUIGNsb25lLgorICAgICAgICBJdCB3aWxsIHRoZW4gcHVzaCB0
aGUgY29tbWl0IHRvIGEgcHVibGljIEdpdEh1YiByZXBvc2l0b3J5IGlkZW50aWZpZWQgYnkgYSB1
c2VybmFtZSBwYXJhbWV0ZXIuCisgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIHBhc3NlZCB0aHJv
dWdoIHRoZSBjb21tYW5kIGxpbmUgb3Igc2VhcmNoZWQgdGhyb3VnaCBnaXQgY29uZmlnL2Vudmly
b25tZW50IHZhcmlhYmxlcy4KKworICAgICAgICBUaGUgc2NyaXB0IGNhbiBvcHRpb25hbGx5IGNy
ZWF0ZSBhIHB1bGwgcmVxdWVzdCB0byB0aGUgb2ZmaWNpYWwgV1BUIEdpdEh1YiByZXBvc2l0b3J5
LgorICAgICAgICBVc2VyIG11c3QgcHJvdmlkZSBhIEdpdEh1YiB0b2tlbiB0byBhbGxvdyB0aGUg
c2NyaXB0IHRvIG1ha2UgdGhlIFBSIG9uIGJlaGFsZiBvZiB0aGUgdXNlci4KKyAgICAgICAgSW4g
dGhhdCBjYXNlLCBhIGNvbW1lbnQgaXMgYWRkZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYnVnemls
bGEgaWYgYSBidWcgSUQgaXMgZ2l2ZW4gb3IgY2FuIGJlIGZvdW5kIGZyb20gdGhlIGNoYW5nZSBs
b2csCisgICAgICAgIHRvIGVhc2lseSBsaW5rIHRoZSBwdWxsIHJlcXVlc3Qgd2l0aCB0aGUgYnVn
emlsbGEgYnVnLgorCisgICAgICAgICogU2NyaXB0cy9leHBvcnQtdzNjLXRlc3QtY2hhbmdlczog
QWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dp
dC5weToKKyAgICAgICAgKEdpdC5yZXNldF9oYXJkKToKKyAgICAgICAgKEdpdCk6CisgICAgICAg
IChHaXQuYW0pOgorICAgICAgICAoR2l0LmNvbW1pdCk6CisgICAgICAgIChHaXQuZm9ybWF0X3Bh
dGNoKToKKyAgICAgICAgKEdpdC5yZXF1ZXN0X3B1bGwpOgorICAgICAgICAoR2l0LnJlbW90ZSk6
CisgICAgICAgIChHaXQucHVzaCk6CisgICAgICAgIChHaXQuY2hlY2tvdXRfbmV3X2JyYW5jaCk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weToKKyAgICAgICAg
KFdlYi5yZXF1ZXN0KTogQ29waWVkIGZyb20gQ2hyb21pdW0uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vbmV0L3dlYl9tb2NrLnB5OiBDb3BpZWQgbmVlZGVkIGNvZGUgZnJvbSBD
aHJvbWl1bS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyLnB5
OiBBZGRlZC4KKyAgICAgICAgKFRlc3RFeHBvcnRlcik6CisgICAgICAgIChUZXN0RXhwb3J0ZXIu
X19pbml0X18pOgorICAgICAgICAoVGVzdEV4cG9ydGVyLl9pbml0X3JlcG9zaXRvcnkpOgorICAg
ICAgICAoVGVzdEV4cG9ydGVyLmRvd25sb2FkX2FuZF9jb21taXRfcGF0Y2gpOgorICAgICAgICAo
VGVzdEV4cG9ydGVyLmNsZWFuKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfYnJhbmNo
X3dpdGhfcGF0Y2gpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLnB1c2hfdG9fcHVibGljX3JlcG9z
aXRvcnkpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLm1ha2VfcHVsbF9yZXF1ZXN0KToKKyAgICAg
ICAgKFRlc3RFeHBvcnRlci5kZWxldGVfbG9jYWxfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBv
cnRlci5jcmVhdGVfZ2l0X3BhdGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfdXBs
b2FkX3JlbW90ZV9pZl9uZWVkZWQpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLmRvX2V4cG9ydCk6
CisgICAgICAgIChwYXJzZV9hcmdzKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nKToKKyAg
ICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nLkxvZ0hhbmRsZXIpOgorICAgICAgICAoY29uZmlndXJl
X2xvZ2dpbmcuTG9nSGFuZGxlci5mb3JtYXQpOgorICAgICAgICAobWFpbik6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF9leHBvcnRlcl91bml0dGVzdC5weTogQWRkZWQuCisg
ICAgICAgIChUZXN0RXhwb3J0ZXJUZXN0KToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9j
a0J1Z3ppbGxhKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLl9faW5p
dF9fKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLmZldGNoX2J1Z19k
aWN0aW9uYXJ5KToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLnBvc3Rf
Y29tbWVudF90b19idWcpOgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC5Nb2NrR2l0KToKKyAg
ICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5jbG9uZSk6CisgICAgICAgIChUZXN0RXhw
b3J0ZXJUZXN0Lk1vY2tHaXQuX19pbml0X18pOgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC5N
b2NrR2l0LmZldGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5jaGVja291
dCk6CisgICAgICAgIChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQucmVzZXRfaGFyZCk6CisgICAg
ICAgIChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQucHVzaCk6CisgICAgICAgIChUZXN0RXhwb3J0
ZXJUZXN0Lk1vY2tHaXQuZm9ybWF0X3BhdGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3Qu
TW9ja0dpdC5kZWxldGVfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dp
dC5jaGVja291dF9uZXdfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dp
dC5hbSk6CisgICAgICAgIChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQuY29tbWl0KToKKyAgICAg
ICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5yZW1vdGUpOgorICAgICAgICAoVGVzdEV4cG9y
dGVyVGVzdC50ZXN0X2V4cG9ydCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93M2MvY29t
bW9uLnB5OiBDb3BpZWQgZnJvbSBjaHJvbWl1bS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3czYy93cHRfZ2l0aHViLnB5OiBDb3BpZWQgZnJvbSBjaHJvbWl1bS4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3czYy93cHRfZ2l0aHViX21vY2sucHk6IENvcGllZCBmcm9tIGNocm9taXVt
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWJfdW5pdHRlc3QucHk6
IENvcGllZCBmcm9tIGNocm9taXVtLgorCiAyMDE3LTEwLTEzICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgbGlzdGluZyBvcmlnaW5zIGZvciB3
aGljaCBDYWNoZVN0b3JhZ2UgaXMgc3RvcmluZyBkYXRhCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL2V4cG9ydC13M2MtdGVzdC1jaGFuZ2VzIGIvVG9vbHMvU2NyaXB0cy9leHBvcnQtdzNjLXRl
c3QtY2hhbmdlcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZGQzYWIwZmViYzJmMDJjOWE3MzgzMGE2MDRkMTNjY2Qz
YTg3NjVhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9leHBvcnQtdzNjLXRlc3Qt
Y2hhbmdlcwpAQCAtMCwwICsxLDM1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyMgICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyMg
ICAgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorIyAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworIyAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyMgICAgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgQkUKKyMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLAorIyBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyMgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisjIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRgorIyBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKKworZnJvbSB3
ZWJraXRweS53M2MgaW1wb3J0IHRlc3RfZXhwb3J0ZXIKKworCitzeXMuZXhpdCh0ZXN0X2V4cG9y
dGVyLm1haW4oc3lzLmFyZ3ZbMTpdLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5CmluZGV4IGNh
ZDU3YWJmYTE0NWExYmU2MDcyMDJkZmY2MTgwMmRhN2RhMmJjYTEuLmU4ODY4MmZiNzg1YTI2OTM3
NDZiZGFmMWY0YzgxZThjNjE2MjE1Y2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQpAQCAtMjksNyArMjksNiBAQAogCiBpbXBvcnQg
ZGF0ZXRpbWUKIGltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKIGltcG9ydCByZQogCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKQEAgLTM3LDcgKzM2LDcgQEAg
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBT
Y3JpcHRFcnJvcgogCiBmcm9tIC5jb21taXRtZXNzYWdlIGltcG9ydCBDb21taXRNZXNzYWdlCiBm
cm9tIC5zY20gaW1wb3J0IEF1dGhlbnRpY2F0aW9uRXJyb3IsIFNDTSwgY29tbWl0X2Vycm9yX2hh
bmRsZXIKLWZyb20gLnN2biBpbXBvcnQgU1ZOLCBTVk5SZXBvc2l0b3J5Citmcm9tIC5zdm4gaW1w
b3J0IFNWTlJlcG9zaXRvcnkKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQog
CkBAIC01MDcsMTEgKzUwNiwxMSBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKICAg
ICBkZWYgZGVpbml0X3N1Ym1vZHVsZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9ydW5f
Z2l0KFsnc3VibW9kdWxlJywgJ2RlaW5pdCcsICctZicsICcuJ10pCiAKLSAgICBkZWYgX2JyYW5j
aF9yZWZfZXhpc3RzKHNlbGYsIGJyYW5jaF9yZWYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcnVu
X2dpdChbJ3Nob3ctcmVmJywgJy0tcXVpZXQnLCAnLS12ZXJpZnknLCBicmFuY2hfcmVmXSwgcmV0
dXJuX2V4aXRfY29kZT1UcnVlKSA9PSAwCisgICAgZGVmIGJyYW5jaF9yZWZfZXhpc3RzKHNlbGYs
IGJyYW5jaF9yZWYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ3Nob3ctcmVmJywg
Jy0tcXVpZXQnLCAnLS12ZXJpZnknLCAncmVmcy9oZWFkcy8nICsgYnJhbmNoX3JlZl0sIHJldHVy
bl9leGl0X2NvZGU9VHJ1ZSkgPT0gMAogCiAgICAgZGVmIGRlbGV0ZV9icmFuY2goc2VsZiwgYnJh
bmNoX25hbWUpOgotICAgICAgICBpZiBzZWxmLl9icmFuY2hfcmVmX2V4aXN0cygncmVmcy9oZWFk
cy8nICsgYnJhbmNoX25hbWUpOgorICAgICAgICBpZiBzZWxmLmJyYW5jaF9yZWZfZXhpc3RzKGJy
YW5jaF9uYW1lKToKICAgICAgICAgICAgIHNlbGYuX3J1bl9naXQoWydicmFuY2gnLCAnLUQnLCBi
cmFuY2hfbmFtZV0pCiAKICAgICBkZWYgcmVtb3RlX21lcmdlX2Jhc2Uoc2VsZik6CkBAIC01ODQs
NiArNTgzLDM3IEBAIGNsYXNzIEdpdChTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgIGRlZiBmZXRj
aChzZWxmLCByZW1vdGU9J29yaWdpbicpOgogICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChb
J2ZldGNoJywgcmVtb3RlXSkKIAorICAgICMgUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVj
aWZpZWQgY29tbWl0LgorICAgIGRlZiByZXNldF9oYXJkKHNlbGYsIGNvbW1pdCk6CisgICAgICAg
IHJldHVybiBzZWxmLl9ydW5fZ2l0KFsncmVzZXQnLCAnLS1oYXJkJywgY29tbWl0XSkKKworICAg
IGRlZiBhcHBseV9tYWlsX3BhdGNoKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fcnVuX2dpdChbJ2FwcGx5J10gKyBvcHRpb25zKQorCisgICAgZGVmIGNvbW1pdChzZWxmLCBv
cHRpb25zKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWydjb21taXQnXSArIG9wdGlv
bnMpCisKKyAgICBkZWYgZm9ybWF0X3BhdGNoKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICByZXR1
cm4gc2VsZi5fcnVuX2dpdChbJ2Zvcm1hdC1wYXRjaCddICsgb3B0aW9ucykKKworICAgIGRlZiBy
ZXF1ZXN0X3B1bGwoc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0
KFsncmVxdWVzdC1wdWxsJ10gKyBvcHRpb25zKQorCisgICAgZGVmIHJlbW90ZShzZWxmLCBvcHRp
b25zKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWydyZW1vdGUnXSArIG9wdGlvbnMp
CisKKyAgICBkZWYgcHVzaChzZWxmLCBvcHRpb25zKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1
bl9naXQoWydwdXNoJ10gKyBvcHRpb25zKQorCisgICAgZGVmIGxvY2FsX2NvbmZpZyhzZWxmLCBr
ZXkpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ2NvbmZpZycsICctLWdldCcsICct
LWxvY2FsJywga2V5XSwgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vycm9yKQorCisg
ICAgZGVmIHNldF9sb2NhbF9jb25maWcoc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIHJldHVy
biBzZWxmLl9ydW5fZ2l0KFsnY29uZmlnJywgJy0tYWRkJywgJy0tbG9jYWwnLCBrZXksIHZhbHVl
XSwgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vycm9yKQorCisgICAgZGVmIGNoZWNr
b3V0X25ld19icmFuY2goc2VsZiwgYnJhbmNoX25hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5f
cnVuX2dpdChbJ2NoZWNrb3V0JywgJy1iJywgYnJhbmNoX25hbWVdKQorCiAgICAgZGVmIGNoZWNr
b3V0KHNlbGYsIHJldmlzaW9uLCBxdWlldD1Ob25lKToKICAgICAgICAgY29tbWFuZCA9IFsnY2hl
Y2tvdXQnLCByZXZpc2lvbl0KICAgICAgICAgaWYgcXVpZXQ6CmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvd2ViLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vbmV0L3dlYi5weQppbmRleCBiOGEwNmU1NzQ2OGQwNWYwNGI2OGYxMjlkY2RlNmFj
YTA4Nzc0NzBiLi44NzlhYTA3YzE2YzhkNjYzNzY0MzZmODYxMTQ4ZWVhZjU1M2YyMzQ4IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvd2ViLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC93ZWIucHkKQEAgLTM0LDMgKzM0LDEzIEBA
IGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5uZXR3b3JrdHJhbnNhY3Rpb24gaW1wb3J0IE5ldHdv
cmtUcmFuc2FjdGlvbgogY2xhc3MgV2ViKG9iamVjdCk6CiAgICAgZGVmIGdldF9iaW5hcnkoc2Vs
ZiwgdXJsLCBjb252ZXJ0XzQwNF90b19Ob25lPUZhbHNlKToKICAgICAgICAgcmV0dXJuIE5ldHdv
cmtUcmFuc2FjdGlvbihjb252ZXJ0XzQwNF90b19Ob25lPWNvbnZlcnRfNDA0X3RvX05vbmUpLnJ1
bihsYW1iZGE6IHVybGxpYjIudXJsb3Blbih1cmwpLnJlYWQoKSkKKworICAgIGRlZiByZXF1ZXN0
KHNlbGYsIG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzPU5vbmUpOgorICAgICAgICBvcGVuZXIg
PSB1cmxsaWIyLmJ1aWxkX29wZW5lcih1cmxsaWIyLkhUVFBIYW5kbGVyKQorICAgICAgICByZXF1
ZXN0ID0gdXJsbGliMi5SZXF1ZXN0KHVybD11cmwsIGRhdGE9ZGF0YSkKKyAgICAgICAgcmVxdWVz
dC5nZXRfbWV0aG9kID0gbGFtYmRhOiBtZXRob2QKKworICAgICAgICBpZiBoZWFkZXJzOgorICAg
ICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gaGVhZGVycy5pdGVtcygpOgorICAgICAgICAgICAg
ICAgIHJlcXVlc3QuYWRkX2hlYWRlcihrZXksIHZhbHVlKQorICAgICAgICByZXR1cm4gb3BlbmVy
Lm9wZW4ocmVxdWVzdCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L25ldC93ZWJfbW9jay5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC93ZWJf
bW9jay5weQppbmRleCA2ZjA5YmE0NGQwY2VlN2FkYjg4ZDE0YzU3NDEzYzcwYmNjZjM4YjNlLi5i
NDEwNTk5ODlhY2UxNTI5NmE5YTk4ZTNlNWE1Njk2MjkwNDFmNTU2IDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvd2ViX21vY2sucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYl9tb2NrLnB5CkBAIC0yNywxMiArMjcsMTMgQEAK
ICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IFN0cmluZ0lPCi0KK2ltcG9ydCB1cmxsaWIyCiAKIGNs
YXNzIE1vY2tXZWIob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdXJscz1Ob25lKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJscz1Ob25lLCByZXNwb25zZXM9W10pOgogICAgICAg
ICBzZWxmLnVybHMgPSB1cmxzIG9yIHt9CiAgICAgICAgIHNlbGYudXJsc19mZXRjaGVkID0gW10K
KyAgICAgICAgc2VsZi5yZXNwb25zZXMgPSByZXNwb25zZXMKIAogICAgIGRlZiBnZXRfYmluYXJ5
KHNlbGYsIHVybCwgY29udmVydF80MDRfdG9fTm9uZT1GYWxzZSk6CiAgICAgICAgIHNlbGYudXJs
c19mZXRjaGVkLmFwcGVuZCh1cmwpCkBAIC00MCw2ICs0MSwyOSBAQCBjbGFzcyBNb2NrV2ViKG9i
amVjdCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi51cmxzW3VybF0KICAgICAgICAgcmV0dXJu
ICJNT0NLIFdlYiByZXN1bHQsIGNvbnZlcnQgNDA0IHRvIE5vbmU9JXMiICUgY29udmVydF80MDRf
dG9fTm9uZQogCisgICAgZGVmIHJlcXVlc3Qoc2VsZiwgbWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRl
cnM9Tm9uZSk6ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKKyAgICAgICAgcmV0
dXJuIE1vY2tSZXNwb25zZShzZWxmLnJlc3BvbnNlcy5wb3AoMCkpCisKKworY2xhc3MgTW9ja1Jl
c3BvbnNlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlcyk6CisgICAgICAg
IHNlbGYuc3RhdHVzX2NvZGUgPSB2YWx1ZXNbJ3N0YXR1c19jb2RlJ10KKyAgICAgICAgc2VsZi51
cmwgPSAnJworICAgICAgICBzZWxmLmJvZHkgPSB2YWx1ZXMuZ2V0KCdib2R5JywgJycpCisKKyAg
ICAgICAgaWYgaW50KHNlbGYuc3RhdHVzX2NvZGUpID49IDQwMDoKKyAgICAgICAgICAgIHJhaXNl
IHVybGxpYjIuSFRUUEVycm9yKAorICAgICAgICAgICAgICAgIHVybD1zZWxmLnVybCwKKyAgICAg
ICAgICAgICAgICBjb2RlPXNlbGYuc3RhdHVzX2NvZGUsCisgICAgICAgICAgICAgICAgbXNnPSdS
ZWNlaXZlZCBlcnJvciBzdGF0dXMgY29kZToge30nLmZvcm1hdChzZWxmLnN0YXR1c19jb2RlKSwK
KyAgICAgICAgICAgICAgICBoZHJzPXt9LAorICAgICAgICAgICAgICAgIGZwPU5vbmUpCisKKyAg
ICBkZWYgZ2V0Y29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RhdHVzX2NvZGUKKwor
ICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5ib2R5CiAKICMgRklYTUU6
IENsYXNzZXMgd2hpY2ggYXJlIHVzaW5nIEJyb3dzZXIgcHJvYmFibHkgd2FudCB0byB1c2UgV2Vi
IGluc3RlYWQuCiBjbGFzcyBNb2NrQnJvd3NlcihvYmplY3QpOgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS93M2MvY29tbW9uLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93
M2MvY29tbW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExNGFhOTUzNTRiOTA2NzM5NDEwMTc2YzFiMDM3OGM3
ZDcyMzUzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy9j
b21tb24ucHkKQEAgLTAsMCArMSw5OSBAQAorIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0g
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlV0aWxp
dHkgZnVuY3Rpb25zIHVzZWQgYm90aCB3aGVuIGltcG9ydGluZyBhbmQgZXhwb3J0aW5nLiIiIgor
CitpbXBvcnQganNvbgoraW1wb3J0IGxvZ2dpbmcKKworCitXUFRfR0hfT1JHID0gJ3czYycKK1dQ
VF9HSF9SRVBPX05BTUUgPSAnd2ViLXBsYXRmb3JtLXRlc3RzJworV1BUX0dIX1VSTCA9ICdodHRw
czovL2dpdGh1Yi5jb20vJXMvJXMvJyAlIChXUFRfR0hfT1JHLCBXUFRfR0hfUkVQT19OQU1FKQor
V1BUX01JUlJPUl9VUkwgPSAnaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2V4dGVy
bmFsL3czYy93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0JworV1BUX0dIX1NTSF9VUkxfVEVNUExBVEUg
PSAnaHR0cHM6Ly97fUBnaXRodWIuY29tLyVzLyVzLmdpdCcgJSAoV1BUX0dIX09SRywgV1BUX0dI
X1JFUE9fTkFNRSkKK1dQVF9SRVZJU0lPTl9GT09URVIgPSAnV1BULUV4cG9ydC1SZXZpc2lvbjon
CitFWFBPUlRfUFJfTEFCRUwgPSAnY2hyb21pdW0tZXhwb3J0JworUFJPVklTSU9OQUxfUFJfTEFC
RUwgPSAnZG8gbm90IG1lcmdlIHlldCcKKworIyBUT0RPKHF5ZWFyc2xleSk6IEF2b2lkIGhhcmQt
Y29kaW5nIHRoaXJkX3BhcnR5L1dlYktpdC9MYXlvdXRUZXN0cy4KK0NIUk9NSVVNX1dQVF9ESVIg
PSAndGhpcmRfcGFydHkvV2ViS2l0L0xheW91dFRlc3RzL2V4dGVybmFsL3dwdC8nCisKK19sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitkZWYgcmVhZF9jcmVkZW50aWFscyho
b3N0LCBjcmVkZW50aWFsc19qc29uKToKKyAgICAiIiJFeHRyYWN0cyBjcmVkZW50aWFscyBmcm9t
IGEgSlNPTiBmaWxlLiIiIgorICAgIGlmIG5vdCBjcmVkZW50aWFsc19qc29uOgorICAgICAgICBy
ZXR1cm4ge30KKyAgICBpZiBub3QgaG9zdC5maWxlc3lzdGVtLmV4aXN0cyhjcmVkZW50aWFsc19q
c29uKToKKyAgICAgICAgX2xvZy53YXJuaW5nKCdDcmVkZW50aWFscyBKU09OIGZpbGUgbm90IGZv
dW5kIGF0ICVzLicsIGNyZWRlbnRpYWxzX2pzb24pCisgICAgICAgIHJldHVybiB7fQorICAgIGNy
ZWRlbnRpYWxzID0ge30KKyAgICBjb250ZW50cyA9IGpzb24ubG9hZHMoaG9zdC5maWxlc3lzdGVt
LnJlYWRfdGV4dF9maWxlKGNyZWRlbnRpYWxzX2pzb24pKQorICAgIGZvciBrZXkgaW4gKCdHSF9V
U0VSJywgJ0dIX1RPS0VOJywgJ0dFUlJJVF9VU0VSJywgJ0dFUlJJVF9UT0tFTicpOgorICAgICAg
ICBpZiBrZXkgaW4gY29udGVudHM6CisgICAgICAgICAgICBjcmVkZW50aWFsc1trZXldID0gY29u
dGVudHNba2V5XQorICAgIHJldHVybiBjcmVkZW50aWFscworCisKK2RlZiBpc190ZXN0aGFybmVz
c19iYXNlbGluZShmaWxlbmFtZSk6CisgICAgIiIiQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBmaWxl
IG5hbWUgYXBwZWFycyB0byBiZSBhIHRlc3RoYXJuZXNzIGJhc2VsaW5lLgorCisgICAgQXJnczoK
KyAgICAgICAgZmlsZW5hbWU6IEEgcGF0aCAoYWJzb2x1dGUgb3IgcmVsYXRpdmUpIG9yIGEgYmFz
ZW5hbWUuCisgICAgIiIiCisgICAgcmV0dXJuIGZpbGVuYW1lLmVuZHN3aXRoKCctZXhwZWN0ZWQu
dHh0JykKKworCitkZWYgaXNfYmFzZW5hbWVfc2tpcHBlZChiYXNlbmFtZSk6CisgICAgIiIiQ2hl
Y2tzIHdoZXRoZXIgdG8gc2tpcCAobm90IHN5bmMpIGEgZmlsZSBiYXNlZCBvbiBpdHMgYmFzZW5h
bWUuCisKKyAgICBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIGJvdGggaW1wb3J0
IGFuZCBleHBvcnQsIGkuZS4sIGZpbGVzIHdpdGgKKyAgICBza2lwcGVkIGJhc2VuYW1lcyBhcmUg
bmV2ZXIgaW1wb3J0ZWQgb3IgZXhwb3J0ZWQuCisgICAgIiIiCisgICAgYXNzZXJ0ICcvJyBub3Qg
aW4gYmFzZW5hbWUKKyAgICBibGFja2xpc3QgPSBbCisgICAgICAgICdNQU5JRkVTVC5qc29uJywg
ICAgIyBNQU5JRkVTVC5qc29uIGlzIGF1dG9tYXRpY2FsbHkgcmVnZW5lcmF0ZWQuCisgICAgICAg
ICdPV05FUlMnLCAgICAgICAgICAgIyBodHRwczovL2NyYnVnLmNvbS81ODQ2NjAgaHR0cHM6Ly9j
cmJ1Zy5jb20vNzAyMjgzCisgICAgICAgICdyZWZ0ZXN0Lmxpc3QnLCAgICAgIyBodHRwczovL2Ny
YnVnLmNvbS81ODI4MzgKKyAgICBdCisgICAgcmV0dXJuIChiYXNlbmFtZSBpbiBibGFja2xpc3QK
KyAgICAgICAgICAgIG9yIGlzX3Rlc3RoYXJuZXNzX2Jhc2VsaW5lKGJhc2VuYW1lKQorICAgICAg
ICAgICAgb3IgYmFzZW5hbWUuc3RhcnRzd2l0aCgnLicpKQorCisKK2RlZiBpc19maWxlX2V4cG9y
dGFibGUocGF0aCk6CisgICAgIiIiQ2hlY2tzIHdoZXRoZXIgYSBmaWxlIGluIENocm9taXVtIFdQ
VCBzaG91bGQgYmUgZXhwb3J0ZWQgdG8gdXBzdHJlYW0uCisKKyAgICBBcmdzOgorICAgICAgICBw
YXRoOiBBIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgcm9vdCBvZiBDaHJvbWl1bSByZXBvc2l0b3J5
LgorICAgICIiIgorICAgIGFzc2VydCBwYXRoLnN0YXJ0c3dpdGgoQ0hST01JVU1fV1BUX0RJUikK
KyAgICBiYXNlbmFtZSA9IHBhdGhbcGF0aC5yZmluZCgnLycpICsgMTpdCisgICAgcmV0dXJuIG5v
dCBpc19iYXNlbmFtZV9za2lwcGVkKGJhc2VuYW1lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS93M2MvdGVzdF9leHBvcnRlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dzNjL3Rlc3RfZXhwb3J0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2ZlNWFhYzE2YTBhMzU1OTE4Y2ZjNzZm
YWY3OGMwYmE1Mjc1YmZiZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdzNjL3Rlc3RfZXhwb3J0ZXIucHkKQEAgLTAsMCArMSwyODcgQEAKKworIyBDb3B5cmlnaHQg
KGMpIDIwMTcsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
IyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIKKyBUaGlzIHNjcmlwdCB1cGxvYWRzIGNo
YW5nZXMgbWFkZSB0byBXM0Mgd2ViLXBsYXRmb3JtLXRlc3RzIHRlc3RzLgorIiIiCisKK2ltcG9y
dCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKKworZnJv
bSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtLmdpdCBpbXBvcnQgR2l0Citmcm9tIHdlYmtp
dHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVn
emlsbGEgaW1wb3J0IEJ1Z3ppbGxhCitmcm9tIHdlYmtpdHB5LmNvbW1vbi53ZWJraXRfZmluZGVy
IGltcG9ydCBXZWJLaXRGaW5kZXIKK2Zyb20gd2Via2l0cHkudzNjLndwdF9naXRodWIgaW1wb3J0
IFdQVEdpdEh1YgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xh
c3MgVGVzdEV4cG9ydGVyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwg
b3B0aW9ucywgZ2l0Q2xhc3M9R2l0LCBidWd6aWxsYUNsYXNzPUJ1Z3ppbGxhLCBXUFRHaXRIdWJD
bGFzcz1XUFRHaXRIdWIpOgorICAgICAgICBzZWxmLl9ob3N0ID0gaG9zdAorICAgICAgICBzZWxm
Ll9maWxlc3lzdGVtID0gaG9zdC5maWxlc3lzdGVtCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBv
cHRpb25zCisKKyAgICAgICAgc2VsZi5faG9zdC5pbml0aWFsaXplX3NjbSgpCisKKyAgICAgICAg
c2VsZi5fYnVnemlsbGEgPSBidWd6aWxsYUNsYXNzKCkKKyAgICAgICAgc2VsZi5fYnVnX2lkID0g
b3B0aW9ucy5idWdfaWQKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1Z19pZDoKKyAgICAgICAgICAg
IGlmIG9wdGlvbnMuYXR0YWNobWVudF9pZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9idWdfaWQg
PSBzZWxmLl9idWd6aWxsYS5idWdfaWRfZm9yX2F0dGFjaG1lbnRfaWQob3B0aW9ucy5hdHRhY2ht
ZW50X2lkKQorICAgICAgICAgICAgZWxpZiBvcHRpb25zLmdpdF9jb21taXQ6CisgICAgICAgICAg
ICAgICAgc2VsZi5fYnVnX2lkID0gc2VsZi5faG9zdC5jaGVja291dCgpLmJ1Z19pZF9mb3JfdGhp
c19jb21taXQob3B0aW9ucy5naXRfY29tbWl0KQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRp
b25zLnJlcG9zaXRvcnlfZGlyZWN0b3J5OgorICAgICAgICAgICAgd2Via2l0X2ZpbmRlciA9IFdl
YktpdEZpbmRlcihzZWxmLl9maWxlc3lzdGVtKQorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5y
ZXBvc2l0b3J5X2RpcmVjdG9yeSA9IHdlYmtpdF9maW5kZXIucGF0aF9mcm9tX3dlYmtpdF9iYXNl
KCdXZWJLaXRCdWlsZCcsICd3M2MtdGVzdHMnLCAnd2ViLXBsYXRmb3JtLXRlc3RzJykKKworICAg
ICAgICBzZWxmLl9naXQgPSBzZWxmLl9lbnN1cmVfd3B0X3JlcG9zaXRvcnkoImh0dHBzOi8vZ2l0
aHViLmNvbS93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzLmdpdCIsIHNlbGYuX29wdGlvbnMucmVwb3Np
dG9yeV9kaXJlY3RvcnksIGdpdENsYXNzKQorCisgICAgICAgIHNlbGYuX3VzZXJuYW1lID0gb3B0
aW9ucy51c2VybmFtZQorICAgICAgICBpZiBub3Qgc2VsZi5fdXNlcm5hbWU6CisgICAgICAgICAg
ICBzZWxmLl91c2VybmFtZSA9IHNlbGYuX2dpdC5sb2NhbF9jb25maWcoJ2dpdGh1Yi51c2VybmFt
ZScpLnJzdHJpcCgpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fdXNlcm5hbWU6CisgICAgICAg
ICAgICAgICAgc2VsZi5fdXNlcm5hbWUgPSBvcy5lbnZpcm9uLmdldCgnR0lUSFVCX1VTRVJOQU1F
JykKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl91c2VybmFtZToKKyAgICAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCJNaXNzaW5nIEdpdEh1YiB1c2VybmFtZSwgcGxlYXNlIHByb3ZpZGUg
aXQgYXMgYSBwYXJhbWV0ZXIuIikKKyAgICAgICAgZWxpZiBub3Qgc2VsZi5fZ2l0LmxvY2FsX2Nv
bmZpZygnZ2l0aHViLnVzZXJuYW1lJyk6CisgICAgICAgICAgICBzZWxmLl9naXQuc2V0X2xvY2Fs
X2NvbmZpZygnZ2l0aHViLnVzZXJuYW1lJywgc2VsZi5fdXNlcm5hbWUpCisKKyAgICAgICAgc2Vs
Zi5fdG9rZW4gPSBvcHRpb25zLnRva2VuCisgICAgICAgIGlmIG5vdCBzZWxmLl90b2tlbjoKKyAg
ICAgICAgICAgIHNlbGYuX3Rva2VuID0gc2VsZi5fZ2l0LmxvY2FsX2NvbmZpZygnZ2l0aHViLnRv
a2VuJykucnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl90b2tlbjoKKyAgICAgICAg
ICAgICAgICBzZWxmLl90b2tlbiA9IG9zLmVudmlyb24uZ2V0KCdHSVRIVUJfVE9LRU4nKQorICAg
ICAgICAgICAgaWYgbm90IHNlbGYuX3Rva2VuOgorICAgICAgICAgICAgICAgIF9sb2cuaW5mbygi
TWlzc2luZyBHaXRIdWIgdG9rZW4sIHRoZSBzY3JpcHQgd2lsbCBub3QgYmUgYWJsZSB0byBjcmVh
dGUgYSBwdWxsIHJlcXVlc3QgdG8gVzNDIHdlYi1wbGF0Zm9ybS10ZXN0cyByZXBvc2l0b3J5LiIp
CisgICAgICAgIGVsaWYgbm90IHNlbGYuX2dpdC5sb2NhbF9jb25maWcoJ2dpdGh1Yi50b2tlbicp
OgorICAgICAgICAgICAgc2VsZi5fZ2l0LnNldF9sb2NhbF9jb25maWcoJ2dpdGh1Yi50b2tlbics
IHNlbGYuX3Rva2VuKQorCisgICAgICAgIGlmIHNlbGYuX3VzZXJuYW1lIGFuZCBzZWxmLl90b2tl
bjoKKyAgICAgICAgICAgIHNlbGYuX2dpdGh1YiA9IFdQVEdpdEh1YkNsYXNzKHNlbGYuX2hvc3Qs
IHNlbGYuX3VzZXJuYW1lLCBzZWxmLl90b2tlbikKKworICAgICAgICBzZWxmLl9icmFuY2hfbmFt
ZSA9IHNlbGYuX2Vuc3VyZV9uZXdfYnJhbmNoX25hbWUoKQorICAgICAgICBzZWxmLl9wdWJsaWNf
YnJhbmNoX25hbWUgPSBvcHRpb25zLnB1YmxpY19icmFuY2hfbmFtZSBpZiBvcHRpb25zLnB1Ymxp
Y19icmFuY2hfbmFtZSBlbHNlIHNlbGYuX2JyYW5jaF9uYW1lCisgICAgICAgIHNlbGYuX2J1Z3pp
bGxhX3VybCA9ICJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9IiArIHN0
cihzZWxmLl9idWdfaWQpCisgICAgICAgIHNlbGYuX2NvbW1pdF9tZXNzYWdlID0gb3B0aW9ucy5t
ZXNzYWdlIGlmIG9wdGlvbnMubWVzc2FnZSBlbHNlICdXZWJLaXQgZXhwb3J0IG9mICcgKyBzZWxm
Ll9idWd6aWxsYV91cmwKKworICAgICAgICBzZWxmLl93cHRfZm9ya19yZW1vdGUgPSBvcHRpb25z
LnJlcG9zaXRvcnlfcmVtb3RlCisgICAgICAgIGlmIG5vdCBzZWxmLl93cHRfZm9ya19yZW1vdGU6
CisgICAgICAgICAgICBzZWxmLl93cHRfZm9ya19yZW1vdGUgPSBzZWxmLl91c2VybmFtZQorCisg
ICAgICAgIHNlbGYuX3dwdF9mb3JrX3B1c2hfdXJsID0gImh0dHBzOi8vIiArIHNlbGYuX3VzZXJu
YW1lICsgIkBnaXRodWIuY29tLyIgKyBzZWxmLl91c2VybmFtZSArICIvd2ViLXBsYXRmb3JtLXRl
c3RzLmdpdCIKKworICAgICAgICBzZWxmLmNsZWFuKCkKKworICAgIGRlZiBfZW5zdXJlX3dwdF9y
ZXBvc2l0b3J5KHNlbGYsIHVybCwgd3B0X3JlcG9zaXRvcnlfZGlyZWN0b3J5LCBnaXRDbGFzcyk6
CisgICAgICAgIGdpdCA9IE5vbmUKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhp
c3RzKHdwdF9yZXBvc2l0b3J5X2RpcmVjdG9yeSk6CisgICAgICAgICAgICBfbG9nLmluZm8oJ0Ns
b25pbmcgJXMgaW50byAlcy4uLicgJSAodXJsLCB3cHRfcmVwb3NpdG9yeV9kaXJlY3RvcnkpKQor
ICAgICAgICAgICAgZ2l0Q2xhc3MuY2xvbmUodXJsLCB3cHRfcmVwb3NpdG9yeV9kaXJlY3Rvcnks
IHNlbGYuX2hvc3QuZXhlY3V0aXZlKQorICAgICAgICBnaXQgPSBnaXRDbGFzcyh3cHRfcmVwb3Np
dG9yeV9kaXJlY3RvcnksIE5vbmUsIGV4ZWN1dGl2ZT1zZWxmLl9ob3N0LmV4ZWN1dGl2ZSwgZmls
ZXN5c3RlbT1zZWxmLl9maWxlc3lzdGVtKQorICAgICAgICBfbG9nLmluZm8oJ0ZldGNoaW5nIHdl
Yi1wbGF0Zm9ybS10ZXN0cyByZXBvc2l0b3J5JykKKyAgICAgICAgZ2l0LmZldGNoKCkKKyAgICAg
ICAgcmV0dXJuIGdpdAorCisgICAgZGVmIF9lbnN1cmVfbmV3X2JyYW5jaF9uYW1lKHNlbGYpOgor
ICAgICAgICBicmFuY2hfbmFtZV9wcmVmaXggPSAid3B0LWV4cG9ydC1mb3Itd2Via2l0LSIgKyAo
c3RyKHNlbGYuX2J1Z19pZCkgaWYgc2VsZi5fYnVnX2lkIGVsc2UgIjAiKQorICAgICAgICBicmFu
Y2hfbmFtZSA9IGJyYW5jaF9uYW1lX3ByZWZpeAorICAgICAgICBjb3VudGVyID0gMAorICAgICAg
ICB3aGlsZSBzZWxmLl9naXQuYnJhbmNoX3JlZl9leGlzdHMoYnJhbmNoX25hbWUpOgorICAgICAg
ICAgICAgYnJhbmNoX25hbWUgPSAoIiVzLSVzIikgJSAoYnJhbmNoX25hbWVfcHJlZml4LCBzdHIo
Y291bnRlcikpCisgICAgICAgICAgICBjb3VudGVyID0gY291bnRlciArIDEKKyAgICAgICAgcmV0
dXJuIGJyYW5jaF9uYW1lCisKKyAgICBkZWYgZG93bmxvYWRfYW5kX2NvbW1pdF9wYXRjaChzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5naXRfY29tbWl0OgorICAgICAgICAgICAgcmV0
dXJuIFRydWUKKworICAgICAgICBwYXRjaF9vcHRpb25zID0gWyItLW5vLXVwZGF0ZSIsICItLW5v
LWNsZWFuIiwgIi0tbG9jYWwtY29tbWl0Il0KKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5hdHRh
Y2htZW50X2lkOgorICAgICAgICAgICAgcGF0Y2hfb3B0aW9ucy5pbnNlcnQoImFwcGx5LWF0dGFj
aG1lbnQiKQorICAgICAgICAgICAgcGF0Y2hfb3B0aW9ucy5hcHBlbmQoc2VsZi5fb3B0aW9ucy5h
dHRhY2htZW50X2lkKQorICAgICAgICBlbGlmIHNlbGYuX29wdGlvbnMuYnVnX2lkOgorICAgICAg
ICAgICAgcGF0Y2hfb3B0aW9ucy5pbnNlcnQoImFwcGx5LWZyb20tYnVnIikKKyAgICAgICAgICAg
IHBhdGNoX29wdGlvbnMuYXBwZW5kKHNlbGYuX29wdGlvbnMuYnVnX2lkKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgX2xvZy5pbmZvKCJFeHBvcnRpbmcgbG9jYWwgY2hhbmdlcyIpCisgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJSZXRyaWV2YWwgb2YgcGF0
Y2ggZnJvbSBidWd6aWxsYSBpcyBub3QgeWV0IGltcGxlbWVudGVkIikKKworICAgIGRlZiBjbGVh
bihzZWxmKToKKyAgICAgICAgX2xvZy5pbmZvKCdDbGVhbmluZyB3ZWItcGxhdGZvcm0tdGVzdHMg
bWFzdGVyIGJyYW5jaCcpCisgICAgICAgIHNlbGYuX2dpdC5jaGVja291dCgnbWFzdGVyJykKKyAg
ICAgICAgc2VsZi5fZ2l0LnJlc2V0X2hhcmQoJ29yaWdpbi9tYXN0ZXInKQorCisgICAgZGVmIGNy
ZWF0ZV9icmFuY2hfd2l0aF9wYXRjaChzZWxmLCBwYXRjaCk6CisgICAgICAgIF9sb2cuaW5mbygn
QXBwbHlpbmcgcGF0Y2ggdG8gd2ViLXBsYXRmb3JtLXRlc3RzIGJyYW5jaCAnICsgc2VsZi5fYnJh
bmNoX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2dpdC5jaGVja291dF9u
ZXdfYnJhbmNoKHNlbGYuX2JyYW5jaF9uYW1lKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz
IGU6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcoZSkKKyAgICAgICAgICAgIF9sb2cuaW5mbygi
UmV0cnlpbmcgdG8gY3JlYXRlIHRoZSBicmFuY2giKQorICAgICAgICAgICAgc2VsZi5fZ2l0LmRl
bGV0ZV9icmFuY2goc2VsZi5fYnJhbmNoX25hbWUpCisgICAgICAgICAgICBzZWxmLl9naXQuY2hl
Y2tvdXRfbmV3X2JyYW5jaChzZWxmLl9icmFuY2hfbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgc2VsZi5fZ2l0LmFwcGx5X21haWxfcGF0Y2goW3BhdGNoLCAnLS1leGNsdWRlJywgJyot
ZXhwZWN0ZWQudHh0J10pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAg
ICAgIF9sb2cud2FybmluZyhlKQorICAgICAgICAgICAgc2VsZi5fZ2l0LmFwcGx5X21haWxfcGF0
Y2goWyctLWFib3J0J10pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5f
Z2l0LmNvbW1pdChbJy1hJywgJy1tJywgJyInICsgc2VsZi5fY29tbWl0X21lc3NhZ2UgKyAnIidd
KQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHB1c2hfdG9fd3B0X2Zvcmsoc2VsZik6
CisgICAgICAgIHNlbGYuY3JlYXRlX3VwbG9hZF9yZW1vdGVfaWZfbmVlZGVkKCkKKyAgICAgICAg
d3B0X2ZvcmtfYnJhbmNoX2dpdGh1Yl91cmwgPSAiaHR0cHM6Ly9naXRodWIuY29tLyIgKyBzZWxm
Ll91c2VybmFtZSArICIvd2ViLXBsYXRmb3JtLXRlc3RzL3RyZWUvIiArIHNlbGYuX3B1YmxpY19i
cmFuY2hfbmFtZQorICAgICAgICBfbG9nLmluZm8oJ1B1c2hpbmcgYnJhbmNoICcgKyBzZWxmLl9i
cmFuY2hfbmFtZSArICIgdG8gIiArIHNlbGYuX2dpdC5yZW1vdGUoWyJnZXQtdXJsIiwgc2VsZi5f
d3B0X2ZvcmtfcmVtb3RlXSkucnN0cmlwKCkpCisgICAgICAgIF9sb2cuaW5mbygnVGhpcyBtYXkg
dGFrZSBzb21lIHRpbWUnKQorICAgICAgICBzZWxmLl9naXQucHVzaChbc2VsZi5fd3B0X2Zvcmtf
cmVtb3RlLCBzZWxmLl9icmFuY2hfbmFtZSArICI6IiArIHNlbGYuX3B1YmxpY19icmFuY2hfbmFt
ZSwgJy1mJ10pCisgICAgICAgIF9sb2cuaW5mbygnQnJhbmNoIGF2YWlsYWJsZSBhdCAnICsgd3B0
X2ZvcmtfYnJhbmNoX2dpdGh1Yl91cmwpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYg
bWFrZV9wdWxsX3JlcXVlc3Qoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9naXRodWI6Cisg
ICAgICAgICAgICBfbG9nLmluZm8oJ01pc3NpbmcgaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgcHVs
bCByZXF1ZXN0JykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIF9sb2cuaW5mbygnTWFr
aW5nIHB1bGwgcmVxdWVzdCcpCisgICAgICAgIGRlc2NyaXB0aW9uID0gc2VsZi5fYnVnemlsbGEu
ZmV0Y2hfYnVnX2RpY3Rpb25hcnkoc2VsZi5fYnVnX2lkKVsidGl0bGUiXQorICAgICAgICByZXNw
b25zZSA9IHNlbGYuX2dpdGh1Yi5jcmVhdGVfcHIoc2VsZi5fd3B0X2ZvcmtfcmVtb3RlICsgJzon
ICsgc2VsZi5fYnJhbmNoX25hbWUsIHNlbGYuX2NvbW1pdF9tZXNzYWdlLCBkZXNjcmlwdGlvbikK
KyAgICAgICAgaHRtbF91cmwgPSByZXNwb25zZVsiaHRtbF91cmwiXQorICAgICAgICBpZiBzZWxm
Ll9idWdfaWQ6CisgICAgICAgICAgICBzZWxmLl9idWd6aWxsYS5wb3N0X2NvbW1lbnRfdG9fYnVn
KHNlbGYuX2J1Z19pZCwgIlN1Ym1pdHRlZCB3ZWItcGxhdGZvcm0tdGVzdHMgcHVsbCByZXF1ZXN0
OiAiICsgaHRtbF91cmwpCisKKyAgICBkZWYgZGVsZXRlX2xvY2FsX2JyYW5jaChzZWxmKToKKyAg
ICAgICAgX2xvZy5pbmZvKCdSZW1vdmluZyBicmFuY2ggJyArIHNlbGYuX2JyYW5jaF9uYW1lKQor
ICAgICAgICBzZWxmLl9naXQuY2hlY2tvdXQoJ21hc3RlcicpCisgICAgICAgIHNlbGYuX2dpdC5k
ZWxldGVfYnJhbmNoKHNlbGYuX2JyYW5jaF9uYW1lKQorCisgICAgZGVmIGNyZWF0ZV9naXRfcGF0
Y2goc2VsZik6CisgICAgICAgIHBhdGNoX2ZpbGUgPSAnLi9wYXRjaC50ZW1wLicgKyBzdHIodGlt
ZS5jbG9jaygpKQorICAgICAgICBnaXRfY29tbWl0ID0gIkhFQUQuLi4uIiBpZiBub3Qgc2VsZi5f
b3B0aW9ucy5naXRfY29tbWl0IGVsc2Ugc2VsZi5fb3B0aW9ucy5naXRfY29tbWl0ICsgIn4xLi4i
ICsgc2VsZi5fb3B0aW9ucy5naXRfY29tbWl0CisgICAgICAgIHBhdGNoX2RhdGEgPSBzZWxmLl9o
b3N0LnNjbSgpLmNyZWF0ZV9wYXRjaChnaXRfY29tbWl0LCBbJ0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMnXSkKKyAgICAgICAgaWYgbm90IHBhdGNoX2RhdGE6Cisg
ICAgICAgICAgICBfbG9nLmluZm8oJ05vIGNoYW5nZXMgdG8gdXBzdHJlYW0nKQorICAgICAgICAg
ICAgcmV0dXJuICcnCisgICAgICAgICMgRklYTUU6IFdlIGNhbiBwcm9iYWJseSB0cnkgdG8gdXNl
IC0tcmVsYXRpdmUgZ2l0IHBhcmFtZXRlciB0byBub3QgZG8gdGhhdCByZXBsYWNlbWVudC4KKyAg
ICAgICAgcGF0Y2hfZGF0YSA9IHBhdGNoX2RhdGEucmVwbGFjZSgnTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy8nLCAnJykKKyAgICAgICAgcGF0Y2hfZmlsZSA9IHNl
bGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChwYXRjaF9maWxlKQorICAgICAgICBzZWxmLl9maWxlc3lz
dGVtLndyaXRlX3RleHRfZmlsZShwYXRjaF9maWxlLCBwYXRjaF9kYXRhKQorICAgICAgICByZXR1
cm4gcGF0Y2hfZmlsZQorCisgICAgZGVmIGNyZWF0ZV91cGxvYWRfcmVtb3RlX2lmX25lZWRlZChz
ZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3dwdF9mb3JrX3JlbW90ZSBpbiBzZWxmLl9naXQu
cmVtb3RlKFtdKToKKyAgICAgICAgICAgIHNlbGYuX2dpdC5yZW1vdGUoWyJhZGQiLCBzZWxmLl93
cHRfZm9ya19yZW1vdGUsIHNlbGYuX3dwdF9mb3JrX3B1c2hfdXJsXSkKKworICAgIGRlZiBkb19l
eHBvcnQoc2VsZik6CisgICAgICAgIGdpdF9wYXRjaF9maWxlID0gc2VsZi5jcmVhdGVfZ2l0X3Bh
dGNoKCkKKworICAgICAgICBpZiBub3QgZ2l0X3BhdGNoX2ZpbGU6CisgICAgICAgICAgICBfbG9n
LmVycm9yKCJVbmFibGUgdG8gYXBwbHkgdGhlIHBhdGNoIHRvIHdlYi1wbGF0Zm9ybS10ZXN0cyBy
ZXBvc2l0b3J5IikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLmNy
ZWF0ZV9icmFuY2hfd2l0aF9wYXRjaChnaXRfcGF0Y2hfZmlsZSk6CisgICAgICAgICAgICBfbG9n
LmVycm9yKCJDYW5ub3QgY3JlYXRlIGJyYW5jaCBmcm9tIHRoZSBwYXRjaCIpCisgICAgICAgICAg
ICBzZWxmLmRlbGV0ZV9sb2NhbF9icmFuY2goKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAg
ICAgaWYgZ2l0X3BhdGNoX2ZpbGU6CisgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92
ZShnaXRfcGF0Y2hfZmlsZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLnB1
c2hfdG9fd3B0X2ZvcmsoKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNyZWF0
ZV9wdWxsX3JlcXVlc3Q6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubWFrZV9wdWxsX3JlcXVl
c3QoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5kZWxldGVfbG9jYWxfYnJh
bmNoKCkKKyAgICAgICAgICAgIF9sb2cuaW5mbygiZmluaXNoZWQiKQorICAgICAgICAgICAgc2Vs
Zi5jbGVhbigpCisKKworZGVmIHBhcnNlX2FyZ3MoYXJncyk6CisgICAgZGVzY3JpcHRpb24gPSAi
IiJTY3JpcHQgdG8gZ2VuZXJhdGUgYSBwdWxsIHJlcXVlc3QgdG8gVzNDIHdlYi1wbGF0Zm9ybS10
ZXN0cyByZXBvc2l0b3J5CisgICAgJ1Rvb2xzL1NjcmlwdHMvZXhwb3J0LXczYy10ZXN0LWNoYW5n
ZXMgLWcgSEVBRCAtYiBYWVonIHdpbGwgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAtIENsb25lIHdl
Yi1wbGF0Zm9ybS10ZXN0cyByZXBvc2l0b3J5IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHNldCBp
dCB1cCBmb3IgcHVzaGluZyBicmFuY2hlcy4KKyAgICAtIEdhdGhlciBXZWJLaXQgYnVnIGlkIFhZ
WiBidWcgYW5kIGNoYW5nZXMgdG8gYXBwbHkgdG8gd2ViLXBsYXRmb3JtLXRlc3RzIHJlcG9zaXRv
cnkgYmFzZWQgb24gdGhlIEhFQUQgY29tbWl0CisgICAgLSBDcmVhdGUgYSByZW1vdGUgYnJhbmNo
IG5hbWVkIHdlYmtpdC1YWVogb24gaHR0cHM6Ly9naXRodWIuY29tL1VTRVJOQU1FL3dlYi1wbGF0
Zm9ybS10ZXN0cy5naXQgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aGUgbG9jYWxseSBhcHBsaWVkIHBh
dGNoLgorICAgIC0gICAgVVNFUk5BTUUgbWF5IGJlIHNldCB1c2luZyB0aGUgZW52aXJvbm1lbnQg
dmFyaWFibGUgR0lUSFVCX1VTRVJOQU1FIG9yIGFzIGEgY29tbWFuZCBsaW5lIG9wdGlvbi4KKyAg
ICAtICAgIEdpdGh1YiBjcmVkZW50aWFsIG1heSBiZSBzZXQgdXNpbmcgdGhlIGVudmlyb25tZW50
IHZhcmlhYmxlIEdJVEhVQl9UT0tFTiBvciBhcyBhIGNvbW1hbmQgbGluZSBvcHRpb24uIChQbGVh
c2UgcHJvdmlkZSBhIHZhbGlkIEdpdEh1YiAnUGVyc29uYWwgYWNjZXNzIHRva2VuJyB3aXRoICdy
ZXBvJyBhcyBzY29wZSkKKyAgICAtIE1ha2UgdGhlIHJlbGF0ZWQgcHVsbCByZXF1ZXN0IG9uIGh0
dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzLmdpdCByZXBvc2l0b3J5Lgor
ICAgIC0gQ2xlYW4gdGhlIGxvY2FsIEdpdCByZXBvc2l0b3J5CisgICAgTm90ZXM6CisgICAgLSBJ
dCBpcyBzYWZlciB0byBwcm92aWRlIGEgYnVnIGlkIHVzaW5nIC1iIG9wdGlvbiAoYnVnIGlkIGZy
b20gYSBnaXQgY29tbWl0IGlzIG5vdCBhbHdheXMgd29ya2luZykuCisgICAgLSBBcyBhIGRyeSBy
dW4sIG9uZSBjYW4gc3RhcnQgYnkgcnVubmluZyB0aGUgc2NyaXB0IHdpdGhvdXQgLWMuIFRoaXMg
d2lsbCBvbmx5IGNyZWF0ZSB0aGUgYnJhbmNoIG9uIHRoZSB1c2VyIHB1YmxpYyBHaXRIdWIgcmVw
b3NpdG9yeS4KKyAgICBGSVhNRToKKyAgICAtIEFkZCBhIGxhYmVsIG9uIGdpdGh1YiBpc3N1ZXMK
KyAgICAtIFRoZSBzY3JpcHQgaXMgbm90IHlldCBhYmxlIHRvIHVwZGF0ZSBhbiBleGlzdGluZyBw
dWxsIHJlcXVlc3QKKyAgICAtIE5lZWQgYSB3YXkgdG8gbW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2Yg
dGhlIHB1bCByZXF1ZXN0IHNvIHRoYXQgc3RhdHVzIG9mIGFsbCBwZW5kaW5nIHB1bGwgcmVxdWVz
dHMgY2FuIGJlIGRvbmUgYXQgaW1wb3J0IHRpbWUuCisgICAgIiIiCisgICAgcGFyc2VyID0gYXJn
cGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMgLi4uJywg
ZGVzY3JpcHRpb249ZGVzY3JpcHRpb24sIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdEZXNj
cmlwdGlvbkhlbHBGb3JtYXR0ZXIpCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZycsICct
LWdpdC1jb21taXQnLCBkZXN0PSdnaXRfY29tbWl0JywgZGVmYXVsdD1Ob25lLCBoZWxwPSdHaXQg
Y29tbWl0IHRvIGFwcGx5JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJ1Zycs
IGRlc3Q9J2J1Z19pZCcsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nQnVnIElEIHRvIHNlYXJjaCBmb3Ig
cGF0Y2gnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1hJywgJy0tYXR0YWNobWVudCcsIGRl
c3Q9J2F0dGFjaG1lbnRfaWQnLCBkZWZhdWx0PU5vbmUsIGhlbHA9J0F0dGFjaG1lbnQgSUQgdG8g
c2VhcmNoIGZvciBwYXRjaCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW4nLCAnLS1uYW1l
JywgZGVzdD0ndXNlcm5hbWUnLCBkZWZhdWx0PU5vbmUsIGhlbHA9J2dpdGh1YiB1c2VyIG5hbWUg
aWYgR0lUSFVCX1VTRVJOQU1FIGlzIG5vdCBkZWZpbmVkIG9yIGdpdGh1Yi51c2VybmFtZSBpbiB0
aGUgV1BUIHJlcG8gY29uZmlnIGlzIG5vdCBkZWZpbmVkJykKKyAgICBwYXJzZXIuYWRkX2FyZ3Vt
ZW50KCctdCcsICctLXRva2VuJywgZGVzdD0ndG9rZW4nLCBkZWZhdWx0PU5vbmUsIGhlbHA9J2dp
dGh1YiB0b2tlbiwgbmVlZGVkIGZvciBjcmVhdGluZyBwdWxsIHJlcXVlc3RzIG9ubHkgaWYgR0lU
SFVCX1RPS0VOIGVudiB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZCBvciBnaXRodWIudG9rZW4gaW4g
dGhlIFdQVCByZXBvIGNvbmZpZyBpcyBub3QgZGVmaW5lZCcpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnLXUnLCAnLS11cmwnLCBkZXN0PSdyZXBvc2l0b3J5X3B1YmxpY191cmwnLCBkZWZhdWx0
PU5vbmUsIGhlbHA9J1B1YmxpYyByZXBvc2l0b3J5IHVybCcpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnLWJuJywgJy0tYnJhbmNoLW5hbWUnLCBkZXN0PSdwdWJsaWNfYnJhbmNoX25hbWUnLCBk
ZWZhdWx0PU5vbmUsIGhlbHA9J0JyYW5jaCBuYW1lIHRvIHB1c2ggdG8nKQorICAgIHBhcnNlci5h
ZGRfYXJndW1lbnQoJy1tJywgJy0tbWVzc2FnZScsIGRlc3Q9J21lc3NhZ2UnLCBkZWZhdWx0PU5v
bmUsIGhlbHA9J0NvbW1pdCBtZXNzYWdlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcics
ICctLXJlbW90ZScsIGRlc3Q9J3JlcG9zaXRvcnlfcmVtb3RlJywgZGVmYXVsdD1Ob25lLCBoZWxw
PSdyZXBvc2l0b3J5IG9yaWdpbiB0byB1c2UgdG8gcHVzaCcpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnLWQnLCAnLS1yZXBvc2l0b3J5JywgZGVzdD0ncmVwb3NpdG9yeV9kaXJlY3RvcnknLCBk
ZWZhdWx0PU5vbmUsIGhlbHA9J3JlcG9zaXRvcnkgZGlyZWN0b3J5JykKKyAgICBwYXJzZXIuYWRk
X2FyZ3VtZW50KCctYycsICctLWNyZWF0ZS1wcicsIGRlc3Q9J2NyZWF0ZV9wdWxsX3JlcXVlc3Qn
LCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdjcmVhdGUgcHVsbCBy
ZXF1ZXN0IHRvIHczYyB3ZWItcGxhdGZvcm0tdGVzdHMnKQorCisgICAgb3B0aW9ucywgYXJncyA9
IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3MpCisKKyAgICByZXR1cm4gb3B0aW9ucworCisK
K2RlZiBjb25maWd1cmVfbG9nZ2luZygpOgorICAgIGNsYXNzIExvZ0hhbmRsZXIobG9nZ2luZy5T
dHJlYW1IYW5kbGVyKToKKworICAgICAgICBkZWYgZm9ybWF0KHNlbGYsIHJlY29yZCk6CisgICAg
ICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+IGxvZ2dpbmcuSU5GTzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gIiVzOiAlcyIgJSAocmVjb3JkLmxldmVsbmFtZSwgcmVjb3JkLmdldE1lc3NhZ2Uo
KSkKKyAgICAgICAgICAgIHJldHVybiByZWNvcmQuZ2V0TWVzc2FnZSgpCisKKyAgICBsb2dnZXIg
PSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykK
KyAgICBoYW5kbGVyID0gTG9nSGFuZGxlcigpCisgICAgaGFuZGxlci5zZXRMZXZlbChsb2dnaW5n
LklORk8pCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKyAgICByZXR1cm4gaGFuZGxl
cgorCisKK2RlZiBtYWluKF9hcmd2LCBfc3Rkb3V0LCBfc3RkZXJyKToKKyAgICBvcHRpb25zID0g
cGFyc2VfYXJncyhfYXJndikKKworICAgIGNvbmZpZ3VyZV9sb2dnaW5nKCkKKworICAgIHRlc3Rf
ZXhwb3J0ZXIgPSBUZXN0RXhwb3J0ZXIoSG9zdCgpLCBvcHRpb25zKQorCisgICAgdGVzdF9leHBv
cnRlci5kb19leHBvcnQoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mv
dGVzdF9leHBvcnRlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rl
c3RfZXhwb3J0ZXJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY2YTQ3ZDk0MjE3OTk3YTUwOTQ3
MTdjNDY3OTIxNmIxMDUyOTU2MQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdzNjL3Rlc3RfZXhwb3J0ZXJfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwxMTQgQEAKKwor
IyBDb3B5cmlnaHQgKGMpIDIwMTcsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QK
KworZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdF9tb2NrIGltcG9ydCBNb2NrSG9zdAorZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0
ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9j
a0V4ZWN1dGl2ZTIKK2Zyb20gd2Via2l0cHkudzNjLnRlc3RfZXhwb3J0ZXIgaW1wb3J0IFRlc3RF
eHBvcnRlciwgcGFyc2VfYXJncworZnJvbSB3ZWJraXRweS53M2Mud3B0X2dpdGh1Yl9tb2NrIGlt
cG9ydCBNb2NrV1BUR2l0SHViCisKKworY2xhc3MgVGVzdEV4cG9ydGVyVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBNb2NrQnVnemlsbGEob2JqZWN0KToKKyAgICAgICAgZGVm
IF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5jYWxscyA9IFtdCisKKyAgICAgICAg
ZGVmIGZldGNoX2J1Z19kaWN0aW9uYXJ5KHNlbGYsIGlkKToKKyAgICAgICAgICAgIHNlbGYuY2Fs
bHMuYXBwZW5kKCdmZXRjaCBidWcgJyArIGlkKQorICAgICAgICAgICAgcmV0dXJuIHsidGl0bGUi
OiAibXkgYnVnIHRpdGxlIn0KKworICAgICAgICBkZWYgcG9zdF9jb21tZW50X3RvX2J1ZyhzZWxm
LCBpZCwgY29tbWVudCk6CisgICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgncG9zdCBjb21t
ZW50IHRvIGJ1ZyAnICsgaWQgKyAnIDogJyArIGNvbW1lbnQpCisgICAgICAgICAgICByZXR1cm4g
VHJ1ZQorCisgICAgY2xhc3MgTW9ja0dpdChvYmplY3QpOgorICAgICAgICBAY2xhc3NtZXRob2QK
KyAgICAgICAgZGVmIGNsb25lKGNscywgdXJsLCBkaXJlY3RvcnksIGV4ZWN1dGl2ZT1Ob25lKToK
KyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJl
cG9zaXRvcnlfZGlyZWN0b3J5LCBwYXRjaF9kaXJlY3RvcmllcywgZXhlY3V0aXZlLCBmaWxlc3lz
dGVtKToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMgPSBbcmVwb3NpdG9yeV9kaXJlY3RvcnldCisK
KyAgICAgICAgZGVmIGZldGNoKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQo
J2ZldGNoJykKKworICAgICAgICBkZWYgY2hlY2tvdXQoc2VsZiwgYnJhbmNoKToKKyAgICAgICAg
ICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdjaGVja291dCAnICsgYnJhbmNoKQorCisgICAgICAgIGRl
ZiByZXNldF9oYXJkKHNlbGYsIGNvbW1pdCk6CisgICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVu
ZCgncmVzZXQgaGFyZCAnICsgY29tbWl0KQorCisgICAgICAgIGRlZiBwdXNoKHNlbGYsIG9wdGlv
bnMpOgorICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ3B1c2ggJyArICcgJy5qb2luKG9w
dGlvbnMpKQorCisgICAgICAgIGRlZiBmb3JtYXRfcGF0Y2goc2VsZiwgb3B0aW9ucyk6CisgICAg
ICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnZm9ybWF0IHBhdGNoICcgKyAnICcuam9pbihvcHRp
b25zKSkKKyAgICAgICAgICAgIHJldHVybiAnZm9ybWF0dGVkIHBhdGNoIHdpdGggY2hhbmdlcyBk
b25lIHRvIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdGVzdDEu
aHRtbCcKKworICAgICAgICBkZWYgZGVsZXRlX2JyYW5jaChzZWxmLCBicmFuY2hfbmFtZSk6Cisg
ICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnZGVsZXRlIGJyYW5jaCAnICsgYnJhbmNoX25h
bWUpCisKKyAgICAgICAgZGVmIGNoZWNrb3V0X25ld19icmFuY2goc2VsZiwgYnJhbmNoX25hbWUp
OgorICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ2NoZWNrb3V0IG5ldyBicmFuY2ggJyAr
IGJyYW5jaF9uYW1lKQorCisgICAgICAgIGRlZiBhbShzZWxmLCBvcHRpb25zKToKKyAgICAgICAg
ICAgICMgZmlsdGVyaW5nIG9wdGlvbnNbMF0gYXMgaXQgY2hhbmdlcyBmb3IgZXZlcnkgcnVuCisg
ICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnYW0gcGF0Y2gudGVtcCAnICsgJyAnLmpvaW4o
b3B0aW9uc1sxOl0pKQorCisgICAgICAgIGRlZiBjb21taXQoc2VsZiwgb3B0aW9ucyk6CisgICAg
ICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnY29tbWl0ICcgKyAnICcuam9pbihvcHRpb25zKSkK
KworICAgICAgICBkZWYgcmVtb3RlKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICAgICAgc2VsZi5j
YWxscy5hcHBlbmQoJ3JlbW90ZSAnICsgJyAnLmpvaW4ob3B0aW9ucykpCisgICAgICAgICAgICBy
ZXR1cm4gW10KKworICAgIGRlZiB0ZXN0X2V4cG9ydChzZWxmKToKKyAgICAgICAgaG9zdCA9IE1v
Y2tIb3N0KCkKKyAgICAgICAgaG9zdC5leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihleGNlcHRp
b249T1NFcnJvcigpKQorICAgICAgICBob3N0LmZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbSgp
CisKKyAgICAgICAgb3B0aW9ucyA9IHBhcnNlX2FyZ3MoWyd0ZXN0X2V4cG9ydGVyLnB5JywgJy1n
JywgJ0hFQUQnLCAnLWInLCAnMTIzNCcsICctYycsICctbicsICdVU0VSJywgJy10JywgJ1RPS0VO
J10pCisgICAgICAgIGV4cG9ydGVyID0gVGVzdEV4cG9ydGVyKGhvc3QsIG9wdGlvbnMsIFRlc3RF
eHBvcnRlclRlc3QuTW9ja0dpdCwgVGVzdEV4cG9ydGVyVGVzdC5Nb2NrQnVnemlsbGEsIE1vY2tX
UFRHaXRIdWIpCisgICAgICAgIGV4cG9ydGVyLmRvX2V4cG9ydCgpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKGV4cG9ydGVyLmdpdEh1Yi5jYWxscywgWydjcmVhdGVfcHInXSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoZXhwb3J0ZXIuZ2l0LmNhbGxzLCBbCisgICAgICAgICAgICAnL21v
Y2stY2hlY2tvdXQvV2ViS2l0QnVpbGQvdzNjLXRlc3RzL3dlYi1wbGF0Zm9ybS10ZXN0cycsCisg
ICAgICAgICAgICAnZmV0Y2gnLAorICAgICAgICAgICAgJ2NoZWNrb3V0IG1hc3RlcicsCisgICAg
ICAgICAgICAncmVzZXQgaGFyZCBvcmlnaW4vbWFzdGVyJywKKyAgICAgICAgICAgICdjaGVja291
dCBuZXcgYnJhbmNoIHdlYmtpdC0xMjM0JywKKyAgICAgICAgICAgICdhbSBwYXRjaC50ZW1wIC0t
ZXhjbHVkZSAqLWV4cGVjdGVkLnR4dCcsCisgICAgICAgICAgICAnY29tbWl0IC0tYW1lbmQgLW0g
IldlYktpdCBleHBvcnQgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyMzQiJywKKyAgICAgICAgICAgICdyZW1vdGUgJywKKyAgICAgICAgICAgICdyZW1vdGUgYWRk
IFVTRVIgaHR0cHM6Ly9VU0VSQGdpdGh1Yi5jb20vVVNFUi93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0
JywKKyAgICAgICAgICAgICdwdXNoIFVTRVIgd2Via2l0LTEyMzQgLWYnLAorICAgICAgICAgICAg
J2NoZWNrb3V0IG1hc3RlcicsCisgICAgICAgICAgICAnZGVsZXRlIGJyYW5jaCB3ZWJraXQtMTIz
NCcsCisgICAgICAgICAgICAnY2hlY2tvdXQgbWFzdGVyJywKKyAgICAgICAgICAgICdyZXNldCBo
YXJkIG9yaWdpbi9tYXN0ZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwb3J0ZXIu
YnVnemlsbGEuY2FsbHMsIFsKKyAgICAgICAgICAgICdmZXRjaCBidWcgMTIzNCcsCisgICAgICAg
ICAgICAncG9zdCBjb21tZW50IHRvIGJ1ZyAxMjM0IDogU3VibWl0dGVkIHdlYi1wbGF0Zm9ybS10
ZXN0cyBwdWxsIHJlcXVlc3Q6IG15LWdpdGh1Yi11cmwnXSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3czYy93cHRfZ2l0aHViLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhNjJjNDllY2ZiMGJmZDMxMWExMzhiNDY2
YjM4NzFjYzMyMDZiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3czYy93cHRfZ2l0aHViLnB5CkBAIC0wLDAgKzEsNDI3IEBACisjIENvcHlyaWdodCAyMDE2IFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworaW1wb3J0IGJhc2U2NAoraW1wb3J0IGpzb24KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUK
K2ltcG9ydCB1cmxsaWIyCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCisKK2Zy
b20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAorZnJvbSB3ZWJraXRw
eS53M2MuY29tbW9uIGltcG9ydCBXUFRfR0hfT1JHLCBXUFRfR0hfUkVQT19OQU1FLCBFWFBPUlRf
UFJfTEFCRUwKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorQVBJX0JBU0Ug
PSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbScKK01BWF9QRVJfUEFHRSA9IDEwMAorCisKK2NsYXNz
IFdQVEdpdEh1YihvYmplY3QpOgorICAgICIiIkFuIGludGVyZmFjZSB0byBHaXRIdWIgZm9yIGlu
dGVyYWN0aW5nIHdpdGggdGhlIHdlYi1wbGF0Zm9ybS10ZXN0cyByZXBvLgorCisgICAgVGhpcyBj
bGFzcyBjb250YWlucyBtZXRob2RzIGZvciBzZW5kaW5nIHJlcXVlc3RzIHRvIHRoZSBHaXRIdWIg
QVBJLgorICAgIFVubGVzcyBtZW50aW9uZWQgb3RoZXJ3aXNlLCBBUEkgY2FsbHMgYXJlIGV4cGVj
dGVkIHRvIHN1Y2NlZWQsIGFuZAorICAgIEdpdEh1YkVycm9yIHdpbGwgYmUgcmFpc2VkIGlmIGFu
IEFQSSBjYWxsIGZhaWxzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Qs
IHVzZXI9Tm9uZSwgdG9rZW49Tm9uZSwgcHJfaGlzdG9yeV93aW5kb3c9NTAwMCk6CisgICAgICAg
IHNlbGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi51c2VyID0gdXNlcgorICAgICAgICBzZWxm
LnRva2VuID0gdG9rZW4KKworICAgICAgICBzZWxmLl9wcl9oaXN0b3J5X3dpbmRvdyA9IHByX2hp
c3Rvcnlfd2luZG93CisKKyAgICBkZWYgaGFzX2NyZWRlbnRpYWxzKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi51c2VyIGFuZCBzZWxmLnRva2VuCisKKyAgICBkZWYgYXV0aF90b2tlbihzZWxm
KToKKyAgICAgICAgYXNzZXJ0IHNlbGYuaGFzX2NyZWRlbnRpYWxzKCkKKyAgICAgICAgcmV0dXJu
IGJhc2U2NC5iNjRlbmNvZGUoJ3t9Ont9Jy5mb3JtYXQoc2VsZi51c2VyLCBzZWxmLnRva2VuKSkK
KworICAgIGRlZiByZXF1ZXN0KHNlbGYsIHBhdGgsIG1ldGhvZCwgYm9keT1Ob25lKToKKyAgICAg
ICAgIiIiU2VuZHMgYSByZXF1ZXN0IHRvIEdpdEh1YiBBUEkgYW5kIGRlc2VyaWFsaXplcyB0aGUg
cmVzcG9uc2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHBhdGg6IEFQSSBlbmRwb2lu
dCB3aXRob3V0IGJhc2UgVVJMIChzdGFydGluZyB3aXRoICcvJykuCisgICAgICAgICAgICBtZXRo
b2Q6IEhUVFAgbWV0aG9kIHRvIGJlIHVzZWQgZm9yIHRoaXMgcmVxdWVzdC4KKyAgICAgICAgICAg
IGJvZHk6IE9wdGlvbmFsIHBheWxvYWQgaW4gdGhlIHJlcXVlc3QgYm9keSAoZGVmYXVsdD1Ob25l
KS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBKU09OUmVzcG9uc2UgaW5zdGFu
Y2UuCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQgcGF0aC5zdGFydHN3aXRoKCcvJykKKwor
ICAgICAgICBpZiBib2R5OgorICAgICAgICAgICAgYm9keSA9IGpzb24uZHVtcHMoYm9keSkKKwor
ICAgICAgICBoZWFkZXJzID0geydBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytq
c29uJ30KKworICAgICAgICBpZiBzZWxmLmhhc19jcmVkZW50aWFscygpOgorICAgICAgICAgICAg
aGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gJ0Jhc2ljIHt9Jy5mb3JtYXQoc2VsZi5hdXRoX3Rv
a2VuKCkpCisKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmhvc3Qud2ViLnJlcXVlc3QoCisgICAg
ICAgICAgICBtZXRob2Q9bWV0aG9kLAorICAgICAgICAgICAgdXJsPUFQSV9CQVNFICsgcGF0aCwK
KyAgICAgICAgICAgIGRhdGE9Ym9keSwKKyAgICAgICAgICAgIGhlYWRlcnM9aGVhZGVycworICAg
ICAgICApCisgICAgICAgIHJldHVybiBKU09OUmVzcG9uc2UocmVzcG9uc2UpCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIGV4dHJhY3RfbGlua19uZXh0KGxpbmtfaGVhZGVyKToKKyAgICAg
ICAgIiIiRXh0cmFjdHMgdGhlIFVSSSB0byB0aGUgbmV4dCBwYWdlIG9mIHJlc3VsdHMgZnJvbSBh
IHJlc3BvbnNlLgorCisgICAgICAgIEFzIHBlciBHaXRIdWIgQVBJIHNwZWNzLCB0aGUgbGluayB0
byB0aGUgbmV4dCBwYWdlIG9mIHJlc3VsdHMgaXMKKyAgICAgICAgZXh0cmFjdGVkIGZyb20gdGhl
IExpbmsgaGVhZGVyIC0tIHRoZSBsaW5rIHdpdGggcmVsYXRpb24gdHlwZSAibmV4dCIuCisgICAg
ICAgIERvY3M6IGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvI3BhZ2luYXRpb24gKGFu
ZCBSRkMgNTk4OCkKKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbGlua19oZWFkZXI6IFRo
ZSB2YWx1ZSBvZiB0aGUgTGluayBoZWFkZXIgaW4gcmVzcG9uc2VzIGZyb20gR2l0SHViLgorCisg
ICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBQYXRoIHRvIHRoZSBuZXh0IHBhZ2UgKHdpdGhv
dXQgYmFzZSBVUkwpLCBvciBOb25lIGlmIG5vdCBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAg
ICMgVE9ETyhyb2JlcnRtYSk6IEludmVzdGlnYXRlICJtYXkgcmVxdWlyZSBleHBhbnNpb24gYXMg
VVJJIHRlbXBsYXRlcyIgbWVudGlvbmVkIGluIGRvY3MuCisgICAgICAgICMgRXhhbXBsZSBMaW5r
IGhlYWRlcjoKKyAgICAgICAgIyA8aHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXNvdXJjZXM/cGFn
ZT0zPjsgcmVsPSJuZXh0IiwgPGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVzb3VyY2VzP3BhZ2U9
NTA+OyByZWw9Imxhc3QiCisgICAgICAgIGlmIGxpbmtfaGVhZGVyIGlzIE5vbmU6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorICAgICAgICBsaW5rX3JlID0gcmUuY29tcGlsZShyJzwoLis/KT47
ICpyZWw9IiguKz8pIicpCisgICAgICAgIG1hdGNoID0gbGlua19yZS5zZWFyY2gobGlua19oZWFk
ZXIpCisgICAgICAgIHdoaWxlIG1hdGNoOgorICAgICAgICAgICAgbGluaywgcmVsID0gbWF0Y2gu
Z3JvdXBzKCkKKyAgICAgICAgICAgIGlmIHJlbC5sb3dlcigpID09ICduZXh0JzoKKyAgICAgICAg
ICAgICAgICAjIFN0cmlwIEFQSV9CQVNFIHNvIHRoYXQgdGhlIHJldHVybiB2YWx1ZSBpcyB1c2Vm
dWwgZm9yIHJlcXVlc3QoKS4KKyAgICAgICAgICAgICAgICBhc3NlcnQgbGluay5zdGFydHN3aXRo
KEFQSV9CQVNFKQorICAgICAgICAgICAgICAgIHJldHVybiBsaW5rW2xlbihBUElfQkFTRSk6XQor
ICAgICAgICAgICAgbWF0Y2ggPSBsaW5rX3JlLnNlYXJjaChsaW5rX2hlYWRlciwgbWF0Y2guZW5k
KCkpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgY3JlYXRlX3ByKHNlbGYsIHJlbW90
ZV9icmFuY2hfbmFtZSwgZGVzY190aXRsZSwgYm9keSk6CisgICAgICAgICIiIkNyZWF0ZXMgYSBQ
UiBvbiBHaXRIdWIuCisKKyAgICAgICAgQVBJIGRvYzogaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHVi
LmNvbS92My9wdWxscy8jY3JlYXRlLWEtcHVsbC1yZXF1ZXN0CisKKyAgICAgICAgUmV0dXJuczoK
KyAgICAgICAgICAgIFRoZSBpc3N1ZSBudW1iZXIgb2YgdGhlIGNyZWF0ZWQgUFIuCisgICAgICAg
ICIiIgorICAgICAgICBhc3NlcnQgcmVtb3RlX2JyYW5jaF9uYW1lCisgICAgICAgIGFzc2VydCBk
ZXNjX3RpdGxlCisgICAgICAgIGFzc2VydCBib2R5CisKKyAgICAgICAgcGF0aCA9ICcvcmVwb3Mv
JXMvJXMvcHVsbHMnICUgKFdQVF9HSF9PUkcsIFdQVF9HSF9SRVBPX05BTUUpCisgICAgICAgIGJv
ZHkgPSB7CisgICAgICAgICAgICAndGl0bGUnOiBkZXNjX3RpdGxlLAorICAgICAgICAgICAgJ2Jv
ZHknOiBib2R5LAorICAgICAgICAgICAgJ2hlYWQnOiByZW1vdGVfYnJhbmNoX25hbWUsCisgICAg
ICAgICAgICAnYmFzZSc6ICdtYXN0ZXInLAorICAgICAgICB9CisgICAgICAgIHJlc3BvbnNlID0g
c2VsZi5yZXF1ZXN0KHBhdGgsIG1ldGhvZD0nUE9TVCcsIGJvZHk9Ym9keSkKKworICAgICAgICBp
ZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDE6CisgICAgICAgICAgICByYWlzZSBHaXRIdWJF
cnJvcigyMDEsIHJlc3BvbnNlLnN0YXR1c19jb2RlLCAnY3JlYXRlIFBSJykKKworICAgICAgICBy
ZXR1cm4gcmVzcG9uc2UuZGF0YVsnbnVtYmVyJ10KKworICAgIGRlZiB1cGRhdGVfcHIoc2VsZiwg
cHJfbnVtYmVyLCBkZXNjX3RpdGxlLCBib2R5KToKKyAgICAgICAgIiIiVXBkYXRlcyBhIFBSIG9u
IEdpdEh1Yi4KKworICAgICAgICBBUEkgZG9jOiBodHRwczovL2RldmVsb3Blci5naXRodWIuY29t
L3YzL3B1bGxzLyN1cGRhdGUtYS1wdWxsLXJlcXVlc3QKKyAgICAgICAgIiIiCisgICAgICAgIHBh
dGggPSAnL3JlcG9zL3t9L3t9L3B1bGxzL3t9Jy5mb3JtYXQoCisgICAgICAgICAgICBXUFRfR0hf
T1JHLAorICAgICAgICAgICAgV1BUX0dIX1JFUE9fTkFNRSwKKyAgICAgICAgICAgIHByX251bWJl
cgorICAgICAgICApCisgICAgICAgIGJvZHkgPSB7CisgICAgICAgICAgICAndGl0bGUnOiBkZXNj
X3RpdGxlLAorICAgICAgICAgICAgJ2JvZHknOiBib2R5LAorICAgICAgICB9CisgICAgICAgIHJl
c3BvbnNlID0gc2VsZi5yZXF1ZXN0KHBhdGgsIG1ldGhvZD0nUEFUQ0gnLCBib2R5PWJvZHkpCisK
KyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgcmFp
c2UgR2l0SHViRXJyb3IoMjAwLCByZXNwb25zZS5zdGF0dXNfY29kZSwgJ3VwZGF0ZSBQUiAlZCcg
JSBwcl9udW1iZXIpCisKKyAgICBkZWYgYWRkX2xhYmVsKHNlbGYsIG51bWJlciwgbGFiZWwpOgor
ICAgICAgICAiIiJBZGRzIGEgbGFiZWwgdG8gYSBHaXRIdWIgaXNzdWUgKG9yIFBSKS4KKworICAg
ICAgICBBUEkgZG9jOiBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL2lzc3Vlcy9sYWJl
bHMvI2FkZC1sYWJlbHMtdG8tYW4taXNzdWUKKyAgICAgICAgIiIiCisgICAgICAgIHBhdGggPSAn
L3JlcG9zLyVzLyVzL2lzc3Vlcy8lZC9sYWJlbHMnICUgKAorICAgICAgICAgICAgV1BUX0dIX09S
RywKKyAgICAgICAgICAgIFdQVF9HSF9SRVBPX05BTUUsCisgICAgICAgICAgICBudW1iZXIKKyAg
ICAgICAgKQorICAgICAgICBib2R5ID0gW2xhYmVsXQorICAgICAgICByZXNwb25zZSA9IHNlbGYu
cmVxdWVzdChwYXRoLCBtZXRob2Q9J1BPU1QnLCBib2R5PWJvZHkpCisKKyAgICAgICAgaWYgcmVz
cG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgcmFpc2UgR2l0SHViRXJyb3Io
MjAwLCByZXNwb25zZS5zdGF0dXNfY29kZSwgJ2FkZCBsYWJlbCAlcyB0byBpc3N1ZSAlZCcgJSAo
bGFiZWwsIG51bWJlcikpCisKKyAgICBkZWYgcmVtb3ZlX2xhYmVsKHNlbGYsIG51bWJlciwgbGFi
ZWwpOgorICAgICAgICAiIiJSZW1vdmVzIGEgbGFiZWwgZnJvbSBhIEdpdEh1YiBpc3N1ZSAob3Ig
UFIpLgorCisgICAgICAgIEFQSSBkb2M6IGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMv
aXNzdWVzL2xhYmVscy8jcmVtb3ZlLWEtbGFiZWwtZnJvbS1hbi1pc3N1ZQorICAgICAgICAiIiIK
KyAgICAgICAgcGF0aCA9ICcvcmVwb3MvJXMvJXMvaXNzdWVzLyVkL2xhYmVscy8lcycgJSAoCisg
ICAgICAgICAgICBXUFRfR0hfT1JHLAorICAgICAgICAgICAgV1BUX0dIX1JFUE9fTkFNRSwKKyAg
ICAgICAgICAgIG51bWJlciwKKyAgICAgICAgICAgIHVybGxpYjIucXVvdGUobGFiZWwpLAorICAg
ICAgICApCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHBhdGgsIG1ldGhvZD0nREVM
RVRFJykKKworICAgICAgICAjIFRoZSBHaXRIdWIgQVBJIGRvY3VtZW50YXRpb24gY2xhaW1zIHRo
YXQgdGhpcyBlbmRwb2ludCByZXR1cm5zIGEgMjA0CisgICAgICAgICMgb24gc3VjY2Vzcy4gSG93
ZXZlciBpbiByZWFsaXR5IGl0IHJldHVybnMgYSAyMDAuCisgICAgICAgIGlmIHJlc3BvbnNlLnN0
YXR1c19jb2RlIG5vdCBpbiAoMjAwLCAyMDQpOgorICAgICAgICAgICAgcmFpc2UgR2l0SHViRXJy
b3IoKDIwMCwgMjA0KSwgcmVzcG9uc2Uuc3RhdHVzX2NvZGUsICdyZW1vdmUgbGFiZWwgJXMgZnJv
bSBpc3N1ZSAlZCcgJSAobGFiZWwsIG51bWJlcikpCisKKyAgICBkZWYgbWFrZV9wcl9mcm9tX2l0
ZW0oc2VsZiwgaXRlbSk6CisgICAgICAgIGxhYmVscyA9IFtsYWJlbFsnbmFtZSddIGZvciBsYWJl
bCBpbiBpdGVtWydsYWJlbHMnXV0KKyAgICAgICAgcmV0dXJuIFB1bGxSZXF1ZXN0KAorICAgICAg
ICAgICAgdGl0bGU9aXRlbVsndGl0bGUnXSwKKyAgICAgICAgICAgIG51bWJlcj1pdGVtWydudW1i
ZXInXSwKKyAgICAgICAgICAgIGJvZHk9aXRlbVsnYm9keSddLAorICAgICAgICAgICAgc3RhdGU9
aXRlbVsnc3RhdGUnXSwKKyAgICAgICAgICAgIGxhYmVscz1sYWJlbHMpCisKKyAgICBAbWVtb2l6
ZWQKKyAgICBkZWYgYWxsX3B1bGxfcmVxdWVzdHMoc2VsZik6CisgICAgICAgICIiIkZldGNoZXMg
YWxsIChvcGVuIGFuZCBjbG9zZWQpIFBScyB3aXRoIHRoZSBleHBvcnQgbGFiZWwuCisKKyAgICAg
ICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIFBScyBpcyBwcl9oaXN0b3J5X3dpbmRvdy4gU2VhcmNo
IGVuZHBvaW50IGlzIHVzZWQKKyAgICAgICAgaW5zdGVhZCBvZiBsaXN0aW5nIFBScywgYmVjYXVz
ZSB3ZSBuZWVkIHRvIGZpbHRlciBieSBsYWJlbHMuCisgICAgICAgIEFQSSBkb2M6IGh0dHBzOi8v
ZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvc2VhcmNoLyNzZWFyY2gtaXNzdWVzCisKKyAgICAgICAg
UmV0dXJuczoKKyAgICAgICAgICAgIEEgbGlzdCBvZiBQdWxsUmVxdWVzdCBuYW1lZHR1cGxlcy4K
KyAgICAgICAgIiIiCisgICAgICAgIHBhdGggPSAoCisgICAgICAgICAgICAnL3NlYXJjaC9pc3N1
ZXMnCisgICAgICAgICAgICAnP3E9cmVwbzp7fS97fSUyMHR5cGU6cHIlMjBsYWJlbDp7fScKKyAg
ICAgICAgICAgICcmcGFnZT0xJworICAgICAgICAgICAgJyZwZXJfcGFnZT17fScKKyAgICAgICAg
KS5mb3JtYXQoCisgICAgICAgICAgICBXUFRfR0hfT1JHLAorICAgICAgICAgICAgV1BUX0dIX1JF
UE9fTkFNRSwKKyAgICAgICAgICAgIEVYUE9SVF9QUl9MQUJFTCwKKyAgICAgICAgICAgIG1pbihN
QVhfUEVSX1BBR0UsIHNlbGYuX3ByX2hpc3Rvcnlfd2luZG93KQorICAgICAgICApCisgICAgICAg
IGFsbF9wcnMgPSBbXQorICAgICAgICB3aGlsZSBwYXRoIGlzIG5vdCBOb25lIGFuZCBsZW4oYWxs
X3BycykgPCBzZWxmLl9wcl9oaXN0b3J5X3dpbmRvdzoKKyAgICAgICAgICAgIHJlc3BvbnNlID0g
c2VsZi5yZXF1ZXN0KHBhdGgsIG1ldGhvZD0nR0VUJykKKyAgICAgICAgICAgIGlmIHJlc3BvbnNl
LnN0YXR1c19jb2RlID09IDIwMDoKKyAgICAgICAgICAgICAgICBpZiByZXNwb25zZS5kYXRhWydp
bmNvbXBsZXRlX3Jlc3VsdHMnXToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgR2l0SHViRXJy
b3IoJ2NvbXBsZXRlIHJlc3VsdHMnLCAnaW5jb21wbGV0ZSByZXN1bHRzJywgJ2ZldGNoIGFsbCBw
dWxsIHJlcXVlc3RzJywgcGF0aCkKKworICAgICAgICAgICAgICAgIHBycyA9IFtzZWxmLm1ha2Vf
cHJfZnJvbV9pdGVtKGl0ZW0pIGZvciBpdGVtIGluIHJlc3BvbnNlLmRhdGFbJ2l0ZW1zJ11dCisg
ICAgICAgICAgICAgICAgYWxsX3BycyArPSBwcnNbOnNlbGYuX3ByX2hpc3Rvcnlfd2luZG93IC0g
bGVuKGFsbF9wcnMpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBH
aXRIdWJFcnJvcigyMDAsIHJlc3BvbnNlLnN0YXR1c19jb2RlLCAnZmV0Y2ggYWxsIHB1bGwgcmVx
dWVzdHMnLCBwYXRoKQorICAgICAgICAgICAgcGF0aCA9IHNlbGYuZXh0cmFjdF9saW5rX25leHQo
cmVzcG9uc2UuZ2V0aGVhZGVyKCdMaW5rJykpCisgICAgICAgIHJldHVybiBhbGxfcHJzCisKKyAg
ICBkZWYgZ2V0X3ByX2JyYW5jaChzZWxmLCBwcl9udW1iZXIpOgorICAgICAgICAiIiJHZXRzIHRo
ZSByZW1vdGUgYnJhbmNoIG5hbWUgb2YgYSBQUi4KKworICAgICAgICBBUEkgZG9jOiBodHRwczov
L2RldmVsb3Blci5naXRodWIuY29tL3YzL3B1bGxzLyNnZXQtYS1zaW5nbGUtcHVsbC1yZXF1ZXN0
CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRoZSByZW1vdGUgYnJhbmNoIG5hbWUu
CisgICAgICAgICIiIgorICAgICAgICBwYXRoID0gJy9yZXBvcy97fS97fS9wdWxscy97fScuZm9y
bWF0KAorICAgICAgICAgICAgV1BUX0dIX09SRywKKyAgICAgICAgICAgIFdQVF9HSF9SRVBPX05B
TUUsCisgICAgICAgICAgICBwcl9udW1iZXIKKyAgICAgICAgKQorICAgICAgICByZXNwb25zZSA9
IHNlbGYucmVxdWVzdChwYXRoLCBtZXRob2Q9J0dFVCcpCisKKyAgICAgICAgaWYgcmVzcG9uc2Uu
c3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgcmFpc2UgR2l0SHViRXJyb3IoMjAwLCBy
ZXNwb25zZS5zdGF0dXNfY29kZSwgJ2dldCB0aGUgYnJhbmNoIG9mIFBSICVkJyAlIHByX251bWJl
cikKKworICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YVsnaGVhZCddWydyZWYnXQorCisgICAg
ZGVmIGlzX3ByX21lcmdlZChzZWxmLCBwcl9udW1iZXIpOgorICAgICAgICAiIiJDaGVja3MgaWYg
YSBQUiBoYXMgYmVlbiBtZXJnZWQuCisKKyAgICAgICAgQVBJIGRvYzogaHR0cHM6Ly9kZXZlbG9w
ZXIuZ2l0aHViLmNvbS92My9wdWxscy8jZ2V0LWlmLWEtcHVsbC1yZXF1ZXN0LWhhcy1iZWVuLW1l
cmdlZAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUcnVlIGlmIG1lcmdlZCwgRmFs
c2UgaWYgbm90LgorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9ICcvcmVwb3MvJXMvJXMvcHVs
bHMvJWQvbWVyZ2UnICUgKAorICAgICAgICAgICAgV1BUX0dIX09SRywKKyAgICAgICAgICAgIFdQ
VF9HSF9SRVBPX05BTUUsCisgICAgICAgICAgICBwcl9udW1iZXIKKyAgICAgICAgKQorICAgICAg
ICB0cnk6CisgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChwYXRoLCBtZXRob2Q9
J0dFVCcpCisgICAgICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgcmFpc2UgR2l0SHViRXJyb3IoMjA0LCByZXNwb25zZS5zdGF0dXNfY29kZSwgJ2NoZWNrIGlm
IFBSICVkIGlzIG1lcmdlZCcgJSBwcl9udW1iZXIpCisgICAgICAgIGV4Y2VwdCB1cmxsaWIyLkhU
VFBFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5jb2RlID09IDQwNDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFp
c2UKKworICAgIGRlZiBtZXJnZV9wcihzZWxmLCBwcl9udW1iZXIpOgorICAgICAgICAiIiJNZXJn
ZXMgYSBQUi4KKworICAgICAgICBJZiBtZXJnZSBjYW5ub3QgYmUgcGVyZm9ybWVkLCBNZXJnZUVy
cm9yIGlzIHJhaXNlZC4gR2l0SHViRXJyb3IgaXMKKyAgICAgICAgcmFpc2VkIHdoZW4gb3RoZXIg
dW5rbm93biBlcnJvcnMgaGFwcGVuLgorCisgICAgICAgIEFQSSBkb2M6IGh0dHBzOi8vZGV2ZWxv
cGVyLmdpdGh1Yi5jb20vdjMvcHVsbHMvI21lcmdlLWEtcHVsbC1yZXF1ZXN0LW1lcmdlLWJ1dHRv
bgorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9ICcvcmVwb3MvJXMvJXMvcHVsbHMvJWQvbWVy
Z2UnICUgKAorICAgICAgICAgICAgV1BUX0dIX09SRywKKyAgICAgICAgICAgIFdQVF9HSF9SRVBP
X05BTUUsCisgICAgICAgICAgICBwcl9udW1iZXIKKyAgICAgICAgKQorICAgICAgICBib2R5ID0g
eworICAgICAgICAgICAgJ21lcmdlX21ldGhvZCc6ICdyZWJhc2UnLAorICAgICAgICB9CisKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0
aG9kPSdQVVQnLCBib2R5PWJvZHkpCisgICAgICAgIGV4Y2VwdCB1cmxsaWIyLkhUVFBFcnJvciBh
cyBlOgorICAgICAgICAgICAgaWYgZS5jb2RlID09IDQwNToKKyAgICAgICAgICAgICAgICByYWlz
ZSBNZXJnZUVycm9yKHByX251bWJlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgcmFpc2UKKworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAg
ICAgICAgICByYWlzZSBHaXRIdWJFcnJvcigyMDAsIHJlc3BvbnNlLnN0YXR1c19jb2RlLCAnbWVy
Z2UgUFIgJWQnICUgcHJfbnVtYmVyKQorCisgICAgZGVmIGRlbGV0ZV9yZW1vdGVfYnJhbmNoKHNl
bGYsIHJlbW90ZV9icmFuY2hfbmFtZSk6CisgICAgICAgICIiIkRlbGV0ZXMgYSByZW1vdGUgYnJh
bmNoLgorCisgICAgICAgIEFQSSBkb2M6IGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMv
Z2l0L3JlZnMvI2RlbGV0ZS1hLXJlZmVyZW5jZQorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9
ICcvcmVwb3MvJXMvJXMvZ2l0L3JlZnMvaGVhZHMvJXMnICUgKAorICAgICAgICAgICAgV1BUX0dI
X09SRywKKyAgICAgICAgICAgIFdQVF9HSF9SRVBPX05BTUUsCisgICAgICAgICAgICByZW1vdGVf
YnJhbmNoX25hbWUKKyAgICAgICAgKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChw
YXRoLCBtZXRob2Q9J0RFTEVURScpCisKKyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUg
IT0gMjA0OgorICAgICAgICAgICAgcmFpc2UgR2l0SHViRXJyb3IoMjA0LCByZXNwb25zZS5zdGF0
dXNfY29kZSwgJ2RlbGV0ZSByZW1vdGUgYnJhbmNoICVzJyAlIHJlbW90ZV9icmFuY2hfbmFtZSkK
KworICAgIGRlZiBwcl9mb3JfY2hyb21pdW1fY29tbWl0KHNlbGYsIGNocm9taXVtX2NvbW1pdCk6
CisgICAgICAgICIiIlJldHVybnMgYSBQUiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBDaHJv
bWl1bUNvbW1pdCwgb3IgTm9uZS4iIiIKKyAgICAgICAgcHVsbF9yZXF1ZXN0ID0gc2VsZi5wcl93
aXRoX2NoYW5nZV9pZChjaHJvbWl1bV9jb21taXQuY2hhbmdlX2lkKCkpCisgICAgICAgIGlmIHB1
bGxfcmVxdWVzdDoKKyAgICAgICAgICAgIHJldHVybiBwdWxsX3JlcXVlc3QKKyAgICAgICAgIyBU
aGUgQ2hhbmdlIElEIGNhbid0IGJlIHVzZWQgZm9yIGNvbW1pdHMgbWFkZSB2aWEgUmlldHZlbGQs
CisgICAgICAgICMgc28gd2UgZmFsbCBiYWNrIHRvIHRyeWluZyB0byB1c2UgY29tbWl0IHBvc2l0
aW9uIGhlcmUuCisgICAgICAgICMgTm90ZSB0aGF0IEdlcnJpdCByZXR1cm5zIFRvVCsxIGFzIHRo
ZSBjb21taXQgcG9zaXRpb25zIGZvciBpbi1mbGlnaHQKKyAgICAgICAgIyBDTHMsIGJ1dCB0aGV5
IGFyZSBzY3J1YmJlZCBmcm9tIHRoZSBQUiBkZXNjcmlwdGlvbiBhbmQgaGVuY2Ugd291bGQKKyAg
ICAgICAgIyBub3QgYmUgbWlzbWF0Y2hlZCB0byByYW5kb20gQ2hyb21pdW0gY29tbWl0cyBpbiB0
aGUgZmFsbGJhY2suCisgICAgICAgICMgVE9ETyhyb2JlcnRtYSk6IFJlbW92ZSB0aGlzIGZhbGxi
YWNrIGFmdGVyIFJpZXR2ZWxkIGJlY29tZXMgcmVhZC1vbmx5LgorICAgICAgICByZXR1cm4gc2Vs
Zi5wcl93aXRoX3Bvc2l0aW9uKGNocm9taXVtX2NvbW1pdC5wb3NpdGlvbikKKworICAgIGRlZiBw
cl93aXRoX2NoYW5nZV9pZChzZWxmLCB0YXJnZXRfY2hhbmdlX2lkKToKKyAgICAgICAgZm9yIHB1
bGxfcmVxdWVzdCBpbiBzZWxmLmFsbF9wdWxsX3JlcXVlc3RzKCk6CisgICAgICAgICAgICAjIE5v
dGU6IFNlYXJjaCBhbGwgJ0NoYW5nZS1JZCdzIHNvIHRoYXQgd2UgY2FuIG1hbnVhbGx5IHB1dCBt
dWx0aXBsZQorICAgICAgICAgICAgIyBDTHMgaW4gb25lIFBSLiAoVGhlIGV4cG9ydGVyIGFsd2F5
cyBjcmVhdGVzIG9uZSBQUiBmb3IgZWFjaCBDTC4pCisgICAgICAgICAgICBjaGFuZ2VfaWRzID0g
c2VsZi5leHRyYWN0X21ldGFkYXRhKCdDaGFuZ2UtSWQ6ICcsIHB1bGxfcmVxdWVzdC5ib2R5LCBh
bGxfbWF0Y2hlcz1UcnVlKQorICAgICAgICAgICAgaWYgdGFyZ2V0X2NoYW5nZV9pZCBpbiBjaGFu
Z2VfaWRzOgorICAgICAgICAgICAgICAgIHJldHVybiBwdWxsX3JlcXVlc3QKKyAgICAgICAgcmV0
dXJuIE5vbmUKKworICAgIGRlZiBwcl93aXRoX3Bvc2l0aW9uKHNlbGYsIHBvc2l0aW9uKToKKyAg
ICAgICAgZm9yIHB1bGxfcmVxdWVzdCBpbiBzZWxmLmFsbF9wdWxsX3JlcXVlc3RzKCk6CisgICAg
ICAgICAgICAjIFNhbWUgYXMgYWJvdmUsIHNlYXJjaCBhbGwgJ0NyLUNvbW1pdC1Qb3NpdGlvbidz
LgorICAgICAgICAgICAgcHJfY29tbWl0X3Bvc2l0aW9ucyA9IHNlbGYuZXh0cmFjdF9tZXRhZGF0
YSgnQ3ItQ29tbWl0LVBvc2l0aW9uOiAnLCBwdWxsX3JlcXVlc3QuYm9keSwgYWxsX21hdGNoZXM9
VHJ1ZSkKKyAgICAgICAgICAgIGlmIHBvc2l0aW9uIGluIHByX2NvbW1pdF9wb3NpdGlvbnM6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHB1bGxfcmVxdWVzdAorICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHRyYWN0X21ldGFkYXRhKHRhZywgY29tbWl0
X2JvZHksIGFsbF9tYXRjaGVzPUZhbHNlKToKKyAgICAgICAgdmFsdWVzID0gW10KKyAgICAgICAg
Zm9yIGxpbmUgaW4gY29tbWl0X2JvZHkuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbm90
IGxpbmUuc3RhcnRzd2l0aCh0YWcpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICB2YWx1ZSA9IGxpbmVbbGVuKHRhZyk6XQorICAgICAgICAgICAgaWYgYWxsX21hdGNoZXM6
CisgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgIHJldHVybiB2YWx1ZXMgaWYg
YWxsX21hdGNoZXMgZWxzZSBOb25lCisKKworY2xhc3MgSlNPTlJlc3BvbnNlKG9iamVjdCk6Cisg
ICAgIiIiQW4gSFRUUCByZXNwb25zZSBjb250YWluaW5nIEpTT04gZGF0YS4iIiIKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCByYXdfcmVzcG9uc2UpOgorICAgICAgICAiIiJJbml0aWFsaXplcyBh
IEpTT05SZXNwb25zZSBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmF3
X3Jlc3BvbnNlOiBhIHJlc3BvbnNlIG9iamVjdCByZXR1cm5lZCBieSBvcGVuIG1ldGhvZHMgaW4g
dXJsbGliMi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3Jhd19yZXNwb25zZSA9IHJhd19y
ZXNwb25zZQorICAgICAgICBzZWxmLnN0YXR1c19jb2RlID0gcmF3X3Jlc3BvbnNlLmdldGNvZGUo
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRhdGEgPSBqc29uLmxvYWQocmF3X3Jl
c3BvbnNlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZGF0
YSA9IE5vbmUKKworICAgIGRlZiBnZXRoZWFkZXIoc2VsZiwgaGVhZGVyKToKKyAgICAgICAgIiIi
R2V0cyB0aGUgdmFsdWUgb2YgdGhlIGhlYWRlciB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCisgICAg
ICAgIERlbGVnYXRlcyB0byBIVFRQTWVzc2FnZS5nZXRoZWFkZXIoKSwgd2hpY2ggaXMgY2FzZS1p
bnNlbnNpdGl2ZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jhd19yZXNwb25zZS5pbmZvKCku
Z2V0aGVhZGVyKGhlYWRlcikKKworCitjbGFzcyBHaXRIdWJFcnJvcihFeGNlcHRpb24pOgorICAg
ICIiIlJhaXNlZCB3aGVuIGFuIEdpdEh1YiByZXR1cm5zIGEgbm9uLU9LIHJlc3BvbnNlIHN0YXR1
cyBmb3IgYSByZXF1ZXN0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVjdGVkLCBy
ZWNlaXZlZCwgYWN0aW9uLCBleHRyYV9kYXRhPU5vbmUpOgorICAgICAgICBtZXNzYWdlID0gJ0V4
cGVjdGVkIHt9LCBidXQgcmVjZWl2ZWQge30gZnJvbSBHaXRIdWIgd2hlbiBhdHRlbXB0aW5nIHRv
IHt9Jy5mb3JtYXQoCisgICAgICAgICAgICBleHBlY3RlZCwgcmVjZWl2ZWQsIGFjdGlvbgorICAg
ICAgICApCisgICAgICAgIGlmIGV4dHJhX2RhdGE6CisgICAgICAgICAgICBtZXNzYWdlICs9ICdc
bicgKyBzdHIoZXh0cmFfZGF0YSkKKyAgICAgICAgc3VwZXIoR2l0SHViRXJyb3IsIHNlbGYpLl9f
aW5pdF9fKG1lc3NhZ2UpCisKKworY2xhc3MgTWVyZ2VFcnJvcihHaXRIdWJFcnJvcik6CisgICAg
IiIiQW4gZXJyb3Igc3BlY2lmaWNhbGx5IGZvciB3aGVuIGEgUFIgY2Fubm90IGJlIG1lcmdlZC4K
KworICAgIFRoaXMgc2hvdWxkIG9ubHkgYmUgdGhyb3duIHdoZW4gR2l0SHViIHJldHVybnMgc3Rh
dHVzIGNvZGUgNDA1LAorICAgIGluZGljYXRpbmcgdGhhdCB0aGUgUFIgY291bGQgbm90IGJlIG1l
cmdlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcl9udW1iZXIpOgorICAg
ICAgICBzdXBlcihNZXJnZUVycm9yLCBzZWxmKS5fX2luaXRfXygyMDAsIDQwNSwgJ21lcmdlIFBS
ICVkJyAlIHByX251bWJlcikKKworCitQdWxsUmVxdWVzdCA9IG5hbWVkdHVwbGUoJ1B1bGxSZXF1
ZXN0JywgWyd0aXRsZScsICdudW1iZXInLCAnYm9keScsICdzdGF0ZScsICdsYWJlbHMnXSkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWJfbW9jay5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWJfbW9jay5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45ZmQ2ZWE3ZGVhNjFmMTE3MmRkNGVmMTllODMxM2RkYTM1MTA4YzQ3Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dpdGh1Yl9tb2NrLnB5CkBAIC0w
LDAgKzEsMTI1IEBACisjIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS53M2Mud3B0
X2dpdGh1YiBpbXBvcnQgTWVyZ2VFcnJvciwgV1BUR2l0SHViCisKKworY2xhc3MgTW9ja1dQVEdp
dEh1YihvYmplY3QpOgorCisgICAgIyBTb21lIHVudXNlZCBhcmd1bWVudHMgbWF5IGJlIGluY2x1
ZGVkIHRvIG1hdGNoIHRoZSByZWFsIGNsYXNzJ3MgQVBJLgorICAgICMgcHlsaW50OiBkaXNhYmxl
PXVudXNlZC1hcmd1bWVudAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHB1bGxfcmVxdWVzdHMs
IHVuc3VjY2Vzc2Z1bF9tZXJnZV9pbmRleD0tMSwgY3JlYXRlX3ByX2ZhaWxfaW5kZXg9LTEsIG1l
cmdlZF9pbmRleD0tMSk6CisgICAgICAgICIiIkluaXRpYWxpemVzIGEgbW9jayBXUFRHaXRIdWIu
CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHB1bGxfcmVxdWVzdHM6IEEgbGlzdCBvZiB3
cHRfZ2l0aHViLlB1bGxSZXF1ZXN0LgorICAgICAgICAgICAgdW5zdWNjZXNzZnVsX21lcmdlX2lu
ZGV4OiBUaGUgaW5kZXggdG8gdGhlIFBSIGluIHB1bGxfcmVxdWVzdHMgdGhhdAorICAgICAgICAg
ICAgICAgIGNhbm5vdCBiZSBtZXJnZWQuICgtMSBtZWFucyBhbGwgY2FuIGJlIG1lcmdlZC4pCisg
ICAgICAgICAgICBjcmVhdGVfcHJfZmFpbF9pbmRleDogVGhlIDAtYmFzZWQgaW5kZXggb2Ygd2hp
Y2ggUFIgY3JlYXRpb24gcmVxdWVzdAorICAgICAgICAgICAgICAgIHdpbGwgZmFpbC4gKC0xIG1l
YW5zIGFsbCB3aWxsIHN1Y2NlZWQuKQorICAgICAgICAgICAgbWVyZ2VkX2luZGV4OiBUaGUgaW5k
ZXggdG8gdGhlIFBSIGluIHB1bGxfcmVxdWVzdHMgdGhhdCBpcyBhbHJlYWR5CisgICAgICAgICAg
ICAgICAgbWVyZ2VkLiAoLTEgbWVhbnMgbm9uZSBpcyBtZXJnZWQuKQorICAgICAgICAiIiIKKyAg
ICAgICAgc2VsZi5wdWxsX3JlcXVlc3RzID0gcHVsbF9yZXF1ZXN0cworICAgICAgICBzZWxmLmNh
bGxzID0gW10KKyAgICAgICAgc2VsZi5wdWxsX3JlcXVlc3RzX2NyZWF0ZWQgPSBbXQorICAgICAg
ICBzZWxmLnB1bGxfcmVxdWVzdHNfbWVyZ2VkID0gW10KKyAgICAgICAgc2VsZi51bnN1Y2Nlc3Nm
dWxfbWVyZ2VfaW5kZXggPSB1bnN1Y2Nlc3NmdWxfbWVyZ2VfaW5kZXgKKyAgICAgICAgc2VsZi5j
cmVhdGVfcHJfaW5kZXggPSAwCisgICAgICAgIHNlbGYuY3JlYXRlX3ByX2ZhaWxfaW5kZXggPSBj
cmVhdGVfcHJfZmFpbF9pbmRleAorICAgICAgICBzZWxmLm1lcmdlZF9pbmRleCA9IG1lcmdlZF9p
bmRleAorCisgICAgZGVmIGFsbF9wdWxsX3JlcXVlc3RzKHNlbGYsIGxpbWl0PTMwKToKKyAgICAg
ICAgc2VsZi5jYWxscy5hcHBlbmQoJ2FsbF9wdWxsX3JlcXVlc3RzJykKKyAgICAgICAgcmV0dXJu
IHNlbGYucHVsbF9yZXF1ZXN0cworCisgICAgZGVmIGlzX3ByX21lcmdlZChzZWxmLCBudW1iZXIp
OgorICAgICAgICBmb3IgaW5kZXgsIHByIGluIGVudW1lcmF0ZShzZWxmLnB1bGxfcmVxdWVzdHMp
OgorICAgICAgICAgICAgaWYgcHIubnVtYmVyID09IG51bWJlcjoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXggPT0gc2VsZi5tZXJnZWRfaW5kZXgKKyAgICAgICAgcmV0dXJuIEZhbHNlCisK
KyAgICBkZWYgbWVyZ2VfcHIoc2VsZiwgbnVtYmVyKToKKyAgICAgICAgc2VsZi5jYWxscy5hcHBl
bmQoJ21lcmdlX3ByJykKKworICAgICAgICBmb3IgaW5kZXgsIHByIGluIGVudW1lcmF0ZShzZWxm
LnB1bGxfcmVxdWVzdHMpOgorICAgICAgICAgICAgaWYgcHIubnVtYmVyID09IG51bWJlciBhbmQg
aW5kZXggPT0gc2VsZi51bnN1Y2Nlc3NmdWxfbWVyZ2VfaW5kZXg6CisgICAgICAgICAgICAgICAg
cmFpc2UgTWVyZ2VFcnJvcihudW1iZXIpCisKKyAgICAgICAgc2VsZi5wdWxsX3JlcXVlc3RzX21l
cmdlZC5hcHBlbmQobnVtYmVyKQorCisgICAgZGVmIGNyZWF0ZV9wcihzZWxmLCByZW1vdGVfYnJh
bmNoX25hbWUsIGRlc2NfdGl0bGUsIGJvZHkpOgorICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgn
Y3JlYXRlX3ByJykKKworICAgICAgICBpZiBzZWxmLmNyZWF0ZV9wcl9mYWlsX2luZGV4ICE9IHNl
bGYuY3JlYXRlX3ByX2luZGV4OgorICAgICAgICAgICAgc2VsZi5wdWxsX3JlcXVlc3RzX2NyZWF0
ZWQuYXBwZW5kKChyZW1vdGVfYnJhbmNoX25hbWUsIGRlc2NfdGl0bGUsIGJvZHkpKQorCisgICAg
ICAgIHNlbGYuY3JlYXRlX3ByX2luZGV4ICs9IDEKKyAgICAgICAgcmV0dXJuIDU2NzgKKworICAg
IGRlZiB1cGRhdGVfcHIoc2VsZiwgcHJfbnVtYmVyLCBkZXNjX3RpdGxlLCBib2R5KToKKyAgICAg
ICAgc2VsZi5jYWxscy5hcHBlbmQoJ3VwZGF0ZV9wcicpCisgICAgICAgIHJldHVybiA1Njc4CisK
KyAgICBkZWYgZGVsZXRlX3JlbW90ZV9icmFuY2goc2VsZiwgXyk6CisgICAgICAgIHNlbGYuY2Fs
bHMuYXBwZW5kKCdkZWxldGVfcmVtb3RlX2JyYW5jaCcpCisKKyAgICBkZWYgYWRkX2xhYmVsKHNl
bGYsIF8sIGxhYmVsKToKKyAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ2FkZF9sYWJlbCAiJXMi
JyAlIGxhYmVsKQorCisgICAgZGVmIHJlbW92ZV9sYWJlbChzZWxmLCBfLCBsYWJlbCk6CisgICAg
ICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdyZW1vdmVfbGFiZWwgIiVzIicgJSBsYWJlbCkKKworICAg
IGRlZiBnZXRfcHJfYnJhbmNoKHNlbGYsIG51bWJlcik6CisgICAgICAgIHNlbGYuY2FsbHMuYXBw
ZW5kKCdnZXRfcHJfYnJhbmNoJykKKyAgICAgICAgcmV0dXJuICdmYWtlX2JyYW5jaF9QUl8lZCcg
JSBudW1iZXIKKworICAgIGRlZiBwcl9mb3JfY2hyb21pdW1fY29tbWl0KHNlbGYsIGNvbW1pdCk6
CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdwcl9mb3JfY2hyb21pdW1fY29tbWl0JykKKyAg
ICAgICAgZm9yIHByIGluIHNlbGYucHVsbF9yZXF1ZXN0czoKKyAgICAgICAgICAgIGlmIGNvbW1p
dC5jaGFuZ2VfaWQoKSBpbiBwci5ib2R5OgorICAgICAgICAgICAgICAgIHJldHVybiBwcgorICAg
ICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHByX3dpdGhfcG9zaXRpb24oc2VsZiwgcG9zaXRp
b24pOgorICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgncHJfd2l0aF9wb3NpdGlvbicpCisgICAg
ICAgIGZvciBwciBpbiBzZWxmLnB1bGxfcmVxdWVzdHM6CisgICAgICAgICAgICBpZiBwb3NpdGlv
biBpbiBwci5ib2R5OgorICAgICAgICAgICAgICAgIHJldHVybiBwcgorICAgICAgICByZXR1cm4g
Tm9uZQorCisgICAgZGVmIHByX3dpdGhfY2hhbmdlX2lkKHNlbGYsIGNoYW5nZV9pZCk6CisgICAg
ICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdwcl93aXRoX2NoYW5nZV9pZCcpCisgICAgICAgIGZvciBw
ciBpbiBzZWxmLnB1bGxfcmVxdWVzdHM6CisgICAgICAgICAgICBpZiBjaGFuZ2VfaWQgaW4gcHIu
Ym9keToKKyAgICAgICAgICAgICAgICByZXR1cm4gcHIKKyAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgIGRlZiBleHRyYWN0X21ldGFkYXRhKHNlbGYsIHRhZywgY29tbWl0X2JvZHksIGFsbF9tYXRj
aGVzPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIFdQVEdpdEh1Yi5leHRyYWN0X21ldGFkYXRhKHRh
ZywgY29tbWl0X2JvZHksIGFsbF9tYXRjaGVzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93M2Mvd3B0X2dpdGh1Yl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdzNjL3dwdF9naXRodWJfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTJkM2NkYTJhZTYwYjJm
MjY3MTU0MWExMGY3ODU1NzU5MDEzYmNlOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWJfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwzOSBAQAor
IyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjIFRo
aXMgZmlsZSBpcyBpbXBvcnRlZCBmcm9tIENocm9taXVtIHJlcG9zaXRvcnkuCisjIFRoZSBMSUNF
TlNFIGZpbGUgcmVmZXJlbmNlZCBhYm92ZSBjYW4gYmUgZm91bmQgYXQKKyMgaHR0cHM6Ly9jaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYy5naXQvKy9tYXN0ZXIvTElDRU5TRQor
CitpbXBvcnQgYmFzZTY0CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24u
aG9zdF9tb2NrIGltcG9ydCBNb2NrSG9zdAorZnJvbSB3ZWJraXRweS53M2Mud3B0X2dpdGh1YiBp
bXBvcnQgV1BUR2l0SHViLCBNZXJnZUVycm9yCisKKworY2xhc3MgV1BUR2l0SHViVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYud3B0
X2dpdGh1YiA9IFdQVEdpdEh1YihNb2NrSG9zdCgpLCB1c2VyPSdydXRhYmFnYScsIHRva2VuPSdk
ZWNhZmJhZCcpCisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYud3B0X2dpdGh1Yi51c2VyLCAncnV0YWJhZ2EnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYud3B0X2dpdGh1Yi50b2tlbiwgJ2RlY2FmYmFkJykKKworICAgIGRlZiB0
ZXN0X2F1dGhfdG9rZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAg
ICAgICBzZWxmLndwdF9naXRodWIuYXV0aF90b2tlbigpLAorICAgICAgICAgICAgYmFzZTY0LmVu
Y29kZXN0cmluZygncnV0YWJhZ2E6ZGVjYWZiYWQnKS5zdHJpcCgpKQorCisgICAgZGVmIHRlc3Rf
bWVyZ2VfcHVsbF9yZXF1ZXN0X3Rocm93c19tZXJnZV9lcnJvcl9vbl80MDUoc2VsZik6CisgICAg
ICAgIHNlbGYud3B0X2dpdGh1Yi5ob3N0LndlYi5yZXNwb25zZXMgPSBbCisgICAgICAgICAgICB7
J3N0YXR1c19jb2RlJzogMjAwfSwKKyAgICAgICAgICAgIHsnc3RhdHVzX2NvZGUnOiA0MDV9LAor
ICAgICAgICBdCisKKyAgICAgICAgc2VsZi53cHRfZ2l0aHViLm1lcmdlX3B1bGxfcmVxdWVzdCgx
MjM0KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTWVyZ2VFcnJvcik6CisgICAg
ICAgICAgICBzZWxmLndwdF9naXRodWIubWVyZ2VfcHVsbF9yZXF1ZXN0KDU2NzgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328944</attachid>
            <date>2017-12-10 19:43:09 -0800</date>
            <delta_ts>2017-12-10 19:48:04 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-169462-20171210194308.patch</filename>
            <type>text/plain</type>
            <size>61202</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1Njc3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTEwNWU2Mjc2MzI1YTEwMzdkMWE3ZTY1ZWI1YWI0MzEz
YTA3Zjc0Yi4uOGEwYjQ1MTU5OTljNWJmNGM3YTM1Njc2MDM5MGI1YTA4MDZmOGVmOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgx
IEBACisyMDE3LTEyLTEwICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgYSBzY3JpcHQgdG8gYXV0b21hdGUgVzNjIHdlYi1wbGF0Zm9ybS10ZXN0cyBwdWxs
IHJlcXVlc3QgY3JlYXRpb25zIGZyb20gV2ViS2l0IGNvbW1pdHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQ2MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEFkZGluZyBzb21lIGdpdCBoZWxwZXIgcm91dGlu
ZXMgdXNlZCBieSBXUFQgZXhwb3J0ZXIuCisgICAgICAgIENvcHlpbmcgV1BUIGdpdGh1YiB1dGls
aXR5IGZpbGVzIGZyb20gQ2hyb21pdW0uCisgICAgICAgIFVwZGF0aW5nIHdlYi5weS93ZWJfbW9j
ay5weSB0byBjb3BlIHdpdGggdGhlc2UgbmV3IGZpbGVzLgorCisgICAgICAgIEltcGxlbWVudGlu
ZyB0ZXN0IGV4cG9ydGVyIGluIHRlc3RfZXhwb3J0ZXIucHkuCisgICAgICAgIFRoaXMgc2NyaXB0
IHRha2VzIGEgV2ViS2l0IGNvbW1pdCBhcyBpbnB1dCBhbmQgd2lsbCBjcmVhdGUgYSBXUFQgY29t
bWl0IGluIGEgbG9jYWwgV1BUIGNsb25lLgorICAgICAgICBJdCB3aWxsIHRoZW4gcHVzaCB0aGUg
Y29tbWl0IHRvIGEgcHVibGljIEdpdEh1YiByZXBvc2l0b3J5IGlkZW50aWZpZWQgYnkgYSB1c2Vy
bmFtZSBwYXJhbWV0ZXIuCisgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIHBhc3NlZCB0aHJvdWdo
IHRoZSBjb21tYW5kIGxpbmUgb3Igc2VhcmNoZWQgdGhyb3VnaCBnaXQgY29uZmlnL2Vudmlyb25t
ZW50IHZhcmlhYmxlcy4KKworICAgICAgICBUaGUgc2NyaXB0IGNhbiBvcHRpb25hbGx5IGNyZWF0
ZSBhIHB1bGwgcmVxdWVzdCB0byB0aGUgb2ZmaWNpYWwgV1BUIEdpdEh1YiByZXBvc2l0b3J5Lgor
ICAgICAgICBVc2VyIG11c3QgcHJvdmlkZSBhIEdpdEh1YiB0b2tlbiB0byBhbGxvdyB0aGUgc2Ny
aXB0IHRvIG1ha2UgdGhlIFBSIG9uIGJlaGFsZiBvZiB0aGUgdXNlci4KKyAgICAgICAgSW4gdGhh
dCBjYXNlLCBhIGNvbW1lbnQgaXMgYWRkZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYnVnemlsbGEg
aWYgYSBidWcgSUQgaXMgZ2l2ZW4gb3IgY2FuIGJlIGZvdW5kIGZyb20gdGhlIGNoYW5nZSBsb2cs
CisgICAgICAgIHRvIGVhc2lseSBsaW5rIHRoZSBwdWxsIHJlcXVlc3Qgd2l0aCB0aGUgYnVnemls
bGEgYnVnLgorCisgICAgICAgICogU2NyaXB0cy9leHBvcnQtdzNjLXRlc3QtY2hhbmdlczogQWRk
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5w
eToKKyAgICAgICAgKEdpdC5yZXNldF9oYXJkKToKKyAgICAgICAgKEdpdCk6CisgICAgICAgIChH
aXQuYW0pOgorICAgICAgICAoR2l0LmNvbW1pdCk6CisgICAgICAgIChHaXQuZm9ybWF0X3BhdGNo
KToKKyAgICAgICAgKEdpdC5yZXF1ZXN0X3B1bGwpOgorICAgICAgICAoR2l0LnJlbW90ZSk6Cisg
ICAgICAgIChHaXQucHVzaCk6CisgICAgICAgIChHaXQuY2hlY2tvdXRfbmV3X2JyYW5jaCk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weToKKyAgICAgICAgKFdl
Yi5yZXF1ZXN0KTogQ29waWVkIGZyb20gQ2hyb21pdW0uCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vbmV0L3dlYl9tb2NrLnB5OiBDb3BpZWQgbmVlZGVkIGNvZGUgZnJvbSBDaHJv
bWl1bS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyLnB5OiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RFeHBvcnRlcik6CisgICAgICAgIChUZXN0RXhwb3J0ZXIuX19p
bml0X18pOgorICAgICAgICAoVGVzdEV4cG9ydGVyLl9pbml0X3JlcG9zaXRvcnkpOgorICAgICAg
ICAoVGVzdEV4cG9ydGVyLmRvd25sb2FkX2FuZF9jb21taXRfcGF0Y2gpOgorICAgICAgICAoVGVz
dEV4cG9ydGVyLmNsZWFuKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfYnJhbmNoX3dp
dGhfcGF0Y2gpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLnB1c2hfdG9fcHVibGljX3JlcG9zaXRv
cnkpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLm1ha2VfcHVsbF9yZXF1ZXN0KToKKyAgICAgICAg
KFRlc3RFeHBvcnRlci5kZWxldGVfbG9jYWxfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRl
ci5jcmVhdGVfZ2l0X3BhdGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfdXBsb2Fk
X3JlbW90ZV9pZl9uZWVkZWQpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLmRvX2V4cG9ydCk6Cisg
ICAgICAgIChwYXJzZV9hcmdzKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nKToKKyAgICAg
ICAgKGNvbmZpZ3VyZV9sb2dnaW5nLkxvZ0hhbmRsZXIpOgorICAgICAgICAoY29uZmlndXJlX2xv
Z2dpbmcuTG9nSGFuZGxlci5mb3JtYXQpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS93M2MvdGVzdF9leHBvcnRlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgIChUZXN0RXhwb3J0ZXJUZXN0KToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1
Z3ppbGxhKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLl9faW5pdF9f
KToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLmZldGNoX2J1Z19kaWN0
aW9uYXJ5KToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLnBvc3RfY29t
bWVudF90b19idWcpOgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC5Nb2NrR2l0KToKKyAgICAg
ICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5jbG9uZSk6CisgICAgICAgIChUZXN0RXhwb3J0
ZXJUZXN0Lk1vY2tHaXQuX19pbml0X18pOgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC5Nb2Nr
R2l0LmZldGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5jaGVja291dCk6
CisgICAgICAgIChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQucmVzZXRfaGFyZCk6CisgICAgICAg
IChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQucHVzaCk6CisgICAgICAgIChUZXN0RXhwb3J0ZXJU
ZXN0Lk1vY2tHaXQuZm9ybWF0X3BhdGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9j
a0dpdC5kZWxldGVfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5j
aGVja291dF9uZXdfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5h
bSk6CisgICAgICAgIChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQuY29tbWl0KToKKyAgICAgICAg
KFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5yZW1vdGUpOgorICAgICAgICAoVGVzdEV4cG9ydGVy
VGVzdC50ZXN0X2V4cG9ydCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93M2MvY29tbW9u
LnB5OiBDb3BpZWQgZnJvbSBjaHJvbWl1bS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3cz
Yy93cHRfZ2l0aHViLnB5OiBDb3BpZWQgZnJvbSBjaHJvbWl1bS4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3czYy93cHRfZ2l0aHViX21vY2sucHk6IENvcGllZCBmcm9tIGNocm9taXVtLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWJfdW5pdHRlc3QucHk6IENv
cGllZCBmcm9tIGNocm9taXVtLgorCiAyMDE3LTEyLTA4ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9u
b3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFRvb2xzL0ltYWdlRGlmZi9jZy9QbGF0Zm9y
bUltYWdlQ0cuY3BwIGRvZXNuJ3QgbmVlZCB0byBpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9leHBvcnQtdzNjLXRlc3QtY2hhbmdlcyBiL1Rvb2xz
L1NjcmlwdHMvZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGRkM2FiMGZlYmMy
ZjAyYzlhNzM4MzBhNjA0ZDEzY2NkM2E4NzY1YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMKQEAgLTAsMCArMSwzNSBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlCisjICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisjICAgIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyMgICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisj
ICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKKyMgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyMgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisjIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUgorIyBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyMgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgor
CitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkudzNjIGltcG9ydCB0ZXN0X2V4cG9ydGVyCisK
Kworc3lzLmV4aXQodGVzdF9leHBvcnRlci5tYWluKHN5cy5hcmd2WzE6XSwgc3lzLnN0ZG91dCwg
c3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9zY20vZ2l0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvc2NtL2dpdC5weQppbmRleCBjYWQ1N2FiZmExNDVhMWJlNjA3MjAyZGZmNjE4MDJkYTdkYTJi
Y2ExLi5lODg2ODJmYjc4NWEyNjkzNzQ2YmRhZjFmNGM4MWU4YzYxNjIxNWNlIDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkKQEAgLTI5
LDcgKzI5LDYgQEAKIAogaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9z
CiBpbXBvcnQgcmUKIAogZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9p
emVkCkBAIC0zNyw3ICszNiw3IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRp
dmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKIAogZnJvbSAuY29tbWl0bWVzc2FnZSBp
bXBvcnQgQ29tbWl0TWVzc2FnZQogZnJvbSAuc2NtIGltcG9ydCBBdXRoZW50aWNhdGlvbkVycm9y
LCBTQ00sIGNvbW1pdF9lcnJvcl9oYW5kbGVyCi1mcm9tIC5zdm4gaW1wb3J0IFNWTiwgU1ZOUmVw
b3NpdG9yeQorZnJvbSAuc3ZuIGltcG9ydCBTVk5SZXBvc2l0b3J5CiAKIF9sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcihfX25hbWVfXykKIApAQCAtNTA3LDExICs1MDYsMTEgQEAgY2xhc3MgR2l0KFND
TSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVmIGRlaW5pdF9zdWJtb2R1bGVzKHNlbGYpOgogICAg
ICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ3N1Ym1vZHVsZScsICdkZWluaXQnLCAnLWYnLCAn
LiddKQogCi0gICAgZGVmIF9icmFuY2hfcmVmX2V4aXN0cyhzZWxmLCBicmFuY2hfcmVmKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWydzaG93LXJlZicsICctLXF1aWV0JywgJy0tdmVy
aWZ5JywgYnJhbmNoX3JlZl0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkgPT0gMAorICAgIGRlZiBi
cmFuY2hfcmVmX2V4aXN0cyhzZWxmLCBicmFuY2hfcmVmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3J1bl9naXQoWydzaG93LXJlZicsICctLXF1aWV0JywgJy0tdmVyaWZ5JywgJ3JlZnMvaGVhZHMv
JyArIGJyYW5jaF9yZWZdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpID09IDAKIAogICAgIGRlZiBk
ZWxldGVfYnJhbmNoKHNlbGYsIGJyYW5jaF9uYW1lKToKLSAgICAgICAgaWYgc2VsZi5fYnJhbmNo
X3JlZl9leGlzdHMoJ3JlZnMvaGVhZHMvJyArIGJyYW5jaF9uYW1lKToKKyAgICAgICAgaWYgc2Vs
Zi5icmFuY2hfcmVmX2V4aXN0cyhicmFuY2hfbmFtZSk6CiAgICAgICAgICAgICBzZWxmLl9ydW5f
Z2l0KFsnYnJhbmNoJywgJy1EJywgYnJhbmNoX25hbWVdKQogCiAgICAgZGVmIHJlbW90ZV9tZXJn
ZV9iYXNlKHNlbGYpOgpAQCAtNTg0LDYgKzU4MywzNyBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBv
c2l0b3J5KToKICAgICBkZWYgZmV0Y2goc2VsZiwgcmVtb3RlPSdvcmlnaW4nKToKICAgICAgICAg
cmV0dXJuIHNlbGYuX3J1bl9naXQoWydmZXRjaCcsIHJlbW90ZV0pCiAKKyAgICAjIFJlc2V0IGN1
cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIGNvbW1pdC4KKyAgICBkZWYgcmVzZXRfaGFyZChz
ZWxmLCBjb21taXQpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ3Jlc2V0JywgJy0t
aGFyZCcsIGNvbW1pdF0pCisKKyAgICBkZWYgYXBwbHlfbWFpbF9wYXRjaChzZWxmLCBvcHRpb25z
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWydhcHBseSddICsgb3B0aW9ucykKKwor
ICAgIGRlZiBjb21taXQoc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW5f
Z2l0KFsnY29tbWl0J10gKyBvcHRpb25zKQorCisgICAgZGVmIGZvcm1hdF9wYXRjaChzZWxmLCBv
cHRpb25zKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWydmb3JtYXQtcGF0Y2gnXSAr
IG9wdGlvbnMpCisKKyAgICBkZWYgcmVxdWVzdF9wdWxsKHNlbGYsIG9wdGlvbnMpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ3JlcXVlc3QtcHVsbCddICsgb3B0aW9ucykKKworICAg
IGRlZiByZW1vdGUoc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0
KFsncmVtb3RlJ10gKyBvcHRpb25zKQorCisgICAgZGVmIHB1c2goc2VsZiwgb3B0aW9ucyk6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0KFsncHVzaCddICsgb3B0aW9ucykKKworICAgIGRl
ZiBsb2NhbF9jb25maWcoc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQo
Wydjb25maWcnLCAnLS1nZXQnLCAnLS1sb2NhbCcsIGtleV0sIGVycm9yX2hhbmRsZXI9RXhlY3V0
aXZlLmlnbm9yZV9lcnJvcikKKworICAgIGRlZiBzZXRfbG9jYWxfY29uZmlnKHNlbGYsIGtleSwg
dmFsdWUpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ2NvbmZpZycsICctLWFkZCcs
ICctLWxvY2FsJywga2V5LCB2YWx1ZV0sIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9l
cnJvcikKKworICAgIGRlZiBjaGVja291dF9uZXdfYnJhbmNoKHNlbGYsIGJyYW5jaF9uYW1lKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWydjaGVja291dCcsICctYicsIGJyYW5jaF9u
YW1lXSkKKwogICAgIGRlZiBjaGVja291dChzZWxmLCByZXZpc2lvbiwgcXVpZXQ9Tm9uZSk6CiAg
ICAgICAgIGNvbW1hbmQgPSBbJ2NoZWNrb3V0JywgcmV2aXNpb25dCiAgICAgICAgIGlmIHF1aWV0
OgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC93ZWIucHkKaW5kZXggYjhhMDZlNTc0
NjhkMDVmMDRiNjhmMTI5ZGNkZTZhY2EwODc3NDcwYi4uODc5YWEwN2MxNmM4ZDY2Mzc2NDM2Zjg2
MTE0OGVlYWY1NTNmMjM0OCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vbmV0L3dlYi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvd2Vi
LnB5CkBAIC0zNCwzICszNCwxMyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQubmV0d29ya3Ry
YW5zYWN0aW9uIGltcG9ydCBOZXR3b3JrVHJhbnNhY3Rpb24KIGNsYXNzIFdlYihvYmplY3QpOgog
ICAgIGRlZiBnZXRfYmluYXJ5KHNlbGYsIHVybCwgY29udmVydF80MDRfdG9fTm9uZT1GYWxzZSk6
CiAgICAgICAgIHJldHVybiBOZXR3b3JrVHJhbnNhY3Rpb24oY29udmVydF80MDRfdG9fTm9uZT1j
b252ZXJ0XzQwNF90b19Ob25lKS5ydW4obGFtYmRhOiB1cmxsaWIyLnVybG9wZW4odXJsKS5yZWFk
KCkpCisKKyAgICBkZWYgcmVxdWVzdChzZWxmLCBtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycz1O
b25lKToKKyAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIodXJsbGliMi5IVFRQ
SGFuZGxlcikKKyAgICAgICAgcmVxdWVzdCA9IHVybGxpYjIuUmVxdWVzdCh1cmw9dXJsLCBkYXRh
PWRhdGEpCisgICAgICAgIHJlcXVlc3QuZ2V0X21ldGhvZCA9IGxhbWJkYTogbWV0aG9kCisKKyAg
ICAgICAgaWYgaGVhZGVyczoKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGhlYWRlcnMu
aXRlbXMoKToKKyAgICAgICAgICAgICAgICByZXF1ZXN0LmFkZF9oZWFkZXIoa2V5LCB2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIG9wZW5lci5vcGVuKHJlcXVlc3QpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvd2ViX21vY2sucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9uZXQvd2ViX21vY2sucHkKaW5kZXggNmYwOWJhNDRkMGNlZTdhZGI4OGQx
NGM1NzQxM2M3MGJjY2YzOGIzZS4uYjQxMDU5OTg5YWNlMTUyOTZhOWE5OGUzZTVhNTY5NjI5MDQx
ZjU1NiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYl9t
b2NrLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC93ZWJfbW9jay5w
eQpAQCAtMjcsMTIgKzI3LDEzIEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBTdHJpbmdJTwot
CitpbXBvcnQgdXJsbGliMgogCiBjbGFzcyBNb2NrV2ViKG9iamVjdCk6Ci0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIHVybHM9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybHM9Tm9uZSwg
cmVzcG9uc2VzPVtdKToKICAgICAgICAgc2VsZi51cmxzID0gdXJscyBvciB7fQogICAgICAgICBz
ZWxmLnVybHNfZmV0Y2hlZCA9IFtdCisgICAgICAgIHNlbGYucmVzcG9uc2VzID0gcmVzcG9uc2Vz
CiAKICAgICBkZWYgZ2V0X2JpbmFyeShzZWxmLCB1cmwsIGNvbnZlcnRfNDA0X3RvX05vbmU9RmFs
c2UpOgogICAgICAgICBzZWxmLnVybHNfZmV0Y2hlZC5hcHBlbmQodXJsKQpAQCAtNDAsNiArNDEs
MjkgQEAgY2xhc3MgTW9ja1dlYihvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYudXJs
c1t1cmxdCiAgICAgICAgIHJldHVybiAiTU9DSyBXZWIgcmVzdWx0LCBjb252ZXJ0IDQwNCB0byBO
b25lPSVzIiAlIGNvbnZlcnRfNDA0X3RvX05vbmUKIAorICAgIGRlZiByZXF1ZXN0KHNlbGYsIG1l
dGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzPU5vbmUpOiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2Vk
LWFyZ3VtZW50CisgICAgICAgIHJldHVybiBNb2NrUmVzcG9uc2Uoc2VsZi5yZXNwb25zZXMucG9w
KDApKQorCisKK2NsYXNzIE1vY2tSZXNwb25zZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB2YWx1ZXMpOgorICAgICAgICBzZWxmLnN0YXR1c19jb2RlID0gdmFsdWVzWydzdGF0dXNf
Y29kZSddCisgICAgICAgIHNlbGYudXJsID0gJycKKyAgICAgICAgc2VsZi5ib2R5ID0gdmFsdWVz
LmdldCgnYm9keScsICcnKQorCisgICAgICAgIGlmIGludChzZWxmLnN0YXR1c19jb2RlKSA+PSA0
MDA6CisgICAgICAgICAgICByYWlzZSB1cmxsaWIyLkhUVFBFcnJvcigKKyAgICAgICAgICAgICAg
ICB1cmw9c2VsZi51cmwsCisgICAgICAgICAgICAgICAgY29kZT1zZWxmLnN0YXR1c19jb2RlLAor
ICAgICAgICAgICAgICAgIG1zZz0nUmVjZWl2ZWQgZXJyb3Igc3RhdHVzIGNvZGU6IHt9Jy5mb3Jt
YXQoc2VsZi5zdGF0dXNfY29kZSksCisgICAgICAgICAgICAgICAgaGRycz17fSwKKyAgICAgICAg
ICAgICAgICBmcD1Ob25lKQorCisgICAgZGVmIGdldGNvZGUoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLnN0YXR1c19jb2RlCisKKyAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuYm9keQogCiAjIEZJWE1FOiBDbGFzc2VzIHdoaWNoIGFyZSB1c2luZyBCcm93c2VyIHBy
b2JhYmx5IHdhbnQgdG8gdXNlIFdlYiBpbnN0ZWFkLgogY2xhc3MgTW9ja0Jyb3dzZXIob2JqZWN0
KToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL2NvbW1vbi5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL2NvbW1vbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTRhYTk1MzU0
YjkwNjczOTQxMDE3NmMxYjAzNzhjN2Q3MjM1MzMyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS93M2MvY29tbW9uLnB5CkBAIC0wLDAgKzEsOTkgQEAKKyMgQ29weXJp
Z2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisiIiJVdGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGJvdGggd2hlbiBpbXBvcnRp
bmcgYW5kIGV4cG9ydGluZy4iIiIKKworaW1wb3J0IGpzb24KK2ltcG9ydCBsb2dnaW5nCisKKwor
V1BUX0dIX09SRyA9ICd3M2MnCitXUFRfR0hfUkVQT19OQU1FID0gJ3dlYi1wbGF0Zm9ybS10ZXN0
cycKK1dQVF9HSF9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tLyVzLyVzLycgJSAoV1BUX0dIX09S
RywgV1BUX0dIX1JFUE9fTkFNRSkKK1dQVF9NSVJST1JfVVJMID0gJ2h0dHBzOi8vY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9leHRlcm5hbC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzLmdpdCcKK1dQ
VF9HSF9TU0hfVVJMX1RFTVBMQVRFID0gJ2h0dHBzOi8ve31AZ2l0aHViLmNvbS8lcy8lcy5naXQn
ICUgKFdQVF9HSF9PUkcsIFdQVF9HSF9SRVBPX05BTUUpCitXUFRfUkVWSVNJT05fRk9PVEVSID0g
J1dQVC1FeHBvcnQtUmV2aXNpb246JworRVhQT1JUX1BSX0xBQkVMID0gJ2Nocm9taXVtLWV4cG9y
dCcKK1BST1ZJU0lPTkFMX1BSX0xBQkVMID0gJ2RvIG5vdCBtZXJnZSB5ZXQnCisKKyMgVE9ETyhx
eWVhcnNsZXkpOiBBdm9pZCBoYXJkLWNvZGluZyB0aGlyZF9wYXJ0eS9XZWJLaXQvTGF5b3V0VGVz
dHMuCitDSFJPTUlVTV9XUFRfRElSID0gJ3RoaXJkX3BhcnR5L1dlYktpdC9MYXlvdXRUZXN0cy9l
eHRlcm5hbC93cHQvJworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKwor
ZGVmIHJlYWRfY3JlZGVudGlhbHMoaG9zdCwgY3JlZGVudGlhbHNfanNvbik6CisgICAgIiIiRXh0
cmFjdHMgY3JlZGVudGlhbHMgZnJvbSBhIEpTT04gZmlsZS4iIiIKKyAgICBpZiBub3QgY3JlZGVu
dGlhbHNfanNvbjoKKyAgICAgICAgcmV0dXJuIHt9CisgICAgaWYgbm90IGhvc3QuZmlsZXN5c3Rl
bS5leGlzdHMoY3JlZGVudGlhbHNfanNvbik6CisgICAgICAgIF9sb2cud2FybmluZygnQ3JlZGVu
dGlhbHMgSlNPTiBmaWxlIG5vdCBmb3VuZCBhdCAlcy4nLCBjcmVkZW50aWFsc19qc29uKQorICAg
ICAgICByZXR1cm4ge30KKyAgICBjcmVkZW50aWFscyA9IHt9CisgICAgY29udGVudHMgPSBqc29u
LmxvYWRzKGhvc3QuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShjcmVkZW50aWFsc19qc29uKSkK
KyAgICBmb3Iga2V5IGluICgnR0hfVVNFUicsICdHSF9UT0tFTicsICdHRVJSSVRfVVNFUicsICdH
RVJSSVRfVE9LRU4nKToKKyAgICAgICAgaWYga2V5IGluIGNvbnRlbnRzOgorICAgICAgICAgICAg
Y3JlZGVudGlhbHNba2V5XSA9IGNvbnRlbnRzW2tleV0KKyAgICByZXR1cm4gY3JlZGVudGlhbHMK
KworCitkZWYgaXNfdGVzdGhhcm5lc3NfYmFzZWxpbmUoZmlsZW5hbWUpOgorICAgICIiIkNoZWNr
cyB3aGV0aGVyIGEgZ2l2ZW4gZmlsZSBuYW1lIGFwcGVhcnMgdG8gYmUgYSB0ZXN0aGFybmVzcyBi
YXNlbGluZS4KKworICAgIEFyZ3M6CisgICAgICAgIGZpbGVuYW1lOiBBIHBhdGggKGFic29sdXRl
IG9yIHJlbGF0aXZlKSBvciBhIGJhc2VuYW1lLgorICAgICIiIgorICAgIHJldHVybiBmaWxlbmFt
ZS5lbmRzd2l0aCgnLWV4cGVjdGVkLnR4dCcpCisKKworZGVmIGlzX2Jhc2VuYW1lX3NraXBwZWQo
YmFzZW5hbWUpOgorICAgICIiIkNoZWNrcyB3aGV0aGVyIHRvIHNraXAgKG5vdCBzeW5jKSBhIGZp
bGUgYmFzZWQgb24gaXRzIGJhc2VuYW1lLgorCisgICAgTm90ZTogdGhpcyBmdW5jdGlvbiBpcyB1
c2VkIGR1cmluZyBib3RoIGltcG9ydCBhbmQgZXhwb3J0LCBpLmUuLCBmaWxlcyB3aXRoCisgICAg
c2tpcHBlZCBiYXNlbmFtZXMgYXJlIG5ldmVyIGltcG9ydGVkIG9yIGV4cG9ydGVkLgorICAgICIi
IgorICAgIGFzc2VydCAnLycgbm90IGluIGJhc2VuYW1lCisgICAgYmxhY2tsaXN0ID0gWworICAg
ICAgICAnTUFOSUZFU1QuanNvbicsICAgICMgTUFOSUZFU1QuanNvbiBpcyBhdXRvbWF0aWNhbGx5
IHJlZ2VuZXJhdGVkLgorICAgICAgICAnT1dORVJTJywgICAgICAgICAgICMgaHR0cHM6Ly9jcmJ1
Zy5jb20vNTg0NjYwIGh0dHBzOi8vY3JidWcuY29tLzcwMjI4MworICAgICAgICAncmVmdGVzdC5s
aXN0JywgICAgICMgaHR0cHM6Ly9jcmJ1Zy5jb20vNTgyODM4CisgICAgXQorICAgIHJldHVybiAo
YmFzZW5hbWUgaW4gYmxhY2tsaXN0CisgICAgICAgICAgICBvciBpc190ZXN0aGFybmVzc19iYXNl
bGluZShiYXNlbmFtZSkKKyAgICAgICAgICAgIG9yIGJhc2VuYW1lLnN0YXJ0c3dpdGgoJy4nKSkK
KworCitkZWYgaXNfZmlsZV9leHBvcnRhYmxlKHBhdGgpOgorICAgICIiIkNoZWNrcyB3aGV0aGVy
IGEgZmlsZSBpbiBDaHJvbWl1bSBXUFQgc2hvdWxkIGJlIGV4cG9ydGVkIHRvIHVwc3RyZWFtLgor
CisgICAgQXJnczoKKyAgICAgICAgcGF0aDogQSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIHJvb3Qg
b2YgQ2hyb21pdW0gcmVwb3NpdG9yeS4KKyAgICAiIiIKKyAgICBhc3NlcnQgcGF0aC5zdGFydHN3
aXRoKENIUk9NSVVNX1dQVF9ESVIpCisgICAgYmFzZW5hbWUgPSBwYXRoW3BhdGgucmZpbmQoJy8n
KSArIDE6XQorICAgIHJldHVybiBub3QgaXNfYmFzZW5hbWVfc2tpcHBlZChiYXNlbmFtZSkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfZXhwb3J0ZXIucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3
NjEwZTQxOWM0NjQyYmYxZjEyYTc4ZDk3NmVlMzZhNmQzNjEwZGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyLnB5CkBAIC0wLDAgKzEs
MjkzIEBACisjIENvcHlyaWdodCAoYykgMjAxNywgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisj
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIgorIFRo
aXMgc2NyaXB0IHVwbG9hZHMgY2hhbmdlcyBtYWRlIHRvIFczQyB3ZWItcGxhdGZvcm0tdGVzdHMg
dGVzdHMuCisiIiIKKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9z
CitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20uZ2l0IGlt
cG9ydCBHaXQKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLm5ldC5idWd6aWxsYSBpbXBvcnQgQnVnemlsbGEKK2Zyb20gd2Via2l0cHku
Y29tbW9uLndlYmtpdF9maW5kZXIgaW1wb3J0IFdlYktpdEZpbmRlcgorZnJvbSB3ZWJraXRweS53
M2Mud3B0X2dpdGh1YiBpbXBvcnQgV1BUR2l0SHViCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKKworV0VCS0lUX1dQVF9ESVIgPSAnTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cycKK1dQVF9QUl9VUkwgPSAiaHR0cHM6Ly9naXRodWIuY29tL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcHVsbC8iCisKKworY2xhc3MgVGVzdEV4cG9ydGVyKG9iamVj
dCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgb3B0aW9ucywgZ2l0Q2xhc3M9R2l0
LCBidWd6aWxsYUNsYXNzPUJ1Z3ppbGxhLCBXUFRHaXRIdWJDbGFzcz1XUFRHaXRIdWIpOgorICAg
ICAgICBzZWxmLl9ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gaG9zdC5m
aWxlc3lzdGVtCisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisKKyAgICAgICAgc2Vs
Zi5faG9zdC5pbml0aWFsaXplX3NjbSgpCisKKyAgICAgICAgc2VsZi5fYnVnemlsbGEgPSBidWd6
aWxsYUNsYXNzKCkKKyAgICAgICAgc2VsZi5fYnVnX2lkID0gb3B0aW9ucy5idWdfaWQKKyAgICAg
ICAgaWYgbm90IHNlbGYuX2J1Z19pZDoKKyAgICAgICAgICAgIGlmIG9wdGlvbnMuYXR0YWNobWVu
dF9pZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9idWdfaWQgPSBzZWxmLl9idWd6aWxsYS5idWdf
aWRfZm9yX2F0dGFjaG1lbnRfaWQob3B0aW9ucy5hdHRhY2htZW50X2lkKQorICAgICAgICAgICAg
ZWxpZiBvcHRpb25zLmdpdF9jb21taXQ6CisgICAgICAgICAgICAgICAgc2VsZi5fYnVnX2lkID0g
c2VsZi5faG9zdC5jaGVja291dCgpLmJ1Z19pZF9mb3JfdGhpc19jb21taXQob3B0aW9ucy5naXRf
Y29tbWl0KQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnJlcG9zaXRvcnlfZGlyZWN0
b3J5OgorICAgICAgICAgICAgd2Via2l0X2ZpbmRlciA9IFdlYktpdEZpbmRlcihzZWxmLl9maWxl
c3lzdGVtKQorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5yZXBvc2l0b3J5X2RpcmVjdG9yeSA9
IHdlYmtpdF9maW5kZXIucGF0aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJLaXRCdWlsZCcsICd3M2Mt
dGVzdHMnLCAnd2ViLXBsYXRmb3JtLXRlc3RzJykKKworICAgICAgICBzZWxmLl9naXQgPSBzZWxm
Ll9lbnN1cmVfd3B0X3JlcG9zaXRvcnkoImh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzLmdpdCIsIHNlbGYuX29wdGlvbnMucmVwb3NpdG9yeV9kaXJlY3RvcnksIGdpdENs
YXNzKQorCisgICAgICAgIHNlbGYuX3VzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZQorICAgICAg
ICBpZiBub3Qgc2VsZi5fdXNlcm5hbWU6CisgICAgICAgICAgICBzZWxmLl91c2VybmFtZSA9IHNl
bGYuX2dpdC5sb2NhbF9jb25maWcoJ2dpdGh1Yi51c2VybmFtZScpLnJzdHJpcCgpCisgICAgICAg
ICAgICBpZiBub3Qgc2VsZi5fdXNlcm5hbWU6CisgICAgICAgICAgICAgICAgc2VsZi5fdXNlcm5h
bWUgPSBvcy5lbnZpcm9uLmdldCgnR0lUSFVCX1VTRVJOQU1FJykKKyAgICAgICAgICAgIGlmIG5v
dCBzZWxmLl91c2VybmFtZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJNaXNz
aW5nIEdpdEh1YiB1c2VybmFtZSwgcGxlYXNlIHByb3ZpZGUgaXQgYXMgYSBwYXJhbWV0ZXIuIikK
KyAgICAgICAgZWxpZiBub3Qgc2VsZi5fZ2l0LmxvY2FsX2NvbmZpZygnZ2l0aHViLnVzZXJuYW1l
Jyk6CisgICAgICAgICAgICBzZWxmLl9naXQuc2V0X2xvY2FsX2NvbmZpZygnZ2l0aHViLnVzZXJu
YW1lJywgc2VsZi5fdXNlcm5hbWUpCisKKyAgICAgICAgc2VsZi5fdG9rZW4gPSBvcHRpb25zLnRv
a2VuCisgICAgICAgIGlmIG5vdCBzZWxmLl90b2tlbjoKKyAgICAgICAgICAgIHNlbGYuX3Rva2Vu
ID0gc2VsZi5fZ2l0LmxvY2FsX2NvbmZpZygnZ2l0aHViLnRva2VuJykucnN0cmlwKCkKKyAgICAg
ICAgICAgIGlmIG5vdCBzZWxmLl90b2tlbjoKKyAgICAgICAgICAgICAgICBzZWxmLl90b2tlbiA9
IG9zLmVudmlyb24uZ2V0KCdHSVRIVUJfVE9LRU4nKQorICAgICAgICAgICAgaWYgbm90IHNlbGYu
X3Rva2VuOgorICAgICAgICAgICAgICAgIF9sb2cuaW5mbygiTWlzc2luZyBHaXRIdWIgdG9rZW4s
IHRoZSBzY3JpcHQgd2lsbCBub3QgYmUgYWJsZSB0byBjcmVhdGUgYSBwdWxsIHJlcXVlc3QgdG8g
VzNDIHdlYi1wbGF0Zm9ybS10ZXN0cyByZXBvc2l0b3J5LiIpCisgICAgICAgIGVsaWYgbm90IHNl
bGYuX2dpdC5sb2NhbF9jb25maWcoJ2dpdGh1Yi50b2tlbicpOgorICAgICAgICAgICAgc2VsZi5f
Z2l0LnNldF9sb2NhbF9jb25maWcoJ2dpdGh1Yi50b2tlbicsIHNlbGYuX3Rva2VuKQorCisgICAg
ICAgIHNlbGYuX2dpdGh1YiA9IFdQVEdpdEh1YkNsYXNzKHNlbGYuX2hvc3QsIHNlbGYuX3VzZXJu
YW1lLCBzZWxmLl90b2tlbikgaWYgc2VsZi5fdXNlcm5hbWUgYW5kIHNlbGYuX3Rva2VuIGVsc2Ug
Tm9uZQorCisgICAgICAgIHNlbGYuX2JyYW5jaF9uYW1lID0gc2VsZi5fZW5zdXJlX25ld19icmFu
Y2hfbmFtZSgpCisgICAgICAgIHNlbGYuX3B1YmxpY19icmFuY2hfbmFtZSA9IG9wdGlvbnMucHVi
bGljX2JyYW5jaF9uYW1lIGlmIG9wdGlvbnMucHVibGljX2JyYW5jaF9uYW1lIGVsc2Ugc2VsZi5f
YnJhbmNoX25hbWUKKyAgICAgICAgc2VsZi5fYnVnemlsbGFfdXJsID0gImh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0iICsgc3RyKHNlbGYuX2J1Z19pZCkKKyAgICAgICAg
c2VsZi5fY29tbWl0X21lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2UgaWYgb3B0aW9ucy5tZXNzYWdl
IGVsc2UgJ1dlYktpdCBleHBvcnQgb2YgJyArIHNlbGYuX2J1Z3ppbGxhX3VybAorCisgICAgICAg
IHNlbGYuX3dwdF9mb3JrX3JlbW90ZSA9IG9wdGlvbnMucmVwb3NpdG9yeV9yZW1vdGUKKyAgICAg
ICAgaWYgbm90IHNlbGYuX3dwdF9mb3JrX3JlbW90ZToKKyAgICAgICAgICAgIHNlbGYuX3dwdF9m
b3JrX3JlbW90ZSA9IHNlbGYuX3VzZXJuYW1lCisKKyAgICAgICAgc2VsZi5fd3B0X2ZvcmtfcHVz
aF91cmwgPSBvcHRpb25zLnJlcG9zaXRvcnlfcmVtb3RlX3VybAorICAgICAgICBpZiBub3Qgc2Vs
Zi5fd3B0X2ZvcmtfcHVzaF91cmw6CisgICAgICAgICAgICBzZWxmLl93cHRfZm9ya19wdXNoX3Vy
bCA9ICJodHRwczovLyIgKyBzZWxmLl91c2VybmFtZSArICJAZ2l0aHViLmNvbS8iICsgc2VsZi5f
dXNlcm5hbWUgKyAiL3dlYi1wbGF0Zm9ybS10ZXN0cy5naXQiCisKKyAgICBkZWYgX2Vuc3VyZV93
cHRfcmVwb3NpdG9yeShzZWxmLCB1cmwsIHdwdF9yZXBvc2l0b3J5X2RpcmVjdG9yeSwgZ2l0Q2xh
c3MpOgorICAgICAgICBnaXQgPSBOb25lCisgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVt
LmV4aXN0cyh3cHRfcmVwb3NpdG9yeV9kaXJlY3RvcnkpOgorICAgICAgICAgICAgX2xvZy5pbmZv
KCdDbG9uaW5nICVzIGludG8gJXMuLi4nICUgKHVybCwgd3B0X3JlcG9zaXRvcnlfZGlyZWN0b3J5
KSkKKyAgICAgICAgICAgIGdpdENsYXNzLmNsb25lKHVybCwgd3B0X3JlcG9zaXRvcnlfZGlyZWN0
b3J5LCBzZWxmLl9ob3N0LmV4ZWN1dGl2ZSkKKyAgICAgICAgZ2l0ID0gZ2l0Q2xhc3Mod3B0X3Jl
cG9zaXRvcnlfZGlyZWN0b3J5LCBOb25lLCBleGVjdXRpdmU9c2VsZi5faG9zdC5leGVjdXRpdmUs
IGZpbGVzeXN0ZW09c2VsZi5fZmlsZXN5c3RlbSkKKyAgICAgICAgcmV0dXJuIGdpdAorCisgICAg
ZGVmIF9mZXRjaF93cHRfcmVwb3NpdG9yeShzZWxmKToKKyAgICAgICAgX2xvZy5pbmZvKCdGZXRj
aGluZyB3ZWItcGxhdGZvcm0tdGVzdHMgcmVwb3NpdG9yeScpCisgICAgICAgIHNlbGYuX2dpdC5m
ZXRjaCgpCisKKyAgICBkZWYgX2Vuc3VyZV9uZXdfYnJhbmNoX25hbWUoc2VsZik6CisgICAgICAg
IGJyYW5jaF9uYW1lX3ByZWZpeCA9ICJ3cHQtZXhwb3J0LWZvci13ZWJraXQtIiArIChzdHIoc2Vs
Zi5fYnVnX2lkKSBpZiBzZWxmLl9idWdfaWQgZWxzZSAiMCIpCisgICAgICAgIGJyYW5jaF9uYW1l
ID0gYnJhbmNoX25hbWVfcHJlZml4CisgICAgICAgIGNvdW50ZXIgPSAwCisgICAgICAgIHdoaWxl
IHNlbGYuX2dpdC5icmFuY2hfcmVmX2V4aXN0cyhicmFuY2hfbmFtZSk6CisgICAgICAgICAgICBi
cmFuY2hfbmFtZSA9ICgiJXMtJXMiKSAlIChicmFuY2hfbmFtZV9wcmVmaXgsIHN0cihjb3VudGVy
KSkKKyAgICAgICAgICAgIGNvdW50ZXIgPSBjb3VudGVyICsgMQorICAgICAgICByZXR1cm4gYnJh
bmNoX25hbWUKKworICAgIGRlZiBkb3dubG9hZF9hbmRfY29tbWl0X3BhdGNoKHNlbGYpOgorICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLmdpdF9jb21taXQ6CisgICAgICAgICAgICByZXR1cm4gVHJ1
ZQorCisgICAgICAgIHBhdGNoX29wdGlvbnMgPSBbIi0tbm8tdXBkYXRlIiwgIi0tbm8tY2xlYW4i
LCAiLS1sb2NhbC1jb21taXQiXQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmF0dGFjaG1lbnRf
aWQ6CisgICAgICAgICAgICBwYXRjaF9vcHRpb25zLmluc2VydCgiYXBwbHktYXR0YWNobWVudCIp
CisgICAgICAgICAgICBwYXRjaF9vcHRpb25zLmFwcGVuZChzZWxmLl9vcHRpb25zLmF0dGFjaG1l
bnRfaWQpCisgICAgICAgIGVsaWYgc2VsZi5fb3B0aW9ucy5idWdfaWQ6CisgICAgICAgICAgICBw
YXRjaF9vcHRpb25zLmluc2VydCgiYXBwbHktZnJvbS1idWciKQorICAgICAgICAgICAgcGF0Y2hf
b3B0aW9ucy5hcHBlbmQoc2VsZi5fb3B0aW9ucy5idWdfaWQpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBfbG9nLmluZm8oIkV4cG9ydGluZyBsb2NhbCBjaGFuZ2VzIikKKyAgICAgICAgICAg
IHJldHVybgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlJldHJpZXZhbCBvZiBwYXRjaCBmcm9t
IGJ1Z3ppbGxhIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQiKQorCisgICAgZGVmIGNsZWFuKHNlbGYp
OgorICAgICAgICBfbG9nLmluZm8oJ0NsZWFuaW5nIHdlYi1wbGF0Zm9ybS10ZXN0cyBtYXN0ZXIg
YnJhbmNoJykKKyAgICAgICAgc2VsZi5fZ2l0LmNoZWNrb3V0KCdtYXN0ZXInKQorICAgICAgICBz
ZWxmLl9naXQucmVzZXRfaGFyZCgnb3JpZ2luL21hc3RlcicpCisKKyAgICBkZWYgY3JlYXRlX2Jy
YW5jaF93aXRoX3BhdGNoKHNlbGYsIHBhdGNoKToKKyAgICAgICAgX2xvZy5pbmZvKCdBcHBseWlu
ZyBwYXRjaCB0byB3ZWItcGxhdGZvcm0tdGVzdHMgYnJhbmNoICcgKyBzZWxmLl9icmFuY2hfbmFt
ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZ2l0LmNoZWNrb3V0X25ld19icmFu
Y2goc2VsZi5fYnJhbmNoX25hbWUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAg
ICAgICAgICAgIF9sb2cud2FybmluZyhlKQorICAgICAgICAgICAgX2xvZy5pbmZvKCJSZXRyeWlu
ZyB0byBjcmVhdGUgdGhlIGJyYW5jaCIpCisgICAgICAgICAgICBzZWxmLl9naXQuZGVsZXRlX2Jy
YW5jaChzZWxmLl9icmFuY2hfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2dpdC5jaGVja291dF9u
ZXdfYnJhbmNoKHNlbGYuX2JyYW5jaF9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBz
ZWxmLl9naXQuYXBwbHlfbWFpbF9wYXRjaChbcGF0Y2gsICctLWV4Y2x1ZGUnLCAnKi1leHBlY3Rl
ZC50eHQnXSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgX2xv
Zy53YXJuaW5nKGUpCisgICAgICAgICAgICBzZWxmLl9naXQuYXBwbHlfbWFpbF9wYXRjaChbJy0t
YWJvcnQnXSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLl9naXQuY29t
bWl0KFsnLWEnLCAnLW0nLCBzZWxmLl9jb21taXRfbWVzc2FnZV0pCisgICAgICAgIHJldHVybiBU
cnVlCisKKyAgICBkZWYgcHVzaF90b193cHRfZm9yayhzZWxmKToKKyAgICAgICAgc2VsZi5jcmVh
dGVfdXBsb2FkX3JlbW90ZV9pZl9uZWVkZWQoKQorICAgICAgICB3cHRfZm9ya19icmFuY2hfZ2l0
aHViX3VybCA9ICJodHRwczovL2dpdGh1Yi5jb20vIiArIHNlbGYuX3VzZXJuYW1lICsgIi93ZWIt
cGxhdGZvcm0tdGVzdHMvdHJlZS8iICsgc2VsZi5fcHVibGljX2JyYW5jaF9uYW1lCisgICAgICAg
IF9sb2cuaW5mbygnUHVzaGluZyBicmFuY2ggJyArIHNlbGYuX2JyYW5jaF9uYW1lICsgIiB0byAi
ICsgc2VsZi5fZ2l0LnJlbW90ZShbImdldC11cmwiLCBzZWxmLl93cHRfZm9ya19yZW1vdGVdKS5y
c3RyaXAoKSkKKyAgICAgICAgX2xvZy5pbmZvKCdUaGlzIG1heSB0YWtlIHNvbWUgdGltZScpCisg
ICAgICAgIHNlbGYuX2dpdC5wdXNoKFtzZWxmLl93cHRfZm9ya19yZW1vdGUsIHNlbGYuX2JyYW5j
aF9uYW1lICsgIjoiICsgc2VsZi5fcHVibGljX2JyYW5jaF9uYW1lLCAnLWYnXSkKKyAgICAgICAg
X2xvZy5pbmZvKCdCcmFuY2ggYXZhaWxhYmxlIGF0ICcgKyB3cHRfZm9ya19icmFuY2hfZ2l0aHVi
X3VybCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBtYWtlX3B1bGxfcmVxdWVzdChz
ZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2dpdGh1YjoKKyAgICAgICAgICAgIF9sb2cuaW5m
bygnTWlzc2luZyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBwdWxsIHJlcXVlc3QnKQorICAgICAg
ICAgICAgcmV0dXJuCisKKyAgICAgICAgX2xvZy5pbmZvKCdNYWtpbmcgcHVsbCByZXF1ZXN0JykK
KyAgICAgICAgZGVzY3JpcHRpb24gPSBzZWxmLl9idWd6aWxsYS5mZXRjaF9idWdfZGljdGlvbmFy
eShzZWxmLl9idWdfaWQpWyJ0aXRsZSJdCisgICAgICAgIHByX251bWJlciA9IHNlbGYuX2dpdGh1
Yi5jcmVhdGVfcHIoc2VsZi5fd3B0X2ZvcmtfcmVtb3RlICsgJzonICsgc2VsZi5fYnJhbmNoX25h
bWUsIHNlbGYuX2NvbW1pdF9tZXNzYWdlLCBkZXNjcmlwdGlvbikKKyAgICAgICAgaWYgc2VsZi5f
YnVnX2lkOgorICAgICAgICAgICAgc2VsZi5fYnVnemlsbGEucG9zdF9jb21tZW50X3RvX2J1Zyhz
ZWxmLl9idWdfaWQsICJTdWJtaXR0ZWQgd2ViLXBsYXRmb3JtLXRlc3RzIHB1bGwgcmVxdWVzdDog
IiArIFdQVF9QUl9VUkwgKyBzdHIocHJfbnVtYmVyKSkKKworICAgIGRlZiBkZWxldGVfbG9jYWxf
YnJhbmNoKHNlbGYpOgorICAgICAgICBfbG9nLmluZm8oJ1JlbW92aW5nIGJyYW5jaCAnICsgc2Vs
Zi5fYnJhbmNoX25hbWUpCisgICAgICAgIHNlbGYuX2dpdC5jaGVja291dCgnbWFzdGVyJykKKyAg
ICAgICAgc2VsZi5fZ2l0LmRlbGV0ZV9icmFuY2goc2VsZi5fYnJhbmNoX25hbWUpCisKKyAgICBk
ZWYgY3JlYXRlX2dpdF9wYXRjaChzZWxmKToKKyAgICAgICAgcGF0Y2hfZmlsZSA9ICcuL3BhdGNo
LnRlbXAuJyArIHN0cih0aW1lLmNsb2NrKCkpCisgICAgICAgIGdpdF9jb21taXQgPSAiSEVBRC4u
Li4iIGlmIG5vdCBzZWxmLl9vcHRpb25zLmdpdF9jb21taXQgZWxzZSBzZWxmLl9vcHRpb25zLmdp
dF9jb21taXQgKyAifjEuLiIgKyBzZWxmLl9vcHRpb25zLmdpdF9jb21taXQKKyAgICAgICAgcGF0
Y2hfZGF0YSA9IHNlbGYuX2hvc3Quc2NtKCkuY3JlYXRlX3BhdGNoKGdpdF9jb21taXQsIFtXRUJL
SVRfV1BUX0RJUl0pCisgICAgICAgIGlmIG5vdCBwYXRjaF9kYXRhIG9yIG5vdCAnZGlmZicgaW4g
cGF0Y2hfZGF0YToKKyAgICAgICAgICAgIF9sb2cuaW5mbygnTm8gY2hhbmdlcyB0byB1cHN0cmVh
bSwgcGF0Y2ggZGF0YSBpczogIiVzIicgJSAocGF0Y2hfZGF0YSkpCisgICAgICAgICAgICByZXR1
cm4gJycKKyAgICAgICAgIyBGSVhNRTogV2UgY2FuIHByb2JhYmx5IHRyeSB0byB1c2UgLS1yZWxh
dGl2ZSBnaXQgcGFyYW1ldGVyIHRvIG5vdCBkbyB0aGF0IHJlcGxhY2VtZW50LgorICAgICAgICBw
YXRjaF9kYXRhID0gcGF0Y2hfZGF0YS5yZXBsYWNlKFdFQktJVF9XUFRfRElSICsgJy8nLCAnJykK
KyAgICAgICAgcGF0Y2hfZmlsZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChwYXRjaF9maWxl
KQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShwYXRjaF9maWxlLCBw
YXRjaF9kYXRhKQorICAgICAgICByZXR1cm4gcGF0Y2hfZmlsZQorCisgICAgZGVmIGNyZWF0ZV91
cGxvYWRfcmVtb3RlX2lmX25lZWRlZChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3dwdF9m
b3JrX3JlbW90ZSBpbiBzZWxmLl9naXQucmVtb3RlKFtdKToKKyAgICAgICAgICAgIHNlbGYuX2dp
dC5yZW1vdGUoWyJhZGQiLCBzZWxmLl93cHRfZm9ya19yZW1vdGUsIHNlbGYuX3dwdF9mb3JrX3B1
c2hfdXJsXSkKKworICAgIGRlZiBkb19leHBvcnQoc2VsZik6CisgICAgICAgIGdpdF9wYXRjaF9m
aWxlID0gc2VsZi5jcmVhdGVfZ2l0X3BhdGNoKCkKKworICAgICAgICBpZiBub3QgZ2l0X3BhdGNo
X2ZpbGU6CisgICAgICAgICAgICBfbG9nLmVycm9yKCJVbmFibGUgdG8gY3JlYXRlIGEgcGF0Y2gg
dG8gYXBwbHkgdG8gd2ViLXBsYXRmb3JtLXRlc3RzIHJlcG9zaXRvcnkiKQorICAgICAgICAgICAg
cmV0dXJuCisKKyAgICAgICAgc2VsZi5fZmV0Y2hfd3B0X3JlcG9zaXRvcnkoKQorICAgICAgICBz
ZWxmLmNsZWFuKCkKKworICAgICAgICBpZiBub3Qgc2VsZi5jcmVhdGVfYnJhbmNoX3dpdGhfcGF0
Y2goZ2l0X3BhdGNoX2ZpbGUpOgorICAgICAgICAgICAgX2xvZy5lcnJvcigiQ2Fubm90IGNyZWF0
ZSB3ZWItcGxhdGZvcm0tdGVzdHMgbG9jYWwgYnJhbmNoIGZyb20gdGhlIHBhdGNoIikKKyAgICAg
ICAgICAgIHNlbGYuZGVsZXRlX2xvY2FsX2JyYW5jaCgpCisgICAgICAgICAgICByZXR1cm4KKwor
ICAgICAgICBpZiBnaXRfcGF0Y2hfZmlsZToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0u
cmVtb3ZlKGdpdF9wYXRjaF9maWxlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNl
bGYucHVzaF90b193cHRfZm9yaygpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMu
Y3JlYXRlX3B1bGxfcmVxdWVzdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX3B1bGxf
cmVxdWVzdCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmRlbGV0ZV9sb2Nh
bF9icmFuY2goKQorICAgICAgICAgICAgX2xvZy5pbmZvKCJGaW5pc2hlZCIpCisgICAgICAgICAg
ICBzZWxmLmNsZWFuKCkKKworCitkZWYgcGFyc2VfYXJncyhhcmdzKToKKyAgICBkZXNjcmlwdGlv
biA9ICIiIlNjcmlwdCB0byBnZW5lcmF0ZSBhIHB1bGwgcmVxdWVzdCB0byBXM0Mgd2ViLXBsYXRm
b3JtLXRlc3RzIHJlcG9zaXRvcnkKKyAgICAnVG9vbHMvU2NyaXB0cy9leHBvcnQtdzNjLXRlc3Qt
Y2hhbmdlcyAtYyAtZyBIRUFEIC1iIFhZWicgd2lsbCBkbyB0aGUgZm9sbG93aW5nOgorICAgIC0g
Q2xvbmUgd2ViLXBsYXRmb3JtLXRlc3RzIHJlcG9zaXRvcnkgaWYgbm90IGRvbmUgYWxyZWFkeSBh
bmQgc2V0IGl0IHVwIGZvciBwdXNoaW5nIGJyYW5jaGVzLgorICAgIC0gR2F0aGVyIFdlYktpdCBi
dWcgaWQgWFlaIGJ1ZyBhbmQgY2hhbmdlcyB0byBhcHBseSB0byB3ZWItcGxhdGZvcm0tdGVzdHMg
cmVwb3NpdG9yeSBiYXNlZCBvbiB0aGUgSEVBRCBjb21taXQKKyAgICAtIENyZWF0ZSBhIHJlbW90
ZSBicmFuY2ggbmFtZWQgd2Via2l0LVhZWiBvbiBodHRwczovL2dpdGh1Yi5jb20vVVNFUk5BTUUv
d2ViLXBsYXRmb3JtLXRlc3RzLmdpdCByZXBvc2l0b3J5IGJhc2VkIG9uIHRoZSBsb2NhbGx5IGFw
cGxpZWQgcGF0Y2guCisgICAgLSAgICBVU0VSTkFNRSBtYXkgYmUgc2V0IHVzaW5nIHRoZSBlbnZp
cm9ubWVudCB2YXJpYWJsZSBHSVRIVUJfVVNFUk5BTUUgb3IgYXMgYSBjb21tYW5kIGxpbmUgb3B0
aW9uLiBJdCBpcyB0aGVuIHN0b3JlZCBpbiBnaXQgY29uZmlnIGFzIGdpdGh1Yi51c2VybmFtZS4K
KyAgICAtICAgIEdpdGh1YiBjcmVkZW50aWFsIG1heSBiZSBzZXQgdXNpbmcgdGhlIGVudmlyb25t
ZW50IHZhcmlhYmxlIEdJVEhVQl9UT0tFTiBvciBhcyBhIGNvbW1hbmQgbGluZSBvcHRpb24uIChQ
bGVhc2UgcHJvdmlkZSBhIHZhbGlkIEdpdEh1YiAnUGVyc29uYWwgYWNjZXNzIHRva2VuJyB3aXRo
ICdyZXBvJyBhcyBzY29wZSkuIEl0IGlzIHRoZW4gc3RvcmVkIGluIGdpdCBjb25maWcgYXMgZ2l0
aHViLnRva2VuLgorICAgIC0gTWFrZSB0aGUgcmVsYXRlZCBwdWxsIHJlcXVlc3Qgb24gaHR0cHM6
Ly9naXRodWIuY29tL3czYy93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0IHJlcG9zaXRvcnkuCisgICAg
LSBDbGVhbiB0aGUgbG9jYWwgR2l0IHJlcG9zaXRvcnkKKyAgICBOb3RlczoKKyAgICAtIEl0IGlz
IHNhZmVyIHRvIHByb3ZpZGUgYSBidWcgaWQgdXNpbmcgLWIgb3B0aW9uIChidWcgaWQgZnJvbSBh
IGdpdCBjb21taXQgaXMgbm90IGFsd2F5cyB3b3JraW5nKS4KKyAgICAtIEFzIGEgZHJ5IHJ1biwg
b25lIGNhbiBzdGFydCBieSBydW5uaW5nIHRoZSBzY3JpcHQgd2l0aG91dCAtYy4gVGhpcyB3aWxs
IG9ubHkgY3JlYXRlIHRoZSBicmFuY2ggb24gdGhlIHVzZXIgcHVibGljIEdpdEh1YiByZXBvc2l0
b3J5LgorICAgIC0gQnkgZGVmYXVsdCwgdGhlIHNjcmlwdCB3aWxsIGNyZWF0ZSBhbiBodHRwcyBy
ZW1vdGUgVVJMIHRoYXQgd2lsbCByZXF1aXJlIGEgcGFzc3dvcmQtYmFzZWQgYXV0aGVudGljYXRp
b24gdG8gR2l0SHViLiBJZiB5b3UgYXJlIHVzaW5nIGFuIFNTSCBrZXksIHBsZWFzZSB1c2UgdGhl
IC0tcmVtb3RlLXVybCBvcHRpb24uCisgICAgRklYTUU6CisgICAgLSBBZGQgYSBsYWJlbCBvbiBn
aXRodWIgaXNzdWVzCisgICAgLSBUaGUgc2NyaXB0IGlzIG5vdCB5ZXQgYWJsZSB0byB1cGRhdGUg
YW4gZXhpc3RpbmcgcHVsbCByZXF1ZXN0CisgICAgLSBOZWVkIGEgd2F5IHRvIG1vbml0b3IgdGhl
IHByb2dyZXNzIG9mIHRoZSBwdWwgcmVxdWVzdCBzbyB0aGF0IHN0YXR1cyBvZiBhbGwgcGVuZGlu
ZyBwdWxsIHJlcXVlc3RzIGNhbiBiZSBkb25lIGF0IGltcG9ydCB0aW1lLgorICAgICIiIgorICAg
IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J2V4cG9ydC13M2MtdGVzdC1j
aGFuZ2VzIC4uLicsIGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uLCBmb3JtYXR0ZXJfY2xhc3M9YXJn
cGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyKQorCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnLWcnLCAnLS1naXQtY29tbWl0JywgZGVzdD0nZ2l0X2NvbW1pdCcsIGRlZmF1bHQ9Tm9u
ZSwgaGVscD0nR2l0IGNvbW1pdCB0byBhcHBseScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgn
LWInLCAnLS1idWcnLCBkZXN0PSdidWdfaWQnLCBkZWZhdWx0PU5vbmUsIGhlbHA9J0J1ZyBJRCB0
byBzZWFyY2ggZm9yIHBhdGNoJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYScsICctLWF0
dGFjaG1lbnQnLCBkZXN0PSdhdHRhY2htZW50X2lkJywgZGVmYXVsdD1Ob25lLCBoZWxwPSdBdHRh
Y2htZW50IElEIHRvIHNlYXJjaCBmb3IgcGF0Y2gnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQo
Jy1uJywgJy0tbmFtZScsIGRlc3Q9J3VzZXJuYW1lJywgZGVmYXVsdD1Ob25lLCBoZWxwPSdnaXRo
dWIgdXNlciBuYW1lIGlmIEdJVEhVQl9VU0VSTkFNRSBpcyBub3QgZGVmaW5lZCBvciBnaXRodWIu
dXNlcm5hbWUgaW4gdGhlIFdQVCByZXBvIGNvbmZpZyBpcyBub3QgZGVmaW5lZCcpCisgICAgcGFy
c2VyLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10b2tlbicsIGRlc3Q9J3Rva2VuJywgZGVmYXVsdD1O
b25lLCBoZWxwPSdnaXRodWIgdG9rZW4sIG5lZWRlZCBmb3IgY3JlYXRpbmcgcHVsbCByZXF1ZXN0
cyBvbmx5IGlmIEdJVEhVQl9UT0tFTiBlbnYgdmFyaWFibGUgaXMgbm90IGRlZmluZWQgb3IgZ2l0
aHViLnRva2VuIGluIHRoZSBXUFQgcmVwbyBjb25maWcgaXMgbm90IGRlZmluZWQnKQorICAgIHBh
cnNlci5hZGRfYXJndW1lbnQoJy1ibicsICctLWJyYW5jaC1uYW1lJywgZGVzdD0ncHVibGljX2Jy
YW5jaF9uYW1lJywgZGVmYXVsdD1Ob25lLCBoZWxwPSdCcmFuY2ggbmFtZSB0byBwdXNoIHRvJykK
KyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbScsICctLW1lc3NhZ2UnLCBkZXN0PSdtZXNzYWdl
JywgZGVmYXVsdD1Ob25lLCBoZWxwPSdDb21taXQgbWVzc2FnZScpCisgICAgcGFyc2VyLmFkZF9h
cmd1bWVudCgnLXInLCAnLS1yZW1vdGUnLCBkZXN0PSdyZXBvc2l0b3J5X3JlbW90ZScsIGRlZmF1
bHQ9Tm9uZSwgaGVscD0ncmVwb3NpdG9yeSBvcmlnaW4gdG8gdXNlIHRvIHB1c2gnKQorICAgIHBh
cnNlci5hZGRfYXJndW1lbnQoJy11JywgJy0tcmVtb3RlLXVybCcsIGRlc3Q9J3JlcG9zaXRvcnlf
cmVtb3RlX3VybCcsIGRlZmF1bHQ9Tm9uZSwgaGVscD0ncmVwb3NpdG9yeSB1cmwgdG8gdXNlIHRv
IHB1c2gnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tcmVwb3NpdG9yeScsIGRl
c3Q9J3JlcG9zaXRvcnlfZGlyZWN0b3J5JywgZGVmYXVsdD1Ob25lLCBoZWxwPSdyZXBvc2l0b3J5
IGRpcmVjdG9yeScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWMnLCAnLS1jcmVhdGUtcHIn
LCBkZXN0PSdjcmVhdGVfcHVsbF9yZXF1ZXN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVs
dD1GYWxzZSwgaGVscD0nY3JlYXRlIHB1bGwgcmVxdWVzdCB0byB3M2Mgd2ViLXBsYXRmb3JtLXRl
c3RzJykKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmdz
KQorCisgICAgcmV0dXJuIG9wdGlvbnMKKworCitkZWYgY29uZmlndXJlX2xvZ2dpbmcoKToKKyAg
ICBjbGFzcyBMb2dIYW5kbGVyKGxvZ2dpbmcuU3RyZWFtSGFuZGxlcik6CisKKyAgICAgICAgZGVm
IGZvcm1hdChzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgaWYgcmVjb3JkLmxldmVsbm8gPiBs
b2dnaW5nLklORk86CisgICAgICAgICAgICAgICAgcmV0dXJuICIlczogJXMiICUgKHJlY29yZC5s
ZXZlbG5hbWUsIHJlY29yZC5nZXRNZXNzYWdlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVjb3Jk
LmdldE1lc3NhZ2UoKQorCisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgIGxv
Z2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgaGFuZGxlciA9IExvZ0hhbmRsZXIoKQor
ICAgIGhhbmRsZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIGxvZ2dlci5hZGRIYW5kbGVy
KGhhbmRsZXIpCisgICAgcmV0dXJuIGhhbmRsZXIKKworCitkZWYgbWFpbihfYXJndiwgX3N0ZG91
dCwgX3N0ZGVycik6CisgICAgb3B0aW9ucyA9IHBhcnNlX2FyZ3MoX2FyZ3YpCisKKyAgICBjb25m
aWd1cmVfbG9nZ2luZygpCisKKyAgICB0ZXN0X2V4cG9ydGVyID0gVGVzdEV4cG9ydGVyKEhvc3Qo
KSwgb3B0aW9ucykKKworICAgIHRlc3RfZXhwb3J0ZXIuZG9fZXhwb3J0KCkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfZXhwb3J0ZXJfdW5pdHRlc3QucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyX3VuaXR0ZXN0LnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU4NjNmY2QyNDRkY2Y5YmE0MzcyMWVlOGJhOTlkOGZmMzA3OGQ5MjYKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyX3VuaXR0
ZXN0LnB5CkBAIC0wLDAgKzEsMTMyIEBACisjIENvcHlyaWdodCAoYykgMjAxNywgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgor
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
CisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21v
Y2sgaW1wb3J0IE1vY2tIb3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3Rl
bV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZlMgorZnJvbSB3ZWJraXRweS53M2Mu
dGVzdF9leHBvcnRlciBpbXBvcnQgVGVzdEV4cG9ydGVyLCBwYXJzZV9hcmdzCitmcm9tIHdlYmtp
dHB5LnczYy53cHRfZ2l0aHViX21vY2sgaW1wb3J0IE1vY2tXUFRHaXRIdWIKKworCitjbGFzcyBU
ZXN0RXhwb3J0ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYXhEaWZmID0gTm9uZQor
CisgICAgY2xhc3MgTW9ja0J1Z3ppbGxhKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMgPSBbXQorCisgICAgICAgIGRlZiBmZXRjaF9i
dWdfZGljdGlvbmFyeShzZWxmLCBpZCk6CisgICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgn
ZmV0Y2ggYnVnICcgKyBpZCkKKyAgICAgICAgICAgIHJldHVybiB7InRpdGxlIjogIm15IGJ1ZyB0
aXRsZSJ9CisKKyAgICAgICAgZGVmIHBvc3RfY29tbWVudF90b19idWcoc2VsZiwgaWQsIGNvbW1l
bnQpOgorICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ3Bvc3QgY29tbWVudCB0byBidWcg
JyArIGlkICsgJyA6ICcgKyBjb21tZW50KQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAg
IGNsYXNzIE1vY2tHaXQob2JqZWN0KToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRl
ZiBjbG9uZShjbHMsIHVybCwgZGlyZWN0b3J5LCBleGVjdXRpdmU9Tm9uZSk6CisgICAgICAgICAg
ICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXBvc2l0b3J5X2Rp
cmVjdG9yeSwgcGF0Y2hfZGlyZWN0b3JpZXMsIGV4ZWN1dGl2ZSwgZmlsZXN5c3RlbSk6CisgICAg
ICAgICAgICBzZWxmLmNhbGxzID0gW3JlcG9zaXRvcnlfZGlyZWN0b3J5XQorCisgICAgICAgIGRl
ZiBmZXRjaChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdmZXRjaCcpCisK
KyAgICAgICAgZGVmIGNoZWNrb3V0KHNlbGYsIGJyYW5jaCk6CisgICAgICAgICAgICBzZWxmLmNh
bGxzLmFwcGVuZCgnY2hlY2tvdXQgJyArIGJyYW5jaCkKKworICAgICAgICBkZWYgcmVzZXRfaGFy
ZChzZWxmLCBjb21taXQpOgorICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ3Jlc2V0IGhh
cmQgJyArIGNvbW1pdCkKKworICAgICAgICBkZWYgcHVzaChzZWxmLCBvcHRpb25zKToKKyAgICAg
ICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdwdXNoICcgKyAnICcuam9pbihvcHRpb25zKSkKKwor
ICAgICAgICBkZWYgZm9ybWF0X3BhdGNoKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICAgICAgc2Vs
Zi5jYWxscy5hcHBlbmQoJ2Zvcm1hdCBwYXRjaCAnICsgJyAnLmpvaW4ob3B0aW9ucykpCisgICAg
ICAgICAgICByZXR1cm4gJ2Zvcm1hdHRlZCBwYXRjaCB3aXRoIGNoYW5nZXMgZG9uZSB0byBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Rlc3QxLmh0bWwnCisKKyAg
ICAgICAgZGVmIGRlbGV0ZV9icmFuY2goc2VsZiwgYnJhbmNoX25hbWUpOgorICAgICAgICAgICAg
c2VsZi5jYWxscy5hcHBlbmQoJ2RlbGV0ZSBicmFuY2ggJyArIGJyYW5jaF9uYW1lKQorCisgICAg
ICAgIGRlZiBjaGVja291dF9uZXdfYnJhbmNoKHNlbGYsIGJyYW5jaF9uYW1lKToKKyAgICAgICAg
ICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdjaGVja291dCBuZXcgYnJhbmNoICcgKyBicmFuY2hfbmFt
ZSkKKworICAgICAgICBkZWYgYXBwbHlfbWFpbF9wYXRjaChzZWxmLCBvcHRpb25zKToKKyAgICAg
ICAgICAgICMgZmlsdGVyaW5nIG9wdGlvbnNbMF0gYXMgaXQgY2hhbmdlcyBmb3IgZXZlcnkgcnVu
CisgICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnYXBwbHlfbWFpbF9wYXRjaCBwYXRjaC50
ZW1wICcgKyAnICcuam9pbihvcHRpb25zWzE6XSkpCisKKyAgICAgICAgZGVmIGNvbW1pdChzZWxm
LCBvcHRpb25zKToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdjb21taXQgJyArICcg
Jy5qb2luKG9wdGlvbnMpKQorCisgICAgICAgIGRlZiByZW1vdGUoc2VsZiwgb3B0aW9ucyk6Cisg
ICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgncmVtb3RlICcgKyAnICcuam9pbihvcHRpb25z
KSkKKyAgICAgICAgICAgIHJldHVybiAibXlfcmVtb3RlX3VybCIKKworICAgICAgICBkZWYgbG9j
YWxfY29uZmlnKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuICd2YWx1ZScKKworICAg
ICAgICBkZWYgYnJhbmNoX3JlZl9leGlzdHMoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgICAgICBkZWYgY3JlYXRlX3BhdGNoKHNlbGYsIGNvbW1pdCwgYXJndW1l
bnRzKToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdjcmVhdGVfcGF0Y2ggJyArIGNv
bW1pdCArICcgJyArIHN0cihhcmd1bWVudHMpKQorICAgICAgICAgICAgcmV0dXJuICdteSBwYXRj
aCBjb250YWluaW5nIHNvbWUgZGlmZnMnCisKKyAgICBjbGFzcyBNeU1vY2tIb3N0KE1vY2tIb3N0
KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgTW9ja0hvc3QuX19p
bml0X18oc2VsZikKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZTIo
ZXhjZXB0aW9uPU9TRXJyb3IoKSkKKyAgICAgICAgICAgIHNlbGYuZmlsZXN5c3RlbSA9IE1vY2tG
aWxlU3lzdGVtKCkKKyAgICAgICAgICAgIHNlbGYuX21vY2tTQ00gPSBUZXN0RXhwb3J0ZXJUZXN0
Lk1vY2tHaXQoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkKKworICAgICAgICBkZWYgc2NtKHNlbGYp
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21vY2tTQ00KKworICAgIGRlZiB0ZXN0X2V4cG9y
dChzZWxmKToKKyAgICAgICAgaG9zdCA9IFRlc3RFeHBvcnRlclRlc3QuTXlNb2NrSG9zdCgpCisg
ICAgICAgIG9wdGlvbnMgPSBwYXJzZV9hcmdzKFsndGVzdF9leHBvcnRlci5weScsICctZycsICdI
RUFEJywgJy1iJywgJzEyMzQnLCAnLWMnLCAnLW4nLCAnVVNFUicsICctdCcsICdUT0tFTiddKQor
ICAgICAgICBleHBvcnRlciA9IFRlc3RFeHBvcnRlcihob3N0LCBvcHRpb25zLCBUZXN0RXhwb3J0
ZXJUZXN0Lk1vY2tHaXQsIFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLCBNb2NrV1BUR2l0
SHViKQorICAgICAgICBleHBvcnRlci5kb19leHBvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhleHBvcnRlci5fZ2l0aHViLmNhbGxzLCBbJ2NyZWF0ZV9wciddKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhleHBvcnRlci5fZ2l0LmNhbGxzLCBbCisgICAgICAgICAgICAnL21vY2st
Y2hlY2tvdXQvV2ViS2l0QnVpbGQvdzNjLXRlc3RzL3dlYi1wbGF0Zm9ybS10ZXN0cycsCisgICAg
ICAgICAgICAnZmV0Y2gnLAorICAgICAgICAgICAgJ2NoZWNrb3V0IG1hc3RlcicsCisgICAgICAg
ICAgICAncmVzZXQgaGFyZCBvcmlnaW4vbWFzdGVyJywKKyAgICAgICAgICAgICdjaGVja291dCBu
ZXcgYnJhbmNoIHdwdC1leHBvcnQtZm9yLXdlYmtpdC0xMjM0JywKKyAgICAgICAgICAgICdhcHBs
eV9tYWlsX3BhdGNoIHBhdGNoLnRlbXAgLS1leGNsdWRlICotZXhwZWN0ZWQudHh0JywKKyAgICAg
ICAgICAgICdjb21taXQgLWEgLW0gV2ViS2l0IGV4cG9ydCBvZiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNCcsCisgICAgICAgICAgICAncmVtb3RlICcsCisgICAg
ICAgICAgICAncmVtb3RlIGFkZCBVU0VSIGh0dHBzOi8vVVNFUkBnaXRodWIuY29tL1VTRVIvd2Vi
LXBsYXRmb3JtLXRlc3RzLmdpdCcsCisgICAgICAgICAgICAncmVtb3RlIGdldC11cmwgVVNFUics
CisgICAgICAgICAgICAncHVzaCBVU0VSIHdwdC1leHBvcnQtZm9yLXdlYmtpdC0xMjM0OndwdC1l
eHBvcnQtZm9yLXdlYmtpdC0xMjM0IC1mJywKKyAgICAgICAgICAgICdjaGVja291dCBtYXN0ZXIn
LAorICAgICAgICAgICAgJ2RlbGV0ZSBicmFuY2ggd3B0LWV4cG9ydC1mb3Itd2Via2l0LTEyMzQn
LAorICAgICAgICAgICAgJ2NoZWNrb3V0IG1hc3RlcicsCisgICAgICAgICAgICAncmVzZXQgaGFy
ZCBvcmlnaW4vbWFzdGVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cG9ydGVyLl9i
dWd6aWxsYS5jYWxscywgWworICAgICAgICAgICAgJ2ZldGNoIGJ1ZyAxMjM0JywKKyAgICAgICAg
ICAgICdwb3N0IGNvbW1lbnQgdG8gYnVnIDEyMzQgOiBTdWJtaXR0ZWQgd2ViLXBsYXRmb3JtLXRl
c3RzIHB1bGwgcmVxdWVzdDogaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcHVsbC81Njc4J10pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy93
cHRfZ2l0aHViLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dpdGh1Yi5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44YTYyYzQ5ZWNmYjBiZmQzMTFhMTM4YjQ2NmIzODcxY2MzMjA2YjA0Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dpdGh1Yi5weQpA
QCAtMCwwICsxLDQyNyBAQAorIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIworIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBiYXNlNjQKK2lt
cG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgdXJsbGliMgorZnJv
bSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5t
ZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKK2Zyb20gd2Via2l0cHkudzNjLmNvbW1vbiBpbXBvcnQg
V1BUX0dIX09SRywgV1BUX0dIX1JFUE9fTkFNRSwgRVhQT1JUX1BSX0xBQkVMCisKK19sb2cgPSBs
b2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKK0FQSV9CQVNFID0gJ2h0dHBzOi8vYXBpLmdpdGh1
Yi5jb20nCitNQVhfUEVSX1BBR0UgPSAxMDAKKworCitjbGFzcyBXUFRHaXRIdWIob2JqZWN0KToK
KyAgICAiIiJBbiBpbnRlcmZhY2UgdG8gR2l0SHViIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSB3
ZWItcGxhdGZvcm0tdGVzdHMgcmVwby4KKworICAgIFRoaXMgY2xhc3MgY29udGFpbnMgbWV0aG9k
cyBmb3Igc2VuZGluZyByZXF1ZXN0cyB0byB0aGUgR2l0SHViIEFQSS4KKyAgICBVbmxlc3MgbWVu
dGlvbmVkIG90aGVyd2lzZSwgQVBJIGNhbGxzIGFyZSBleHBlY3RlZCB0byBzdWNjZWVkLCBhbmQK
KyAgICBHaXRIdWJFcnJvciB3aWxsIGJlIHJhaXNlZCBpZiBhbiBBUEkgY2FsbCBmYWlscy4KKyAg
ICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCB1c2VyPU5vbmUsIHRva2VuPU5v
bmUsIHByX2hpc3Rvcnlfd2luZG93PTUwMDApOgorICAgICAgICBzZWxmLmhvc3QgPSBob3N0Cisg
ICAgICAgIHNlbGYudXNlciA9IHVzZXIKKyAgICAgICAgc2VsZi50b2tlbiA9IHRva2VuCisKKyAg
ICAgICAgc2VsZi5fcHJfaGlzdG9yeV93aW5kb3cgPSBwcl9oaXN0b3J5X3dpbmRvdworCisgICAg
ZGVmIGhhc19jcmVkZW50aWFscyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudXNlciBhbmQg
c2VsZi50b2tlbgorCisgICAgZGVmIGF1dGhfdG9rZW4oc2VsZik6CisgICAgICAgIGFzc2VydCBz
ZWxmLmhhc19jcmVkZW50aWFscygpCisgICAgICAgIHJldHVybiBiYXNlNjQuYjY0ZW5jb2RlKCd7
fTp7fScuZm9ybWF0KHNlbGYudXNlciwgc2VsZi50b2tlbikpCisKKyAgICBkZWYgcmVxdWVzdChz
ZWxmLCBwYXRoLCBtZXRob2QsIGJvZHk9Tm9uZSk6CisgICAgICAgICIiIlNlbmRzIGEgcmVxdWVz
dCB0byBHaXRIdWIgQVBJIGFuZCBkZXNlcmlhbGl6ZXMgdGhlIHJlc3BvbnNlLgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgICBwYXRoOiBBUEkgZW5kcG9pbnQgd2l0aG91dCBiYXNlIFVSTCAo
c3RhcnRpbmcgd2l0aCAnLycpLgorICAgICAgICAgICAgbWV0aG9kOiBIVFRQIG1ldGhvZCB0byBi
ZSB1c2VkIGZvciB0aGlzIHJlcXVlc3QuCisgICAgICAgICAgICBib2R5OiBPcHRpb25hbCBwYXls
b2FkIGluIHRoZSByZXF1ZXN0IGJvZHkgKGRlZmF1bHQ9Tm9uZSkuCisKKyAgICAgICAgUmV0dXJu
czoKKyAgICAgICAgICAgIEEgSlNPTlJlc3BvbnNlIGluc3RhbmNlLgorICAgICAgICAiIiIKKyAg
ICAgICAgYXNzZXJ0IHBhdGguc3RhcnRzd2l0aCgnLycpCisKKyAgICAgICAgaWYgYm9keToKKyAg
ICAgICAgICAgIGJvZHkgPSBqc29uLmR1bXBzKGJvZHkpCisKKyAgICAgICAgaGVhZGVycyA9IHsn
QWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbid9CisKKyAgICAgICAgaWYg
c2VsZi5oYXNfY3JlZGVudGlhbHMoKToKKyAgICAgICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRp
b24nXSA9ICdCYXNpYyB7fScuZm9ybWF0KHNlbGYuYXV0aF90b2tlbigpKQorCisgICAgICAgIHJl
c3BvbnNlID0gc2VsZi5ob3N0LndlYi5yZXF1ZXN0KAorICAgICAgICAgICAgbWV0aG9kPW1ldGhv
ZCwKKyAgICAgICAgICAgIHVybD1BUElfQkFTRSArIHBhdGgsCisgICAgICAgICAgICBkYXRhPWJv
ZHksCisgICAgICAgICAgICBoZWFkZXJzPWhlYWRlcnMKKyAgICAgICAgKQorICAgICAgICByZXR1
cm4gSlNPTlJlc3BvbnNlKHJlc3BvbnNlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBl
eHRyYWN0X2xpbmtfbmV4dChsaW5rX2hlYWRlcik6CisgICAgICAgICIiIkV4dHJhY3RzIHRoZSBV
UkkgdG8gdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzIGZyb20gYSByZXNwb25zZS4KKworICAgICAg
ICBBcyBwZXIgR2l0SHViIEFQSSBzcGVjcywgdGhlIGxpbmsgdG8gdGhlIG5leHQgcGFnZSBvZiBy
ZXN1bHRzIGlzCisgICAgICAgIGV4dHJhY3RlZCBmcm9tIHRoZSBMaW5rIGhlYWRlciAtLSB0aGUg
bGluayB3aXRoIHJlbGF0aW9uIHR5cGUgIm5leHQiLgorICAgICAgICBEb2NzOiBodHRwczovL2Rl
dmVsb3Blci5naXRodWIuY29tL3YzLyNwYWdpbmF0aW9uIChhbmQgUkZDIDU5ODgpCisKKyAgICAg
ICAgQXJnczoKKyAgICAgICAgICAgIGxpbmtfaGVhZGVyOiBUaGUgdmFsdWUgb2YgdGhlIExpbmsg
aGVhZGVyIGluIHJlc3BvbnNlcyBmcm9tIEdpdEh1Yi4KKworICAgICAgICBSZXR1cm5zOgorICAg
ICAgICAgICAgUGF0aCB0byB0aGUgbmV4dCBwYWdlICh3aXRob3V0IGJhc2UgVVJMKSwgb3IgTm9u
ZSBpZiBub3QgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICAjIFRPRE8ocm9iZXJ0bWEpOiBJ
bnZlc3RpZ2F0ZSAibWF5IHJlcXVpcmUgZXhwYW5zaW9uIGFzIFVSSSB0ZW1wbGF0ZXMiIG1lbnRp
b25lZCBpbiBkb2NzLgorICAgICAgICAjIEV4YW1wbGUgTGluayBoZWFkZXI6CisgICAgICAgICMg
PGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVzb3VyY2VzP3BhZ2U9Mz47IHJlbD0ibmV4dCIsIDxo
dHRwczovL2FwaS5naXRodWIuY29tL3Jlc291cmNlcz9wYWdlPTUwPjsgcmVsPSJsYXN0IgorICAg
ICAgICBpZiBsaW5rX2hlYWRlciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgbGlua19yZSA9IHJlLmNvbXBpbGUocic8KC4rPyk+OyAqcmVsPSIoLis/KSInKQorICAg
ICAgICBtYXRjaCA9IGxpbmtfcmUuc2VhcmNoKGxpbmtfaGVhZGVyKQorICAgICAgICB3aGlsZSBt
YXRjaDoKKyAgICAgICAgICAgIGxpbmssIHJlbCA9IG1hdGNoLmdyb3VwcygpCisgICAgICAgICAg
ICBpZiByZWwubG93ZXIoKSA9PSAnbmV4dCc6CisgICAgICAgICAgICAgICAgIyBTdHJpcCBBUElf
QkFTRSBzbyB0aGF0IHRoZSByZXR1cm4gdmFsdWUgaXMgdXNlZnVsIGZvciByZXF1ZXN0KCkuCisg
ICAgICAgICAgICAgICAgYXNzZXJ0IGxpbmsuc3RhcnRzd2l0aChBUElfQkFTRSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbGlua1tsZW4oQVBJX0JBU0UpOl0KKyAgICAgICAgICAgIG1hdGNoID0g
bGlua19yZS5zZWFyY2gobGlua19oZWFkZXIsIG1hdGNoLmVuZCgpKQorICAgICAgICByZXR1cm4g
Tm9uZQorCisgICAgZGVmIGNyZWF0ZV9wcihzZWxmLCByZW1vdGVfYnJhbmNoX25hbWUsIGRlc2Nf
dGl0bGUsIGJvZHkpOgorICAgICAgICAiIiJDcmVhdGVzIGEgUFIgb24gR2l0SHViLgorCisgICAg
ICAgIEFQSSBkb2M6IGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvcHVsbHMvI2NyZWF0
ZS1hLXB1bGwtcmVxdWVzdAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUaGUgaXNz
dWUgbnVtYmVyIG9mIHRoZSBjcmVhdGVkIFBSLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0
IHJlbW90ZV9icmFuY2hfbmFtZQorICAgICAgICBhc3NlcnQgZGVzY190aXRsZQorICAgICAgICBh
c3NlcnQgYm9keQorCisgICAgICAgIHBhdGggPSAnL3JlcG9zLyVzLyVzL3B1bGxzJyAlIChXUFRf
R0hfT1JHLCBXUFRfR0hfUkVQT19OQU1FKQorICAgICAgICBib2R5ID0geworICAgICAgICAgICAg
J3RpdGxlJzogZGVzY190aXRsZSwKKyAgICAgICAgICAgICdib2R5JzogYm9keSwKKyAgICAgICAg
ICAgICdoZWFkJzogcmVtb3RlX2JyYW5jaF9uYW1lLAorICAgICAgICAgICAgJ2Jhc2UnOiAnbWFz
dGVyJywKKyAgICAgICAgfQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChwYXRoLCBt
ZXRob2Q9J1BPU1QnLCBib2R5PWJvZHkpCisKKyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2Nv
ZGUgIT0gMjAxOgorICAgICAgICAgICAgcmFpc2UgR2l0SHViRXJyb3IoMjAxLCByZXNwb25zZS5z
dGF0dXNfY29kZSwgJ2NyZWF0ZSBQUicpCisKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGFb
J251bWJlciddCisKKyAgICBkZWYgdXBkYXRlX3ByKHNlbGYsIHByX251bWJlciwgZGVzY190aXRs
ZSwgYm9keSk6CisgICAgICAgICIiIlVwZGF0ZXMgYSBQUiBvbiBHaXRIdWIuCisKKyAgICAgICAg
QVBJIGRvYzogaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9wdWxscy8jdXBkYXRlLWEt
cHVsbC1yZXF1ZXN0CisgICAgICAgICIiIgorICAgICAgICBwYXRoID0gJy9yZXBvcy97fS97fS9w
dWxscy97fScuZm9ybWF0KAorICAgICAgICAgICAgV1BUX0dIX09SRywKKyAgICAgICAgICAgIFdQ
VF9HSF9SRVBPX05BTUUsCisgICAgICAgICAgICBwcl9udW1iZXIKKyAgICAgICAgKQorICAgICAg
ICBib2R5ID0geworICAgICAgICAgICAgJ3RpdGxlJzogZGVzY190aXRsZSwKKyAgICAgICAgICAg
ICdib2R5JzogYm9keSwKKyAgICAgICAgfQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVz
dChwYXRoLCBtZXRob2Q9J1BBVENIJywgYm9keT1ib2R5KQorCisgICAgICAgIGlmIHJlc3BvbnNl
LnN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9yKDIwMCwg
cmVzcG9uc2Uuc3RhdHVzX2NvZGUsICd1cGRhdGUgUFIgJWQnICUgcHJfbnVtYmVyKQorCisgICAg
ZGVmIGFkZF9sYWJlbChzZWxmLCBudW1iZXIsIGxhYmVsKToKKyAgICAgICAgIiIiQWRkcyBhIGxh
YmVsIHRvIGEgR2l0SHViIGlzc3VlIChvciBQUikuCisKKyAgICAgICAgQVBJIGRvYzogaHR0cHM6
Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9pc3N1ZXMvbGFiZWxzLyNhZGQtbGFiZWxzLXRvLWFu
LWlzc3VlCisgICAgICAgICIiIgorICAgICAgICBwYXRoID0gJy9yZXBvcy8lcy8lcy9pc3N1ZXMv
JWQvbGFiZWxzJyAlICgKKyAgICAgICAgICAgIFdQVF9HSF9PUkcsCisgICAgICAgICAgICBXUFRf
R0hfUkVQT19OQU1FLAorICAgICAgICAgICAgbnVtYmVyCisgICAgICAgICkKKyAgICAgICAgYm9k
eSA9IFtsYWJlbF0KKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9k
PSdQT1NUJywgYm9keT1ib2R5KQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9
IDIwMDoKKyAgICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9yKDIwMCwgcmVzcG9uc2Uuc3RhdHVz
X2NvZGUsICdhZGQgbGFiZWwgJXMgdG8gaXNzdWUgJWQnICUgKGxhYmVsLCBudW1iZXIpKQorCisg
ICAgZGVmIHJlbW92ZV9sYWJlbChzZWxmLCBudW1iZXIsIGxhYmVsKToKKyAgICAgICAgIiIiUmVt
b3ZlcyBhIGxhYmVsIGZyb20gYSBHaXRIdWIgaXNzdWUgKG9yIFBSKS4KKworICAgICAgICBBUEkg
ZG9jOiBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL2lzc3Vlcy9sYWJlbHMvI3JlbW92
ZS1hLWxhYmVsLWZyb20tYW4taXNzdWUKKyAgICAgICAgIiIiCisgICAgICAgIHBhdGggPSAnL3Jl
cG9zLyVzLyVzL2lzc3Vlcy8lZC9sYWJlbHMvJXMnICUgKAorICAgICAgICAgICAgV1BUX0dIX09S
RywKKyAgICAgICAgICAgIFdQVF9HSF9SRVBPX05BTUUsCisgICAgICAgICAgICBudW1iZXIsCisg
ICAgICAgICAgICB1cmxsaWIyLnF1b3RlKGxhYmVsKSwKKyAgICAgICAgKQorICAgICAgICByZXNw
b25zZSA9IHNlbGYucmVxdWVzdChwYXRoLCBtZXRob2Q9J0RFTEVURScpCisKKyAgICAgICAgIyBU
aGUgR2l0SHViIEFQSSBkb2N1bWVudGF0aW9uIGNsYWltcyB0aGF0IHRoaXMgZW5kcG9pbnQgcmV0
dXJucyBhIDIwNAorICAgICAgICAjIG9uIHN1Y2Nlc3MuIEhvd2V2ZXIgaW4gcmVhbGl0eSBpdCBy
ZXR1cm5zIGEgMjAwLgorICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSBub3QgaW4gKDIw
MCwgMjA0KToKKyAgICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9yKCgyMDAsIDIwNCksIHJlc3Bv
bnNlLnN0YXR1c19jb2RlLCAncmVtb3ZlIGxhYmVsICVzIGZyb20gaXNzdWUgJWQnICUgKGxhYmVs
LCBudW1iZXIpKQorCisgICAgZGVmIG1ha2VfcHJfZnJvbV9pdGVtKHNlbGYsIGl0ZW0pOgorICAg
ICAgICBsYWJlbHMgPSBbbGFiZWxbJ25hbWUnXSBmb3IgbGFiZWwgaW4gaXRlbVsnbGFiZWxzJ11d
CisgICAgICAgIHJldHVybiBQdWxsUmVxdWVzdCgKKyAgICAgICAgICAgIHRpdGxlPWl0ZW1bJ3Rp
dGxlJ10sCisgICAgICAgICAgICBudW1iZXI9aXRlbVsnbnVtYmVyJ10sCisgICAgICAgICAgICBi
b2R5PWl0ZW1bJ2JvZHknXSwKKyAgICAgICAgICAgIHN0YXRlPWl0ZW1bJ3N0YXRlJ10sCisgICAg
ICAgICAgICBsYWJlbHM9bGFiZWxzKQorCisgICAgQG1lbW9pemVkCisgICAgZGVmIGFsbF9wdWxs
X3JlcXVlc3RzKHNlbGYpOgorICAgICAgICAiIiJGZXRjaGVzIGFsbCAob3BlbiBhbmQgY2xvc2Vk
KSBQUnMgd2l0aCB0aGUgZXhwb3J0IGxhYmVsLgorCisgICAgICAgIFRoZSBtYXhpbXVtIG51bWJl
ciBvZiBQUnMgaXMgcHJfaGlzdG9yeV93aW5kb3cuIFNlYXJjaCBlbmRwb2ludCBpcyB1c2VkCisg
ICAgICAgIGluc3RlYWQgb2YgbGlzdGluZyBQUnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBmaWx0ZXIg
YnkgbGFiZWxzLgorICAgICAgICBBUEkgZG9jOiBodHRwczovL2RldmVsb3Blci5naXRodWIuY29t
L3YzL3NlYXJjaC8jc2VhcmNoLWlzc3VlcworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAg
ICBBIGxpc3Qgb2YgUHVsbFJlcXVlc3QgbmFtZWR0dXBsZXMuCisgICAgICAgICIiIgorICAgICAg
ICBwYXRoID0gKAorICAgICAgICAgICAgJy9zZWFyY2gvaXNzdWVzJworICAgICAgICAgICAgJz9x
PXJlcG86e30ve30lMjB0eXBlOnByJTIwbGFiZWw6e30nCisgICAgICAgICAgICAnJnBhZ2U9MScK
KyAgICAgICAgICAgICcmcGVyX3BhZ2U9e30nCisgICAgICAgICkuZm9ybWF0KAorICAgICAgICAg
ICAgV1BUX0dIX09SRywKKyAgICAgICAgICAgIFdQVF9HSF9SRVBPX05BTUUsCisgICAgICAgICAg
ICBFWFBPUlRfUFJfTEFCRUwsCisgICAgICAgICAgICBtaW4oTUFYX1BFUl9QQUdFLCBzZWxmLl9w
cl9oaXN0b3J5X3dpbmRvdykKKyAgICAgICAgKQorICAgICAgICBhbGxfcHJzID0gW10KKyAgICAg
ICAgd2hpbGUgcGF0aCBpcyBub3QgTm9uZSBhbmQgbGVuKGFsbF9wcnMpIDwgc2VsZi5fcHJfaGlz
dG9yeV93aW5kb3c6CisgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChwYXRoLCBt
ZXRob2Q9J0dFVCcpCisgICAgICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDA6
CisgICAgICAgICAgICAgICAgaWYgcmVzcG9uc2UuZGF0YVsnaW5jb21wbGV0ZV9yZXN1bHRzJ106
CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9yKCdjb21wbGV0ZSByZXN1bHRz
JywgJ2luY29tcGxldGUgcmVzdWx0cycsICdmZXRjaCBhbGwgcHVsbCByZXF1ZXN0cycsIHBhdGgp
CisKKyAgICAgICAgICAgICAgICBwcnMgPSBbc2VsZi5tYWtlX3ByX2Zyb21faXRlbShpdGVtKSBm
b3IgaXRlbSBpbiByZXNwb25zZS5kYXRhWydpdGVtcyddXQorICAgICAgICAgICAgICAgIGFsbF9w
cnMgKz0gcHJzWzpzZWxmLl9wcl9oaXN0b3J5X3dpbmRvdyAtIGxlbihhbGxfcHJzKV0KKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgR2l0SHViRXJyb3IoMjAwLCByZXNw
b25zZS5zdGF0dXNfY29kZSwgJ2ZldGNoIGFsbCBwdWxsIHJlcXVlc3RzJywgcGF0aCkKKyAgICAg
ICAgICAgIHBhdGggPSBzZWxmLmV4dHJhY3RfbGlua19uZXh0KHJlc3BvbnNlLmdldGhlYWRlcign
TGluaycpKQorICAgICAgICByZXR1cm4gYWxsX3BycworCisgICAgZGVmIGdldF9wcl9icmFuY2go
c2VsZiwgcHJfbnVtYmVyKToKKyAgICAgICAgIiIiR2V0cyB0aGUgcmVtb3RlIGJyYW5jaCBuYW1l
IG9mIGEgUFIuCisKKyAgICAgICAgQVBJIGRvYzogaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNv
bS92My9wdWxscy8jZ2V0LWEtc2luZ2xlLXB1bGwtcmVxdWVzdAorCisgICAgICAgIFJldHVybnM6
CisgICAgICAgICAgICBUaGUgcmVtb3RlIGJyYW5jaCBuYW1lLgorICAgICAgICAiIiIKKyAgICAg
ICAgcGF0aCA9ICcvcmVwb3Mve30ve30vcHVsbHMve30nLmZvcm1hdCgKKyAgICAgICAgICAgIFdQ
VF9HSF9PUkcsCisgICAgICAgICAgICBXUFRfR0hfUkVQT19OQU1FLAorICAgICAgICAgICAgcHJf
bnVtYmVyCisgICAgICAgICkKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QocGF0aCwg
bWV0aG9kPSdHRVQnKQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoK
KyAgICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9yKDIwMCwgcmVzcG9uc2Uuc3RhdHVzX2NvZGUs
ICdnZXQgdGhlIGJyYW5jaCBvZiBQUiAlZCcgJSBwcl9udW1iZXIpCisKKyAgICAgICAgcmV0dXJu
IHJlc3BvbnNlLmRhdGFbJ2hlYWQnXVsncmVmJ10KKworICAgIGRlZiBpc19wcl9tZXJnZWQoc2Vs
ZiwgcHJfbnVtYmVyKToKKyAgICAgICAgIiIiQ2hlY2tzIGlmIGEgUFIgaGFzIGJlZW4gbWVyZ2Vk
LgorCisgICAgICAgIEFQSSBkb2M6IGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvcHVs
bHMvI2dldC1pZi1hLXB1bGwtcmVxdWVzdC1oYXMtYmVlbi1tZXJnZWQKKworICAgICAgICBSZXR1
cm5zOgorICAgICAgICAgICAgVHJ1ZSBpZiBtZXJnZWQsIEZhbHNlIGlmIG5vdC4KKyAgICAgICAg
IiIiCisgICAgICAgIHBhdGggPSAnL3JlcG9zLyVzLyVzL3B1bGxzLyVkL21lcmdlJyAlICgKKyAg
ICAgICAgICAgIFdQVF9HSF9PUkcsCisgICAgICAgICAgICBXUFRfR0hfUkVQT19OQU1FLAorICAg
ICAgICAgICAgcHJfbnVtYmVyCisgICAgICAgICkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
cmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdHRVQnKQorICAgICAgICAgICAg
aWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjA0OgorICAgICAgICAgICAgICAgIHJldHVybiBU
cnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9y
KDIwNCwgcmVzcG9uc2Uuc3RhdHVzX2NvZGUsICdjaGVjayBpZiBQUiAlZCBpcyBtZXJnZWQnICUg
cHJfbnVtYmVyKQorICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IgYXMgZToKKyAgICAg
ICAgICAgIGlmIGUuY29kZSA9PSA0MDQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgbWVyZ2Vf
cHIoc2VsZiwgcHJfbnVtYmVyKToKKyAgICAgICAgIiIiTWVyZ2VzIGEgUFIuCisKKyAgICAgICAg
SWYgbWVyZ2UgY2Fubm90IGJlIHBlcmZvcm1lZCwgTWVyZ2VFcnJvciBpcyByYWlzZWQuIEdpdEh1
YkVycm9yIGlzCisgICAgICAgIHJhaXNlZCB3aGVuIG90aGVyIHVua25vd24gZXJyb3JzIGhhcHBl
bi4KKworICAgICAgICBBUEkgZG9jOiBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL3B1
bGxzLyNtZXJnZS1hLXB1bGwtcmVxdWVzdC1tZXJnZS1idXR0b24KKyAgICAgICAgIiIiCisgICAg
ICAgIHBhdGggPSAnL3JlcG9zLyVzLyVzL3B1bGxzLyVkL21lcmdlJyAlICgKKyAgICAgICAgICAg
IFdQVF9HSF9PUkcsCisgICAgICAgICAgICBXUFRfR0hfUkVQT19OQU1FLAorICAgICAgICAgICAg
cHJfbnVtYmVyCisgICAgICAgICkKKyAgICAgICAgYm9keSA9IHsKKyAgICAgICAgICAgICdtZXJn
ZV9tZXRob2QnOiAncmViYXNlJywKKyAgICAgICAgfQorCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHBhdGgsIG1ldGhvZD0nUFVUJywgYm9keT1ib2R5
KQorICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlm
IGUuY29kZSA9PSA0MDU6CisgICAgICAgICAgICAgICAgcmFpc2UgTWVyZ2VFcnJvcihwcl9udW1i
ZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAg
aWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgcmFpc2UgR2l0SHVi
RXJyb3IoMjAwLCByZXNwb25zZS5zdGF0dXNfY29kZSwgJ21lcmdlIFBSICVkJyAlIHByX251bWJl
cikKKworICAgIGRlZiBkZWxldGVfcmVtb3RlX2JyYW5jaChzZWxmLCByZW1vdGVfYnJhbmNoX25h
bWUpOgorICAgICAgICAiIiJEZWxldGVzIGEgcmVtb3RlIGJyYW5jaC4KKworICAgICAgICBBUEkg
ZG9jOiBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL2dpdC9yZWZzLyNkZWxldGUtYS1y
ZWZlcmVuY2UKKyAgICAgICAgIiIiCisgICAgICAgIHBhdGggPSAnL3JlcG9zLyVzLyVzL2dpdC9y
ZWZzL2hlYWRzLyVzJyAlICgKKyAgICAgICAgICAgIFdQVF9HSF9PUkcsCisgICAgICAgICAgICBX
UFRfR0hfUkVQT19OQU1FLAorICAgICAgICAgICAgcmVtb3RlX2JyYW5jaF9uYW1lCisgICAgICAg
ICkKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdERUxFVEUn
KQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwNDoKKyAgICAgICAgICAg
IHJhaXNlIEdpdEh1YkVycm9yKDIwNCwgcmVzcG9uc2Uuc3RhdHVzX2NvZGUsICdkZWxldGUgcmVt
b3RlIGJyYW5jaCAlcycgJSByZW1vdGVfYnJhbmNoX25hbWUpCisKKyAgICBkZWYgcHJfZm9yX2No
cm9taXVtX2NvbW1pdChzZWxmLCBjaHJvbWl1bV9jb21taXQpOgorICAgICAgICAiIiJSZXR1cm5z
IGEgUFIgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gQ2hyb21pdW1Db21taXQsIG9yIE5vbmUu
IiIiCisgICAgICAgIHB1bGxfcmVxdWVzdCA9IHNlbGYucHJfd2l0aF9jaGFuZ2VfaWQoY2hyb21p
dW1fY29tbWl0LmNoYW5nZV9pZCgpKQorICAgICAgICBpZiBwdWxsX3JlcXVlc3Q6CisgICAgICAg
ICAgICByZXR1cm4gcHVsbF9yZXF1ZXN0CisgICAgICAgICMgVGhlIENoYW5nZSBJRCBjYW4ndCBi
ZSB1c2VkIGZvciBjb21taXRzIG1hZGUgdmlhIFJpZXR2ZWxkLAorICAgICAgICAjIHNvIHdlIGZh
bGwgYmFjayB0byB0cnlpbmcgdG8gdXNlIGNvbW1pdCBwb3NpdGlvbiBoZXJlLgorICAgICAgICAj
IE5vdGUgdGhhdCBHZXJyaXQgcmV0dXJucyBUb1QrMSBhcyB0aGUgY29tbWl0IHBvc2l0aW9ucyBm
b3IgaW4tZmxpZ2h0CisgICAgICAgICMgQ0xzLCBidXQgdGhleSBhcmUgc2NydWJiZWQgZnJvbSB0
aGUgUFIgZGVzY3JpcHRpb24gYW5kIGhlbmNlIHdvdWxkCisgICAgICAgICMgbm90IGJlIG1pc21h
dGNoZWQgdG8gcmFuZG9tIENocm9taXVtIGNvbW1pdHMgaW4gdGhlIGZhbGxiYWNrLgorICAgICAg
ICAjIFRPRE8ocm9iZXJ0bWEpOiBSZW1vdmUgdGhpcyBmYWxsYmFjayBhZnRlciBSaWV0dmVsZCBi
ZWNvbWVzIHJlYWQtb25seS4KKyAgICAgICAgcmV0dXJuIHNlbGYucHJfd2l0aF9wb3NpdGlvbihj
aHJvbWl1bV9jb21taXQucG9zaXRpb24pCisKKyAgICBkZWYgcHJfd2l0aF9jaGFuZ2VfaWQoc2Vs
ZiwgdGFyZ2V0X2NoYW5nZV9pZCk6CisgICAgICAgIGZvciBwdWxsX3JlcXVlc3QgaW4gc2VsZi5h
bGxfcHVsbF9yZXF1ZXN0cygpOgorICAgICAgICAgICAgIyBOb3RlOiBTZWFyY2ggYWxsICdDaGFu
Z2UtSWQncyBzbyB0aGF0IHdlIGNhbiBtYW51YWxseSBwdXQgbXVsdGlwbGUKKyAgICAgICAgICAg
ICMgQ0xzIGluIG9uZSBQUi4gKFRoZSBleHBvcnRlciBhbHdheXMgY3JlYXRlcyBvbmUgUFIgZm9y
IGVhY2ggQ0wuKQorICAgICAgICAgICAgY2hhbmdlX2lkcyA9IHNlbGYuZXh0cmFjdF9tZXRhZGF0
YSgnQ2hhbmdlLUlkOiAnLCBwdWxsX3JlcXVlc3QuYm9keSwgYWxsX21hdGNoZXM9VHJ1ZSkKKyAg
ICAgICAgICAgIGlmIHRhcmdldF9jaGFuZ2VfaWQgaW4gY2hhbmdlX2lkczoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcHVsbF9yZXF1ZXN0CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYg
cHJfd2l0aF9wb3NpdGlvbihzZWxmLCBwb3NpdGlvbik6CisgICAgICAgIGZvciBwdWxsX3JlcXVl
c3QgaW4gc2VsZi5hbGxfcHVsbF9yZXF1ZXN0cygpOgorICAgICAgICAgICAgIyBTYW1lIGFzIGFi
b3ZlLCBzZWFyY2ggYWxsICdDci1Db21taXQtUG9zaXRpb24ncy4KKyAgICAgICAgICAgIHByX2Nv
bW1pdF9wb3NpdGlvbnMgPSBzZWxmLmV4dHJhY3RfbWV0YWRhdGEoJ0NyLUNvbW1pdC1Qb3NpdGlv
bjogJywgcHVsbF9yZXF1ZXN0LmJvZHksIGFsbF9tYXRjaGVzPVRydWUpCisgICAgICAgICAgICBp
ZiBwb3NpdGlvbiBpbiBwcl9jb21taXRfcG9zaXRpb25zOgorICAgICAgICAgICAgICAgIHJldHVy
biBwdWxsX3JlcXVlc3QKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgZXh0cmFjdF9tZXRhZGF0YSh0YWcsIGNvbW1pdF9ib2R5LCBhbGxfbWF0Y2hlcz1G
YWxzZSk6CisgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgIGZvciBsaW5lIGluIGNvbW1pdF9i
b2R5LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgodGFn
KToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsdWUgPSBsaW5lW2xl
bih0YWcpOl0KKyAgICAgICAgICAgIGlmIGFsbF9tYXRjaGVzOgorICAgICAgICAgICAgICAgIHZh
bHVlcy5hcHBlbmQodmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZQorICAgICAgICByZXR1cm4gdmFsdWVzIGlmIGFsbF9tYXRjaGVzIGVsc2UgTm9u
ZQorCisKK2NsYXNzIEpTT05SZXNwb25zZShvYmplY3QpOgorICAgICIiIkFuIEhUVFAgcmVzcG9u
c2UgY29udGFpbmluZyBKU09OIGRhdGEuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3
X3Jlc3BvbnNlKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZXMgYSBKU09OUmVzcG9uc2UgaW5zdGFu
Y2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJhd19yZXNwb25zZTogYSByZXNwb25z
ZSBvYmplY3QgcmV0dXJuZWQgYnkgb3BlbiBtZXRob2RzIGluIHVybGxpYjIuCisgICAgICAgICIi
IgorICAgICAgICBzZWxmLl9yYXdfcmVzcG9uc2UgPSByYXdfcmVzcG9uc2UKKyAgICAgICAgc2Vs
Zi5zdGF0dXNfY29kZSA9IHJhd19yZXNwb25zZS5nZXRjb2RlKCkKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgc2VsZi5kYXRhID0ganNvbi5sb2FkKHJhd19yZXNwb25zZSkKKyAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBzZWxmLmRhdGEgPSBOb25lCisKKyAgICBkZWYg
Z2V0aGVhZGVyKHNlbGYsIGhlYWRlcik6CisgICAgICAgICIiIkdldHMgdGhlIHZhbHVlIG9mIHRo
ZSBoZWFkZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKworICAgICAgICBEZWxlZ2F0ZXMgdG8gSFRU
UE1lc3NhZ2UuZ2V0aGVhZGVyKCksIHdoaWNoIGlzIGNhc2UtaW5zZW5zaXRpdmUuIiIiCisgICAg
ICAgIHJldHVybiBzZWxmLl9yYXdfcmVzcG9uc2UuaW5mbygpLmdldGhlYWRlcihoZWFkZXIpCisK
KworY2xhc3MgR2l0SHViRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgd2hlbiBhbiBH
aXRIdWIgcmV0dXJucyBhIG5vbi1PSyByZXNwb25zZSBzdGF0dXMgZm9yIGEgcmVxdWVzdC4iIiIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3RlZCwgcmVjZWl2ZWQsIGFjdGlvbiwgZXh0
cmFfZGF0YT1Ob25lKToKKyAgICAgICAgbWVzc2FnZSA9ICdFeHBlY3RlZCB7fSwgYnV0IHJlY2Vp
dmVkIHt9IGZyb20gR2l0SHViIHdoZW4gYXR0ZW1wdGluZyB0byB7fScuZm9ybWF0KAorICAgICAg
ICAgICAgZXhwZWN0ZWQsIHJlY2VpdmVkLCBhY3Rpb24KKyAgICAgICAgKQorICAgICAgICBpZiBl
eHRyYV9kYXRhOgorICAgICAgICAgICAgbWVzc2FnZSArPSAnXG4nICsgc3RyKGV4dHJhX2RhdGEp
CisgICAgICAgIHN1cGVyKEdpdEh1YkVycm9yLCBzZWxmKS5fX2luaXRfXyhtZXNzYWdlKQorCisK
K2NsYXNzIE1lcmdlRXJyb3IoR2l0SHViRXJyb3IpOgorICAgICIiIkFuIGVycm9yIHNwZWNpZmlj
YWxseSBmb3Igd2hlbiBhIFBSIGNhbm5vdCBiZSBtZXJnZWQuCisKKyAgICBUaGlzIHNob3VsZCBv
bmx5IGJlIHRocm93biB3aGVuIEdpdEh1YiByZXR1cm5zIHN0YXR1cyBjb2RlIDQwNSwKKyAgICBp
bmRpY2F0aW5nIHRoYXQgdGhlIFBSIGNvdWxkIG5vdCBiZSBtZXJnZWQuCisgICAgIiIiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcHJfbnVtYmVyKToKKyAgICAgICAgc3VwZXIoTWVyZ2VFcnJv
ciwgc2VsZikuX19pbml0X18oMjAwLCA0MDUsICdtZXJnZSBQUiAlZCcgJSBwcl9udW1iZXIpCisK
KworUHVsbFJlcXVlc3QgPSBuYW1lZHR1cGxlKCdQdWxsUmVxdWVzdCcsIFsndGl0bGUnLCAnbnVt
YmVyJywgJ2JvZHknLCAnc3RhdGUnLCAnbGFiZWxzJ10pCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3czYy93cHRfZ2l0aHViX21vY2sucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3czYy93cHRfZ2l0aHViX21vY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWZkNmVhN2RlYTYxZjExNzJk
ZDRlZjE5ZTgzMTNkZGEzNTEwOGM0NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdzNjL3dwdF9naXRodWJfbW9jay5weQpAQCAtMCwwICsxLDEyNSBAQAorIyBDb3B5
cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisj
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkudzNjLndwdF9naXRodWIgaW1wb3J0IE1lcmdl
RXJyb3IsIFdQVEdpdEh1YgorCisKK2NsYXNzIE1vY2tXUFRHaXRIdWIob2JqZWN0KToKKworICAg
ICMgU29tZSB1bnVzZWQgYXJndW1lbnRzIG1heSBiZSBpbmNsdWRlZCB0byBtYXRjaCB0aGUgcmVh
bCBjbGFzcydzIEFQSS4KKyAgICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwdWxsX3JlcXVlc3RzLCB1bnN1Y2Nlc3NmdWxfbWVyZ2Vf
aW5kZXg9LTEsIGNyZWF0ZV9wcl9mYWlsX2luZGV4PS0xLCBtZXJnZWRfaW5kZXg9LTEpOgorICAg
ICAgICAiIiJJbml0aWFsaXplcyBhIG1vY2sgV1BUR2l0SHViLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgICBwdWxsX3JlcXVlc3RzOiBBIGxpc3Qgb2Ygd3B0X2dpdGh1Yi5QdWxsUmVxdWVz
dC4KKyAgICAgICAgICAgIHVuc3VjY2Vzc2Z1bF9tZXJnZV9pbmRleDogVGhlIGluZGV4IHRvIHRo
ZSBQUiBpbiBwdWxsX3JlcXVlc3RzIHRoYXQKKyAgICAgICAgICAgICAgICBjYW5ub3QgYmUgbWVy
Z2VkLiAoLTEgbWVhbnMgYWxsIGNhbiBiZSBtZXJnZWQuKQorICAgICAgICAgICAgY3JlYXRlX3By
X2ZhaWxfaW5kZXg6IFRoZSAwLWJhc2VkIGluZGV4IG9mIHdoaWNoIFBSIGNyZWF0aW9uIHJlcXVl
c3QKKyAgICAgICAgICAgICAgICB3aWxsIGZhaWwuICgtMSBtZWFucyBhbGwgd2lsbCBzdWNjZWVk
LikKKyAgICAgICAgICAgIG1lcmdlZF9pbmRleDogVGhlIGluZGV4IHRvIHRoZSBQUiBpbiBwdWxs
X3JlcXVlc3RzIHRoYXQgaXMgYWxyZWFkeQorICAgICAgICAgICAgICAgIG1lcmdlZC4gKC0xIG1l
YW5zIG5vbmUgaXMgbWVyZ2VkLikKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucHVsbF9yZXF1
ZXN0cyA9IHB1bGxfcmVxdWVzdHMKKyAgICAgICAgc2VsZi5jYWxscyA9IFtdCisgICAgICAgIHNl
bGYucHVsbF9yZXF1ZXN0c19jcmVhdGVkID0gW10KKyAgICAgICAgc2VsZi5wdWxsX3JlcXVlc3Rz
X21lcmdlZCA9IFtdCisgICAgICAgIHNlbGYudW5zdWNjZXNzZnVsX21lcmdlX2luZGV4ID0gdW5z
dWNjZXNzZnVsX21lcmdlX2luZGV4CisgICAgICAgIHNlbGYuY3JlYXRlX3ByX2luZGV4ID0gMAor
ICAgICAgICBzZWxmLmNyZWF0ZV9wcl9mYWlsX2luZGV4ID0gY3JlYXRlX3ByX2ZhaWxfaW5kZXgK
KyAgICAgICAgc2VsZi5tZXJnZWRfaW5kZXggPSBtZXJnZWRfaW5kZXgKKworICAgIGRlZiBhbGxf
cHVsbF9yZXF1ZXN0cyhzZWxmLCBsaW1pdD0zMCk6CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5k
KCdhbGxfcHVsbF9yZXF1ZXN0cycpCisgICAgICAgIHJldHVybiBzZWxmLnB1bGxfcmVxdWVzdHMK
KworICAgIGRlZiBpc19wcl9tZXJnZWQoc2VsZiwgbnVtYmVyKToKKyAgICAgICAgZm9yIGluZGV4
LCBwciBpbiBlbnVtZXJhdGUoc2VsZi5wdWxsX3JlcXVlc3RzKToKKyAgICAgICAgICAgIGlmIHBy
Lm51bWJlciA9PSBudW1iZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ID09IHNlbGYu
bWVyZ2VkX2luZGV4CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIG1lcmdlX3ByKHNl
bGYsIG51bWJlcik6CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdtZXJnZV9wcicpCisKKyAg
ICAgICAgZm9yIGluZGV4LCBwciBpbiBlbnVtZXJhdGUoc2VsZi5wdWxsX3JlcXVlc3RzKToKKyAg
ICAgICAgICAgIGlmIHByLm51bWJlciA9PSBudW1iZXIgYW5kIGluZGV4ID09IHNlbGYudW5zdWNj
ZXNzZnVsX21lcmdlX2luZGV4OgorICAgICAgICAgICAgICAgIHJhaXNlIE1lcmdlRXJyb3IobnVt
YmVyKQorCisgICAgICAgIHNlbGYucHVsbF9yZXF1ZXN0c19tZXJnZWQuYXBwZW5kKG51bWJlcikK
KworICAgIGRlZiBjcmVhdGVfcHIoc2VsZiwgcmVtb3RlX2JyYW5jaF9uYW1lLCBkZXNjX3RpdGxl
LCBib2R5KToKKyAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ2NyZWF0ZV9wcicpCisKKyAgICAg
ICAgaWYgc2VsZi5jcmVhdGVfcHJfZmFpbF9pbmRleCAhPSBzZWxmLmNyZWF0ZV9wcl9pbmRleDoK
KyAgICAgICAgICAgIHNlbGYucHVsbF9yZXF1ZXN0c19jcmVhdGVkLmFwcGVuZCgocmVtb3RlX2Jy
YW5jaF9uYW1lLCBkZXNjX3RpdGxlLCBib2R5KSkKKworICAgICAgICBzZWxmLmNyZWF0ZV9wcl9p
bmRleCArPSAxCisgICAgICAgIHJldHVybiA1Njc4CisKKyAgICBkZWYgdXBkYXRlX3ByKHNlbGYs
IHByX251bWJlciwgZGVzY190aXRsZSwgYm9keSk6CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5k
KCd1cGRhdGVfcHInKQorICAgICAgICByZXR1cm4gNTY3OAorCisgICAgZGVmIGRlbGV0ZV9yZW1v
dGVfYnJhbmNoKHNlbGYsIF8pOgorICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnZGVsZXRlX3Jl
bW90ZV9icmFuY2gnKQorCisgICAgZGVmIGFkZF9sYWJlbChzZWxmLCBfLCBsYWJlbCk6CisgICAg
ICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdhZGRfbGFiZWwgIiVzIicgJSBsYWJlbCkKKworICAgIGRl
ZiByZW1vdmVfbGFiZWwoc2VsZiwgXywgbGFiZWwpOgorICAgICAgICBzZWxmLmNhbGxzLmFwcGVu
ZCgncmVtb3ZlX2xhYmVsICIlcyInICUgbGFiZWwpCisKKyAgICBkZWYgZ2V0X3ByX2JyYW5jaChz
ZWxmLCBudW1iZXIpOgorICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnZ2V0X3ByX2JyYW5jaCcp
CisgICAgICAgIHJldHVybiAnZmFrZV9icmFuY2hfUFJfJWQnICUgbnVtYmVyCisKKyAgICBkZWYg
cHJfZm9yX2Nocm9taXVtX2NvbW1pdChzZWxmLCBjb21taXQpOgorICAgICAgICBzZWxmLmNhbGxz
LmFwcGVuZCgncHJfZm9yX2Nocm9taXVtX2NvbW1pdCcpCisgICAgICAgIGZvciBwciBpbiBzZWxm
LnB1bGxfcmVxdWVzdHM6CisgICAgICAgICAgICBpZiBjb21taXQuY2hhbmdlX2lkKCkgaW4gcHIu
Ym9keToKKyAgICAgICAgICAgICAgICByZXR1cm4gcHIKKyAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgIGRlZiBwcl93aXRoX3Bvc2l0aW9uKHNlbGYsIHBvc2l0aW9uKToKKyAgICAgICAgc2VsZi5j
YWxscy5hcHBlbmQoJ3ByX3dpdGhfcG9zaXRpb24nKQorICAgICAgICBmb3IgcHIgaW4gc2VsZi5w
dWxsX3JlcXVlc3RzOgorICAgICAgICAgICAgaWYgcG9zaXRpb24gaW4gcHIuYm9keToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcHIKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBwcl93
aXRoX2NoYW5nZV9pZChzZWxmLCBjaGFuZ2VfaWQpOgorICAgICAgICBzZWxmLmNhbGxzLmFwcGVu
ZCgncHJfd2l0aF9jaGFuZ2VfaWQnKQorICAgICAgICBmb3IgcHIgaW4gc2VsZi5wdWxsX3JlcXVl
c3RzOgorICAgICAgICAgICAgaWYgY2hhbmdlX2lkIGluIHByLmJvZHk6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHByCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZXh0cmFjdF9tZXRh
ZGF0YShzZWxmLCB0YWcsIGNvbW1pdF9ib2R5LCBhbGxfbWF0Y2hlcz1GYWxzZSk6CisgICAgICAg
IHJldHVybiBXUFRHaXRIdWIuZXh0cmFjdF9tZXRhZGF0YSh0YWcsIGNvbW1pdF9ib2R5LCBhbGxf
bWF0Y2hlcykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRo
dWJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy93cHRfZ2l0aHViX3Vu
aXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5OWNmOGQwMmFiNGJjMTRhNWVmYmE1ZGFhZmY5NTUzOTUx
ODg3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy93cHRf
Z2l0aHViX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsNDggQEAKKyMgQ29weXJpZ2h0IDIwMTcgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CitpbXBvcnQgYmFzZTY0CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24u
aG9zdF9tb2NrIGltcG9ydCBNb2NrSG9zdAorZnJvbSB3ZWJraXRweS53M2Mud3B0X2dpdGh1YiBp
bXBvcnQgV1BUR2l0SHViLCBNZXJnZUVycm9yCisKKworY2xhc3MgV1BUR2l0SHViVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYud3B0
X2dpdGh1YiA9IFdQVEdpdEh1YihNb2NrSG9zdCgpLCB1c2VyPSdydXRhYmFnYScsIHRva2VuPSdk
ZWNhZmJhZCcpCisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYud3B0X2dpdGh1Yi51c2VyLCAncnV0YWJhZ2EnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYud3B0X2dpdGh1Yi50b2tlbiwgJ2RlY2FmYmFkJykKKworICAgIGRlZiB0
ZXN0X2F1dGhfdG9rZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAg
ICAgICBzZWxmLndwdF9naXRodWIuYXV0aF90b2tlbigpLAorICAgICAgICAgICAgYmFzZTY0LmVu
Y29kZXN0cmluZygncnV0YWJhZ2E6ZGVjYWZiYWQnKS5zdHJpcCgpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328945</attachid>
            <date>2017-12-10 19:48:06 -0800</date>
            <delta_ts>2017-12-16 17:34:24 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-169462-20171210194805.patch</filename>
            <type>text/plain</type>
            <size>61815</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1Njc3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTEwNWU2Mjc2MzI1YTEwMzdkMWE3ZTY1ZWI1YWI0MzEz
YTA3Zjc0Yi4uOGEwYjQ1MTU5OTljNWJmNGM3YTM1Njc2MDM5MGI1YTA4MDZmOGVmOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgx
IEBACisyMDE3LTEyLTEwICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgYSBzY3JpcHQgdG8gYXV0b21hdGUgVzNjIHdlYi1wbGF0Zm9ybS10ZXN0cyBwdWxs
IHJlcXVlc3QgY3JlYXRpb25zIGZyb20gV2ViS2l0IGNvbW1pdHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQ2MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEFkZGluZyBzb21lIGdpdCBoZWxwZXIgcm91dGlu
ZXMgdXNlZCBieSBXUFQgZXhwb3J0ZXIuCisgICAgICAgIENvcHlpbmcgV1BUIGdpdGh1YiB1dGls
aXR5IGZpbGVzIGZyb20gQ2hyb21pdW0uCisgICAgICAgIFVwZGF0aW5nIHdlYi5weS93ZWJfbW9j
ay5weSB0byBjb3BlIHdpdGggdGhlc2UgbmV3IGZpbGVzLgorCisgICAgICAgIEltcGxlbWVudGlu
ZyB0ZXN0IGV4cG9ydGVyIGluIHRlc3RfZXhwb3J0ZXIucHkuCisgICAgICAgIFRoaXMgc2NyaXB0
IHRha2VzIGEgV2ViS2l0IGNvbW1pdCBhcyBpbnB1dCBhbmQgd2lsbCBjcmVhdGUgYSBXUFQgY29t
bWl0IGluIGEgbG9jYWwgV1BUIGNsb25lLgorICAgICAgICBJdCB3aWxsIHRoZW4gcHVzaCB0aGUg
Y29tbWl0IHRvIGEgcHVibGljIEdpdEh1YiByZXBvc2l0b3J5IGlkZW50aWZpZWQgYnkgYSB1c2Vy
bmFtZSBwYXJhbWV0ZXIuCisgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIHBhc3NlZCB0aHJvdWdo
IHRoZSBjb21tYW5kIGxpbmUgb3Igc2VhcmNoZWQgdGhyb3VnaCBnaXQgY29uZmlnL2Vudmlyb25t
ZW50IHZhcmlhYmxlcy4KKworICAgICAgICBUaGUgc2NyaXB0IGNhbiBvcHRpb25hbGx5IGNyZWF0
ZSBhIHB1bGwgcmVxdWVzdCB0byB0aGUgb2ZmaWNpYWwgV1BUIEdpdEh1YiByZXBvc2l0b3J5Lgor
ICAgICAgICBVc2VyIG11c3QgcHJvdmlkZSBhIEdpdEh1YiB0b2tlbiB0byBhbGxvdyB0aGUgc2Ny
aXB0IHRvIG1ha2UgdGhlIFBSIG9uIGJlaGFsZiBvZiB0aGUgdXNlci4KKyAgICAgICAgSW4gdGhh
dCBjYXNlLCBhIGNvbW1lbnQgaXMgYWRkZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYnVnemlsbGEg
aWYgYSBidWcgSUQgaXMgZ2l2ZW4gb3IgY2FuIGJlIGZvdW5kIGZyb20gdGhlIGNoYW5nZSBsb2cs
CisgICAgICAgIHRvIGVhc2lseSBsaW5rIHRoZSBwdWxsIHJlcXVlc3Qgd2l0aCB0aGUgYnVnemls
bGEgYnVnLgorCisgICAgICAgICogU2NyaXB0cy9leHBvcnQtdzNjLXRlc3QtY2hhbmdlczogQWRk
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5w
eToKKyAgICAgICAgKEdpdC5yZXNldF9oYXJkKToKKyAgICAgICAgKEdpdCk6CisgICAgICAgIChH
aXQuYW0pOgorICAgICAgICAoR2l0LmNvbW1pdCk6CisgICAgICAgIChHaXQuZm9ybWF0X3BhdGNo
KToKKyAgICAgICAgKEdpdC5yZXF1ZXN0X3B1bGwpOgorICAgICAgICAoR2l0LnJlbW90ZSk6Cisg
ICAgICAgIChHaXQucHVzaCk6CisgICAgICAgIChHaXQuY2hlY2tvdXRfbmV3X2JyYW5jaCk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weToKKyAgICAgICAgKFdl
Yi5yZXF1ZXN0KTogQ29waWVkIGZyb20gQ2hyb21pdW0uCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vbmV0L3dlYl9tb2NrLnB5OiBDb3BpZWQgbmVlZGVkIGNvZGUgZnJvbSBDaHJv
bWl1bS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyLnB5OiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RFeHBvcnRlcik6CisgICAgICAgIChUZXN0RXhwb3J0ZXIuX19p
bml0X18pOgorICAgICAgICAoVGVzdEV4cG9ydGVyLl9pbml0X3JlcG9zaXRvcnkpOgorICAgICAg
ICAoVGVzdEV4cG9ydGVyLmRvd25sb2FkX2FuZF9jb21taXRfcGF0Y2gpOgorICAgICAgICAoVGVz
dEV4cG9ydGVyLmNsZWFuKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfYnJhbmNoX3dp
dGhfcGF0Y2gpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLnB1c2hfdG9fcHVibGljX3JlcG9zaXRv
cnkpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLm1ha2VfcHVsbF9yZXF1ZXN0KToKKyAgICAgICAg
KFRlc3RFeHBvcnRlci5kZWxldGVfbG9jYWxfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRl
ci5jcmVhdGVfZ2l0X3BhdGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfdXBsb2Fk
X3JlbW90ZV9pZl9uZWVkZWQpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLmRvX2V4cG9ydCk6Cisg
ICAgICAgIChwYXJzZV9hcmdzKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nKToKKyAgICAg
ICAgKGNvbmZpZ3VyZV9sb2dnaW5nLkxvZ0hhbmRsZXIpOgorICAgICAgICAoY29uZmlndXJlX2xv
Z2dpbmcuTG9nSGFuZGxlci5mb3JtYXQpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS93M2MvdGVzdF9leHBvcnRlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgIChUZXN0RXhwb3J0ZXJUZXN0KToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1
Z3ppbGxhKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLl9faW5pdF9f
KToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLmZldGNoX2J1Z19kaWN0
aW9uYXJ5KToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLnBvc3RfY29t
bWVudF90b19idWcpOgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC5Nb2NrR2l0KToKKyAgICAg
ICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5jbG9uZSk6CisgICAgICAgIChUZXN0RXhwb3J0
ZXJUZXN0Lk1vY2tHaXQuX19pbml0X18pOgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC5Nb2Nr
R2l0LmZldGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5jaGVja291dCk6
CisgICAgICAgIChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQucmVzZXRfaGFyZCk6CisgICAgICAg
IChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQucHVzaCk6CisgICAgICAgIChUZXN0RXhwb3J0ZXJU
ZXN0Lk1vY2tHaXQuZm9ybWF0X3BhdGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9j
a0dpdC5kZWxldGVfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5j
aGVja291dF9uZXdfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5h
bSk6CisgICAgICAgIChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQuY29tbWl0KToKKyAgICAgICAg
KFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5yZW1vdGUpOgorICAgICAgICAoVGVzdEV4cG9ydGVy
VGVzdC50ZXN0X2V4cG9ydCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93M2MvY29tbW9u
LnB5OiBDb3BpZWQgZnJvbSBjaHJvbWl1bS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3cz
Yy93cHRfZ2l0aHViLnB5OiBDb3BpZWQgZnJvbSBjaHJvbWl1bS4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3czYy93cHRfZ2l0aHViX21vY2sucHk6IENvcGllZCBmcm9tIGNocm9taXVtLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWJfdW5pdHRlc3QucHk6IENv
cGllZCBmcm9tIGNocm9taXVtLgorCiAyMDE3LTEyLTA4ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9u
b3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFRvb2xzL0ltYWdlRGlmZi9jZy9QbGF0Zm9y
bUltYWdlQ0cuY3BwIGRvZXNuJ3QgbmVlZCB0byBpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9leHBvcnQtdzNjLXRlc3QtY2hhbmdlcyBiL1Rvb2xz
L1NjcmlwdHMvZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGRkM2FiMGZlYmMy
ZjAyYzlhNzM4MzBhNjA0ZDEzY2NkM2E4NzY1YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Nj
cmlwdHMvZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMKQEAgLTAsMCArMSwzNSBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlCisjICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisjICAgIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyMgICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisj
ICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKKyMgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisjIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyMgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisjIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUgorIyBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyMgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgor
CitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkudzNjIGltcG9ydCB0ZXN0X2V4cG9ydGVyCisK
Kworc3lzLmV4aXQodGVzdF9leHBvcnRlci5tYWluKHN5cy5hcmd2WzE6XSwgc3lzLnN0ZG91dCwg
c3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9zY20vZ2l0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvc2NtL2dpdC5weQppbmRleCBjYWQ1N2FiZmExNDVhMWJlNjA3MjAyZGZmNjE4MDJkYTdkYTJi
Y2ExLi5iN2RjYTE1Y2Q2NzkxODFkNjE4MDU4Yzk0MjBlYjNjOWRhYjEwZjFkIDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkKQEAgLTI5
LDcgKzI5LDYgQEAKIAogaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9z
CiBpbXBvcnQgcmUKIAogZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9p
emVkCkBAIC0zNyw3ICszNiw3IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRp
dmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKIAogZnJvbSAuY29tbWl0bWVzc2FnZSBp
bXBvcnQgQ29tbWl0TWVzc2FnZQogZnJvbSAuc2NtIGltcG9ydCBBdXRoZW50aWNhdGlvbkVycm9y
LCBTQ00sIGNvbW1pdF9lcnJvcl9oYW5kbGVyCi1mcm9tIC5zdm4gaW1wb3J0IFNWTiwgU1ZOUmVw
b3NpdG9yeQorZnJvbSAuc3ZuIGltcG9ydCBTVk5SZXBvc2l0b3J5CiAKIF9sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcihfX25hbWVfXykKIApAQCAtNTA3LDExICs1MDYsMTEgQEAgY2xhc3MgR2l0KFND
TSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVmIGRlaW5pdF9zdWJtb2R1bGVzKHNlbGYpOgogICAg
ICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ3N1Ym1vZHVsZScsICdkZWluaXQnLCAnLWYnLCAn
LiddKQogCi0gICAgZGVmIF9icmFuY2hfcmVmX2V4aXN0cyhzZWxmLCBicmFuY2hfcmVmKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWydzaG93LXJlZicsICctLXF1aWV0JywgJy0tdmVy
aWZ5JywgYnJhbmNoX3JlZl0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkgPT0gMAorICAgIGRlZiBi
cmFuY2hfcmVmX2V4aXN0cyhzZWxmLCBicmFuY2hfcmVmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3J1bl9naXQoWydzaG93LXJlZicsICctLXF1aWV0JywgJy0tdmVyaWZ5JywgJ3JlZnMvaGVhZHMv
JyArIGJyYW5jaF9yZWZdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpID09IDAKIAogICAgIGRlZiBk
ZWxldGVfYnJhbmNoKHNlbGYsIGJyYW5jaF9uYW1lKToKLSAgICAgICAgaWYgc2VsZi5fYnJhbmNo
X3JlZl9leGlzdHMoJ3JlZnMvaGVhZHMvJyArIGJyYW5jaF9uYW1lKToKKyAgICAgICAgaWYgc2Vs
Zi5icmFuY2hfcmVmX2V4aXN0cyhicmFuY2hfbmFtZSk6CiAgICAgICAgICAgICBzZWxmLl9ydW5f
Z2l0KFsnYnJhbmNoJywgJy1EJywgYnJhbmNoX25hbWVdKQogCiAgICAgZGVmIHJlbW90ZV9tZXJn
ZV9iYXNlKHNlbGYpOgpAQCAtNTIyLDcgKzUyMSw3IEBAIGNsYXNzIEdpdChTQ00sIFNWTlJlcG9z
aXRvcnkpOgogICAgICAgICByZW1vdGVfYnJhbmNoX3JlZnMgPSBzZWxmLnJlYWRfZ2l0X2NvbmZp
Zygnc3ZuLXJlbW90ZS5zdm4uZmV0Y2gnLCBjd2Q9c2VsZi5jaGVja291dF9yb290LCBleGVjdXRp
dmU9c2VsZi5fZXhlY3V0aXZlKQogICAgICAgICBpZiBub3QgcmVtb3RlX2JyYW5jaF9yZWZzOgog
ICAgICAgICAgICAgcmVtb3RlX21hc3Rlcl9yZWYgPSAncmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0
ZXInCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fYnJhbmNoX3JlZl9leGlzdHMocmVtb3RlX21h
c3Rlcl9yZWYpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuYnJhbmNoX3JlZl9leGlzdHMocmVt
b3RlX21hc3Rlcl9yZWYpOgogICAgICAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1lc3Nh
Z2U9IkNhbid0IGZpbmQgYSBicmFuY2ggdG8gZGlmZiBhZ2FpbnN0LiBzdm4tcmVtb3RlLnN2bi5m
ZXRjaCBpcyBub3QgaW4gdGhlIGdpdCBjb25maWcgYW5kICVzIGRvZXMgbm90IGV4aXN0IiAlIHJl
bW90ZV9tYXN0ZXJfcmVmKQogICAgICAgICAgICAgcmV0dXJuIHJlbW90ZV9tYXN0ZXJfcmVmCiAK
QEAgLTU4NCw2ICs1ODMsMzcgQEAgY2xhc3MgR2l0KFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAg
ZGVmIGZldGNoKHNlbGYsIHJlbW90ZT0nb3JpZ2luJyk6CiAgICAgICAgIHJldHVybiBzZWxmLl9y
dW5fZ2l0KFsnZmV0Y2gnLCByZW1vdGVdKQogCisgICAgIyBSZXNldCBjdXJyZW50IEhFQUQgdG8g
dGhlIHNwZWNpZmllZCBjb21taXQuCisgICAgZGVmIHJlc2V0X2hhcmQoc2VsZiwgY29tbWl0KToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWydyZXNldCcsICctLWhhcmQnLCBjb21taXRd
KQorCisgICAgZGVmIGFwcGx5X21haWxfcGF0Y2goc2VsZiwgb3B0aW9ucyk6CisgICAgICAgIHJl
dHVybiBzZWxmLl9ydW5fZ2l0KFsnYXBwbHknXSArIG9wdGlvbnMpCisKKyAgICBkZWYgY29tbWl0
KHNlbGYsIG9wdGlvbnMpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ2NvbW1pdCdd
ICsgb3B0aW9ucykKKworICAgIGRlZiBmb3JtYXRfcGF0Y2goc2VsZiwgb3B0aW9ucyk6CisgICAg
ICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0KFsnZm9ybWF0LXBhdGNoJ10gKyBvcHRpb25zKQorCisg
ICAgZGVmIHJlcXVlc3RfcHVsbChzZWxmLCBvcHRpb25zKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3J1bl9naXQoWydyZXF1ZXN0LXB1bGwnXSArIG9wdGlvbnMpCisKKyAgICBkZWYgcmVtb3RlKHNl
bGYsIG9wdGlvbnMpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ3JlbW90ZSddICsg
b3B0aW9ucykKKworICAgIGRlZiBwdXNoKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICByZXR1cm4g
c2VsZi5fcnVuX2dpdChbJ3B1c2gnXSArIG9wdGlvbnMpCisKKyAgICBkZWYgbG9jYWxfY29uZmln
KHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0KFsnY29uZmlnJywgJy0t
Z2V0JywgJy0tbG9jYWwnLCBrZXldLCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJy
b3IpCisKKyAgICBkZWYgc2V0X2xvY2FsX2NvbmZpZyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWydjb25maWcnLCAnLS1hZGQnLCAnLS1sb2NhbCcsIGtl
eSwgdmFsdWVdLCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpCisKKyAgICBk
ZWYgY2hlY2tvdXRfbmV3X2JyYW5jaChzZWxmLCBicmFuY2hfbmFtZSk6CisgICAgICAgIHJldHVy
biBzZWxmLl9ydW5fZ2l0KFsnY2hlY2tvdXQnLCAnLWInLCBicmFuY2hfbmFtZV0pCisKICAgICBk
ZWYgY2hlY2tvdXQoc2VsZiwgcmV2aXNpb24sIHF1aWV0PU5vbmUpOgogICAgICAgICBjb21tYW5k
ID0gWydjaGVja291dCcsIHJldmlzaW9uXQogICAgICAgICBpZiBxdWlldDoKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC93ZWIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9uZXQvd2ViLnB5CmluZGV4IGI4YTA2ZTU3NDY4ZDA1ZjA0YjY4ZjEy
OWRjZGU2YWNhMDg3NzQ3MGIuLjg3OWFhMDdjMTZjOGQ2NjM3NjQzNmY4NjExNDhlZWFmNTUzZjIz
NDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC93ZWIucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weQpAQCAtMzQsMyAr
MzQsMTMgQEAgZnJvbSB3ZWJraXRweS5jb21tb24ubmV0Lm5ldHdvcmt0cmFuc2FjdGlvbiBpbXBv
cnQgTmV0d29ya1RyYW5zYWN0aW9uCiBjbGFzcyBXZWIob2JqZWN0KToKICAgICBkZWYgZ2V0X2Jp
bmFyeShzZWxmLCB1cmwsIGNvbnZlcnRfNDA0X3RvX05vbmU9RmFsc2UpOgogICAgICAgICByZXR1
cm4gTmV0d29ya1RyYW5zYWN0aW9uKGNvbnZlcnRfNDA0X3RvX05vbmU9Y29udmVydF80MDRfdG9f
Tm9uZSkucnVuKGxhbWJkYTogdXJsbGliMi51cmxvcGVuKHVybCkucmVhZCgpKQorCisgICAgZGVm
IHJlcXVlc3Qoc2VsZiwgbWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRlcnM9Tm9uZSk6CisgICAgICAg
IG9wZW5lciA9IHVybGxpYjIuYnVpbGRfb3BlbmVyKHVybGxpYjIuSFRUUEhhbmRsZXIpCisgICAg
ICAgIHJlcXVlc3QgPSB1cmxsaWIyLlJlcXVlc3QodXJsPXVybCwgZGF0YT1kYXRhKQorICAgICAg
ICByZXF1ZXN0LmdldF9tZXRob2QgPSBsYW1iZGE6IG1ldGhvZAorCisgICAgICAgIGlmIGhlYWRl
cnM6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBoZWFkZXJzLml0ZW1zKCk6CisgICAg
ICAgICAgICAgICAgcmVxdWVzdC5hZGRfaGVhZGVyKGtleSwgdmFsdWUpCisgICAgICAgIHJldHVy
biBvcGVuZXIub3BlbihyZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vbmV0L3dlYl9tb2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bmV0L3dlYl9tb2NrLnB5CmluZGV4IDZmMDliYTQ0ZDBjZWU3YWRiODhkMTRjNTc0MTNjNzBiY2Nm
MzhiM2UuLmI0MTA1OTk4OWFjZTE1Mjk2YTlhOThlM2U1YTU2OTYyOTA0MWY1NTYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC93ZWJfbW9jay5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvd2ViX21vY2sucHkKQEAgLTI3LDEyICsy
NywxMyBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQgU3RyaW5nSU8KLQoraW1wb3J0IHVybGxp
YjIKIAogY2xhc3MgTW9ja1dlYihvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmxz
PU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmxzPU5vbmUsIHJlc3BvbnNlcz1bXSk6
CiAgICAgICAgIHNlbGYudXJscyA9IHVybHMgb3Ige30KICAgICAgICAgc2VsZi51cmxzX2ZldGNo
ZWQgPSBbXQorICAgICAgICBzZWxmLnJlc3BvbnNlcyA9IHJlc3BvbnNlcwogCiAgICAgZGVmIGdl
dF9iaW5hcnkoc2VsZiwgdXJsLCBjb252ZXJ0XzQwNF90b19Ob25lPUZhbHNlKToKICAgICAgICAg
c2VsZi51cmxzX2ZldGNoZWQuYXBwZW5kKHVybCkKQEAgLTQwLDYgKzQxLDI5IEBAIGNsYXNzIE1v
Y2tXZWIob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBzZWxmLnVybHNbdXJsXQogICAgICAg
ICByZXR1cm4gIk1PQ0sgV2ViIHJlc3VsdCwgY29udmVydCA0MDQgdG8gTm9uZT0lcyIgJSBjb252
ZXJ0XzQwNF90b19Ob25lCiAKKyAgICBkZWYgcmVxdWVzdChzZWxmLCBtZXRob2QsIHVybCwgZGF0
YSwgaGVhZGVycz1Ob25lKTogICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAorICAg
ICAgICByZXR1cm4gTW9ja1Jlc3BvbnNlKHNlbGYucmVzcG9uc2VzLnBvcCgwKSkKKworCitjbGFz
cyBNb2NrUmVzcG9uc2Uob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWVzKToK
KyAgICAgICAgc2VsZi5zdGF0dXNfY29kZSA9IHZhbHVlc1snc3RhdHVzX2NvZGUnXQorICAgICAg
ICBzZWxmLnVybCA9ICcnCisgICAgICAgIHNlbGYuYm9keSA9IHZhbHVlcy5nZXQoJ2JvZHknLCAn
JykKKworICAgICAgICBpZiBpbnQoc2VsZi5zdGF0dXNfY29kZSkgPj0gNDAwOgorICAgICAgICAg
ICAgcmFpc2UgdXJsbGliMi5IVFRQRXJyb3IoCisgICAgICAgICAgICAgICAgdXJsPXNlbGYudXJs
LAorICAgICAgICAgICAgICAgIGNvZGU9c2VsZi5zdGF0dXNfY29kZSwKKyAgICAgICAgICAgICAg
ICBtc2c9J1JlY2VpdmVkIGVycm9yIHN0YXR1cyBjb2RlOiB7fScuZm9ybWF0KHNlbGYuc3RhdHVz
X2NvZGUpLAorICAgICAgICAgICAgICAgIGhkcnM9e30sCisgICAgICAgICAgICAgICAgZnA9Tm9u
ZSkKKworICAgIGRlZiBnZXRjb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zdGF0dXNf
Y29kZQorCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJvZHkKIAog
IyBGSVhNRTogQ2xhc3NlcyB3aGljaCBhcmUgdXNpbmcgQnJvd3NlciBwcm9iYWJseSB3YW50IHRv
IHVzZSBXZWIgaW5zdGVhZC4KIGNsYXNzIE1vY2tCcm93c2VyKG9iamVjdCk6CmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy9jb21tb24ucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3czYy9jb21tb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTE0YWE5NTM1NGI5MDY3Mzk0MTAxNzZj
MWIwMzc4YzdkNzIzNTMzMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdzNjL2NvbW1vbi5weQpAQCAtMCwwICsxLDk5IEBACisjIENvcHlyaWdodCAyMDE2IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
IiIiVXRpbGl0eSBmdW5jdGlvbnMgdXNlZCBib3RoIHdoZW4gaW1wb3J0aW5nIGFuZCBleHBvcnRp
bmcuIiIiCisKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworCisKK1dQVF9HSF9PUkcgPSAn
dzNjJworV1BUX0dIX1JFUE9fTkFNRSA9ICd3ZWItcGxhdGZvcm0tdGVzdHMnCitXUFRfR0hfVVJM
ID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS8lcy8lcy8nICUgKFdQVF9HSF9PUkcsIFdQVF9HSF9SRVBP
X05BTUUpCitXUFRfTUlSUk9SX1VSTCA9ICdodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vZXh0ZXJuYWwvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy5naXQnCitXUFRfR0hfU1NIX1VSTF9U
RU1QTEFURSA9ICdodHRwczovL3t9QGdpdGh1Yi5jb20vJXMvJXMuZ2l0JyAlIChXUFRfR0hfT1JH
LCBXUFRfR0hfUkVQT19OQU1FKQorV1BUX1JFVklTSU9OX0ZPT1RFUiA9ICdXUFQtRXhwb3J0LVJl
dmlzaW9uOicKK0VYUE9SVF9QUl9MQUJFTCA9ICdjaHJvbWl1bS1leHBvcnQnCitQUk9WSVNJT05B
TF9QUl9MQUJFTCA9ICdkbyBub3QgbWVyZ2UgeWV0JworCisjIFRPRE8ocXllYXJzbGV5KTogQXZv
aWQgaGFyZC1jb2RpbmcgdGhpcmRfcGFydHkvV2ViS2l0L0xheW91dFRlc3RzLgorQ0hST01JVU1f
V1BUX0RJUiA9ICd0aGlyZF9wYXJ0eS9XZWJLaXQvTGF5b3V0VGVzdHMvZXh0ZXJuYWwvd3B0LycK
KworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2RlZiByZWFkX2NyZWRl
bnRpYWxzKGhvc3QsIGNyZWRlbnRpYWxzX2pzb24pOgorICAgICIiIkV4dHJhY3RzIGNyZWRlbnRp
YWxzIGZyb20gYSBKU09OIGZpbGUuIiIiCisgICAgaWYgbm90IGNyZWRlbnRpYWxzX2pzb246Cisg
ICAgICAgIHJldHVybiB7fQorICAgIGlmIG5vdCBob3N0LmZpbGVzeXN0ZW0uZXhpc3RzKGNyZWRl
bnRpYWxzX2pzb24pOgorICAgICAgICBfbG9nLndhcm5pbmcoJ0NyZWRlbnRpYWxzIEpTT04gZmls
ZSBub3QgZm91bmQgYXQgJXMuJywgY3JlZGVudGlhbHNfanNvbikKKyAgICAgICAgcmV0dXJuIHt9
CisgICAgY3JlZGVudGlhbHMgPSB7fQorICAgIGNvbnRlbnRzID0ganNvbi5sb2Fkcyhob3N0LmZp
bGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoY3JlZGVudGlhbHNfanNvbikpCisgICAgZm9yIGtleSBp
biAoJ0dIX1VTRVInLCAnR0hfVE9LRU4nLCAnR0VSUklUX1VTRVInLCAnR0VSUklUX1RPS0VOJyk6
CisgICAgICAgIGlmIGtleSBpbiBjb250ZW50czoKKyAgICAgICAgICAgIGNyZWRlbnRpYWxzW2tl
eV0gPSBjb250ZW50c1trZXldCisgICAgcmV0dXJuIGNyZWRlbnRpYWxzCisKKworZGVmIGlzX3Rl
c3RoYXJuZXNzX2Jhc2VsaW5lKGZpbGVuYW1lKToKKyAgICAiIiJDaGVja3Mgd2hldGhlciBhIGdp
dmVuIGZpbGUgbmFtZSBhcHBlYXJzIHRvIGJlIGEgdGVzdGhhcm5lc3MgYmFzZWxpbmUuCisKKyAg
ICBBcmdzOgorICAgICAgICBmaWxlbmFtZTogQSBwYXRoIChhYnNvbHV0ZSBvciByZWxhdGl2ZSkg
b3IgYSBiYXNlbmFtZS4KKyAgICAiIiIKKyAgICByZXR1cm4gZmlsZW5hbWUuZW5kc3dpdGgoJy1l
eHBlY3RlZC50eHQnKQorCisKK2RlZiBpc19iYXNlbmFtZV9za2lwcGVkKGJhc2VuYW1lKToKKyAg
ICAiIiJDaGVja3Mgd2hldGhlciB0byBza2lwIChub3Qgc3luYykgYSBmaWxlIGJhc2VkIG9uIGl0
cyBiYXNlbmFtZS4KKworICAgIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgYm90
aCBpbXBvcnQgYW5kIGV4cG9ydCwgaS5lLiwgZmlsZXMgd2l0aAorICAgIHNraXBwZWQgYmFzZW5h
bWVzIGFyZSBuZXZlciBpbXBvcnRlZCBvciBleHBvcnRlZC4KKyAgICAiIiIKKyAgICBhc3NlcnQg
Jy8nIG5vdCBpbiBiYXNlbmFtZQorICAgIGJsYWNrbGlzdCA9IFsKKyAgICAgICAgJ01BTklGRVNU
Lmpzb24nLCAgICAjIE1BTklGRVNULmpzb24gaXMgYXV0b21hdGljYWxseSByZWdlbmVyYXRlZC4K
KyAgICAgICAgJ09XTkVSUycsICAgICAgICAgICAjIGh0dHBzOi8vY3JidWcuY29tLzU4NDY2MCBo
dHRwczovL2NyYnVnLmNvbS83MDIyODMKKyAgICAgICAgJ3JlZnRlc3QubGlzdCcsICAgICAjIGh0
dHBzOi8vY3JidWcuY29tLzU4MjgzOAorICAgIF0KKyAgICByZXR1cm4gKGJhc2VuYW1lIGluIGJs
YWNrbGlzdAorICAgICAgICAgICAgb3IgaXNfdGVzdGhhcm5lc3NfYmFzZWxpbmUoYmFzZW5hbWUp
CisgICAgICAgICAgICBvciBiYXNlbmFtZS5zdGFydHN3aXRoKCcuJykpCisKKworZGVmIGlzX2Zp
bGVfZXhwb3J0YWJsZShwYXRoKToKKyAgICAiIiJDaGVja3Mgd2hldGhlciBhIGZpbGUgaW4gQ2hy
b21pdW0gV1BUIHNob3VsZCBiZSBleHBvcnRlZCB0byB1cHN0cmVhbS4KKworICAgIEFyZ3M6Cisg
ICAgICAgIHBhdGg6IEEgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSByb290IG9mIENocm9taXVtIHJl
cG9zaXRvcnkuCisgICAgIiIiCisgICAgYXNzZXJ0IHBhdGguc3RhcnRzd2l0aChDSFJPTUlVTV9X
UFRfRElSKQorICAgIGJhc2VuYW1lID0gcGF0aFtwYXRoLnJmaW5kKCcvJykgKyAxOl0KKyAgICBy
ZXR1cm4gbm90IGlzX2Jhc2VuYW1lX3NraXBwZWQoYmFzZW5hbWUpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93M2MvdGVzdF9leHBvcnRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzYxMGU0MTljNDY0MmJm
MWYxMmE3OGQ5NzZlZTM2YTZkMzYxMGRhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS93M2MvdGVzdF9leHBvcnRlci5weQpAQCAtMCwwICsxLDI5MyBAQAorIyBDb3B5
cmlnaHQgKGMpIDIwMTcsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIKKyBUaGlzIHNjcmlwdCB1cGxv
YWRzIGNoYW5nZXMgbWFkZSB0byBXM0Mgd2ViLXBsYXRmb3JtLXRlc3RzIHRlc3RzLgorIiIiCisK
K2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUK
KworZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtLmdpdCBpbXBvcnQgR2l0Citmcm9t
IHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5u
ZXQuYnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxhCitmcm9tIHdlYmtpdHB5LmNvbW1vbi53ZWJraXRf
ZmluZGVyIGltcG9ydCBXZWJLaXRGaW5kZXIKK2Zyb20gd2Via2l0cHkudzNjLndwdF9naXRodWIg
aW1wb3J0IFdQVEdpdEh1YgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisK
K1dFQktJVF9XUFRfRElSID0gJ0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMnCitXUFRfUFJfVVJMID0gImh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3B1bGwvIgorCisKK2NsYXNzIFRlc3RFeHBvcnRlcihvYmplY3QpOgorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGhvc3QsIG9wdGlvbnMsIGdpdENsYXNzPUdpdCwgYnVnemlsbGFDbGFz
cz1CdWd6aWxsYSwgV1BUR2l0SHViQ2xhc3M9V1BUR2l0SHViKToKKyAgICAgICAgc2VsZi5faG9z
dCA9IGhvc3QKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IGhvc3QuZmlsZXN5c3RlbQorICAg
ICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworCisgICAgICAgIHNlbGYuX2hvc3QuaW5pdGlh
bGl6ZV9zY20oKQorCisgICAgICAgIHNlbGYuX2J1Z3ppbGxhID0gYnVnemlsbGFDbGFzcygpCisg
ICAgICAgIHNlbGYuX2J1Z19pZCA9IG9wdGlvbnMuYnVnX2lkCisgICAgICAgIGlmIG5vdCBzZWxm
Ll9idWdfaWQ6CisgICAgICAgICAgICBpZiBvcHRpb25zLmF0dGFjaG1lbnRfaWQ6CisgICAgICAg
ICAgICAgICAgc2VsZi5fYnVnX2lkID0gc2VsZi5fYnVnemlsbGEuYnVnX2lkX2Zvcl9hdHRhY2ht
ZW50X2lkKG9wdGlvbnMuYXR0YWNobWVudF9pZCkKKyAgICAgICAgICAgIGVsaWYgb3B0aW9ucy5n
aXRfY29tbWl0OgorICAgICAgICAgICAgICAgIHNlbGYuX2J1Z19pZCA9IHNlbGYuX2hvc3QuY2hl
Y2tvdXQoKS5idWdfaWRfZm9yX3RoaXNfY29tbWl0KG9wdGlvbnMuZ2l0X2NvbW1pdCkKKworICAg
ICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5yZXBvc2l0b3J5X2RpcmVjdG9yeToKKyAgICAgICAg
ICAgIHdlYmtpdF9maW5kZXIgPSBXZWJLaXRGaW5kZXIoc2VsZi5fZmlsZXN5c3RlbSkKKyAgICAg
ICAgICAgIHNlbGYuX29wdGlvbnMucmVwb3NpdG9yeV9kaXJlY3RvcnkgPSB3ZWJraXRfZmluZGVy
LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnV2ViS2l0QnVpbGQnLCAndzNjLXRlc3RzJywgJ3dlYi1w
bGF0Zm9ybS10ZXN0cycpCisKKyAgICAgICAgc2VsZi5fZ2l0ID0gc2VsZi5fZW5zdXJlX3dwdF9y
ZXBvc2l0b3J5KCJodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy5naXQi
LCBzZWxmLl9vcHRpb25zLnJlcG9zaXRvcnlfZGlyZWN0b3J5LCBnaXRDbGFzcykKKworICAgICAg
ICBzZWxmLl91c2VybmFtZSA9IG9wdGlvbnMudXNlcm5hbWUKKyAgICAgICAgaWYgbm90IHNlbGYu
X3VzZXJuYW1lOgorICAgICAgICAgICAgc2VsZi5fdXNlcm5hbWUgPSBzZWxmLl9naXQubG9jYWxf
Y29uZmlnKCdnaXRodWIudXNlcm5hbWUnKS5yc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IHNl
bGYuX3VzZXJuYW1lOgorICAgICAgICAgICAgICAgIHNlbGYuX3VzZXJuYW1lID0gb3MuZW52aXJv
bi5nZXQoJ0dJVEhVQl9VU0VSTkFNRScpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fdXNlcm5h
bWU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTWlzc2luZyBHaXRIdWIgdXNl
cm5hbWUsIHBsZWFzZSBwcm92aWRlIGl0IGFzIGEgcGFyYW1ldGVyLiIpCisgICAgICAgIGVsaWYg
bm90IHNlbGYuX2dpdC5sb2NhbF9jb25maWcoJ2dpdGh1Yi51c2VybmFtZScpOgorICAgICAgICAg
ICAgc2VsZi5fZ2l0LnNldF9sb2NhbF9jb25maWcoJ2dpdGh1Yi51c2VybmFtZScsIHNlbGYuX3Vz
ZXJuYW1lKQorCisgICAgICAgIHNlbGYuX3Rva2VuID0gb3B0aW9ucy50b2tlbgorICAgICAgICBp
ZiBub3Qgc2VsZi5fdG9rZW46CisgICAgICAgICAgICBzZWxmLl90b2tlbiA9IHNlbGYuX2dpdC5s
b2NhbF9jb25maWcoJ2dpdGh1Yi50b2tlbicpLnJzdHJpcCgpCisgICAgICAgICAgICBpZiBub3Qg
c2VsZi5fdG9rZW46CisgICAgICAgICAgICAgICAgc2VsZi5fdG9rZW4gPSBvcy5lbnZpcm9uLmdl
dCgnR0lUSFVCX1RPS0VOJykKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl90b2tlbjoKKyAgICAg
ICAgICAgICAgICBfbG9nLmluZm8oIk1pc3NpbmcgR2l0SHViIHRva2VuLCB0aGUgc2NyaXB0IHdp
bGwgbm90IGJlIGFibGUgdG8gY3JlYXRlIGEgcHVsbCByZXF1ZXN0IHRvIFczQyB3ZWItcGxhdGZv
cm0tdGVzdHMgcmVwb3NpdG9yeS4iKQorICAgICAgICBlbGlmIG5vdCBzZWxmLl9naXQubG9jYWxf
Y29uZmlnKCdnaXRodWIudG9rZW4nKToKKyAgICAgICAgICAgIHNlbGYuX2dpdC5zZXRfbG9jYWxf
Y29uZmlnKCdnaXRodWIudG9rZW4nLCBzZWxmLl90b2tlbikKKworICAgICAgICBzZWxmLl9naXRo
dWIgPSBXUFRHaXRIdWJDbGFzcyhzZWxmLl9ob3N0LCBzZWxmLl91c2VybmFtZSwgc2VsZi5fdG9r
ZW4pIGlmIHNlbGYuX3VzZXJuYW1lIGFuZCBzZWxmLl90b2tlbiBlbHNlIE5vbmUKKworICAgICAg
ICBzZWxmLl9icmFuY2hfbmFtZSA9IHNlbGYuX2Vuc3VyZV9uZXdfYnJhbmNoX25hbWUoKQorICAg
ICAgICBzZWxmLl9wdWJsaWNfYnJhbmNoX25hbWUgPSBvcHRpb25zLnB1YmxpY19icmFuY2hfbmFt
ZSBpZiBvcHRpb25zLnB1YmxpY19icmFuY2hfbmFtZSBlbHNlIHNlbGYuX2JyYW5jaF9uYW1lCisg
ICAgICAgIHNlbGYuX2J1Z3ppbGxhX3VybCA9ICJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9IiArIHN0cihzZWxmLl9idWdfaWQpCisgICAgICAgIHNlbGYuX2NvbW1pdF9t
ZXNzYWdlID0gb3B0aW9ucy5tZXNzYWdlIGlmIG9wdGlvbnMubWVzc2FnZSBlbHNlICdXZWJLaXQg
ZXhwb3J0IG9mICcgKyBzZWxmLl9idWd6aWxsYV91cmwKKworICAgICAgICBzZWxmLl93cHRfZm9y
a19yZW1vdGUgPSBvcHRpb25zLnJlcG9zaXRvcnlfcmVtb3RlCisgICAgICAgIGlmIG5vdCBzZWxm
Ll93cHRfZm9ya19yZW1vdGU6CisgICAgICAgICAgICBzZWxmLl93cHRfZm9ya19yZW1vdGUgPSBz
ZWxmLl91c2VybmFtZQorCisgICAgICAgIHNlbGYuX3dwdF9mb3JrX3B1c2hfdXJsID0gb3B0aW9u
cy5yZXBvc2l0b3J5X3JlbW90ZV91cmwKKyAgICAgICAgaWYgbm90IHNlbGYuX3dwdF9mb3JrX3B1
c2hfdXJsOgorICAgICAgICAgICAgc2VsZi5fd3B0X2ZvcmtfcHVzaF91cmwgPSAiaHR0cHM6Ly8i
ICsgc2VsZi5fdXNlcm5hbWUgKyAiQGdpdGh1Yi5jb20vIiArIHNlbGYuX3VzZXJuYW1lICsgIi93
ZWItcGxhdGZvcm0tdGVzdHMuZ2l0IgorCisgICAgZGVmIF9lbnN1cmVfd3B0X3JlcG9zaXRvcnko
c2VsZiwgdXJsLCB3cHRfcmVwb3NpdG9yeV9kaXJlY3RvcnksIGdpdENsYXNzKToKKyAgICAgICAg
Z2l0ID0gTm9uZQorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMod3B0X3Jl
cG9zaXRvcnlfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIF9sb2cuaW5mbygnQ2xvbmluZyAlcyBp
bnRvICVzLi4uJyAlICh1cmwsIHdwdF9yZXBvc2l0b3J5X2RpcmVjdG9yeSkpCisgICAgICAgICAg
ICBnaXRDbGFzcy5jbG9uZSh1cmwsIHdwdF9yZXBvc2l0b3J5X2RpcmVjdG9yeSwgc2VsZi5faG9z
dC5leGVjdXRpdmUpCisgICAgICAgIGdpdCA9IGdpdENsYXNzKHdwdF9yZXBvc2l0b3J5X2RpcmVj
dG9yeSwgTm9uZSwgZXhlY3V0aXZlPXNlbGYuX2hvc3QuZXhlY3V0aXZlLCBmaWxlc3lzdGVtPXNl
bGYuX2ZpbGVzeXN0ZW0pCisgICAgICAgIHJldHVybiBnaXQKKworICAgIGRlZiBfZmV0Y2hfd3B0
X3JlcG9zaXRvcnkoc2VsZik6CisgICAgICAgIF9sb2cuaW5mbygnRmV0Y2hpbmcgd2ViLXBsYXRm
b3JtLXRlc3RzIHJlcG9zaXRvcnknKQorICAgICAgICBzZWxmLl9naXQuZmV0Y2goKQorCisgICAg
ZGVmIF9lbnN1cmVfbmV3X2JyYW5jaF9uYW1lKHNlbGYpOgorICAgICAgICBicmFuY2hfbmFtZV9w
cmVmaXggPSAid3B0LWV4cG9ydC1mb3Itd2Via2l0LSIgKyAoc3RyKHNlbGYuX2J1Z19pZCkgaWYg
c2VsZi5fYnVnX2lkIGVsc2UgIjAiKQorICAgICAgICBicmFuY2hfbmFtZSA9IGJyYW5jaF9uYW1l
X3ByZWZpeAorICAgICAgICBjb3VudGVyID0gMAorICAgICAgICB3aGlsZSBzZWxmLl9naXQuYnJh
bmNoX3JlZl9leGlzdHMoYnJhbmNoX25hbWUpOgorICAgICAgICAgICAgYnJhbmNoX25hbWUgPSAo
IiVzLSVzIikgJSAoYnJhbmNoX25hbWVfcHJlZml4LCBzdHIoY291bnRlcikpCisgICAgICAgICAg
ICBjb3VudGVyID0gY291bnRlciArIDEKKyAgICAgICAgcmV0dXJuIGJyYW5jaF9uYW1lCisKKyAg
ICBkZWYgZG93bmxvYWRfYW5kX2NvbW1pdF9wYXRjaChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5f
b3B0aW9ucy5naXRfY29tbWl0OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBw
YXRjaF9vcHRpb25zID0gWyItLW5vLXVwZGF0ZSIsICItLW5vLWNsZWFuIiwgIi0tbG9jYWwtY29t
bWl0Il0KKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5hdHRhY2htZW50X2lkOgorICAgICAgICAg
ICAgcGF0Y2hfb3B0aW9ucy5pbnNlcnQoImFwcGx5LWF0dGFjaG1lbnQiKQorICAgICAgICAgICAg
cGF0Y2hfb3B0aW9ucy5hcHBlbmQoc2VsZi5fb3B0aW9ucy5hdHRhY2htZW50X2lkKQorICAgICAg
ICBlbGlmIHNlbGYuX29wdGlvbnMuYnVnX2lkOgorICAgICAgICAgICAgcGF0Y2hfb3B0aW9ucy5p
bnNlcnQoImFwcGx5LWZyb20tYnVnIikKKyAgICAgICAgICAgIHBhdGNoX29wdGlvbnMuYXBwZW5k
KHNlbGYuX29wdGlvbnMuYnVnX2lkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xvZy5p
bmZvKCJFeHBvcnRpbmcgbG9jYWwgY2hhbmdlcyIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAg
ICAgcmFpc2UgVHlwZUVycm9yKCJSZXRyaWV2YWwgb2YgcGF0Y2ggZnJvbSBidWd6aWxsYSBpcyBu
b3QgeWV0IGltcGxlbWVudGVkIikKKworICAgIGRlZiBjbGVhbihzZWxmKToKKyAgICAgICAgX2xv
Zy5pbmZvKCdDbGVhbmluZyB3ZWItcGxhdGZvcm0tdGVzdHMgbWFzdGVyIGJyYW5jaCcpCisgICAg
ICAgIHNlbGYuX2dpdC5jaGVja291dCgnbWFzdGVyJykKKyAgICAgICAgc2VsZi5fZ2l0LnJlc2V0
X2hhcmQoJ29yaWdpbi9tYXN0ZXInKQorCisgICAgZGVmIGNyZWF0ZV9icmFuY2hfd2l0aF9wYXRj
aChzZWxmLCBwYXRjaCk6CisgICAgICAgIF9sb2cuaW5mbygnQXBwbHlpbmcgcGF0Y2ggdG8gd2Vi
LXBsYXRmb3JtLXRlc3RzIGJyYW5jaCAnICsgc2VsZi5fYnJhbmNoX25hbWUpCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHNlbGYuX2dpdC5jaGVja291dF9uZXdfYnJhbmNoKHNlbGYuX2JyYW5j
aF9uYW1lKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBfbG9n
Lndhcm5pbmcoZSkKKyAgICAgICAgICAgIF9sb2cuaW5mbygiUmV0cnlpbmcgdG8gY3JlYXRlIHRo
ZSBicmFuY2giKQorICAgICAgICAgICAgc2VsZi5fZ2l0LmRlbGV0ZV9icmFuY2goc2VsZi5fYnJh
bmNoX25hbWUpCisgICAgICAgICAgICBzZWxmLl9naXQuY2hlY2tvdXRfbmV3X2JyYW5jaChzZWxm
Ll9icmFuY2hfbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZ2l0LmFwcGx5
X21haWxfcGF0Y2goW3BhdGNoLCAnLS1leGNsdWRlJywgJyotZXhwZWN0ZWQudHh0J10pCisgICAg
ICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIF9sb2cud2FybmluZyhlKQor
ICAgICAgICAgICAgc2VsZi5fZ2l0LmFwcGx5X21haWxfcGF0Y2goWyctLWFib3J0J10pCisgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fZ2l0LmNvbW1pdChbJy1hJywgJy1t
Jywgc2VsZi5fY29tbWl0X21lc3NhZ2VdKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVm
IHB1c2hfdG9fd3B0X2Zvcmsoc2VsZik6CisgICAgICAgIHNlbGYuY3JlYXRlX3VwbG9hZF9yZW1v
dGVfaWZfbmVlZGVkKCkKKyAgICAgICAgd3B0X2ZvcmtfYnJhbmNoX2dpdGh1Yl91cmwgPSAiaHR0
cHM6Ly9naXRodWIuY29tLyIgKyBzZWxmLl91c2VybmFtZSArICIvd2ViLXBsYXRmb3JtLXRlc3Rz
L3RyZWUvIiArIHNlbGYuX3B1YmxpY19icmFuY2hfbmFtZQorICAgICAgICBfbG9nLmluZm8oJ1B1
c2hpbmcgYnJhbmNoICcgKyBzZWxmLl9icmFuY2hfbmFtZSArICIgdG8gIiArIHNlbGYuX2dpdC5y
ZW1vdGUoWyJnZXQtdXJsIiwgc2VsZi5fd3B0X2ZvcmtfcmVtb3RlXSkucnN0cmlwKCkpCisgICAg
ICAgIF9sb2cuaW5mbygnVGhpcyBtYXkgdGFrZSBzb21lIHRpbWUnKQorICAgICAgICBzZWxmLl9n
aXQucHVzaChbc2VsZi5fd3B0X2ZvcmtfcmVtb3RlLCBzZWxmLl9icmFuY2hfbmFtZSArICI6IiAr
IHNlbGYuX3B1YmxpY19icmFuY2hfbmFtZSwgJy1mJ10pCisgICAgICAgIF9sb2cuaW5mbygnQnJh
bmNoIGF2YWlsYWJsZSBhdCAnICsgd3B0X2ZvcmtfYnJhbmNoX2dpdGh1Yl91cmwpCisgICAgICAg
IHJldHVybiBUcnVlCisKKyAgICBkZWYgbWFrZV9wdWxsX3JlcXVlc3Qoc2VsZik6CisgICAgICAg
IGlmIG5vdCBzZWxmLl9naXRodWI6CisgICAgICAgICAgICBfbG9nLmluZm8oJ01pc3NpbmcgaW5m
b3JtYXRpb24gdG8gY3JlYXRlIGEgcHVsbCByZXF1ZXN0JykKKyAgICAgICAgICAgIHJldHVybgor
CisgICAgICAgIF9sb2cuaW5mbygnTWFraW5nIHB1bGwgcmVxdWVzdCcpCisgICAgICAgIGRlc2Ny
aXB0aW9uID0gc2VsZi5fYnVnemlsbGEuZmV0Y2hfYnVnX2RpY3Rpb25hcnkoc2VsZi5fYnVnX2lk
KVsidGl0bGUiXQorICAgICAgICBwcl9udW1iZXIgPSBzZWxmLl9naXRodWIuY3JlYXRlX3ByKHNl
bGYuX3dwdF9mb3JrX3JlbW90ZSArICc6JyArIHNlbGYuX2JyYW5jaF9uYW1lLCBzZWxmLl9jb21t
aXRfbWVzc2FnZSwgZGVzY3JpcHRpb24pCisgICAgICAgIGlmIHNlbGYuX2J1Z19pZDoKKyAgICAg
ICAgICAgIHNlbGYuX2J1Z3ppbGxhLnBvc3RfY29tbWVudF90b19idWcoc2VsZi5fYnVnX2lkLCAi
U3VibWl0dGVkIHdlYi1wbGF0Zm9ybS10ZXN0cyBwdWxsIHJlcXVlc3Q6ICIgKyBXUFRfUFJfVVJM
ICsgc3RyKHByX251bWJlcikpCisKKyAgICBkZWYgZGVsZXRlX2xvY2FsX2JyYW5jaChzZWxmKToK
KyAgICAgICAgX2xvZy5pbmZvKCdSZW1vdmluZyBicmFuY2ggJyArIHNlbGYuX2JyYW5jaF9uYW1l
KQorICAgICAgICBzZWxmLl9naXQuY2hlY2tvdXQoJ21hc3RlcicpCisgICAgICAgIHNlbGYuX2dp
dC5kZWxldGVfYnJhbmNoKHNlbGYuX2JyYW5jaF9uYW1lKQorCisgICAgZGVmIGNyZWF0ZV9naXRf
cGF0Y2goc2VsZik6CisgICAgICAgIHBhdGNoX2ZpbGUgPSAnLi9wYXRjaC50ZW1wLicgKyBzdHIo
dGltZS5jbG9jaygpKQorICAgICAgICBnaXRfY29tbWl0ID0gIkhFQUQuLi4uIiBpZiBub3Qgc2Vs
Zi5fb3B0aW9ucy5naXRfY29tbWl0IGVsc2Ugc2VsZi5fb3B0aW9ucy5naXRfY29tbWl0ICsgIn4x
Li4iICsgc2VsZi5fb3B0aW9ucy5naXRfY29tbWl0CisgICAgICAgIHBhdGNoX2RhdGEgPSBzZWxm
Ll9ob3N0LnNjbSgpLmNyZWF0ZV9wYXRjaChnaXRfY29tbWl0LCBbV0VCS0lUX1dQVF9ESVJdKQor
ICAgICAgICBpZiBub3QgcGF0Y2hfZGF0YSBvciBub3QgJ2RpZmYnIGluIHBhdGNoX2RhdGE6Cisg
ICAgICAgICAgICBfbG9nLmluZm8oJ05vIGNoYW5nZXMgdG8gdXBzdHJlYW0sIHBhdGNoIGRhdGEg
aXM6ICIlcyInICUgKHBhdGNoX2RhdGEpKQorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAg
ICMgRklYTUU6IFdlIGNhbiBwcm9iYWJseSB0cnkgdG8gdXNlIC0tcmVsYXRpdmUgZ2l0IHBhcmFt
ZXRlciB0byBub3QgZG8gdGhhdCByZXBsYWNlbWVudC4KKyAgICAgICAgcGF0Y2hfZGF0YSA9IHBh
dGNoX2RhdGEucmVwbGFjZShXRUJLSVRfV1BUX0RJUiArICcvJywgJycpCisgICAgICAgIHBhdGNo
X2ZpbGUgPSBzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgocGF0Y2hfZmlsZSkKKyAgICAgICAgc2Vs
Zi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUocGF0Y2hfZmlsZSwgcGF0Y2hfZGF0YSkKKyAg
ICAgICAgcmV0dXJuIHBhdGNoX2ZpbGUKKworICAgIGRlZiBjcmVhdGVfdXBsb2FkX3JlbW90ZV9p
Zl9uZWVkZWQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl93cHRfZm9ya19yZW1vdGUgaW4g
c2VsZi5fZ2l0LnJlbW90ZShbXSk6CisgICAgICAgICAgICBzZWxmLl9naXQucmVtb3RlKFsiYWRk
Iiwgc2VsZi5fd3B0X2ZvcmtfcmVtb3RlLCBzZWxmLl93cHRfZm9ya19wdXNoX3VybF0pCisKKyAg
ICBkZWYgZG9fZXhwb3J0KHNlbGYpOgorICAgICAgICBnaXRfcGF0Y2hfZmlsZSA9IHNlbGYuY3Jl
YXRlX2dpdF9wYXRjaCgpCisKKyAgICAgICAgaWYgbm90IGdpdF9wYXRjaF9maWxlOgorICAgICAg
ICAgICAgX2xvZy5lcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSBhIHBhdGNoIHRvIGFwcGx5IHRvIHdl
Yi1wbGF0Zm9ybS10ZXN0cyByZXBvc2l0b3J5IikKKyAgICAgICAgICAgIHJldHVybgorCisgICAg
ICAgIHNlbGYuX2ZldGNoX3dwdF9yZXBvc2l0b3J5KCkKKyAgICAgICAgc2VsZi5jbGVhbigpCisK
KyAgICAgICAgaWYgbm90IHNlbGYuY3JlYXRlX2JyYW5jaF93aXRoX3BhdGNoKGdpdF9wYXRjaF9m
aWxlKToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIkNhbm5vdCBjcmVhdGUgd2ViLXBsYXRmb3Jt
LXRlc3RzIGxvY2FsIGJyYW5jaCBmcm9tIHRoZSBwYXRjaCIpCisgICAgICAgICAgICBzZWxmLmRl
bGV0ZV9sb2NhbF9icmFuY2goKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgZ2l0
X3BhdGNoX2ZpbGU6CisgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZShnaXRfcGF0
Y2hfZmlsZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLnB1c2hfdG9fd3B0
X2ZvcmsoKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNyZWF0ZV9wdWxsX3Jl
cXVlc3Q6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubWFrZV9wdWxsX3JlcXVlc3QoKQorICAg
ICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5kZWxldGVfbG9jYWxfYnJhbmNoKCkKKyAg
ICAgICAgICAgIF9sb2cuaW5mbygiRmluaXNoZWQiKQorICAgICAgICAgICAgc2VsZi5jbGVhbigp
CisKKworZGVmIHBhcnNlX2FyZ3MoYXJncyk6CisgICAgZGVzY3JpcHRpb24gPSAiIiJTY3JpcHQg
dG8gZ2VuZXJhdGUgYSBwdWxsIHJlcXVlc3QgdG8gVzNDIHdlYi1wbGF0Zm9ybS10ZXN0cyByZXBv
c2l0b3J5CisgICAgJ1Rvb2xzL1NjcmlwdHMvZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMgLWMgLWcg
SEVBRCAtYiBYWVonIHdpbGwgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAtIENsb25lIHdlYi1wbGF0
Zm9ybS10ZXN0cyByZXBvc2l0b3J5IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHNldCBpdCB1cCBm
b3IgcHVzaGluZyBicmFuY2hlcy4KKyAgICAtIEdhdGhlciBXZWJLaXQgYnVnIGlkIFhZWiBidWcg
YW5kIGNoYW5nZXMgdG8gYXBwbHkgdG8gd2ViLXBsYXRmb3JtLXRlc3RzIHJlcG9zaXRvcnkgYmFz
ZWQgb24gdGhlIEhFQUQgY29tbWl0CisgICAgLSBDcmVhdGUgYSByZW1vdGUgYnJhbmNoIG5hbWVk
IHdlYmtpdC1YWVogb24gaHR0cHM6Ly9naXRodWIuY29tL1VTRVJOQU1FL3dlYi1wbGF0Zm9ybS10
ZXN0cy5naXQgcmVwb3NpdG9yeSBiYXNlZCBvbiB0aGUgbG9jYWxseSBhcHBsaWVkIHBhdGNoLgor
ICAgIC0gICAgVVNFUk5BTUUgbWF5IGJlIHNldCB1c2luZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFi
bGUgR0lUSFVCX1VTRVJOQU1FIG9yIGFzIGEgY29tbWFuZCBsaW5lIG9wdGlvbi4gSXQgaXMgdGhl
biBzdG9yZWQgaW4gZ2l0IGNvbmZpZyBhcyBnaXRodWIudXNlcm5hbWUuCisgICAgLSAgICBHaXRo
dWIgY3JlZGVudGlhbCBtYXkgYmUgc2V0IHVzaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBH
SVRIVUJfVE9LRU4gb3IgYXMgYSBjb21tYW5kIGxpbmUgb3B0aW9uLiAoUGxlYXNlIHByb3ZpZGUg
YSB2YWxpZCBHaXRIdWIgJ1BlcnNvbmFsIGFjY2VzcyB0b2tlbicgd2l0aCAncmVwbycgYXMgc2Nv
cGUpLiBJdCBpcyB0aGVuIHN0b3JlZCBpbiBnaXQgY29uZmlnIGFzIGdpdGh1Yi50b2tlbi4KKyAg
ICAtIE1ha2UgdGhlIHJlbGF0ZWQgcHVsbCByZXF1ZXN0IG9uIGh0dHBzOi8vZ2l0aHViLmNvbS93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzLmdpdCByZXBvc2l0b3J5LgorICAgIC0gQ2xlYW4gdGhlIGxv
Y2FsIEdpdCByZXBvc2l0b3J5CisgICAgTm90ZXM6CisgICAgLSBJdCBpcyBzYWZlciB0byBwcm92
aWRlIGEgYnVnIGlkIHVzaW5nIC1iIG9wdGlvbiAoYnVnIGlkIGZyb20gYSBnaXQgY29tbWl0IGlz
IG5vdCBhbHdheXMgd29ya2luZykuCisgICAgLSBBcyBhIGRyeSBydW4sIG9uZSBjYW4gc3RhcnQg
YnkgcnVubmluZyB0aGUgc2NyaXB0IHdpdGhvdXQgLWMuIFRoaXMgd2lsbCBvbmx5IGNyZWF0ZSB0
aGUgYnJhbmNoIG9uIHRoZSB1c2VyIHB1YmxpYyBHaXRIdWIgcmVwb3NpdG9yeS4KKyAgICAtIEJ5
IGRlZmF1bHQsIHRoZSBzY3JpcHQgd2lsbCBjcmVhdGUgYW4gaHR0cHMgcmVtb3RlIFVSTCB0aGF0
IHdpbGwgcmVxdWlyZSBhIHBhc3N3b3JkLWJhc2VkIGF1dGhlbnRpY2F0aW9uIHRvIEdpdEh1Yi4g
SWYgeW91IGFyZSB1c2luZyBhbiBTU0gga2V5LCBwbGVhc2UgdXNlIHRoZSAtLXJlbW90ZS11cmwg
b3B0aW9uLgorICAgIEZJWE1FOgorICAgIC0gQWRkIGEgbGFiZWwgb24gZ2l0aHViIGlzc3Vlcwor
ICAgIC0gVGhlIHNjcmlwdCBpcyBub3QgeWV0IGFibGUgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIHB1
bGwgcmVxdWVzdAorICAgIC0gTmVlZCBhIHdheSB0byBtb25pdG9yIHRoZSBwcm9ncmVzcyBvZiB0
aGUgcHVsIHJlcXVlc3Qgc28gdGhhdCBzdGF0dXMgb2YgYWxsIHBlbmRpbmcgcHVsbCByZXF1ZXN0
cyBjYW4gYmUgZG9uZSBhdCBpbXBvcnQgdGltZS4KKyAgICAiIiIKKyAgICBwYXJzZXIgPSBhcmdw
YXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdleHBvcnQtdzNjLXRlc3QtY2hhbmdlcyAuLi4nLCBk
ZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLlJhd0Rlc2Ny
aXB0aW9uSGVscEZvcm1hdHRlcikKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1nJywgJy0t
Z2l0LWNvbW1pdCcsIGRlc3Q9J2dpdF9jb21taXQnLCBkZWZhdWx0PU5vbmUsIGhlbHA9J0dpdCBj
b21taXQgdG8gYXBwbHknKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1iJywgJy0tYnVnJywg
ZGVzdD0nYnVnX2lkJywgZGVmYXVsdD1Ob25lLCBoZWxwPSdCdWcgSUQgdG8gc2VhcmNoIGZvciBw
YXRjaCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWEnLCAnLS1hdHRhY2htZW50JywgZGVz
dD0nYXR0YWNobWVudF9pZCcsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nQXR0YWNobWVudCBJRCB0byBz
ZWFyY2ggZm9yIHBhdGNoJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbicsICctLW5hbWUn
LCBkZXN0PSd1c2VybmFtZScsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nZ2l0aHViIHVzZXIgbmFtZSBp
ZiBHSVRIVUJfVVNFUk5BTUUgaXMgbm90IGRlZmluZWQgb3IgZ2l0aHViLnVzZXJuYW1lIGluIHRo
ZSBXUFQgcmVwbyBjb25maWcgaXMgbm90IGRlZmluZWQnKQorICAgIHBhcnNlci5hZGRfYXJndW1l
bnQoJy10JywgJy0tdG9rZW4nLCBkZXN0PSd0b2tlbicsIGRlZmF1bHQ9Tm9uZSwgaGVscD0nZ2l0
aHViIHRva2VuLCBuZWVkZWQgZm9yIGNyZWF0aW5nIHB1bGwgcmVxdWVzdHMgb25seSBpZiBHSVRI
VUJfVE9LRU4gZW52IHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkIG9yIGdpdGh1Yi50b2tlbiBpbiB0
aGUgV1BUIHJlcG8gY29uZmlnIGlzIG5vdCBkZWZpbmVkJykKKyAgICBwYXJzZXIuYWRkX2FyZ3Vt
ZW50KCctYm4nLCAnLS1icmFuY2gtbmFtZScsIGRlc3Q9J3B1YmxpY19icmFuY2hfbmFtZScsIGRl
ZmF1bHQ9Tm9uZSwgaGVscD0nQnJhbmNoIG5hbWUgdG8gcHVzaCB0bycpCisgICAgcGFyc2VyLmFk
ZF9hcmd1bWVudCgnLW0nLCAnLS1tZXNzYWdlJywgZGVzdD0nbWVzc2FnZScsIGRlZmF1bHQ9Tm9u
ZSwgaGVscD0nQ29tbWl0IG1lc3NhZ2UnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1yJywg
Jy0tcmVtb3RlJywgZGVzdD0ncmVwb3NpdG9yeV9yZW1vdGUnLCBkZWZhdWx0PU5vbmUsIGhlbHA9
J3JlcG9zaXRvcnkgb3JpZ2luIHRvIHVzZSB0byBwdXNoJykKKyAgICBwYXJzZXIuYWRkX2FyZ3Vt
ZW50KCctdScsICctLXJlbW90ZS11cmwnLCBkZXN0PSdyZXBvc2l0b3J5X3JlbW90ZV91cmwnLCBk
ZWZhdWx0PU5vbmUsIGhlbHA9J3JlcG9zaXRvcnkgdXJsIHRvIHVzZSB0byBwdXNoJykKKyAgICBw
YXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLXJlcG9zaXRvcnknLCBkZXN0PSdyZXBvc2l0b3J5
X2RpcmVjdG9yeScsIGRlZmF1bHQ9Tm9uZSwgaGVscD0ncmVwb3NpdG9yeSBkaXJlY3RvcnknKQor
ICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1jJywgJy0tY3JlYXRlLXByJywgZGVzdD0nY3JlYXRl
X3B1bGxfcmVxdWVzdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9
J2NyZWF0ZSBwdWxsIHJlcXVlc3QgdG8gdzNjIHdlYi1wbGF0Zm9ybS10ZXN0cycpCisKKyAgICBv
cHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJncykKKworICAgIHJldHVy
biBvcHRpb25zCisKKworZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKCk6CisgICAgY2xhc3MgTG9nSGFu
ZGxlcihsb2dnaW5nLlN0cmVhbUhhbmRsZXIpOgorCisgICAgICAgIGRlZiBmb3JtYXQoc2VsZiwg
cmVjb3JkKToKKyAgICAgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vID4gbG9nZ2luZy5JTkZPOgor
ICAgICAgICAgICAgICAgIHJldHVybiAiJXM6ICVzIiAlIChyZWNvcmQubGV2ZWxuYW1lLCByZWNv
cmQuZ2V0TWVzc2FnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlY29yZC5nZXRNZXNzYWdlKCkK
KworICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICBsb2dnZXIuc2V0TGV2ZWwo
bG9nZ2luZy5JTkZPKQorICAgIGhhbmRsZXIgPSBMb2dIYW5kbGVyKCkKKyAgICBoYW5kbGVyLnNl
dExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQorICAg
IHJldHVybiBoYW5kbGVyCisKKworZGVmIG1haW4oX2FyZ3YsIF9zdGRvdXQsIF9zdGRlcnIpOgor
ICAgIG9wdGlvbnMgPSBwYXJzZV9hcmdzKF9hcmd2KQorCisgICAgY29uZmlndXJlX2xvZ2dpbmco
KQorCisgICAgdGVzdF9leHBvcnRlciA9IFRlc3RFeHBvcnRlcihIb3N0KCksIG9wdGlvbnMpCisK
KyAgICB0ZXN0X2V4cG9ydGVyLmRvX2V4cG9ydCgpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93M2MvdGVzdF9leHBvcnRlcl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODYzZmNk
MjQ0ZGNmOWJhNDM3MjFlZThiYTk5ZDhmZjMwNzhkOTI2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF9leHBvcnRlcl91bml0dGVzdC5weQpAQCAtMCww
ICsxLDEzMiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTcsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdF9tb2NrIGltcG9ydCBNb2Nr
SG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQg
TW9ja0ZpbGVTeXN0ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9j
ayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZTIKK2Zyb20gd2Via2l0cHkudzNjLnRlc3RfZXhwb3J0ZXIg
aW1wb3J0IFRlc3RFeHBvcnRlciwgcGFyc2VfYXJncworZnJvbSB3ZWJraXRweS53M2Mud3B0X2dp
dGh1Yl9tb2NrIGltcG9ydCBNb2NrV1BUR2l0SHViCisKKworY2xhc3MgVGVzdEV4cG9ydGVyVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbWF4RGlmZiA9IE5vbmUKKworICAgIGNsYXNzIE1v
Y2tCdWd6aWxsYShvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAg
ICAgICBzZWxmLmNhbGxzID0gW10KKworICAgICAgICBkZWYgZmV0Y2hfYnVnX2RpY3Rpb25hcnko
c2VsZiwgaWQpOgorICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ2ZldGNoIGJ1ZyAnICsg
aWQpCisgICAgICAgICAgICByZXR1cm4geyJ0aXRsZSI6ICJteSBidWcgdGl0bGUifQorCisgICAg
ICAgIGRlZiBwb3N0X2NvbW1lbnRfdG9fYnVnKHNlbGYsIGlkLCBjb21tZW50KToKKyAgICAgICAg
ICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdwb3N0IGNvbW1lbnQgdG8gYnVnICcgKyBpZCArICcgOiAn
ICsgY29tbWVudCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBjbGFzcyBNb2NrR2l0
KG9iamVjdCk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgY2xvbmUoY2xzLCB1
cmwsIGRpcmVjdG9yeSwgZXhlY3V0aXZlPU5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUK
KworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwb3NpdG9yeV9kaXJlY3RvcnksIHBhdGNo
X2RpcmVjdG9yaWVzLCBleGVjdXRpdmUsIGZpbGVzeXN0ZW0pOgorICAgICAgICAgICAgc2VsZi5j
YWxscyA9IFtyZXBvc2l0b3J5X2RpcmVjdG9yeV0KKworICAgICAgICBkZWYgZmV0Y2goc2VsZik6
CisgICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnZmV0Y2gnKQorCisgICAgICAgIGRlZiBj
aGVja291dChzZWxmLCBicmFuY2gpOgorICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ2No
ZWNrb3V0ICcgKyBicmFuY2gpCisKKyAgICAgICAgZGVmIHJlc2V0X2hhcmQoc2VsZiwgY29tbWl0
KToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdyZXNldCBoYXJkICcgKyBjb21taXQp
CisKKyAgICAgICAgZGVmIHB1c2goc2VsZiwgb3B0aW9ucyk6CisgICAgICAgICAgICBzZWxmLmNh
bGxzLmFwcGVuZCgncHVzaCAnICsgJyAnLmpvaW4ob3B0aW9ucykpCisKKyAgICAgICAgZGVmIGZv
cm1hdF9wYXRjaChzZWxmLCBvcHRpb25zKToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5k
KCdmb3JtYXQgcGF0Y2ggJyArICcgJy5qb2luKG9wdGlvbnMpKQorICAgICAgICAgICAgcmV0dXJu
ICdmb3JtYXR0ZWQgcGF0Y2ggd2l0aCBjaGFuZ2VzIGRvbmUgdG8gTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy90ZXN0MS5odG1sJworCisgICAgICAgIGRlZiBkZWxl
dGVfYnJhbmNoKHNlbGYsIGJyYW5jaF9uYW1lKToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMuYXBw
ZW5kKCdkZWxldGUgYnJhbmNoICcgKyBicmFuY2hfbmFtZSkKKworICAgICAgICBkZWYgY2hlY2tv
dXRfbmV3X2JyYW5jaChzZWxmLCBicmFuY2hfbmFtZSk6CisgICAgICAgICAgICBzZWxmLmNhbGxz
LmFwcGVuZCgnY2hlY2tvdXQgbmV3IGJyYW5jaCAnICsgYnJhbmNoX25hbWUpCisKKyAgICAgICAg
ZGVmIGFwcGx5X21haWxfcGF0Y2goc2VsZiwgb3B0aW9ucyk6CisgICAgICAgICAgICAjIGZpbHRl
cmluZyBvcHRpb25zWzBdIGFzIGl0IGNoYW5nZXMgZm9yIGV2ZXJ5IHJ1bgorICAgICAgICAgICAg
c2VsZi5jYWxscy5hcHBlbmQoJ2FwcGx5X21haWxfcGF0Y2ggcGF0Y2gudGVtcCAnICsgJyAnLmpv
aW4ob3B0aW9uc1sxOl0pKQorCisgICAgICAgIGRlZiBjb21taXQoc2VsZiwgb3B0aW9ucyk6Cisg
ICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnY29tbWl0ICcgKyAnICcuam9pbihvcHRpb25z
KSkKKworICAgICAgICBkZWYgcmVtb3RlKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICAgICAgc2Vs
Zi5jYWxscy5hcHBlbmQoJ3JlbW90ZSAnICsgJyAnLmpvaW4ob3B0aW9ucykpCisgICAgICAgICAg
ICByZXR1cm4gIm15X3JlbW90ZV91cmwiCisKKyAgICAgICAgZGVmIGxvY2FsX2NvbmZpZyhzZWxm
LCBuYW1lKToKKyAgICAgICAgICAgIHJldHVybiAndmFsdWUnCisKKyAgICAgICAgZGVmIGJyYW5j
aF9yZWZfZXhpc3RzKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAg
ICAgICAgZGVmIGNyZWF0ZV9wYXRjaChzZWxmLCBjb21taXQsIGFyZ3VtZW50cyk6CisgICAgICAg
ICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnY3JlYXRlX3BhdGNoICcgKyBjb21taXQgKyAnICcgKyBz
dHIoYXJndW1lbnRzKSkKKyAgICAgICAgICAgIHJldHVybiAnbXkgcGF0Y2ggY29udGFpbmluZyBz
b21lIGRpZmZzJworCisgICAgY2xhc3MgTXlNb2NrSG9zdChNb2NrSG9zdCk6CisgICAgICAgIGRl
ZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIE1vY2tIb3N0Ll9faW5pdF9fKHNlbGYpCisg
ICAgICAgICAgICBzZWxmLmV4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKGV4Y2VwdGlvbj1PU0Vy
cm9yKCkpCisgICAgICAgICAgICBzZWxmLmZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbSgpCisg
ICAgICAgICAgICBzZWxmLl9tb2NrU0NNID0gVGVzdEV4cG9ydGVyVGVzdC5Nb2NrR2l0KE5vbmUs
IE5vbmUsIE5vbmUsIE5vbmUpCisKKyAgICAgICAgZGVmIHNjbShzZWxmKToKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLl9tb2NrU0NNCisKKyAgICBkZWYgdGVzdF9leHBvcnQoc2VsZik6CisgICAg
ICAgIGhvc3QgPSBUZXN0RXhwb3J0ZXJUZXN0Lk15TW9ja0hvc3QoKQorICAgICAgICBvcHRpb25z
ID0gcGFyc2VfYXJncyhbJ3Rlc3RfZXhwb3J0ZXIucHknLCAnLWcnLCAnSEVBRCcsICctYicsICcx
MjM0JywgJy1jJywgJy1uJywgJ1VTRVInLCAnLXQnLCAnVE9LRU4nXSkKKyAgICAgICAgZXhwb3J0
ZXIgPSBUZXN0RXhwb3J0ZXIoaG9zdCwgb3B0aW9ucywgVGVzdEV4cG9ydGVyVGVzdC5Nb2NrR2l0
LCBUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tCdWd6aWxsYSwgTW9ja1dQVEdpdEh1YikKKyAgICAgICAg
ZXhwb3J0ZXIuZG9fZXhwb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwb3J0ZXIu
X2dpdGh1Yi5jYWxscywgWydjcmVhdGVfcHInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
ZXhwb3J0ZXIuX2dpdC5jYWxscywgWworICAgICAgICAgICAgJy9tb2NrLWNoZWNrb3V0L1dlYktp
dEJ1aWxkL3czYy10ZXN0cy93ZWItcGxhdGZvcm0tdGVzdHMnLAorICAgICAgICAgICAgJ2ZldGNo
JywKKyAgICAgICAgICAgICdjaGVja291dCBtYXN0ZXInLAorICAgICAgICAgICAgJ3Jlc2V0IGhh
cmQgb3JpZ2luL21hc3RlcicsCisgICAgICAgICAgICAnY2hlY2tvdXQgbmV3IGJyYW5jaCB3cHQt
ZXhwb3J0LWZvci13ZWJraXQtMTIzNCcsCisgICAgICAgICAgICAnYXBwbHlfbWFpbF9wYXRjaCBw
YXRjaC50ZW1wIC0tZXhjbHVkZSAqLWV4cGVjdGVkLnR4dCcsCisgICAgICAgICAgICAnY29tbWl0
IC1hIC1tIFdlYktpdCBleHBvcnQgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMzQnLAorICAgICAgICAgICAgJ3JlbW90ZSAnLAorICAgICAgICAgICAgJ3JlbW90
ZSBhZGQgVVNFUiBodHRwczovL1VTRVJAZ2l0aHViLmNvbS9VU0VSL3dlYi1wbGF0Zm9ybS10ZXN0
cy5naXQnLAorICAgICAgICAgICAgJ3JlbW90ZSBnZXQtdXJsIFVTRVInLAorICAgICAgICAgICAg
J3B1c2ggVVNFUiB3cHQtZXhwb3J0LWZvci13ZWJraXQtMTIzNDp3cHQtZXhwb3J0LWZvci13ZWJr
aXQtMTIzNCAtZicsCisgICAgICAgICAgICAnY2hlY2tvdXQgbWFzdGVyJywKKyAgICAgICAgICAg
ICdkZWxldGUgYnJhbmNoIHdwdC1leHBvcnQtZm9yLXdlYmtpdC0xMjM0JywKKyAgICAgICAgICAg
ICdjaGVja291dCBtYXN0ZXInLAorICAgICAgICAgICAgJ3Jlc2V0IGhhcmQgb3JpZ2luL21hc3Rl
ciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBvcnRlci5fYnVnemlsbGEuY2FsbHMs
IFsKKyAgICAgICAgICAgICdmZXRjaCBidWcgMTIzNCcsCisgICAgICAgICAgICAncG9zdCBjb21t
ZW50IHRvIGJ1ZyAxMjM0IDogU3VibWl0dGVkIHdlYi1wbGF0Zm9ybS10ZXN0cyBwdWxsIHJlcXVl
c3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3B1bGwvNTY3OCdd
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dpdGh1Yi5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWIucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGE2
MmM0OWVjZmIwYmZkMzExYTEzOGI0NjZiMzg3MWNjMzIwNmIwNAotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWIucHkKQEAgLTAsMCArMSw0Mjcg
QEAKKyMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgYmFzZTY0CitpbXBvcnQganNvbgoraW1w
b3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHVybGxpYjIKK2Zyb20gY29sbGVjdGlvbnMg
aW1wb3J0IG5hbWVkdHVwbGUKKworZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0
IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LnczYy5jb21tb24gaW1wb3J0IFdQVF9HSF9PUkcsIFdQ
VF9HSF9SRVBPX05BTUUsIEVYUE9SVF9QUl9MQUJFTAorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoX19uYW1lX18pCitBUElfQkFTRSA9ICdodHRwczovL2FwaS5naXRodWIuY29tJworTUFYX1BF
Ul9QQUdFID0gMTAwCisKKworY2xhc3MgV1BUR2l0SHViKG9iamVjdCk6CisgICAgIiIiQW4gaW50
ZXJmYWNlIHRvIEdpdEh1YiBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgd2ViLXBsYXRmb3JtLXRl
c3RzIHJlcG8uCisKKyAgICBUaGlzIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgZm9yIHNlbmRpbmcg
cmVxdWVzdHMgdG8gdGhlIEdpdEh1YiBBUEkuCisgICAgVW5sZXNzIG1lbnRpb25lZCBvdGhlcndp
c2UsIEFQSSBjYWxscyBhcmUgZXhwZWN0ZWQgdG8gc3VjY2VlZCwgYW5kCisgICAgR2l0SHViRXJy
b3Igd2lsbCBiZSByYWlzZWQgaWYgYW4gQVBJIGNhbGwgZmFpbHMuCisgICAgIiIiCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgaG9zdCwgdXNlcj1Ob25lLCB0b2tlbj1Ob25lLCBwcl9oaXN0b3J5
X3dpbmRvdz01MDAwKToKKyAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLnVz
ZXIgPSB1c2VyCisgICAgICAgIHNlbGYudG9rZW4gPSB0b2tlbgorCisgICAgICAgIHNlbGYuX3By
X2hpc3Rvcnlfd2luZG93ID0gcHJfaGlzdG9yeV93aW5kb3cKKworICAgIGRlZiBoYXNfY3JlZGVu
dGlhbHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnVzZXIgYW5kIHNlbGYudG9rZW4KKwor
ICAgIGRlZiBhdXRoX3Rva2VuKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5oYXNfY3JlZGVu
dGlhbHMoKQorICAgICAgICByZXR1cm4gYmFzZTY0LmI2NGVuY29kZSgne306e30nLmZvcm1hdChz
ZWxmLnVzZXIsIHNlbGYudG9rZW4pKQorCisgICAgZGVmIHJlcXVlc3Qoc2VsZiwgcGF0aCwgbWV0
aG9kLCBib2R5PU5vbmUpOgorICAgICAgICAiIiJTZW5kcyBhIHJlcXVlc3QgdG8gR2l0SHViIEFQ
SSBhbmQgZGVzZXJpYWxpemVzIHRoZSByZXNwb25zZS4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgICAgcGF0aDogQVBJIGVuZHBvaW50IHdpdGhvdXQgYmFzZSBVUkwgKHN0YXJ0aW5nIHdpdGgg
Jy8nKS4KKyAgICAgICAgICAgIG1ldGhvZDogSFRUUCBtZXRob2QgdG8gYmUgdXNlZCBmb3IgdGhp
cyByZXF1ZXN0LgorICAgICAgICAgICAgYm9keTogT3B0aW9uYWwgcGF5bG9hZCBpbiB0aGUgcmVx
dWVzdCBib2R5IChkZWZhdWx0PU5vbmUpLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAg
ICBBIEpTT05SZXNwb25zZSBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCBw
YXRoLnN0YXJ0c3dpdGgoJy8nKQorCisgICAgICAgIGlmIGJvZHk6CisgICAgICAgICAgICBib2R5
ID0ganNvbi5kdW1wcyhib2R5KQorCisgICAgICAgIGhlYWRlcnMgPSB7J0FjY2VwdCc6ICdhcHBs
aWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb24nfQorCisgICAgICAgIGlmIHNlbGYuaGFzX2NyZWRl
bnRpYWxzKCk6CisgICAgICAgICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSAnQmFzaWMg
e30nLmZvcm1hdChzZWxmLmF1dGhfdG9rZW4oKSkKKworICAgICAgICByZXNwb25zZSA9IHNlbGYu
aG9zdC53ZWIucmVxdWVzdCgKKyAgICAgICAgICAgIG1ldGhvZD1tZXRob2QsCisgICAgICAgICAg
ICB1cmw9QVBJX0JBU0UgKyBwYXRoLAorICAgICAgICAgICAgZGF0YT1ib2R5LAorICAgICAgICAg
ICAgaGVhZGVycz1oZWFkZXJzCisgICAgICAgICkKKyAgICAgICAgcmV0dXJuIEpTT05SZXNwb25z
ZShyZXNwb25zZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXh0cmFjdF9saW5rX25l
eHQobGlua19oZWFkZXIpOgorICAgICAgICAiIiJFeHRyYWN0cyB0aGUgVVJJIHRvIHRoZSBuZXh0
IHBhZ2Ugb2YgcmVzdWx0cyBmcm9tIGEgcmVzcG9uc2UuCisKKyAgICAgICAgQXMgcGVyIEdpdEh1
YiBBUEkgc3BlY3MsIHRoZSBsaW5rIHRvIHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0cyBpcworICAg
ICAgICBleHRyYWN0ZWQgZnJvbSB0aGUgTGluayBoZWFkZXIgLS0gdGhlIGxpbmsgd2l0aCByZWxh
dGlvbiB0eXBlICJuZXh0Ii4KKyAgICAgICAgRG9jczogaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHVi
LmNvbS92My8jcGFnaW5hdGlvbiAoYW5kIFJGQyA1OTg4KQorCisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgICBsaW5rX2hlYWRlcjogVGhlIHZhbHVlIG9mIHRoZSBMaW5rIGhlYWRlciBpbiByZXNw
b25zZXMgZnJvbSBHaXRIdWIuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFBhdGgg
dG8gdGhlIG5leHQgcGFnZSAod2l0aG91dCBiYXNlIFVSTCksIG9yIE5vbmUgaWYgbm90IGZvdW5k
LgorICAgICAgICAiIiIKKyAgICAgICAgIyBUT0RPKHJvYmVydG1hKTogSW52ZXN0aWdhdGUgIm1h
eSByZXF1aXJlIGV4cGFuc2lvbiBhcyBVUkkgdGVtcGxhdGVzIiBtZW50aW9uZWQgaW4gZG9jcy4K
KyAgICAgICAgIyBFeGFtcGxlIExpbmsgaGVhZGVyOgorICAgICAgICAjIDxodHRwczovL2FwaS5n
aXRodWIuY29tL3Jlc291cmNlcz9wYWdlPTM+OyByZWw9Im5leHQiLCA8aHR0cHM6Ly9hcGkuZ2l0
aHViLmNvbS9yZXNvdXJjZXM/cGFnZT01MD47IHJlbD0ibGFzdCIKKyAgICAgICAgaWYgbGlua19o
ZWFkZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGxpbmtfcmUg
PSByZS5jb21waWxlKHInPCguKz8pPjsgKnJlbD0iKC4rPykiJykKKyAgICAgICAgbWF0Y2ggPSBs
aW5rX3JlLnNlYXJjaChsaW5rX2hlYWRlcikKKyAgICAgICAgd2hpbGUgbWF0Y2g6CisgICAgICAg
ICAgICBsaW5rLCByZWwgPSBtYXRjaC5ncm91cHMoKQorICAgICAgICAgICAgaWYgcmVsLmxvd2Vy
KCkgPT0gJ25leHQnOgorICAgICAgICAgICAgICAgICMgU3RyaXAgQVBJX0JBU0Ugc28gdGhhdCB0
aGUgcmV0dXJuIHZhbHVlIGlzIHVzZWZ1bCBmb3IgcmVxdWVzdCgpLgorICAgICAgICAgICAgICAg
IGFzc2VydCBsaW5rLnN0YXJ0c3dpdGgoQVBJX0JBU0UpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGxpbmtbbGVuKEFQSV9CQVNFKTpdCisgICAgICAgICAgICBtYXRjaCA9IGxpbmtfcmUuc2VhcmNo
KGxpbmtfaGVhZGVyLCBtYXRjaC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRl
ZiBjcmVhdGVfcHIoc2VsZiwgcmVtb3RlX2JyYW5jaF9uYW1lLCBkZXNjX3RpdGxlLCBib2R5KToK
KyAgICAgICAgIiIiQ3JlYXRlcyBhIFBSIG9uIEdpdEh1Yi4KKworICAgICAgICBBUEkgZG9jOiBo
dHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL3B1bGxzLyNjcmVhdGUtYS1wdWxsLXJlcXVl
c3QKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVGhlIGlzc3VlIG51bWJlciBvZiB0
aGUgY3JlYXRlZCBQUi4KKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCByZW1vdGVfYnJhbmNo
X25hbWUKKyAgICAgICAgYXNzZXJ0IGRlc2NfdGl0bGUKKyAgICAgICAgYXNzZXJ0IGJvZHkKKwor
ICAgICAgICBwYXRoID0gJy9yZXBvcy8lcy8lcy9wdWxscycgJSAoV1BUX0dIX09SRywgV1BUX0dI
X1JFUE9fTkFNRSkKKyAgICAgICAgYm9keSA9IHsKKyAgICAgICAgICAgICd0aXRsZSc6IGRlc2Nf
dGl0bGUsCisgICAgICAgICAgICAnYm9keSc6IGJvZHksCisgICAgICAgICAgICAnaGVhZCc6IHJl
bW90ZV9icmFuY2hfbmFtZSwKKyAgICAgICAgICAgICdiYXNlJzogJ21hc3RlcicsCisgICAgICAg
IH0KKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdQT1NUJywg
Ym9keT1ib2R5KQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMToKKyAg
ICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9yKDIwMSwgcmVzcG9uc2Uuc3RhdHVzX2NvZGUsICdj
cmVhdGUgUFInKQorCisgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhWydudW1iZXInXQorCisg
ICAgZGVmIHVwZGF0ZV9wcihzZWxmLCBwcl9udW1iZXIsIGRlc2NfdGl0bGUsIGJvZHkpOgorICAg
ICAgICAiIiJVcGRhdGVzIGEgUFIgb24gR2l0SHViLgorCisgICAgICAgIEFQSSBkb2M6IGh0dHBz
Oi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvcHVsbHMvI3VwZGF0ZS1hLXB1bGwtcmVxdWVzdAor
ICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9ICcvcmVwb3Mve30ve30vcHVsbHMve30nLmZvcm1h
dCgKKyAgICAgICAgICAgIFdQVF9HSF9PUkcsCisgICAgICAgICAgICBXUFRfR0hfUkVQT19OQU1F
LAorICAgICAgICAgICAgcHJfbnVtYmVyCisgICAgICAgICkKKyAgICAgICAgYm9keSA9IHsKKyAg
ICAgICAgICAgICd0aXRsZSc6IGRlc2NfdGl0bGUsCisgICAgICAgICAgICAnYm9keSc6IGJvZHks
CisgICAgICAgIH0KKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9k
PSdQQVRDSCcsIGJvZHk9Ym9keSkKKworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAh
PSAyMDA6CisgICAgICAgICAgICByYWlzZSBHaXRIdWJFcnJvcigyMDAsIHJlc3BvbnNlLnN0YXR1
c19jb2RlLCAndXBkYXRlIFBSICVkJyAlIHByX251bWJlcikKKworICAgIGRlZiBhZGRfbGFiZWwo
c2VsZiwgbnVtYmVyLCBsYWJlbCk6CisgICAgICAgICIiIkFkZHMgYSBsYWJlbCB0byBhIEdpdEh1
YiBpc3N1ZSAob3IgUFIpLgorCisgICAgICAgIEFQSSBkb2M6IGh0dHBzOi8vZGV2ZWxvcGVyLmdp
dGh1Yi5jb20vdjMvaXNzdWVzL2xhYmVscy8jYWRkLWxhYmVscy10by1hbi1pc3N1ZQorICAgICAg
ICAiIiIKKyAgICAgICAgcGF0aCA9ICcvcmVwb3MvJXMvJXMvaXNzdWVzLyVkL2xhYmVscycgJSAo
CisgICAgICAgICAgICBXUFRfR0hfT1JHLAorICAgICAgICAgICAgV1BUX0dIX1JFUE9fTkFNRSwK
KyAgICAgICAgICAgIG51bWJlcgorICAgICAgICApCisgICAgICAgIGJvZHkgPSBbbGFiZWxdCisg
ICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHBhdGgsIG1ldGhvZD0nUE9TVCcsIGJvZHk9
Ym9keSkKKworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAg
ICAgICByYWlzZSBHaXRIdWJFcnJvcigyMDAsIHJlc3BvbnNlLnN0YXR1c19jb2RlLCAnYWRkIGxh
YmVsICVzIHRvIGlzc3VlICVkJyAlIChsYWJlbCwgbnVtYmVyKSkKKworICAgIGRlZiByZW1vdmVf
bGFiZWwoc2VsZiwgbnVtYmVyLCBsYWJlbCk6CisgICAgICAgICIiIlJlbW92ZXMgYSBsYWJlbCBm
cm9tIGEgR2l0SHViIGlzc3VlIChvciBQUikuCisKKyAgICAgICAgQVBJIGRvYzogaHR0cHM6Ly9k
ZXZlbG9wZXIuZ2l0aHViLmNvbS92My9pc3N1ZXMvbGFiZWxzLyNyZW1vdmUtYS1sYWJlbC1mcm9t
LWFuLWlzc3VlCisgICAgICAgICIiIgorICAgICAgICBwYXRoID0gJy9yZXBvcy8lcy8lcy9pc3N1
ZXMvJWQvbGFiZWxzLyVzJyAlICgKKyAgICAgICAgICAgIFdQVF9HSF9PUkcsCisgICAgICAgICAg
ICBXUFRfR0hfUkVQT19OQU1FLAorICAgICAgICAgICAgbnVtYmVyLAorICAgICAgICAgICAgdXJs
bGliMi5xdW90ZShsYWJlbCksCisgICAgICAgICkKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJl
cXVlc3QocGF0aCwgbWV0aG9kPSdERUxFVEUnKQorCisgICAgICAgICMgVGhlIEdpdEh1YiBBUEkg
ZG9jdW1lbnRhdGlvbiBjbGFpbXMgdGhhdCB0aGlzIGVuZHBvaW50IHJldHVybnMgYSAyMDQKKyAg
ICAgICAgIyBvbiBzdWNjZXNzLiBIb3dldmVyIGluIHJlYWxpdHkgaXQgcmV0dXJucyBhIDIwMC4K
KyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgbm90IGluICgyMDAsIDIwNCk6CisgICAg
ICAgICAgICByYWlzZSBHaXRIdWJFcnJvcigoMjAwLCAyMDQpLCByZXNwb25zZS5zdGF0dXNfY29k
ZSwgJ3JlbW92ZSBsYWJlbCAlcyBmcm9tIGlzc3VlICVkJyAlIChsYWJlbCwgbnVtYmVyKSkKKwor
ICAgIGRlZiBtYWtlX3ByX2Zyb21faXRlbShzZWxmLCBpdGVtKToKKyAgICAgICAgbGFiZWxzID0g
W2xhYmVsWyduYW1lJ10gZm9yIGxhYmVsIGluIGl0ZW1bJ2xhYmVscyddXQorICAgICAgICByZXR1
cm4gUHVsbFJlcXVlc3QoCisgICAgICAgICAgICB0aXRsZT1pdGVtWyd0aXRsZSddLAorICAgICAg
ICAgICAgbnVtYmVyPWl0ZW1bJ251bWJlciddLAorICAgICAgICAgICAgYm9keT1pdGVtWydib2R5
J10sCisgICAgICAgICAgICBzdGF0ZT1pdGVtWydzdGF0ZSddLAorICAgICAgICAgICAgbGFiZWxz
PWxhYmVscykKKworICAgIEBtZW1vaXplZAorICAgIGRlZiBhbGxfcHVsbF9yZXF1ZXN0cyhzZWxm
KToKKyAgICAgICAgIiIiRmV0Y2hlcyBhbGwgKG9wZW4gYW5kIGNsb3NlZCkgUFJzIHdpdGggdGhl
IGV4cG9ydCBsYWJlbC4KKworICAgICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgUFJzIGlzIHBy
X2hpc3Rvcnlfd2luZG93LiBTZWFyY2ggZW5kcG9pbnQgaXMgdXNlZAorICAgICAgICBpbnN0ZWFk
IG9mIGxpc3RpbmcgUFJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZmlsdGVyIGJ5IGxhYmVscy4KKyAg
ICAgICAgQVBJIGRvYzogaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9zZWFyY2gvI3Nl
YXJjaC1pc3N1ZXMKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBsaXN0IG9mIFB1
bGxSZXF1ZXN0IG5hbWVkdHVwbGVzLgorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9ICgKKyAg
ICAgICAgICAgICcvc2VhcmNoL2lzc3VlcycKKyAgICAgICAgICAgICc/cT1yZXBvOnt9L3t9JTIw
dHlwZTpwciUyMGxhYmVsOnt9JworICAgICAgICAgICAgJyZwYWdlPTEnCisgICAgICAgICAgICAn
JnBlcl9wYWdlPXt9JworICAgICAgICApLmZvcm1hdCgKKyAgICAgICAgICAgIFdQVF9HSF9PUkcs
CisgICAgICAgICAgICBXUFRfR0hfUkVQT19OQU1FLAorICAgICAgICAgICAgRVhQT1JUX1BSX0xB
QkVMLAorICAgICAgICAgICAgbWluKE1BWF9QRVJfUEFHRSwgc2VsZi5fcHJfaGlzdG9yeV93aW5k
b3cpCisgICAgICAgICkKKyAgICAgICAgYWxsX3BycyA9IFtdCisgICAgICAgIHdoaWxlIHBhdGgg
aXMgbm90IE5vbmUgYW5kIGxlbihhbGxfcHJzKSA8IHNlbGYuX3ByX2hpc3Rvcnlfd2luZG93Ogor
ICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdHRVQnKQor
ICAgICAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAwOgorICAgICAgICAgICAg
ICAgIGlmIHJlc3BvbnNlLmRhdGFbJ2luY29tcGxldGVfcmVzdWx0cyddOgorICAgICAgICAgICAg
ICAgICAgICByYWlzZSBHaXRIdWJFcnJvcignY29tcGxldGUgcmVzdWx0cycsICdpbmNvbXBsZXRl
IHJlc3VsdHMnLCAnZmV0Y2ggYWxsIHB1bGwgcmVxdWVzdHMnLCBwYXRoKQorCisgICAgICAgICAg
ICAgICAgcHJzID0gW3NlbGYubWFrZV9wcl9mcm9tX2l0ZW0oaXRlbSkgZm9yIGl0ZW0gaW4gcmVz
cG9uc2UuZGF0YVsnaXRlbXMnXV0KKyAgICAgICAgICAgICAgICBhbGxfcHJzICs9IHByc1s6c2Vs
Zi5fcHJfaGlzdG9yeV93aW5kb3cgLSBsZW4oYWxsX3BycyldCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9yKDIwMCwgcmVzcG9uc2Uuc3RhdHVzX2Nv
ZGUsICdmZXRjaCBhbGwgcHVsbCByZXF1ZXN0cycsIHBhdGgpCisgICAgICAgICAgICBwYXRoID0g
c2VsZi5leHRyYWN0X2xpbmtfbmV4dChyZXNwb25zZS5nZXRoZWFkZXIoJ0xpbmsnKSkKKyAgICAg
ICAgcmV0dXJuIGFsbF9wcnMKKworICAgIGRlZiBnZXRfcHJfYnJhbmNoKHNlbGYsIHByX251bWJl
cik6CisgICAgICAgICIiIkdldHMgdGhlIHJlbW90ZSBicmFuY2ggbmFtZSBvZiBhIFBSLgorCisg
ICAgICAgIEFQSSBkb2M6IGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvcHVsbHMvI2dl
dC1hLXNpbmdsZS1wdWxsLXJlcXVlc3QKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAg
VGhlIHJlbW90ZSBicmFuY2ggbmFtZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhdGggPSAnL3Jl
cG9zL3t9L3t9L3B1bGxzL3t9Jy5mb3JtYXQoCisgICAgICAgICAgICBXUFRfR0hfT1JHLAorICAg
ICAgICAgICAgV1BUX0dIX1JFUE9fTkFNRSwKKyAgICAgICAgICAgIHByX251bWJlcgorICAgICAg
ICApCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHBhdGgsIG1ldGhvZD0nR0VUJykK
KworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICBy
YWlzZSBHaXRIdWJFcnJvcigyMDAsIHJlc3BvbnNlLnN0YXR1c19jb2RlLCAnZ2V0IHRoZSBicmFu
Y2ggb2YgUFIgJWQnICUgcHJfbnVtYmVyKQorCisgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRh
WydoZWFkJ11bJ3JlZiddCisKKyAgICBkZWYgaXNfcHJfbWVyZ2VkKHNlbGYsIHByX251bWJlcik6
CisgICAgICAgICIiIkNoZWNrcyBpZiBhIFBSIGhhcyBiZWVuIG1lcmdlZC4KKworICAgICAgICBB
UEkgZG9jOiBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL3B1bGxzLyNnZXQtaWYtYS1w
dWxsLXJlcXVlc3QtaGFzLWJlZW4tbWVyZ2VkCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAg
ICAgIFRydWUgaWYgbWVyZ2VkLCBGYWxzZSBpZiBub3QuCisgICAgICAgICIiIgorICAgICAgICBw
YXRoID0gJy9yZXBvcy8lcy8lcy9wdWxscy8lZC9tZXJnZScgJSAoCisgICAgICAgICAgICBXUFRf
R0hfT1JHLAorICAgICAgICAgICAgV1BUX0dIX1JFUE9fTkFNRSwKKyAgICAgICAgICAgIHByX251
bWJlcgorICAgICAgICApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3BvbnNlID0gc2Vs
Zi5yZXF1ZXN0KHBhdGgsIG1ldGhvZD0nR0VUJykKKyAgICAgICAgICAgIGlmIHJlc3BvbnNlLnN0
YXR1c19jb2RlID09IDIwNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBHaXRIdWJFcnJvcigyMDQsIHJlc3BvbnNl
LnN0YXR1c19jb2RlLCAnY2hlY2sgaWYgUFIgJWQgaXMgbWVyZ2VkJyAlIHByX251bWJlcikKKyAg
ICAgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmNv
ZGUgPT0gNDA0OgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIG1lcmdlX3ByKHNlbGYsIHByX251
bWJlcik6CisgICAgICAgICIiIk1lcmdlcyBhIFBSLgorCisgICAgICAgIElmIG1lcmdlIGNhbm5v
dCBiZSBwZXJmb3JtZWQsIE1lcmdlRXJyb3IgaXMgcmFpc2VkLiBHaXRIdWJFcnJvciBpcworICAg
ICAgICByYWlzZWQgd2hlbiBvdGhlciB1bmtub3duIGVycm9ycyBoYXBwZW4uCisKKyAgICAgICAg
QVBJIGRvYzogaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9wdWxscy8jbWVyZ2UtYS1w
dWxsLXJlcXVlc3QtbWVyZ2UtYnV0dG9uCisgICAgICAgICIiIgorICAgICAgICBwYXRoID0gJy9y
ZXBvcy8lcy8lcy9wdWxscy8lZC9tZXJnZScgJSAoCisgICAgICAgICAgICBXUFRfR0hfT1JHLAor
ICAgICAgICAgICAgV1BUX0dIX1JFUE9fTkFNRSwKKyAgICAgICAgICAgIHByX251bWJlcgorICAg
ICAgICApCisgICAgICAgIGJvZHkgPSB7CisgICAgICAgICAgICAnbWVyZ2VfbWV0aG9kJzogJ3Jl
YmFzZScsCisgICAgICAgIH0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwb25zZSA9
IHNlbGYucmVxdWVzdChwYXRoLCBtZXRob2Q9J1BVVCcsIGJvZHk9Ym9keSkKKyAgICAgICAgZXhj
ZXB0IHVybGxpYjIuSFRUUEVycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmNvZGUgPT0gNDA1
OgorICAgICAgICAgICAgICAgIHJhaXNlIE1lcmdlRXJyb3IocHJfbnVtYmVyKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0
YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9yKDIwMCwgcmVz
cG9uc2Uuc3RhdHVzX2NvZGUsICdtZXJnZSBQUiAlZCcgJSBwcl9udW1iZXIpCisKKyAgICBkZWYg
ZGVsZXRlX3JlbW90ZV9icmFuY2goc2VsZiwgcmVtb3RlX2JyYW5jaF9uYW1lKToKKyAgICAgICAg
IiIiRGVsZXRlcyBhIHJlbW90ZSBicmFuY2guCisKKyAgICAgICAgQVBJIGRvYzogaHR0cHM6Ly9k
ZXZlbG9wZXIuZ2l0aHViLmNvbS92My9naXQvcmVmcy8jZGVsZXRlLWEtcmVmZXJlbmNlCisgICAg
ICAgICIiIgorICAgICAgICBwYXRoID0gJy9yZXBvcy8lcy8lcy9naXQvcmVmcy9oZWFkcy8lcycg
JSAoCisgICAgICAgICAgICBXUFRfR0hfT1JHLAorICAgICAgICAgICAgV1BUX0dIX1JFUE9fTkFN
RSwKKyAgICAgICAgICAgIHJlbW90ZV9icmFuY2hfbmFtZQorICAgICAgICApCisgICAgICAgIHJl
c3BvbnNlID0gc2VsZi5yZXF1ZXN0KHBhdGgsIG1ldGhvZD0nREVMRVRFJykKKworICAgICAgICBp
ZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDQ6CisgICAgICAgICAgICByYWlzZSBHaXRIdWJF
cnJvcigyMDQsIHJlc3BvbnNlLnN0YXR1c19jb2RlLCAnZGVsZXRlIHJlbW90ZSBicmFuY2ggJXMn
ICUgcmVtb3RlX2JyYW5jaF9uYW1lKQorCisgICAgZGVmIHByX2Zvcl9jaHJvbWl1bV9jb21taXQo
c2VsZiwgY2hyb21pdW1fY29tbWl0KToKKyAgICAgICAgIiIiUmV0dXJucyBhIFBSIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIGdpdmVuIENocm9taXVtQ29tbWl0LCBvciBOb25lLiIiIgorICAgICAgICBw
dWxsX3JlcXVlc3QgPSBzZWxmLnByX3dpdGhfY2hhbmdlX2lkKGNocm9taXVtX2NvbW1pdC5jaGFu
Z2VfaWQoKSkKKyAgICAgICAgaWYgcHVsbF9yZXF1ZXN0OgorICAgICAgICAgICAgcmV0dXJuIHB1
bGxfcmVxdWVzdAorICAgICAgICAjIFRoZSBDaGFuZ2UgSUQgY2FuJ3QgYmUgdXNlZCBmb3IgY29t
bWl0cyBtYWRlIHZpYSBSaWV0dmVsZCwKKyAgICAgICAgIyBzbyB3ZSBmYWxsIGJhY2sgdG8gdHJ5
aW5nIHRvIHVzZSBjb21taXQgcG9zaXRpb24gaGVyZS4KKyAgICAgICAgIyBOb3RlIHRoYXQgR2Vy
cml0IHJldHVybnMgVG9UKzEgYXMgdGhlIGNvbW1pdCBwb3NpdGlvbnMgZm9yIGluLWZsaWdodAor
ICAgICAgICAjIENMcywgYnV0IHRoZXkgYXJlIHNjcnViYmVkIGZyb20gdGhlIFBSIGRlc2NyaXB0
aW9uIGFuZCBoZW5jZSB3b3VsZAorICAgICAgICAjIG5vdCBiZSBtaXNtYXRjaGVkIHRvIHJhbmRv
bSBDaHJvbWl1bSBjb21taXRzIGluIHRoZSBmYWxsYmFjay4KKyAgICAgICAgIyBUT0RPKHJvYmVy
dG1hKTogUmVtb3ZlIHRoaXMgZmFsbGJhY2sgYWZ0ZXIgUmlldHZlbGQgYmVjb21lcyByZWFkLW9u
bHkuCisgICAgICAgIHJldHVybiBzZWxmLnByX3dpdGhfcG9zaXRpb24oY2hyb21pdW1fY29tbWl0
LnBvc2l0aW9uKQorCisgICAgZGVmIHByX3dpdGhfY2hhbmdlX2lkKHNlbGYsIHRhcmdldF9jaGFu
Z2VfaWQpOgorICAgICAgICBmb3IgcHVsbF9yZXF1ZXN0IGluIHNlbGYuYWxsX3B1bGxfcmVxdWVz
dHMoKToKKyAgICAgICAgICAgICMgTm90ZTogU2VhcmNoIGFsbCAnQ2hhbmdlLUlkJ3Mgc28gdGhh
dCB3ZSBjYW4gbWFudWFsbHkgcHV0IG11bHRpcGxlCisgICAgICAgICAgICAjIENMcyBpbiBvbmUg
UFIuIChUaGUgZXhwb3J0ZXIgYWx3YXlzIGNyZWF0ZXMgb25lIFBSIGZvciBlYWNoIENMLikKKyAg
ICAgICAgICAgIGNoYW5nZV9pZHMgPSBzZWxmLmV4dHJhY3RfbWV0YWRhdGEoJ0NoYW5nZS1JZDog
JywgcHVsbF9yZXF1ZXN0LmJvZHksIGFsbF9tYXRjaGVzPVRydWUpCisgICAgICAgICAgICBpZiB0
YXJnZXRfY2hhbmdlX2lkIGluIGNoYW5nZV9pZHM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHB1
bGxfcmVxdWVzdAorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHByX3dpdGhfcG9zaXRp
b24oc2VsZiwgcG9zaXRpb24pOgorICAgICAgICBmb3IgcHVsbF9yZXF1ZXN0IGluIHNlbGYuYWxs
X3B1bGxfcmVxdWVzdHMoKToKKyAgICAgICAgICAgICMgU2FtZSBhcyBhYm92ZSwgc2VhcmNoIGFs
bCAnQ3ItQ29tbWl0LVBvc2l0aW9uJ3MuCisgICAgICAgICAgICBwcl9jb21taXRfcG9zaXRpb25z
ID0gc2VsZi5leHRyYWN0X21ldGFkYXRhKCdDci1Db21taXQtUG9zaXRpb246ICcsIHB1bGxfcmVx
dWVzdC5ib2R5LCBhbGxfbWF0Y2hlcz1UcnVlKQorICAgICAgICAgICAgaWYgcG9zaXRpb24gaW4g
cHJfY29tbWl0X3Bvc2l0aW9uczoKKyAgICAgICAgICAgICAgICByZXR1cm4gcHVsbF9yZXF1ZXN0
CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4dHJh
Y3RfbWV0YWRhdGEodGFnLCBjb21taXRfYm9keSwgYWxsX21hdGNoZXM9RmFsc2UpOgorICAgICAg
ICB2YWx1ZXMgPSBbXQorICAgICAgICBmb3IgbGluZSBpbiBjb21taXRfYm9keS5zcGxpdGxpbmVz
KCk6CisgICAgICAgICAgICBpZiBub3QgbGluZS5zdGFydHN3aXRoKHRhZyk6CisgICAgICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgICAgIHZhbHVlID0gbGluZVtsZW4odGFnKTpdCisgICAg
ICAgICAgICBpZiBhbGxfbWF0Y2hlczoKKyAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHZh
bHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAg
ICAgICAgcmV0dXJuIHZhbHVlcyBpZiBhbGxfbWF0Y2hlcyBlbHNlIE5vbmUKKworCitjbGFzcyBK
U09OUmVzcG9uc2Uob2JqZWN0KToKKyAgICAiIiJBbiBIVFRQIHJlc3BvbnNlIGNvbnRhaW5pbmcg
SlNPTiBkYXRhLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhd19yZXNwb25zZSk6Cisg
ICAgICAgICIiIkluaXRpYWxpemVzIGEgSlNPTlJlc3BvbnNlIGluc3RhbmNlLgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgICByYXdfcmVzcG9uc2U6IGEgcmVzcG9uc2Ugb2JqZWN0IHJldHVy
bmVkIGJ5IG9wZW4gbWV0aG9kcyBpbiB1cmxsaWIyLgorICAgICAgICAiIiIKKyAgICAgICAgc2Vs
Zi5fcmF3X3Jlc3BvbnNlID0gcmF3X3Jlc3BvbnNlCisgICAgICAgIHNlbGYuc3RhdHVzX2NvZGUg
PSByYXdfcmVzcG9uc2UuZ2V0Y29kZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYu
ZGF0YSA9IGpzb24ubG9hZChyYXdfcmVzcG9uc2UpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9y
OgorICAgICAgICAgICAgc2VsZi5kYXRhID0gTm9uZQorCisgICAgZGVmIGdldGhlYWRlcihzZWxm
LCBoZWFkZXIpOgorICAgICAgICAiIiJHZXRzIHRoZSB2YWx1ZSBvZiB0aGUgaGVhZGVyIHdpdGgg
dGhlIGdpdmVuIG5hbWUuCisKKyAgICAgICAgRGVsZWdhdGVzIHRvIEhUVFBNZXNzYWdlLmdldGhl
YWRlcigpLCB3aGljaCBpcyBjYXNlLWluc2Vuc2l0aXZlLiIiIgorICAgICAgICByZXR1cm4gc2Vs
Zi5fcmF3X3Jlc3BvbnNlLmluZm8oKS5nZXRoZWFkZXIoaGVhZGVyKQorCisKK2NsYXNzIEdpdEh1
YkVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiUmFpc2VkIHdoZW4gYW4gR2l0SHViIHJldHVybnMg
YSBub24tT0sgcmVzcG9uc2Ugc3RhdHVzIGZvciBhIHJlcXVlc3QuIiIiCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgZXhwZWN0ZWQsIHJlY2VpdmVkLCBhY3Rpb24sIGV4dHJhX2RhdGE9Tm9uZSk6
CisgICAgICAgIG1lc3NhZ2UgPSAnRXhwZWN0ZWQge30sIGJ1dCByZWNlaXZlZCB7fSBmcm9tIEdp
dEh1YiB3aGVuIGF0dGVtcHRpbmcgdG8ge30nLmZvcm1hdCgKKyAgICAgICAgICAgIGV4cGVjdGVk
LCByZWNlaXZlZCwgYWN0aW9uCisgICAgICAgICkKKyAgICAgICAgaWYgZXh0cmFfZGF0YToKKyAg
ICAgICAgICAgIG1lc3NhZ2UgKz0gJ1xuJyArIHN0cihleHRyYV9kYXRhKQorICAgICAgICBzdXBl
cihHaXRIdWJFcnJvciwgc2VsZikuX19pbml0X18obWVzc2FnZSkKKworCitjbGFzcyBNZXJnZUVy
cm9yKEdpdEh1YkVycm9yKToKKyAgICAiIiJBbiBlcnJvciBzcGVjaWZpY2FsbHkgZm9yIHdoZW4g
YSBQUiBjYW5ub3QgYmUgbWVyZ2VkLgorCisgICAgVGhpcyBzaG91bGQgb25seSBiZSB0aHJvd24g
d2hlbiBHaXRIdWIgcmV0dXJucyBzdGF0dXMgY29kZSA0MDUsCisgICAgaW5kaWNhdGluZyB0aGF0
IHRoZSBQUiBjb3VsZCBub3QgYmUgbWVyZ2VkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHByX251bWJlcik6CisgICAgICAgIHN1cGVyKE1lcmdlRXJyb3IsIHNlbGYpLl9faW5p
dF9fKDIwMCwgNDA1LCAnbWVyZ2UgUFIgJWQnICUgcHJfbnVtYmVyKQorCisKK1B1bGxSZXF1ZXN0
ID0gbmFtZWR0dXBsZSgnUHVsbFJlcXVlc3QnLCBbJ3RpdGxlJywgJ251bWJlcicsICdib2R5Jywg
J3N0YXRlJywgJ2xhYmVscyddKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93
M2Mvd3B0X2dpdGh1Yl9tb2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dp
dGh1Yl9tb2NrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmZDZlYTdkZWE2MWYxMTcyZGQ0ZWYxOWU4MzEzZGRh
MzUxMDhjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy93
cHRfZ2l0aHViX21vY2sucHkKQEAgLTAsMCArMSwxMjUgQEAKKyMgQ29weXJpZ2h0IDIwMTcgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
Citmcm9tIHdlYmtpdHB5LnczYy53cHRfZ2l0aHViIGltcG9ydCBNZXJnZUVycm9yLCBXUFRHaXRI
dWIKKworCitjbGFzcyBNb2NrV1BUR2l0SHViKG9iamVjdCk6CisKKyAgICAjIFNvbWUgdW51c2Vk
IGFyZ3VtZW50cyBtYXkgYmUgaW5jbHVkZWQgdG8gbWF0Y2ggdGhlIHJlYWwgY2xhc3MncyBBUEku
CisgICAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50CisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcHVsbF9yZXF1ZXN0cywgdW5zdWNjZXNzZnVsX21lcmdlX2luZGV4PS0xLCBjcmVh
dGVfcHJfZmFpbF9pbmRleD0tMSwgbWVyZ2VkX2luZGV4PS0xKToKKyAgICAgICAgIiIiSW5pdGlh
bGl6ZXMgYSBtb2NrIFdQVEdpdEh1Yi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcHVs
bF9yZXF1ZXN0czogQSBsaXN0IG9mIHdwdF9naXRodWIuUHVsbFJlcXVlc3QuCisgICAgICAgICAg
ICB1bnN1Y2Nlc3NmdWxfbWVyZ2VfaW5kZXg6IFRoZSBpbmRleCB0byB0aGUgUFIgaW4gcHVsbF9y
ZXF1ZXN0cyB0aGF0CisgICAgICAgICAgICAgICAgY2Fubm90IGJlIG1lcmdlZC4gKC0xIG1lYW5z
IGFsbCBjYW4gYmUgbWVyZ2VkLikKKyAgICAgICAgICAgIGNyZWF0ZV9wcl9mYWlsX2luZGV4OiBU
aGUgMC1iYXNlZCBpbmRleCBvZiB3aGljaCBQUiBjcmVhdGlvbiByZXF1ZXN0CisgICAgICAgICAg
ICAgICAgd2lsbCBmYWlsLiAoLTEgbWVhbnMgYWxsIHdpbGwgc3VjY2VlZC4pCisgICAgICAgICAg
ICBtZXJnZWRfaW5kZXg6IFRoZSBpbmRleCB0byB0aGUgUFIgaW4gcHVsbF9yZXF1ZXN0cyB0aGF0
IGlzIGFscmVhZHkKKyAgICAgICAgICAgICAgICBtZXJnZWQuICgtMSBtZWFucyBub25lIGlzIG1l
cmdlZC4pCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnB1bGxfcmVxdWVzdHMgPSBwdWxsX3Jl
cXVlc3RzCisgICAgICAgIHNlbGYuY2FsbHMgPSBbXQorICAgICAgICBzZWxmLnB1bGxfcmVxdWVz
dHNfY3JlYXRlZCA9IFtdCisgICAgICAgIHNlbGYucHVsbF9yZXF1ZXN0c19tZXJnZWQgPSBbXQor
ICAgICAgICBzZWxmLnVuc3VjY2Vzc2Z1bF9tZXJnZV9pbmRleCA9IHVuc3VjY2Vzc2Z1bF9tZXJn
ZV9pbmRleAorICAgICAgICBzZWxmLmNyZWF0ZV9wcl9pbmRleCA9IDAKKyAgICAgICAgc2VsZi5j
cmVhdGVfcHJfZmFpbF9pbmRleCA9IGNyZWF0ZV9wcl9mYWlsX2luZGV4CisgICAgICAgIHNlbGYu
bWVyZ2VkX2luZGV4ID0gbWVyZ2VkX2luZGV4CisKKyAgICBkZWYgYWxsX3B1bGxfcmVxdWVzdHMo
c2VsZiwgbGltaXQ9MzApOgorICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnYWxsX3B1bGxfcmVx
dWVzdHMnKQorICAgICAgICByZXR1cm4gc2VsZi5wdWxsX3JlcXVlc3RzCisKKyAgICBkZWYgaXNf
cHJfbWVyZ2VkKHNlbGYsIG51bWJlcik6CisgICAgICAgIGZvciBpbmRleCwgcHIgaW4gZW51bWVy
YXRlKHNlbGYucHVsbF9yZXF1ZXN0cyk6CisgICAgICAgICAgICBpZiBwci5udW1iZXIgPT0gbnVt
YmVyOgorICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA9PSBzZWxmLm1lcmdlZF9pbmRleAor
ICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBtZXJnZV9wcihzZWxmLCBudW1iZXIpOgor
ICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnbWVyZ2VfcHInKQorCisgICAgICAgIGZvciBpbmRl
eCwgcHIgaW4gZW51bWVyYXRlKHNlbGYucHVsbF9yZXF1ZXN0cyk6CisgICAgICAgICAgICBpZiBw
ci5udW1iZXIgPT0gbnVtYmVyIGFuZCBpbmRleCA9PSBzZWxmLnVuc3VjY2Vzc2Z1bF9tZXJnZV9p
bmRleDoKKyAgICAgICAgICAgICAgICByYWlzZSBNZXJnZUVycm9yKG51bWJlcikKKworICAgICAg
ICBzZWxmLnB1bGxfcmVxdWVzdHNfbWVyZ2VkLmFwcGVuZChudW1iZXIpCisKKyAgICBkZWYgY3Jl
YXRlX3ByKHNlbGYsIHJlbW90ZV9icmFuY2hfbmFtZSwgZGVzY190aXRsZSwgYm9keSk6CisgICAg
ICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdjcmVhdGVfcHInKQorCisgICAgICAgIGlmIHNlbGYuY3Jl
YXRlX3ByX2ZhaWxfaW5kZXggIT0gc2VsZi5jcmVhdGVfcHJfaW5kZXg6CisgICAgICAgICAgICBz
ZWxmLnB1bGxfcmVxdWVzdHNfY3JlYXRlZC5hcHBlbmQoKHJlbW90ZV9icmFuY2hfbmFtZSwgZGVz
Y190aXRsZSwgYm9keSkpCisKKyAgICAgICAgc2VsZi5jcmVhdGVfcHJfaW5kZXggKz0gMQorICAg
ICAgICByZXR1cm4gNTY3OAorCisgICAgZGVmIHVwZGF0ZV9wcihzZWxmLCBwcl9udW1iZXIsIGRl
c2NfdGl0bGUsIGJvZHkpOgorICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgndXBkYXRlX3ByJykK
KyAgICAgICAgcmV0dXJuIDU2NzgKKworICAgIGRlZiBkZWxldGVfcmVtb3RlX2JyYW5jaChzZWxm
LCBfKToKKyAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ2RlbGV0ZV9yZW1vdGVfYnJhbmNoJykK
KworICAgIGRlZiBhZGRfbGFiZWwoc2VsZiwgXywgbGFiZWwpOgorICAgICAgICBzZWxmLmNhbGxz
LmFwcGVuZCgnYWRkX2xhYmVsICIlcyInICUgbGFiZWwpCisKKyAgICBkZWYgcmVtb3ZlX2xhYmVs
KHNlbGYsIF8sIGxhYmVsKToKKyAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ3JlbW92ZV9sYWJl
bCAiJXMiJyAlIGxhYmVsKQorCisgICAgZGVmIGdldF9wcl9icmFuY2goc2VsZiwgbnVtYmVyKToK
KyAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ2dldF9wcl9icmFuY2gnKQorICAgICAgICByZXR1
cm4gJ2Zha2VfYnJhbmNoX1BSXyVkJyAlIG51bWJlcgorCisgICAgZGVmIHByX2Zvcl9jaHJvbWl1
bV9jb21taXQoc2VsZiwgY29tbWl0KToKKyAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ3ByX2Zv
cl9jaHJvbWl1bV9jb21taXQnKQorICAgICAgICBmb3IgcHIgaW4gc2VsZi5wdWxsX3JlcXVlc3Rz
OgorICAgICAgICAgICAgaWYgY29tbWl0LmNoYW5nZV9pZCgpIGluIHByLmJvZHk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHByCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcHJfd2l0
aF9wb3NpdGlvbihzZWxmLCBwb3NpdGlvbik6CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdw
cl93aXRoX3Bvc2l0aW9uJykKKyAgICAgICAgZm9yIHByIGluIHNlbGYucHVsbF9yZXF1ZXN0czoK
KyAgICAgICAgICAgIGlmIHBvc2l0aW9uIGluIHByLmJvZHk6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHByCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcHJfd2l0aF9jaGFuZ2VfaWQo
c2VsZiwgY2hhbmdlX2lkKToKKyAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ3ByX3dpdGhfY2hh
bmdlX2lkJykKKyAgICAgICAgZm9yIHByIGluIHNlbGYucHVsbF9yZXF1ZXN0czoKKyAgICAgICAg
ICAgIGlmIGNoYW5nZV9pZCBpbiBwci5ib2R5OgorICAgICAgICAgICAgICAgIHJldHVybiBwcgor
ICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGV4dHJhY3RfbWV0YWRhdGEoc2VsZiwgdGFn
LCBjb21taXRfYm9keSwgYWxsX21hdGNoZXM9RmFsc2UpOgorICAgICAgICByZXR1cm4gV1BUR2l0
SHViLmV4dHJhY3RfbWV0YWRhdGEodGFnLCBjb21taXRfYm9keSwgYWxsX21hdGNoZXMpCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy93cHRfZ2l0aHViX3VuaXR0ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dpdGh1Yl91bml0dGVzdC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jOTljZjhkMDJhYjRiYzE0YTVlZmJhNWRhYWZmOTU1Mzk1MTg4N2VhCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dpdGh1Yl91bml0dGVz
dC5weQpAQCAtMCwwICsxLDQ4IEBACisjIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGJhc2U2
NAoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBv
cnQgTW9ja0hvc3QKK2Zyb20gd2Via2l0cHkudzNjLndwdF9naXRodWIgaW1wb3J0IFdQVEdpdEh1
YiwgTWVyZ2VFcnJvcgorCisKK2NsYXNzIFdQVEdpdEh1YlRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLndwdF9naXRodWIgPSBXUFRH
aXRIdWIoTW9ja0hvc3QoKSwgdXNlcj0ncnV0YWJhZ2EnLCB0b2tlbj0nZGVjYWZiYWQnKQorCisg
ICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndw
dF9naXRodWIudXNlciwgJ3J1dGFiYWdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
LndwdF9naXRodWIudG9rZW4sICdkZWNhZmJhZCcpCisKKyAgICBkZWYgdGVzdF9hdXRoX3Rva2Vu
KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi53cHRf
Z2l0aHViLmF1dGhfdG9rZW4oKSwKKyAgICAgICAgICAgIGJhc2U2NC5lbmNvZGVzdHJpbmcoJ3J1
dGFiYWdhOmRlY2FmYmFkJykuc3RyaXAoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329587</attachid>
            <date>2017-12-16 17:34:26 -0800</date>
            <delta_ts>2017-12-16 18:54:17 -0800</delta_ts>
            <desc>Fixing refs/heads regression</desc>
            <filename>bug-169462-20171216173425.patch</filename>
            <type>text/plain</type>
            <size>61706</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1OTk3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTRkY2IzMDZjYWU1YjdjNTA3ZGZkNTUzODkxNDMzZmRi
YTE2NDY5ZS4uZDQxOWM0MTAwNWFkNjMyM2NkMjQ2MDEwZjY1Mjk5ZmMxMDlmYjYzYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgx
IEBACisyMDE3LTEyLTE2ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAg
ICAgICBBZGQgYSBzY3JpcHQgdG8gYXV0b21hdGUgVzNjIHdlYi1wbGF0Zm9ybS10ZXN0cyBwdWxs
IHJlcXVlc3QgY3JlYXRpb25zIGZyb20gV2ViS2l0IGNvbW1pdHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQ2MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEFkZGluZyBzb21lIGdpdCBoZWxwZXIgcm91dGlu
ZXMgdXNlZCBieSBXUFQgZXhwb3J0ZXIuCisgICAgICAgIENvcHlpbmcgV1BUIGdpdGh1YiB1dGls
aXR5IGZpbGVzIGZyb20gQ2hyb21pdW0uCisgICAgICAgIFVwZGF0aW5nIHdlYi5weS93ZWJfbW9j
ay5weSB0byBjb3BlIHdpdGggdGhlc2UgbmV3IGZpbGVzLgorCisgICAgICAgIEltcGxlbWVudGlu
ZyB0ZXN0IGV4cG9ydGVyIGluIHRlc3RfZXhwb3J0ZXIucHkuCisgICAgICAgIFRoaXMgc2NyaXB0
IHRha2VzIGEgV2ViS2l0IGNvbW1pdCBhcyBpbnB1dCBhbmQgd2lsbCBjcmVhdGUgYSBXUFQgY29t
bWl0IGluIGEgbG9jYWwgV1BUIGNsb25lLgorICAgICAgICBJdCB3aWxsIHRoZW4gcHVzaCB0aGUg
Y29tbWl0IHRvIGEgcHVibGljIEdpdEh1YiByZXBvc2l0b3J5IGlkZW50aWZpZWQgYnkgYSB1c2Vy
bmFtZSBwYXJhbWV0ZXIuCisgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIHBhc3NlZCB0aHJvdWdo
IHRoZSBjb21tYW5kIGxpbmUgb3Igc2VhcmNoZWQgdGhyb3VnaCBnaXQgY29uZmlnL2Vudmlyb25t
ZW50IHZhcmlhYmxlcy4KKworICAgICAgICBUaGUgc2NyaXB0IGNhbiBvcHRpb25hbGx5IGNyZWF0
ZSBhIHB1bGwgcmVxdWVzdCB0byB0aGUgb2ZmaWNpYWwgV1BUIEdpdEh1YiByZXBvc2l0b3J5Lgor
ICAgICAgICBVc2VyIG11c3QgcHJvdmlkZSBhIEdpdEh1YiB0b2tlbiB0byBhbGxvdyB0aGUgc2Ny
aXB0IHRvIG1ha2UgdGhlIFBSIG9uIGJlaGFsZiBvZiB0aGUgdXNlci4KKyAgICAgICAgSW4gdGhh
dCBjYXNlLCBhIGNvbW1lbnQgaXMgYWRkZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYnVnemlsbGEg
aWYgYSBidWcgSUQgaXMgZ2l2ZW4gb3IgY2FuIGJlIGZvdW5kIGZyb20gdGhlIGNoYW5nZSBsb2cs
CisgICAgICAgIHRvIGVhc2lseSBsaW5rIHRoZSBwdWxsIHJlcXVlc3Qgd2l0aCB0aGUgYnVnemls
bGEgYnVnLgorCisgICAgICAgICogU2NyaXB0cy9leHBvcnQtdzNjLXRlc3QtY2hhbmdlczogQWRk
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5w
eToKKyAgICAgICAgKEdpdC5yZXNldF9oYXJkKToKKyAgICAgICAgKEdpdCk6CisgICAgICAgIChH
aXQuYW0pOgorICAgICAgICAoR2l0LmNvbW1pdCk6CisgICAgICAgIChHaXQuZm9ybWF0X3BhdGNo
KToKKyAgICAgICAgKEdpdC5yZXF1ZXN0X3B1bGwpOgorICAgICAgICAoR2l0LnJlbW90ZSk6Cisg
ICAgICAgIChHaXQucHVzaCk6CisgICAgICAgIChHaXQuY2hlY2tvdXRfbmV3X2JyYW5jaCk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weToKKyAgICAgICAgKFdl
Yi5yZXF1ZXN0KTogQ29waWVkIGZyb20gQ2hyb21pdW0uCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vbmV0L3dlYl9tb2NrLnB5OiBDb3BpZWQgbmVlZGVkIGNvZGUgZnJvbSBDaHJv
bWl1bS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyLnB5OiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RFeHBvcnRlcik6CisgICAgICAgIChUZXN0RXhwb3J0ZXIuX19p
bml0X18pOgorICAgICAgICAoVGVzdEV4cG9ydGVyLl9pbml0X3JlcG9zaXRvcnkpOgorICAgICAg
ICAoVGVzdEV4cG9ydGVyLmRvd25sb2FkX2FuZF9jb21taXRfcGF0Y2gpOgorICAgICAgICAoVGVz
dEV4cG9ydGVyLmNsZWFuKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfYnJhbmNoX3dp
dGhfcGF0Y2gpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLnB1c2hfdG9fcHVibGljX3JlcG9zaXRv
cnkpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLm1ha2VfcHVsbF9yZXF1ZXN0KToKKyAgICAgICAg
KFRlc3RFeHBvcnRlci5kZWxldGVfbG9jYWxfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRl
ci5jcmVhdGVfZ2l0X3BhdGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlci5jcmVhdGVfdXBsb2Fk
X3JlbW90ZV9pZl9uZWVkZWQpOgorICAgICAgICAoVGVzdEV4cG9ydGVyLmRvX2V4cG9ydCk6Cisg
ICAgICAgIChwYXJzZV9hcmdzKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nKToKKyAgICAg
ICAgKGNvbmZpZ3VyZV9sb2dnaW5nLkxvZ0hhbmRsZXIpOgorICAgICAgICAoY29uZmlndXJlX2xv
Z2dpbmcuTG9nSGFuZGxlci5mb3JtYXQpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS93M2MvdGVzdF9leHBvcnRlcl91bml0dGVzdC5weTogQWRkZWQuCisgICAg
ICAgIChUZXN0RXhwb3J0ZXJUZXN0KToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1
Z3ppbGxhKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLl9faW5pdF9f
KToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLmZldGNoX2J1Z19kaWN0
aW9uYXJ5KToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLnBvc3RfY29t
bWVudF90b19idWcpOgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC5Nb2NrR2l0KToKKyAgICAg
ICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5jbG9uZSk6CisgICAgICAgIChUZXN0RXhwb3J0
ZXJUZXN0Lk1vY2tHaXQuX19pbml0X18pOgorICAgICAgICAoVGVzdEV4cG9ydGVyVGVzdC5Nb2Nr
R2l0LmZldGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5jaGVja291dCk6
CisgICAgICAgIChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQucmVzZXRfaGFyZCk6CisgICAgICAg
IChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQucHVzaCk6CisgICAgICAgIChUZXN0RXhwb3J0ZXJU
ZXN0Lk1vY2tHaXQuZm9ybWF0X3BhdGNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9j
a0dpdC5kZWxldGVfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5j
aGVja291dF9uZXdfYnJhbmNoKToKKyAgICAgICAgKFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5h
bSk6CisgICAgICAgIChUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQuY29tbWl0KToKKyAgICAgICAg
KFRlc3RFeHBvcnRlclRlc3QuTW9ja0dpdC5yZW1vdGUpOgorICAgICAgICAoVGVzdEV4cG9ydGVy
VGVzdC50ZXN0X2V4cG9ydCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93M2MvY29tbW9u
LnB5OiBDb3BpZWQgZnJvbSBjaHJvbWl1bS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3cz
Yy93cHRfZ2l0aHViLnB5OiBDb3BpZWQgZnJvbSBjaHJvbWl1bS4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3czYy93cHRfZ2l0aHViX21vY2sucHk6IENvcGllZCBmcm9tIGNocm9taXVtLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWJfdW5pdHRlc3QucHk6IENv
cGllZCBmcm9tIGNocm9taXVtLgorCiAyMDE3LTEyLTE1ICBEYXZpZCBRdWVzYWRhICA8ZGF2aWRf
cXVlc2FkYUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYWRkaW5nIG15c2VsZiB0
byBjb250cmlidXRvcnMuanNvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9leHBvcnQtdzNj
LXRlc3QtY2hhbmdlcyBiL1Rvb2xzL1NjcmlwdHMvZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZGRkM2FiMGZlYmMyZjAyYzlhNzM4MzBhNjA0ZDEzY2NkM2E4NzY1YQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvZXhwb3J0LXczYy10ZXN0LWNoYW5nZXMKQEAgLTAs
MCArMSwzNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisjICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisjICAgIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKyMgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzCisjICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAi
QVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisjIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwKKyMgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisjIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorIyBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyMgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCisjIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkudzNjIGlt
cG9ydCB0ZXN0X2V4cG9ydGVyCisKKworc3lzLmV4aXQodGVzdF9leHBvcnRlci5tYWluKHN5cy5h
cmd2WzE6XSwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVycikpCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQppbmRleCA3OTFhODQyNmE5ZWMzYTIz
ZmNlOTM2ZTcyODc3NjNkNWJkZGRiM2NiLi41NjlhYjM2YWZjYTQwNTY1NzZlZWIyMDBhMTk5NTRk
YjZlZDUyNTdlIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20vZ2l0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9naXQucHkKQEAgLTI5LDcgKzI5LDYgQEAKIAogaW1wb3J0IGRhdGV0aW1lCiBpbXBv
cnQgbG9nZ2luZwotaW1wb3J0IG9zCiBpbXBvcnQgcmUKIAogZnJvbSB3ZWJraXRweS5jb21tb24u
bWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCkBAIC0zNyw3ICszNiw3IEBAIGZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKIAog
ZnJvbSAuY29tbWl0bWVzc2FnZSBpbXBvcnQgQ29tbWl0TWVzc2FnZQogZnJvbSAuc2NtIGltcG9y
dCBBdXRoZW50aWNhdGlvbkVycm9yLCBTQ00sIGNvbW1pdF9lcnJvcl9oYW5kbGVyCi1mcm9tIC5z
dm4gaW1wb3J0IFNWTiwgU1ZOUmVwb3NpdG9yeQorZnJvbSAuc3ZuIGltcG9ydCBTVk5SZXBvc2l0
b3J5CiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIApAQCAtNTA3LDExICs1
MDYsMTEgQEAgY2xhc3MgR2l0KFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVmIGRlaW5pdF9z
dWJtb2R1bGVzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ3N1Ym1vZHVs
ZScsICdkZWluaXQnLCAnLWYnLCAnLiddKQogCi0gICAgZGVmIF9icmFuY2hfcmVmX2V4aXN0cyhz
ZWxmLCBicmFuY2hfcmVmKToKKyAgICBkZWYgYnJhbmNoX3JlZl9leGlzdHMoc2VsZiwgYnJhbmNo
X3JlZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0KFsnc2hvdy1yZWYnLCAnLS1xdWll
dCcsICctLXZlcmlmeScsIGJyYW5jaF9yZWZdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpID09IDAK
IAogICAgIGRlZiBkZWxldGVfYnJhbmNoKHNlbGYsIGJyYW5jaF9uYW1lKToKLSAgICAgICAgaWYg
c2VsZi5fYnJhbmNoX3JlZl9leGlzdHMoJ3JlZnMvaGVhZHMvJyArIGJyYW5jaF9uYW1lKToKKyAg
ICAgICAgaWYgc2VsZi5icmFuY2hfcmVmX2V4aXN0cygncmVmcy9oZWFkcy8nICsgYnJhbmNoX25h
bWUpOgogICAgICAgICAgICAgc2VsZi5fcnVuX2dpdChbJ2JyYW5jaCcsICctRCcsIGJyYW5jaF9u
YW1lXSkKIAogICAgIGRlZiByZW1vdGVfbWVyZ2VfYmFzZShzZWxmKToKQEAgLTUyMiw3ICs1MjEs
NyBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICAgICAgcmVtb3RlX2JyYW5j
aF9yZWZzID0gc2VsZi5yZWFkX2dpdF9jb25maWcoJ3N2bi1yZW1vdGUuc3ZuLmZldGNoJywgY3dk
PXNlbGYuY2hlY2tvdXRfcm9vdCwgZXhlY3V0aXZlPXNlbGYuX2V4ZWN1dGl2ZSkKICAgICAgICAg
aWYgbm90IHJlbW90ZV9icmFuY2hfcmVmczoKICAgICAgICAgICAgIHJlbW90ZV9tYXN0ZXJfcmVm
ID0gJ3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyJwotICAgICAgICAgICAgaWYgbm90IHNlbGYu
X2JyYW5jaF9yZWZfZXhpc3RzKHJlbW90ZV9tYXN0ZXJfcmVmKToKKyAgICAgICAgICAgIGlmIG5v
dCBzZWxmLmJyYW5jaF9yZWZfZXhpc3RzKHJlbW90ZV9tYXN0ZXJfcmVmKToKICAgICAgICAgICAg
ICAgICByYWlzZSBTY3JpcHRFcnJvcihtZXNzYWdlPSJDYW4ndCBmaW5kIGEgYnJhbmNoIHRvIGRp
ZmYgYWdhaW5zdC4gc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggaXMgbm90IGluIHRoZSBnaXQgY29uZmln
IGFuZCAlcyBkb2VzIG5vdCBleGlzdCIgJSByZW1vdGVfbWFzdGVyX3JlZikKICAgICAgICAgICAg
IHJldHVybiByZW1vdGVfbWFzdGVyX3JlZgogCkBAIC01ODQsNiArNTgzLDM3IEBAIGNsYXNzIEdp
dChTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgIGRlZiBmZXRjaChzZWxmLCByZW1vdGU9J29yaWdp
bicpOgogICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ2ZldGNoJywgcmVtb3RlXSkKIAor
ICAgICMgUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgY29tbWl0LgorICAgIGRl
ZiByZXNldF9oYXJkKHNlbGYsIGNvbW1pdCk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0
KFsncmVzZXQnLCAnLS1oYXJkJywgY29tbWl0XSkKKworICAgIGRlZiBhcHBseV9tYWlsX3BhdGNo
KHNlbGYsIG9wdGlvbnMpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ2FwcGx5J10g
KyBvcHRpb25zKQorCisgICAgZGVmIGNvbW1pdChzZWxmLCBvcHRpb25zKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3J1bl9naXQoWydjb21taXQnXSArIG9wdGlvbnMpCisKKyAgICBkZWYgZm9ybWF0
X3BhdGNoKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ2Zv
cm1hdC1wYXRjaCddICsgb3B0aW9ucykKKworICAgIGRlZiByZXF1ZXN0X3B1bGwoc2VsZiwgb3B0
aW9ucyk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0KFsncmVxdWVzdC1wdWxsJ10gKyBv
cHRpb25zKQorCisgICAgZGVmIHJlbW90ZShzZWxmLCBvcHRpb25zKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3J1bl9naXQoWydyZW1vdGUnXSArIG9wdGlvbnMpCisKKyAgICBkZWYgcHVzaChzZWxm
LCBvcHRpb25zKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWydwdXNoJ10gKyBvcHRp
b25zKQorCisgICAgZGVmIGxvY2FsX2NvbmZpZyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4g
c2VsZi5fcnVuX2dpdChbJ2NvbmZpZycsICctLWdldCcsICctLWxvY2FsJywga2V5XSwgZXJyb3Jf
aGFuZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vycm9yKQorCisgICAgZGVmIHNldF9sb2NhbF9jb25m
aWcoc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fZ2l0KFsnY29u
ZmlnJywgJy0tYWRkJywgJy0tbG9jYWwnLCBrZXksIHZhbHVlXSwgZXJyb3JfaGFuZGxlcj1FeGVj
dXRpdmUuaWdub3JlX2Vycm9yKQorCisgICAgZGVmIGNoZWNrb3V0X25ld19icmFuY2goc2VsZiwg
YnJhbmNoX25hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJ2NoZWNrb3V0Jywg
Jy1iJywgYnJhbmNoX25hbWVdKQorCiAgICAgZGVmIGNoZWNrb3V0KHNlbGYsIHJldmlzaW9uLCBx
dWlldD1Ob25lKToKICAgICAgICAgY29tbWFuZCA9IFsnY2hlY2tvdXQnLCByZXZpc2lvbl0KICAg
ICAgICAgaWYgcXVpZXQ6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9uZXQvd2ViLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3dlYi5weQpp
bmRleCBiOGEwNmU1NzQ2OGQwNWYwNGI2OGYxMjlkY2RlNmFjYTA4Nzc0NzBiLi44NzlhYTA3YzE2
YzhkNjYzNzY0MzZmODYxMTQ4ZWVhZjU1M2YyMzQ4IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9uZXQvd2ViLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL25ldC93ZWIucHkKQEAgLTM0LDMgKzM0LDEzIEBAIGZyb20gd2Via2l0cHkuY29tbW9u
Lm5ldC5uZXR3b3JrdHJhbnNhY3Rpb24gaW1wb3J0IE5ldHdvcmtUcmFuc2FjdGlvbgogY2xhc3Mg
V2ViKG9iamVjdCk6CiAgICAgZGVmIGdldF9iaW5hcnkoc2VsZiwgdXJsLCBjb252ZXJ0XzQwNF90
b19Ob25lPUZhbHNlKToKICAgICAgICAgcmV0dXJuIE5ldHdvcmtUcmFuc2FjdGlvbihjb252ZXJ0
XzQwNF90b19Ob25lPWNvbnZlcnRfNDA0X3RvX05vbmUpLnJ1bihsYW1iZGE6IHVybGxpYjIudXJs
b3Blbih1cmwpLnJlYWQoKSkKKworICAgIGRlZiByZXF1ZXN0KHNlbGYsIG1ldGhvZCwgdXJsLCBk
YXRhLCBoZWFkZXJzPU5vbmUpOgorICAgICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5l
cih1cmxsaWIyLkhUVFBIYW5kbGVyKQorICAgICAgICByZXF1ZXN0ID0gdXJsbGliMi5SZXF1ZXN0
KHVybD11cmwsIGRhdGE9ZGF0YSkKKyAgICAgICAgcmVxdWVzdC5nZXRfbWV0aG9kID0gbGFtYmRh
OiBtZXRob2QKKworICAgICAgICBpZiBoZWFkZXJzOgorICAgICAgICAgICAgZm9yIGtleSwgdmFs
dWUgaW4gaGVhZGVycy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHJlcXVlc3QuYWRkX2hlYWRl
cihrZXksIHZhbHVlKQorICAgICAgICByZXR1cm4gb3BlbmVyLm9wZW4ocmVxdWVzdCkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC93ZWJfbW9jay5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC93ZWJfbW9jay5weQppbmRleCA2ZjA5YmE0
NGQwY2VlN2FkYjg4ZDE0YzU3NDEzYzcwYmNjZjM4YjNlLi5iNDEwNTk5ODlhY2UxNTI5NmE5YTk4
ZTNlNWE1Njk2MjkwNDFmNTU2IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9uZXQvd2ViX21vY2sucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bmV0L3dlYl9tb2NrLnB5CkBAIC0yNywxMiArMjcsMTMgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1w
b3J0IFN0cmluZ0lPCi0KK2ltcG9ydCB1cmxsaWIyCiAKIGNsYXNzIE1vY2tXZWIob2JqZWN0KToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgdXJscz1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgdXJscz1Ob25lLCByZXNwb25zZXM9W10pOgogICAgICAgICBzZWxmLnVybHMgPSB1cmxzIG9y
IHt9CiAgICAgICAgIHNlbGYudXJsc19mZXRjaGVkID0gW10KKyAgICAgICAgc2VsZi5yZXNwb25z
ZXMgPSByZXNwb25zZXMKIAogICAgIGRlZiBnZXRfYmluYXJ5KHNlbGYsIHVybCwgY29udmVydF80
MDRfdG9fTm9uZT1GYWxzZSk6CiAgICAgICAgIHNlbGYudXJsc19mZXRjaGVkLmFwcGVuZCh1cmwp
CkBAIC00MCw2ICs0MSwyOSBAQCBjbGFzcyBNb2NrV2ViKG9iamVjdCk6CiAgICAgICAgICAgICBy
ZXR1cm4gc2VsZi51cmxzW3VybF0KICAgICAgICAgcmV0dXJuICJNT0NLIFdlYiByZXN1bHQsIGNv
bnZlcnQgNDA0IHRvIE5vbmU9JXMiICUgY29udmVydF80MDRfdG9fTm9uZQogCisgICAgZGVmIHJl
cXVlc3Qoc2VsZiwgbWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRlcnM9Tm9uZSk6ICAjIHB5bGludDog
ZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKKyAgICAgICAgcmV0dXJuIE1vY2tSZXNwb25zZShzZWxm
LnJlc3BvbnNlcy5wb3AoMCkpCisKKworY2xhc3MgTW9ja1Jlc3BvbnNlKG9iamVjdCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlcyk6CisgICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSB2
YWx1ZXNbJ3N0YXR1c19jb2RlJ10KKyAgICAgICAgc2VsZi51cmwgPSAnJworICAgICAgICBzZWxm
LmJvZHkgPSB2YWx1ZXMuZ2V0KCdib2R5JywgJycpCisKKyAgICAgICAgaWYgaW50KHNlbGYuc3Rh
dHVzX2NvZGUpID49IDQwMDoKKyAgICAgICAgICAgIHJhaXNlIHVybGxpYjIuSFRUUEVycm9yKAor
ICAgICAgICAgICAgICAgIHVybD1zZWxmLnVybCwKKyAgICAgICAgICAgICAgICBjb2RlPXNlbGYu
c3RhdHVzX2NvZGUsCisgICAgICAgICAgICAgICAgbXNnPSdSZWNlaXZlZCBlcnJvciBzdGF0dXMg
Y29kZToge30nLmZvcm1hdChzZWxmLnN0YXR1c19jb2RlKSwKKyAgICAgICAgICAgICAgICBoZHJz
PXt9LAorICAgICAgICAgICAgICAgIGZwPU5vbmUpCisKKyAgICBkZWYgZ2V0Y29kZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuc3RhdHVzX2NvZGUKKworICAgIGRlZiByZWFkKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5ib2R5CiAKICMgRklYTUU6IENsYXNzZXMgd2hpY2ggYXJlIHVz
aW5nIEJyb3dzZXIgcHJvYmFibHkgd2FudCB0byB1c2UgV2ViIGluc3RlYWQuCiBjbGFzcyBNb2Nr
QnJvd3NlcihvYmplY3QpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mv
Y29tbW9uLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvY29tbW9uLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmExNGFhOTUzNTRiOTA2NzM5NDEwMTc2YzFiMDM3OGM3ZDcyMzUzMzIKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy9jb21tb24ucHkKQEAgLTAsMCArMSw5
OSBAQAorIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYm90
aCB3aGVuIGltcG9ydGluZyBhbmQgZXhwb3J0aW5nLiIiIgorCitpbXBvcnQganNvbgoraW1wb3J0
IGxvZ2dpbmcKKworCitXUFRfR0hfT1JHID0gJ3czYycKK1dQVF9HSF9SRVBPX05BTUUgPSAnd2Vi
LXBsYXRmb3JtLXRlc3RzJworV1BUX0dIX1VSTCA9ICdodHRwczovL2dpdGh1Yi5jb20vJXMvJXMv
JyAlIChXUFRfR0hfT1JHLCBXUFRfR0hfUkVQT19OQU1FKQorV1BUX01JUlJPUl9VUkwgPSAnaHR0
cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2V4dGVybmFsL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMuZ2l0JworV1BUX0dIX1NTSF9VUkxfVEVNUExBVEUgPSAnaHR0cHM6Ly97fUBnaXRodWIu
Y29tLyVzLyVzLmdpdCcgJSAoV1BUX0dIX09SRywgV1BUX0dIX1JFUE9fTkFNRSkKK1dQVF9SRVZJ
U0lPTl9GT09URVIgPSAnV1BULUV4cG9ydC1SZXZpc2lvbjonCitFWFBPUlRfUFJfTEFCRUwgPSAn
Y2hyb21pdW0tZXhwb3J0JworUFJPVklTSU9OQUxfUFJfTEFCRUwgPSAnZG8gbm90IG1lcmdlIHll
dCcKKworIyBUT0RPKHF5ZWFyc2xleSk6IEF2b2lkIGhhcmQtY29kaW5nIHRoaXJkX3BhcnR5L1dl
YktpdC9MYXlvdXRUZXN0cy4KK0NIUk9NSVVNX1dQVF9ESVIgPSAndGhpcmRfcGFydHkvV2ViS2l0
L0xheW91dFRlc3RzL2V4dGVybmFsL3dwdC8nCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihf
X25hbWVfXykKKworCitkZWYgcmVhZF9jcmVkZW50aWFscyhob3N0LCBjcmVkZW50aWFsc19qc29u
KToKKyAgICAiIiJFeHRyYWN0cyBjcmVkZW50aWFscyBmcm9tIGEgSlNPTiBmaWxlLiIiIgorICAg
IGlmIG5vdCBjcmVkZW50aWFsc19qc29uOgorICAgICAgICByZXR1cm4ge30KKyAgICBpZiBub3Qg
aG9zdC5maWxlc3lzdGVtLmV4aXN0cyhjcmVkZW50aWFsc19qc29uKToKKyAgICAgICAgX2xvZy53
YXJuaW5nKCdDcmVkZW50aWFscyBKU09OIGZpbGUgbm90IGZvdW5kIGF0ICVzLicsIGNyZWRlbnRp
YWxzX2pzb24pCisgICAgICAgIHJldHVybiB7fQorICAgIGNyZWRlbnRpYWxzID0ge30KKyAgICBj
b250ZW50cyA9IGpzb24ubG9hZHMoaG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGNyZWRl
bnRpYWxzX2pzb24pKQorICAgIGZvciBrZXkgaW4gKCdHSF9VU0VSJywgJ0dIX1RPS0VOJywgJ0dF
UlJJVF9VU0VSJywgJ0dFUlJJVF9UT0tFTicpOgorICAgICAgICBpZiBrZXkgaW4gY29udGVudHM6
CisgICAgICAgICAgICBjcmVkZW50aWFsc1trZXldID0gY29udGVudHNba2V5XQorICAgIHJldHVy
biBjcmVkZW50aWFscworCisKK2RlZiBpc190ZXN0aGFybmVzc19iYXNlbGluZShmaWxlbmFtZSk6
CisgICAgIiIiQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBmaWxlIG5hbWUgYXBwZWFycyB0byBiZSBh
IHRlc3RoYXJuZXNzIGJhc2VsaW5lLgorCisgICAgQXJnczoKKyAgICAgICAgZmlsZW5hbWU6IEEg
cGF0aCAoYWJzb2x1dGUgb3IgcmVsYXRpdmUpIG9yIGEgYmFzZW5hbWUuCisgICAgIiIiCisgICAg
cmV0dXJuIGZpbGVuYW1lLmVuZHN3aXRoKCctZXhwZWN0ZWQudHh0JykKKworCitkZWYgaXNfYmFz
ZW5hbWVfc2tpcHBlZChiYXNlbmFtZSk6CisgICAgIiIiQ2hlY2tzIHdoZXRoZXIgdG8gc2tpcCAo
bm90IHN5bmMpIGEgZmlsZSBiYXNlZCBvbiBpdHMgYmFzZW5hbWUuCisKKyAgICBOb3RlOiB0aGlz
IGZ1bmN0aW9uIGlzIHVzZWQgZHVyaW5nIGJvdGggaW1wb3J0IGFuZCBleHBvcnQsIGkuZS4sIGZp
bGVzIHdpdGgKKyAgICBza2lwcGVkIGJhc2VuYW1lcyBhcmUgbmV2ZXIgaW1wb3J0ZWQgb3IgZXhw
b3J0ZWQuCisgICAgIiIiCisgICAgYXNzZXJ0ICcvJyBub3QgaW4gYmFzZW5hbWUKKyAgICBibGFj
a2xpc3QgPSBbCisgICAgICAgICdNQU5JRkVTVC5qc29uJywgICAgIyBNQU5JRkVTVC5qc29uIGlz
IGF1dG9tYXRpY2FsbHkgcmVnZW5lcmF0ZWQuCisgICAgICAgICdPV05FUlMnLCAgICAgICAgICAg
IyBodHRwczovL2NyYnVnLmNvbS81ODQ2NjAgaHR0cHM6Ly9jcmJ1Zy5jb20vNzAyMjgzCisgICAg
ICAgICdyZWZ0ZXN0Lmxpc3QnLCAgICAgIyBodHRwczovL2NyYnVnLmNvbS81ODI4MzgKKyAgICBd
CisgICAgcmV0dXJuIChiYXNlbmFtZSBpbiBibGFja2xpc3QKKyAgICAgICAgICAgIG9yIGlzX3Rl
c3RoYXJuZXNzX2Jhc2VsaW5lKGJhc2VuYW1lKQorICAgICAgICAgICAgb3IgYmFzZW5hbWUuc3Rh
cnRzd2l0aCgnLicpKQorCisKK2RlZiBpc19maWxlX2V4cG9ydGFibGUocGF0aCk6CisgICAgIiIi
Q2hlY2tzIHdoZXRoZXIgYSBmaWxlIGluIENocm9taXVtIFdQVCBzaG91bGQgYmUgZXhwb3J0ZWQg
dG8gdXBzdHJlYW0uCisKKyAgICBBcmdzOgorICAgICAgICBwYXRoOiBBIHJlbGF0aXZlIHBhdGgg
ZnJvbSB0aGUgcm9vdCBvZiBDaHJvbWl1bSByZXBvc2l0b3J5LgorICAgICIiIgorICAgIGFzc2Vy
dCBwYXRoLnN0YXJ0c3dpdGgoQ0hST01JVU1fV1BUX0RJUikKKyAgICBiYXNlbmFtZSA9IHBhdGhb
cGF0aC5yZmluZCgnLycpICsgMTpdCisgICAgcmV0dXJuIG5vdCBpc19iYXNlbmFtZV9za2lwcGVk
KGJhc2VuYW1lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF9l
eHBvcnRlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfZXhwb3J0ZXIucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODQ3ODFlYWZmZmYzYzg4YzEzYjA1ZDJjN2E2MDM1MjdmMzg1ZDNhZgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfZXhwb3J0ZXIu
cHkKQEAgLTAsMCArMSwyOTMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDE3LCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIiIiCisgVGhpcyBzY3JpcHQgdXBsb2FkcyBjaGFuZ2VzIG1hZGUgdG8gVzNDIHdlYi1w
bGF0Zm9ybS10ZXN0cyB0ZXN0cy4KKyIiIgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dn
aW5nCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmNoZWNr
b3V0LnNjbS5naXQgaW1wb3J0IEdpdAorZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQg
SG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1Z3ppbGxhIGltcG9ydCBCdWd6aWxsYQor
ZnJvbSB3ZWJraXRweS5jb21tb24ud2Via2l0X2ZpbmRlciBpbXBvcnQgV2ViS2l0RmluZGVyCitm
cm9tIHdlYmtpdHB5LnczYy53cHRfZ2l0aHViIGltcG9ydCBXUFRHaXRIdWIKKworX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCitXRUJLSVRfV1BUX0RJUiA9ICdMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzJworV1BUX1BSX1VSTCA9ICJodHRwczov
L2dpdGh1Yi5jb20vdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9wdWxsLyIKKworCitjbGFzcyBUZXN0
RXhwb3J0ZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBvcHRpb25z
LCBnaXRDbGFzcz1HaXQsIGJ1Z3ppbGxhQ2xhc3M9QnVnemlsbGEsIFdQVEdpdEh1YkNsYXNzPVdQ
VEdpdEh1Yik6CisgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CisgICAgICAgIHNlbGYuX2ZpbGVz
eXN0ZW0gPSBob3N0LmZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMK
KworICAgICAgICBzZWxmLl9ob3N0LmluaXRpYWxpemVfc2NtKCkKKworICAgICAgICBzZWxmLl9i
dWd6aWxsYSA9IGJ1Z3ppbGxhQ2xhc3MoKQorICAgICAgICBzZWxmLl9idWdfaWQgPSBvcHRpb25z
LmJ1Z19pZAorICAgICAgICBpZiBub3Qgc2VsZi5fYnVnX2lkOgorICAgICAgICAgICAgaWYgb3B0
aW9ucy5hdHRhY2htZW50X2lkOgorICAgICAgICAgICAgICAgIHNlbGYuX2J1Z19pZCA9IHNlbGYu
X2J1Z3ppbGxhLmJ1Z19pZF9mb3JfYXR0YWNobWVudF9pZChvcHRpb25zLmF0dGFjaG1lbnRfaWQp
CisgICAgICAgICAgICBlbGlmIG9wdGlvbnMuZ2l0X2NvbW1pdDoKKyAgICAgICAgICAgICAgICBz
ZWxmLl9idWdfaWQgPSBzZWxmLl9ob3N0LmNoZWNrb3V0KCkuYnVnX2lkX2Zvcl90aGlzX2NvbW1p
dChvcHRpb25zLmdpdF9jb21taXQpCisKKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMucmVw
b3NpdG9yeV9kaXJlY3Rvcnk6CisgICAgICAgICAgICB3ZWJraXRfZmluZGVyID0gV2ViS2l0Rmlu
ZGVyKHNlbGYuX2ZpbGVzeXN0ZW0pCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlcG9zaXRv
cnlfZGlyZWN0b3J5ID0gd2Via2l0X2ZpbmRlci5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1dlYktp
dEJ1aWxkJywgJ3czYy10ZXN0cycsICd3ZWItcGxhdGZvcm0tdGVzdHMnKQorCisgICAgICAgIHNl
bGYuX2dpdCA9IHNlbGYuX2Vuc3VyZV93cHRfcmVwb3NpdG9yeSgiaHR0cHM6Ly9naXRodWIuY29t
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0Iiwgc2VsZi5fb3B0aW9ucy5yZXBvc2l0b3J5X2Rp
cmVjdG9yeSwgZ2l0Q2xhc3MpCisKKyAgICAgICAgc2VsZi5fdXNlcm5hbWUgPSBvcHRpb25zLnVz
ZXJuYW1lCisgICAgICAgIGlmIG5vdCBzZWxmLl91c2VybmFtZToKKyAgICAgICAgICAgIHNlbGYu
X3VzZXJuYW1lID0gc2VsZi5fZ2l0LmxvY2FsX2NvbmZpZygnZ2l0aHViLnVzZXJuYW1lJykucnN0
cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl91c2VybmFtZToKKyAgICAgICAgICAgICAg
ICBzZWxmLl91c2VybmFtZSA9IG9zLmVudmlyb24uZ2V0KCdHSVRIVUJfVVNFUk5BTUUnKQorICAg
ICAgICAgICAgaWYgbm90IHNlbGYuX3VzZXJuYW1lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoIk1pc3NpbmcgR2l0SHViIHVzZXJuYW1lLCBwbGVhc2UgcHJvdmlkZSBpdCBhcyBh
IGNvbW1hbmQgYXJndW1lbnQgKHNlZSBoZWxwIGZvciB0aGUgY29tbWFuZCkuIikKKyAgICAgICAg
ZWxpZiBub3Qgc2VsZi5fZ2l0LmxvY2FsX2NvbmZpZygnZ2l0aHViLnVzZXJuYW1lJyk6CisgICAg
ICAgICAgICBzZWxmLl9naXQuc2V0X2xvY2FsX2NvbmZpZygnZ2l0aHViLnVzZXJuYW1lJywgc2Vs
Zi5fdXNlcm5hbWUpCisKKyAgICAgICAgc2VsZi5fdG9rZW4gPSBvcHRpb25zLnRva2VuCisgICAg
ICAgIGlmIG5vdCBzZWxmLl90b2tlbjoKKyAgICAgICAgICAgIHNlbGYuX3Rva2VuID0gc2VsZi5f
Z2l0LmxvY2FsX2NvbmZpZygnZ2l0aHViLnRva2VuJykucnN0cmlwKCkKKyAgICAgICAgICAgIGlm
IG5vdCBzZWxmLl90b2tlbjoKKyAgICAgICAgICAgICAgICBzZWxmLl90b2tlbiA9IG9zLmVudmly
b24uZ2V0KCdHSVRIVUJfVE9LRU4nKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX3Rva2VuOgor
ICAgICAgICAgICAgICAgIF9sb2cuaW5mbygiTWlzc2luZyBHaXRIdWIgdG9rZW4sIHRoZSBzY3Jp
cHQgd2lsbCBub3QgYmUgYWJsZSB0byBjcmVhdGUgYSBwdWxsIHJlcXVlc3QgdG8gVzNDIHdlYi1w
bGF0Zm9ybS10ZXN0cyByZXBvc2l0b3J5LiIpCisgICAgICAgIGVsaWYgbm90IHNlbGYuX2dpdC5s
b2NhbF9jb25maWcoJ2dpdGh1Yi50b2tlbicpOgorICAgICAgICAgICAgc2VsZi5fZ2l0LnNldF9s
b2NhbF9jb25maWcoJ2dpdGh1Yi50b2tlbicsIHNlbGYuX3Rva2VuKQorCisgICAgICAgIHNlbGYu
X2dpdGh1YiA9IFdQVEdpdEh1YkNsYXNzKHNlbGYuX2hvc3QsIHNlbGYuX3VzZXJuYW1lLCBzZWxm
Ll90b2tlbikgaWYgc2VsZi5fdXNlcm5hbWUgYW5kIHNlbGYuX3Rva2VuIGVsc2UgTm9uZQorCisg
ICAgICAgIHNlbGYuX2JyYW5jaF9uYW1lID0gc2VsZi5fZW5zdXJlX25ld19icmFuY2hfbmFtZSgp
CisgICAgICAgIHNlbGYuX3B1YmxpY19icmFuY2hfbmFtZSA9IG9wdGlvbnMucHVibGljX2JyYW5j
aF9uYW1lIGlmIG9wdGlvbnMucHVibGljX2JyYW5jaF9uYW1lIGVsc2Ugc2VsZi5fYnJhbmNoX25h
bWUKKyAgICAgICAgc2VsZi5fYnVnemlsbGFfdXJsID0gImh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0iICsgc3RyKHNlbGYuX2J1Z19pZCkKKyAgICAgICAgc2VsZi5fY29t
bWl0X21lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2UgaWYgb3B0aW9ucy5tZXNzYWdlIGVsc2UgJ1dl
YktpdCBleHBvcnQgb2YgJyArIHNlbGYuX2J1Z3ppbGxhX3VybAorCisgICAgICAgIHNlbGYuX3dw
dF9mb3JrX3JlbW90ZSA9IG9wdGlvbnMucmVwb3NpdG9yeV9yZW1vdGUKKyAgICAgICAgaWYgbm90
IHNlbGYuX3dwdF9mb3JrX3JlbW90ZToKKyAgICAgICAgICAgIHNlbGYuX3dwdF9mb3JrX3JlbW90
ZSA9IHNlbGYuX3VzZXJuYW1lCisKKyAgICAgICAgc2VsZi5fd3B0X2ZvcmtfcHVzaF91cmwgPSBv
cHRpb25zLnJlcG9zaXRvcnlfcmVtb3RlX3VybAorICAgICAgICBpZiBub3Qgc2VsZi5fd3B0X2Zv
cmtfcHVzaF91cmw6CisgICAgICAgICAgICBzZWxmLl93cHRfZm9ya19wdXNoX3VybCA9ICJodHRw
czovLyIgKyBzZWxmLl91c2VybmFtZSArICJAZ2l0aHViLmNvbS8iICsgc2VsZi5fdXNlcm5hbWUg
KyAiL3dlYi1wbGF0Zm9ybS10ZXN0cy5naXQiCisKKyAgICBkZWYgX2Vuc3VyZV93cHRfcmVwb3Np
dG9yeShzZWxmLCB1cmwsIHdwdF9yZXBvc2l0b3J5X2RpcmVjdG9yeSwgZ2l0Q2xhc3MpOgorICAg
ICAgICBnaXQgPSBOb25lCisgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyh3
cHRfcmVwb3NpdG9yeV9kaXJlY3RvcnkpOgorICAgICAgICAgICAgX2xvZy5pbmZvKCdDbG9uaW5n
ICVzIGludG8gJXMuLi4nICUgKHVybCwgd3B0X3JlcG9zaXRvcnlfZGlyZWN0b3J5KSkKKyAgICAg
ICAgICAgIGdpdENsYXNzLmNsb25lKHVybCwgd3B0X3JlcG9zaXRvcnlfZGlyZWN0b3J5LCBzZWxm
Ll9ob3N0LmV4ZWN1dGl2ZSkKKyAgICAgICAgZ2l0ID0gZ2l0Q2xhc3Mod3B0X3JlcG9zaXRvcnlf
ZGlyZWN0b3J5LCBOb25lLCBleGVjdXRpdmU9c2VsZi5faG9zdC5leGVjdXRpdmUsIGZpbGVzeXN0
ZW09c2VsZi5fZmlsZXN5c3RlbSkKKyAgICAgICAgcmV0dXJuIGdpdAorCisgICAgZGVmIF9mZXRj
aF93cHRfcmVwb3NpdG9yeShzZWxmKToKKyAgICAgICAgX2xvZy5pbmZvKCdGZXRjaGluZyB3ZWIt
cGxhdGZvcm0tdGVzdHMgcmVwb3NpdG9yeScpCisgICAgICAgIHNlbGYuX2dpdC5mZXRjaCgpCisK
KyAgICBkZWYgX2Vuc3VyZV9uZXdfYnJhbmNoX25hbWUoc2VsZik6CisgICAgICAgIGJyYW5jaF9u
YW1lX3ByZWZpeCA9ICJ3cHQtZXhwb3J0LWZvci13ZWJraXQtIiArIChzdHIoc2VsZi5fYnVnX2lk
KSBpZiBzZWxmLl9idWdfaWQgZWxzZSAiMCIpCisgICAgICAgIGJyYW5jaF9uYW1lID0gYnJhbmNo
X25hbWVfcHJlZml4CisgICAgICAgIGNvdW50ZXIgPSAwCisgICAgICAgIHdoaWxlIHNlbGYuX2dp
dC5icmFuY2hfcmVmX2V4aXN0cyhicmFuY2hfbmFtZSk6CisgICAgICAgICAgICBicmFuY2hfbmFt
ZSA9ICgiJXMtJXMiKSAlIChicmFuY2hfbmFtZV9wcmVmaXgsIHN0cihjb3VudGVyKSkKKyAgICAg
ICAgICAgIGNvdW50ZXIgPSBjb3VudGVyICsgMQorICAgICAgICByZXR1cm4gYnJhbmNoX25hbWUK
KworICAgIGRlZiBkb3dubG9hZF9hbmRfY29tbWl0X3BhdGNoKHNlbGYpOgorICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLmdpdF9jb21taXQ6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAg
ICAgIHBhdGNoX29wdGlvbnMgPSBbIi0tbm8tdXBkYXRlIiwgIi0tbm8tY2xlYW4iLCAiLS1sb2Nh
bC1jb21taXQiXQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmF0dGFjaG1lbnRfaWQ6CisgICAg
ICAgICAgICBwYXRjaF9vcHRpb25zLmluc2VydCgiYXBwbHktYXR0YWNobWVudCIpCisgICAgICAg
ICAgICBwYXRjaF9vcHRpb25zLmFwcGVuZChzZWxmLl9vcHRpb25zLmF0dGFjaG1lbnRfaWQpCisg
ICAgICAgIGVsaWYgc2VsZi5fb3B0aW9ucy5idWdfaWQ6CisgICAgICAgICAgICBwYXRjaF9vcHRp
b25zLmluc2VydCgiYXBwbHktZnJvbS1idWciKQorICAgICAgICAgICAgcGF0Y2hfb3B0aW9ucy5h
cHBlbmQoc2VsZi5fb3B0aW9ucy5idWdfaWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBf
bG9nLmluZm8oIkV4cG9ydGluZyBsb2NhbCBjaGFuZ2VzIikKKyAgICAgICAgICAgIHJldHVybgor
ICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlJldHJpZXZhbCBvZiBwYXRjaCBmcm9tIGJ1Z3ppbGxh
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQiKQorCisgICAgZGVmIGNsZWFuKHNlbGYpOgorICAgICAg
ICBfbG9nLmluZm8oJ0NsZWFuaW5nIHdlYi1wbGF0Zm9ybS10ZXN0cyBtYXN0ZXIgYnJhbmNoJykK
KyAgICAgICAgc2VsZi5fZ2l0LmNoZWNrb3V0KCdtYXN0ZXInKQorICAgICAgICBzZWxmLl9naXQu
cmVzZXRfaGFyZCgnb3JpZ2luL21hc3RlcicpCisKKyAgICBkZWYgY3JlYXRlX2JyYW5jaF93aXRo
X3BhdGNoKHNlbGYsIHBhdGNoKToKKyAgICAgICAgX2xvZy5pbmZvKCdBcHBseWluZyBwYXRjaCB0
byB3ZWItcGxhdGZvcm0tdGVzdHMgYnJhbmNoICcgKyBzZWxmLl9icmFuY2hfbmFtZSkKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZ2l0LmNoZWNrb3V0X25ld19icmFuY2goc2VsZi5f
YnJhbmNoX25hbWUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAg
IF9sb2cud2FybmluZyhlKQorICAgICAgICAgICAgX2xvZy5pbmZvKCJSZXRyeWluZyB0byBjcmVh
dGUgdGhlIGJyYW5jaCIpCisgICAgICAgICAgICBzZWxmLl9naXQuZGVsZXRlX2JyYW5jaChzZWxm
Ll9icmFuY2hfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2dpdC5jaGVja291dF9uZXdfYnJhbmNo
KHNlbGYuX2JyYW5jaF9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9naXQu
YXBwbHlfbWFpbF9wYXRjaChbcGF0Y2gsICctLWV4Y2x1ZGUnLCAnKi1leHBlY3RlZC50eHQnXSkK
KyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgX2xvZy53YXJuaW5n
KGUpCisgICAgICAgICAgICBzZWxmLl9naXQuYXBwbHlfbWFpbF9wYXRjaChbJy0tYWJvcnQnXSkK
KyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLl9naXQuY29tbWl0KFsnLWEn
LCAnLW0nLCBzZWxmLl9jb21taXRfbWVzc2FnZV0pCisgICAgICAgIHJldHVybiBUcnVlCisKKyAg
ICBkZWYgcHVzaF90b193cHRfZm9yayhzZWxmKToKKyAgICAgICAgc2VsZi5jcmVhdGVfdXBsb2Fk
X3JlbW90ZV9pZl9uZWVkZWQoKQorICAgICAgICB3cHRfZm9ya19icmFuY2hfZ2l0aHViX3VybCA9
ICJodHRwczovL2dpdGh1Yi5jb20vIiArIHNlbGYuX3VzZXJuYW1lICsgIi93ZWItcGxhdGZvcm0t
dGVzdHMvdHJlZS8iICsgc2VsZi5fcHVibGljX2JyYW5jaF9uYW1lCisgICAgICAgIF9sb2cuaW5m
bygnUHVzaGluZyBicmFuY2ggJyArIHNlbGYuX2JyYW5jaF9uYW1lICsgIiB0byAiICsgc2VsZi5f
Z2l0LnJlbW90ZShbImdldC11cmwiLCBzZWxmLl93cHRfZm9ya19yZW1vdGVdKS5yc3RyaXAoKSkK
KyAgICAgICAgX2xvZy5pbmZvKCdUaGlzIG1heSB0YWtlIHNvbWUgdGltZScpCisgICAgICAgIHNl
bGYuX2dpdC5wdXNoKFtzZWxmLl93cHRfZm9ya19yZW1vdGUsIHNlbGYuX2JyYW5jaF9uYW1lICsg
IjoiICsgc2VsZi5fcHVibGljX2JyYW5jaF9uYW1lLCAnLWYnXSkKKyAgICAgICAgX2xvZy5pbmZv
KCdCcmFuY2ggYXZhaWxhYmxlIGF0ICcgKyB3cHRfZm9ya19icmFuY2hfZ2l0aHViX3VybCkKKyAg
ICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBtYWtlX3B1bGxfcmVxdWVzdChzZWxmKToKKyAg
ICAgICAgaWYgbm90IHNlbGYuX2dpdGh1YjoKKyAgICAgICAgICAgIF9sb2cuaW5mbygnTWlzc2lu
ZyBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBwdWxsIHJlcXVlc3QnKQorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAgX2xvZy5pbmZvKCdNYWtpbmcgcHVsbCByZXF1ZXN0JykKKyAgICAgICAg
ZGVzY3JpcHRpb24gPSBzZWxmLl9idWd6aWxsYS5mZXRjaF9idWdfZGljdGlvbmFyeShzZWxmLl9i
dWdfaWQpWyJ0aXRsZSJdCisgICAgICAgIHByX251bWJlciA9IHNlbGYuX2dpdGh1Yi5jcmVhdGVf
cHIoc2VsZi5fd3B0X2ZvcmtfcmVtb3RlICsgJzonICsgc2VsZi5fYnJhbmNoX25hbWUsIHNlbGYu
X2NvbW1pdF9tZXNzYWdlLCBkZXNjcmlwdGlvbikKKyAgICAgICAgaWYgc2VsZi5fYnVnX2lkOgor
ICAgICAgICAgICAgc2VsZi5fYnVnemlsbGEucG9zdF9jb21tZW50X3RvX2J1ZyhzZWxmLl9idWdf
aWQsICJTdWJtaXR0ZWQgd2ViLXBsYXRmb3JtLXRlc3RzIHB1bGwgcmVxdWVzdDogIiArIFdQVF9Q
Ul9VUkwgKyBzdHIocHJfbnVtYmVyKSkKKworICAgIGRlZiBkZWxldGVfbG9jYWxfYnJhbmNoKHNl
bGYpOgorICAgICAgICBfbG9nLmluZm8oJ1JlbW92aW5nIGJyYW5jaCAnICsgc2VsZi5fYnJhbmNo
X25hbWUpCisgICAgICAgIHNlbGYuX2dpdC5jaGVja291dCgnbWFzdGVyJykKKyAgICAgICAgc2Vs
Zi5fZ2l0LmRlbGV0ZV9icmFuY2goc2VsZi5fYnJhbmNoX25hbWUpCisKKyAgICBkZWYgY3JlYXRl
X2dpdF9wYXRjaChzZWxmKToKKyAgICAgICAgcGF0Y2hfZmlsZSA9ICcuL3BhdGNoLnRlbXAuJyAr
IHN0cih0aW1lLmNsb2NrKCkpCisgICAgICAgIGdpdF9jb21taXQgPSAiSEVBRC4uLi4iIGlmIG5v
dCBzZWxmLl9vcHRpb25zLmdpdF9jb21taXQgZWxzZSBzZWxmLl9vcHRpb25zLmdpdF9jb21taXQg
KyAifjEuLiIgKyBzZWxmLl9vcHRpb25zLmdpdF9jb21taXQKKyAgICAgICAgcGF0Y2hfZGF0YSA9
IHNlbGYuX2hvc3Quc2NtKCkuY3JlYXRlX3BhdGNoKGdpdF9jb21taXQsIFtXRUJLSVRfV1BUX0RJ
Ul0pCisgICAgICAgIGlmIG5vdCBwYXRjaF9kYXRhIG9yIG5vdCAnZGlmZicgaW4gcGF0Y2hfZGF0
YToKKyAgICAgICAgICAgIF9sb2cuaW5mbygnTm8gY2hhbmdlcyB0byB1cHN0cmVhbSwgcGF0Y2gg
ZGF0YSBpczogIiVzIicgJSAocGF0Y2hfZGF0YSkpCisgICAgICAgICAgICByZXR1cm4gJycKKyAg
ICAgICAgIyBGSVhNRTogV2UgY2FuIHByb2JhYmx5IHRyeSB0byB1c2UgLS1yZWxhdGl2ZSBnaXQg
cGFyYW1ldGVyIHRvIG5vdCBkbyB0aGF0IHJlcGxhY2VtZW50LgorICAgICAgICBwYXRjaF9kYXRh
ID0gcGF0Y2hfZGF0YS5yZXBsYWNlKFdFQktJVF9XUFRfRElSICsgJy8nLCAnJykKKyAgICAgICAg
cGF0Y2hfZmlsZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChwYXRjaF9maWxlKQorICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShwYXRjaF9maWxlLCBwYXRjaF9kYXRh
KQorICAgICAgICByZXR1cm4gcGF0Y2hfZmlsZQorCisgICAgZGVmIGNyZWF0ZV91cGxvYWRfcmVt
b3RlX2lmX25lZWRlZChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3dwdF9mb3JrX3JlbW90
ZSBpbiBzZWxmLl9naXQucmVtb3RlKFtdKToKKyAgICAgICAgICAgIHNlbGYuX2dpdC5yZW1vdGUo
WyJhZGQiLCBzZWxmLl93cHRfZm9ya19yZW1vdGUsIHNlbGYuX3dwdF9mb3JrX3B1c2hfdXJsXSkK
KworICAgIGRlZiBkb19leHBvcnQoc2VsZik6CisgICAgICAgIGdpdF9wYXRjaF9maWxlID0gc2Vs
Zi5jcmVhdGVfZ2l0X3BhdGNoKCkKKworICAgICAgICBpZiBub3QgZ2l0X3BhdGNoX2ZpbGU6Cisg
ICAgICAgICAgICBfbG9nLmVycm9yKCJVbmFibGUgdG8gY3JlYXRlIGEgcGF0Y2ggdG8gYXBwbHkg
dG8gd2ViLXBsYXRmb3JtLXRlc3RzIHJlcG9zaXRvcnkiKQorICAgICAgICAgICAgcmV0dXJuCisK
KyAgICAgICAgc2VsZi5fZmV0Y2hfd3B0X3JlcG9zaXRvcnkoKQorICAgICAgICBzZWxmLmNsZWFu
KCkKKworICAgICAgICBpZiBub3Qgc2VsZi5jcmVhdGVfYnJhbmNoX3dpdGhfcGF0Y2goZ2l0X3Bh
dGNoX2ZpbGUpOgorICAgICAgICAgICAgX2xvZy5lcnJvcigiQ2Fubm90IGNyZWF0ZSB3ZWItcGxh
dGZvcm0tdGVzdHMgbG9jYWwgYnJhbmNoIGZyb20gdGhlIHBhdGNoIikKKyAgICAgICAgICAgIHNl
bGYuZGVsZXRlX2xvY2FsX2JyYW5jaCgpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBp
ZiBnaXRfcGF0Y2hfZmlsZToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKGdp
dF9wYXRjaF9maWxlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYucHVzaF90
b193cHRfZm9yaygpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuY3JlYXRlX3B1
bGxfcmVxdWVzdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX3B1bGxfcmVxdWVzdCgp
CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmRlbGV0ZV9sb2NhbF9icmFuY2go
KQorICAgICAgICAgICAgX2xvZy5pbmZvKCJGaW5pc2hlZCIpCisgICAgICAgICAgICBzZWxmLmNs
ZWFuKCkKKworCitkZWYgcGFyc2VfYXJncyhhcmdzKToKKyAgICBkZXNjcmlwdGlvbiA9ICIiIlNj
cmlwdCB0byBnZW5lcmF0ZSBhIHB1bGwgcmVxdWVzdCB0byBXM0Mgd2ViLXBsYXRmb3JtLXRlc3Rz
IHJlcG9zaXRvcnkKKyAgICAnVG9vbHMvU2NyaXB0cy9leHBvcnQtdzNjLXRlc3QtY2hhbmdlcyAt
YyAtZyBIRUFEIC1iIFhZWicgd2lsbCBkbyB0aGUgZm9sbG93aW5nOgorICAgIC0gQ2xvbmUgd2Vi
LXBsYXRmb3JtLXRlc3RzIHJlcG9zaXRvcnkgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgc2V0IGl0
IHVwIGZvciBwdXNoaW5nIGJyYW5jaGVzLgorICAgIC0gR2F0aGVyIFdlYktpdCBidWcgaWQgWFla
IGJ1ZyBhbmQgY2hhbmdlcyB0byBhcHBseSB0byB3ZWItcGxhdGZvcm0tdGVzdHMgcmVwb3NpdG9y
eSBiYXNlZCBvbiB0aGUgSEVBRCBjb21taXQKKyAgICAtIENyZWF0ZSBhIHJlbW90ZSBicmFuY2gg
bmFtZWQgd2Via2l0LVhZWiBvbiBodHRwczovL2dpdGh1Yi5jb20vVVNFUk5BTUUvd2ViLXBsYXRm
b3JtLXRlc3RzLmdpdCByZXBvc2l0b3J5IGJhc2VkIG9uIHRoZSBsb2NhbGx5IGFwcGxpZWQgcGF0
Y2guCisgICAgLSAgICBVU0VSTkFNRSBtYXkgYmUgc2V0IHVzaW5nIHRoZSBlbnZpcm9ubWVudCB2
YXJpYWJsZSBHSVRIVUJfVVNFUk5BTUUgb3IgYXMgYSBjb21tYW5kIGxpbmUgb3B0aW9uLiBJdCBp
cyB0aGVuIHN0b3JlZCBpbiBnaXQgY29uZmlnIGFzIGdpdGh1Yi51c2VybmFtZS4KKyAgICAtICAg
IEdpdGh1YiBjcmVkZW50aWFsIG1heSBiZSBzZXQgdXNpbmcgdGhlIGVudmlyb25tZW50IHZhcmlh
YmxlIEdJVEhVQl9UT0tFTiBvciBhcyBhIGNvbW1hbmQgbGluZSBvcHRpb24uIChQbGVhc2UgcHJv
dmlkZSBhIHZhbGlkIEdpdEh1YiAnUGVyc29uYWwgYWNjZXNzIHRva2VuJyB3aXRoICdyZXBvJyBh
cyBzY29wZSkuIEl0IGlzIHRoZW4gc3RvcmVkIGluIGdpdCBjb25maWcgYXMgZ2l0aHViLnRva2Vu
LgorICAgIC0gTWFrZSB0aGUgcmVsYXRlZCBwdWxsIHJlcXVlc3Qgb24gaHR0cHM6Ly9naXRodWIu
Y29tL3czYy93ZWItcGxhdGZvcm0tdGVzdHMuZ2l0IHJlcG9zaXRvcnkuCisgICAgLSBDbGVhbiB0
aGUgbG9jYWwgR2l0IHJlcG9zaXRvcnkKKyAgICBOb3RlczoKKyAgICAtIEl0IGlzIHNhZmVyIHRv
IHByb3ZpZGUgYSBidWcgaWQgdXNpbmcgLWIgb3B0aW9uIChidWcgaWQgZnJvbSBhIGdpdCBjb21t
aXQgaXMgbm90IGFsd2F5cyB3b3JraW5nKS4KKyAgICAtIEFzIGEgZHJ5IHJ1biwgb25lIGNhbiBz
dGFydCBieSBydW5uaW5nIHRoZSBzY3JpcHQgd2l0aG91dCAtYy4gVGhpcyB3aWxsIG9ubHkgY3Jl
YXRlIHRoZSBicmFuY2ggb24gdGhlIHVzZXIgcHVibGljIEdpdEh1YiByZXBvc2l0b3J5LgorICAg
IC0gQnkgZGVmYXVsdCwgdGhlIHNjcmlwdCB3aWxsIGNyZWF0ZSBhbiBodHRwcyByZW1vdGUgVVJM
IHRoYXQgd2lsbCByZXF1aXJlIGEgcGFzc3dvcmQtYmFzZWQgYXV0aGVudGljYXRpb24gdG8gR2l0
SHViLiBJZiB5b3UgYXJlIHVzaW5nIGFuIFNTSCBrZXksIHBsZWFzZSB1c2UgdGhlIC0tcmVtb3Rl
LXVybCBvcHRpb24uCisgICAgRklYTUU6CisgICAgLSBBZGQgYSBsYWJlbCBvbiBnaXRodWIgaXNz
dWVzCisgICAgLSBUaGUgc2NyaXB0IGlzIG5vdCB5ZXQgYWJsZSB0byB1cGRhdGUgYW4gZXhpc3Rp
bmcgcHVsbCByZXF1ZXN0CisgICAgLSBOZWVkIGEgd2F5IHRvIG1vbml0b3IgdGhlIHByb2dyZXNz
IG9mIHRoZSBwdWwgcmVxdWVzdCBzbyB0aGF0IHN0YXR1cyBvZiBhbGwgcGVuZGluZyBwdWxsIHJl
cXVlc3RzIGNhbiBiZSBkb25lIGF0IGltcG9ydCB0aW1lLgorICAgICIiIgorICAgIHBhcnNlciA9
IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J2V4cG9ydC13M2MtdGVzdC1jaGFuZ2VzIC4u
LicsIGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uLCBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3
RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyKQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWcn
LCAnLS1naXQtY29tbWl0JywgZGVzdD0nZ2l0X2NvbW1pdCcsIGRlZmF1bHQ9Tm9uZSwgaGVscD0n
R2l0IGNvbW1pdCB0byBhcHBseScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCAnLS1i
dWcnLCBkZXN0PSdidWdfaWQnLCBkZWZhdWx0PU5vbmUsIGhlbHA9J0J1ZyBJRCB0byBzZWFyY2gg
Zm9yIHBhdGNoJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYScsICctLWF0dGFjaG1lbnQn
LCBkZXN0PSdhdHRhY2htZW50X2lkJywgZGVmYXVsdD1Ob25lLCBoZWxwPSdBdHRhY2htZW50IElE
IHRvIHNlYXJjaCBmb3IgcGF0Y2gnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1uJywgJy0t
bmFtZScsIGRlc3Q9J3VzZXJuYW1lJywgZGVmYXVsdD1Ob25lLCBoZWxwPSdnaXRodWIgdXNlciBu
YW1lIGlmIEdJVEhVQl9VU0VSTkFNRSBpcyBub3QgZGVmaW5lZCBvciBnaXRodWIudXNlcm5hbWUg
aW4gdGhlIFdQVCByZXBvIGNvbmZpZyBpcyBub3QgZGVmaW5lZCcpCisgICAgcGFyc2VyLmFkZF9h
cmd1bWVudCgnLXQnLCAnLS10b2tlbicsIGRlc3Q9J3Rva2VuJywgZGVmYXVsdD1Ob25lLCBoZWxw
PSdnaXRodWIgdG9rZW4sIG5lZWRlZCBmb3IgY3JlYXRpbmcgcHVsbCByZXF1ZXN0cyBvbmx5IGlm
IEdJVEhVQl9UT0tFTiBlbnYgdmFyaWFibGUgaXMgbm90IGRlZmluZWQgb3IgZ2l0aHViLnRva2Vu
IGluIHRoZSBXUFQgcmVwbyBjb25maWcgaXMgbm90IGRlZmluZWQnKQorICAgIHBhcnNlci5hZGRf
YXJndW1lbnQoJy1ibicsICctLWJyYW5jaC1uYW1lJywgZGVzdD0ncHVibGljX2JyYW5jaF9uYW1l
JywgZGVmYXVsdD1Ob25lLCBoZWxwPSdCcmFuY2ggbmFtZSB0byBwdXNoIHRvJykKKyAgICBwYXJz
ZXIuYWRkX2FyZ3VtZW50KCctbScsICctLW1lc3NhZ2UnLCBkZXN0PSdtZXNzYWdlJywgZGVmYXVs
dD1Ob25lLCBoZWxwPSdDb21taXQgbWVzc2FnZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgn
LXInLCAnLS1yZW1vdGUnLCBkZXN0PSdyZXBvc2l0b3J5X3JlbW90ZScsIGRlZmF1bHQ9Tm9uZSwg
aGVscD0ncmVwb3NpdG9yeSBvcmlnaW4gdG8gdXNlIHRvIHB1c2gnKQorICAgIHBhcnNlci5hZGRf
YXJndW1lbnQoJy11JywgJy0tcmVtb3RlLXVybCcsIGRlc3Q9J3JlcG9zaXRvcnlfcmVtb3RlX3Vy
bCcsIGRlZmF1bHQ9Tm9uZSwgaGVscD0ncmVwb3NpdG9yeSB1cmwgdG8gdXNlIHRvIHB1c2gnKQor
ICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tcmVwb3NpdG9yeScsIGRlc3Q9J3JlcG9z
aXRvcnlfZGlyZWN0b3J5JywgZGVmYXVsdD1Ob25lLCBoZWxwPSdyZXBvc2l0b3J5IGRpcmVjdG9y
eScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWMnLCAnLS1jcmVhdGUtcHInLCBkZXN0PSdj
cmVhdGVfcHVsbF9yZXF1ZXN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwg
aGVscD0nY3JlYXRlIHB1bGwgcmVxdWVzdCB0byB3M2Mgd2ViLXBsYXRmb3JtLXRlc3RzJykKKwor
ICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmdzKQorCisgICAg
cmV0dXJuIG9wdGlvbnMKKworCitkZWYgY29uZmlndXJlX2xvZ2dpbmcoKToKKyAgICBjbGFzcyBM
b2dIYW5kbGVyKGxvZ2dpbmcuU3RyZWFtSGFuZGxlcik6CisKKyAgICAgICAgZGVmIGZvcm1hdChz
ZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgaWYgcmVjb3JkLmxldmVsbm8gPiBsb2dnaW5nLklO
Rk86CisgICAgICAgICAgICAgICAgcmV0dXJuICIlczogJXMiICUgKHJlY29yZC5sZXZlbG5hbWUs
IHJlY29yZC5nZXRNZXNzYWdlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVjb3JkLmdldE1lc3Nh
Z2UoKQorCisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgIGxvZ2dlci5zZXRM
ZXZlbChsb2dnaW5nLklORk8pCisgICAgaGFuZGxlciA9IExvZ0hhbmRsZXIoKQorICAgIGhhbmRs
ZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIp
CisgICAgcmV0dXJuIGhhbmRsZXIKKworCitkZWYgbWFpbihfYXJndiwgX3N0ZG91dCwgX3N0ZGVy
cik6CisgICAgb3B0aW9ucyA9IHBhcnNlX2FyZ3MoX2FyZ3YpCisKKyAgICBjb25maWd1cmVfbG9n
Z2luZygpCisKKyAgICB0ZXN0X2V4cG9ydGVyID0gVGVzdEV4cG9ydGVyKEhvc3QoKSwgb3B0aW9u
cykKKworICAgIHRlc3RfZXhwb3J0ZXIuZG9fZXhwb3J0KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdzNjL3Rlc3RfZXhwb3J0ZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4
NjNmY2QyNDRkY2Y5YmE0MzcyMWVlOGJhOTlkOGZmMzA3OGQ5MjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy90ZXN0X2V4cG9ydGVyX3VuaXR0ZXN0LnB5CkBA
IC0wLDAgKzEsMTMyIEBACisjIENvcHlyaWdodCAoYykgMjAxNywgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21vY2sgaW1wb3J0
IE1vY2tIb3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGlt
cG9ydCBNb2NrRmlsZVN5c3RlbQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2
ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZlMgorZnJvbSB3ZWJraXRweS53M2MudGVzdF9leHBv
cnRlciBpbXBvcnQgVGVzdEV4cG9ydGVyLCBwYXJzZV9hcmdzCitmcm9tIHdlYmtpdHB5LnczYy53
cHRfZ2l0aHViX21vY2sgaW1wb3J0IE1vY2tXUFRHaXRIdWIKKworCitjbGFzcyBUZXN0RXhwb3J0
ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYXhEaWZmID0gTm9uZQorCisgICAgY2xh
c3MgTW9ja0J1Z3ppbGxhKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAg
ICAgICAgICAgIHNlbGYuY2FsbHMgPSBbXQorCisgICAgICAgIGRlZiBmZXRjaF9idWdfZGljdGlv
bmFyeShzZWxmLCBpZCk6CisgICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnZmV0Y2ggYnVn
ICcgKyBpZCkKKyAgICAgICAgICAgIHJldHVybiB7InRpdGxlIjogIm15IGJ1ZyB0aXRsZSJ9CisK
KyAgICAgICAgZGVmIHBvc3RfY29tbWVudF90b19idWcoc2VsZiwgaWQsIGNvbW1lbnQpOgorICAg
ICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ3Bvc3QgY29tbWVudCB0byBidWcgJyArIGlkICsg
JyA6ICcgKyBjb21tZW50KQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGNsYXNzIE1v
Y2tHaXQob2JqZWN0KToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBjbG9uZShj
bHMsIHVybCwgZGlyZWN0b3J5LCBleGVjdXRpdmU9Tm9uZSk6CisgICAgICAgICAgICByZXR1cm4g
VHJ1ZQorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXBvc2l0b3J5X2RpcmVjdG9yeSwg
cGF0Y2hfZGlyZWN0b3JpZXMsIGV4ZWN1dGl2ZSwgZmlsZXN5c3RlbSk6CisgICAgICAgICAgICBz
ZWxmLmNhbGxzID0gW3JlcG9zaXRvcnlfZGlyZWN0b3J5XQorCisgICAgICAgIGRlZiBmZXRjaChz
ZWxmKToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdmZXRjaCcpCisKKyAgICAgICAg
ZGVmIGNoZWNrb3V0KHNlbGYsIGJyYW5jaCk6CisgICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVu
ZCgnY2hlY2tvdXQgJyArIGJyYW5jaCkKKworICAgICAgICBkZWYgcmVzZXRfaGFyZChzZWxmLCBj
b21taXQpOgorICAgICAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ3Jlc2V0IGhhcmQgJyArIGNv
bW1pdCkKKworICAgICAgICBkZWYgcHVzaChzZWxmLCBvcHRpb25zKToKKyAgICAgICAgICAgIHNl
bGYuY2FsbHMuYXBwZW5kKCdwdXNoICcgKyAnICcuam9pbihvcHRpb25zKSkKKworICAgICAgICBk
ZWYgZm9ybWF0X3BhdGNoKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICAgICAgc2VsZi5jYWxscy5h
cHBlbmQoJ2Zvcm1hdCBwYXRjaCAnICsgJyAnLmpvaW4ob3B0aW9ucykpCisgICAgICAgICAgICBy
ZXR1cm4gJ2Zvcm1hdHRlZCBwYXRjaCB3aXRoIGNoYW5nZXMgZG9uZSB0byBMYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Rlc3QxLmh0bWwnCisKKyAgICAgICAgZGVm
IGRlbGV0ZV9icmFuY2goc2VsZiwgYnJhbmNoX25hbWUpOgorICAgICAgICAgICAgc2VsZi5jYWxs
cy5hcHBlbmQoJ2RlbGV0ZSBicmFuY2ggJyArIGJyYW5jaF9uYW1lKQorCisgICAgICAgIGRlZiBj
aGVja291dF9uZXdfYnJhbmNoKHNlbGYsIGJyYW5jaF9uYW1lKToKKyAgICAgICAgICAgIHNlbGYu
Y2FsbHMuYXBwZW5kKCdjaGVja291dCBuZXcgYnJhbmNoICcgKyBicmFuY2hfbmFtZSkKKworICAg
ICAgICBkZWYgYXBwbHlfbWFpbF9wYXRjaChzZWxmLCBvcHRpb25zKToKKyAgICAgICAgICAgICMg
ZmlsdGVyaW5nIG9wdGlvbnNbMF0gYXMgaXQgY2hhbmdlcyBmb3IgZXZlcnkgcnVuCisgICAgICAg
ICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnYXBwbHlfbWFpbF9wYXRjaCBwYXRjaC50ZW1wICcgKyAn
ICcuam9pbihvcHRpb25zWzE6XSkpCisKKyAgICAgICAgZGVmIGNvbW1pdChzZWxmLCBvcHRpb25z
KToKKyAgICAgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdjb21taXQgJyArICcgJy5qb2luKG9w
dGlvbnMpKQorCisgICAgICAgIGRlZiByZW1vdGUoc2VsZiwgb3B0aW9ucyk6CisgICAgICAgICAg
ICBzZWxmLmNhbGxzLmFwcGVuZCgncmVtb3RlICcgKyAnICcuam9pbihvcHRpb25zKSkKKyAgICAg
ICAgICAgIHJldHVybiAibXlfcmVtb3RlX3VybCIKKworICAgICAgICBkZWYgbG9jYWxfY29uZmln
KHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuICd2YWx1ZScKKworICAgICAgICBkZWYg
YnJhbmNoX3JlZl9leGlzdHMoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICBkZWYgY3JlYXRlX3BhdGNoKHNlbGYsIGNvbW1pdCwgYXJndW1lbnRzKToKKyAg
ICAgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdjcmVhdGVfcGF0Y2ggJyArIGNvbW1pdCArICcg
JyArIHN0cihhcmd1bWVudHMpKQorICAgICAgICAgICAgcmV0dXJuICdteSBwYXRjaCBjb250YWlu
aW5nIHNvbWUgZGlmZnMnCisKKyAgICBjbGFzcyBNeU1vY2tIb3N0KE1vY2tIb3N0KToKKyAgICAg
ICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgTW9ja0hvc3QuX19pbml0X18oc2Vs
ZikKKyAgICAgICAgICAgIHNlbGYuZXhlY3V0aXZlID0gTW9ja0V4ZWN1dGl2ZTIoZXhjZXB0aW9u
PU9TRXJyb3IoKSkKKyAgICAgICAgICAgIHNlbGYuZmlsZXN5c3RlbSA9IE1vY2tGaWxlU3lzdGVt
KCkKKyAgICAgICAgICAgIHNlbGYuX21vY2tTQ00gPSBUZXN0RXhwb3J0ZXJUZXN0Lk1vY2tHaXQo
Tm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkKKworICAgICAgICBkZWYgc2NtKHNlbGYpOgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX21vY2tTQ00KKworICAgIGRlZiB0ZXN0X2V4cG9ydChzZWxmKToK
KyAgICAgICAgaG9zdCA9IFRlc3RFeHBvcnRlclRlc3QuTXlNb2NrSG9zdCgpCisgICAgICAgIG9w
dGlvbnMgPSBwYXJzZV9hcmdzKFsndGVzdF9leHBvcnRlci5weScsICctZycsICdIRUFEJywgJy1i
JywgJzEyMzQnLCAnLWMnLCAnLW4nLCAnVVNFUicsICctdCcsICdUT0tFTiddKQorICAgICAgICBl
eHBvcnRlciA9IFRlc3RFeHBvcnRlcihob3N0LCBvcHRpb25zLCBUZXN0RXhwb3J0ZXJUZXN0Lk1v
Y2tHaXQsIFRlc3RFeHBvcnRlclRlc3QuTW9ja0J1Z3ppbGxhLCBNb2NrV1BUR2l0SHViKQorICAg
ICAgICBleHBvcnRlci5kb19leHBvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBv
cnRlci5fZ2l0aHViLmNhbGxzLCBbJ2NyZWF0ZV9wciddKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhleHBvcnRlci5fZ2l0LmNhbGxzLCBbCisgICAgICAgICAgICAnL21vY2stY2hlY2tvdXQv
V2ViS2l0QnVpbGQvdzNjLXRlc3RzL3dlYi1wbGF0Zm9ybS10ZXN0cycsCisgICAgICAgICAgICAn
ZmV0Y2gnLAorICAgICAgICAgICAgJ2NoZWNrb3V0IG1hc3RlcicsCisgICAgICAgICAgICAncmVz
ZXQgaGFyZCBvcmlnaW4vbWFzdGVyJywKKyAgICAgICAgICAgICdjaGVja291dCBuZXcgYnJhbmNo
IHdwdC1leHBvcnQtZm9yLXdlYmtpdC0xMjM0JywKKyAgICAgICAgICAgICdhcHBseV9tYWlsX3Bh
dGNoIHBhdGNoLnRlbXAgLS1leGNsdWRlICotZXhwZWN0ZWQudHh0JywKKyAgICAgICAgICAgICdj
b21taXQgLWEgLW0gV2ViS2l0IGV4cG9ydCBvZiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTIzNCcsCisgICAgICAgICAgICAncmVtb3RlICcsCisgICAgICAgICAgICAn
cmVtb3RlIGFkZCBVU0VSIGh0dHBzOi8vVVNFUkBnaXRodWIuY29tL1VTRVIvd2ViLXBsYXRmb3Jt
LXRlc3RzLmdpdCcsCisgICAgICAgICAgICAncmVtb3RlIGdldC11cmwgVVNFUicsCisgICAgICAg
ICAgICAncHVzaCBVU0VSIHdwdC1leHBvcnQtZm9yLXdlYmtpdC0xMjM0OndwdC1leHBvcnQtZm9y
LXdlYmtpdC0xMjM0IC1mJywKKyAgICAgICAgICAgICdjaGVja291dCBtYXN0ZXInLAorICAgICAg
ICAgICAgJ2RlbGV0ZSBicmFuY2ggd3B0LWV4cG9ydC1mb3Itd2Via2l0LTEyMzQnLAorICAgICAg
ICAgICAgJ2NoZWNrb3V0IG1hc3RlcicsCisgICAgICAgICAgICAncmVzZXQgaGFyZCBvcmlnaW4v
bWFzdGVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cG9ydGVyLl9idWd6aWxsYS5j
YWxscywgWworICAgICAgICAgICAgJ2ZldGNoIGJ1ZyAxMjM0JywKKyAgICAgICAgICAgICdwb3N0
IGNvbW1lbnQgdG8gYnVnIDEyMzQgOiBTdWJtaXR0ZWQgd2ViLXBsYXRmb3JtLXRlc3RzIHB1bGwg
cmVxdWVzdDogaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcHVsbC81
Njc4J10pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy93cHRfZ2l0aHVi
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dpdGh1Yi5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44YTYyYzQ5ZWNmYjBiZmQzMTFhMTM4YjQ2NmIzODcxY2MzMjA2YjA0Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2Mvd3B0X2dpdGh1Yi5weQpAQCAtMCwwICsx
LDQyNyBAQAorIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBiYXNlNjQKK2ltcG9ydCBqc29u
CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgdXJsbGliMgorZnJvbSBjb2xsZWN0
aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBp
bXBvcnQgbWVtb2l6ZWQKK2Zyb20gd2Via2l0cHkudzNjLmNvbW1vbiBpbXBvcnQgV1BUX0dIX09S
RywgV1BUX0dIX1JFUE9fTkFNRSwgRVhQT1JUX1BSX0xBQkVMCisKK19sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcihfX25hbWVfXykKK0FQSV9CQVNFID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nCitN
QVhfUEVSX1BBR0UgPSAxMDAKKworCitjbGFzcyBXUFRHaXRIdWIob2JqZWN0KToKKyAgICAiIiJB
biBpbnRlcmZhY2UgdG8gR2l0SHViIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSB3ZWItcGxhdGZv
cm0tdGVzdHMgcmVwby4KKworICAgIFRoaXMgY2xhc3MgY29udGFpbnMgbWV0aG9kcyBmb3Igc2Vu
ZGluZyByZXF1ZXN0cyB0byB0aGUgR2l0SHViIEFQSS4KKyAgICBVbmxlc3MgbWVudGlvbmVkIG90
aGVyd2lzZSwgQVBJIGNhbGxzIGFyZSBleHBlY3RlZCB0byBzdWNjZWVkLCBhbmQKKyAgICBHaXRI
dWJFcnJvciB3aWxsIGJlIHJhaXNlZCBpZiBhbiBBUEkgY2FsbCBmYWlscy4KKyAgICAiIiIKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCB1c2VyPU5vbmUsIHRva2VuPU5vbmUsIHByX2hp
c3Rvcnlfd2luZG93PTUwMDApOgorICAgICAgICBzZWxmLmhvc3QgPSBob3N0CisgICAgICAgIHNl
bGYudXNlciA9IHVzZXIKKyAgICAgICAgc2VsZi50b2tlbiA9IHRva2VuCisKKyAgICAgICAgc2Vs
Zi5fcHJfaGlzdG9yeV93aW5kb3cgPSBwcl9oaXN0b3J5X3dpbmRvdworCisgICAgZGVmIGhhc19j
cmVkZW50aWFscyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudXNlciBhbmQgc2VsZi50b2tl
bgorCisgICAgZGVmIGF1dGhfdG9rZW4oc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmhhc19j
cmVkZW50aWFscygpCisgICAgICAgIHJldHVybiBiYXNlNjQuYjY0ZW5jb2RlKCd7fTp7fScuZm9y
bWF0KHNlbGYudXNlciwgc2VsZi50b2tlbikpCisKKyAgICBkZWYgcmVxdWVzdChzZWxmLCBwYXRo
LCBtZXRob2QsIGJvZHk9Tm9uZSk6CisgICAgICAgICIiIlNlbmRzIGEgcmVxdWVzdCB0byBHaXRI
dWIgQVBJIGFuZCBkZXNlcmlhbGl6ZXMgdGhlIHJlc3BvbnNlLgorCisgICAgICAgIEFyZ3M6Cisg
ICAgICAgICAgICBwYXRoOiBBUEkgZW5kcG9pbnQgd2l0aG91dCBiYXNlIFVSTCAoc3RhcnRpbmcg
d2l0aCAnLycpLgorICAgICAgICAgICAgbWV0aG9kOiBIVFRQIG1ldGhvZCB0byBiZSB1c2VkIGZv
ciB0aGlzIHJlcXVlc3QuCisgICAgICAgICAgICBib2R5OiBPcHRpb25hbCBwYXlsb2FkIGluIHRo
ZSByZXF1ZXN0IGJvZHkgKGRlZmF1bHQ9Tm9uZSkuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAg
ICAgICAgIEEgSlNPTlJlc3BvbnNlIGluc3RhbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgYXNz
ZXJ0IHBhdGguc3RhcnRzd2l0aCgnLycpCisKKyAgICAgICAgaWYgYm9keToKKyAgICAgICAgICAg
IGJvZHkgPSBqc29uLmR1bXBzKGJvZHkpCisKKyAgICAgICAgaGVhZGVycyA9IHsnQWNjZXB0Jzog
J2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbid9CisKKyAgICAgICAgaWYgc2VsZi5oYXNf
Y3JlZGVudGlhbHMoKToKKyAgICAgICAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICdC
YXNpYyB7fScuZm9ybWF0KHNlbGYuYXV0aF90b2tlbigpKQorCisgICAgICAgIHJlc3BvbnNlID0g
c2VsZi5ob3N0LndlYi5yZXF1ZXN0KAorICAgICAgICAgICAgbWV0aG9kPW1ldGhvZCwKKyAgICAg
ICAgICAgIHVybD1BUElfQkFTRSArIHBhdGgsCisgICAgICAgICAgICBkYXRhPWJvZHksCisgICAg
ICAgICAgICBoZWFkZXJzPWhlYWRlcnMKKyAgICAgICAgKQorICAgICAgICByZXR1cm4gSlNPTlJl
c3BvbnNlKHJlc3BvbnNlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHRyYWN0X2xp
bmtfbmV4dChsaW5rX2hlYWRlcik6CisgICAgICAgICIiIkV4dHJhY3RzIHRoZSBVUkkgdG8gdGhl
IG5leHQgcGFnZSBvZiByZXN1bHRzIGZyb20gYSByZXNwb25zZS4KKworICAgICAgICBBcyBwZXIg
R2l0SHViIEFQSSBzcGVjcywgdGhlIGxpbmsgdG8gdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzIGlz
CisgICAgICAgIGV4dHJhY3RlZCBmcm9tIHRoZSBMaW5rIGhlYWRlciAtLSB0aGUgbGluayB3aXRo
IHJlbGF0aW9uIHR5cGUgIm5leHQiLgorICAgICAgICBEb2NzOiBodHRwczovL2RldmVsb3Blci5n
aXRodWIuY29tL3YzLyNwYWdpbmF0aW9uIChhbmQgUkZDIDU5ODgpCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICAgIGxpbmtfaGVhZGVyOiBUaGUgdmFsdWUgb2YgdGhlIExpbmsgaGVhZGVyIGlu
IHJlc3BvbnNlcyBmcm9tIEdpdEh1Yi4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAg
UGF0aCB0byB0aGUgbmV4dCBwYWdlICh3aXRob3V0IGJhc2UgVVJMKSwgb3IgTm9uZSBpZiBub3Qg
Zm91bmQuCisgICAgICAgICIiIgorICAgICAgICAjIFRPRE8ocm9iZXJ0bWEpOiBJbnZlc3RpZ2F0
ZSAibWF5IHJlcXVpcmUgZXhwYW5zaW9uIGFzIFVSSSB0ZW1wbGF0ZXMiIG1lbnRpb25lZCBpbiBk
b2NzLgorICAgICAgICAjIEV4YW1wbGUgTGluayBoZWFkZXI6CisgICAgICAgICMgPGh0dHBzOi8v
YXBpLmdpdGh1Yi5jb20vcmVzb3VyY2VzP3BhZ2U9Mz47IHJlbD0ibmV4dCIsIDxodHRwczovL2Fw
aS5naXRodWIuY29tL3Jlc291cmNlcz9wYWdlPTUwPjsgcmVsPSJsYXN0IgorICAgICAgICBpZiBs
aW5rX2hlYWRlciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgbGlu
a19yZSA9IHJlLmNvbXBpbGUocic8KC4rPyk+OyAqcmVsPSIoLis/KSInKQorICAgICAgICBtYXRj
aCA9IGxpbmtfcmUuc2VhcmNoKGxpbmtfaGVhZGVyKQorICAgICAgICB3aGlsZSBtYXRjaDoKKyAg
ICAgICAgICAgIGxpbmssIHJlbCA9IG1hdGNoLmdyb3VwcygpCisgICAgICAgICAgICBpZiByZWwu
bG93ZXIoKSA9PSAnbmV4dCc6CisgICAgICAgICAgICAgICAgIyBTdHJpcCBBUElfQkFTRSBzbyB0
aGF0IHRoZSByZXR1cm4gdmFsdWUgaXMgdXNlZnVsIGZvciByZXF1ZXN0KCkuCisgICAgICAgICAg
ICAgICAgYXNzZXJ0IGxpbmsuc3RhcnRzd2l0aChBUElfQkFTRSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbGlua1tsZW4oQVBJX0JBU0UpOl0KKyAgICAgICAgICAgIG1hdGNoID0gbGlua19yZS5z
ZWFyY2gobGlua19oZWFkZXIsIG1hdGNoLmVuZCgpKQorICAgICAgICByZXR1cm4gTm9uZQorCisg
ICAgZGVmIGNyZWF0ZV9wcihzZWxmLCByZW1vdGVfYnJhbmNoX25hbWUsIGRlc2NfdGl0bGUsIGJv
ZHkpOgorICAgICAgICAiIiJDcmVhdGVzIGEgUFIgb24gR2l0SHViLgorCisgICAgICAgIEFQSSBk
b2M6IGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvcHVsbHMvI2NyZWF0ZS1hLXB1bGwt
cmVxdWVzdAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUaGUgaXNzdWUgbnVtYmVy
IG9mIHRoZSBjcmVhdGVkIFBSLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IHJlbW90ZV9i
cmFuY2hfbmFtZQorICAgICAgICBhc3NlcnQgZGVzY190aXRsZQorICAgICAgICBhc3NlcnQgYm9k
eQorCisgICAgICAgIHBhdGggPSAnL3JlcG9zLyVzLyVzL3B1bGxzJyAlIChXUFRfR0hfT1JHLCBX
UFRfR0hfUkVQT19OQU1FKQorICAgICAgICBib2R5ID0geworICAgICAgICAgICAgJ3RpdGxlJzog
ZGVzY190aXRsZSwKKyAgICAgICAgICAgICdib2R5JzogYm9keSwKKyAgICAgICAgICAgICdoZWFk
JzogcmVtb3RlX2JyYW5jaF9uYW1lLAorICAgICAgICAgICAgJ2Jhc2UnOiAnbWFzdGVyJywKKyAg
ICAgICAgfQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChwYXRoLCBtZXRob2Q9J1BP
U1QnLCBib2R5PWJvZHkpCisKKyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAx
OgorICAgICAgICAgICAgcmFpc2UgR2l0SHViRXJyb3IoMjAxLCByZXNwb25zZS5zdGF0dXNfY29k
ZSwgJ2NyZWF0ZSBQUicpCisKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGFbJ251bWJlcidd
CisKKyAgICBkZWYgdXBkYXRlX3ByKHNlbGYsIHByX251bWJlciwgZGVzY190aXRsZSwgYm9keSk6
CisgICAgICAgICIiIlVwZGF0ZXMgYSBQUiBvbiBHaXRIdWIuCisKKyAgICAgICAgQVBJIGRvYzog
aHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9wdWxscy8jdXBkYXRlLWEtcHVsbC1yZXF1
ZXN0CisgICAgICAgICIiIgorICAgICAgICBwYXRoID0gJy9yZXBvcy97fS97fS9wdWxscy97fScu
Zm9ybWF0KAorICAgICAgICAgICAgV1BUX0dIX09SRywKKyAgICAgICAgICAgIFdQVF9HSF9SRVBP
X05BTUUsCisgICAgICAgICAgICBwcl9udW1iZXIKKyAgICAgICAgKQorICAgICAgICBib2R5ID0g
eworICAgICAgICAgICAgJ3RpdGxlJzogZGVzY190aXRsZSwKKyAgICAgICAgICAgICdib2R5Jzog
Ym9keSwKKyAgICAgICAgfQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChwYXRoLCBt
ZXRob2Q9J1BBVENIJywgYm9keT1ib2R5KQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19j
b2RlICE9IDIwMDoKKyAgICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9yKDIwMCwgcmVzcG9uc2Uu
c3RhdHVzX2NvZGUsICd1cGRhdGUgUFIgJWQnICUgcHJfbnVtYmVyKQorCisgICAgZGVmIGFkZF9s
YWJlbChzZWxmLCBudW1iZXIsIGxhYmVsKToKKyAgICAgICAgIiIiQWRkcyBhIGxhYmVsIHRvIGEg
R2l0SHViIGlzc3VlIChvciBQUikuCisKKyAgICAgICAgQVBJIGRvYzogaHR0cHM6Ly9kZXZlbG9w
ZXIuZ2l0aHViLmNvbS92My9pc3N1ZXMvbGFiZWxzLyNhZGQtbGFiZWxzLXRvLWFuLWlzc3VlCisg
ICAgICAgICIiIgorICAgICAgICBwYXRoID0gJy9yZXBvcy8lcy8lcy9pc3N1ZXMvJWQvbGFiZWxz
JyAlICgKKyAgICAgICAgICAgIFdQVF9HSF9PUkcsCisgICAgICAgICAgICBXUFRfR0hfUkVQT19O
QU1FLAorICAgICAgICAgICAgbnVtYmVyCisgICAgICAgICkKKyAgICAgICAgYm9keSA9IFtsYWJl
bF0KKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdQT1NUJywg
Ym9keT1ib2R5KQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAg
ICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9yKDIwMCwgcmVzcG9uc2Uuc3RhdHVzX2NvZGUsICdh
ZGQgbGFiZWwgJXMgdG8gaXNzdWUgJWQnICUgKGxhYmVsLCBudW1iZXIpKQorCisgICAgZGVmIHJl
bW92ZV9sYWJlbChzZWxmLCBudW1iZXIsIGxhYmVsKToKKyAgICAgICAgIiIiUmVtb3ZlcyBhIGxh
YmVsIGZyb20gYSBHaXRIdWIgaXNzdWUgKG9yIFBSKS4KKworICAgICAgICBBUEkgZG9jOiBodHRw
czovL2RldmVsb3Blci5naXRodWIuY29tL3YzL2lzc3Vlcy9sYWJlbHMvI3JlbW92ZS1hLWxhYmVs
LWZyb20tYW4taXNzdWUKKyAgICAgICAgIiIiCisgICAgICAgIHBhdGggPSAnL3JlcG9zLyVzLyVz
L2lzc3Vlcy8lZC9sYWJlbHMvJXMnICUgKAorICAgICAgICAgICAgV1BUX0dIX09SRywKKyAgICAg
ICAgICAgIFdQVF9HSF9SRVBPX05BTUUsCisgICAgICAgICAgICBudW1iZXIsCisgICAgICAgICAg
ICB1cmxsaWIyLnF1b3RlKGxhYmVsKSwKKyAgICAgICAgKQorICAgICAgICByZXNwb25zZSA9IHNl
bGYucmVxdWVzdChwYXRoLCBtZXRob2Q9J0RFTEVURScpCisKKyAgICAgICAgIyBUaGUgR2l0SHVi
IEFQSSBkb2N1bWVudGF0aW9uIGNsYWltcyB0aGF0IHRoaXMgZW5kcG9pbnQgcmV0dXJucyBhIDIw
NAorICAgICAgICAjIG9uIHN1Y2Nlc3MuIEhvd2V2ZXIgaW4gcmVhbGl0eSBpdCByZXR1cm5zIGEg
MjAwLgorICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSBub3QgaW4gKDIwMCwgMjA0KToK
KyAgICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9yKCgyMDAsIDIwNCksIHJlc3BvbnNlLnN0YXR1
c19jb2RlLCAncmVtb3ZlIGxhYmVsICVzIGZyb20gaXNzdWUgJWQnICUgKGxhYmVsLCBudW1iZXIp
KQorCisgICAgZGVmIG1ha2VfcHJfZnJvbV9pdGVtKHNlbGYsIGl0ZW0pOgorICAgICAgICBsYWJl
bHMgPSBbbGFiZWxbJ25hbWUnXSBmb3IgbGFiZWwgaW4gaXRlbVsnbGFiZWxzJ11dCisgICAgICAg
IHJldHVybiBQdWxsUmVxdWVzdCgKKyAgICAgICAgICAgIHRpdGxlPWl0ZW1bJ3RpdGxlJ10sCisg
ICAgICAgICAgICBudW1iZXI9aXRlbVsnbnVtYmVyJ10sCisgICAgICAgICAgICBib2R5PWl0ZW1b
J2JvZHknXSwKKyAgICAgICAgICAgIHN0YXRlPWl0ZW1bJ3N0YXRlJ10sCisgICAgICAgICAgICBs
YWJlbHM9bGFiZWxzKQorCisgICAgQG1lbW9pemVkCisgICAgZGVmIGFsbF9wdWxsX3JlcXVlc3Rz
KHNlbGYpOgorICAgICAgICAiIiJGZXRjaGVzIGFsbCAob3BlbiBhbmQgY2xvc2VkKSBQUnMgd2l0
aCB0aGUgZXhwb3J0IGxhYmVsLgorCisgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBQUnMg
aXMgcHJfaGlzdG9yeV93aW5kb3cuIFNlYXJjaCBlbmRwb2ludCBpcyB1c2VkCisgICAgICAgIGlu
c3RlYWQgb2YgbGlzdGluZyBQUnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBmaWx0ZXIgYnkgbGFiZWxz
LgorICAgICAgICBBUEkgZG9jOiBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL3NlYXJj
aC8jc2VhcmNoLWlzc3VlcworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGxpc3Qg
b2YgUHVsbFJlcXVlc3QgbmFtZWR0dXBsZXMuCisgICAgICAgICIiIgorICAgICAgICBwYXRoID0g
KAorICAgICAgICAgICAgJy9zZWFyY2gvaXNzdWVzJworICAgICAgICAgICAgJz9xPXJlcG86e30v
e30lMjB0eXBlOnByJTIwbGFiZWw6e30nCisgICAgICAgICAgICAnJnBhZ2U9MScKKyAgICAgICAg
ICAgICcmcGVyX3BhZ2U9e30nCisgICAgICAgICkuZm9ybWF0KAorICAgICAgICAgICAgV1BUX0dI
X09SRywKKyAgICAgICAgICAgIFdQVF9HSF9SRVBPX05BTUUsCisgICAgICAgICAgICBFWFBPUlRf
UFJfTEFCRUwsCisgICAgICAgICAgICBtaW4oTUFYX1BFUl9QQUdFLCBzZWxmLl9wcl9oaXN0b3J5
X3dpbmRvdykKKyAgICAgICAgKQorICAgICAgICBhbGxfcHJzID0gW10KKyAgICAgICAgd2hpbGUg
cGF0aCBpcyBub3QgTm9uZSBhbmQgbGVuKGFsbF9wcnMpIDwgc2VsZi5fcHJfaGlzdG9yeV93aW5k
b3c6CisgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChwYXRoLCBtZXRob2Q9J0dF
VCcpCisgICAgICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDA6CisgICAgICAg
ICAgICAgICAgaWYgcmVzcG9uc2UuZGF0YVsnaW5jb21wbGV0ZV9yZXN1bHRzJ106CisgICAgICAg
ICAgICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9yKCdjb21wbGV0ZSByZXN1bHRzJywgJ2luY29t
cGxldGUgcmVzdWx0cycsICdmZXRjaCBhbGwgcHVsbCByZXF1ZXN0cycsIHBhdGgpCisKKyAgICAg
ICAgICAgICAgICBwcnMgPSBbc2VsZi5tYWtlX3ByX2Zyb21faXRlbShpdGVtKSBmb3IgaXRlbSBp
biByZXNwb25zZS5kYXRhWydpdGVtcyddXQorICAgICAgICAgICAgICAgIGFsbF9wcnMgKz0gcHJz
WzpzZWxmLl9wcl9oaXN0b3J5X3dpbmRvdyAtIGxlbihhbGxfcHJzKV0KKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgcmFpc2UgR2l0SHViRXJyb3IoMjAwLCByZXNwb25zZS5zdGF0
dXNfY29kZSwgJ2ZldGNoIGFsbCBwdWxsIHJlcXVlc3RzJywgcGF0aCkKKyAgICAgICAgICAgIHBh
dGggPSBzZWxmLmV4dHJhY3RfbGlua19uZXh0KHJlc3BvbnNlLmdldGhlYWRlcignTGluaycpKQor
ICAgICAgICByZXR1cm4gYWxsX3BycworCisgICAgZGVmIGdldF9wcl9icmFuY2goc2VsZiwgcHJf
bnVtYmVyKToKKyAgICAgICAgIiIiR2V0cyB0aGUgcmVtb3RlIGJyYW5jaCBuYW1lIG9mIGEgUFIu
CisKKyAgICAgICAgQVBJIGRvYzogaHR0cHM6Ly9kZXZlbG9wZXIuZ2l0aHViLmNvbS92My9wdWxs
cy8jZ2V0LWEtc2luZ2xlLXB1bGwtcmVxdWVzdAorCisgICAgICAgIFJldHVybnM6CisgICAgICAg
ICAgICBUaGUgcmVtb3RlIGJyYW5jaCBuYW1lLgorICAgICAgICAiIiIKKyAgICAgICAgcGF0aCA9
ICcvcmVwb3Mve30ve30vcHVsbHMve30nLmZvcm1hdCgKKyAgICAgICAgICAgIFdQVF9HSF9PUkcs
CisgICAgICAgICAgICBXUFRfR0hfUkVQT19OQU1FLAorICAgICAgICAgICAgcHJfbnVtYmVyCisg
ICAgICAgICkKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdH
RVQnKQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAg
ICAgIHJhaXNlIEdpdEh1YkVycm9yKDIwMCwgcmVzcG9uc2Uuc3RhdHVzX2NvZGUsICdnZXQgdGhl
IGJyYW5jaCBvZiBQUiAlZCcgJSBwcl9udW1iZXIpCisKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNl
LmRhdGFbJ2hlYWQnXVsncmVmJ10KKworICAgIGRlZiBpc19wcl9tZXJnZWQoc2VsZiwgcHJfbnVt
YmVyKToKKyAgICAgICAgIiIiQ2hlY2tzIGlmIGEgUFIgaGFzIGJlZW4gbWVyZ2VkLgorCisgICAg
ICAgIEFQSSBkb2M6IGh0dHBzOi8vZGV2ZWxvcGVyLmdpdGh1Yi5jb20vdjMvcHVsbHMvI2dldC1p
Zi1hLXB1bGwtcmVxdWVzdC1oYXMtYmVlbi1tZXJnZWQKKworICAgICAgICBSZXR1cm5zOgorICAg
ICAgICAgICAgVHJ1ZSBpZiBtZXJnZWQsIEZhbHNlIGlmIG5vdC4KKyAgICAgICAgIiIiCisgICAg
ICAgIHBhdGggPSAnL3JlcG9zLyVzLyVzL3B1bGxzLyVkL21lcmdlJyAlICgKKyAgICAgICAgICAg
IFdQVF9HSF9PUkcsCisgICAgICAgICAgICBXUFRfR0hfUkVQT19OQU1FLAorICAgICAgICAgICAg
cHJfbnVtYmVyCisgICAgICAgICkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcG9uc2Ug
PSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdHRVQnKQorICAgICAgICAgICAgaWYgcmVzcG9u
c2Uuc3RhdHVzX2NvZGUgPT0gMjA0OgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEdpdEh1YkVycm9yKDIwNCwgcmVz
cG9uc2Uuc3RhdHVzX2NvZGUsICdjaGVjayBpZiBQUiAlZCBpcyBtZXJnZWQnICUgcHJfbnVtYmVy
KQorICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlm
IGUuY29kZSA9PSA0MDQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgbWVyZ2VfcHIoc2VsZiwg
cHJfbnVtYmVyKToKKyAgICAgICAgIiIiTWVyZ2VzIGEgUFIuCisKKyAgICAgICAgSWYgbWVyZ2Ug
Y2Fubm90IGJlIHBlcmZvcm1lZCwgTWVyZ2VFcnJvciBpcyByYWlzZWQuIEdpdEh1YkVycm9yIGlz
CisgICAgICAgIHJhaXNlZCB3aGVuIG90aGVyIHVua25vd24gZXJyb3JzIGhhcHBlbi4KKworICAg
ICAgICBBUEkgZG9jOiBodHRwczovL2RldmVsb3Blci5naXRodWIuY29tL3YzL3B1bGxzLyNtZXJn
ZS1hLXB1bGwtcmVxdWVzdC1tZXJnZS1idXR0b24KKyAgICAgICAgIiIiCisgICAgICAgIHBhdGgg
PSAnL3JlcG9zLyVzLyVzL3B1bGxzLyVkL21lcmdlJyAlICgKKyAgICAgICAgICAgIFdQVF9HSF9P
UkcsCisgICAgICAgICAgICBXUFRfR0hfUkVQT19OQU1FLAorICAgICAgICAgICAgcHJfbnVtYmVy
CisgICAgICAgICkKKyAgICAgICAgYm9keSA9IHsKKyAgICAgICAgICAgICdtZXJnZV9tZXRob2Qn
OiAncmViYXNlJywKKyAgICAgICAgfQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3Bv
bnNlID0gc2VsZi5yZXF1ZXN0KHBhdGgsIG1ldGhvZD0nUFVUJywgYm9keT1ib2R5KQorICAgICAg
ICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuY29kZSA9
PSA0MDU6CisgICAgICAgICAgICAgICAgcmFpc2UgTWVyZ2VFcnJvcihwcl9udW1iZXIpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgaWYgcmVzcG9u
c2Uuc3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgcmFpc2UgR2l0SHViRXJyb3IoMjAw
LCByZXNwb25zZS5zdGF0dXNfY29kZSwgJ21lcmdlIFBSICVkJyAlIHByX251bWJlcikKKworICAg
IGRlZiBkZWxldGVfcmVtb3RlX2JyYW5jaChzZWxmLCByZW1vdGVfYnJhbmNoX25hbWUpOgorICAg
ICAgICAiIiJEZWxldGVzIGEgcmVtb3RlIGJyYW5jaC4KKworICAgICAgICBBUEkgZG9jOiBodHRw
czovL2RldmVsb3Blci5naXRodWIuY29tL3YzL2dpdC9yZWZzLyNkZWxldGUtYS1yZWZlcmVuY2UK
KyAgICAgICAgIiIiCisgICAgICAgIHBhdGggPSAnL3JlcG9zLyVzLyVzL2dpdC9yZWZzL2hlYWRz
LyVzJyAlICgKKyAgICAgICAgICAgIFdQVF9HSF9PUkcsCisgICAgICAgICAgICBXUFRfR0hfUkVQ
T19OQU1FLAorICAgICAgICAgICAgcmVtb3RlX2JyYW5jaF9uYW1lCisgICAgICAgICkKKyAgICAg
ICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QocGF0aCwgbWV0aG9kPSdERUxFVEUnKQorCisgICAg
ICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwNDoKKyAgICAgICAgICAgIHJhaXNlIEdp
dEh1YkVycm9yKDIwNCwgcmVzcG9uc2Uuc3RhdHVzX2NvZGUsICdkZWxldGUgcmVtb3RlIGJyYW5j
aCAlcycgJSByZW1vdGVfYnJhbmNoX25hbWUpCisKKyAgICBkZWYgcHJfZm9yX2Nocm9taXVtX2Nv
bW1pdChzZWxmLCBjaHJvbWl1bV9jb21taXQpOgorICAgICAgICAiIiJSZXR1cm5zIGEgUFIgY29y
cmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gQ2hyb21pdW1Db21taXQsIG9yIE5vbmUuIiIiCisgICAg
ICAgIHB1bGxfcmVxdWVzdCA9IHNlbGYucHJfd2l0aF9jaGFuZ2VfaWQoY2hyb21pdW1fY29tbWl0
LmNoYW5nZV9pZCgpKQorICAgICAgICBpZiBwdWxsX3JlcXVlc3Q6CisgICAgICAgICAgICByZXR1
cm4gcHVsbF9yZXF1ZXN0CisgICAgICAgICMgVGhlIENoYW5nZSBJRCBjYW4ndCBiZSB1c2VkIGZv
ciBjb21taXRzIG1hZGUgdmlhIFJpZXR2ZWxkLAorICAgICAgICAjIHNvIHdlIGZhbGwgYmFjayB0
byB0cnlpbmcgdG8gdXNlIGNvbW1pdCBwb3NpdGlvbiBoZXJlLgorICAgICAgICAjIE5vdGUgdGhh
dCBHZXJyaXQgcmV0dXJucyBUb1QrMSBhcyB0aGUgY29tbWl0IHBvc2l0aW9ucyBmb3IgaW4tZmxp
Z2h0CisgICAgICAgICMgQ0xzLCBidXQgdGhleSBhcmUgc2NydWJiZWQgZnJvbSB0aGUgUFIgZGVz
Y3JpcHRpb24gYW5kIGhlbmNlIHdvdWxkCisgICAgICAgICMgbm90IGJlIG1pc21hdGNoZWQgdG8g
cmFuZG9tIENocm9taXVtIGNvbW1pdHMgaW4gdGhlIGZhbGxiYWNrLgorICAgICAgICAjIFRPRE8o
cm9iZXJ0bWEpOiBSZW1vdmUgdGhpcyBmYWxsYmFjayBhZnRlciBSaWV0dmVsZCBiZWNvbWVzIHJl
YWQtb25seS4KKyAgICAgICAgcmV0dXJuIHNlbGYucHJfd2l0aF9wb3NpdGlvbihjaHJvbWl1bV9j
b21taXQucG9zaXRpb24pCisKKyAgICBkZWYgcHJfd2l0aF9jaGFuZ2VfaWQoc2VsZiwgdGFyZ2V0
X2NoYW5nZV9pZCk6CisgICAgICAgIGZvciBwdWxsX3JlcXVlc3QgaW4gc2VsZi5hbGxfcHVsbF9y
ZXF1ZXN0cygpOgorICAgICAgICAgICAgIyBOb3RlOiBTZWFyY2ggYWxsICdDaGFuZ2UtSWQncyBz
byB0aGF0IHdlIGNhbiBtYW51YWxseSBwdXQgbXVsdGlwbGUKKyAgICAgICAgICAgICMgQ0xzIGlu
IG9uZSBQUi4gKFRoZSBleHBvcnRlciBhbHdheXMgY3JlYXRlcyBvbmUgUFIgZm9yIGVhY2ggQ0wu
KQorICAgICAgICAgICAgY2hhbmdlX2lkcyA9IHNlbGYuZXh0cmFjdF9tZXRhZGF0YSgnQ2hhbmdl
LUlkOiAnLCBwdWxsX3JlcXVlc3QuYm9keSwgYWxsX21hdGNoZXM9VHJ1ZSkKKyAgICAgICAgICAg
IGlmIHRhcmdldF9jaGFuZ2VfaWQgaW4gY2hhbmdlX2lkczoKKyAgICAgICAgICAgICAgICByZXR1
cm4gcHVsbF9yZXF1ZXN0CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcHJfd2l0aF9w
b3NpdGlvbihzZWxmLCBwb3NpdGlvbik6CisgICAgICAgIGZvciBwdWxsX3JlcXVlc3QgaW4gc2Vs
Zi5hbGxfcHVsbF9yZXF1ZXN0cygpOgorICAgICAgICAgICAgIyBTYW1lIGFzIGFib3ZlLCBzZWFy
Y2ggYWxsICdDci1Db21taXQtUG9zaXRpb24ncy4KKyAgICAgICAgICAgIHByX2NvbW1pdF9wb3Np
dGlvbnMgPSBzZWxmLmV4dHJhY3RfbWV0YWRhdGEoJ0NyLUNvbW1pdC1Qb3NpdGlvbjogJywgcHVs
bF9yZXF1ZXN0LmJvZHksIGFsbF9tYXRjaGVzPVRydWUpCisgICAgICAgICAgICBpZiBwb3NpdGlv
biBpbiBwcl9jb21taXRfcG9zaXRpb25zOgorICAgICAgICAgICAgICAgIHJldHVybiBwdWxsX3Jl
cXVlc3QKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
ZXh0cmFjdF9tZXRhZGF0YSh0YWcsIGNvbW1pdF9ib2R5LCBhbGxfbWF0Y2hlcz1GYWxzZSk6Cisg
ICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgIGZvciBsaW5lIGluIGNvbW1pdF9ib2R5LnNwbGl0
bGluZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgodGFnKToKKyAgICAg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsdWUgPSBsaW5lW2xlbih0YWcpOl0K
KyAgICAgICAgICAgIGlmIGFsbF9tYXRjaGVzOgorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBl
bmQodmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZQorICAgICAgICByZXR1cm4gdmFsdWVzIGlmIGFsbF9tYXRjaGVzIGVsc2UgTm9uZQorCisKK2Ns
YXNzIEpTT05SZXNwb25zZShvYmplY3QpOgorICAgICIiIkFuIEhUVFAgcmVzcG9uc2UgY29udGFp
bmluZyBKU09OIGRhdGEuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3X3Jlc3BvbnNl
KToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZXMgYSBKU09OUmVzcG9uc2UgaW5zdGFuY2UuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICAgIHJhd19yZXNwb25zZTogYSByZXNwb25zZSBvYmplY3Qg
cmV0dXJuZWQgYnkgb3BlbiBtZXRob2RzIGluIHVybGxpYjIuCisgICAgICAgICIiIgorICAgICAg
ICBzZWxmLl9yYXdfcmVzcG9uc2UgPSByYXdfcmVzcG9uc2UKKyAgICAgICAgc2VsZi5zdGF0dXNf
Y29kZSA9IHJhd19yZXNwb25zZS5nZXRjb2RlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
c2VsZi5kYXRhID0ganNvbi5sb2FkKHJhd19yZXNwb25zZSkKKyAgICAgICAgZXhjZXB0IFZhbHVl
RXJyb3I6CisgICAgICAgICAgICBzZWxmLmRhdGEgPSBOb25lCisKKyAgICBkZWYgZ2V0aGVhZGVy
KHNlbGYsIGhlYWRlcik6CisgICAgICAgICIiIkdldHMgdGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIg
d2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKworICAgICAgICBEZWxlZ2F0ZXMgdG8gSFRUUE1lc3NhZ2Uu
Z2V0aGVhZGVyKCksIHdoaWNoIGlzIGNhc2UtaW5zZW5zaXRpdmUuIiIiCisgICAgICAgIHJldHVy
biBzZWxmLl9yYXdfcmVzcG9uc2UuaW5mbygpLmdldGhlYWRlcihoZWFkZXIpCisKKworY2xhc3Mg
R2l0SHViRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgd2hlbiBhbiBHaXRIdWIgcmV0
dXJucyBhIG5vbi1PSyByZXNwb25zZSBzdGF0dXMgZm9yIGEgcmVxdWVzdC4iIiIKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBleHBlY3RlZCwgcmVjZWl2ZWQsIGFjdGlvbiwgZXh0cmFfZGF0YT1O
b25lKToKKyAgICAgICAgbWVzc2FnZSA9ICdFeHBlY3RlZCB7fSwgYnV0IHJlY2VpdmVkIHt9IGZy
b20gR2l0SHViIHdoZW4gYXR0ZW1wdGluZyB0byB7fScuZm9ybWF0KAorICAgICAgICAgICAgZXhw
ZWN0ZWQsIHJlY2VpdmVkLCBhY3Rpb24KKyAgICAgICAgKQorICAgICAgICBpZiBleHRyYV9kYXRh
OgorICAgICAgICAgICAgbWVzc2FnZSArPSAnXG4nICsgc3RyKGV4dHJhX2RhdGEpCisgICAgICAg
IHN1cGVyKEdpdEh1YkVycm9yLCBzZWxmKS5fX2luaXRfXyhtZXNzYWdlKQorCisKK2NsYXNzIE1l
cmdlRXJyb3IoR2l0SHViRXJyb3IpOgorICAgICIiIkFuIGVycm9yIHNwZWNpZmljYWxseSBmb3Ig
d2hlbiBhIFBSIGNhbm5vdCBiZSBtZXJnZWQuCisKKyAgICBUaGlzIHNob3VsZCBvbmx5IGJlIHRo
cm93biB3aGVuIEdpdEh1YiByZXR1cm5zIHN0YXR1cyBjb2RlIDQwNSwKKyAgICBpbmRpY2F0aW5n
IHRoYXQgdGhlIFBSIGNvdWxkIG5vdCBiZSBtZXJnZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcHJfbnVtYmVyKToKKyAgICAgICAgc3VwZXIoTWVyZ2VFcnJvciwgc2VsZiku
X19pbml0X18oMjAwLCA0MDUsICdtZXJnZSBQUiAlZCcgJSBwcl9udW1iZXIpCisKKworUHVsbFJl
cXVlc3QgPSBuYW1lZHR1cGxlKCdQdWxsUmVxdWVzdCcsIFsndGl0bGUnLCAnbnVtYmVyJywgJ2Jv
ZHknLCAnc3RhdGUnLCAnbGFiZWxzJ10pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3czYy93cHRfZ2l0aHViX21vY2sucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy93
cHRfZ2l0aHViX21vY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWZkNmVhN2RlYTYxZjExNzJkZDRlZjE5ZTgz
MTNkZGEzNTEwOGM0NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dzNjL3dwdF9naXRodWJfbW9jay5weQpAQCAtMCwwICsxLDEyNSBAQAorIyBDb3B5cmlnaHQgMjAx
NyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2Zyb20gd2Via2l0cHkudzNjLndwdF9naXRodWIgaW1wb3J0IE1lcmdlRXJyb3IsIFdQ
VEdpdEh1YgorCisKK2NsYXNzIE1vY2tXUFRHaXRIdWIob2JqZWN0KToKKworICAgICMgU29tZSB1
bnVzZWQgYXJndW1lbnRzIG1heSBiZSBpbmNsdWRlZCB0byBtYXRjaCB0aGUgcmVhbCBjbGFzcydz
IEFQSS4KKyAgICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwdWxsX3JlcXVlc3RzLCB1bnN1Y2Nlc3NmdWxfbWVyZ2VfaW5kZXg9LTEs
IGNyZWF0ZV9wcl9mYWlsX2luZGV4PS0xLCBtZXJnZWRfaW5kZXg9LTEpOgorICAgICAgICAiIiJJ
bml0aWFsaXplcyBhIG1vY2sgV1BUR2l0SHViLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
ICBwdWxsX3JlcXVlc3RzOiBBIGxpc3Qgb2Ygd3B0X2dpdGh1Yi5QdWxsUmVxdWVzdC4KKyAgICAg
ICAgICAgIHVuc3VjY2Vzc2Z1bF9tZXJnZV9pbmRleDogVGhlIGluZGV4IHRvIHRoZSBQUiBpbiBw
dWxsX3JlcXVlc3RzIHRoYXQKKyAgICAgICAgICAgICAgICBjYW5ub3QgYmUgbWVyZ2VkLiAoLTEg
bWVhbnMgYWxsIGNhbiBiZSBtZXJnZWQuKQorICAgICAgICAgICAgY3JlYXRlX3ByX2ZhaWxfaW5k
ZXg6IFRoZSAwLWJhc2VkIGluZGV4IG9mIHdoaWNoIFBSIGNyZWF0aW9uIHJlcXVlc3QKKyAgICAg
ICAgICAgICAgICB3aWxsIGZhaWwuICgtMSBtZWFucyBhbGwgd2lsbCBzdWNjZWVkLikKKyAgICAg
ICAgICAgIG1lcmdlZF9pbmRleDogVGhlIGluZGV4IHRvIHRoZSBQUiBpbiBwdWxsX3JlcXVlc3Rz
IHRoYXQgaXMgYWxyZWFkeQorICAgICAgICAgICAgICAgIG1lcmdlZC4gKC0xIG1lYW5zIG5vbmUg
aXMgbWVyZ2VkLikKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucHVsbF9yZXF1ZXN0cyA9IHB1
bGxfcmVxdWVzdHMKKyAgICAgICAgc2VsZi5jYWxscyA9IFtdCisgICAgICAgIHNlbGYucHVsbF9y
ZXF1ZXN0c19jcmVhdGVkID0gW10KKyAgICAgICAgc2VsZi5wdWxsX3JlcXVlc3RzX21lcmdlZCA9
IFtdCisgICAgICAgIHNlbGYudW5zdWNjZXNzZnVsX21lcmdlX2luZGV4ID0gdW5zdWNjZXNzZnVs
X21lcmdlX2luZGV4CisgICAgICAgIHNlbGYuY3JlYXRlX3ByX2luZGV4ID0gMAorICAgICAgICBz
ZWxmLmNyZWF0ZV9wcl9mYWlsX2luZGV4ID0gY3JlYXRlX3ByX2ZhaWxfaW5kZXgKKyAgICAgICAg
c2VsZi5tZXJnZWRfaW5kZXggPSBtZXJnZWRfaW5kZXgKKworICAgIGRlZiBhbGxfcHVsbF9yZXF1
ZXN0cyhzZWxmLCBsaW1pdD0zMCk6CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdhbGxfcHVs
bF9yZXF1ZXN0cycpCisgICAgICAgIHJldHVybiBzZWxmLnB1bGxfcmVxdWVzdHMKKworICAgIGRl
ZiBpc19wcl9tZXJnZWQoc2VsZiwgbnVtYmVyKToKKyAgICAgICAgZm9yIGluZGV4LCBwciBpbiBl
bnVtZXJhdGUoc2VsZi5wdWxsX3JlcXVlc3RzKToKKyAgICAgICAgICAgIGlmIHByLm51bWJlciA9
PSBudW1iZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ID09IHNlbGYubWVyZ2VkX2lu
ZGV4CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIG1lcmdlX3ByKHNlbGYsIG51bWJl
cik6CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCdtZXJnZV9wcicpCisKKyAgICAgICAgZm9y
IGluZGV4LCBwciBpbiBlbnVtZXJhdGUoc2VsZi5wdWxsX3JlcXVlc3RzKToKKyAgICAgICAgICAg
IGlmIHByLm51bWJlciA9PSBudW1iZXIgYW5kIGluZGV4ID09IHNlbGYudW5zdWNjZXNzZnVsX21l
cmdlX2luZGV4OgorICAgICAgICAgICAgICAgIHJhaXNlIE1lcmdlRXJyb3IobnVtYmVyKQorCisg
ICAgICAgIHNlbGYucHVsbF9yZXF1ZXN0c19tZXJnZWQuYXBwZW5kKG51bWJlcikKKworICAgIGRl
ZiBjcmVhdGVfcHIoc2VsZiwgcmVtb3RlX2JyYW5jaF9uYW1lLCBkZXNjX3RpdGxlLCBib2R5KToK
KyAgICAgICAgc2VsZi5jYWxscy5hcHBlbmQoJ2NyZWF0ZV9wcicpCisKKyAgICAgICAgaWYgc2Vs
Zi5jcmVhdGVfcHJfZmFpbF9pbmRleCAhPSBzZWxmLmNyZWF0ZV9wcl9pbmRleDoKKyAgICAgICAg
ICAgIHNlbGYucHVsbF9yZXF1ZXN0c19jcmVhdGVkLmFwcGVuZCgocmVtb3RlX2JyYW5jaF9uYW1l
LCBkZXNjX3RpdGxlLCBib2R5KSkKKworICAgICAgICBzZWxmLmNyZWF0ZV9wcl9pbmRleCArPSAx
CisgICAgICAgIHJldHVybiA1Njc4CisKKyAgICBkZWYgdXBkYXRlX3ByKHNlbGYsIHByX251bWJl
ciwgZGVzY190aXRsZSwgYm9keSk6CisgICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKCd1cGRhdGVf
cHInKQorICAgICAgICByZXR1cm4gNTY3OAorCisgICAgZGVmIGRlbGV0ZV9yZW1vdGVfYnJhbmNo
KHNlbGYsIF8pOgorICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnZGVsZXRlX3JlbW90ZV9icmFu
Y2gnKQorCisgICAgZGVmIGFkZF9sYWJlbChzZWxmLCBfLCBsYWJlbCk6CisgICAgICAgIHNlbGYu
Y2FsbHMuYXBwZW5kKCdhZGRfbGFiZWwgIiVzIicgJSBsYWJlbCkKKworICAgIGRlZiByZW1vdmVf
bGFiZWwoc2VsZiwgXywgbGFiZWwpOgorICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgncmVtb3Zl
X2xhYmVsICIlcyInICUgbGFiZWwpCisKKyAgICBkZWYgZ2V0X3ByX2JyYW5jaChzZWxmLCBudW1i
ZXIpOgorICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgnZ2V0X3ByX2JyYW5jaCcpCisgICAgICAg
IHJldHVybiAnZmFrZV9icmFuY2hfUFJfJWQnICUgbnVtYmVyCisKKyAgICBkZWYgcHJfZm9yX2No
cm9taXVtX2NvbW1pdChzZWxmLCBjb21taXQpOgorICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgn
cHJfZm9yX2Nocm9taXVtX2NvbW1pdCcpCisgICAgICAgIGZvciBwciBpbiBzZWxmLnB1bGxfcmVx
dWVzdHM6CisgICAgICAgICAgICBpZiBjb21taXQuY2hhbmdlX2lkKCkgaW4gcHIuYm9keToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcHIKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBw
cl93aXRoX3Bvc2l0aW9uKHNlbGYsIHBvc2l0aW9uKToKKyAgICAgICAgc2VsZi5jYWxscy5hcHBl
bmQoJ3ByX3dpdGhfcG9zaXRpb24nKQorICAgICAgICBmb3IgcHIgaW4gc2VsZi5wdWxsX3JlcXVl
c3RzOgorICAgICAgICAgICAgaWYgcG9zaXRpb24gaW4gcHIuYm9keToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcHIKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBwcl93aXRoX2NoYW5n
ZV9pZChzZWxmLCBjaGFuZ2VfaWQpOgorICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCgncHJfd2l0
aF9jaGFuZ2VfaWQnKQorICAgICAgICBmb3IgcHIgaW4gc2VsZi5wdWxsX3JlcXVlc3RzOgorICAg
ICAgICAgICAgaWYgY2hhbmdlX2lkIGluIHByLmJvZHk6CisgICAgICAgICAgICAgICAgcmV0dXJu
IHByCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZXh0cmFjdF9tZXRhZGF0YShzZWxm
LCB0YWcsIGNvbW1pdF9ib2R5LCBhbGxfbWF0Y2hlcz1GYWxzZSk6CisgICAgICAgIHJldHVybiBX
UFRHaXRIdWIuZXh0cmFjdF9tZXRhZGF0YSh0YWcsIGNvbW1pdF9ib2R5LCBhbGxfbWF0Y2hlcykK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNjL3dwdF9naXRodWJfdW5pdHRl
c3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy93cHRfZ2l0aHViX3VuaXR0ZXN0LnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM5OWNmOGQwMmFiNGJjMTRhNWVmYmE1ZGFhZmY5NTUzOTUxODg3ZWEKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy93cHRfZ2l0aHViX3Vu
aXR0ZXN0LnB5CkBAIC0wLDAgKzEsNDggQEAKKyMgQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVt
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQg
YmFzZTY0CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdF9tb2Nr
IGltcG9ydCBNb2NrSG9zdAorZnJvbSB3ZWJraXRweS53M2Mud3B0X2dpdGh1YiBpbXBvcnQgV1BU
R2l0SHViLCBNZXJnZUVycm9yCisKKworY2xhc3MgV1BUR2l0SHViVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYud3B0X2dpdGh1YiA9
IFdQVEdpdEh1YihNb2NrSG9zdCgpLCB1c2VyPSdydXRhYmFnYScsIHRva2VuPSdkZWNhZmJhZCcp
CisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYud3B0X2dpdGh1Yi51c2VyLCAncnV0YWJhZ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYud3B0X2dpdGh1Yi50b2tlbiwgJ2RlY2FmYmFkJykKKworICAgIGRlZiB0ZXN0X2F1dGhf
dG9rZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxm
LndwdF9naXRodWIuYXV0aF90b2tlbigpLAorICAgICAgICAgICAgYmFzZTY0LmVuY29kZXN0cmlu
ZygncnV0YWJhZ2E6ZGVjYWZiYWQnKS5zdHJpcCgpKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>