<?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>217534</bug_id>
          
          <creation_ts>2020-10-09 14:03:41 -0700</creation_ts>
          <short_desc>[webkitscmpy] Add `git-webkit find`</short_desc>
          <delta_ts>2020-10-13 18:10:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215862</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>kocsen_chung</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1696355</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-09 14:03:41 -0700</bug_when>
    <thetext>webkitscmpy supports identifiers, but we need a way to expose those identifiers to the user. The eventual intention is to have these identifiers supported across a handful of scripts, but to start with, we want a script that can simply map identifiers, revisions and hashes to one another.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696356</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-09 14:04:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/70152431&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696414</commentid>
    <comment_count>2</comment_count>
      <attachid>410988</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-09 17:21:17 -0700</bug_when>
    <thetext>Created attachment 410988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696416</commentid>
    <comment_count>3</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-09 17:22:11 -0700</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #2)
&gt; Created attachment 410988 [details]
&gt; Patch

Also has the contents of https://bugs.webkit.org/show_bug.cgi?id=217533, which I intend to land first, but wanted it up for discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696422</commentid>
    <comment_count>4</comment_count>
      <attachid>410988</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2020-10-09 17:42:47 -0700</bug_when>
    <thetext>Comment on attachment 410988
Patch

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

Looks pretty good, though I&apos;ve got a couple questions on the entry point for `git-webkit` and the default output when no arguments are provided.

&gt; Tools/Scripts/git-webkit:40
&gt; +        Contributor.by_email[email] = contributor

Instead of building an implicit dictionary on `Contributor`, could we instead call a memoized function with the json file path to get a list of contributors back? It wasn&apos;t clear to me reading `git-webkit` initially that it&apos;s using a static class to store all Contributor information.

&gt; Tools/Scripts/git-webkit:42
&gt; +sys.exit(program.main(repository=local.Scm.from_path(scripts)))

Also, maybe it makes more sense for this to be a symlink to the same file in `webkitscmpy`?:
Tools/Scripts/libraries/webkitscmpy/git-webkit

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/arguments.py:57
&gt; +def LoggingGroup(parser, loggers=None, default=logging.WARNING, help=&apos;{} amount of logging&apos;):

This is awesome!

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:270
&gt; +    class Encoder(json.JSONEncoder):

Nit: I think Python encourages placing class definitions at the top of the block they&apos;re defined in (when they&apos;re defined within another class). You could also move it outside of the class and call it CommitEncoder if that is more clear.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:94
&gt; +            return self.commit()

IMO if there&apos;s no argument then we should fail / exit. This could easily cause mistakes by automation / scripts if they forget to provide an argument, whereas failing would be more correct.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:26
&gt; +from webkitscmpy.program.main import main

Why is code being imported if it&apos;s not being used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696476</commentid>
    <comment_count>5</comment_count>
      <attachid>410988</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-09 20:37:10 -0700</bug_when>
    <thetext>Comment on attachment 410988
Patch

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

&gt;&gt; Tools/Scripts/git-webkit:40
&gt;&gt; +        Contributor.by_email[email] = contributor
&gt; 
&gt; Instead of building an implicit dictionary on `Contributor`, could we instead call a memoized function with the json file path to get a list of contributors back? It wasn&apos;t clear to me reading `git-webkit` initially that it&apos;s using a static class to store all Contributor information.

I’m a bit torn on the right way to handle this.

Some background: the reason we want a contributor mapping is because sometimes git and SVN have incomplete authors (missing an email, email without a name) and contributors.json let’s us normalize that. And that’s really all we’re using contributors.json for in this script.

The catch is that contributors.json is associated with the WebKit repository specifically, but webkitscmpy is supposed to be project agnostic. That’s why I’m loading contributors.json here and not in the library....seems like maybe the right solution is giving an ‘add’ method to the class

&gt;&gt; Tools/Scripts/git-webkit:42
&gt;&gt; +sys.exit(program.main(repository=local.Scm.from_path(scripts)))
&gt; 
&gt; Also, maybe it makes more sense for this to be a symlink to the same file in `webkitscmpy`?:
&gt; Tools/Scripts/libraries/webkitscmpy/git-webkit

Similar story as above. We definitely don’t want things like contributors.json attached to webkitscmpy. I think the real question is if the script in webkitscmpy should be called got-WebKit.

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:270
&gt;&gt; +    class Encoder(json.JSONEncoder):
&gt; 
&gt; Nit: I think Python encourages placing class definitions at the top of the block they&apos;re defined in (when they&apos;re defined within another class). You could also move it outside of the class and call it CommitEncoder if that is more clear.

Will move!

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:94
&gt;&gt; +            return self.commit()
&gt; 
&gt; IMO if there&apos;s no argument then we should fail / exit. This could easily cause mistakes by automation / scripts if they forget to provide an argument, whereas failing would be more correct.

Is that stance for just this function, or the whole command?

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:26
&gt;&gt; +from webkitscmpy.program.main import main
&gt; 
&gt; Why is code being imported if it&apos;s not being used?

So that ‘from webkitscmpy.program import main’ works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696643</commentid>
    <comment_count>6</comment_count>
      <attachid>411055</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-11 10:20:09 -0700</bug_when>
    <thetext>Created attachment 411055
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696940</commentid>
    <comment_count>7</comment_count>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2020-10-12 10:59:37 -0700</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #5)
&gt; Comment on attachment 410988 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=410988&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/Scripts/git-webkit:40
&gt; &gt;&gt; +        Contributor.by_email[email] = contributor
&gt; &gt; 
&gt; &gt; Instead of building an implicit dictionary on `Contributor`, could we instead call a memoized function with the json file path to get a list of contributors back? It wasn&apos;t clear to me reading `git-webkit` initially that it&apos;s using a static class to store all Contributor information.
&gt; 
&gt; I’m a bit torn on the right way to handle this.
&gt; 
&gt; Some background: the reason we want a contributor mapping is because
&gt; sometimes git and SVN have incomplete authors (missing an email, email
&gt; without a name) and contributors.json let’s us normalize that. And that’s
&gt; really all we’re using contributors.json for in this script.
&gt; 
&gt; The catch is that contributors.json is associated with the WebKit repository
&gt; specifically, but webkitscmpy is supposed to be project agnostic. That’s why
&gt; I’m loading contributors.json here and not in the library....seems like
&gt; maybe the right solution is giving an ‘add’ method to the class
My concern was less about how contributors were added, and more that we were modifying the Contributor class implicitly for any other modules which may use it. I really dislike working with code which implicitly modifies state on a module I may be importing / using later, since it&apos;s more difficult to set expectations for what the module does and how it behaves.

One way to address that is to build your contributor list in git-webkit, then pass around the list of contributors to use.
&gt; 
&gt; &gt;&gt; Tools/Scripts/git-webkit:42
&gt; &gt;&gt; +sys.exit(program.main(repository=local.Scm.from_path(scripts)))
&gt; &gt; 
&gt; &gt; Also, maybe it makes more sense for this to be a symlink to the same file in `webkitscmpy`?:
&gt; &gt; Tools/Scripts/libraries/webkitscmpy/git-webkit
&gt; 
&gt; Similar story as above. We definitely don’t want things like
&gt; contributors.json attached to webkitscmpy. I think the real question is if
&gt; the script in webkitscmpy should be called got-WebKit.
&gt; 
&gt; &gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:270
&gt; &gt;&gt; +    class Encoder(json.JSONEncoder):
&gt; &gt; 
&gt; &gt; Nit: I think Python encourages placing class definitions at the top of the block they&apos;re defined in (when they&apos;re defined within another class). You could also move it outside of the class and call it CommitEncoder if that is more clear.
&gt; 
&gt; Will move!
&gt; 
&gt; &gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:94
&gt; &gt;&gt; +            return self.commit()
&gt; &gt; 
&gt; &gt; IMO if there&apos;s no argument then we should fail / exit. This could easily cause mistakes by automation / scripts if they forget to provide an argument, whereas failing would be more correct.
&gt; 
&gt; Is that stance for just this function, or the whole command?
Whole command. If someone types `git webkit find` I don&apos;t think we should return any results -- imagine if any code does something like:

```
get_commit_info_command = [&apos;git&apos;, &apos;webkit&apos;, &apos;find&apos;]
identifier = some_func_to_get_commit()
if identifier:
    get_commit_info_command.append(commit)
return identifier
```

if some_func_to_get_identifier ever has a bug that causes it to return None, then we could start returning the repository&apos;s current hash every time. A realistic case of this happening is when some_func_to_get_commit() is a function which talks to a web service and happens to have a `try/except Exception` added for flaky failures and forgets to re-raise after catching an exception after hitting the retry limit.
&gt; 
&gt; &gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/__init__.py:26
&gt; &gt;&gt; +from webkitscmpy.program.main import main
&gt; &gt; 
&gt; &gt; Why is code being imported if it&apos;s not being used?
&gt; 
&gt; So that ‘from webkitscmpy.program import main’ works.
Ah, makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696941</commentid>
    <comment_count>8</comment_count>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2020-10-12 11:01:01 -0700</bug_when>
    <thetext>Sorry, partially rewrote example code while I was replying.

Updated code example since it was incomplete:
```
get_commit_info_command = [&apos;git&apos;, &apos;webkit&apos;, &apos;find&apos;]
commit = some_func_to_get_commit()
if commit:
    get_commit_info_command.append(commit)
identifier = run_command(get_commit_info_command)
return identifier
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696961</commentid>
    <comment_count>9</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-12 11:42:45 -0700</bug_when>
    <thetext>(In reply to Dean Johnson from comment #7)
&gt; ...
&gt;
&gt; My concern was less about how contributors were added, and more that we were
&gt; modifying the Contributor class implicitly for any other modules which may
&gt; use it. I really dislike working with code which implicitly modifies state
&gt; on a module I may be importing / using later, since it&apos;s more difficult to
&gt; set expectations for what the module does and how it behaves.
&gt; 
&gt; One way to address that is to build your contributor list in git-webkit,
&gt; then pass around the list of contributors to use.

I&apos;m actually going to remove the contributors part of this patch, and put it in a stand-alone change so we can discuss further. This patch is big already, I didn&apos;t expect the contributors.json to be controversial (so I added it), but it&apos;s not required for git-webkit to work.

&gt; ...
&gt; if some_func_to_get_identifier ever has a bug that causes it to return None,
&gt; then we could start returning the repository&apos;s current hash every time. A
&gt; realistic case of this happening is when some_func_to_get_commit() is a
&gt; function which talks to a web service and happens to have a `try/except
&gt; Exception` added for flaky failures and forgets to re-raise after catching
&gt; an exception after hitting the retry limit.

How would you feel about supporting &quot;HEAD&quot; instead of making None correspond to HEAD? Suppose that means we would also have to support HEAD~ and friends, but that&apos;s not too hard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696996</commentid>
    <comment_count>10</comment_count>
      <attachid>411150</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-12 13:35:42 -0700</bug_when>
    <thetext>Created attachment 411150
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697064</commentid>
    <comment_count>11</comment_count>
      <attachid>411150</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2020-10-12 15:08:14 -0700</bug_when>
    <thetext>Comment on attachment 411150
Patch

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

Thanks for splitting out the patch. Added a couple more comments that suggest moving parsing calls and repository checks outside of the command itself.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:91
&gt; +            if &apos;master&apos; in candidates:

Nit: Do we want to prefer `master` over `main`? Maybe we should error out if a default isn&apos;t defined, but both are in `self.branches`?

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:41
&gt; +    HEAD_RE = re.compile(r&apos;HEAD(~\d*)*&apos;)

Technically HEAD^ is also a valid git hash, though it seems unlikely to be used.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:104
&gt; +                count += int(s) if s else 1

Maybe it would be better to pass the argument through to `git`, get that hash, then convert using the hash? Then we don&apos;t need to handle cases like HEAD^ or write any parsing logic ourselves.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:40
&gt; +    executable = &apos;/usr/bin/svn&apos; if os.path.exists(&apos;/usr/bin/svn&apos;) else &apos;/usr/local/bin/svn&apos;

Do we have any checks for this executable existing? Maybe it&apos;d be better to make `executable` a property on Svn and use that function to find the appropriate path.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/command.py:35
&gt; +            raise NotImplementedError(&quot;&apos;{}&apos; does not have a  help message&quot;)

Nit: Extra space in &apos;a  help&apos;

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py:63
&gt; +        if repository.is_svn:

As a user I don&apos;t like it when the arguments available to me in a script change based on my CWD. Can we make the options available no matter what, then error out if we fail to parse?

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py:65
&gt; +                &apos;--revision&apos;, &apos;-r&apos;,

Have you considered using `type` for these arguments? You could set them to their respective: Commit._parse_revision, Commit._parse_hash, Commit._parse_identifier, etc. then just use the returned reference. And we could set the type of the option which does not use arguments to be the upper part of main(), thereby removing the majority of the parsing logic (and making it re-usable for any project).

This would remove a decent amount of logic from the command parser, so we know that anything to do with identifiers/revisions/hashes should be fully dealt with webkitscmpy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697072</commentid>
    <comment_count>12</comment_count>
      <attachid>411150</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-12 15:20:04 -0700</bug_when>
    <thetext>Comment on attachment 411150
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/git.py:91
&gt;&gt; +            if &apos;master&apos; in candidates:
&gt; 
&gt; Nit: Do we want to prefer `master` over `main`? Maybe we should error out if a default isn&apos;t defined, but both are in `self.branches`?

Most of our repos won&apos;t hit this (I encountered it with a different version of git) because the rev-parse command will give us what we need

I think if we&apos;re being realistic, a repository that has both branches probably has &quot;master&quot; as the default branch since that&apos;s what the industry has been doing for many years (which is why I did it this way). Not a big deal either way though, most checkouts will support the rev-parse command

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/scm.py:104
&gt;&gt; +                count += int(s) if s else 1
&gt; 
&gt; Maybe it would be better to pass the argument through to `git`, get that hash, then convert using the hash? Then we don&apos;t need to handle cases like HEAD^ or write any parsing logic ourselves.

Doesn&apos;t work for SVN repositories, though, and I&apos;m trying to keep the API the same.

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/local/svn.py:40
&gt;&gt; +    executable = &apos;/usr/bin/svn&apos; if os.path.exists(&apos;/usr/bin/svn&apos;) else &apos;/usr/local/bin/svn&apos;
&gt; 
&gt; Do we have any checks for this executable existing? Maybe it&apos;d be better to make `executable` a property on Svn and use that function to find the appropriate path.

I thought about the function, but we really only want to set it once, I think. Also, making a property classmethod is nasty.

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py:63
&gt;&gt; +        if repository.is_svn:
&gt; 
&gt; As a user I don&apos;t like it when the arguments available to me in a script change based on my CWD. Can we make the options available no matter what, then error out if we fail to parse?

These options control the output, not the input, so we would basically be unconditionally failing the moment the user passed them...that&apos;s why I filtered them out as options. If we removed this, we would trigger the error on line 117

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py:65
&gt;&gt; +                &apos;--revision&apos;, &apos;-r&apos;,
&gt; 
&gt; Have you considered using `type` for these arguments? You could set them to their respective: Commit._parse_revision, Commit._parse_hash, Commit._parse_identifier, etc. then just use the returned reference. And we could set the type of the option which does not use arguments to be the upper part of main(), thereby removing the majority of the parsing logic (and making it re-usable for any project).
&gt; 
&gt; This would remove a decent amount of logic from the command parser, so we know that anything to do with identifiers/revisions/hashes should be fully dealt with webkitscmpy.

These commands don&apos;t control the type of argument in, they control the type of argument out, `type` won&apos;t help us much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697104</commentid>
    <comment_count>13</comment_count>
      <attachid>411181</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-12 16:14:08 -0700</bug_when>
    <thetext>Created attachment 411181
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697277</commentid>
    <comment_count>14</comment_count>
      <attachid>411225</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-13 09:19:12 -0700</bug_when>
    <thetext>Created attachment 411225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697278</commentid>
    <comment_count>15</comment_count>
      <attachid>411226</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-13 09:22:15 -0700</bug_when>
    <thetext>Created attachment 411226
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697378</commentid>
    <comment_count>16</comment_count>
      <attachid>411226</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2020-10-13 13:37:12 -0700</bug_when>
    <thetext>Comment on attachment 411226
Patch

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

&gt; Tools/Scripts/libraries/webkitscmpy/git-webkit:30
&gt; +sys.exit(program.main())

My understanding is the difference between this file and &apos;Tools/Scripts/git-webkit&apos; is this script can be use for other repo if necessary, right?

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:36
&gt; +    DISPLAY_SIZE = 12

Display size seems ambiguous to me at first glance. Can we use a variable something like `HASH_LABEL_SIZE` or something similar?

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py:24
&gt; +import logging

Is this module used anywhere in this file?

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py:64
&gt; +            sys.stderr.write(str(exception) + &apos;\n&apos;)

Could you tell me more about choosing sys.stderr &amp; print rather than logging module?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697381</commentid>
    <comment_count>17</comment_count>
      <attachid>411226</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-13 13:45:42 -0700</bug_when>
    <thetext>Comment on attachment 411226
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/git-webkit:30
&gt;&gt; +sys.exit(program.main())
&gt; 
&gt; My understanding is the difference between this file and &apos;Tools/Scripts/git-webkit&apos; is this script can be use for other repo if necessary, right?

That is correct.

In a future change, we will hook the WebKit one up to contributors json, Bugzilla,  ect.

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/program/find.py:64
&gt;&gt; +            sys.stderr.write(str(exception) + &apos;\n&apos;)
&gt; 
&gt; Could you tell me more about choosing sys.stderr &amp; print rather than logging module?

Logging will add the level in the log message by default (CRITICAL, in this case). Really no other reason than that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697389</commentid>
    <comment_count>18</comment_count>
      <attachid>411250</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-13 13:58:53 -0700</bug_when>
    <thetext>Created attachment 411250
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697419</commentid>
    <comment_count>19</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2020-10-13 14:48:14 -0700</bug_when>
    <thetext>r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697470</commentid>
    <comment_count>20</comment_count>
      <attachid>411273</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-13 15:48:30 -0700</bug_when>
    <thetext>Created attachment 411273
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697503</commentid>
    <comment_count>21</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-13 16:53:40 -0700</bug_when>
    <thetext>Committed r268433: &lt;https://trac.webkit.org/changeset/268433&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 411273.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697531</commentid>
    <comment_count>22</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-13 17:32:17 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697532</commentid>
    <comment_count>23</comment_count>
      <attachid>411285</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-10-13 17:32:18 -0700</bug_when>
    <thetext>Created attachment 411285
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697570</commentid>
    <comment_count>24</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-13 18:10:21 -0700</bug_when>
    <thetext>Committed r268440: &lt;https://trac.webkit.org/changeset/268440&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 411285.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410988</attachid>
            <date>2020-10-09 17:21:17 -0700</date>
            <delta_ts>2020-10-11 10:20:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217534-20201009172116.patch</filename>
            <type>text/plain</type>
            <size>40700</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODMwMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDUxIEBACisyMDIwLTEwLTA5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBgZ2l0LXdlYmtpdCBmaW5kYAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3NTM0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS83MDE1MjQzMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvZ2l0LXdlYmtpdDogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5w
eTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvYXJndW1lbnRzLnB5OgorICAgICAgICAoTm9BY3Rpb24uX19jYWxsX18p
OgorICAgICAgICAoQ291bnRBY3Rpb24pOiBDcmVhdGUgYW4gYWN0aW9uIHRvIGluY3JlbWVudCBv
ciBkZWNyZW1lbnQgYSB2YXJpYWJsZSBieSBhIHZhbHVlLgorICAgICAgICAoQ2FsbGJhY2tBY3Rp
b24pOiBDcmVhdGUgYW4gYWN0aW9uIHdoaWNoIHdpbGwgdHJpZ2dlciBhIGNhbGxiYWNrIHdoZW4g
c2V0LgorICAgICAgICAoTG9nZ2luZ0dyb3VwKTogQ3JlYXRlIGEgZ3JvdXAgd2hpY2ggYWxsb3dz
IHRoZSB1c2VyIHRvIGNoYW5nZSBsb2dnaW5nIGJlaGF2aW9yLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQ6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5OiBBZGQgd2Via2l0c2NtcHkucHJvZ3Jh
bSBhbmQgZ2l0LXdlYmtpdC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbW1pdC5weTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzUzMy4KKyAgICAgICAgKiBTY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zY20ucHk6CisgICAgICAg
IChTY20uZmluZCk6IEFkZCBmdW5jdGlvbiB0byBjb252ZXJ0IGdlbmVyaWMgc3RyaW5nIGFyZ3Vt
ZW50cyB0byBhIGNvbW1pdCwgYW5kIHRoZW4gZmluZCB0aGF0IGNvbW1pdCBpbgorICAgICAgICB0
aGUgcmVwb3NpdG9yeS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9wcm9ncmFtOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2Nv
bW1hbmQucHk6IEFkZGVkLgorICAgICAgICAoQ29tbWFuZCk6IEJhc2UgY2xhc3MgZm9yIGFsbCBj
b21tYW5kcy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9wcm9ncmFtL2ZpbmQucHk6IEFkZGVkLgorICAgICAgICAoRmluZCk6CisgICAgICAgIChG
aW5kLnBhcnNlcik6IENvbmZpZ3VyZSBwYXJzZXIgZm9yICdmaW5kJyBzdWItcHJvZ3JhbS4KKyAg
ICAgICAgKEZpbmQubWFpbik6IEdpdmVuIGFuIGlkZW50aWZpZXIsIHJldmlzaW9uLCBoYXNoIG9y
IGJyYW5jaCBuYW1lLCBmaW5kIGFuZCBwcmludCB0aGUgbWF0Y2hpbmcgY29tbWl0IGZyb20KKyAg
ICAgICAgdGhlIHJlcG9zaXRvcnkgaW4gc2NvcGUuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9tYWluLnB5OiBBZGRlZC4KKyAgICAg
ICAgKG1haW4pOiBFbnRyeSBwb2ludCB0byBnaXQtPHByb2plY3Q+IHNjcmlwdHMuCisgICAgICAg
ICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9jb21taXRf
dW5pdHRlc3QucHk6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc1
MzMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
dGVzdC9maW5kX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RGaW5kKToKKyAgICAg
ICAgKFRlc3RGaW5kLnRlc3RfYmFzaWNfZ2l0KToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfYmFz
aWNfZ2l0X3N2bik6CisgICAgICAgIChUZXN0RmluZC50ZXN0X2Jhc2ljX3N2bik6CisgICAgICAg
IChUZXN0RmluZC50ZXN0X2lkZW50aWZpZXJfZ2l0KToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3Rf
aWRlbnRpZmllcl9naXRfc3ZuKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfaWRlbnRpZmllcl9z
dm4pOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9oYXNoKToKKyAgICAgICAgKFRlc3RGaW5kLnRl
c3RfcmV2aXNpb25fc3ZuKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfcmV2aXNpb25fZ2l0X3N2
bik6CisgICAgICAgIChUZXN0RmluZC50ZXN0X3ZlcmJvc2UpOgorICAgICAgICAoVGVzdEZpbmQu
dGVzdF92ZXJib3NlX3ZlcmJvc2UpOgorCiAyMDIwLTEwLTA5ICBKb25hdGhhbiBCZWRhcmQgIDxq
YmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbd2Via2l0c2NtcHldIEhhbmRsZSBzdm4gaW5m
byBydW4gZnJvbSBkaXJlY3RvcnkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvZ2l0LXdlYmtpdAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2dpdC13ZWJraXQJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvU2NyaXB0cy9naXQtd2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCB3ZWJraXRweQoraW1wb3J0IHN5cwor
Citmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb250cmlidXRvciwgbG9jYWwsIHByb2dyYW0KKwor
IyBQb3B1bGF0ZSBXZWJLaXQgY29udHJpYnV0b3JzCitzY3JpcHRzID0gb3MucGF0aC5kaXJuYW1l
KF9fZmlsZV9fKQord2l0aCBvcGVuKG9zLnBhdGguam9pbihzY3JpcHRzLCAnd2Via2l0cHknLCAn
Y29tbW9uJywgJ2NvbmZpZycsICdjb250cmlidXRvcnMuanNvbicpKSBhcyBmaWxlOgorICAgIGNv
bnRyaWJ1dG9ycyA9IGpzb24ubG9hZChmaWxlKQorZm9yIG5hbWUsIGF0dHJpYnV0ZXMgaW4gY29u
dHJpYnV0b3JzLml0ZW1zKCk6CisgICAgY29udHJpYnV0b3IgPSBDb250cmlidXRvcihuYW1lPW5h
bWUsIGVtYWlscz1hdHRyaWJ1dGVzLmdldCgnZW1haWxzJywgW10pKQorICAgIENvbnRyaWJ1dG9y
LmJ5X25hbWVbY29udHJpYnV0b3IubmFtZV0gPSBjb250cmlidXRvcgorICAgIGZvciBlbWFpbCBp
biBjb250cmlidXRvci5lbWFpbHM6CisgICAgICAgIENvbnRyaWJ1dG9yLmJ5X2VtYWlsW2VtYWls
XSA9IGNvbnRyaWJ1dG9yCisKK3N5cy5leGl0KHByb2dyYW0ubWFpbihyZXBvc2l0b3J5PWxvY2Fs
LlNjbS5mcm9tX3BhdGgoc2NyaXB0cykpKQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9T
Y3JpcHRzL2dpdC13ZWJraXQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAs
MCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRj
b3JlcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI2ODI5MykKKysrIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDcgQEAgZnJvbSB3ZWJraXRjb3JlcHkudGltZW91dCBpbXBvcnQgVGlt
ZW91dAogZnJvbSB3ZWJraXRjb3JlcHkuc3VicHJvY2Vzc191dGlscyBpbXBvcnQgVGltZW91dEV4
cGlyZWQsIENvbXBsZXRlZFByb2Nlc3MsIHJ1bgogZnJvbSB3ZWJraXRjb3JlcHkub3V0cHV0X2Nh
cHR1cmUgaW1wb3J0IExvZ2dlckNhcHR1cmUsIE91dHB1dENhcHR1cmUsIE91dHB1dER1cGxpY2F0
ZQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCA0LCAxMykKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDQs
IDE0KQogCiBmcm9tIHdlYmtpdGNvcmVweS5hdXRvaW5zdGFsbCBpbXBvcnQgUGFja2FnZSwgQXV0
b0luc3RhbGwKIGlmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CkluZGV4OiBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L2FyZ3VtZW50cy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29y
ZXB5L2FyZ3VtZW50cy5weQkocmV2aXNpb24gMjY4MjkzKQorKysgVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9hcmd1bWVudHMucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDYgKzIxLDkgQEAKICMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxv
Z2dpbmcKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IGxvZwogCiAKIGNsYXNzIE5vQWN0aW9u
KGFyZ3BhcnNlLkFjdGlvbik6CkBAIC0yOSwzICszMiw1NyBAQCBjbGFzcyBOb0FjdGlvbihhcmdw
YXJzZS5BY3Rpb24pOgogCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNl
LCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CiAgICAgICAgIHNldGF0dHIobmFtZXNwYWNl
LCBzZWxmLmRlc3QsIEZhbHNlIGlmIG9wdGlvbl9zdHJpbmcuc3RhcnRzd2l0aCgnLS1ubycpIGVs
c2UgVHJ1ZSkKKworCitkZWYgQ291bnRBY3Rpb24odmFsdWU9MSk6CisgICAgY2xhc3MgQWN0aW9u
KGFyZ3BhcnNlLkFjdGlvbik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25fc3Ry
aW5ncywgZGVzdCwgKiprd2FyZ3MpOgorICAgICAgICAgICAgc3VwZXIoQWN0aW9uLCBzZWxmKS5f
X2luaXRfXyhvcHRpb25fc3RyaW5ncywgZGVzdCwgbmFyZ3M9MCwgKiprd2FyZ3MpCisKKyAgICAg
ICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9z
dHJpbmcpOgorICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgZ2V0YXR0
cihuYW1lc3BhY2UsIHNlbGYuZGVzdCkgKyB2YWx1ZSkKKworICAgIHJldHVybiBBY3Rpb24KKwor
CitkZWYgQ2FsbGJhY2tBY3Rpb24oYWN0aW9uLCBjYWxsYmFjaz1sYW1iZGEgbmFtZXNwYWNlOiBO
b25lKToKKyAgICBjbGFzcyBBY3Rpb24oYWN0aW9uKToKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNl
bGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmdzKToKKyAgICAgICAg
ICAgIHN1cGVyKEFjdGlvbiwgc2VsZikuX19jYWxsX18ocGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVl
cywgb3B0aW9uX3N0cmluZ3MpCisgICAgICAgICAgICBjYWxsYmFjayhuYW1lc3BhY2UpCisKKyAg
ICByZXR1cm4gQWN0aW9uCisKKworZGVmIExvZ2dpbmdHcm91cChwYXJzZXIsIGxvZ2dlcnM9Tm9u
ZSwgZGVmYXVsdD1sb2dnaW5nLldBUk5JTkcsIGhlbHA9J3t9IGFtb3VudCBvZiBsb2dnaW5nJyk6
CisgICAgaWYgbm90IGlzaW5zdGFuY2UocGFyc2VyLCBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcik6
CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Byb3ZpZGVkIHBhcnNlciBpcyBub3QgYSB7fScu
Zm9ybWF0KHR5cGUoYXJncGFyc2UuQXJndW1lbnRQYXJzZXIpKSkKKworICAgIGlmIG5vdCBsb2dn
ZXJzOgorICAgICAgICBsb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCksIGxvZ10KKyAgICBm
b3IgbG9nZ2VyIGluIGxvZ2dlcnM6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChkZWZhdWx0KQor
CisgICAgZGVmIHZlcmJvc2VfY2FsbGJhY2sobmFtZXNwYWNlKToKKyAgICAgICAgdmVyYm9zaXR5
ID0gZ2V0YXR0cihuYW1lc3BhY2UsICd2ZXJib3NlJykKKyAgICAgICAgbG9nX2xldmVsID0gZGVm
YXVsdCAtIHZlcmJvc2l0eSAqIDEwCisKKyAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsICdsb2df
bGV2ZWwnLCBsb2dfbGV2ZWwpCisKKyAgICAgICAgZm9yIGxvZ2dlciBpbiBsb2dnZXJzOgorICAg
ICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ19sZXZlbCkKKworICAgIGdyb3VwID0gcGFyc2Vy
LmFkZF9hcmd1bWVudF9ncm91cCgnTG9nZ2luZycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KAor
ICAgICAgICAnLS12ZXJib3NlJywgJy12JywKKyAgICAgICAgZGVzdD0ndmVyYm9zZScsIGRlZmF1
bHQ9MCwKKyAgICAgICAgaGVscD1oZWxwLmZvcm1hdCgnSW5jcmVhc2UnKSwKKyAgICAgICAgYWN0
aW9uPUNhbGxiYWNrQWN0aW9uKENvdW50QWN0aW9uKHZhbHVlPTEpLCBjYWxsYmFjaz12ZXJib3Nl
X2NhbGxiYWNrKSwKKyAgICApCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KAorICAgICAgICAnLS1x
dWlldCcsICctcScsCisgICAgICAgIGRlc3Q9J3ZlcmJvc2UnLCBkZWZhdWx0PTAsCisgICAgICAg
IGhlbHA9aGVscC5mb3JtYXQoJ0RlY3JlYXNlJyksCisgICAgICAgIGFjdGlvbj1DYWxsYmFja0Fj
dGlvbihDb3VudEFjdGlvbih2YWx1ZT0tMSksIGNhbGxiYWNrPXZlcmJvc2VfY2FsbGJhY2spLAor
ICAgICkKKyAgICByZXR1cm4gZ3JvdXAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L2dpdC13ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvZ2l0LXdlYmtpdAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS9naXQtd2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgcHJv
Z3JhbQorCisKK3N5cy5leGl0KHByb2dyYW0ubWFpbigpKQoKUHJvcGVydHkgY2hhbmdlcyBvbjog
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvZ2l0LXdlYmtpdApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3NldHVwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3NldHVwLnB5CShyZXZpc2lvbiAyNjgyOTMpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS9zZXR1cC5weQkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsMTAgQEAg
c2V0dXAoCiAgICAgICAgICd3ZWJraXRzY21weS5sb2NhbCcsCiAgICAgICAgICd3ZWJraXRzY21w
eS5tb2NrcycsCiAgICAgICAgICd3ZWJraXRzY21weS5tb2Nrcy5sb2NhbCcsCisgICAgICAgICd3
ZWJraXRzY21weS5wcm9ncmFtJywKICAgICAgICAgJ3dlYmtpdHNjbXB5LnRlc3QnLAogICAgIF0s
CisgICAgc2NyaXB0cz1bJ2dpdC13ZWJraXQnXSwKICAgICBpbnN0YWxsX3JlcXVpcmVzPVsncHl0
aG9uLWRhdGV1dGlsJywgJ3dlYmtpdGNvcmVweSddLAogICAgIGluY2x1ZGVfcGFja2FnZV9kYXRh
PVRydWUsCiAgICAgemlwX3NhZmU9RmFsc2UsCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQko
cmV2aXNpb24gMjY4MjkzKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
ZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAiUGxlYXNlIGluc3RhbGwgd2Via2l0Y29yZXB5
IHdpdGggYHBpcCBpbnN0YWxsIHdlYmtpdGNvcmVweSAtLWV4dHJhLWluZGV4LXVybCA8cGFja2Fn
ZSBpbmRleCBVUkw+YCIKICAgICApCiAKLXZlcnNpb24gPSBWZXJzaW9uKDAsIDEsIDIpCit2ZXJz
aW9uID0gVmVyc2lvbigwLCAyLCAwKQogCiBBdXRvSW5zdGFsbC5yZWdpc3RlcihQYWNrYWdlKCdk
YXRldXRpbCcsIFZlcnNpb24oMiwgOCwgMSksIHB5cGlfbmFtZT0ncHl0aG9uLWRhdGV1dGlsJykp
CiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L2NvbW1pdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9jb21taXQucHkJKHJldmlzaW9uIDI2ODI5MykKKysrIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbW1pdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwogIyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
IAoraW1wb3J0IGpzb24KIGltcG9ydCBzaXgKIGltcG9ydCByZQogCkBAIC0yMTQsMTUgKzIxNSwx
NSBAQCBjbGFzcyBDb21taXQob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAg
ZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmJyYW5jaF9wb2ludCBhbmQgc2Vs
Zi5pZGVudGlmaWVyIGFuZCBzZWxmLmJyYW5jaDoKKyAgICAgICAgaWYgc2VsZi5icmFuY2hfcG9p
bnQgYW5kIHNlbGYuaWRlbnRpZmllciBpcyBub3QgTm9uZSBhbmQgc2VsZi5icmFuY2g6CiAgICAg
ICAgICAgICByZXR1cm4gJ3t9Lnt9QHt9Jy5mb3JtYXQoc2VsZi5icmFuY2hfcG9pbnQsIHNlbGYu
aWRlbnRpZmllciwgc2VsZi5icmFuY2gpCi0gICAgICAgIGlmIHNlbGYuaWRlbnRpZmllciBhbmQg
c2VsZi5icmFuY2g6CisgICAgICAgIGlmIHNlbGYuaWRlbnRpZmllciBpcyBub3QgTm9uZSBhbmQg
c2VsZi5icmFuY2g6CiAgICAgICAgICAgICByZXR1cm4gJ3t9QHt9Jy5mb3JtYXQoc2VsZi5pZGVu
dGlmaWVyLCBzZWxmLmJyYW5jaCkKICAgICAgICAgaWYgc2VsZi5yZXZpc2lvbjoKICAgICAgICAg
ICAgIHJldHVybiAncnt9Jy5mb3JtYXQoc2VsZi5yZXZpc2lvbikKICAgICAgICAgaWYgc2VsZi5o
YXNoOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFzaFs6MTJdCi0gICAgICAgIGlmIHNlbGYu
aWRlbnRpZmllcjoKKyAgICAgICAgaWYgc2VsZi5pZGVudGlmaWVyIGlzIG5vdCBOb25lOgogICAg
ICAgICAgICAgcmV0dXJuIHN0cihzZWxmLmlkZW50aWZpZXIpCiAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoJ0luY29tcGxldGUgY29tbWl0IGZvcm1hdCcpCiAKQEAgLTI2NSwzICsyNjYsMjMgQEAg
Y2xhc3MgQ29tbWl0KG9iamVjdCk6CiAKICAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKICAg
ICAgICAgcmV0dXJuIHNlbGYuX19jbXBfXyhvdGhlcikgPj0gMAorCisgICAgY2xhc3MgRW5jb2Rl
cihqc29uLkpTT05FbmNvZGVyKToKKworICAgICAgICBkZWYgZGVmYXVsdChzZWxmLCBvYmopOgor
ICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob2JqLCBDb21taXQpOgorICAgICAgICAgICAg
ICAgIHJldHVybiBzdXBlcihDb21taXQuRW5jb2Rlciwgc2VsZikuZGVmYXVsdChvYmopCisKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGRpY3QoKQorICAgICAgICAgICAgZm9yIGF0dHJpYnV0ZSBpbiBb
J2hhc2gnLCAncmV2aXNpb24nLCAnYnJhbmNoJywgJ3RpbWVzdGFtcCcsICdtZXNzYWdlJ106Cisg
ICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKG9iaiwgYXR0cmlidXRlLCBOb25lKQorICAg
ICAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRbYXR0cmlidXRlXSA9IHZhbHVlCisKKyAgICAgICAgICAgIGlmIG9iai5hdXRob3I6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0WydhdXRob3InXSA9IG9iai5hdXRob3IuZW1haWwgb3Igb2Jq
LmF1dGhvci5uYW1lCisKKyAgICAgICAgICAgIGlmIG9iai5pZGVudGlmaWVyIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgICAgIHJlc3VsdFsnaWRlbnRpZmllciddID0gc3RyKG9iaikKKworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3NjbS5weQkocmV2
aXNpb24gMjY4MjkzKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvbG9jYWwvc2NtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBAIGlt
cG9ydCByZQogaW1wb3J0IHN5cwogCiBmcm9tIGxvZ2dpbmcgaW1wb3J0IE51bGxIYW5kbGVyCi1m
cm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2cKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvZywg
Q29tbWl0CiAKIAogY2xhc3MgU2NtKG9iamVjdCk6CkBAIC04OSw2ICs4OSwyMCBAQCBjbGFzcyBT
Y20ob2JqZWN0KToKICAgICBkZWYgcmVtb3RlKHNlbGYsIG5hbWU9Tm9uZSk6CiAgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQogCisgICAgZGVmIGZpbmQoc2VsZiwgYXJndW1lbnQp
OgorICAgICAgICBpZiBhcmd1bWVudCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
Y29tbWl0KCkKKyAgICAgICAgaWYgYXJndW1lbnQgaW4gc2VsZi5icmFuY2hlczoKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLmNvbW1pdChicmFuY2g9YXJndW1lbnQpCisKKyAgICAgICAgcGFyc2Vk
X2NvbW1pdCA9IENvbW1pdC5wYXJzZShhcmd1bWVudCkKKyAgICAgICAgcmV0dXJuIHNlbGYuY29t
bWl0KAorICAgICAgICAgICAgaGFzaD1wYXJzZWRfY29tbWl0Lmhhc2gsCisgICAgICAgICAgICBy
ZXZpc2lvbj1wYXJzZWRfY29tbWl0LnJldmlzaW9uLAorICAgICAgICAgICAgaWRlbnRpZmllcj1w
YXJzZWRfY29tbWl0LmlkZW50aWZpZXIsCisgICAgICAgICAgICBicmFuY2g9cGFyc2VkX2NvbW1p
dC5icmFuY2gsCisgICAgICAgICkKKwogICAgIGRlZiBjb21taXQoc2VsZiwgaGFzaD1Ob25lLCBy
ZXZpc2lvbj1Ob25lLCBpZGVudGlmaWVyPU5vbmUsIGJyYW5jaD1Ob25lKToKICAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vX19pbml0X18ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3Jh
bS9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2Zyb20gd2Via2l0c2NtcHkucHJvZ3JhbS5jb21tYW5kIGltcG9ydCBDb21tYW5kCitmcm9tIHdl
YmtpdHNjbXB5LnByb2dyYW0uZmluZCBpbXBvcnQgRmluZAorCitmcm9tIHdlYmtpdHNjbXB5LnBy
b2dyYW0ubWFpbiBpbXBvcnQgbWFpbgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jb21tYW5kLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vY29t
bWFuZC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9wcm9ncmFtL2NvbW1hbmQucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisj
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQg
c3lzCisKKworY2xhc3MgQ29tbWFuZChvYmplY3QpOgorICAgIG5hbWUgPSBOb25lCisgICAgaGVs
cCA9IE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZXIoY2xzLCBwYXJzZXIs
IHJlcG9zaXRvcnkpOgorICAgICAgICBpZiBjbHMubmFtZSBpcyBOb25lOgorICAgICAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignQ29tbWFuZCBkb2VzIG5vdCBoYXZlIGEgbmFtZScp
CisgICAgICAgIGlmIGNscy5oZWxwIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBs
ZW1lbnRlZEVycm9yKCIne30nIGRvZXMgbm90IGhhdmUgYSAgaGVscCBtZXNzYWdlIikKKworICAg
IEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWluKGNscywgcmVwb3NpdG9yeSk6CisgICAgICAgIHN5
cy5zdGRlcnIud3JpdGUoJ05vIGNvbW1hbmQgc3BlY2lmaWVkXG4nKQorICAgICAgICByZXR1cm4g
LTEKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L3Byb2dyYW0vZmluZC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2ZpbmQucHkJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9m
aW5kLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU3IEBACisjIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IHN5cworCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorZnJvbSB3ZWJraXRjb3JlcHkg
aW1wb3J0IGFyZ3VtZW50cworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCBsb2NhbAor
ZnJvbSB3ZWJraXRzY21weS5wcm9ncmFtIGltcG9ydCBDb21tYW5kCisKKworY2xhc3MgRmluZChD
b21tYW5kKToKKyAgICBuYW1lID0gJ2ZpbmQnCisgICAgaGVscCA9ICdHaXZlbiBhbiBpZGVudGlm
aWVyLCByZXZpc2lvbiBvciBoYXNoLCBub3JtYWxpemUgYW5kIHByaW50IHRoZSBjb21taXQnCisK
KyAgICBJREVOVElGSUVSID0gJ2lkZW50aWZpZXInCisgICAgUkVWSVNJT04gPSAncmV2aXNpb24n
CisgICAgSEFTSCA9ICdoYXNoJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBhcnNlcihj
bHMsIHBhcnNlciwgcmVwb3NpdG9yeSwgbG9nZ2Vycz1Ob25lKToKKyAgICAgICAgYXJndW1lbnRz
LkxvZ2dpbmdHcm91cCgKKyAgICAgICAgICAgIHBhcnNlciwKKyAgICAgICAgICAgIGxvZ2dlcnM9
bG9nZ2VycywKKyAgICAgICAgICAgIGhlbHA9J3t9IGFtb3VudCBvZiBsb2dnaW5nIGFuZCBjb21t
aXQgaW5mb3JtYXRpb24gZGlzcGxheWVkJworICAgICAgICApLmFkZF9hcmd1bWVudCgKKyAgICAg
ICAgICAgICctLWpzb24nLCAnLWonLAorICAgICAgICAgICAgaGVscD0nQ29udmVydCB0aGUgY29t
bWl0IHRvIGEgbWFjaGluZS1yZWFkYWJsZSBKU09OIG9iamVjdCcsCisgICAgICAgICAgICBhY3Rp
b249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgZGVzdD0nanNvbicsCisgICAgICAgICAgICBk
ZWZhdWx0PUZhbHNlLAorICAgICAgICApCisKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2Fy
Z3VtZW50X2dyb3VwKCdUeXBlJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KAorICAgICAg
ICAgICAgJy0taWRlbnRpZmllcicsICctaScsCisgICAgICAgICAgICBkZXN0PSdyZWZlcmVuY2Un
LCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICBoZWxwPSdQcmludCB0aGUgaWRlbnRpZmllciBv
ZiB0aGUgc3BlY2lmaWVkIGNvbW1pdCcsCisgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2NvbnN0
JywgY29uc3Q9Y2xzLklERU5USUZJRVIsCisgICAgICAgICkKKworICAgICAgICBpZiByZXBvc2l0
b3J5LmlzX3N2bjoKKyAgICAgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAg
ICAgICAnLS1yZXZpc2lvbicsICctcicsCisgICAgICAgICAgICAgICAgZGVzdD0ncmVmZXJlbmNl
JywgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgIGhlbHA9J1ByaW50IHRoZSByZXZpc2lv
biBvZiB0aGUgc3BlY2lmaWVkIGNvbW1pdCcsCisgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9y
ZV9jb25zdCcsIGNvbnN0PWNscy5SRVZJU0lPTiwKKyAgICAgICAgICAgICkKKworICAgICAgICBp
ZiByZXBvc2l0b3J5LmlzX2dpdDoKKyAgICAgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAg
ICAgICAgICAgICAgICAnLS1oYXNoJywKKyAgICAgICAgICAgICAgICBkZXN0PSdyZWZlcmVuY2Un
LCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgaGVscD0nUHJpbnQgdGhlIGhhc2ggb2Yg
dGhlIHNwZWNpZmllZCBjb21taXQnLAorICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfY29u
c3QnLCBjb25zdD1jbHMuSEFTSCwKKyAgICAgICAgICAgICkKKworICAgICAgICBwYXJzZXIuYWRk
X2FyZ3VtZW50KAorICAgICAgICAgICAgJ2FyZ3VtZW50JywgbmFyZ3M9Jz8nLAorICAgICAgICAg
ICAgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgIGhlbHA9J1N0cmluZyByZXBy
ZXNlbnRhdGlvbiBvZiBhIGNvbW1pdCBvciBicmFuY2ggdG8gYmUgbm9ybWFsaXplZCcsCisgICAg
ICAgICkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3Np
dG9yeSk6CisgICAgICAgIGFyZ3VtZW50X3R5cGUgPSBOb25lCisgICAgICAgIGlmIENvbW1pdC5f
cGFyc2VfaWRlbnRpZmllcihhcmdzLmFyZ3VtZW50KToKKyAgICAgICAgICAgIGFyZ3VtZW50X3R5
cGUgPSBjbHMuSURFTlRJRklFUgorICAgICAgICBlbGlmIENvbW1pdC5fcGFyc2VfaGFzaChhcmdz
LmFyZ3VtZW50KToKKyAgICAgICAgICAgIGFyZ3VtZW50X3R5cGUgPSBjbHMuSEFTSAorICAgICAg
ICBlbGlmIENvbW1pdC5fcGFyc2VfcmV2aXNpb24oYXJncy5hcmd1bWVudCk6CisgICAgICAgICAg
ICBhcmd1bWVudF90eXBlID0gY2xzLlJFVklTSU9OCisKKyAgICAgICAgY2FuZGlkYXRlcyA9IFtO
b25lLCBjbHMuSURFTlRJRklFUl0KKyAgICAgICAgaWYgcmVwb3NpdG9yeS5pc19zdm46CisgICAg
ICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChjbHMuUkVWSVNJT04pCisgICAgICAgIGlmIHJlcG9z
aXRvcnkuaXNfZ2l0OgorICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoY2xzLkhBU0gpCisK
KyAgICAgICAgcmVmZXJlbmNlID0gYXJncy5yZWZlcmVuY2UKKyAgICAgICAgaWYgcmVmZXJlbmNl
IGFuZCBhcmdzLmpzb246CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDYW5ub3QgcHJp
bnQgJ3t9cycsIHRoZSB1c2VyIGFscmVhZHkgYXNrZWQgdG8gcHJpbnQgSlNPTlxuIi5mb3JtYXQo
cmVmZXJlbmNlKSkKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBpZiByZWZlcmVuY2Ug
aXMgbm90IE5vbmUgYW5kIHJlZmVyZW5jZSA9PSBhcmd1bWVudF90eXBlOgorICAgICAgICAgICAg
c3lzLnN0ZGVyci53cml0ZSgiQ2Fubm90IHByaW50ICd7fXMnLCB0aGUgdXNlciBhbHJlYWR5IHNw
ZWNpZmllZCB0aGUgY29tbWl0IGJ5IGl0XG4iLmZvcm1hdChyZWZlcmVuY2UpKQorICAgICAgICAg
ICAgcmV0dXJuIC0xCisKKyAgICAgICAgaWYgcmVmZXJlbmNlIGFuZCBhcmdzLnZlcmJvc2UgPiAw
OgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2Fubm90IHByaW50IHRoZSAne30nIHNw
ZWNpZmljYWxseSwgdmVyYm9zaXR5IG92ZXJyaWRlcyB0aGlzIG9wdGlvblxuIi5mb3JtYXQocmVm
ZXJlbmNlKSkKKyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgIGlmIHJlZmVyZW5jZSBp
cyBOb25lIGFuZCBhcmd1bWVudF90eXBlID09IGNscy5JREVOVElGSUVSOgorICAgICAgICAgICAg
cmVmZXJlbmNlID0gY2xzLlJFVklTSU9OIGlmIHJlcG9zaXRvcnkuaXNfc3ZuIGVsc2UgY2xzLkhB
U0gKKworICAgICAgICBpZiByZWZlcmVuY2Ugbm90IGluIGNhbmRpZGF0ZXM6CisgICAgICAgICAg
ICBzeXMuc3RkZXJyLndyaXRlKCJDYW5ub3QgcHJpbnQgJ3t9cycsIHRoZXkgYXJlIG5vdCBzdXBw
b3J0ZWQgaW4gdGhpcyByZXBvc2l0b3J5XG4iLmZvcm1hdChyZWZlcmVuY2UpKQorICAgICAgICAg
ICAgcmV0dXJuIC0xCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29tbWl0ID0gcmVwb3Np
dG9yeS5maW5kKGFyZ3MuYXJndW1lbnQpCisgICAgICAgIGV4Y2VwdCAobG9jYWwuU2NtLkV4Y2Vw
dGlvbiwgVmFsdWVFcnJvcikgYXMgZXhjZXB0aW9uOgorICAgICAgICAgICAgIyBWYWx1ZUVycm9y
cyBhbmQgU2NtIGV4Y2VwdGlvbnMgdXN1YWxseSBjb250YWluIGVub3VnaCBpbmZvcm1hdGlvbiB0
byBiZSBkaXNwbGF5ZWQKKyAgICAgICAgICAgICMgdG8gdGhlIHVzZXIgYXMgYW4gZXJyb3IKKyAg
ICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc3RyKGV4Y2VwdGlvbikgKyAnXG4nKQorICAgICAg
ICAgICAgcmV0dXJuIDEKKworICAgICAgICBpZiBhcmdzLnZlcmJvc2UgPiAxIGFuZCBub3QgY29t
bWl0Lm1lc3NhZ2U6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gZmlu
ZCB0aGUgIGNvbW1pdCBtZXNzYWdlIGZvciAne30nXG4iLmZvcm1hdChjb21taXQpKQorICAgICAg
ICAgICAgcmV0dXJuIDEKKworICAgICAgICBpZiBhcmdzLmpzb246CisgICAgICAgICAgICBwcmlu
dChqc29uLmR1bXBzKGNvbW1pdCwgY2xzPUNvbW1pdC5FbmNvZGVyLCBpbmRlbnQ9NCkpCisgICAg
ICAgICAgICByZXR1cm4gMAorCisgICAgICAgIGlmIGFyZ3MudmVyYm9zZSA+IDA6CisgICAgICAg
ICAgICBwcmludCgne2lkZW50aWZpZXJ9IHwge2hhc2h9e3JldmlzaW9ufXt0aXRsZX0nLmZvcm1h
dCgKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPWNvbW1pdCwKKyAgICAgICAgICAgICAgICBo
YXNoPWNvbW1pdC5oYXNoIGlmIGNvbW1pdC5oYXNoIGVsc2UgJycsCisgICAgICAgICAgICAgICAg
cmV2aXNpb249J3t9cnt9Jy5mb3JtYXQoJywgJyBpZiBjb21taXQuaGFzaCBlbHNlICcnLCBjb21t
aXQucmV2aXNpb24pIGlmIGNvbW1pdC5yZXZpc2lvbiBlbHNlICcnLAorICAgICAgICAgICAgICAg
IHRpdGxlPScgfCB7fScuZm9ybWF0KGNvbW1pdC5tZXNzYWdlLnNwbGl0bGluZXMoKVswXSkgaWYg
Y29tbWl0Lm1lc3NhZ2UgZWxzZSAnJworICAgICAgICAgICAgKSkKKyAgICAgICAgICAgIGlmIGFy
Z3MudmVyYm9zZSA+IDE6CisgICAgICAgICAgICAgICAgcHJpbnQoJ0F1dGhvcjoge30nLmZvcm1h
dChjb21taXQuYXV0aG9yKSkKKyAgICAgICAgICAgICAgICBwcmludCgnRGF0ZTogICB7fScuZm9y
bWF0KGRhdGV0aW1lLmZyb210aW1lc3RhbXAoY29tbWl0LnRpbWVzdGFtcCkuc3RyZnRpbWUoJyVh
ICViICVkICVIOiVNOiVTICVZJykpKQorICAgICAgICAgICAgICAgIHByaW50KCcnKQorICAgICAg
ICAgICAgICAgIGZvciBsaW5lIGluIGNvbW1pdC5tZXNzYWdlLnNwbGl0bGluZXMoKToKKyAgICAg
ICAgICAgICAgICAgICAgcHJpbnQoJyAgICB7fScuZm9ybWF0KGxpbmUpKQorICAgICAgICAgICAg
cmV0dXJuIDAKKworICAgICAgICBpZiByZWZlcmVuY2UgaW4gW05vbmUsIGNscy5JREVOVElGSUVS
XToKKyAgICAgICAgICAgIHByaW50KGNvbW1pdCkKKyAgICAgICAgZWxpZiByZWZlcmVuY2UgPT0g
Y2xzLlJFVklTSU9OOgorICAgICAgICAgICAgcHJpbnQoJ3J7fScuZm9ybWF0KGNvbW1pdC5yZXZp
c2lvbikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludChjb21taXQuaGFzaCkKKyAg
ICAgICAgcmV0dXJuIDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3Byb2dyYW0vbWFpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL21haW4ucHkJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvcHJvZ3JhbS9tYWluLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQg
b3MKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBhcmd1bWVudHMs
IGxvZyBhcyB3ZWJraXRjb3JlcHlfbG9nCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwg
bG9nCitmcm9tIHdlYmtpdHNjbXB5LnByb2dyYW0gaW1wb3J0IEZpbmQKKworCitkZWYgbWFpbihh
cmdzPU5vbmUsIHJlcG9zaXRvcnk9Tm9uZSwgbG9nZ2Vycz1Ob25lKToKKyAgICBsb2dnaW5nLmJh
c2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuV0FSTklORykKKworICAgIGxvZ2dlcnMgPSBbbG9nZ2lu
Zy5nZXRMb2dnZXIoKSwgd2Via2l0Y29yZXB5X2xvZywgIGxvZ10gKyAobG9nZ2VycyBvciBbXSkK
KworICAgIGlmIG5vdCByZXBvc2l0b3J5OgorICAgICAgICByZXBvc2l0b3J5ID0gbG9jYWwuU2Nt
LmZyb21fcGF0aChwYXRoPW9zLmdldGN3ZCgpKQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJn
dW1lbnRQYXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uPSdDdXN0b20gZ2l0IHRvb2xpbmcgZnJv
bSB0aGUgV2ViS2l0IHRlYW0gdG8gaW50ZXJhY3Qgd2l0aCBhICcgKworICAgICAgICAgICAgICAg
ICAgICAncmVwb3NpdG9yeSB1c2luZyBpZGVudGlmZXJzJywKKyAgICApCisgICAgYXJndW1lbnRz
LkxvZ2dpbmdHcm91cChwYXJzZXIpCisgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFy
c2VycyhoZWxwPSdzdWItY29tbWFuZCBoZWxwJykKKworICAgIGZvciBwcm9ncmFtIGluIFtGaW5k
XToKKyAgICAgICAgc3VicGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKHByb2dyYW0ubmFt
ZSwgaGVscD1wcm9ncmFtLmhlbHApCisgICAgICAgIHN1YnBhcnNlci5zZXRfZGVmYXVsdHMobWFp
bj1wcm9ncmFtLm1haW4pCisgICAgICAgIHByb2dyYW0ucGFyc2VyKHN1YnBhcnNlciwgcmVwb3Np
dG9yeT1yZXBvc2l0b3J5LCBsb2dnZXJzPWxvZ2dlcnMpCisKKyAgICBwYXJzZWQgPSBwYXJzZXIu
cGFyc2VfYXJncyhhcmdzPWFyZ3MpCisKKyAgICByZXR1cm4gcGFyc2VkLm1haW4oYXJncz1wYXJz
ZWQsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY29tbWl0X3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rl
c3QvY29tbWl0X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNjgyOTMpCisrKyBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2NvbW1pdF91bml0dGVzdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwogIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIAoraW1wb3J0IGpzb24KIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGRhdGV0aW1l
IGltcG9ydCBkYXRldGltZQpAQCAtMjA5LDMgKzIxMCw0OSBAQCBQUklOVEVECiAgICAgICAgIENv
bnRyaWJ1dG9yLmNsZWFyKCkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy
cm9yKToKICAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIGF1dGhv
cj0nSm9uYXRoYW4gQmVkYXJkJykKKworICAgIGRlZiB0ZXN0X2JyYW5jaF9wb2ludChzZWxmKToK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMCcsIHN0cihDb21taXQoaWRlbnRpZmllcj0wKSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzBAYnJhbmNoLWEnLCBzdHIoQ29tbWl0KGlkZW50
aWZpZXI9MCwgYnJhbmNoPSdicmFuY2gtYScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
MTIzNC4wQGJyYW5jaC1hJywgc3RyKENvbW1pdChicmFuY2hfcG9pbnQ9MTIzNCwgaWRlbnRpZmll
cj0wLCBicmFuY2g9J2JyYW5jaC1hJykpKQorCisgICAgZGVmIHRlc3RfanNvbl9lbmNvZGUoc2Vs
Zik6CisgICAgICAgIENvbnRyaWJ1dG9yLmNsZWFyKCkKKyAgICAgICAgY29udHJpYnV0b3IgPSBD
b250cmlidXRvci5mcm9tX3NjbV9sb2coJ0F1dGhvcjogSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJk
QGFwcGxlLmNvbT4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKAorICAgICAgICAg
ICAgZGljdCgKKyAgICAgICAgICAgICAgICByZXZpc2lvbj0xLAorICAgICAgICAgICAgICAgIGhh
c2g9J2MzYmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0ZWQ4YmUyOGFjYmUnLAorICAgICAgICAg
ICAgICAgIGJyYW5jaD0nbWFpbicsCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMUBtYWlu
JywKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTAwMCwKKyAgICAgICAgICAgICAgICBhdXRo
b3I9J2piZWRhcmRAYXBwbGUuY29tJywKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSdNZXNzYWdl
JywKKyAgICAgICAgICAgICksIGpzb24ubG9hZHMoanNvbi5kdW1wcyhDb21taXQoCisgICAgICAg
ICAgICAgICAgcmV2aXNpb249MSwKKyAgICAgICAgICAgICAgICBoYXNoPSdjM2JkNzg0ZjhiODhi
ZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJywKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVy
PScxQG1haW4nLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xMDAwLAorICAgICAgICAgICAg
ICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSdNZXNzYWdl
JworICAgICAgICAgICAgKSwgY2xzPUNvbW1pdC5FbmNvZGVyKSkKKyAgICAgICAgKQorCisgICAg
ZGVmIHRlc3RfanNvbl9kZWNvZGUoc2VsZik6CisgICAgICAgIENvbnRyaWJ1dG9yLmNsZWFyKCkK
KyAgICAgICAgY29udHJpYnV0b3IgPSBDb250cmlidXRvci5mcm9tX3NjbV9sb2coJ0F1dGhvcjog
Sm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFwcGxlLmNvbT4nKQorCisgICAgICAgIGNvbW1pdF9h
ID0gQ29tbWl0KAorICAgICAgICAgICAgcmV2aXNpb249MSwKKyAgICAgICAgICAgIGhhc2g9J2Mz
YmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0ZWQ4YmUyOGFjYmUnLAorICAgICAgICAgICAgaWRl
bnRpZmllcj0nMUBtYWluJywKKyAgICAgICAgICAgIHRpbWVzdGFtcD0xMDAwLAorICAgICAgICAg
ICAgYXV0aG9yPWNvbnRyaWJ1dG9yLAorICAgICAgICAgICAgbWVzc2FnZT0nTWVzc2FnZScKKyAg
ICAgICAgKQorCisgICAgICAgIGRpY3Rpb25hcnkgPSBqc29uLmxvYWRzKGpzb24uZHVtcHMoY29t
bWl0X2EsIGNscz1Db21taXQuRW5jb2RlcikpCisgICAgICAgIGNvbW1pdF9iID0gQ29tbWl0KCoq
ZGljdGlvbmFyeSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdF9hLCBjb21taXRf
YikKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L3Rlc3QvZmluZF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2ZpbmRfdW5pdHRlc3QucHkJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvdGVzdC9maW5kX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkzIEBA
CisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQganNvbgoraW1w
b3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBPdXRwdXRDYXB0dXJlCitm
cm9tIHdlYmtpdGNvcmVweS5tb2NrcyBpbXBvcnQgVGltZSBhcyBNb2NrVGltZQorZnJvbSB3ZWJr
aXRzY21weSBpbXBvcnQgbG9jYWwsICBwcm9ncmFtLCBtb2NrcworCisKK2NsYXNzIFRlc3RGaW5k
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBwYXRoID0gJy9tb2NrL3JlcG9zaXRvcnknCisKKyAg
ICBkZWYgdGVzdF9iYXNpY19naXQoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0
KHNlbGYucGF0aCksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgp
IGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1h
aW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCksCisgICAgICAgICAgICAgICAgcmVw
b3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnNEBt
YWluXG4nKQorCisgICAgZGVmIHRlc3RfYmFzaWNfZ2l0X3N2bihzZWxmKToKKyAgICAgICAgd2l0
aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5sb2NhbC5T
dm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9
KCdmaW5kJywpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0
aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChj
YXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzRAbWFpblxuJykKKworICAgIGRlZiB0ZXN0X2Jh
c2ljX3N2bihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoKSwgbW9ja3MubG9j
YWwuU3ZuKHNlbGYucGF0aCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAg
ICAgICAgICBhcmdzPSgnZmluZCcsKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2Fs
LlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICc0QHRydW5rXG4nKQorCisg
ICAgZGVmIHRlc3RfaWRlbnRpZmllcl9naXQoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9j
YWwuR2l0KHNlbGYucGF0aCksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2Fw
dHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9n
cmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnMkBtYWluJyksCisgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisg
ICAgICAgICAgICApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5n
ZXR2YWx1ZSgpLCAnZmZmODNiYjJkOTE3MWI0ZDkxOTZlOTc3ZWIwNTA4ZmQ1N2U3YTA4ZFxuJykK
KworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXJfZ2l0X3N2bihzZWxmKToKKyAgICAgICAgd2l0aCBt
b2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBP
dXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICcyQG1haW4n
KSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5w
YXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQu
c3Rkb3V0LmdldHZhbHVlKCksICdmZmY4M2JiMmQ5MTcxYjRkOTE5NmU5NzdlYjA1MDhmZDU3ZTdh
MDhkXG4nKQorCisgICAgZGVmIHRlc3RfaWRlbnRpZmllcl9zdm4oc2VsZik6CisgICAgICAgIHdp
dGggbW9ja3MubG9jYWwuR2l0KCksIG1vY2tzLmxvY2FsLlN2bihzZWxmLnBhdGgpLCBNb2NrVGlt
ZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnMkB0
cnVuaycpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChz
ZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0
dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJ3IyXG4nKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxm
KToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSwgbW9ja3MubG9jYWwu
U3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdz
PSgnZmluZCcsICczY2QzMmUzNTI0MTA1NjViYjU0MzgyMWZiZjg1NmE2ZDNjYWFkMWM0JyksCisg
ICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCks
CisgICAgICAgICAgICApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91
dC5nZXR2YWx1ZSgpLCAnMi4yQGJyYW5jaC1iXG4nKQorCisgICAgZGVmIHRlc3RfcmV2aXNpb25f
c3ZuKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5T
dm4oc2VsZi5wYXRoKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAg
ICAgIGFyZ3M9KCdmaW5kJywgJ3I1JyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2Nh
bC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnMi4yQGJyYW5jaC1iXG4n
KQorCisgICAgZGVmIHRlc3RfcmV2aXNpb25fZ2l0X3N2bihzZWxmKToKKyAgICAgICAgd2l0aCBt
b2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5sb2NhbC5Tdm4o
KSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdm
aW5kJywgJ3I1JyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9w
YXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnMi4yQGJyYW5jaC1iXG4nKQorCisgICAgZGVm
IHRlc3RfdmVyYm9zZShzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5w
YXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENh
cHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJv
Z3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJzNAbWFpbicsICctdicp
LAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBh
dGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5z
dGRvdXQuZ2V0dmFsdWUoKSwgJzNAbWFpbiB8IDFhYmUyNWI0NDNlOTg1ZjkzYjkwZDgzMGU0YTdl
MzczMTMzNmFmNGQsIHI0IHwgNHRoIGNvbW1pdFxuJykKKworICAgIGRlZiB0ZXN0X3ZlcmJvc2Vf
dmVyYm9zZShzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBn
aXRfc3ZuPVRydWUpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUo
KSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5t
YWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJzNAbWFpbicsICctdnYnKSwKKyAg
ICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRoKSwK
KyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBj
YXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICcnJzNAbWFpbiB8IDFhYmUy
NWI0NDNlOTg1ZjkzYjkwZDgzMGU0YTdlMzczMTMzNmFmNGQsIHI0IHwgNHRoIGNvbW1pdAorQXV0
aG9yOiBKb25hdGhhbiBCZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29tPgorRGF0ZTogICBGcmkgT2N0
IDAyIDExOjIzOjIwIDIwMjAKKworICAgIDR0aCBjb21taXQKKyAgICBzdm4taWQ6IGh0dHBzOi8v
c3ZuLndlYmtpdC5vcmdyZXBvc2l0b3J5L3JlcG9zaXRvcnkvdHJ1bmtANCAyNjhmNDVjYy1jZDA5
LTA0MTAtYWIzYy1kNTI2OTFiNGRiZmMKKycnJywKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3Rf
anNvbihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBnaXRf
c3ZuPVRydWUpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBh
cyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWlu
KAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJzNAbWFpbicsICctLWpzb24nKSwKKyAg
ICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRoKSwK
KyAgICAgICAgICAgICkpCisKKyAgICAgICAgZGVjb2RlZCA9IGpzb24ubG9hZHMoY2FwdHVyZWQu
c3Rkb3V0LmdldHZhbHVlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKAorICAgICAg
ICAgICAgZGVjb2RlZCwgZGljdCgKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPSczQG1haW4n
LAorICAgICAgICAgICAgICAgIGhhc2g9JzFhYmUyNWI0NDNlOTg1ZjkzYjkwZDgzMGU0YTdlMzcz
MTMzNmFmNGQnLAorICAgICAgICAgICAgICAgIHJldmlzaW9uPTQsCisgICAgICAgICAgICAgICAg
YXV0aG9yPSdqYmVkYXJkQGFwcGxlLmNvbScsCisgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2
MDE2NjMwMDAsCisgICAgICAgICAgICAgICAgYnJhbmNoPSdtYWluJywKKyAgICAgICAgICAgICAg
ICBtZXNzYWdlPSc0dGggY29tbWl0XG5zdm4taWQ6IGh0dHBzOi8vc3ZuLndlYmtpdC5vcmdyZXBv
c2l0b3J5L3JlcG9zaXRvcnkvdHJ1bmtANCAyNjhmNDVjYy1jZDA5LTA0MTAtYWIzYy1kNTI2OTFi
NGRiZmMnLAorICAgICAgICAgICAgKSkKKworICAgIGRlZiB0ZXN0X3JlcXVlc3RfaWRlbnRpZmll
cihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBnaXRfc3Zu
PVRydWUpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBj
YXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAor
ICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJ2EzMGNlODQ5NGJmMWFjMjgwN2E2OTg0NGY3
MjZiZTRhOTg0M2NhNTUnLCAnLS1pZGVudGlmaWVyJyksCisgICAgICAgICAgICAgICAgcmVwb3Np
dG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnMi4xQGJy
YW5jaC1hXG4nKQorCisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0
X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkg
YXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBwcm9ncmFtLm1h
aW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnMi4xQGJyYW5jaC1hJywgJy0taWRl
bnRpZmllcicpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0
aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChj
YXB0dXJlZC5zdGRlcnIuZ2V0dmFsdWUoKSwgIkNhbm5vdCBwcmludCAnaWRlbnRpZmllcnMnLCB0
aGUgdXNlciBhbHJlYWR5IHNwZWNpZmllZCB0aGUgY29tbWl0IGJ5IGl0XG4iKQorCisgICAgZGVm
IHRlc3RfcmVxdWVzdF9oYXNoKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChz
ZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0
cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgw
LCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAncjMnLCAnLS1o
YXNoJyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNl
bGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1
cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnYTMwY2U4NDk0YmYxYWMyODA3YTY5ODQ0ZjcyNmJlNGE5
ODQzY2E1NVxuJykKKworICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgsIGdp
dF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgp
IGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgcHJvZ3JhbS5t
YWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJ2EzMGNlODQ5NGJmMWFjMjgwN2E2
OTg0NGY3MjZiZTRhOTg0M2NhNTUnLCAnLS1oYXNoJyksCisgICAgICAgICAgICAgICAgcmVwb3Np
dG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZGVyci5nZXR2YWx1ZSgpLCAiQ2Fubm90
IHByaW50ICdoYXNocycsIHRoZSB1c2VyIGFscmVhZHkgc3BlY2lmaWVkIHRoZSBjb21taXQgYnkg
aXRcbiIpCisKKyAgICBkZWYgdGVzdF9yZXF1ZXN0X3JldmlzaW9uKHNlbGYpOgorICAgICAgICB3
aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2Fs
LlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJn
cz0oJ2ZpbmQnLCAnYTMwY2U4NDk0YmYxYWMyODA3YTY5ODQ0ZjcyNmJlNGE5ODQzY2E1NScsICct
LXJldmlzaW9uJyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9w
YXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAncjNcbicpCisKKyAgICAgICAgd2l0aCBtb2Nr
cy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwg
TW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoLTEsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmlu
ZCcsICdyMycsICctLXJldmlzaW9uJyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2Nh
bC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZGVyci5nZXR2YWx1ZSgpLCAiQ2Fubm90IHByaW50ICdy
ZXZpc2lvbnMnLCB0aGUgdXNlciBhbHJlYWR5IHNwZWNpZmllZCB0aGUgY29tbWl0IGJ5IGl0XG4i
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411055</attachid>
            <date>2020-10-11 10:20:09 -0700</date>
            <delta_ts>2020-10-12 13:35:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217534-20201011102008.patch</filename>
            <type>text/plain</type>
            <size>37686</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODMyMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDUzIEBACisyMDIwLTEwLTExICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBgZ2l0LXdlYmtpdCBmaW5kYAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3NTM0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS83MDE1MjQzMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvZ2l0LXdlYmtpdDogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5w
eTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvYXJndW1lbnRzLnB5OgorICAgICAgICAoTm9BY3Rpb24uX19jYWxsX18p
OgorICAgICAgICAoQ291bnRBY3Rpb24pOiBDcmVhdGUgYW4gYWN0aW9uIHRvIGluY3JlbWVudCBv
ciBkZWNyZW1lbnQgYSB2YXJpYWJsZSBieSBhIHZhbHVlLgorICAgICAgICAoQ2FsbGJhY2tBY3Rp
b24pOiBDcmVhdGUgYW4gYWN0aW9uIHdoaWNoIHdpbGwgdHJpZ2dlciBhIGNhbGxiYWNrIHdoZW4g
c2V0LgorICAgICAgICAoTG9nZ2luZ0dyb3VwKTogQ3JlYXRlIGEgZ3JvdXAgd2hpY2ggYWxsb3dz
IHRoZSB1c2VyIHRvIGNoYW5nZSBsb2dnaW5nIGJlaGF2aW9yLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQ6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5OiBBZGQgd2Via2l0c2NtcHkucHJvZ3Jh
bSBhbmQgZ2l0LXdlYmtpdC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weToKKyAgICAg
ICAgKEdpdC5kZWZhdWx0X2JyYW5jaCk6IEZhbGxiYWNrIHRvICdtYXN0ZXInIG9yICdtYWluJyBp
ZiB0aGUgcmVtb3RlIGlzbid0IGF2YWlsYWJsZS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zY20ucHk6CisgICAgICAgIChTY20uZmlu
ZCk6IEFkZCBmdW5jdGlvbiB0byBjb252ZXJ0IGdlbmVyaWMgc3RyaW5nIGFyZ3VtZW50cyB0byBh
IGNvbW1pdCwgYW5kIHRoZW4gZmluZCB0aGF0IGNvbW1pdCBpbgorICAgICAgICB0aGUgcmVwb3Np
dG9yeS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9sb2NhbC9zdm4ucHk6CisgICAgICAgIChTdm4pOiBTdXBwb3J0IGEgZmV3IGRpZmZlcmVudCBT
Vk4gYmluYXJ5IHBhdGhzLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3Byb2dyYW06IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vX19pbml0X18ucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0v
Y29tbWFuZC5weTogQWRkZWQuCisgICAgICAgIChDb21tYW5kKTogQmFzZSBjbGFzcyBmb3IgYWxs
IGNvbW1hbmRzLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Byb2dyYW0vZmluZC5weTogQWRkZWQuCisgICAgICAgIChGaW5kKToKKyAgICAgICAg
KEZpbmQucGFyc2VyKTogQ29uZmlndXJlIHBhcnNlciBmb3IgJ2ZpbmQnIHN1Yi1wcm9ncmFtLgor
ICAgICAgICAoRmluZC5tYWluKTogR2l2ZW4gYW4gaWRlbnRpZmllciwgcmV2aXNpb24sIGhhc2gg
b3IgYnJhbmNoIG5hbWUsIGZpbmQgYW5kIHByaW50IHRoZSBtYXRjaGluZyBjb21taXQgZnJvbQor
ICAgICAgICB0aGUgcmVwb3NpdG9yeSBpbiBzY29wZS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL21haW4ucHk6IEFkZGVkLgorICAg
ICAgICAobWFpbik6IEVudHJ5IHBvaW50IHRvIGdpdC08cHJvamVjdD4gc2NyaXB0cy4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2ZpbmRf
dW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAoVGVzdEZpbmQpOgorICAgICAgICAoVGVzdEZp
bmQudGVzdF9iYXNpY19naXQpOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9iYXNpY19naXRfc3Zu
KToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfYmFzaWNfc3ZuKToKKyAgICAgICAgKFRlc3RGaW5k
LnRlc3RfaWRlbnRpZmllcl9naXQpOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9pZGVudGlmaWVy
X2dpdF9zdm4pOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9pZGVudGlmaWVyX3N2bik6CisgICAg
ICAgIChUZXN0RmluZC50ZXN0X2hhc2gpOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9yZXZpc2lv
bl9zdm4pOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9yZXZpc2lvbl9naXRfc3ZuKToKKyAgICAg
ICAgKFRlc3RGaW5kLnRlc3RfdmVyYm9zZSk6CisgICAgICAgIChUZXN0RmluZC50ZXN0X3ZlcmJv
c2VfdmVyYm9zZSk6CisKIDIwMjAtMTAtMTEgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBw
bGUuY29tPgogCiAgICAgICAgIFt3ZWJraXRzY21weV0gU3VwcG9ydCBqc29uIGVuY29kaW5nIG9m
IENvbW1pdCBvYmplY3QKSW5kZXg6IFRvb2xzL1NjcmlwdHMvZ2l0LXdlYmtpdAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL2dpdC13ZWJraXQJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2Ny
aXB0cy9naXQtd2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2lt
cG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCB3ZWJraXRweQoraW1wb3J0IHN5cworCitmcm9t
IHdlYmtpdHNjbXB5IGltcG9ydCBDb250cmlidXRvciwgbG9jYWwsIHByb2dyYW0KKworIyBQb3B1
bGF0ZSBXZWJLaXQgY29udHJpYnV0b3JzCitzY3JpcHRzID0gb3MucGF0aC5kaXJuYW1lKF9fZmls
ZV9fKQord2l0aCBvcGVuKG9zLnBhdGguam9pbihzY3JpcHRzLCAnd2Via2l0cHknLCAnY29tbW9u
JywgJ2NvbmZpZycsICdjb250cmlidXRvcnMuanNvbicpKSBhcyBmaWxlOgorICAgIGNvbnRyaWJ1
dG9ycyA9IGpzb24ubG9hZChmaWxlKQorZm9yIG5hbWUsIGF0dHJpYnV0ZXMgaW4gY29udHJpYnV0
b3JzLml0ZW1zKCk6CisgICAgY29udHJpYnV0b3IgPSBDb250cmlidXRvcihuYW1lPW5hbWUsIGVt
YWlscz1hdHRyaWJ1dGVzLmdldCgnZW1haWxzJywgW10pKQorICAgIENvbnRyaWJ1dG9yLmJ5X25h
bWVbY29udHJpYnV0b3IubmFtZV0gPSBjb250cmlidXRvcgorICAgIGZvciBlbWFpbCBpbiBjb250
cmlidXRvci5lbWFpbHM6CisgICAgICAgIENvbnRyaWJ1dG9yLmJ5X2VtYWlsW2VtYWlsXSA9IGNv
bnRyaWJ1dG9yCisKK3N5cy5leGl0KHByb2dyYW0ubWFpbihyZXBvc2l0b3J5PWxvY2FsLlNjbS5m
cm9tX3BhdGgoc2NyaXB0cykpKQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9TY3JpcHRz
L2dpdC13ZWJraXQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAj
IworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkv
X19pbml0X18ucHkJKHJldmlzaW9uIDI2ODMyMCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDcgQEAgZnJvbSB3ZWJraXRjb3JlcHkudGltZW91dCBpbXBvcnQgVGltZW91dAog
ZnJvbSB3ZWJraXRjb3JlcHkuc3VicHJvY2Vzc191dGlscyBpbXBvcnQgVGltZW91dEV4cGlyZWQs
IENvbXBsZXRlZFByb2Nlc3MsIHJ1bgogZnJvbSB3ZWJraXRjb3JlcHkub3V0cHV0X2NhcHR1cmUg
aW1wb3J0IExvZ2dlckNhcHR1cmUsIE91dHB1dENhcHR1cmUsIE91dHB1dER1cGxpY2F0ZQogCi12
ZXJzaW9uID0gVmVyc2lvbigwLCA0LCAxMykKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDQsIDE0KQog
CiBmcm9tIHdlYmtpdGNvcmVweS5hdXRvaW5zdGFsbCBpbXBvcnQgUGFja2FnZSwgQXV0b0luc3Rh
bGwKIGlmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CkluZGV4OiBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L2FyZ3VtZW50cy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L2Fy
Z3VtZW50cy5weQkocmV2aXNpb24gMjY4MzIwKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9hcmd1bWVudHMucHkJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDYgKzIxLDkgQEAKICMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcK
KworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IGxvZwogCiAKIGNsYXNzIE5vQWN0aW9uKGFyZ3Bh
cnNlLkFjdGlvbik6CkBAIC0yOSwzICszMiw1NyBAQCBjbGFzcyBOb0FjdGlvbihhcmdwYXJzZS5B
Y3Rpb24pOgogCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1
ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CiAgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxm
LmRlc3QsIEZhbHNlIGlmIG9wdGlvbl9zdHJpbmcuc3RhcnRzd2l0aCgnLS1ubycpIGVsc2UgVHJ1
ZSkKKworCitkZWYgQ291bnRBY3Rpb24odmFsdWU9MSk6CisgICAgY2xhc3MgQWN0aW9uKGFyZ3Bh
cnNlLkFjdGlvbik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25fc3RyaW5ncywg
ZGVzdCwgKiprd2FyZ3MpOgorICAgICAgICAgICAgc3VwZXIoQWN0aW9uLCBzZWxmKS5fX2luaXRf
XyhvcHRpb25fc3RyaW5ncywgZGVzdCwgbmFyZ3M9MCwgKiprd2FyZ3MpCisKKyAgICAgICAgZGVm
IF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmcp
OgorICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgZ2V0YXR0cihuYW1l
c3BhY2UsIHNlbGYuZGVzdCkgKyB2YWx1ZSkKKworICAgIHJldHVybiBBY3Rpb24KKworCitkZWYg
Q2FsbGJhY2tBY3Rpb24oYWN0aW9uLCBjYWxsYmFjaz1sYW1iZGEgbmFtZXNwYWNlOiBOb25lKToK
KyAgICBjbGFzcyBBY3Rpb24oYWN0aW9uKToKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBh
cnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmdzKToKKyAgICAgICAgICAgIHN1
cGVyKEFjdGlvbiwgc2VsZikuX19jYWxsX18ocGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0
aW9uX3N0cmluZ3MpCisgICAgICAgICAgICBjYWxsYmFjayhuYW1lc3BhY2UpCisKKyAgICByZXR1
cm4gQWN0aW9uCisKKworZGVmIExvZ2dpbmdHcm91cChwYXJzZXIsIGxvZ2dlcnM9Tm9uZSwgZGVm
YXVsdD1sb2dnaW5nLldBUk5JTkcsIGhlbHA9J3t9IGFtb3VudCBvZiBsb2dnaW5nJyk6CisgICAg
aWYgbm90IGlzaW5zdGFuY2UocGFyc2VyLCBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcik6CisgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Byb3ZpZGVkIHBhcnNlciBpcyBub3QgYSB7fScuZm9ybWF0
KHR5cGUoYXJncGFyc2UuQXJndW1lbnRQYXJzZXIpKSkKKworICAgIGlmIG5vdCBsb2dnZXJzOgor
ICAgICAgICBsb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCksIGxvZ10KKyAgICBmb3IgbG9n
Z2VyIGluIGxvZ2dlcnM6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChkZWZhdWx0KQorCisgICAg
ZGVmIHZlcmJvc2VfY2FsbGJhY2sobmFtZXNwYWNlKToKKyAgICAgICAgdmVyYm9zaXR5ID0gZ2V0
YXR0cihuYW1lc3BhY2UsICd2ZXJib3NlJykKKyAgICAgICAgbG9nX2xldmVsID0gZGVmYXVsdCAt
IHZlcmJvc2l0eSAqIDEwCisKKyAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsICdsb2dfbGV2ZWwn
LCBsb2dfbGV2ZWwpCisKKyAgICAgICAgZm9yIGxvZ2dlciBpbiBsb2dnZXJzOgorICAgICAgICAg
ICAgbG9nZ2VyLnNldExldmVsKGxvZ19sZXZlbCkKKworICAgIGdyb3VwID0gcGFyc2VyLmFkZF9h
cmd1bWVudF9ncm91cCgnTG9nZ2luZycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KAorICAgICAg
ICAnLS12ZXJib3NlJywgJy12JywKKyAgICAgICAgZGVzdD0ndmVyYm9zZScsIGRlZmF1bHQ9MCwK
KyAgICAgICAgaGVscD1oZWxwLmZvcm1hdCgnSW5jcmVhc2UnKSwKKyAgICAgICAgYWN0aW9uPUNh
bGxiYWNrQWN0aW9uKENvdW50QWN0aW9uKHZhbHVlPTEpLCBjYWxsYmFjaz12ZXJib3NlX2NhbGxi
YWNrKSwKKyAgICApCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KAorICAgICAgICAnLS1xdWlldCcs
ICctcScsCisgICAgICAgIGRlc3Q9J3ZlcmJvc2UnLCBkZWZhdWx0PTAsCisgICAgICAgIGhlbHA9
aGVscC5mb3JtYXQoJ0RlY3JlYXNlJyksCisgICAgICAgIGFjdGlvbj1DYWxsYmFja0FjdGlvbihD
b3VudEFjdGlvbih2YWx1ZT0tMSksIGNhbGxiYWNrPXZlcmJvc2VfY2FsbGJhY2spLAorICAgICkK
KyAgICByZXR1cm4gZ3JvdXAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L2dpdC13ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvZ2l0LXdlYmtpdAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS9naXQtd2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAg
QEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisj
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgcHJvZ3JhbQor
CisKK3N5cy5leGl0KHByb2dyYW0ubWFpbigpKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvZ2l0LXdlYmtpdApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVw
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3Nl
dHVwLnB5CShyZXZpc2lvbiAyNjgzMjApCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS9zZXR1cC5weQkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsMTAgQEAgc2V0dXAo
CiAgICAgICAgICd3ZWJraXRzY21weS5sb2NhbCcsCiAgICAgICAgICd3ZWJraXRzY21weS5tb2Nr
cycsCiAgICAgICAgICd3ZWJraXRzY21weS5tb2Nrcy5sb2NhbCcsCisgICAgICAgICd3ZWJraXRz
Y21weS5wcm9ncmFtJywKICAgICAgICAgJ3dlYmtpdHNjbXB5LnRlc3QnLAogICAgIF0sCisgICAg
c2NyaXB0cz1bJ2dpdC13ZWJraXQnXSwKICAgICBpbnN0YWxsX3JlcXVpcmVzPVsncHl0aG9uLWRh
dGV1dGlsJywgJ3dlYmtpdGNvcmVweSddLAogICAgIGluY2x1ZGVfcGFja2FnZV9kYXRhPVRydWUs
CiAgICAgemlwX3NhZmU9RmFsc2UsCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQkocmV2aXNp
b24gMjY4MzIwKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgZXhjZXB0
IEltcG9ydEVycm9yOgogICAgICAgICAiUGxlYXNlIGluc3RhbGwgd2Via2l0Y29yZXB5IHdpdGgg
YHBpcCBpbnN0YWxsIHdlYmtpdGNvcmVweSAtLWV4dHJhLWluZGV4LXVybCA8cGFja2FnZSBpbmRl
eCBVUkw+YCIKICAgICApCiAKLXZlcnNpb24gPSBWZXJzaW9uKDAsIDEsIDMpCit2ZXJzaW9uID0g
VmVyc2lvbigwLCAyLCAwKQogCiBBdXRvSW5zdGFsbC5yZWdpc3RlcihQYWNrYWdlKCdkYXRldXRp
bCcsIFZlcnNpb24oMiwgOCwgMSksIHB5cGlfbmFtZT0ncHl0aG9uLWRhdGV1dGlsJykpCiAKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2Fs
L2dpdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9sb2NhbC9naXQucHkJKHJldmlzaW9uIDI2ODMyMCkKKysrIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weQkod29y
a2luZyBjb3B5KQpAQCAtODcsNiArODcsMTEgQEAgY2xhc3MgR2l0KFNjbSk6CiAgICAgZGVmIGRl
ZmF1bHRfYnJhbmNoKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBydW4oW3NlbGYuZXhlY3V0YWJs
ZSwgJ3Jldi1wYXJzZScsICctLWFiYnJldi1yZWYnLCAnb3JpZ2luL0hFQUQnXSwgY3dkPXNlbGYu
cGF0aCwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgZW5jb2Rpbmc9J3V0Zi04JykKICAgICAgICAgaWYg
cmVzdWx0LnJldHVybmNvZGU6CisgICAgICAgICAgICBjYW5kaWRhdGVzID0gc2VsZi5icmFuY2hl
cworICAgICAgICAgICAgaWYgJ21hc3RlcicgaW4gY2FuZGlkYXRlczoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ21hc3RlcicKKyAgICAgICAgICAgIGlmICdtYWluJyBpbiBjYW5kaWRhdGVzOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnbWFpbicKICAgICAgICAgICAgIHJldHVybiBOb25lCiAg
ICAgICAgIHJldHVybiAnLycuam9pbihyZXN1bHQuc3Rkb3V0LnJzdHJpcCgpLnNwbGl0KCcvJylb
MTpdKQogCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9sb2NhbC9zY20ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5CShyZXZpc2lvbiAyNjgzMjApCisr
KyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9z
Y20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAgaW1wb3J0IHJlCiBpbXBvcnQg
c3lzCiAKIGZyb20gbG9nZ2luZyBpbXBvcnQgTnVsbEhhbmRsZXIKLWZyb20gd2Via2l0c2NtcHkg
aW1wb3J0IGxvZworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9nLCBDb21taXQKIAogCiBjbGFz
cyBTY20ob2JqZWN0KToKQEAgLTg5LDYgKzg5LDIwIEBAIGNsYXNzIFNjbShvYmplY3QpOgogICAg
IGRlZiByZW1vdGUoc2VsZiwgbmFtZT1Ob25lKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcigpCiAKKyAgICBkZWYgZmluZChzZWxmLCBhcmd1bWVudCk6CisgICAgICAgIGlmIGFy
Z3VtZW50IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoKQorICAgICAg
ICBpZiBhcmd1bWVudCBpbiBzZWxmLmJyYW5jaGVzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
Y29tbWl0KGJyYW5jaD1hcmd1bWVudCkKKworICAgICAgICBwYXJzZWRfY29tbWl0ID0gQ29tbWl0
LnBhcnNlKGFyZ3VtZW50KQorICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoCisgICAgICAgICAg
ICBoYXNoPXBhcnNlZF9jb21taXQuaGFzaCwKKyAgICAgICAgICAgIHJldmlzaW9uPXBhcnNlZF9j
b21taXQucmV2aXNpb24sCisgICAgICAgICAgICBpZGVudGlmaWVyPXBhcnNlZF9jb21taXQuaWRl
bnRpZmllciwKKyAgICAgICAgICAgIGJyYW5jaD1wYXJzZWRfY29tbWl0LmJyYW5jaCwKKyAgICAg
ICAgKQorCiAgICAgZGVmIGNvbW1pdChzZWxmLCBoYXNoPU5vbmUsIHJldmlzaW9uPU5vbmUsIGlk
ZW50aWZpZXI9Tm9uZSwgYnJhbmNoPU5vbmUpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yKCkKIApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvbG9jYWwvc3ZuLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQkocmV2aXNpb24gMjY4MzIw
KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9j
YWwvc3ZuLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGZyb20gd2Via2l0c2Nt
cHkgaW1wb3J0IENvbW1pdCwgQ29udHJpYnUKIAogCiBjbGFzcyBTdm4oU2NtKToKLSAgICBleGVj
dXRhYmxlID0gJy91c3IvbG9jYWwvYmluL3N2bicKKyAgICBleGVjdXRhYmxlID0gJy91c3IvYmlu
L3N2bicgaWYgb3MucGF0aC5leGlzdHMoJy91c3IvYmluL3N2bicpIGVsc2UgJy91c3IvbG9jYWwv
YmluL3N2bicKICAgICBMT0dfUkUgPSByZS5jb21waWxlKHIncig/UDxyZXZpc2lvbj5cZCspIFx8
ICg/UDxlbWFpbD4uKikgXHwgKD9QPGRhdGU+LiopJykKICAgICBDQUNIRV9WRVJTSU9OID0gVmVy
c2lvbigxKQogCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJr
aXRzY21weS9wcm9ncmFtL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vX19pbml0X18ucHkJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvcHJvZ3JhbS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBA
CisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHNjbXB5
LnByb2dyYW0uY29tbWFuZCBpbXBvcnQgQ29tbWFuZAorZnJvbSB3ZWJraXRzY21weS5wcm9ncmFt
LmZpbmQgaW1wb3J0IEZpbmQKKworZnJvbSB3ZWJraXRzY21weS5wcm9ncmFtLm1haW4gaW1wb3J0
IG1haW4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3Byb2dyYW0vY29tbWFuZC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2NvbW1hbmQucHkJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
cHJvZ3JhbS9jb21tYW5kLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHN5cworCisKK2NsYXNzIENv
bW1hbmQob2JqZWN0KToKKyAgICBuYW1lID0gTm9uZQorICAgIGhlbHAgPSBOb25lCisKKyAgICBA
Y2xhc3NtZXRob2QKKyAgICBkZWYgcGFyc2VyKGNscywgcGFyc2VyLCByZXBvc2l0b3J5KToKKyAg
ICAgICAgaWYgY2xzLm5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IoJ0NvbW1hbmQgZG9lcyBub3QgaGF2ZSBhIG5hbWUnKQorICAgICAgICBpZiBjbHMu
aGVscCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiJ3t9
JyBkb2VzIG5vdCBoYXZlIGEgIGhlbHAgbWVzc2FnZSIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAg
ICBkZWYgbWFpbihjbHMsIHJlcG9zaXRvcnkpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdO
byBjb21tYW5kIHNwZWNpZmllZFxuJykKKyAgICAgICAgcmV0dXJuIC0xCkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2ZpbmQucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvcHJvZ3JhbS9maW5kLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vZmluZC5weQkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE1NyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisj
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCitpbXBvcnQganNvbgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKKworZnJvbSBkYXRl
dGltZSBpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBhcmd1bWVudHMK
K2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IENvbW1pdCwgbG9jYWwKK2Zyb20gd2Via2l0c2NtcHku
cHJvZ3JhbSBpbXBvcnQgQ29tbWFuZAorCisKK2NsYXNzIEZpbmQoQ29tbWFuZCk6CisgICAgbmFt
ZSA9ICdmaW5kJworICAgIGhlbHAgPSAnR2l2ZW4gYW4gaWRlbnRpZmllciwgcmV2aXNpb24gb3Ig
aGFzaCwgbm9ybWFsaXplIGFuZCBwcmludCB0aGUgY29tbWl0JworCisgICAgSURFTlRJRklFUiA9
ICdpZGVudGlmaWVyJworICAgIFJFVklTSU9OID0gJ3JldmlzaW9uJworICAgIEhBU0ggPSAnaGFz
aCcKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZXIoY2xzLCBwYXJzZXIsIHJlcG9z
aXRvcnksIGxvZ2dlcnM9Tm9uZSk6CisgICAgICAgIGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAoCisg
ICAgICAgICAgICBwYXJzZXIsCisgICAgICAgICAgICBsb2dnZXJzPWxvZ2dlcnMsCisgICAgICAg
ICAgICBoZWxwPSd7fSBhbW91bnQgb2YgbG9nZ2luZyBhbmQgY29tbWl0IGluZm9ybWF0aW9uIGRp
c3BsYXllZCcKKyAgICAgICAgKS5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAnLS1qc29uJywg
Jy1qJywKKyAgICAgICAgICAgIGhlbHA9J0NvbnZlcnQgdGhlIGNvbW1pdCB0byBhIG1hY2hpbmUt
cmVhZGFibGUgSlNPTiBvYmplY3QnLAorICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywK
KyAgICAgICAgICAgIGRlc3Q9J2pzb24nLAorICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAg
ICAgICAgKQorCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnVHlw
ZScpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICctLWlkZW50aWZp
ZXInLCAnLWknLAorICAgICAgICAgICAgZGVzdD0ncmVmZXJlbmNlJywgZGVmYXVsdD1Ob25lLAor
ICAgICAgICAgICAgaGVscD0nUHJpbnQgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHNwZWNpZmllZCBj
b21taXQnLAorICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PWNscy5JREVO
VElGSUVSLAorICAgICAgICApCisKKyAgICAgICAgaWYgcmVwb3NpdG9yeS5pc19zdm46CisgICAg
ICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAgICAgJy0tcmV2aXNpb24n
LCAnLXInLAorICAgICAgICAgICAgICAgIGRlc3Q9J3JlZmVyZW5jZScsIGRlZmF1bHQ9Tm9uZSwK
KyAgICAgICAgICAgICAgICBoZWxwPSdQcmludCB0aGUgcmV2aXNpb24gb2YgdGhlIHNwZWNpZmll
ZCBjb21taXQnLAorICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD1j
bHMuUkVWSVNJT04sCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgcmVwb3NpdG9yeS5pc19n
aXQ6CisgICAgICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAgICAgJy0t
aGFzaCcsCisgICAgICAgICAgICAgICAgZGVzdD0ncmVmZXJlbmNlJywgZGVmYXVsdD1Ob25lLAor
ICAgICAgICAgICAgICAgIGhlbHA9J1ByaW50IHRoZSBoYXNoIG9mIHRoZSBzcGVjaWZpZWQgY29t
bWl0JywKKyAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9Y2xzLkhB
U0gsCisgICAgICAgICAgICApCisKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAg
ICAgICAgICdhcmd1bWVudCcsIG5hcmdzPSc/JywKKyAgICAgICAgICAgIHR5cGU9c3RyLCBkZWZh
dWx0PU5vbmUsCisgICAgICAgICAgICBoZWxwPSdTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBj
b21taXQgb3IgYnJhbmNoIHRvIGJlIG5vcm1hbGl6ZWQnLAorICAgICAgICApCisKKyAgICBAY2xh
c3NtZXRob2QKKyAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJlcG9zaXRvcnkpOgorICAgICAgICBh
cmd1bWVudF90eXBlID0gTm9uZQorICAgICAgICBpZiBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIo
YXJncy5hcmd1bWVudCk6CisgICAgICAgICAgICBhcmd1bWVudF90eXBlID0gY2xzLklERU5USUZJ
RVIKKyAgICAgICAgZWxpZiBDb21taXQuX3BhcnNlX2hhc2goYXJncy5hcmd1bWVudCk6CisgICAg
ICAgICAgICBhcmd1bWVudF90eXBlID0gY2xzLkhBU0gKKyAgICAgICAgZWxpZiBDb21taXQuX3Bh
cnNlX3JldmlzaW9uKGFyZ3MuYXJndW1lbnQpOgorICAgICAgICAgICAgYXJndW1lbnRfdHlwZSA9
IGNscy5SRVZJU0lPTgorCisgICAgICAgIGNhbmRpZGF0ZXMgPSBbTm9uZSwgY2xzLklERU5USUZJ
RVJdCisgICAgICAgIGlmIHJlcG9zaXRvcnkuaXNfc3ZuOgorICAgICAgICAgICAgY2FuZGlkYXRl
cy5hcHBlbmQoY2xzLlJFVklTSU9OKQorICAgICAgICBpZiByZXBvc2l0b3J5LmlzX2dpdDoKKyAg
ICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGNscy5IQVNIKQorCisgICAgICAgIHJlZmVyZW5j
ZSA9IGFyZ3MucmVmZXJlbmNlCisgICAgICAgIGlmIHJlZmVyZW5jZSBhbmQgYXJncy5qc29uOgor
ICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2Fubm90IHByaW50ICd7fXMnLCB0aGUgdXNl
ciBhbHJlYWR5IGFza2VkIHRvIHByaW50IEpTT05cbiIuZm9ybWF0KHJlZmVyZW5jZSkpCisgICAg
ICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgaWYgcmVmZXJlbmNlIGlzIG5vdCBOb25lIGFuZCBy
ZWZlcmVuY2UgPT0gYXJndW1lbnRfdHlwZToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUo
IkNhbm5vdCBwcmludCAne31zJywgdGhlIHVzZXIgYWxyZWFkeSBzcGVjaWZpZWQgdGhlIGNvbW1p
dCBieSBpdFxuIi5mb3JtYXQocmVmZXJlbmNlKSkKKyAgICAgICAgICAgIHJldHVybiAtMQorCisg
ICAgICAgIGlmIHJlZmVyZW5jZSBhbmQgYXJncy52ZXJib3NlID4gMDoKKyAgICAgICAgICAgIHN5
cy5zdGRlcnIud3JpdGUoIkNhbm5vdCBwcmludCB0aGUgJ3t9JyBzcGVjaWZpY2FsbHksIHZlcmJv
c2l0eSBvdmVycmlkZXMgdGhpcyBvcHRpb25cbiIuZm9ybWF0KHJlZmVyZW5jZSkpCisgICAgICAg
ICAgICByZXR1cm4gLTEKKworICAgICAgICBpZiByZWZlcmVuY2UgaXMgTm9uZSBhbmQgYXJndW1l
bnRfdHlwZSA9PSBjbHMuSURFTlRJRklFUjoKKyAgICAgICAgICAgIHJlZmVyZW5jZSA9IGNscy5S
RVZJU0lPTiBpZiByZXBvc2l0b3J5LmlzX3N2biBlbHNlIGNscy5IQVNICisKKyAgICAgICAgaWYg
cmVmZXJlbmNlIG5vdCBpbiBjYW5kaWRhdGVzOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0
ZSgiQ2Fubm90IHByaW50ICd7fXMnLCB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcmVw
b3NpdG9yeVxuIi5mb3JtYXQocmVmZXJlbmNlKSkKKyAgICAgICAgICAgIHJldHVybiAtMQorCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbW1pdCA9IHJlcG9zaXRvcnkuZmluZChhcmdzLmFy
Z3VtZW50KQorICAgICAgICBleGNlcHQgKGxvY2FsLlNjbS5FeGNlcHRpb24sIFZhbHVlRXJyb3Ip
IGFzIGV4Y2VwdGlvbjoKKyAgICAgICAgICAgICMgVmFsdWVFcnJvcnMgYW5kIFNjbSBleGNlcHRp
b25zIHVzdWFsbHkgY29udGFpbiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gYmUgZGlzcGxheWVkCisg
ICAgICAgICAgICAjIHRvIHRoZSB1c2VyIGFzIGFuIGVycm9yCisgICAgICAgICAgICBzeXMuc3Rk
ZXJyLndyaXRlKHN0cihleGNlcHRpb24pICsgJ1xuJykKKyAgICAgICAgICAgIHJldHVybiAxCisK
KyAgICAgICAgaWYgYXJncy52ZXJib3NlID4gMSBhbmQgbm90IGNvbW1pdC5tZXNzYWdlOgorICAg
ICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIGZpbmQgdGhlICBjb21taXQgbWVz
c2FnZSBmb3IgJ3t9J1xuIi5mb3JtYXQoY29tbWl0KSkKKyAgICAgICAgICAgIHJldHVybiAxCisK
KyAgICAgICAgaWYgYXJncy5qc29uOgorICAgICAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhjb21t
aXQsIGNscz1Db21taXQuRW5jb2RlciwgaW5kZW50PTQpKQorICAgICAgICAgICAgcmV0dXJuIDAK
KworICAgICAgICBpZiBhcmdzLnZlcmJvc2UgPiAwOgorICAgICAgICAgICAgcHJpbnQoJ3tpZGVu
dGlmaWVyfSB8IHtoYXNofXtyZXZpc2lvbn17dGl0bGV9Jy5mb3JtYXQoCisgICAgICAgICAgICAg
ICAgaWRlbnRpZmllcj1jb21taXQsCisgICAgICAgICAgICAgICAgaGFzaD1jb21taXQuaGFzaCBp
ZiBjb21taXQuaGFzaCBlbHNlICcnLAorICAgICAgICAgICAgICAgIHJldmlzaW9uPSd7fXJ7fScu
Zm9ybWF0KCcsICcgaWYgY29tbWl0Lmhhc2ggZWxzZSAnJywgY29tbWl0LnJldmlzaW9uKSBpZiBj
b21taXQucmV2aXNpb24gZWxzZSAnJywKKyAgICAgICAgICAgICAgICB0aXRsZT0nIHwge30nLmZv
cm1hdChjb21taXQubWVzc2FnZS5zcGxpdGxpbmVzKClbMF0pIGlmIGNvbW1pdC5tZXNzYWdlIGVs
c2UgJycKKyAgICAgICAgICAgICkpCisgICAgICAgICAgICBpZiBhcmdzLnZlcmJvc2UgPiAxOgor
ICAgICAgICAgICAgICAgIHByaW50KCdBdXRob3I6IHt9Jy5mb3JtYXQoY29tbWl0LmF1dGhvcikp
CisgICAgICAgICAgICAgICAgcHJpbnQoJ0RhdGU6ICAge30nLmZvcm1hdChkYXRldGltZS5mcm9t
dGltZXN0YW1wKGNvbW1pdC50aW1lc3RhbXApLnN0cmZ0aW1lKCclYSAlYiAlZCAlSDolTTolUyAl
WScpKSkKKyAgICAgICAgICAgICAgICBwcmludCgnJykKKyAgICAgICAgICAgICAgICBmb3IgbGlu
ZSBpbiBjb21taXQubWVzc2FnZS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIHBy
aW50KCcgICAge30nLmZvcm1hdChsaW5lKSkKKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAg
ICAgaWYgcmVmZXJlbmNlIGluIFtOb25lLCBjbHMuSURFTlRJRklFUl06CisgICAgICAgICAgICBw
cmludChjb21taXQpCisgICAgICAgIGVsaWYgcmVmZXJlbmNlID09IGNscy5SRVZJU0lPTjoKKyAg
ICAgICAgICAgIHByaW50KCdye30nLmZvcm1hdChjb21taXQucmV2aXNpb24pKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgcHJpbnQoY29tbWl0Lmhhc2gpCisgICAgICAgIHJldHVybiAwCklu
ZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9n
cmFtL21haW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9tYWluLnB5CShub25leGlzdGVudCkKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vbWFpbi5w
eQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2lu
ZworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgYXJndW1lbnRzLCBsb2cgYXMgd2Via2l0Y29y
ZXB5X2xvZworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsIGxvZworZnJvbSB3ZWJraXRz
Y21weS5wcm9ncmFtIGltcG9ydCBGaW5kCisKKworZGVmIG1haW4oYXJncz1Ob25lLCByZXBvc2l0
b3J5PU5vbmUsIGxvZ2dlcnM9Tm9uZSk6CisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1s
b2dnaW5nLldBUk5JTkcpCisKKyAgICBsb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCksIHdl
YmtpdGNvcmVweV9sb2csICBsb2ddICsgKGxvZ2dlcnMgb3IgW10pCisKKyAgICBpZiBub3QgcmVw
b3NpdG9yeToKKyAgICAgICAgcmVwb3NpdG9yeSA9IGxvY2FsLlNjbS5mcm9tX3BhdGgocGF0aD1v
cy5nZXRjd2QoKSkKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAg
ICAgICBkZXNjcmlwdGlvbj0nQ3VzdG9tIGdpdCB0b29saW5nIGZyb20gdGhlIFdlYktpdCB0ZWFt
IHRvIGludGVyYWN0IHdpdGggYSAnICsKKyAgICAgICAgICAgICAgICAgICAgJ3JlcG9zaXRvcnkg
dXNpbmcgaWRlbnRpZmVycycsCisgICAgKQorICAgIGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAocGFy
c2VyKQorICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoaGVscD0nc3ViLWNv
bW1hbmQgaGVscCcpCisKKyAgICBmb3IgcHJvZ3JhbSBpbiBbRmluZF06CisgICAgICAgIHN1YnBh
cnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcihwcm9ncmFtLm5hbWUsIGhlbHA9cHJvZ3JhbS5o
ZWxwKQorICAgICAgICBzdWJwYXJzZXIuc2V0X2RlZmF1bHRzKG1haW49cHJvZ3JhbS5tYWluKQor
ICAgICAgICBwcm9ncmFtLnBhcnNlcihzdWJwYXJzZXIsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSwg
bG9nZ2Vycz1sb2dnZXJzKQorCisgICAgcGFyc2VkID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1h
cmdzKQorCisgICAgcmV0dXJuIHBhcnNlZC5tYWluKGFyZ3M9cGFyc2VkLCByZXBvc2l0b3J5PXJl
cG9zaXRvcnkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJr
aXRzY21weS90ZXN0L2ZpbmRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9maW5kX3VuaXR0ZXN0LnB5
CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L3Rlc3QvZmluZF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE5MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGpz
b24KK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgT3V0cHV0Q2Fw
dHVyZQorZnJvbSB3ZWJraXRjb3JlcHkubW9ja3MgaW1wb3J0IFRpbWUgYXMgTW9ja1RpbWUKK2Zy
b20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsLCAgcHJvZ3JhbSwgbW9ja3MKKworCitjbGFzcyBU
ZXN0RmluZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcGF0aCA9ICcvbW9jay9yZXBvc2l0b3J5
JworCisgICAgZGVmIHRlc3RfYmFzaWNfZ2l0KHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxv
Y2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENh
cHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJv
Z3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywpLAorICAgICAgICAgICAg
ICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAg
ICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUo
KSwgJzRAbWFpblxuJykKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2dpdF9zdm4oc2VsZik6CisgICAg
ICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3Mu
bG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAg
ICBhcmdzPSgnZmluZCcsKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5m
cm9tX3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICc0QG1haW5cbicpCisKKyAgICBkZWYg
dGVzdF9iYXNpY19zdm4oc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KCksIG1v
Y2tzLmxvY2FsLlN2bihzZWxmLnBhdGgpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNh
cHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisg
ICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9y
eT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnNEB0cnVua1xu
JykKKworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXJfZ2l0KHNlbGYpOgorICAgICAgICB3aXRoIG1v
Y2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91
dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJzJAbWFpbicp
LAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBh
dGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5z
dGRvdXQuZ2V0dmFsdWUoKSwgJ2ZmZjgzYmIyZDkxNzFiNGQ5MTk2ZTk3N2ViMDUwOGZkNTdlN2Ew
OGRcbicpCisKKyAgICBkZWYgdGVzdF9pZGVudGlmaWVyX2dpdF9zdm4oc2VsZik6CisgICAgICAg
IHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2Nr
VGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAn
MkBtYWluJyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRo
KHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNh
cHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnZmZmODNiYjJkOTE3MWI0ZDkxOTZlOTc3ZWIwNTA4
ZmQ1N2U3YTA4ZFxuJykKKworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXJfc3ZuKHNlbGYpOgorICAg
ICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSwg
TW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5k
JywgJzJAdHJ1bmsnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9t
X3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICdyMlxuJykKKworICAgIGRlZiB0ZXN0X2hh
c2goc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCksIG1vY2tz
LmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAg
ICAgYXJncz0oJ2ZpbmQnLCAnM2NkMzJlMzUyNDEwNTY1YmI1NDM4MjFmYmY4NTZhNmQzY2FhZDFj
NCcpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxm
LnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJl
ZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzIuMkBicmFuY2gtYlxuJykKKworICAgIGRlZiB0ZXN0X3Jl
dmlzaW9uX3N2bihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoKSwgbW9ja3Mu
bG9jYWwuU3ZuKHNlbGYucGF0aCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVy
ZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAg
ICAgICAgICAgICBhcmdzPSgnZmluZCcsICdyNScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRv
cnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzIuMkBicmFu
Y2gtYlxuJykKKworICAgIGRlZiB0ZXN0X3JldmlzaW9uX2dpdF9zdm4oc2VsZik6CisgICAgICAg
IHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9j
YWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBh
cmdzPSgnZmluZCcsICdyNScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2Nt
LmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzIuMkBicmFuY2gtYlxuJykKKwor
ICAgIGRlZiB0ZXN0X3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0
KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBP
dXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICczQG1haW4n
LCAnLXYnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgo
c2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2Fw
dHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICczQG1haW4gfCAxYWJlMjViNDQzZTk4NWY5M2I5MGQ4
MzBlNGE3ZTM3MzEzMzZhZjRkLCByNCB8IDR0aCBjb21taXRcbicpCisKKyAgICBkZWYgdGVzdF92
ZXJib3NlX3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYu
cGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRD
YXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHBy
b2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICczQG1haW4nLCAnLXZ2
JyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYu
cGF0aCksCisgICAgICAgICAgICApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAg
ICAgICAgY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICAnJyczQG1haW4g
fCAxYWJlMjViNDQzZTk4NWY5M2I5MGQ4MzBlNGE3ZTM3MzEzMzZhZjRkLCByNCB8IDR0aCBjb21t
aXQKK0F1dGhvcjogSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFwcGxlLmNvbT4KK0RhdGU6ICAg
RnJpIE9jdCAwMiAxMToyMzoyMCAyMDIwCisKKyAgICA0dGggY29tbWl0CisgICAgc3ZuLWlkOiBo
dHRwczovL3N2bi53ZWJraXQub3JncmVwb3NpdG9yeS9yZXBvc2l0b3J5L3RydW5rQDQgMjY4ZjQ1
Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjCisnJycsCisgICAgICAgICkKKworICAgIGRl
ZiB0ZXN0X2pzb24oc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0
aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0
dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dy
YW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICczQG1haW4nLCAnLS1qc29u
JyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYu
cGF0aCksCisgICAgICAgICAgICApKQorCisgICAgICAgIGRlY29kZWQgPSBqc29uLmxvYWRzKGNh
cHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpKQorICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbCgK
KyAgICAgICAgICAgIGRlY29kZWQsIGRpY3QoCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0n
M0BtYWluJywKKyAgICAgICAgICAgICAgICBoYXNoPScxYWJlMjViNDQzZTk4NWY5M2I5MGQ4MzBl
NGE3ZTM3MzEzMzZhZjRkJywKKyAgICAgICAgICAgICAgICByZXZpc2lvbj00LAorICAgICAgICAg
ICAgICAgIGF1dGhvcj0namJlZGFyZEBhcHBsZS5jb20nLAorICAgICAgICAgICAgICAgIHRpbWVz
dGFtcD0xNjAxNjYzMDAwLAorICAgICAgICAgICAgICAgIGJyYW5jaD0nbWFpbicsCisgICAgICAg
ICAgICAgICAgbWVzc2FnZT0nNHRoIGNvbW1pdFxuc3ZuLWlkOiBodHRwczovL3N2bi53ZWJraXQu
b3JncmVwb3NpdG9yeS9yZXBvc2l0b3J5L3RydW5rQDQgMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2Mt
ZDUyNjkxYjRkYmZjJywKKyAgICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9yZXF1ZXN0X2lk
ZW50aWZpZXIoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwg
Z2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJl
KCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0u
bWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICdhMzBjZTg0OTRiZjFhYzI4MDdh
Njk4NDRmNzI2YmU0YTk4NDNjYTU1JywgJy0taWRlbnRpZmllcicpLAorICAgICAgICAgICAgICAg
IHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAg
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwg
JzIuMUBicmFuY2gtYVxuJykKKworICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBh
dGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2Fw
dHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgcHJv
Z3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJzIuMUBicmFuY2gtYScs
ICctLWlkZW50aWZpZXInKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5m
cm9tX3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoY2FwdHVyZWQuc3RkZXJyLmdldHZhbHVlKCksICJDYW5ub3QgcHJpbnQgJ2lkZW50aWZp
ZXJzJywgdGhlIHVzZXIgYWxyZWFkeSBzcGVjaWZpZWQgdGhlIGNvbW1pdCBieSBpdFxuIikKKwor
ICAgIGRlZiB0ZXN0X3JlcXVlc3RfaGFzaChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2Nh
bC5HaXQoc2VsZi5wYXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1Rp
bWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJ3Iz
JywgJy0taGFzaCcpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21f
cGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJ2EzMGNlODQ5NGJmMWFjMjgwN2E2OTg0NGY3
MjZiZTRhOTg0M2NhNTVcbicpCisKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5w
YXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENh
cHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTEsIHBy
b2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICdhMzBjZTg0OTRiZjFh
YzI4MDdhNjk4NDRmNzI2YmU0YTk4NDNjYTU1JywgJy0taGFzaCcpLAorICAgICAgICAgICAgICAg
IHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAg
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRlcnIuZ2V0dmFsdWUoKSwg
IkNhbm5vdCBwcmludCAnaGFzaHMnLCB0aGUgdXNlciBhbHJlYWR5IHNwZWNpZmllZCB0aGUgY29t
bWl0IGJ5IGl0XG4iKQorCisgICAgZGVmIHRlc3RfcmVxdWVzdF9yZXZpc2lvbihzZWxmKToKKyAg
ICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nr
cy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAg
ICAgIGFyZ3M9KCdmaW5kJywgJ2EzMGNlODQ5NGJmMWFjMjgwN2E2OTg0NGY3MjZiZTRhOTg0M2Nh
NTUnLCAnLS1yZXZpc2lvbicpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2Nt
LmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJ3IzXG4nKQorCisgICAgICAgIHdp
dGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwu
U3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKC0xLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJn
cz0oJ2ZpbmQnLCAncjMnLCAnLS1yZXZpc2lvbicpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRv
cnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRlcnIuZ2V0dmFsdWUoKSwgIkNhbm5vdCBw
cmludCAncmV2aXNpb25zJywgdGhlIHVzZXIgYWxyZWFkeSBzcGVjaWZpZWQgdGhlIGNvbW1pdCBi
eSBpdFxuIikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411150</attachid>
            <date>2020-10-12 13:35:42 -0700</date>
            <delta_ts>2020-10-12 16:14:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217534-20201012133541.patch</filename>
            <type>text/plain</type>
            <size>38082</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODM2NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDUzIEBACisyMDIwLTEwLTEyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBgZ2l0LXdlYmtpdCBmaW5kYAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3NTM0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS83MDE1MjQzMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvZ2l0LXdlYmtpdDogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5w
eTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvYXJndW1lbnRzLnB5OgorICAgICAgICAoTm9BY3Rpb24uX19jYWxsX18p
OgorICAgICAgICAoQ291bnRBY3Rpb24pOiBDcmVhdGUgYW4gYWN0aW9uIHRvIGluY3JlbWVudCBv
ciBkZWNyZW1lbnQgYSB2YXJpYWJsZSBieSBhIHZhbHVlLgorICAgICAgICAoQ2FsbGJhY2tBY3Rp
b24pOiBDcmVhdGUgYW4gYWN0aW9uIHdoaWNoIHdpbGwgdHJpZ2dlciBhIGNhbGxiYWNrIHdoZW4g
c2V0LgorICAgICAgICAoTG9nZ2luZ0dyb3VwKTogQ3JlYXRlIGEgZ3JvdXAgd2hpY2ggYWxsb3dz
IHRoZSB1c2VyIHRvIGNoYW5nZSBsb2dnaW5nIGJlaGF2aW9yLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQ6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5OiBBZGQgd2Via2l0c2NtcHkucHJvZ3Jh
bSBhbmQgZ2l0LXdlYmtpdC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weToKKyAgICAg
ICAgKEdpdC5kZWZhdWx0X2JyYW5jaCk6IEZhbGxiYWNrIHRvICdtYXN0ZXInIG9yICdtYWluJyBp
ZiB0aGUgcmVtb3RlIGlzbid0IGF2YWlsYWJsZS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zY20ucHk6CisgICAgICAgIChTY20uZmlu
ZCk6IEFkZCBmdW5jdGlvbiB0byBjb252ZXJ0IGdlbmVyaWMgc3RyaW5nIGFyZ3VtZW50cyB0byBh
IGNvbW1pdCwgYW5kIHRoZW4gZmluZCB0aGF0IGNvbW1pdCBpbgorICAgICAgICB0aGUgcmVwb3Np
dG9yeS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9sb2NhbC9zdm4ucHk6CisgICAgICAgIChTdm4pOiBTdXBwb3J0IGEgZmV3IGRpZmZlcmVudCBT
Vk4gYmluYXJ5IHBhdGhzLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3Byb2dyYW06IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vX19pbml0X18ucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0v
Y29tbWFuZC5weTogQWRkZWQuCisgICAgICAgIChDb21tYW5kKTogQmFzZSBjbGFzcyBmb3IgYWxs
IGNvbW1hbmRzLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Byb2dyYW0vZmluZC5weTogQWRkZWQuCisgICAgICAgIChGaW5kKToKKyAgICAgICAg
KEZpbmQucGFyc2VyKTogQ29uZmlndXJlIHBhcnNlciBmb3IgJ2ZpbmQnIHN1Yi1wcm9ncmFtLgor
ICAgICAgICAoRmluZC5tYWluKTogR2l2ZW4gYW4gaWRlbnRpZmllciwgcmV2aXNpb24sIGhhc2gg
b3IgYnJhbmNoIG5hbWUsIGZpbmQgYW5kIHByaW50IHRoZSBtYXRjaGluZyBjb21taXQgZnJvbQor
ICAgICAgICB0aGUgcmVwb3NpdG9yeSBpbiBzY29wZS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL21haW4ucHk6IEFkZGVkLgorICAg
ICAgICAobWFpbik6IEVudHJ5IHBvaW50IHRvIGdpdC08cHJvamVjdD4gc2NyaXB0cy4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2ZpbmRf
dW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAoVGVzdEZpbmQpOgorICAgICAgICAoVGVzdEZp
bmQudGVzdF9iYXNpY19naXQpOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9iYXNpY19naXRfc3Zu
KToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfYmFzaWNfc3ZuKToKKyAgICAgICAgKFRlc3RGaW5k
LnRlc3RfaWRlbnRpZmllcl9naXQpOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9pZGVudGlmaWVy
X2dpdF9zdm4pOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9pZGVudGlmaWVyX3N2bik6CisgICAg
ICAgIChUZXN0RmluZC50ZXN0X2hhc2gpOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9yZXZpc2lv
bl9zdm4pOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9yZXZpc2lvbl9naXRfc3ZuKToKKyAgICAg
ICAgKFRlc3RGaW5kLnRlc3RfdmVyYm9zZSk6CisgICAgICAgIChUZXN0RmluZC50ZXN0X3ZlcmJv
c2VfdmVyYm9zZSk6CisKIDIwMjAtMTAtMTIgIEx1bWluZyBZaW4gIDxsdW1pbmdfeWluQGFwcGxl
LmNvbT4KIAogICAgICAgICBbbWFjT1NdIFdvcmthcm91bmQgZm9yIE1BQ19PU19YX1ZFUlNJT05f
TUFKT1IgaW5jb3JyZWN0bHkgaW5jbHVkaW5nIG1pbm9yIHZlcnNpb24gd2hlbiBidWlsZGluZyAK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvZ2l0LXdlYmtpdAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2dpdC13ZWJraXQJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
CisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0
IHdlYmtpdHB5CitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsLCBw
cm9ncmFtCisKK3N5cy5leGl0KHByb2dyYW0ubWFpbihyZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9t
X3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpKQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBUb29scy9TY3JpcHRzL2dpdC13ZWJraXQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFi
bGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4
OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5p
dF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI2ODM2NSkKKysrIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgZnJvbSB3ZWJraXRjb3JlcHkudGltZW91dCBp
bXBvcnQgVGltZW91dAogZnJvbSB3ZWJraXRjb3JlcHkuc3VicHJvY2Vzc191dGlscyBpbXBvcnQg
VGltZW91dEV4cGlyZWQsIENvbXBsZXRlZFByb2Nlc3MsIHJ1bgogZnJvbSB3ZWJraXRjb3JlcHku
b3V0cHV0X2NhcHR1cmUgaW1wb3J0IExvZ2dlckNhcHR1cmUsIE91dHB1dENhcHR1cmUsIE91dHB1
dER1cGxpY2F0ZQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCA0LCAxMykKK3ZlcnNpb24gPSBWZXJz
aW9uKDAsIDQsIDE0KQogCiBmcm9tIHdlYmtpdGNvcmVweS5hdXRvaW5zdGFsbCBpbXBvcnQgUGFj
a2FnZSwgQXV0b0luc3RhbGwKIGlmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CkluZGV4OiBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L2FyZ3VtZW50
cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkv
d2Via2l0Y29yZXB5L2FyZ3VtZW50cy5weQkocmV2aXNpb24gMjY4MzY1KQorKysgVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9hcmd1bWVudHMucHkJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDkgQEAKICMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBhcmdwYXJzZQor
aW1wb3J0IGxvZ2dpbmcKKworZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IGxvZwogCiAKIGNsYXNz
IE5vQWN0aW9uKGFyZ3BhcnNlLkFjdGlvbik6CkBAIC0yOSwzICszMiw1NyBAQCBjbGFzcyBOb0Fj
dGlvbihhcmdwYXJzZS5BY3Rpb24pOgogCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwg
bmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CiAgICAgICAgIHNldGF0dHIo
bmFtZXNwYWNlLCBzZWxmLmRlc3QsIEZhbHNlIGlmIG9wdGlvbl9zdHJpbmcuc3RhcnRzd2l0aCgn
LS1ubycpIGVsc2UgVHJ1ZSkKKworCitkZWYgQ291bnRBY3Rpb24odmFsdWU9MSk6CisgICAgY2xh
c3MgQWN0aW9uKGFyZ3BhcnNlLkFjdGlvbik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBv
cHRpb25fc3RyaW5ncywgZGVzdCwgKiprd2FyZ3MpOgorICAgICAgICAgICAgc3VwZXIoQWN0aW9u
LCBzZWxmKS5fX2luaXRfXyhvcHRpb25fc3RyaW5ncywgZGVzdCwgbmFyZ3M9MCwgKiprd2FyZ3Mp
CisKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMs
IG9wdGlvbl9zdHJpbmcpOgorICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVz
dCwgZ2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCkgKyB2YWx1ZSkKKworICAgIHJldHVybiBB
Y3Rpb24KKworCitkZWYgQ2FsbGJhY2tBY3Rpb24oYWN0aW9uLCBjYWxsYmFjaz1sYW1iZGEgbmFt
ZXNwYWNlOiBOb25lKToKKyAgICBjbGFzcyBBY3Rpb24oYWN0aW9uKToKKyAgICAgICAgZGVmIF9f
Y2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmdzKToK
KyAgICAgICAgICAgIHN1cGVyKEFjdGlvbiwgc2VsZikuX19jYWxsX18ocGFyc2VyLCBuYW1lc3Bh
Y2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZ3MpCisgICAgICAgICAgICBjYWxsYmFjayhuYW1lc3Bh
Y2UpCisKKyAgICByZXR1cm4gQWN0aW9uCisKKworZGVmIExvZ2dpbmdHcm91cChwYXJzZXIsIGxv
Z2dlcnM9Tm9uZSwgZGVmYXVsdD1sb2dnaW5nLldBUk5JTkcsIGhlbHA9J3t9IGFtb3VudCBvZiBs
b2dnaW5nJyk6CisgICAgaWYgbm90IGlzaW5zdGFuY2UocGFyc2VyLCBhcmdwYXJzZS5Bcmd1bWVu
dFBhcnNlcik6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Byb3ZpZGVkIHBhcnNlciBpcyBu
b3QgYSB7fScuZm9ybWF0KHR5cGUoYXJncGFyc2UuQXJndW1lbnRQYXJzZXIpKSkKKworICAgIGlm
IG5vdCBsb2dnZXJzOgorICAgICAgICBsb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCksIGxv
Z10KKyAgICBmb3IgbG9nZ2VyIGluIGxvZ2dlcnM6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChk
ZWZhdWx0KQorCisgICAgZGVmIHZlcmJvc2VfY2FsbGJhY2sobmFtZXNwYWNlKToKKyAgICAgICAg
dmVyYm9zaXR5ID0gZ2V0YXR0cihuYW1lc3BhY2UsICd2ZXJib3NlJykKKyAgICAgICAgbG9nX2xl
dmVsID0gZGVmYXVsdCAtIHZlcmJvc2l0eSAqIDEwCisKKyAgICAgICAgc2V0YXR0cihuYW1lc3Bh
Y2UsICdsb2dfbGV2ZWwnLCBsb2dfbGV2ZWwpCisKKyAgICAgICAgZm9yIGxvZ2dlciBpbiBsb2dn
ZXJzOgorICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ19sZXZlbCkKKworICAgIGdyb3Vw
ID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnTG9nZ2luZycpCisgICAgZ3JvdXAuYWRkX2Fy
Z3VtZW50KAorICAgICAgICAnLS12ZXJib3NlJywgJy12JywKKyAgICAgICAgZGVzdD0ndmVyYm9z
ZScsIGRlZmF1bHQ9MCwKKyAgICAgICAgaGVscD1oZWxwLmZvcm1hdCgnSW5jcmVhc2UnKSwKKyAg
ICAgICAgYWN0aW9uPUNhbGxiYWNrQWN0aW9uKENvdW50QWN0aW9uKHZhbHVlPTEpLCBjYWxsYmFj
az12ZXJib3NlX2NhbGxiYWNrKSwKKyAgICApCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KAorICAg
ICAgICAnLS1xdWlldCcsICctcScsCisgICAgICAgIGRlc3Q9J3ZlcmJvc2UnLCBkZWZhdWx0PTAs
CisgICAgICAgIGhlbHA9aGVscC5mb3JtYXQoJ0RlY3JlYXNlJyksCisgICAgICAgIGFjdGlvbj1D
YWxsYmFja0FjdGlvbihDb3VudEFjdGlvbih2YWx1ZT0tMSksIGNhbGxiYWNrPXZlcmJvc2VfY2Fs
bGJhY2spLAorICAgICkKKyAgICByZXR1cm4gZ3JvdXAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvZ2l0LXdlYmtpdAkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9naXQtd2Via2l0CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKKworZnJvbSB3ZWJraXRzY21weSBp
bXBvcnQgcHJvZ3JhbQorCisKK3N5cy5leGl0KHByb2dyYW0ubWFpbigpKQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvZ2l0LXdlYmtpdApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3NldHVwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3NldHVwLnB5CShyZXZpc2lvbiAyNjgzNjUpCisrKyBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQkod29ya2luZyBjb3B5KQpAQCAtNTMsOCAr
NTMsMTAgQEAgc2V0dXAoCiAgICAgICAgICd3ZWJraXRzY21weS5sb2NhbCcsCiAgICAgICAgICd3
ZWJraXRzY21weS5tb2NrcycsCiAgICAgICAgICd3ZWJraXRzY21weS5tb2Nrcy5sb2NhbCcsCisg
ICAgICAgICd3ZWJraXRzY21weS5wcm9ncmFtJywKICAgICAgICAgJ3dlYmtpdHNjbXB5LnRlc3Qn
LAogICAgIF0sCisgICAgc2NyaXB0cz1bJ2dpdC13ZWJraXQnXSwKICAgICBpbnN0YWxsX3JlcXVp
cmVzPVsncHl0aG9uLWRhdGV1dGlsJywgJ3dlYmtpdGNvcmVweSddLAogICAgIGluY2x1ZGVfcGFj
a2FnZV9kYXRhPVRydWUsCiAgICAgemlwX3NhZmU9RmFsc2UsCkluZGV4OiBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2lu
aXRfXy5weQkocmV2aXNpb24gMjY4MzY1KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAiUGxlYXNlIGluc3RhbGwgd2Vi
a2l0Y29yZXB5IHdpdGggYHBpcCBpbnN0YWxsIHdlYmtpdGNvcmVweSAtLWV4dHJhLWluZGV4LXVy
bCA8cGFja2FnZSBpbmRleCBVUkw+YCIKICAgICApCiAKLXZlcnNpb24gPSBWZXJzaW9uKDAsIDEs
IDMpCit2ZXJzaW9uID0gVmVyc2lvbigwLCAyLCAwKQogCiBBdXRvSW5zdGFsbC5yZWdpc3RlcihQ
YWNrYWdlKCdkYXRldXRpbCcsIFZlcnNpb24oMiwgOCwgMSksIHB5cGlfbmFtZT0ncHl0aG9uLWRh
dGV1dGlsJykpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L2xvY2FsL2dpdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9naXQucHkJKHJldmlzaW9uIDI2ODM2
NSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xv
Y2FsL2dpdC5weQkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsMTEgQEAgY2xhc3MgR2l0KFNj
bSk6CiAgICAgZGVmIGRlZmF1bHRfYnJhbmNoKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBydW4o
W3NlbGYuZXhlY3V0YWJsZSwgJ3Jldi1wYXJzZScsICctLWFiYnJldi1yZWYnLCAnb3JpZ2luL0hF
QUQnXSwgY3dkPXNlbGYucGF0aCwgY2FwdHVyZV9vdXRwdXQ9VHJ1ZSwgZW5jb2Rpbmc9J3V0Zi04
JykKICAgICAgICAgaWYgcmVzdWx0LnJldHVybmNvZGU6CisgICAgICAgICAgICBjYW5kaWRhdGVz
ID0gc2VsZi5icmFuY2hlcworICAgICAgICAgICAgaWYgJ21hc3RlcicgaW4gY2FuZGlkYXRlczoK
KyAgICAgICAgICAgICAgICByZXR1cm4gJ21hc3RlcicKKyAgICAgICAgICAgIGlmICdtYWluJyBp
biBjYW5kaWRhdGVzOgorICAgICAgICAgICAgICAgIHJldHVybiAnbWFpbicKICAgICAgICAgICAg
IHJldHVybiBOb25lCiAgICAgICAgIHJldHVybiAnLycuam9pbihyZXN1bHQuc3Rkb3V0LnJzdHJp
cCgpLnNwbGl0KCcvJylbMTpdKQogCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zY20ucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5CShyZXZp
c2lvbiAyNjgzNjUpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJr
aXRzY21weS9sb2NhbC9zY20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEwICsyMywxMSBAQAog
CiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCitpbXBvcnQgc2l4CiBpbXBvcnQgc3lzCiAKIGZy
b20gbG9nZ2luZyBpbXBvcnQgTnVsbEhhbmRsZXIKLWZyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxv
ZworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9nLCBDb21taXQKIAogCiBjbGFzcyBTY20ob2Jq
ZWN0KToKQEAgLTM3LDYgKzM4LDcgQEAgY2xhc3MgU2NtKG9iamVjdCk6CiAgICAgIyB0aGUgZm9s
bG93aW5nIGlkaW9tcyBzZWVtIGNvbW1vbiBlbm91Z2ggdG8gYmUgc2hhcmVkLgogICAgIERFVl9C
UkFOQ0hFUyA9IHJlLmNvbXBpbGUocicuKlsoZW5nKShkZXYpKGJ1ZyldLy4rJykKICAgICBQUk9E
X0JSQU5DSEVTID0gcmUuY29tcGlsZShyJ1xTKy1bXGQrXC5dKy1icmFuY2gnKQorICAgIEhFQURf
UkUgPSByZS5jb21waWxlKHInSEVBRCh+XGQqKSonKQogCiAgICAgZXhlY3V0YWJsZSA9IE5vbmUK
IApAQCAtODksNiArOTEsMzMgQEAgY2xhc3MgU2NtKG9iamVjdCk6CiAgICAgZGVmIHJlbW90ZShz
ZWxmLCBuYW1lPU5vbmUpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKIAor
ICAgIGRlZiBmaW5kKHNlbGYsIGFyZ3VtZW50KToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
YXJndW1lbnQsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigiRXhwZWN0ZWQgJ2FyZ3VtZW50JyB0byBiZSBhIHN0cmluZywgbm90ICd7fSciLmZvcm1hdCh0
eXBlKGFyZ3VtZW50KSkpCisKKyAgICAgICAgaWYgc2VsZi5IRUFEX1JFLm1hdGNoKGFyZ3VtZW50
KToKKyAgICAgICAgICAgIGhlYWQgPSBzZWxmLmNvbW1pdCgpCisgICAgICAgICAgICBpZiAnficg
bm90IGluIGFyZ3VtZW50OgorICAgICAgICAgICAgICAgIHJldHVybiBoZWFkCisgICAgICAgICAg
ICBjb3VudCA9IDAKKyAgICAgICAgICAgIGZvciBzIGluIGFyZ3VtZW50LnNwbGl0KCd+JylbMTpd
OgorICAgICAgICAgICAgICAgIGNvdW50ICs9IGludChzKSBpZiBzIGVsc2UgMQorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuY29tbWl0KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9aGVhZC5p
ZGVudGlmaWVyIC0gY291bnQsCisgICAgICAgICAgICAgICAgYnJhbmNoPWhlYWQuYnJhbmNoLAor
ICAgICAgICAgICAgKQorCisgICAgICAgIGlmIGFyZ3VtZW50IGluIHNlbGYuYnJhbmNoZXM6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoYnJhbmNoPWFyZ3VtZW50KQorCisgICAgICAg
IHBhcnNlZF9jb21taXQgPSBDb21taXQucGFyc2UoYXJndW1lbnQpCisgICAgICAgIHJldHVybiBz
ZWxmLmNvbW1pdCgKKyAgICAgICAgICAgIGhhc2g9cGFyc2VkX2NvbW1pdC5oYXNoLAorICAgICAg
ICAgICAgcmV2aXNpb249cGFyc2VkX2NvbW1pdC5yZXZpc2lvbiwKKyAgICAgICAgICAgIGlkZW50
aWZpZXI9cGFyc2VkX2NvbW1pdC5pZGVudGlmaWVyLAorICAgICAgICAgICAgYnJhbmNoPXBhcnNl
ZF9jb21taXQuYnJhbmNoLAorICAgICAgICApCisKICAgICBkZWYgY29tbWl0KHNlbGYsIGhhc2g9
Tm9uZSwgcmV2aXNpb249Tm9uZSwgaWRlbnRpZmllcj1Ob25lLCBicmFuY2g9Tm9uZSk6CiAgICAg
ICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQogCkluZGV4OiBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zdm4ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwv
c3ZuLnB5CShyZXZpc2lvbiAyNjgzNjUpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zdm4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAgZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCBDb250cmlidQogCiAKIGNs
YXNzIFN2bihTY20pOgotICAgIGV4ZWN1dGFibGUgPSAnL3Vzci9sb2NhbC9iaW4vc3ZuJworICAg
IGV4ZWN1dGFibGUgPSAnL3Vzci9iaW4vc3ZuJyBpZiBvcy5wYXRoLmV4aXN0cygnL3Vzci9iaW4v
c3ZuJykgZWxzZSAnL3Vzci9sb2NhbC9iaW4vc3ZuJwogICAgIExPR19SRSA9IHJlLmNvbXBpbGUo
cidyKD9QPHJldmlzaW9uPlxkKykgXHwgKD9QPGVtYWlsPi4qKSBcfCAoP1A8ZGF0ZT4uKiknKQog
ICAgIENBQ0hFX1ZFUlNJT04gPSBWZXJzaW9uKDEpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vX19pbml0X18ucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
cHJvZ3JhbS9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL19faW5pdF9fLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2Zyb20gd2Via2l0c2NtcHkucHJvZ3JhbS5jb21tYW5kIGltcG9ydCBDb21tYW5kCitm
cm9tIHdlYmtpdHNjbXB5LnByb2dyYW0uZmluZCBpbXBvcnQgRmluZAorCitmcm9tIHdlYmtpdHNj
bXB5LnByb2dyYW0ubWFpbiBpbXBvcnQgbWFpbgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jb21tYW5kLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dy
YW0vY29tbWFuZC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2NvbW1hbmQucHkJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgc3lzCisKKworY2xhc3MgQ29tbWFuZChvYmplY3QpOgorICAgIG5hbWUgPSBOb25lCisg
ICAgaGVscCA9IE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZXIoY2xzLCBw
YXJzZXIsIHJlcG9zaXRvcnkpOgorICAgICAgICBpZiBjbHMubmFtZSBpcyBOb25lOgorICAgICAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignQ29tbWFuZCBkb2VzIG5vdCBoYXZlIGEg
bmFtZScpCisgICAgICAgIGlmIGNscy5oZWxwIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yKCIne30nIGRvZXMgbm90IGhhdmUgYSAgaGVscCBtZXNzYWdlIikK
KworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWluKGNscywgcmVwb3NpdG9yeSk6CisgICAg
ICAgIHN5cy5zdGRlcnIud3JpdGUoJ05vIGNvbW1hbmQgc3BlY2lmaWVkXG4nKQorICAgICAgICBy
ZXR1cm4gLTEKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Byb2dyYW0vZmluZC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2ZpbmQucHkJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJv
Z3JhbS9maW5kLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU3IEBACisjIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHN5cworCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorZnJvbSB3ZWJraXRj
b3JlcHkgaW1wb3J0IGFyZ3VtZW50cworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCBs
b2NhbAorZnJvbSB3ZWJraXRzY21weS5wcm9ncmFtIGltcG9ydCBDb21tYW5kCisKKworY2xhc3Mg
RmluZChDb21tYW5kKToKKyAgICBuYW1lID0gJ2ZpbmQnCisgICAgaGVscCA9ICdHaXZlbiBhbiBp
ZGVudGlmaWVyLCByZXZpc2lvbiBvciBoYXNoLCBub3JtYWxpemUgYW5kIHByaW50IHRoZSBjb21t
aXQnCisKKyAgICBJREVOVElGSUVSID0gJ2lkZW50aWZpZXInCisgICAgUkVWSVNJT04gPSAncmV2
aXNpb24nCisgICAgSEFTSCA9ICdoYXNoJworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBh
cnNlcihjbHMsIHBhcnNlciwgcmVwb3NpdG9yeSwgbG9nZ2Vycz1Ob25lKToKKyAgICAgICAgYXJn
dW1lbnRzLkxvZ2dpbmdHcm91cCgKKyAgICAgICAgICAgIHBhcnNlciwKKyAgICAgICAgICAgIGxv
Z2dlcnM9bG9nZ2VycywKKyAgICAgICAgICAgIGhlbHA9J3t9IGFtb3VudCBvZiBsb2dnaW5nIGFu
ZCBjb21taXQgaW5mb3JtYXRpb24gZGlzcGxheWVkJworICAgICAgICApLmFkZF9hcmd1bWVudCgK
KyAgICAgICAgICAgICctLWpzb24nLCAnLWonLAorICAgICAgICAgICAgaGVscD0nQ29udmVydCB0
aGUgY29tbWl0IHRvIGEgbWFjaGluZS1yZWFkYWJsZSBKU09OIG9iamVjdCcsCisgICAgICAgICAg
ICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgZGVzdD0nanNvbicsCisgICAgICAg
ICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICApCisKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIu
YWRkX2FyZ3VtZW50X2dyb3VwKCdUeXBlJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KAor
ICAgICAgICAgICAgJy0taWRlbnRpZmllcicsICctaScsCisgICAgICAgICAgICBkZXN0PSdyZWZl
cmVuY2UnLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICBoZWxwPSdQcmludCB0aGUgaWRlbnRp
ZmllciBvZiB0aGUgc3BlY2lmaWVkIGNvbW1pdCcsCisgICAgICAgICAgICBhY3Rpb249J3N0b3Jl
X2NvbnN0JywgY29uc3Q9Y2xzLklERU5USUZJRVIsCisgICAgICAgICkKKworICAgICAgICBpZiBy
ZXBvc2l0b3J5LmlzX3N2bjoKKyAgICAgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAgICAg
ICAgICAgICAgICAnLS1yZXZpc2lvbicsICctcicsCisgICAgICAgICAgICAgICAgZGVzdD0ncmVm
ZXJlbmNlJywgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgIGhlbHA9J1ByaW50IHRoZSBy
ZXZpc2lvbiBvZiB0aGUgc3BlY2lmaWVkIGNvbW1pdCcsCisgICAgICAgICAgICAgICAgYWN0aW9u
PSdzdG9yZV9jb25zdCcsIGNvbnN0PWNscy5SRVZJU0lPTiwKKyAgICAgICAgICAgICkKKworICAg
ICAgICBpZiByZXBvc2l0b3J5LmlzX2dpdDoKKyAgICAgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVu
dCgKKyAgICAgICAgICAgICAgICAnLS1oYXNoJywKKyAgICAgICAgICAgICAgICBkZXN0PSdyZWZl
cmVuY2UnLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgaGVscD0nUHJpbnQgdGhlIGhh
c2ggb2YgdGhlIHNwZWNpZmllZCBjb21taXQnLAorICAgICAgICAgICAgICAgIGFjdGlvbj0nc3Rv
cmVfY29uc3QnLCBjb25zdD1jbHMuSEFTSCwKKyAgICAgICAgICAgICkKKworICAgICAgICBwYXJz
ZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgJ2FyZ3VtZW50JywgbmFyZ3M9MSwKKyAgICAg
ICAgICAgIHR5cGU9c3RyLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICBoZWxwPSdTdHJpbmcg
cmVwcmVzZW50YXRpb24gb2YgYSBjb21taXQgb3IgYnJhbmNoIHRvIGJlIG5vcm1hbGl6ZWQnLAor
ICAgICAgICApCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJl
cG9zaXRvcnkpOgorICAgICAgICBhcmd1bWVudF90eXBlID0gTm9uZQorICAgICAgICBpZiBDb21t
aXQuX3BhcnNlX2lkZW50aWZpZXIoYXJncy5hcmd1bWVudFswXSk6CisgICAgICAgICAgICBhcmd1
bWVudF90eXBlID0gY2xzLklERU5USUZJRVIKKyAgICAgICAgZWxpZiBDb21taXQuX3BhcnNlX2hh
c2goYXJncy5hcmd1bWVudFswXSk6CisgICAgICAgICAgICBhcmd1bWVudF90eXBlID0gY2xzLkhB
U0gKKyAgICAgICAgZWxpZiBDb21taXQuX3BhcnNlX3JldmlzaW9uKGFyZ3MuYXJndW1lbnRbMF0p
OgorICAgICAgICAgICAgYXJndW1lbnRfdHlwZSA9IGNscy5SRVZJU0lPTgorCisgICAgICAgIGNh
bmRpZGF0ZXMgPSBbTm9uZSwgY2xzLklERU5USUZJRVJdCisgICAgICAgIGlmIHJlcG9zaXRvcnku
aXNfc3ZuOgorICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoY2xzLlJFVklTSU9OKQorICAg
ICAgICBpZiByZXBvc2l0b3J5LmlzX2dpdDoKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5k
KGNscy5IQVNIKQorCisgICAgICAgIHJlZmVyZW5jZSA9IGFyZ3MucmVmZXJlbmNlCisgICAgICAg
IGlmIHJlZmVyZW5jZSBhbmQgYXJncy5qc29uOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0
ZSgiQ2Fubm90IHByaW50ICd7fXMnLCB0aGUgdXNlciBhbHJlYWR5IGFza2VkIHRvIHByaW50IEpT
T05cbiIuZm9ybWF0KHJlZmVyZW5jZSkpCisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAg
aWYgcmVmZXJlbmNlIGlzIG5vdCBOb25lIGFuZCByZWZlcmVuY2UgPT0gYXJndW1lbnRfdHlwZToK
KyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbm5vdCBwcmludCAne31zJywgdGhlIHVz
ZXIgYWxyZWFkeSBzcGVjaWZpZWQgdGhlIGNvbW1pdCBieSBpdFxuIi5mb3JtYXQocmVmZXJlbmNl
KSkKKyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgIGlmIHJlZmVyZW5jZSBhbmQgYXJn
cy52ZXJib3NlID4gMDoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbm5vdCBwcmlu
dCB0aGUgJ3t9JyBzcGVjaWZpY2FsbHksIHZlcmJvc2l0eSBvdmVycmlkZXMgdGhpcyBvcHRpb25c
biIuZm9ybWF0KHJlZmVyZW5jZSkpCisgICAgICAgICAgICByZXR1cm4gLTEKKworICAgICAgICBp
ZiByZWZlcmVuY2UgaXMgTm9uZSBhbmQgYXJndW1lbnRfdHlwZSA9PSBjbHMuSURFTlRJRklFUjoK
KyAgICAgICAgICAgIHJlZmVyZW5jZSA9IGNscy5SRVZJU0lPTiBpZiByZXBvc2l0b3J5LmlzX3N2
biBlbHNlIGNscy5IQVNICisKKyAgICAgICAgaWYgcmVmZXJlbmNlIG5vdCBpbiBjYW5kaWRhdGVz
OgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2Fubm90IHByaW50ICd7fXMnLCB0aGV5
IGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcmVwb3NpdG9yeVxuIi5mb3JtYXQocmVmZXJlbmNl
KSkKKyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNv
bW1pdCA9IHJlcG9zaXRvcnkuZmluZChhcmdzLmFyZ3VtZW50WzBdKQorICAgICAgICBleGNlcHQg
KGxvY2FsLlNjbS5FeGNlcHRpb24sIFZhbHVlRXJyb3IpIGFzIGV4Y2VwdGlvbjoKKyAgICAgICAg
ICAgICMgVmFsdWVFcnJvcnMgYW5kIFNjbSBleGNlcHRpb25zIHVzdWFsbHkgY29udGFpbiBlbm91
Z2ggaW5mb3JtYXRpb24gdG8gYmUgZGlzcGxheWVkCisgICAgICAgICAgICAjIHRvIHRoZSB1c2Vy
IGFzIGFuIGVycm9yCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHN0cihleGNlcHRpb24p
ICsgJ1xuJykKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgaWYgYXJncy52ZXJib3Nl
ID4gMSBhbmQgbm90IGNvbW1pdC5tZXNzYWdlOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0
ZSgiRmFpbGVkIHRvIGZpbmQgdGhlICBjb21taXQgbWVzc2FnZSBmb3IgJ3t9J1xuIi5mb3JtYXQo
Y29tbWl0KSkKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgaWYgYXJncy5qc29uOgor
ICAgICAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhjb21taXQsIGNscz1Db21taXQuRW5jb2Rlciwg
aW5kZW50PTQpKQorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgICAgICBpZiBhcmdzLnZlcmJv
c2UgPiAwOgorICAgICAgICAgICAgcHJpbnQoJ3tpZGVudGlmaWVyfSB8IHtoYXNofXtyZXZpc2lv
bn17dGl0bGV9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1jb21taXQsCisg
ICAgICAgICAgICAgICAgaGFzaD1jb21taXQuaGFzaCBpZiBjb21taXQuaGFzaCBlbHNlICcnLAor
ICAgICAgICAgICAgICAgIHJldmlzaW9uPSd7fXJ7fScuZm9ybWF0KCcsICcgaWYgY29tbWl0Lmhh
c2ggZWxzZSAnJywgY29tbWl0LnJldmlzaW9uKSBpZiBjb21taXQucmV2aXNpb24gZWxzZSAnJywK
KyAgICAgICAgICAgICAgICB0aXRsZT0nIHwge30nLmZvcm1hdChjb21taXQubWVzc2FnZS5zcGxp
dGxpbmVzKClbMF0pIGlmIGNvbW1pdC5tZXNzYWdlIGVsc2UgJycKKyAgICAgICAgICAgICkpCisg
ICAgICAgICAgICBpZiBhcmdzLnZlcmJvc2UgPiAxOgorICAgICAgICAgICAgICAgIHByaW50KCdB
dXRob3I6IHt9Jy5mb3JtYXQoY29tbWl0LmF1dGhvcikpCisgICAgICAgICAgICAgICAgcHJpbnQo
J0RhdGU6ICAge30nLmZvcm1hdChkYXRldGltZS5mcm9tdGltZXN0YW1wKGNvbW1pdC50aW1lc3Rh
bXApLnN0cmZ0aW1lKCclYSAlYiAlZCAlSDolTTolUyAlWScpKSkKKyAgICAgICAgICAgICAgICBw
cmludCgnJykKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBjb21taXQubWVzc2FnZS5zcGxp
dGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCcgICAge30nLmZvcm1hdChsaW5l
KSkKKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgaWYgcmVmZXJlbmNlIGluIFtOb25l
LCBjbHMuSURFTlRJRklFUl06CisgICAgICAgICAgICBwcmludChjb21taXQpCisgICAgICAgIGVs
aWYgcmVmZXJlbmNlID09IGNscy5SRVZJU0lPTjoKKyAgICAgICAgICAgIHByaW50KCdye30nLmZv
cm1hdChjb21taXQucmV2aXNpb24pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQo
Y29tbWl0Lmhhc2gpCisgICAgICAgIHJldHVybiAwCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL21haW4ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3Jh
bS9tYWluLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vbWFpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU0IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMg
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBh
cmdwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworCitmcm9tIHdlYmtpdGNvcmVweSBp
bXBvcnQgYXJndW1lbnRzLCBsb2cgYXMgd2Via2l0Y29yZXB5X2xvZworZnJvbSB3ZWJraXRzY21w
eSBpbXBvcnQgbG9jYWwsIGxvZworZnJvbSB3ZWJraXRzY21weS5wcm9ncmFtIGltcG9ydCBGaW5k
CisKKworZGVmIG1haW4oYXJncz1Ob25lLCByZXBvc2l0b3J5PU5vbmUsIGxvZ2dlcnM9Tm9uZSk6
CisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLldBUk5JTkcpCisKKyAgICBs
b2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCksIHdlYmtpdGNvcmVweV9sb2csICBsb2ddICsg
KGxvZ2dlcnMgb3IgW10pCisKKyAgICBpZiBub3QgcmVwb3NpdG9yeToKKyAgICAgICAgcmVwb3Np
dG9yeSA9IGxvY2FsLlNjbS5mcm9tX3BhdGgocGF0aD1vcy5nZXRjd2QoKSkKKworICAgIHBhcnNl
ciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgICAgICBkZXNjcmlwdGlvbj0nQ3VzdG9t
IGdpdCB0b29saW5nIGZyb20gdGhlIFdlYktpdCB0ZWFtIHRvIGludGVyYWN0IHdpdGggYSAnICsK
KyAgICAgICAgICAgICAgICAgICAgJ3JlcG9zaXRvcnkgdXNpbmcgaWRlbnRpZmVycycsCisgICAg
KQorICAgIGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAocGFyc2VyKQorICAgIHN1YnBhcnNlcnMgPSBw
YXJzZXIuYWRkX3N1YnBhcnNlcnMoaGVscD0nc3ViLWNvbW1hbmQgaGVscCcpCisKKyAgICBmb3Ig
cHJvZ3JhbSBpbiBbRmluZF06CisgICAgICAgIHN1YnBhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3Bh
cnNlcihwcm9ncmFtLm5hbWUsIGhlbHA9cHJvZ3JhbS5oZWxwKQorICAgICAgICBzdWJwYXJzZXIu
c2V0X2RlZmF1bHRzKG1haW49cHJvZ3JhbS5tYWluKQorICAgICAgICBwcm9ncmFtLnBhcnNlcihz
dWJwYXJzZXIsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSwgbG9nZ2Vycz1sb2dnZXJzKQorCisgICAg
cGFyc2VkID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1hcmdzKQorCisgICAgcmV0dXJuIHBhcnNl
ZC5tYWluKGFyZ3M9cGFyc2VkLCByZXBvc2l0b3J5PXJlcG9zaXRvcnkpCkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2ZpbmRfdW5pdHRl
c3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvdGVzdC9maW5kX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZmluZF91bml0
dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MyBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGpzb24KK2ltcG9ydCB1bml0dGVzdAorCitm
cm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQorZnJvbSB3ZWJraXRjb3JlcHku
bW9ja3MgaW1wb3J0IFRpbWUgYXMgTW9ja1RpbWUKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxv
Y2FsLCAgcHJvZ3JhbSwgbW9ja3MKKworCitjbGFzcyBUZXN0RmluZCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CisgICAgcGF0aCA9ICcvbW9jay9yZXBvc2l0b3J5JworCisgICAgZGVmIHRlc3RfYmFzaWNf
Z2l0KHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nr
cy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAg
ICAgIGFyZ3M9KCdmaW5kJywgJ0hFQUQnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxv
Y2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICc0QG1haW5cbicpCisK
KyAgICBkZWYgdGVzdF9iYXNpY19naXRfc3ZuKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxv
Y2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2Nr
VGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAn
SEVBRCcpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChz
ZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0
dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzRAbWFpblxuJykKKworICAgIGRlZiB0ZXN0X2Jhc2lj
X3N2bihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoKSwgbW9ja3MubG9jYWwu
U3ZuKHNlbGYucGF0aCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6Cisg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAg
ICAgICBhcmdzPSgnZmluZCcsICdIRUFEJyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1s
b2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnNEB0cnVua1xuJykK
KworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXJfZ2l0KHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tz
LmxvY2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1
dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwg
cHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJzJAbWFpbicpLAor
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgp
LAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRv
dXQuZ2V0dmFsdWUoKSwgJ2ZmZjgzYmIyZDkxNzFiNGQ5MTk2ZTk3N2ViMDUwOGZkNTdlN2EwOGRc
bicpCisKKyAgICBkZWYgdGVzdF9pZGVudGlmaWVyX2dpdF9zdm4oc2VsZik6CisgICAgICAgIHdp
dGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGlt
ZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnMkBt
YWluJyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNl
bGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1
cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnZmZmODNiYjJkOTE3MWI0ZDkxOTZlOTc3ZWIwNTA4ZmQ1
N2U3YTA4ZFxuJykKKworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXJfc3ZuKHNlbGYpOgorICAgICAg
ICB3aXRoIG1vY2tzLmxvY2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSwgTW9j
a1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywg
JzJAdHJ1bmsnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3Bh
dGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Y2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICdyMlxuJykKKworICAgIGRlZiB0ZXN0X2hhc2go
c2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCksIG1vY2tzLmxv
Y2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAg
YXJncz0oJ2ZpbmQnLCAnM2NkMzJlMzUyNDEwNTY1YmI1NDM4MjFmYmY4NTZhNmQzY2FhZDFjNCcp
LAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBh
dGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5z
dGRvdXQuZ2V0dmFsdWUoKSwgJzIuMkBicmFuY2gtYlxuJykKKworICAgIGRlZiB0ZXN0X3Jldmlz
aW9uX3N2bihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoKSwgbW9ja3MubG9j
YWwuU3ZuKHNlbGYucGF0aCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAg
ICAgICAgICBhcmdzPSgnZmluZCcsICdyNScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9
bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzIuMkBicmFuY2gt
YlxuJykKKworICAgIGRlZiB0ZXN0X3JldmlzaW9uX2dpdF9zdm4oc2VsZik6CisgICAgICAgIHdp
dGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwu
U3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdz
PSgnZmluZCcsICdyNScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZy
b21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzIuMkBicmFuY2gtYlxuJykKKworICAg
IGRlZiB0ZXN0X3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNl
bGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRw
dXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAs
IHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICczQG1haW4nLCAn
LXYnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgoc2Vs
Zi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVy
ZWQuc3Rkb3V0LmdldHZhbHVlKCksICczQG1haW4gfCAxYWJlMjViNDQzZTk4NWY5M2I5MGQ4MzBl
NGE3ZTM3MzEzMzZhZjRkLCByNCB8IDR0aCBjb21taXRcbicpCisKKyAgICBkZWYgdGVzdF92ZXJi
b3NlX3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0
aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0
dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dy
YW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICczQG1haW4nLCAnLXZ2Jyks
CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0
aCksCisgICAgICAgICAgICApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAg
ICAgY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICAnJyczQG1haW4gfCAx
YWJlMjViNDQzZTk4NWY5M2I5MGQ4MzBlNGE3ZTM3MzEzMzZhZjRkLCByNCB8IDR0aCBjb21taXQK
K0F1dGhvcjogSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFwcGxlLmNvbT4KK0RhdGU6ICAgRnJp
IE9jdCAwMiAxMToyMzoyMCAyMDIwCisKKyAgICA0dGggY29tbWl0CisgICAgc3ZuLWlkOiBodHRw
czovL3N2bi53ZWJraXQub3JncmVwb3NpdG9yeS9yZXBvc2l0b3J5L3RydW5rQDQgMjY4ZjQ1Y2Mt
Y2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjCisnJycsCisgICAgICAgICkKKworICAgIGRlZiB0
ZXN0X2pzb24oc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwg
Z2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJl
KCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0u
bWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICczQG1haW4nLCAnLS1qc29uJyks
CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0
aCksCisgICAgICAgICAgICApKQorCisgICAgICAgIGRlY29kZWQgPSBqc29uLmxvYWRzKGNhcHR1
cmVkLnN0ZG91dC5nZXR2YWx1ZSgpKQorICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbCgKKyAg
ICAgICAgICAgIGRlY29kZWQsIGRpY3QoCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nM0Bt
YWluJywKKyAgICAgICAgICAgICAgICBoYXNoPScxYWJlMjViNDQzZTk4NWY5M2I5MGQ4MzBlNGE3
ZTM3MzEzMzZhZjRkJywKKyAgICAgICAgICAgICAgICByZXZpc2lvbj00LAorICAgICAgICAgICAg
ICAgIGF1dGhvcj0namJlZGFyZEBhcHBsZS5jb20nLAorICAgICAgICAgICAgICAgIHRpbWVzdGFt
cD0xNjAxNjYzMDAwLAorICAgICAgICAgICAgICAgIGJyYW5jaD0nbWFpbicsCisgICAgICAgICAg
ICAgICAgbWVzc2FnZT0nNHRoIGNvbW1pdFxuc3ZuLWlkOiBodHRwczovL3N2bi53ZWJraXQub3Jn
cmVwb3NpdG9yeS9yZXBvc2l0b3J5L3RydW5rQDQgMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUy
NjkxYjRkYmZjJywKKyAgICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9yZXF1ZXN0X2lkZW50
aWZpZXIoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0
X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkg
YXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFp
bigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICdhMzBjZTg0OTRiZjFhYzI4MDdhNjk4
NDRmNzI2YmU0YTk4NDNjYTU1JywgJy0taWRlbnRpZmllcicpLAorICAgICAgICAgICAgICAgIHJl
cG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzIu
MUBicmFuY2gtYVxuJykKKworICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgs
IGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVy
ZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgcHJvZ3Jh
bS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJzIuMUBicmFuY2gtYScsICct
LWlkZW50aWZpZXInKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9t
X3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoY2FwdHVyZWQuc3RkZXJyLmdldHZhbHVlKCksICJDYW5ub3QgcHJpbnQgJ2lkZW50aWZpZXJz
JywgdGhlIHVzZXIgYWxyZWFkeSBzcGVjaWZpZWQgdGhlIGNvbW1pdCBieSBpdFxuIikKKworICAg
IGRlZiB0ZXN0X3JlcXVlc3RfaGFzaChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5H
aXQoc2VsZi5wYXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUs
IE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJ3IzJywg
Jy0taGFzaCcpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0
aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChj
YXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJ2EzMGNlODQ5NGJmMWFjMjgwN2E2OTg0NGY3MjZi
ZTRhOTg0M2NhNTVcbicpCisKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRo
LCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1
cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTEsIHByb2dy
YW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICdhMzBjZTg0OTRiZjFhYzI4
MDdhNjk4NDRmNzI2YmU0YTk4NDNjYTU1JywgJy0taGFzaCcpLAorICAgICAgICAgICAgICAgIHJl
cG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRlcnIuZ2V0dmFsdWUoKSwgIkNh
bm5vdCBwcmludCAnaGFzaHMnLCB0aGUgdXNlciBhbHJlYWR5IHNwZWNpZmllZCB0aGUgY29tbWl0
IGJ5IGl0XG4iKQorCisgICAgZGVmIHRlc3RfcmVxdWVzdF9yZXZpc2lvbihzZWxmKToKKyAgICAg
ICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5s
b2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAg
IGFyZ3M9KCdmaW5kJywgJ2EzMGNlODQ5NGJmMWFjMjgwN2E2OTg0NGY3MjZiZTRhOTg0M2NhNTUn
LCAnLS1yZXZpc2lvbicpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZy
b21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJ3IzXG4nKQorCisgICAgICAgIHdpdGgg
bW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3Zu
KCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKC0xLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0o
J2ZpbmQnLCAncjMnLCAnLS1yZXZpc2lvbicpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9
bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRlcnIuZ2V0dmFsdWUoKSwgIkNhbm5vdCBwcmlu
dCAncmV2aXNpb25zJywgdGhlIHVzZXIgYWxyZWFkeSBzcGVjaWZpZWQgdGhlIGNvbW1pdCBieSBp
dFxuIikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411181</attachid>
            <date>2020-10-12 16:14:08 -0700</date>
            <delta_ts>2020-10-13 09:19:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217534-20201012161407.patch</filename>
            <type>text/plain</type>
            <size>38451</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODM3NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDIwLTEwLTEyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBgZ2l0LXdlYmtpdCBmaW5kYAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3NTM0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS83MDE1MjQzMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvZ2l0LXdlYmtpdDogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5w
eTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvYXJndW1lbnRzLnB5OgorICAgICAgICAoTm9BY3Rpb24uX19jYWxsX18p
OgorICAgICAgICAoQ291bnRBY3Rpb24pOiBDcmVhdGUgYW4gYWN0aW9uIHRvIGluY3JlbWVudCBv
ciBkZWNyZW1lbnQgYSB2YXJpYWJsZSBieSBhIHZhbHVlLgorICAgICAgICAoQ2FsbGJhY2tBY3Rp
b24pOiBDcmVhdGUgYW4gYWN0aW9uIHdoaWNoIHdpbGwgdHJpZ2dlciBhIGNhbGxiYWNrIHdoZW4g
c2V0LgorICAgICAgICAoTG9nZ2luZ0dyb3VwKTogQ3JlYXRlIGEgZ3JvdXAgd2hpY2ggYWxsb3dz
IHRoZSB1c2VyIHRvIGNoYW5nZSBsb2dnaW5nIGJlaGF2aW9yLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQ6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5OiBBZGQgd2Via2l0c2NtcHkucHJvZ3Jh
bSBhbmQgZ2l0LXdlYmtpdC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weToKKyAgICAg
ICAgKEdpdC5kZWZhdWx0X2JyYW5jaCk6IEZhbGxiYWNrIHRvICdtYXN0ZXInIG9yICdtYWluJyBp
ZiB0aGUgcmVtb3RlIGlzbid0IGF2YWlsYWJsZS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zY20ucHk6CisgICAgICAgIChTY20uZmlu
ZCk6IEFkZCBmdW5jdGlvbiB0byBjb252ZXJ0IGdlbmVyaWMgc3RyaW5nIGFyZ3VtZW50cyB0byBh
IGNvbW1pdCwgYW5kIHRoZW4gZmluZCB0aGF0IGNvbW1pdCBpbgorICAgICAgICB0aGUgcmVwb3Np
dG9yeS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9sb2NhbC9zdm4ucHk6CisgICAgICAgIChTdm4pOiBTdXBwb3J0IGEgZmV3IGRpZmZlcmVudCBT
Vk4gYmluYXJ5IHBhdGhzLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3Byb2dyYW06IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vX19pbml0X18ucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0v
Y29tbWFuZC5weTogQWRkZWQuCisgICAgICAgIChDb21tYW5kKTogQmFzZSBjbGFzcyBmb3IgYWxs
IGNvbW1hbmRzLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Byb2dyYW0vZmluZC5weTogQWRkZWQuCisgICAgICAgIChGaW5kKToKKyAgICAgICAg
KEZpbmQucGFyc2VyKTogQ29uZmlndXJlIHBhcnNlciBmb3IgJ2ZpbmQnIHN1Yi1wcm9ncmFtLgor
ICAgICAgICAoRmluZC5tYWluKTogR2l2ZW4gYW4gaWRlbnRpZmllciwgcmV2aXNpb24sIGhhc2gg
b3IgYnJhbmNoIG5hbWUsIGZpbmQgYW5kIHByaW50IHRoZSBtYXRjaGluZyBjb21taXQgZnJvbQor
ICAgICAgICB0aGUgcmVwb3NpdG9yeSBpbiBzY29wZS4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL21haW4ucHk6IEFkZGVkLgorICAg
ICAgICAobWFpbik6IEVudHJ5IHBvaW50IHRvIGdpdC08cHJvamVjdD4gc2NyaXB0cy4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2ZpbmRf
dW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAoVGVzdEZpbmQpOgorICAgICAgICAoVGVzdEZp
bmQudGVzdF9iYXNpY19naXQpOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9iYXNpY19naXRfc3Zu
KToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfYmFzaWNfc3ZuKToKKyAgICAgICAgKFRlc3RGaW5k
LnRlc3RfYnJhbmNoX3RpbGRlKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfaWRlbnRpZmllcl9n
aXQpOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9pZGVudGlmaWVyX2dpdF9zdm4pOgorICAgICAg
ICAoVGVzdEZpbmQudGVzdF9pZGVudGlmaWVyX3N2bik6CisgICAgICAgIChUZXN0RmluZC50ZXN0
X2hhc2gpOgorICAgICAgICAoVGVzdEZpbmQudGVzdF9yZXZpc2lvbl9zdm4pOgorICAgICAgICAo
VGVzdEZpbmQudGVzdF9yZXZpc2lvbl9naXRfc3ZuKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3Rf
dmVyYm9zZSk6CisgICAgICAgIChUZXN0RmluZC50ZXN0X3ZlcmJvc2VfdmVyYm9zZSk6CisKIDIw
MjAtMTAtMTIgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAg
IFt3ZWJraXRjb3JlcHldIEF0dGVtcHQgdG8gdGVybWluYXRlIHN0dWNrIHByb2Nlc3NlcyBiZWZv
cmUga2lsbGluZyB0aGVtCkluZGV4OiBUb29scy9TY3JpcHRzL2dpdC13ZWJraXQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0CShub25leGlzdGVudCkKKysrIFRvb2xzL1Nj
cmlwdHMvZ2l0LXdlYmtpdAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisjIS91c3Iv
YmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgb3MKK2ltcG9ydCB3ZWJraXRweQoraW1wb3J0IHN5cworCitmcm9tIHdlYmtpdHNjbXB5
IGltcG9ydCBsb2NhbCwgcHJvZ3JhbQorCitzeXMuZXhpdChwcm9ncmFtLm1haW4ocmVwb3NpdG9y
eT1sb2NhbC5TY20uZnJvbV9wYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSkKKwoKUHJv
cGVydHkgY2hhbmdlcyBvbjogVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0Cl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dl
YmtpdGNvcmVweS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNjgz
NzIpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5
L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIGZyb20gd2Via2l0
Y29yZXB5LnRpbWVvdXQgaW1wb3J0IFRpbWVvdXQKIGZyb20gd2Via2l0Y29yZXB5LnN1YnByb2Nl
c3NfdXRpbHMgaW1wb3J0IFRpbWVvdXRFeHBpcmVkLCBDb21wbGV0ZWRQcm9jZXNzLCBydW4KIGZy
b20gd2Via2l0Y29yZXB5Lm91dHB1dF9jYXB0dXJlIGltcG9ydCBMb2dnZXJDYXB0dXJlLCBPdXRw
dXRDYXB0dXJlLCBPdXRwdXREdXBsaWNhdGUKIAotdmVyc2lvbiA9IFZlcnNpb24oMCwgNCwgMTMp
Cit2ZXJzaW9uID0gVmVyc2lvbigwLCA0LCAxNCkKIAogZnJvbSB3ZWJraXRjb3JlcHkuYXV0b2lu
c3RhbGwgaW1wb3J0IFBhY2thZ2UsIEF1dG9JbnN0YWxsCiBpZiBzeXMudmVyc2lvbl9pbmZvID4g
KDMsIDApOgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtp
dGNvcmVweS9hcmd1bWVudHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9hcmd1bWVudHMucHkJKHJldmlzaW9uIDI2ODM3
MikKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkv
YXJndW1lbnRzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw5IEBACiAjIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBp
bXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9y
dCBsb2cKIAogCiBjbGFzcyBOb0FjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgpAQCAtMjksMyArMzIs
NTcgQEAgY2xhc3MgTm9BY3Rpb24oYXJncGFyc2UuQWN0aW9uKToKIAogICAgIGRlZiBfX2NhbGxf
XyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgog
ICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCBGYWxzZSBpZiBvcHRpb25fc3Ry
aW5nLnN0YXJ0c3dpdGgoJy0tbm8nKSBlbHNlIFRydWUpCisKKworZGVmIENvdW50QWN0aW9uKHZh
bHVlPTEpOgorICAgIGNsYXNzIEFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgorICAgICAgICBkZWYg
X19pbml0X18oc2VsZiwgb3B0aW9uX3N0cmluZ3MsIGRlc3QsICoqa3dhcmdzKToKKyAgICAgICAg
ICAgIHN1cGVyKEFjdGlvbiwgc2VsZikuX19pbml0X18ob3B0aW9uX3N0cmluZ3MsIGRlc3QsIG5h
cmdzPTAsICoqa3dhcmdzKQorCisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5h
bWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nKToKKyAgICAgICAgICAgIHNldGF0dHIobmFt
ZXNwYWNlLCBzZWxmLmRlc3QsIGdldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QpICsgdmFsdWUp
CisKKyAgICByZXR1cm4gQWN0aW9uCisKKworZGVmIENhbGxiYWNrQWN0aW9uKGFjdGlvbiwgY2Fs
bGJhY2s9bGFtYmRhIG5hbWVzcGFjZTogTm9uZSk6CisgICAgY2xhc3MgQWN0aW9uKGFjdGlvbik6
CisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBv
cHRpb25fc3RyaW5ncyk6CisgICAgICAgICAgICBzdXBlcihBY3Rpb24sIHNlbGYpLl9fY2FsbF9f
KHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmdzKQorICAgICAgICAgICAg
Y2FsbGJhY2sobmFtZXNwYWNlKQorCisgICAgcmV0dXJuIEFjdGlvbgorCisKK2RlZiBMb2dnaW5n
R3JvdXAocGFyc2VyLCBsb2dnZXJzPU5vbmUsIGRlZmF1bHQ9bG9nZ2luZy5XQVJOSU5HLCBoZWxw
PSd7fSBhbW91bnQgb2YgbG9nZ2luZycpOgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcnNlciwg
YXJncGFyc2UuQXJndW1lbnRQYXJzZXIpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdQcm92
aWRlZCBwYXJzZXIgaXMgbm90IGEge30nLmZvcm1hdCh0eXBlKGFyZ3BhcnNlLkFyZ3VtZW50UGFy
c2VyKSkpCisKKyAgICBpZiBub3QgbG9nZ2VyczoKKyAgICAgICAgbG9nZ2VycyA9IFtsb2dnaW5n
LmdldExvZ2dlcigpLCBsb2ddCisgICAgZm9yIGxvZ2dlciBpbiBsb2dnZXJzOgorICAgICAgICBs
b2dnZXIuc2V0TGV2ZWwoZGVmYXVsdCkKKworICAgIGRlZiB2ZXJib3NlX2NhbGxiYWNrKG5hbWVz
cGFjZSk6CisgICAgICAgIHZlcmJvc2l0eSA9IGdldGF0dHIobmFtZXNwYWNlLCAndmVyYm9zZScp
CisgICAgICAgIGxvZ19sZXZlbCA9IGRlZmF1bHQgLSB2ZXJib3NpdHkgKiAxMAorCisgICAgICAg
IHNldGF0dHIobmFtZXNwYWNlLCAnbG9nX2xldmVsJywgbG9nX2xldmVsKQorCisgICAgICAgIGZv
ciBsb2dnZXIgaW4gbG9nZ2VyczoKKyAgICAgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dfbGV2
ZWwpCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ0xvZ2dpbmcnKQor
ICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy0tdmVyYm9zZScsICctdicsCisgICAg
ICAgIGRlc3Q9J3ZlcmJvc2UnLCBkZWZhdWx0PTAsCisgICAgICAgIGhlbHA9aGVscC5mb3JtYXQo
J0luY3JlYXNlJyksCisgICAgICAgIGFjdGlvbj1DYWxsYmFja0FjdGlvbihDb3VudEFjdGlvbih2
YWx1ZT0xKSwgY2FsbGJhY2s9dmVyYm9zZV9jYWxsYmFjayksCisgICAgKQorICAgIGdyb3VwLmFk
ZF9hcmd1bWVudCgKKyAgICAgICAgJy0tcXVpZXQnLCAnLXEnLAorICAgICAgICBkZXN0PSd2ZXJi
b3NlJywgZGVmYXVsdD0wLAorICAgICAgICBoZWxwPWhlbHAuZm9ybWF0KCdEZWNyZWFzZScpLAor
ICAgICAgICBhY3Rpb249Q2FsbGJhY2tBY3Rpb24oQ291bnRBY3Rpb24odmFsdWU9LTEpLCBjYWxs
YmFjaz12ZXJib3NlX2NhbGxiYWNrKSwKKyAgICApCisgICAgcmV0dXJuIGdyb3VwCkluZGV4OiBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9naXQtd2Via2l0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvZ2l0LXdlYmtp
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACisjIS91c3IvYmluL2VudiBweXRob24K
KworIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisj
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgc3lzCisKK2Zy
b20gd2Via2l0c2NtcHkgaW1wb3J0IHByb2dyYW0KKworCitzeXMuZXhpdChwcm9ncmFtLm1haW4o
KSkKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L2dpdC13ZWJraXQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCAr
MSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQkocmV2aXNpb24gMjY4MzcyKQor
KysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDggKzUzLDEwIEBAIHNldHVwKAogICAgICAgICAnd2Via2l0c2NtcHkubG9j
YWwnLAogICAgICAgICAnd2Via2l0c2NtcHkubW9ja3MnLAogICAgICAgICAnd2Via2l0c2NtcHku
bW9ja3MubG9jYWwnLAorICAgICAgICAnd2Via2l0c2NtcHkucHJvZ3JhbScsCiAgICAgICAgICd3
ZWJraXRzY21weS50ZXN0JywKICAgICBdLAorICAgIHNjcmlwdHM9WydnaXQtd2Via2l0J10sCiAg
ICAgaW5zdGFsbF9yZXF1aXJlcz1bJ3B5dGhvbi1kYXRldXRpbCcsICd3ZWJraXRjb3JlcHknXSwK
ICAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAogICAgIHppcF9zYWZlPUZhbHNlLApJbmRl
eDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0
X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI2ODM3MikKKysrIFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgIlBs
ZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRoIGBwaXAgaW5zdGFsbCB3ZWJraXRjb3JlcHkg
LS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAiCiAgICAgKQogCi12ZXJzaW9u
ID0gVmVyc2lvbigwLCAxLCAzKQordmVyc2lvbiA9IFZlcnNpb24oMCwgMiwgMCkKIAogQXV0b0lu
c3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnZGF0ZXV0aWwnLCBWZXJzaW9uKDIsIDgsIDEpLCBweXBp
X25hbWU9J3B5dGhvbi1kYXRldXRpbCcpKQogCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9naXQucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvZ2l0LnB5
CShyZXZpc2lvbiAyNjgzNzIpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9sb2NhbC9naXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDEx
IEBAIGNsYXNzIEdpdChTY20pOgogICAgIGRlZiBkZWZhdWx0X2JyYW5jaChzZWxmKToKICAgICAg
ICAgcmVzdWx0ID0gcnVuKFtzZWxmLmV4ZWN1dGFibGUsICdyZXYtcGFyc2UnLCAnLS1hYmJyZXYt
cmVmJywgJ29yaWdpbi9IRUFEJ10sIGN3ZD1zZWxmLnBhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUs
IGVuY29kaW5nPSd1dGYtOCcpCiAgICAgICAgIGlmIHJlc3VsdC5yZXR1cm5jb2RlOgorICAgICAg
ICAgICAgY2FuZGlkYXRlcyA9IHNlbGYuYnJhbmNoZXMKKyAgICAgICAgICAgIGlmICdtYXN0ZXIn
IGluIGNhbmRpZGF0ZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuICdtYXN0ZXInCisgICAgICAg
ICAgICBpZiAnbWFpbicgaW4gY2FuZGlkYXRlczoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ21h
aW4nCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICByZXR1cm4gJy8nLmpvaW4ocmVz
dWx0LnN0ZG91dC5yc3RyaXAoKS5zcGxpdCgnLycpWzE6XSkKIApJbmRleDogVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xv
Y2FsL3NjbS5weQkocmV2aXNpb24gMjY4MzcyKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0y
MywxMCArMjMsMTEgQEAKIAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCByZQoraW1wb3J0IHNpeAog
aW1wb3J0IHN5cwogCiBmcm9tIGxvZ2dpbmcgaW1wb3J0IE51bGxIYW5kbGVyCi1mcm9tIHdlYmtp
dHNjbXB5IGltcG9ydCBsb2cKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvZywgQ29tbWl0CiAK
IAogY2xhc3MgU2NtKG9iamVjdCk6CkBAIC04OSw2ICs5MCw0MSBAQCBjbGFzcyBTY20ob2JqZWN0
KToKICAgICBkZWYgcmVtb3RlKHNlbGYsIG5hbWU9Tm9uZSk6CiAgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IoKQogCisgICAgZGVmIGZpbmQoc2VsZiwgYXJndW1lbnQpOgorICAgICAg
ICBpZiBub3QgaXNpbnN0YW5jZShhcmd1bWVudCwgc2l4LnN0cmluZ190eXBlcyk6CisgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCAnYXJndW1lbnQnIHRvIGJlIGEgc3RyaW5n
LCBub3QgJ3t9JyIuZm9ybWF0KHR5cGUoYXJndW1lbnQpKSkKKworICAgICAgICBvZmZzZXQgPSAw
CisgICAgICAgIGlmICd+JyBpbiBhcmd1bWVudDoKKyAgICAgICAgICAgIGZvciBzIGluIGFyZ3Vt
ZW50LnNwbGl0KCd+JylbMTpdOgorICAgICAgICAgICAgICAgIGlmIHMgYW5kIG5vdCBzLmlzZGln
aXQoKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJ3t9JyBpcyBub3Qg
YSB2YWxpZCBhcmd1bWVudCB0byBTY20uZmluZCgpIikKKyAgICAgICAgICAgICAgICBvZmZzZXQg
Kz0gaW50KHMpIGlmIHMgZWxzZSAxCisgICAgICAgICAgICBhcmd1bWVudCA9IGFyZ3VtZW50LnNw
bGl0KCd+JylbMF0KKworICAgICAgICBpZiBhcmd1bWVudCA9PSAnSEVBRCc6CisgICAgICAgICAg
ICByZXN1bHQgPSBzZWxmLmNvbW1pdCgpCisKKyAgICAgICAgZWxpZiBhcmd1bWVudCBpbiBzZWxm
LmJyYW5jaGVzOgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5jb21taXQoYnJhbmNoPWFyZ3Vt
ZW50KQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJzZWRfY29tbWl0ID0gQ29tbWl0
LnBhcnNlKGFyZ3VtZW50KQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5jb21taXQoCisgICAg
ICAgICAgICAgICAgaGFzaD1wYXJzZWRfY29tbWl0Lmhhc2gsCisgICAgICAgICAgICAgICAgcmV2
aXNpb249cGFyc2VkX2NvbW1pdC5yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVy
PXBhcnNlZF9jb21taXQuaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBicmFuY2g9cGFyc2Vk
X2NvbW1pdC5icmFuY2gsCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgbm90IG9mZnNldDoK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICByZXR1cm4gc2VsZi5jb21taXQo
CisgICAgICAgICAgICBpZGVudGlmaWVyPXJlc3VsdC5pZGVudGlmaWVyIC0gb2Zmc2V0LAorICAg
ICAgICAgICAgYnJhbmNoPXJlc3VsdC5icmFuY2gsCisgICAgICAgICkKKwogICAgIGRlZiBjb21t
aXQoc2VsZiwgaGFzaD1Ob25lLCByZXZpc2lvbj1Ob25lLCBpZGVudGlmaWVyPU5vbmUsIGJyYW5j
aD1Ob25lKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCiAKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJr
aXRzY21weS9sb2NhbC9zdm4ucHkJKHJldmlzaW9uIDI2ODM3MikKKysrIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQkod29ya2luZyBj
b3B5KQpAQCAtMzcsNyArMzcsNyBAQCBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIENv
bnRyaWJ1CiAKIAogY2xhc3MgU3ZuKFNjbSk6Ci0gICAgZXhlY3V0YWJsZSA9ICcvdXNyL2xvY2Fs
L2Jpbi9zdm4nCisgICAgZXhlY3V0YWJsZSA9ICcvdXNyL2Jpbi9zdm4nIGlmIG9zLnBhdGguZXhp
c3RzKCcvdXNyL2Jpbi9zdm4nKSBlbHNlICcvdXNyL2xvY2FsL2Jpbi9zdm4nCiAgICAgTE9HX1JF
ID0gcmUuY29tcGlsZShyJ3IoP1A8cmV2aXNpb24+XGQrKSBcfCAoP1A8ZW1haWw+LiopIFx8ICg/
UDxkYXRlPi4qKScpCiAgICAgQ0FDSEVfVkVSU0lPTiA9IFZlcnNpb24oMSkKIApJbmRleDogVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9fX2lu
aXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9wcm9ncmFtL19faW5pdF9fLnB5CShub25leGlzdGVudCkKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vX19pbml0
X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRzY21weS5wcm9ncmFtLmNvbW1hbmQgaW1w
b3J0IENvbW1hbmQKK2Zyb20gd2Via2l0c2NtcHkucHJvZ3JhbS5maW5kIGltcG9ydCBGaW5kCisK
K2Zyb20gd2Via2l0c2NtcHkucHJvZ3JhbS5tYWluIGltcG9ydCBtYWluCkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2NvbW1hbmQu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvcHJvZ3JhbS9jb21tYW5kLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vY29tbWFuZC5weQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKKworCitjbGFzcyBDb21tYW5kKG9iamVjdCk6CisgICAg
bmFtZSA9IE5vbmUKKyAgICBoZWxwID0gTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVm
IHBhcnNlcihjbHMsIHBhcnNlciwgcmVwb3NpdG9yeSk6CisgICAgICAgIGlmIGNscy5uYW1lIGlz
IE5vbmU6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdDb21tYW5kIGRv
ZXMgbm90IGhhdmUgYSBuYW1lJykKKyAgICAgICAgaWYgY2xzLmhlbHAgaXMgTm9uZToKKyAgICAg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIid7fScgZG9lcyBub3QgaGF2ZSBhIGhl
bHAgbWVzc2FnZSIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbWFpbihjbHMsIHJlcG9z
aXRvcnkpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdObyBjb21tYW5kIHNwZWNpZmllZFxu
JykKKyAgICAgICAgcmV0dXJuIC0xCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2ZpbmQucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9maW5kLnB5
CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L3Byb2dyYW0vZmluZC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NyBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisj
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQganNvbgoraW1w
b3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUK
K2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBhcmd1bWVudHMKK2Zyb20gd2Via2l0c2NtcHkgaW1w
b3J0IENvbW1pdCwgbG9jYWwKK2Zyb20gd2Via2l0c2NtcHkucHJvZ3JhbSBpbXBvcnQgQ29tbWFu
ZAorCisKK2NsYXNzIEZpbmQoQ29tbWFuZCk6CisgICAgbmFtZSA9ICdmaW5kJworICAgIGhlbHAg
PSAnR2l2ZW4gYW4gaWRlbnRpZmllciwgcmV2aXNpb24gb3IgaGFzaCwgbm9ybWFsaXplIGFuZCBw
cmludCB0aGUgY29tbWl0JworCisgICAgSURFTlRJRklFUiA9ICdpZGVudGlmaWVyJworICAgIFJF
VklTSU9OID0gJ3JldmlzaW9uJworICAgIEhBU0ggPSAnaGFzaCcKKworICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBwYXJzZXIoY2xzLCBwYXJzZXIsIHJlcG9zaXRvcnksIGxvZ2dlcnM9Tm9uZSk6
CisgICAgICAgIGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAoCisgICAgICAgICAgICBwYXJzZXIsCisg
ICAgICAgICAgICBsb2dnZXJzPWxvZ2dlcnMsCisgICAgICAgICAgICBoZWxwPSd7fSBhbW91bnQg
b2YgbG9nZ2luZyBhbmQgY29tbWl0IGluZm9ybWF0aW9uIGRpc3BsYXllZCcKKyAgICAgICAgKS5h
ZGRfYXJndW1lbnQoCisgICAgICAgICAgICAnLS1qc29uJywgJy1qJywKKyAgICAgICAgICAgIGhl
bHA9J0NvbnZlcnQgdGhlIGNvbW1pdCB0byBhIG1hY2hpbmUtcmVhZGFibGUgSlNPTiBvYmplY3Qn
LAorICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgIGRlc3Q9J2pz
b24nLAorICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgKQorCisgICAgICAgIGdy
b3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnT3V0cHV0IFR5cGUnKQorICAgICAgICBn
cm91cC5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAnLS1pZGVudGlmaWVyLW9ubHknLCAnLWkn
LAorICAgICAgICAgICAgZGVzdD0ncmVmZXJlbmNlJywgZGVmYXVsdD1Ob25lLAorICAgICAgICAg
ICAgaGVscD0nUHJpbnQgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHNwZWNpZmllZCBjb21taXQnLAor
ICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PWNscy5JREVOVElGSUVSLAor
ICAgICAgICApCisKKyAgICAgICAgaWYgcmVwb3NpdG9yeS5pc19zdm46CisgICAgICAgICAgICBn
cm91cC5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAgICAgJy0tcmV2aXNpb24tb25seScsICct
cicsCisgICAgICAgICAgICAgICAgZGVzdD0ncmVmZXJlbmNlJywgZGVmYXVsdD1Ob25lLAorICAg
ICAgICAgICAgICAgIGhlbHA9J1ByaW50IHRoZSByZXZpc2lvbiBvZiB0aGUgc3BlY2lmaWVkIGNv
bW1pdCcsCisgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PWNscy5S
RVZJU0lPTiwKKyAgICAgICAgICAgICkKKworICAgICAgICBpZiByZXBvc2l0b3J5LmlzX2dpdDoK
KyAgICAgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICAgICAnLS1oYXNo
LW9ubHknLAorICAgICAgICAgICAgICAgIGRlc3Q9J3JlZmVyZW5jZScsIGRlZmF1bHQ9Tm9uZSwK
KyAgICAgICAgICAgICAgICBoZWxwPSdQcmludCB0aGUgaGFzaCBvZiB0aGUgc3BlY2lmaWVkIGNv
bW1pdCcsCisgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PWNscy5I
QVNILAorICAgICAgICAgICAgKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAg
ICAgICAgICAnYXJndW1lbnQnLCBuYXJncz0xLAorICAgICAgICAgICAgdHlwZT1zdHIsIGRlZmF1
bHQ9Tm9uZSwKKyAgICAgICAgICAgIGhlbHA9J1N0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGNv
bW1pdCBvciBicmFuY2ggdG8gYmUgbm9ybWFsaXplZCcsCisgICAgICAgICkKKworICAgIEBjbGFz
c21ldGhvZAorICAgIGRlZiBtYWluKGNscywgYXJncywgcmVwb3NpdG9yeSk6CisgICAgICAgIGFy
Z3VtZW50X3R5cGUgPSBOb25lCisgICAgICAgIGlmIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcihh
cmdzLmFyZ3VtZW50WzBdKToKKyAgICAgICAgICAgIGFyZ3VtZW50X3R5cGUgPSBjbHMuSURFTlRJ
RklFUgorICAgICAgICBlbGlmIENvbW1pdC5fcGFyc2VfaGFzaChhcmdzLmFyZ3VtZW50WzBdKToK
KyAgICAgICAgICAgIGFyZ3VtZW50X3R5cGUgPSBjbHMuSEFTSAorICAgICAgICBlbGlmIENvbW1p
dC5fcGFyc2VfcmV2aXNpb24oYXJncy5hcmd1bWVudFswXSk6CisgICAgICAgICAgICBhcmd1bWVu
dF90eXBlID0gY2xzLlJFVklTSU9OCisKKyAgICAgICAgY2FuZGlkYXRlcyA9IFtOb25lLCBjbHMu
SURFTlRJRklFUl0KKyAgICAgICAgaWYgcmVwb3NpdG9yeS5pc19zdm46CisgICAgICAgICAgICBj
YW5kaWRhdGVzLmFwcGVuZChjbHMuUkVWSVNJT04pCisgICAgICAgIGlmIHJlcG9zaXRvcnkuaXNf
Z2l0OgorICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoY2xzLkhBU0gpCisKKyAgICAgICAg
cmVmZXJlbmNlID0gYXJncy5yZWZlcmVuY2UKKyAgICAgICAgaWYgcmVmZXJlbmNlIGFuZCBhcmdz
Lmpzb246CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDYW5ub3QgcHJpbnQgJ3t9cycs
IHRoZSB1c2VyIGFscmVhZHkgYXNrZWQgdG8gcHJpbnQgSlNPTlxuIi5mb3JtYXQocmVmZXJlbmNl
KSkKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBpZiByZWZlcmVuY2UgaXMgbm90IE5v
bmUgYW5kIHJlZmVyZW5jZSA9PSBhcmd1bWVudF90eXBlOgorICAgICAgICAgICAgc3lzLnN0ZGVy
ci53cml0ZSgiQ2Fubm90IHByaW50ICd7fXMnLCB0aGUgdXNlciBhbHJlYWR5IHNwZWNpZmllZCB0
aGUgY29tbWl0IGJ5IGl0XG4iLmZvcm1hdChyZWZlcmVuY2UpKQorICAgICAgICAgICAgcmV0dXJu
IC0xCisKKyAgICAgICAgaWYgcmVmZXJlbmNlIGFuZCBhcmdzLnZlcmJvc2UgPiAwOgorICAgICAg
ICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2Fubm90IHByaW50IHRoZSAne30nIHNwZWNpZmljYWxs
eSwgdmVyYm9zaXR5IG92ZXJyaWRlcyB0aGlzIG9wdGlvblxuIi5mb3JtYXQocmVmZXJlbmNlKSkK
KyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgIGlmIHJlZmVyZW5jZSBpcyBOb25lIGFu
ZCBhcmd1bWVudF90eXBlID09IGNscy5JREVOVElGSUVSOgorICAgICAgICAgICAgcmVmZXJlbmNl
ID0gY2xzLlJFVklTSU9OIGlmIHJlcG9zaXRvcnkuaXNfc3ZuIGVsc2UgY2xzLkhBU0gKKworICAg
ICAgICBpZiByZWZlcmVuY2Ugbm90IGluIGNhbmRpZGF0ZXM6CisgICAgICAgICAgICBzeXMuc3Rk
ZXJyLndyaXRlKCJDYW5ub3QgcHJpbnQgJ3t9cycsIHRoZXkgYXJlIG5vdCBzdXBwb3J0ZWQgaW4g
dGhpcyByZXBvc2l0b3J5XG4iLmZvcm1hdChyZWZlcmVuY2UpKQorICAgICAgICAgICAgcmV0dXJu
IC0xCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29tbWl0ID0gcmVwb3NpdG9yeS5maW5k
KGFyZ3MuYXJndW1lbnRbMF0pCisgICAgICAgIGV4Y2VwdCAobG9jYWwuU2NtLkV4Y2VwdGlvbiwg
VmFsdWVFcnJvcikgYXMgZXhjZXB0aW9uOgorICAgICAgICAgICAgIyBWYWx1ZUVycm9ycyBhbmQg
U2NtIGV4Y2VwdGlvbnMgdXN1YWxseSBjb250YWluIGVub3VnaCBpbmZvcm1hdGlvbiB0byBiZSBk
aXNwbGF5ZWQKKyAgICAgICAgICAgICMgdG8gdGhlIHVzZXIgYXMgYW4gZXJyb3IKKyAgICAgICAg
ICAgIHN5cy5zdGRlcnIud3JpdGUoc3RyKGV4Y2VwdGlvbikgKyAnXG4nKQorICAgICAgICAgICAg
cmV0dXJuIDEKKworICAgICAgICBpZiBhcmdzLnZlcmJvc2UgPiAxIGFuZCBub3QgY29tbWl0Lm1l
c3NhZ2U6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gZmluZCB0aGUg
IGNvbW1pdCBtZXNzYWdlIGZvciAne30nXG4iLmZvcm1hdChjb21taXQpKQorICAgICAgICAgICAg
cmV0dXJuIDEKKworICAgICAgICBpZiBhcmdzLmpzb246CisgICAgICAgICAgICBwcmludChqc29u
LmR1bXBzKGNvbW1pdCwgY2xzPUNvbW1pdC5FbmNvZGVyLCBpbmRlbnQ9NCkpCisgICAgICAgICAg
ICByZXR1cm4gMAorCisgICAgICAgIGlmIGFyZ3MudmVyYm9zZSA+IDA6CisgICAgICAgICAgICBw
cmludCgne2lkZW50aWZpZXJ9IHwge2hhc2h9e3JldmlzaW9ufXt0aXRsZX0nLmZvcm1hdCgKKyAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyPWNvbW1pdCwKKyAgICAgICAgICAgICAgICBoYXNoPWNv
bW1pdC5oYXNoIGlmIGNvbW1pdC5oYXNoIGVsc2UgJycsCisgICAgICAgICAgICAgICAgcmV2aXNp
b249J3t9cnt9Jy5mb3JtYXQoJywgJyBpZiBjb21taXQuaGFzaCBlbHNlICcnLCBjb21taXQucmV2
aXNpb24pIGlmIGNvbW1pdC5yZXZpc2lvbiBlbHNlICcnLAorICAgICAgICAgICAgICAgIHRpdGxl
PScgfCB7fScuZm9ybWF0KGNvbW1pdC5tZXNzYWdlLnNwbGl0bGluZXMoKVswXSkgaWYgY29tbWl0
Lm1lc3NhZ2UgZWxzZSAnJworICAgICAgICAgICAgKSkKKyAgICAgICAgICAgIGlmIGFyZ3MudmVy
Ym9zZSA+IDE6CisgICAgICAgICAgICAgICAgcHJpbnQoJ0F1dGhvcjoge30nLmZvcm1hdChjb21t
aXQuYXV0aG9yKSkKKyAgICAgICAgICAgICAgICBwcmludCgnRGF0ZTogICB7fScuZm9ybWF0KGRh
dGV0aW1lLmZyb210aW1lc3RhbXAoY29tbWl0LnRpbWVzdGFtcCkuc3RyZnRpbWUoJyVhICViICVk
ICVIOiVNOiVTICVZJykpKQorICAgICAgICAgICAgICAgIHByaW50KCcnKQorICAgICAgICAgICAg
ICAgIGZvciBsaW5lIGluIGNvbW1pdC5tZXNzYWdlLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAg
ICAgICAgICAgcHJpbnQoJyAgICB7fScuZm9ybWF0KGxpbmUpKQorICAgICAgICAgICAgcmV0dXJu
IDAKKworICAgICAgICBpZiByZWZlcmVuY2UgaW4gW05vbmUsIGNscy5JREVOVElGSUVSXToKKyAg
ICAgICAgICAgIHByaW50KGNvbW1pdCkKKyAgICAgICAgZWxpZiByZWZlcmVuY2UgPT0gY2xzLlJF
VklTSU9OOgorICAgICAgICAgICAgcHJpbnQoJ3J7fScuZm9ybWF0KGNvbW1pdC5yZXZpc2lvbikp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludChjb21taXQuaGFzaCkKKyAgICAgICAg
cmV0dXJuIDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Byb2dyYW0vbWFpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL21haW4ucHkJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJv
Z3JhbS9tYWluLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgb3MKK2lt
cG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBhcmd1bWVudHMsIGxvZyBh
cyB3ZWJraXRjb3JlcHlfbG9nCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgbG9nCitm
cm9tIHdlYmtpdHNjbXB5LnByb2dyYW0gaW1wb3J0IEZpbmQKKworCitkZWYgbWFpbihhcmdzPU5v
bmUsIHJlcG9zaXRvcnk9Tm9uZSwgbG9nZ2Vycz1Ob25lKToKKyAgICBsb2dnaW5nLmJhc2ljQ29u
ZmlnKGxldmVsPWxvZ2dpbmcuV0FSTklORykKKworICAgIGxvZ2dlcnMgPSBbbG9nZ2luZy5nZXRM
b2dnZXIoKSwgd2Via2l0Y29yZXB5X2xvZywgIGxvZ10gKyAobG9nZ2VycyBvciBbXSkKKworICAg
IGlmIG5vdCByZXBvc2l0b3J5OgorICAgICAgICByZXBvc2l0b3J5ID0gbG9jYWwuU2NtLmZyb21f
cGF0aChwYXRoPW9zLmdldGN3ZCgpKQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQ
YXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uPSdDdXN0b20gZ2l0IHRvb2xpbmcgZnJvbSB0aGUg
V2ViS2l0IHRlYW0gdG8gaW50ZXJhY3Qgd2l0aCBhICcgKworICAgICAgICAgICAgICAgICAgICAn
cmVwb3NpdG9yeSB1c2luZyBpZGVudGlmZXJzJywKKyAgICApCisgICAgYXJndW1lbnRzLkxvZ2dp
bmdHcm91cChwYXJzZXIpCisgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2Vycyho
ZWxwPSdzdWItY29tbWFuZCBoZWxwJykKKworICAgIGZvciBwcm9ncmFtIGluIFtGaW5kXToKKyAg
ICAgICAgc3VicGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKHByb2dyYW0ubmFtZSwgaGVs
cD1wcm9ncmFtLmhlbHApCisgICAgICAgIHN1YnBhcnNlci5zZXRfZGVmYXVsdHMobWFpbj1wcm9n
cmFtLm1haW4pCisgICAgICAgIHByb2dyYW0ucGFyc2VyKHN1YnBhcnNlciwgcmVwb3NpdG9yeT1y
ZXBvc2l0b3J5LCBsb2dnZXJzPWxvZ2dlcnMpCisKKyAgICBwYXJzZWQgPSBwYXJzZXIucGFyc2Vf
YXJncyhhcmdzPWFyZ3MpCisKKyAgICByZXR1cm4gcGFyc2VkLm1haW4oYXJncz1wYXJzZWQsIHJl
cG9zaXRvcnk9cmVwb3NpdG9yeSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZmluZF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2ZpbmRf
dW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9maW5kX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjAxIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CitpbXBvcnQganNvbgoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9y
dCBPdXRwdXRDYXB0dXJlCitmcm9tIHdlYmtpdGNvcmVweS5tb2NrcyBpbXBvcnQgVGltZSBhcyBN
b2NrVGltZQorZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsICBwcm9ncmFtLCBtb2Nrcwor
CisKK2NsYXNzIFRlc3RGaW5kKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBwYXRoID0gJy9tb2Nr
L3JlcG9zaXRvcnknCisKKyAgICBkZWYgdGVzdF9iYXNpY19naXQoc2VsZik6CisgICAgICAgIHdp
dGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGlt
ZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnSEVB
RCcpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxm
LnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJl
ZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzRAbWFpblxuJykKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2dp
dF9zdm4oc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0
X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkg
YXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFp
bigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICdIRUFEJyksCisgICAgICAgICAgICAg
ICAgcmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAg
ICApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgp
LCAnNEBtYWluXG4nKQorCisgICAgZGVmIHRlc3RfYmFzaWNfc3ZuKHNlbGYpOgorICAgICAgICB3
aXRoIG1vY2tzLmxvY2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSwgTW9ja1Rp
bWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJ0hF
QUQnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgoc2Vs
Zi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVy
ZWQuc3Rkb3V0LmdldHZhbHVlKCksICc0QHRydW5rXG4nKQorCisgICAgZGVmIHRlc3RfYnJhbmNo
X3RpbGRlKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgsIGdp
dF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgp
IGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1h
aW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnYnJhbmNoLWF+MScpLAorICAgICAg
ICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAg
ICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0
dmFsdWUoKSwgJzIuMUBicmFuY2gtYVxuJykKKworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXJfZ2l0
KHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nrcy5s
b2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAg
IGFyZ3M9KCdmaW5kJywgJzJAbWFpbicpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9j
YWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJ2ZmZjgzYmIyZDkxNzFi
NGQ5MTk2ZTk3N2ViMDUwOGZkNTdlN2EwOGRcbicpCisKKyAgICBkZWYgdGVzdF9pZGVudGlmaWVy
X2dpdF9zdm4oc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCks
IG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVk
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAg
ICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnMkBtYWluJyksCisgICAgICAgICAgICAgICAgcmVwb3Np
dG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnZmZmODNi
YjJkOTE3MWI0ZDkxOTZlOTc3ZWIwNTA4ZmQ1N2U3YTA4ZFxuJykKKworICAgIGRlZiB0ZXN0X2lk
ZW50aWZpZXJfc3ZuKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdCgpLCBtb2Nr
cy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0
dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAg
ICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJzJAdHJ1bmsnKSwKKyAgICAgICAgICAgICAgICBy
ZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICdy
MlxuJykKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9j
YWwuR2l0KHNlbGYucGF0aCksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2Fw
dHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9n
cmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnM2NkMzJlMzUyNDEwNTY1
YmI1NDM4MjFmYmY4NTZhNmQzY2FhZDFjNCcpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9
bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzIuMkBicmFuY2gt
YlxuJykKKworICAgIGRlZiB0ZXN0X3JldmlzaW9uX3N2bihzZWxmKToKKyAgICAgICAgd2l0aCBt
b2Nrcy5sb2NhbC5HaXQoKSwgbW9ja3MubG9jYWwuU3ZuKHNlbGYucGF0aCksIE1vY2tUaW1lLCBP
dXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICdyNScpLAor
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgp
LAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRv
dXQuZ2V0dmFsdWUoKSwgJzIuMkBicmFuY2gtYlxuJykKKworICAgIGRlZiB0ZXN0X3JldmlzaW9u
X2dpdF9zdm4oc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwg
Z2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJl
KCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0u
bWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICdyNScpLAorICAgICAgICAgICAg
ICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAg
ICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUo
KSwgJzIuMkBicmFuY2gtYlxuJykKKworICAgIGRlZiB0ZXN0X3ZlcmJvc2Uoc2VsZik6CisgICAg
ICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3Mu
bG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAg
ICBhcmdzPSgnZmluZCcsICczQG1haW4nLCAnLXYnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0
b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICczQG1haW4g
fCAxYWJlMjViNDQzZTk4NWY5M2I5MGQ4MzBlNGE3ZTM3MzEzMzZhZjRkLCByNCB8IDR0aCBjb21t
aXRcbicpCisKKyAgICBkZWYgdGVzdF92ZXJib3NlX3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIHdp
dGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwu
U3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdz
PSgnZmluZCcsICczQG1haW4nLCAnLXZ2JyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1s
b2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCks
CisgICAgICAgICAgICAnJyczQG1haW4gfCAxYWJlMjViNDQzZTk4NWY5M2I5MGQ4MzBlNGE3ZTM3
MzEzMzZhZjRkLCByNCB8IDR0aCBjb21taXQKK0F1dGhvcjogSm9uYXRoYW4gQmVkYXJkIDxqYmVk
YXJkQGFwcGxlLmNvbT4KK0RhdGU6ICAgRnJpIE9jdCAwMiAxMToyMzoyMCAyMDIwCisKKyAgICA0
dGggY29tbWl0CisgICAgc3ZuLWlkOiBodHRwczovL3N2bi53ZWJraXQub3JncmVwb3NpdG9yeS9y
ZXBvc2l0b3J5L3RydW5rQDQgMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjCisn
JycsCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2pzb24oc2VsZik6CisgICAgICAgIHdpdGgg
bW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3Zu
KCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgn
ZmluZCcsICczQG1haW4nLCAnLS1qc29uJyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1s
b2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorCisgICAgICAg
IGRlY29kZWQgPSBqc29uLmxvYWRzKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpKQorICAgICAg
ICBzZWxmLmFzc2VydERpY3RFcXVhbCgKKyAgICAgICAgICAgIGRlY29kZWQsIGRpY3QoCisgICAg
ICAgICAgICAgICAgaWRlbnRpZmllcj0nM0BtYWluJywKKyAgICAgICAgICAgICAgICBoYXNoPScx
YWJlMjViNDQzZTk4NWY5M2I5MGQ4MzBlNGE3ZTM3MzEzMzZhZjRkJywKKyAgICAgICAgICAgICAg
ICByZXZpc2lvbj00LAorICAgICAgICAgICAgICAgIGF1dGhvcj0namJlZGFyZEBhcHBsZS5jb20n
LAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjYzMDAwLAorICAgICAgICAgICAgICAg
IGJyYW5jaD0nbWFpbicsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nNHRoIGNvbW1pdFxuc3Zu
LWlkOiBodHRwczovL3N2bi53ZWJraXQub3JncmVwb3NpdG9yeS9yZXBvc2l0b3J5L3RydW5rQDQg
MjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjJywKKyAgICAgICAgICAgICkpCisK
KyAgICBkZWYgdGVzdF9yZXF1ZXN0X2lkZW50aWZpZXIoc2VsZik6CisgICAgICAgIHdpdGggbW9j
a3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCks
IE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmlu
ZCcsICdhMzBjZTg0OTRiZjFhYzI4MDdhNjk4NDRmNzI2YmU0YTk4NDNjYTU1JywgJy0taWRlbnRp
ZmllcicpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChz
ZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0
dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzIuMUBicmFuY2gtYVxuJykKKworICAgICAgICB3aXRo
IG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2
bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgtMSwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9
KCdmaW5kJywgJzIuMUBicmFuY2gtYScsICctLWlkZW50aWZpZXInKSwKKyAgICAgICAgICAgICAg
ICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAg
ICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3RkZXJyLmdldHZhbHVlKCks
ICJDYW5ub3QgcHJpbnQgJ2lkZW50aWZpZXJzJywgdGhlIHVzZXIgYWxyZWFkeSBzcGVjaWZpZWQg
dGhlIGNvbW1pdCBieSBpdFxuIikKKworICAgIGRlZiB0ZXN0X3JlcXVlc3RfaGFzaChzZWxmKToK
KyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBnaXRfc3ZuPVRydWUpLCBt
b2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAg
ICAgICAgIGFyZ3M9KCdmaW5kJywgJ3IzJywgJy0taGFzaCcpLAorICAgICAgICAgICAgICAgIHJl
cG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJ2Ez
MGNlODQ5NGJmMWFjMjgwN2E2OTg0NGY3MjZiZTRhOTg0M2NhNTVcbicpCisKKyAgICAgICAgd2l0
aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5sb2NhbC5T
dm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoLTEsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdz
PSgnZmluZCcsICdhMzBjZTg0OTRiZjFhYzI4MDdhNjk4NDRmNzI2YmU0YTk4NDNjYTU1JywgJy0t
aGFzaCcpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChz
ZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0
dXJlZC5zdGRlcnIuZ2V0dmFsdWUoKSwgIkNhbm5vdCBwcmludCAnaGFzaHMnLCB0aGUgdXNlciBh
bHJlYWR5IHNwZWNpZmllZCB0aGUgY29tbWl0IGJ5IGl0XG4iKQorCisgICAgZGVmIHRlc3RfcmVx
dWVzdF9yZXZpc2lvbihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5w
YXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENh
cHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJv
Z3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJ2EzMGNlODQ5NGJmMWFj
MjgwN2E2OTg0NGY3MjZiZTRhOTg0M2NhNTUnLCAnLS1yZXZpc2lvbicpLAorICAgICAgICAgICAg
ICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAg
ICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUo
KSwgJ3IzXG4nKQorCisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0
X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkg
YXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBwcm9ncmFtLm1h
aW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAncjMnLCAnLS1yZXZpc2lvbicpLAor
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgp
LAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRl
cnIuZ2V0dmFsdWUoKSwgIkNhbm5vdCBwcmludCAncmV2aXNpb25zJywgdGhlIHVzZXIgYWxyZWFk
eSBzcGVjaWZpZWQgdGhlIGNvbW1pdCBieSBpdFxuIikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411225</attachid>
            <date>2020-10-13 09:19:12 -0700</date>
            <delta_ts>2020-10-13 09:22:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217534-20201013091911.patch</filename>
            <type>text/plain</type>
            <size>38183</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODM5NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU2IEBACisyMDIwLTEwLTEyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBgZ2l0LXdlYmtpdCBmaW5kYAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3NTM0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS83MDE1MjQzMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvZ2l0LXdlYmtpdDogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5w
eTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvYXJndW1lbnRzLnB5OgorICAgICAgICAoTm9BY3Rpb24uX19jYWxsX18p
OgorICAgICAgICAoQ291bnRBY3Rpb24pOiBDcmVhdGUgYW4gYWN0aW9uIHRvIGluY3JlbWVudCBv
ciBkZWNyZW1lbnQgYSB2YXJpYWJsZSBieSBhIHZhbHVlLgorICAgICAgICAoQ2FsbGJhY2tBY3Rp
b24pOiBDcmVhdGUgYW4gYWN0aW9uIHdoaWNoIHdpbGwgdHJpZ2dlciBhIGNhbGxiYWNrIHdoZW4g
c2V0LgorICAgICAgICAoTG9nZ2luZ0dyb3VwKTogQ3JlYXRlIGEgZ3JvdXAgd2hpY2ggYWxsb3dz
IHRoZSB1c2VyIHRvIGNoYW5nZSBsb2dnaW5nIGJlaGF2aW9yLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQ6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5OiBBZGQgd2Via2l0c2NtcHkucHJvZ3Jh
bSBhbmQgZ2l0LXdlYmtpdC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbW1pdC5weToKKyAgICAgICAg
KENvbW1pdCk6IE1ha2UgdGhlIDEyIGNoYXJhY3RlciBoYXNoIGJhc2VkIG9uIGEgY2xhc3MgdmFy
aWFibGUuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvbG9jYWwvZ2l0LnB5OgorICAgICAgICAoR2l0LmRlZmF1bHRfYnJhbmNoKTogRmFsbGJhY2sg
dG8gJ21hc3Rlcicgb3IgJ21haW4nIGlmIHRoZSByZW1vdGUgaXNuJ3QgYXZhaWxhYmxlLgorICAg
ICAgICAoR2l0LmZpbmQpOiBVc2UgZ2l0IHRvIG1hdGNoIGJyYW5jaGVzIGFuZCB0YWdzIHRvIGEg
aGFzaCBpbnN0ZWFkIG9mIHRyeWluZyB0byBkbyBpdCBvdXJzZWx2ZXMuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5OgorICAg
ICAgICAoU2NtLmZpbmQpOiBBZGQgZnVuY3Rpb24gdG8gY29udmVydCBnZW5lcmljIHN0cmluZyBh
cmd1bWVudHMgdG8gYSBjb21taXQsIGFuZCB0aGVuIGZpbmQgdGhhdCBjb21taXQgaW4KKyAgICAg
ICAgdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvbG9jYWwvc3ZuLnB5OgorICAgICAgICAoU3ZuKTogU3VwcG9ydCBhIGZl
dyBkaWZmZXJlbnQgU1ZOIGJpbmFyeSBwYXRocy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtOiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL19faW5pdF9fLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9wcm9ncmFtL2NvbW1hbmQucHk6IEFkZGVkLgorICAgICAgICAoQ29tbWFuZCk6IEJhc2Ug
Y2xhc3MgZm9yIGFsbCBjb21tYW5kcy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2ZpbmQucHk6IEFkZGVkLgorICAgICAgICAoRmlu
ZCk6CisgICAgICAgIChGaW5kLnBhcnNlcik6IENvbmZpZ3VyZSBwYXJzZXIgZm9yICdmaW5kJyBz
dWItcHJvZ3JhbS4KKyAgICAgICAgKEZpbmQubWFpbik6IEdpdmVuIGFuIGlkZW50aWZpZXIsIHJl
dmlzaW9uLCBoYXNoIG9yIGJyYW5jaCBuYW1lLCBmaW5kIGFuZCBwcmludCB0aGUgbWF0Y2hpbmcg
Y29tbWl0IGZyb20KKyAgICAgICAgdGhlIHJlcG9zaXRvcnkgaW4gc2NvcGUuCisgICAgICAgICog
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9tYWluLnB5
OiBBZGRlZC4KKyAgICAgICAgKG1haW4pOiBFbnRyeSBwb2ludCB0byBnaXQtPHByb2plY3Q+IHNj
cmlwdHMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvdGVzdC9maW5kX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RGaW5kKToKKyAg
ICAgICAgKFRlc3RGaW5kLnRlc3RfYmFzaWNfZ2l0KToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3Rf
YmFzaWNfZ2l0X3N2bik6CisgICAgICAgIChUZXN0RmluZC50ZXN0X2Jhc2ljX3N2bik6CisgICAg
ICAgIChUZXN0RmluZC50ZXN0X2JyYW5jaF90aWxkZSk6CisgICAgICAgIChUZXN0RmluZC50ZXN0
X2lkZW50aWZpZXJfZ2l0KToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfaWRlbnRpZmllcl9naXRf
c3ZuKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfaWRlbnRpZmllcl9zdm4pOgorICAgICAgICAo
VGVzdEZpbmQudGVzdF9oYXNoKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfcmV2aXNpb25fc3Zu
KToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfcmV2aXNpb25fZ2l0X3N2bik6CisgICAgICAgIChU
ZXN0RmluZC50ZXN0X3N0YW5kYXJkKToKKwogMjAyMC0xMC0xMyAgQWRyaWFuIFBlcmV6IGRlIENh
c3RybyAgPGFwZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBzdXBwb3J0IGZv
ciBnYW1lcGFkIHRlc3RzCkluZGV4OiBUb29scy9TY3JpcHRzL2dpdC13ZWJraXQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0CShub25leGlzdGVudCkKKysrIFRvb2xzL1Nj
cmlwdHMvZ2l0LXdlYmtpdAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisjIS91c3Iv
YmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgb3MKK2ltcG9ydCB3ZWJraXRweQoraW1wb3J0IHN5cworCitmcm9tIHdlYmtpdHNjbXB5
IGltcG9ydCBsb2NhbCwgcHJvZ3JhbQorCitzeXMuZXhpdChwcm9ncmFtLm1haW4ocmVwb3NpdG9y
eT1sb2NhbC5TY20uZnJvbV9wYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSkKKwoKUHJv
cGVydHkgY2hhbmdlcyBvbjogVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0Cl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dl
YmtpdGNvcmVweS9hcmd1bWVudHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9hcmd1bWVudHMucHkJKHJldmlzaW9uIDI2
ODM3NCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3Jl
cHkvYXJndW1lbnRzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw5IEBACiAjIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
CiBpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0Y29yZXB5IGlt
cG9ydCBsb2cKIAogCiBjbGFzcyBOb0FjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgpAQCAtMjksMyAr
MzIsNTcgQEAgY2xhc3MgTm9BY3Rpb24oYXJncGFyc2UuQWN0aW9uKToKIAogICAgIGRlZiBfX2Nh
bGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUp
OgogICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCBGYWxzZSBpZiBvcHRpb25f
c3RyaW5nLnN0YXJ0c3dpdGgoJy0tbm8nKSBlbHNlIFRydWUpCisKKworZGVmIENvdW50QWN0aW9u
KHZhbHVlPTEpOgorICAgIGNsYXNzIEFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgorICAgICAgICBk
ZWYgX19pbml0X18oc2VsZiwgb3B0aW9uX3N0cmluZ3MsIGRlc3QsICoqa3dhcmdzKToKKyAgICAg
ICAgICAgIHN1cGVyKEFjdGlvbiwgc2VsZikuX19pbml0X18ob3B0aW9uX3N0cmluZ3MsIGRlc3Qs
IG5hcmdzPTAsICoqa3dhcmdzKQorCisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIs
IG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nKToKKyAgICAgICAgICAgIHNldGF0dHIo
bmFtZXNwYWNlLCBzZWxmLmRlc3QsIGdldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QpICsgdmFs
dWUpCisKKyAgICByZXR1cm4gQWN0aW9uCisKKworZGVmIENhbGxiYWNrQWN0aW9uKGFjdGlvbiwg
Y2FsbGJhY2s9bGFtYmRhIG5hbWVzcGFjZTogTm9uZSk6CisgICAgY2xhc3MgQWN0aW9uKGFjdGlv
bik6CisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVz
LCBvcHRpb25fc3RyaW5ncyk6CisgICAgICAgICAgICBzdXBlcihBY3Rpb24sIHNlbGYpLl9fY2Fs
bF9fKHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmdzKQorICAgICAgICAg
ICAgY2FsbGJhY2sobmFtZXNwYWNlKQorCisgICAgcmV0dXJuIEFjdGlvbgorCisKK2RlZiBMb2dn
aW5nR3JvdXAocGFyc2VyLCBsb2dnZXJzPU5vbmUsIGRlZmF1bHQ9bG9nZ2luZy5XQVJOSU5HLCBo
ZWxwPSd7fSBhbW91bnQgb2YgbG9nZ2luZycpOgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcnNl
ciwgYXJncGFyc2UuQXJndW1lbnRQYXJzZXIpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdQ
cm92aWRlZCBwYXJzZXIgaXMgbm90IGEge30nLmZvcm1hdCh0eXBlKGFyZ3BhcnNlLkFyZ3VtZW50
UGFyc2VyKSkpCisKKyAgICBpZiBub3QgbG9nZ2VyczoKKyAgICAgICAgbG9nZ2VycyA9IFtsb2dn
aW5nLmdldExvZ2dlcigpLCBsb2ddCisgICAgZm9yIGxvZ2dlciBpbiBsb2dnZXJzOgorICAgICAg
ICBsb2dnZXIuc2V0TGV2ZWwoZGVmYXVsdCkKKworICAgIGRlZiB2ZXJib3NlX2NhbGxiYWNrKG5h
bWVzcGFjZSk6CisgICAgICAgIHZlcmJvc2l0eSA9IGdldGF0dHIobmFtZXNwYWNlLCAndmVyYm9z
ZScpCisgICAgICAgIGxvZ19sZXZlbCA9IGRlZmF1bHQgLSB2ZXJib3NpdHkgKiAxMAorCisgICAg
ICAgIHNldGF0dHIobmFtZXNwYWNlLCAnbG9nX2xldmVsJywgbG9nX2xldmVsKQorCisgICAgICAg
IGZvciBsb2dnZXIgaW4gbG9nZ2VyczoKKyAgICAgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2df
bGV2ZWwpCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ0xvZ2dpbmcn
KQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy0tdmVyYm9zZScsICctdicsCisg
ICAgICAgIGRlc3Q9J3ZlcmJvc2UnLCBkZWZhdWx0PTAsCisgICAgICAgIGhlbHA9aGVscC5mb3Jt
YXQoJ0luY3JlYXNlJyksCisgICAgICAgIGFjdGlvbj1DYWxsYmFja0FjdGlvbihDb3VudEFjdGlv
bih2YWx1ZT0xKSwgY2FsbGJhY2s9dmVyYm9zZV9jYWxsYmFjayksCisgICAgKQorICAgIGdyb3Vw
LmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy0tcXVpZXQnLCAnLXEnLAorICAgICAgICBkZXN0PSd2
ZXJib3NlJywgZGVmYXVsdD0wLAorICAgICAgICBoZWxwPWhlbHAuZm9ybWF0KCdEZWNyZWFzZScp
LAorICAgICAgICBhY3Rpb249Q2FsbGJhY2tBY3Rpb24oQ291bnRBY3Rpb24odmFsdWU9LTEpLCBj
YWxsYmFjaz12ZXJib3NlX2NhbGxiYWNrKSwKKyAgICApCisgICAgcmV0dXJuIGdyb3VwCkluZGV4
OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9naXQtd2Via2l0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvZ2l0LXdl
YmtpdAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKworIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgc3lzCisK
K2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IHByb2dyYW0KKworCitzeXMuZXhpdChwcm9ncmFtLm1h
aW4oKSkKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L2dpdC13ZWJraXQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAs
MCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQkocmV2aXNpb24gMjY4Mzc0
KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDggKzUzLDEwIEBAIHNldHVwKAogICAgICAgICAnd2Via2l0c2NtcHku
bG9jYWwnLAogICAgICAgICAnd2Via2l0c2NtcHkubW9ja3MnLAogICAgICAgICAnd2Via2l0c2Nt
cHkubW9ja3MubG9jYWwnLAorICAgICAgICAnd2Via2l0c2NtcHkucHJvZ3JhbScsCiAgICAgICAg
ICd3ZWJraXRzY21weS50ZXN0JywKICAgICBdLAorICAgIHNjcmlwdHM9WydnaXQtd2Via2l0J10s
CiAgICAgaW5zdGFsbF9yZXF1aXJlcz1bJ3B5dGhvbi1kYXRldXRpbCcsICd3ZWJraXRjb3JlcHkn
XSwKICAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAogICAgIHppcF9zYWZlPUZhbHNlLApJ
bmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19p
bml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI2ODM3NCkKKysrIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAg
IlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRoIGBwaXAgaW5zdGFsbCB3ZWJraXRjb3Jl
cHkgLS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAiCiAgICAgKQogCi12ZXJz
aW9uID0gVmVyc2lvbigwLCAxLCAzKQordmVyc2lvbiA9IFZlcnNpb24oMCwgMiwgMCkKIAogQXV0
b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnZGF0ZXV0aWwnLCBWZXJzaW9uKDIsIDgsIDEpLCBw
eXBpX25hbWU9J3B5dGhvbi1kYXRldXRpbCcpKQogCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jb21taXQucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29tbWl0LnB5CShy
ZXZpc2lvbiAyNjgzNzQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9jb21taXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgY2xh
c3MgQ29tbWl0KG9iamVjdCk6CiAgICAgUkVWSVNJT05fUkUgPSByZS5jb21waWxlKHInXltScl0/
KD9QPHJldmlzaW9uPlxkKykkJykKICAgICBJREVOVElGSUVSX1JFID0gcmUuY29tcGlsZShyJ14o
KD9QPGJyYW5jaF9wb2ludD5cZCspXC4pPyg/UDxpZGVudGlmaWVyPi0/XGQrKShAKD9QPGJyYW5j
aD5cUyspKT8kJykKICAgICBOVU1CRVJfUkUgPSByZS5jb21waWxlKHInXi0/XGQqJCcpCisgICAg
RElTUExBWV9TSVpFID0gMTIKIAogICAgIGNsYXNzIEVuY29kZXIoanNvbi5KU09ORW5jb2Rlcik6
CiAKQEAgLTEzMCw3ICsxMzEsNyBAQCBjbGFzcyBDb21taXQob2JqZWN0KToKICAgICAgICAgcmV0
dXJuIChpZGVudGlmaWVyWzBdLCBpZGVudGlmaWVyWzFdLCBicmFuY2gpCiAKICAgICBAY2xhc3Nt
ZXRob2QKLSAgICBkZWYgcGFyc2UoY2xzLCBhcmcpOgorICAgIGRlZiBwYXJzZShjbHMsIGFyZywg
ZG9fYXNzZXJ0PVRydWUpOgogICAgICAgICBpZiBjbHMuX3BhcnNlX2lkZW50aWZpZXIoYXJnKToK
ICAgICAgICAgICAgIHJldHVybiBDb21taXQoaWRlbnRpZmllcj1hcmcpCiAKQEAgLTE0MCw3ICsx
NDEsOSBAQCBjbGFzcyBDb21taXQob2JqZWN0KToKICAgICAgICAgaWYgY2xzLl9wYXJzZV9oYXNo
KGFyZyk6CiAgICAgICAgICAgICByZXR1cm4gQ29tbWl0KGhhc2g9YXJnKQogCi0gICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoIid7fScgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIGNvbW1pdCBvYmpl
Y3QiLmZvcm1hdChhcmcpKQorICAgICAgICBpZiBkb19hc3NlcnQ6CisgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCIne30nIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBjb21taXQgb2JqZWN0
Ii5mb3JtYXQoYXJnKSkKKyAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfX2luaXRfXygK
ICAgICAgICAgc2VsZiwKQEAgLTIxMSw3ICsyMTQsNyBAQCBjbGFzcyBDb21taXQob2JqZWN0KToK
ICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyBvbiB7fScuZm9ybWF0KHNlbGYuYnJhbmNoKQog
ICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKICAgICAgICAgaWYgc2VsZi5oYXNoOgotICAgICAg
ICAgICAgcmVzdWx0ICs9ICcgICAgZ2l0IGhhc2g6IHt9Jy5mb3JtYXQoc2VsZi5oYXNoWzoxMl0p
CisgICAgICAgICAgICByZXN1bHQgKz0gJyAgICBnaXQgaGFzaDoge30nLmZvcm1hdChzZWxmLmhh
c2hbOnNlbGYuRElTUExBWV9TSVpFXSkKICAgICAgICAgICAgIGlmIHNlbGYuYnJhbmNoOgogICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSAnIG9uIHt9Jy5mb3JtYXQoc2VsZi5icmFuY2gpCiAgICAg
ICAgICAgICByZXN1bHQgKz0gJ1xuJwpAQCAtMjQyLDcgKzI0NSw3IEBAIGNsYXNzIENvbW1pdChv
YmplY3QpOgogICAgICAgICBpZiBzZWxmLnJldmlzaW9uOgogICAgICAgICAgICAgcmV0dXJuICdy
e30nLmZvcm1hdChzZWxmLnJldmlzaW9uKQogICAgICAgICBpZiBzZWxmLmhhc2g6Ci0gICAgICAg
ICAgICByZXR1cm4gc2VsZi5oYXNoWzoxMl0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLmhhc2hb
OnNlbGYuRElTUExBWV9TSVpFXQogICAgICAgICBpZiBzZWxmLmlkZW50aWZpZXIgaXMgbm90IE5v
bmU6CiAgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYuaWRlbnRpZmllcikKICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcignSW5jb21wbGV0ZSBjb21taXQgZm9ybWF0JykKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9sb2NhbC9naXQucHkJKHJldmlzaW9uIDI2ODM3NCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMjIsNiArMjIsNyBAQAogCiAKIGltcG9ydCByZQoraW1wb3J0IHNpeAogCiBmcm9tIHdlYmtp
dGNvcmVweSBpbXBvcnQgcnVuLCBkZWNvcmF0b3JzLCBUaW1lb3V0RXhwaXJlZAogZnJvbSB3ZWJr
aXRzY21weS5sb2NhbCBpbXBvcnQgU2NtCkBAIC04Nyw2ICs4OCwxMSBAQCBjbGFzcyBHaXQoU2Nt
KToKICAgICBkZWYgZGVmYXVsdF9icmFuY2goc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IHJ1bihb
c2VsZi5leGVjdXRhYmxlLCAncmV2LXBhcnNlJywgJy0tYWJicmV2LXJlZicsICdvcmlnaW4vSEVB
RCddLCBjd2Q9c2VsZi5wYXRoLCBjYXB0dXJlX291dHB1dD1UcnVlLCBlbmNvZGluZz0ndXRmLTgn
KQogICAgICAgICBpZiByZXN1bHQucmV0dXJuY29kZToKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMg
PSBzZWxmLmJyYW5jaGVzCisgICAgICAgICAgICBpZiAnbWFzdGVyJyBpbiBjYW5kaWRhdGVzOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnbWFzdGVyJworICAgICAgICAgICAgaWYgJ21haW4nIGlu
IGNhbmRpZGF0ZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuICdtYWluJwogICAgICAgICAgICAg
cmV0dXJuIE5vbmUKICAgICAgICAgcmV0dXJuICcvJy5qb2luKHJlc3VsdC5zdGRvdXQucnN0cmlw
KCkuc3BsaXQoJy8nKVsxOl0pCiAKQEAgLTI1MCwzICsyNTYsMjQgQEAgY2xhc3MgR2l0KFNjbSk6
CiAgICAgICAgICAgICBhdXRob3I9Q29udHJpYnV0b3IuZnJvbV9zY21fbG9nKGxvZy5zdGRvdXQu
c3BsaXRsaW5lcygpWzFdKSwKICAgICAgICAgICAgIG1lc3NhZ2U9J1xuJy5qb2luKGxpbmVbNDpd
IGZvciBsaW5lIGluIGxvZy5zdGRvdXQuc3BsaXRsaW5lcygpWzQ6XSksCiAgICAgICAgICkKKwor
ICAgIGRlZiBmaW5kKHNlbGYsIGFyZ3VtZW50KToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
YXJndW1lbnQsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigiRXhwZWN0ZWQgJ2FyZ3VtZW50JyB0byBiZSBhIHN0cmluZywgbm90ICd7fSciLmZvcm1hdCh0
eXBlKGFyZ3VtZW50KSkpCisKKyAgICAgICAgcGFyc2VkX2NvbW1pdCA9IENvbW1pdC5wYXJzZShh
cmd1bWVudCwgZG9fYXNzZXJ0PUZhbHNlKQorICAgICAgICBpZiBwYXJzZWRfY29tbWl0OgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0KAorICAgICAgICAgICAgICAgIGhhc2g9cGFyc2Vk
X2NvbW1pdC5oYXNoLAorICAgICAgICAgICAgICAgIHJldmlzaW9uPXBhcnNlZF9jb21taXQucmV2
aXNpb24sCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1wYXJzZWRfY29tbWl0LmlkZW50aWZp
ZXIsCisgICAgICAgICAgICAgICAgYnJhbmNoPXBhcnNlZF9jb21taXQuYnJhbmNoLAorICAgICAg
ICAgICAgKQorCisgICAgICAgIG91dHB1dCA9IHJ1bigKKyAgICAgICAgICAgIFtzZWxmLmV4ZWN1
dGFibGUsICdyZXYtcGFyc2UnLCBhcmd1bWVudF0sCisgICAgICAgICAgICBjd2Q9c2VsZi5yb290
X3BhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcsCisgICAgICAgICkK
KyAgICAgICAgaWYgb3V0cHV0LnJldHVybmNvZGU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCIne30nIGlzIG5vdCBhbiBhcmd1ZW1lbnQgcmVjb2duaXplZCBieSBnaXQiLmZvcm1hdChh
cmd1bWVudCkpCisgICAgICAgIHJldHVybiBzZWxmLmNvbW1pdChoYXNoPW91dHB1dC5zdGRvdXQu
cnN0cmlwKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJr
aXRzY21weS9sb2NhbC9zY20ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5CShyZXZpc2lvbiAyNjgzNzQp
CisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2Nh
bC9zY20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEwICsyMywxMSBAQAogCiBpbXBvcnQgbG9n
Z2luZwogaW1wb3J0IHJlCitpbXBvcnQgc2l4CiBpbXBvcnQgc3lzCiAKIGZyb20gbG9nZ2luZyBp
bXBvcnQgTnVsbEhhbmRsZXIKLWZyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvZworZnJvbSB3ZWJr
aXRzY21weSBpbXBvcnQgbG9nLCBDb21taXQKIAogCiBjbGFzcyBTY20ob2JqZWN0KToKQEAgLTQ4
LDcgKzQ5LDcgQEAgY2xhc3MgU2NtKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gbG9jYWwu
R2l0KHBhdGgpCiAgICAgICAgIGlmIGxvY2FsLlN2bi5pc19jaGVja291dChwYXRoKToKICAgICAg
ICAgICAgIHJldHVybiBsb2NhbC5Tdm4ocGF0aCkKLSAgICAgICAgcmFpc2UgT1NFcnJvcigne30g
aXMgbm90IGEga25vd24gU0NNIHR5cGUnKQorICAgICAgICByYWlzZSBPU0Vycm9yKCIne30nIGlz
IG5vdCBhIGtub3duIFNDTSB0eXBlIi5mb3JtYXQocGF0aCkpCiAKICAgICBkZWYgX19pbml0X18o
c2VsZiwgcGF0aCwgZGV2X2JyYW5jaGVzPU5vbmUsIHByb2RfYnJhbmNoZXM9Tm9uZSk6CiAgICAg
ICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhdGgsIHN0cik6CkBAIC04OSw2ICs5MCw0NCBAQCBjbGFz
cyBTY20ob2JqZWN0KToKICAgICBkZWYgcmVtb3RlKHNlbGYsIG5hbWU9Tm9uZSk6CiAgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQogCisgICAgZGVmIGZpbmQoc2VsZiwgYXJndW1l
bnQpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmd1bWVudCwgc2l4LnN0cmluZ190eXBl
cyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCAnYXJndW1lbnQnIHRv
IGJlIGEgc3RyaW5nLCBub3QgJ3t9JyIuZm9ybWF0KHR5cGUoYXJndW1lbnQpKSkKKworICAgICAg
ICBvZmZzZXQgPSAwCisgICAgICAgIGlmICd+JyBpbiBhcmd1bWVudDoKKyAgICAgICAgICAgIGZv
ciBzIGluIGFyZ3VtZW50LnNwbGl0KCd+JylbMTpdOgorICAgICAgICAgICAgICAgIGlmIHMgYW5k
IG5vdCBzLmlzZGlnaXQoKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigi
J3t9JyBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCB0byBTY20uZmluZCgpIi5mb3JtYXQoYXJndW1l
bnQpKQorICAgICAgICAgICAgICAgIG9mZnNldCArPSBpbnQocykgaWYgcyBlbHNlIDEKKyAgICAg
ICAgICAgIGFyZ3VtZW50ID0gYXJndW1lbnQuc3BsaXQoJ34nKVswXQorCisgICAgICAgIGlmIGFy
Z3VtZW50ID09ICdIRUFEJzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuY29tbWl0KCkKKwor
ICAgICAgICBlbGlmIGFyZ3VtZW50IGluIHNlbGYuYnJhbmNoZXM6CisgICAgICAgICAgICByZXN1
bHQgPSBzZWxmLmNvbW1pdChicmFuY2g9YXJndW1lbnQpCisKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIGlmIG9mZnNldDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCInficg
b2Zmc2V0cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgcmV2aXNpb25zIGFuZCBpZGVudGlmaWVycyIp
CisKKyAgICAgICAgICAgIHBhcnNlZF9jb21taXQgPSBDb21taXQucGFyc2UoYXJndW1lbnQpCisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoCisgICAgICAgICAgICAgICAgaGFzaD1wYXJz
ZWRfY29tbWl0Lmhhc2gsCisgICAgICAgICAgICAgICAgcmV2aXNpb249cGFyc2VkX2NvbW1pdC5y
ZXZpc2lvbiwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPXBhcnNlZF9jb21taXQuaWRlbnRp
ZmllciwKKyAgICAgICAgICAgICAgICBicmFuY2g9cGFyc2VkX2NvbW1pdC5icmFuY2gsCisgICAg
ICAgICAgICApCisKKyAgICAgICAgaWYgbm90IG9mZnNldDoKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQKKworICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoCisgICAgICAgICAgICBpZGVudGlm
aWVyPXJlc3VsdC5pZGVudGlmaWVyIC0gb2Zmc2V0LAorICAgICAgICAgICAgYnJhbmNoPXJlc3Vs
dC5icmFuY2gsCisgICAgICAgICkKKwogICAgIGRlZiBjb21taXQoc2VsZiwgaGFzaD1Ob25lLCBy
ZXZpc2lvbj1Ob25lLCBpZGVudGlmaWVyPU5vbmUsIGJyYW5jaD1Ob25lKToKICAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zdm4ucHkJ
KHJldmlzaW9uIDI2ODM3NCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QCBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRyaWJ1CiAKIAogY2xhc3MgU3Zu
KFNjbSk6Ci0gICAgZXhlY3V0YWJsZSA9ICcvdXNyL2xvY2FsL2Jpbi9zdm4nCisgICAgZXhlY3V0
YWJsZSA9ICcvdXNyL2Jpbi9zdm4nIGlmIG9zLnBhdGguZXhpc3RzKCcvdXNyL2Jpbi9zdm4nKSBl
bHNlICcvdXNyL2xvY2FsL2Jpbi9zdm4nCiAgICAgTE9HX1JFID0gcmUuY29tcGlsZShyJ3IoP1A8
cmV2aXNpb24+XGQrKSBcfCAoP1A8ZW1haWw+LiopIFx8ICg/UDxkYXRlPi4qKScpCiAgICAgQ0FD
SEVfVkVSU0lPTiA9IFZlcnNpb24oMSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL2xv
Y2FsL2dpdC5weQkocmV2aXNpb24gMjY4Mzc0KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0yMjEsNiArMjIxLDEzIEBAIG5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIHRyZWUgY2xl
YW4KICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PSdvcmlnaW4ve31cbicuZm9ybWF0KGRlZmF1
bHRfYnJhbmNoKSwKICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgKSwgbW9ja3MuU3Vi
cHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBsb2NhbC5HaXQuZXhlY3V0YWJsZSwgJ3Jl
di1wYXJzZScsICcuKicsCisgICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0aCwKKyAgICAgICAg
ICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJnczogbW9ja3MuUHJvY2Vzc0Nv
bXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGU9MCwKKyAgICAgICAgICAg
ICAgICAgICAgc3Rkb3V0PSd7fVxuJy5mb3JtYXQoc2VsZi5maW5kKGFyZ3NbMl0pLmhhc2gpLAor
ICAgICAgICAgICAgICAgICkgaWYgc2VsZi5maW5kKGFyZ3NbMl0pIGVsc2UgbW9ja3MuUHJvY2Vz
c0NvbXBsZXRpb24ocmV0dXJuY29kZT0xMjgpCisgICAgICAgICAgICApLCBtb2Nrcy5TdWJwcm9j
ZXNzLlJvdXRlKAogICAgICAgICAgICAgICAgIGxvY2FsLkdpdC5leGVjdXRhYmxlLCAnbG9nJywg
cmUuY29tcGlsZShyJy4rJyksICctMScsCiAgICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0aCwK
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJnczogbW9ja3Mu
UHJvY2Vzc0NvbXBsZXRpb24oCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9wcm9ncmFtL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vX19pbml0
X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI2IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
IyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdl
YmtpdHNjbXB5LnByb2dyYW0uY29tbWFuZCBpbXBvcnQgQ29tbWFuZAorZnJvbSB3ZWJraXRzY21w
eS5wcm9ncmFtLmZpbmQgaW1wb3J0IEZpbmQKKworZnJvbSB3ZWJraXRzY21weS5wcm9ncmFtLm1h
aW4gaW1wb3J0IG1haW4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3Byb2dyYW0vY29tbWFuZC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2NvbW1hbmQucHkJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvcHJvZ3JhbS9jb21tYW5kLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
IyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHN5cworCisK
K2NsYXNzIENvbW1hbmQob2JqZWN0KToKKyAgICBuYW1lID0gTm9uZQorICAgIGhlbHAgPSBOb25l
CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcGFyc2VyKGNscywgcGFyc2VyLCByZXBvc2l0
b3J5KToKKyAgICAgICAgaWYgY2xzLm5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIE5v
dEltcGxlbWVudGVkRXJyb3IoJ0NvbW1hbmQgZG9lcyBub3QgaGF2ZSBhIG5hbWUnKQorICAgICAg
ICBpZiBjbHMuaGVscCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF
cnJvcigiJ3t9JyBkb2VzIG5vdCBoYXZlIGEgaGVscCBtZXNzYWdlIikKKworICAgIEBjbGFzc21l
dGhvZAorICAgIGRlZiBtYWluKGNscywgcmVwb3NpdG9yeSk6CisgICAgICAgIHN5cy5zdGRlcnIu
d3JpdGUoJ05vIGNvbW1hbmQgc3BlY2lmaWVkXG4nKQorICAgICAgICByZXR1cm4gLTEKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0v
ZmluZC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9wcm9ncmFtL2ZpbmQucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9maW5kLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IGpzb24KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3lzCisKK2Zy
b20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgYXJn
dW1lbnRzCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIGxvY2FsCitmcm9tIHdlYmtp
dHNjbXB5LnByb2dyYW0gaW1wb3J0IENvbW1hbmQKKworCitjbGFzcyBGaW5kKENvbW1hbmQpOgor
ICAgIG5hbWUgPSAnZmluZCcKKyAgICBoZWxwID0gJ0dpdmVuIGFuIGlkZW50aWZpZXIsIHJldmlz
aW9uIG9yIGhhc2gsIG5vcm1hbGl6ZSBhbmQgcHJpbnQgdGhlIGNvbW1pdCcKKworICAgIEBjbGFz
c21ldGhvZAorICAgIGRlZiBwYXJzZXIoY2xzLCBwYXJzZXIsIHJlcG9zaXRvcnksIGxvZ2dlcnM9
Tm9uZSk6CisgICAgICAgIGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAoCisgICAgICAgICAgICBwYXJz
ZXIsCisgICAgICAgICAgICBsb2dnZXJzPWxvZ2dlcnMsCisgICAgICAgICAgICBoZWxwPSd7fSBh
bW91bnQgb2YgbG9nZ2luZyBhbmQgY29tbWl0IGluZm9ybWF0aW9uIGRpc3BsYXllZCcKKyAgICAg
ICAgKS5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAnLS1qc29uJywgJy1qJywKKyAgICAgICAg
ICAgIGhlbHA9J0NvbnZlcnQgdGhlIGNvbW1pdCB0byBhIG1hY2hpbmUtcmVhZGFibGUgSlNPTiBv
YmplY3QnLAorICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgIGRl
c3Q9J2pzb24nLAorICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgKQorCisgICAg
ICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAnYXJndW1lbnQnLCBuYXJncz0x
LAorICAgICAgICAgICAgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgIGhlbHA9
J1N0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGNvbW1pdCBvciBicmFuY2ggdG8gYmUgbm9ybWFs
aXplZCcsCisgICAgICAgICkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWluKGNscywg
YXJncywgcmVwb3NpdG9yeSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbW1pdCA9IHJl
cG9zaXRvcnkuZmluZChhcmdzLmFyZ3VtZW50WzBdKQorICAgICAgICBleGNlcHQgKGxvY2FsLlNj
bS5FeGNlcHRpb24sIFZhbHVlRXJyb3IpIGFzIGV4Y2VwdGlvbjoKKyAgICAgICAgICAgICMgVmFs
dWVFcnJvcnMgYW5kIFNjbSBleGNlcHRpb25zIHVzdWFsbHkgY29udGFpbiBlbm91Z2ggaW5mb3Jt
YXRpb24gdG8gYmUgZGlzcGxheWVkCisgICAgICAgICAgICAjIHRvIHRoZSB1c2VyIGFzIGFuIGVy
cm9yCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHN0cihleGNlcHRpb24pICsgJ1xuJykK
KyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgaWYgYXJncy52ZXJib3NlID4gMCBhbmQg
bm90IGNvbW1pdC5tZXNzYWdlOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRmFpbGVk
IHRvIGZpbmQgdGhlICBjb21taXQgbWVzc2FnZSBmb3IgJ3t9J1xuIi5mb3JtYXQoY29tbWl0KSkK
KyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgaWYgYXJncy5qc29uOgorICAgICAgICAg
ICAgcHJpbnQoanNvbi5kdW1wcyhjb21taXQsIGNscz1Db21taXQuRW5jb2RlciwgaW5kZW50PTQp
KQorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgICAgICBpZiBhcmdzLnZlcmJvc2UgPCAwOgor
ICAgICAgICAgICAgcHJpbnQoJ3tpZGVudGlmaWVyfSB8IHtoYXNofXtyZXZpc2lvbn17dGl0bGV9
Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1jb21taXQsCisgICAgICAgICAg
ICAgICAgaGFzaD1jb21taXQuaGFzaFs6Q29tbWl0LkRJU1BMQVlfU0laRV0gaWYgY29tbWl0Lmhh
c2ggZWxzZSAnJywKKyAgICAgICAgICAgICAgICByZXZpc2lvbj0ne31ye30nLmZvcm1hdCgnLCAn
IGlmIGNvbW1pdC5oYXNoIGVsc2UgJycsIGNvbW1pdC5yZXZpc2lvbikgaWYgY29tbWl0LnJldmlz
aW9uIGVsc2UgJycsCisgICAgICAgICAgICAgICAgdGl0bGU9JyB8IHt9Jy5mb3JtYXQoY29tbWl0
Lm1lc3NhZ2Uuc3BsaXRsaW5lcygpWzBdKSBpZiBjb21taXQubWVzc2FnZSBlbHNlICcnCisgICAg
ICAgICAgICApKQorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgICAgICBpZiBjb21taXQubWVz
c2FnZToKKyAgICAgICAgICAgIHByaW50KCdUaXRsZToge30nLmZvcm1hdChjb21taXQubWVzc2Fn
ZS5zcGxpdGxpbmVzKClbMF0pKQorICAgICAgICBwcmludCgnQXV0aG9yOiB7fScuZm9ybWF0KGNv
bW1pdC5hdXRob3IpKQorICAgICAgICBwcmludCgnSWRlbnRpZmllcjoge30nLmZvcm1hdChjb21t
aXQpKQorICAgICAgICBwcmludChkYXRldGltZS5mcm9tdGltZXN0YW1wKGNvbW1pdC50aW1lc3Rh
bXApLnN0cmZ0aW1lKCdEYXRlOiAlYSAlYiAlZCAlSDolTTolUyAlWScpKQorICAgICAgICBpZiBh
cmdzLnZlcmJvc2UgPiAwIG9yIGNvbW1pdC5yZXZpc2lvbjoKKyAgICAgICAgICAgIHByaW50KCdS
ZXZpc2lvbjoge30nLmZvcm1hdChjb21taXQucmV2aXNpb24gb3IgJ04vQScpKQorICAgICAgICBp
ZiBhcmdzLnZlcmJvc2UgPiAwIG9yIGNvbW1pdC5oYXNoOgorICAgICAgICAgICAgcHJpbnQoJ0hh
c2g6IHt9Jy5mb3JtYXQoY29tbWl0Lmhhc2hbOkNvbW1pdC5ESVNQTEFZX1NJWkVdIGlmIGNvbW1p
dC5oYXNoIGVsc2UgJ04vQScpKQorCisgICAgICAgIGlmIGFyZ3MudmVyYm9zZSA+IDA6CisgICAg
ICAgICAgICBmb3IgbGluZSBpbiBjb21taXQubWVzc2FnZS5zcGxpdGxpbmVzKCk6CisgICAgICAg
ICAgICAgICAgcHJpbnQoJyAgICB7fScuZm9ybWF0KGxpbmUpKQorCisgICAgICAgIHJldHVybiAw
CkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9w
cm9ncmFtL21haW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9tYWluLnB5CShub25leGlzdGVudCkKKysrIFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vbWFp
bi5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisjIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
IyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgbG9n
Z2luZworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgYXJndW1lbnRzLCBsb2cgYXMgd2Via2l0
Y29yZXB5X2xvZworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsIGxvZworZnJvbSB3ZWJr
aXRzY21weS5wcm9ncmFtIGltcG9ydCBGaW5kCisKKworZGVmIG1haW4oYXJncz1Ob25lLCByZXBv
c2l0b3J5PU5vbmUsIGxvZ2dlcnM9Tm9uZSk6CisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZl
bD1sb2dnaW5nLldBUk5JTkcpCisKKyAgICBsb2dnZXJzID0gW2xvZ2dpbmcuZ2V0TG9nZ2VyKCks
IHdlYmtpdGNvcmVweV9sb2csICBsb2ddICsgKGxvZ2dlcnMgb3IgW10pCisKKyAgICBpZiBub3Qg
cmVwb3NpdG9yeToKKyAgICAgICAgcmVwb3NpdG9yeSA9IGxvY2FsLlNjbS5mcm9tX3BhdGgocGF0
aD1vcy5nZXRjd2QoKSkKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAor
ICAgICAgICBkZXNjcmlwdGlvbj0nQ3VzdG9tIGdpdCB0b29saW5nIGZyb20gdGhlIFdlYktpdCB0
ZWFtIHRvIGludGVyYWN0IHdpdGggYSAnICsKKyAgICAgICAgICAgICAgICAgICAgJ3JlcG9zaXRv
cnkgdXNpbmcgaWRlbnRpZmVycycsCisgICAgKQorICAgIGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAo
cGFyc2VyKQorICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoaGVscD0nc3Vi
LWNvbW1hbmQgaGVscCcpCisKKyAgICBmb3IgcHJvZ3JhbSBpbiBbRmluZF06CisgICAgICAgIHN1
YnBhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcihwcm9ncmFtLm5hbWUsIGhlbHA9cHJvZ3Jh
bS5oZWxwKQorICAgICAgICBzdWJwYXJzZXIuc2V0X2RlZmF1bHRzKG1haW49cHJvZ3JhbS5tYWlu
KQorICAgICAgICBwcm9ncmFtLnBhcnNlcihzdWJwYXJzZXIsIHJlcG9zaXRvcnk9cmVwb3NpdG9y
eSwgbG9nZ2Vycz1sb2dnZXJzKQorCisgICAgcGFyc2VkID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJn
cz1hcmdzKQorCisgICAgcmV0dXJuIHBhcnNlZC5tYWluKGFyZ3M9cGFyc2VkLCByZXBvc2l0b3J5
PXJlcG9zaXRvcnkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS90ZXN0L2ZpbmRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9maW5kX3VuaXR0ZXN0
LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3Rlc3QvZmluZF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE2NyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0
IGpzb24KK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgT3V0cHV0
Q2FwdHVyZQorZnJvbSB3ZWJraXRjb3JlcHkubW9ja3MgaW1wb3J0IFRpbWUgYXMgTW9ja1RpbWUK
K2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsLCAgcHJvZ3JhbSwgbW9ja3MKKworCitjbGFz
cyBUZXN0RmluZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcGF0aCA9ICcvbW9jay9yZXBvc2l0
b3J5JworCisgICAgZGVmIHRlc3RfYmFzaWNfZ2l0KHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tz
LmxvY2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1
dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwg
cHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJ0hFQUQnLCAnLXEn
KSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5w
YXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQu
c3Rkb3V0LmdldHZhbHVlKCksICc0QG1haW4gfCBiYWU1ZDFlOTA5OTlcbicpCisKKyAgICBkZWYg
dGVzdF9iYXNpY19naXRfc3ZuKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChz
ZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0
cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgw
LCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnSEVBRCcsICct
cScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxm
LnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJl
ZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzRAbWFpbiB8IGJhZTVkMWU5MDk5OSwgcjYgfCA2dGggY29t
bWl0XG4nKQorCisgICAgZGVmIHRlc3RfYmFzaWNfc3ZuKHNlbGYpOgorICAgICAgICB3aXRoIG1v
Y2tzLmxvY2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSwgTW9ja1RpbWUsIE91
dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJ0hFQUQnLCAn
LXEnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgoc2Vs
Zi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVy
ZWQuc3Rkb3V0LmdldHZhbHVlKCksICc0QHRydW5rIHwgcjYgfCA2dGggY29tbWl0XG4nKQorCisg
ICAgZGVmIHRlc3RfYnJhbmNoX3RpbGRlKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2Fs
LkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGlt
ZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnYnJh
bmNoLWF+MScsICctcScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZy
b21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzIuMUBicmFuY2gtYSB8IGEzMGNlODQ5
NGJmMSwgcjMgfCAzcmQgY29tbWl0XG4nKQorCisgICAgZGVmIHRlc3RfaWRlbnRpZmllcl9naXQo
c2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCksIG1vY2tzLmxv
Y2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAg
YXJncz0oJ2ZpbmQnLCAnMkBtYWluJywgJy1xJyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9y
eT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnMkBtYWluIHwg
ZmZmODNiYjJkOTE3XG4nKQorCisgICAgZGVmIHRlc3RfaWRlbnRpZmllcl9naXRfc3ZuKHNlbGYp
OgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nrcy5sb2NhbC5T
dm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9
KCdmaW5kJywgJzJAbWFpbicsICctcScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9j
YWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzJAbWFpbiB8IGZmZjgz
YmIyZDkxN1xuJykKKworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXJfc3ZuKHNlbGYpOgorICAgICAg
ICB3aXRoIG1vY2tzLmxvY2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSwgTW9j
a1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywg
JzJAdHJ1bmsnLCAnLXEnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5m
cm9tX3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICcyQHRydW5rIHwgcjIgfCAybmQgY29t
bWl0XG4nKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5s
b2NhbC5HaXQoc2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRD
YXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHBy
b2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICczY2QzMmUzNTI0MTAn
LCAnLXEnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgo
c2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2Fw
dHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICcyLjJAYnJhbmNoLWIgfCAzY2QzMmUzNTI0MTBcbicp
CisKKyAgICBkZWYgdGVzdF9yZXZpc2lvbl9zdm4oc2VsZik6CisgICAgICAgIHdpdGggbW9ja3Mu
bG9jYWwuR2l0KCksIG1vY2tzLmxvY2FsLlN2bihzZWxmLnBhdGgpLCBNb2NrVGltZSwgT3V0cHV0
Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBw
cm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAncjUnLCAnLXEnKSwK
KyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRo
KSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rk
b3V0LmdldHZhbHVlKCksICcyLjJAYnJhbmNoLWIgfCByNSB8IDV0aCBjb21taXRcbicpCisKKyAg
ICBkZWYgdGVzdF9yZXZpc2lvbl9naXRfc3ZuKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxv
Y2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2Nr
VGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAn
cjUnLCAnLXEnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3Bh
dGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Y2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICcyLjJAYnJhbmNoLWIgfCAzY2QzMmUzNTI0MTAs
IHI1IHwgNXRoIGNvbW1pdFxuJykKKworICAgIGRlZiB0ZXN0X3N0YW5kYXJkKHNlbGYpOgorICAg
ICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tz
LmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAg
ICAgYXJncz0oJ2ZpbmQnLCAnM0BtYWluJyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1s
b2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCks
CisgICAgICAgICAgICAnJydUaXRsZTogNHRoIGNvbW1pdAorQXV0aG9yOiBKb25hdGhhbiBCZWRh
cmQgPGpiZWRhcmRAYXBwbGUuY29tPgorSWRlbnRpZmllcjogM0BtYWluCitEYXRlOiBGcmkgT2N0
IDAyIDExOjIzOjIwIDIwMjAKK1JldmlzaW9uOiA0CitIYXNoOiAxYWJlMjViNDQzZTkKKycnJywK
KyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdmVyYm9zZShzZWxmKToKKyAgICAgICAgd2l0aCBt
b2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5sb2NhbC5Tdm4o
KSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdm
aW5kJywgJzNAbWFpbicsICctdicpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwu
U2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAg
ICAgICAgICAgJycnVGl0bGU6IDR0aCBjb21taXQKK0F1dGhvcjogSm9uYXRoYW4gQmVkYXJkIDxq
YmVkYXJkQGFwcGxlLmNvbT4KK0lkZW50aWZpZXI6IDNAbWFpbgorRGF0ZTogRnJpIE9jdCAwMiAx
MToyMzoyMCAyMDIwCitSZXZpc2lvbjogNAorSGFzaDogMWFiZTI1YjQ0M2U5CisgICAgNHRoIGNv
bW1pdAorICAgIHN2bi1pZDogaHR0cHM6Ly9zdm4ud2Via2l0Lm9yZ3JlcG9zaXRvcnkvcmVwb3Np
dG9yeS90cnVua0A0IDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYworJycnLAor
ICAgICAgICApCisKKyAgICBkZWYgdGVzdF9qc29uKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tz
LmxvY2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBN
b2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQn
LCAnM0BtYWluJywgJy0tanNvbicpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwu
U2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKworICAgICAgICBkZWNv
ZGVkID0ganNvbi5sb2FkcyhjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnREaWN0RXF1YWwoCisgICAgICAgICAgICBkZWNvZGVkLCBkaWN0KAorICAgICAgICAg
ICAgICAgIGlkZW50aWZpZXI9JzNAbWFpbicsCisgICAgICAgICAgICAgICAgaGFzaD0nMWFiZTI1
YjQ0M2U5ODVmOTNiOTBkODMwZTRhN2UzNzMxMzM2YWY0ZCcsCisgICAgICAgICAgICAgICAgcmV2
aXNpb249NCwKKyAgICAgICAgICAgICAgICBhdXRob3I9J2piZWRhcmRAYXBwbGUuY29tJywKKyAg
ICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2MzAwMCwKKyAgICAgICAgICAgICAgICBicmFu
Y2g9J21haW4nLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9JzR0aCBjb21taXRcbnN2bi1pZDog
aHR0cHM6Ly9zdm4ud2Via2l0Lm9yZ3JlcG9zaXRvcnkvcmVwb3NpdG9yeS90cnVua0A0IDI2OGY0
NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYycsCisgICAgICAgICAgICApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411226</attachid>
            <date>2020-10-13 09:22:15 -0700</date>
            <delta_ts>2020-10-13 13:58:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217534-20201013092214.patch</filename>
            <type>text/plain</type>
            <size>38306</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODM5NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU3IEBACisyMDIwLTEwLTEyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBgZ2l0LXdlYmtpdCBmaW5kYAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3NTM0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS83MDE1MjQzMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvZ2l0LXdlYmtpdDogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5w
eTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvYXJndW1lbnRzLnB5OgorICAgICAgICAoTm9BY3Rpb24uX19jYWxsX18p
OgorICAgICAgICAoQ291bnRBY3Rpb24pOiBDcmVhdGUgYW4gYWN0aW9uIHRvIGluY3JlbWVudCBv
ciBkZWNyZW1lbnQgYSB2YXJpYWJsZSBieSBhIHZhbHVlLgorICAgICAgICAoQ2FsbGJhY2tBY3Rp
b24pOiBDcmVhdGUgYW4gYWN0aW9uIHdoaWNoIHdpbGwgdHJpZ2dlciBhIGNhbGxiYWNrIHdoZW4g
c2V0LgorICAgICAgICAoTG9nZ2luZ0dyb3VwKTogQ3JlYXRlIGEgZ3JvdXAgd2hpY2ggYWxsb3dz
IHRoZSB1c2VyIHRvIGNoYW5nZSBsb2dnaW5nIGJlaGF2aW9yLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQ6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5OiBBZGQgd2Via2l0c2NtcHkucHJvZ3Jh
bSBhbmQgZ2l0LXdlYmtpdC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbW1pdC5weToKKyAgICAgICAg
KENvbW1pdCk6IE1ha2UgdGhlIDEyIGNoYXJhY3RlciBoYXNoIGJhc2VkIG9uIGEgY2xhc3MgdmFy
aWFibGUuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvbG9jYWwvZ2l0LnB5OgorICAgICAgICAoR2l0LmRlZmF1bHRfYnJhbmNoKTogRmFsbGJhY2sg
dG8gJ21hc3Rlcicgb3IgJ21haW4nIGlmIHRoZSByZW1vdGUgaXNuJ3QgYXZhaWxhYmxlLgorICAg
ICAgICAoR2l0LmZpbmQpOiBVc2UgZ2l0IHRvIG1hdGNoIGJyYW5jaGVzIGFuZCB0YWdzIHRvIGEg
aGFzaCBpbnN0ZWFkIG9mIHRyeWluZyB0byBkbyBpdCBvdXJzZWx2ZXMuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5OgorICAg
ICAgICAoU2NtLmZpbmQpOiBBZGQgZnVuY3Rpb24gdG8gY29udmVydCBnZW5lcmljIHN0cmluZyBh
cmd1bWVudHMgdG8gYSBjb21taXQsIGFuZCB0aGVuIGZpbmQgdGhhdCBjb21taXQgaW4KKyAgICAg
ICAgdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvbG9jYWwvc3ZuLnB5OgorICAgICAgICAoU3ZuKTogU3VwcG9ydCBhIGZl
dyBkaWZmZXJlbnQgU1ZOIGJpbmFyeSBwYXRocy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9naXQucHk6IEFkZCByZXYtcGFy
c2UgYnJhbmNoL3RhZy9IRUFEIC0+IGhhc2ggY29udmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtOiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL19f
aW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9wcm9ncmFtL2NvbW1hbmQucHk6IEFkZGVkLgorICAgICAgICAoQ29tbWFu
ZCk6IEJhc2UgY2xhc3MgZm9yIGFsbCBjb21tYW5kcy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2ZpbmQucHk6IEFkZGVkLgorICAg
ICAgICAoRmluZCk6CisgICAgICAgIChGaW5kLnBhcnNlcik6IENvbmZpZ3VyZSBwYXJzZXIgZm9y
ICdmaW5kJyBzdWItcHJvZ3JhbS4KKyAgICAgICAgKEZpbmQubWFpbik6IEdpdmVuIGFuIGlkZW50
aWZpZXIsIHJldmlzaW9uLCBoYXNoIG9yIGJyYW5jaCBuYW1lLCBmaW5kIGFuZCBwcmludCB0aGUg
bWF0Y2hpbmcgY29tbWl0IGZyb20KKyAgICAgICAgdGhlIHJlcG9zaXRvcnkgaW4gc2NvcGUuCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3Jh
bS9tYWluLnB5OiBBZGRlZC4KKyAgICAgICAgKG1haW4pOiBFbnRyeSBwb2ludCB0byBnaXQtPHBy
b2plY3Q+IHNjcmlwdHMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvdGVzdC9maW5kX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RG
aW5kKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfYmFzaWNfZ2l0KToKKyAgICAgICAgKFRlc3RG
aW5kLnRlc3RfYmFzaWNfZ2l0X3N2bik6CisgICAgICAgIChUZXN0RmluZC50ZXN0X2Jhc2ljX3N2
bik6CisgICAgICAgIChUZXN0RmluZC50ZXN0X2JyYW5jaF90aWxkZSk6CisgICAgICAgIChUZXN0
RmluZC50ZXN0X2lkZW50aWZpZXJfZ2l0KToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfaWRlbnRp
Zmllcl9naXRfc3ZuKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfaWRlbnRpZmllcl9zdm4pOgor
ICAgICAgICAoVGVzdEZpbmQudGVzdF9oYXNoKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfcmV2
aXNpb25fc3ZuKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfcmV2aXNpb25fZ2l0X3N2bik6Cisg
ICAgICAgIChUZXN0RmluZC50ZXN0X3N0YW5kYXJkKToKKwogMjAyMC0xMC0xMyAgQWRyaWFuIFBl
cmV6IGRlIENhc3RybyAgPGFwZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBz
dXBwb3J0IGZvciBnYW1lcGFkIHRlc3RzCkluZGV4OiBUb29scy9TY3JpcHRzL2dpdC13ZWJraXQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0CShub25leGlzdGVudCkKKysr
IFRvb2xzL1NjcmlwdHMvZ2l0LXdlYmtpdAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisj
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCB3ZWJraXRweQoraW1wb3J0IHN5cworCitmcm9tIHdl
YmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgcHJvZ3JhbQorCitzeXMuZXhpdChwcm9ncmFtLm1haW4o
cmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykp
KSkKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0Cl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
Y29yZXB5L3dlYmtpdGNvcmVweS9hcmd1bWVudHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9hcmd1bWVudHMucHkJKHJl
dmlzaW9uIDI2ODM3NCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93
ZWJraXRjb3JlcHkvYXJndW1lbnRzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw5IEBA
CiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogCiBpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0
Y29yZXB5IGltcG9ydCBsb2cKIAogCiBjbGFzcyBOb0FjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgpA
QCAtMjksMyArMzIsNTcgQEAgY2xhc3MgTm9BY3Rpb24oYXJncGFyc2UuQWN0aW9uKToKIAogICAg
IGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3Ry
aW5nPU5vbmUpOgogICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCBGYWxzZSBp
ZiBvcHRpb25fc3RyaW5nLnN0YXJ0c3dpdGgoJy0tbm8nKSBlbHNlIFRydWUpCisKKworZGVmIENv
dW50QWN0aW9uKHZhbHVlPTEpOgorICAgIGNsYXNzIEFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgor
ICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9uX3N0cmluZ3MsIGRlc3QsICoqa3dhcmdz
KToKKyAgICAgICAgICAgIHN1cGVyKEFjdGlvbiwgc2VsZikuX19pbml0X18ob3B0aW9uX3N0cmlu
Z3MsIGRlc3QsIG5hcmdzPTAsICoqa3dhcmdzKQorCisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxm
LCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nKToKKyAgICAgICAgICAg
IHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsIGdldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRl
c3QpICsgdmFsdWUpCisKKyAgICByZXR1cm4gQWN0aW9uCisKKworZGVmIENhbGxiYWNrQWN0aW9u
KGFjdGlvbiwgY2FsbGJhY2s9bGFtYmRhIG5hbWVzcGFjZTogTm9uZSk6CisgICAgY2xhc3MgQWN0
aW9uKGFjdGlvbik6CisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFj
ZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5ncyk6CisgICAgICAgICAgICBzdXBlcihBY3Rpb24sIHNl
bGYpLl9fY2FsbF9fKHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmdzKQor
ICAgICAgICAgICAgY2FsbGJhY2sobmFtZXNwYWNlKQorCisgICAgcmV0dXJuIEFjdGlvbgorCisK
K2RlZiBMb2dnaW5nR3JvdXAocGFyc2VyLCBsb2dnZXJzPU5vbmUsIGRlZmF1bHQ9bG9nZ2luZy5X
QVJOSU5HLCBoZWxwPSd7fSBhbW91bnQgb2YgbG9nZ2luZycpOgorICAgIGlmIG5vdCBpc2luc3Rh
bmNlKHBhcnNlciwgYXJncGFyc2UuQXJndW1lbnRQYXJzZXIpOgorICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCdQcm92aWRlZCBwYXJzZXIgaXMgbm90IGEge30nLmZvcm1hdCh0eXBlKGFyZ3BhcnNl
LkFyZ3VtZW50UGFyc2VyKSkpCisKKyAgICBpZiBub3QgbG9nZ2VyczoKKyAgICAgICAgbG9nZ2Vy
cyA9IFtsb2dnaW5nLmdldExvZ2dlcigpLCBsb2ddCisgICAgZm9yIGxvZ2dlciBpbiBsb2dnZXJz
OgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwoZGVmYXVsdCkKKworICAgIGRlZiB2ZXJib3NlX2Nh
bGxiYWNrKG5hbWVzcGFjZSk6CisgICAgICAgIHZlcmJvc2l0eSA9IGdldGF0dHIobmFtZXNwYWNl
LCAndmVyYm9zZScpCisgICAgICAgIGxvZ19sZXZlbCA9IGRlZmF1bHQgLSB2ZXJib3NpdHkgKiAx
MAorCisgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCAnbG9nX2xldmVsJywgbG9nX2xldmVsKQor
CisgICAgICAgIGZvciBsb2dnZXIgaW4gbG9nZ2VyczoKKyAgICAgICAgICAgIGxvZ2dlci5zZXRM
ZXZlbChsb2dfbGV2ZWwpCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAo
J0xvZ2dpbmcnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy0tdmVyYm9zZScs
ICctdicsCisgICAgICAgIGRlc3Q9J3ZlcmJvc2UnLCBkZWZhdWx0PTAsCisgICAgICAgIGhlbHA9
aGVscC5mb3JtYXQoJ0luY3JlYXNlJyksCisgICAgICAgIGFjdGlvbj1DYWxsYmFja0FjdGlvbihD
b3VudEFjdGlvbih2YWx1ZT0xKSwgY2FsbGJhY2s9dmVyYm9zZV9jYWxsYmFjayksCisgICAgKQor
ICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy0tcXVpZXQnLCAnLXEnLAorICAgICAg
ICBkZXN0PSd2ZXJib3NlJywgZGVmYXVsdD0wLAorICAgICAgICBoZWxwPWhlbHAuZm9ybWF0KCdE
ZWNyZWFzZScpLAorICAgICAgICBhY3Rpb249Q2FsbGJhY2tBY3Rpb24oQ291bnRBY3Rpb24odmFs
dWU9LTEpLCBjYWxsYmFjaz12ZXJib3NlX2NhbGxiYWNrKSwKKyAgICApCisgICAgcmV0dXJuIGdy
b3VwCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9naXQtd2Via2l0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13
ZWJraXQJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvZ2l0LXdlYmtpdAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgc3lzCisKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IHByb2dyYW0KKworCitzeXMuZXhpdChw
cm9ncmFtLm1haW4oKSkKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFi
bGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4
OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQkocmV2aXNp
b24gMjY4Mzc0KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDEwIEBAIHNldHVwKAogICAgICAgICAnd2Vi
a2l0c2NtcHkubG9jYWwnLAogICAgICAgICAnd2Via2l0c2NtcHkubW9ja3MnLAogICAgICAgICAn
d2Via2l0c2NtcHkubW9ja3MubG9jYWwnLAorICAgICAgICAnd2Via2l0c2NtcHkucHJvZ3JhbScs
CiAgICAgICAgICd3ZWJraXRzY21weS50ZXN0JywKICAgICBdLAorICAgIHNjcmlwdHM9WydnaXQt
d2Via2l0J10sCiAgICAgaW5zdGFsbF9yZXF1aXJlcz1bJ3B5dGhvbi1kYXRldXRpbCcsICd3ZWJr
aXRjb3JlcHknXSwKICAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAogICAgIHppcF9zYWZl
PUZhbHNlLApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI2ODM3NCkKKysr
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9f
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoK
ICAgICAgICAgIlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRoIGBwaXAgaW5zdGFsbCB3
ZWJraXRjb3JlcHkgLS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAiCiAgICAg
KQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCAxLCAzKQordmVyc2lvbiA9IFZlcnNpb24oMCwgMiwg
MCkKIAogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnZGF0ZXV0aWwnLCBWZXJzaW9uKDIs
IDgsIDEpLCBweXBpX25hbWU9J3B5dGhvbi1kYXRldXRpbCcpKQogCkluZGV4OiBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jb21taXQucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29t
bWl0LnB5CShyZXZpc2lvbiAyNjgzNzQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9jb21taXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAgY2xhc3MgQ29tbWl0KG9iamVjdCk6CiAgICAgUkVWSVNJT05fUkUgPSByZS5jb21waWxl
KHInXltScl0/KD9QPHJldmlzaW9uPlxkKykkJykKICAgICBJREVOVElGSUVSX1JFID0gcmUuY29t
cGlsZShyJ14oKD9QPGJyYW5jaF9wb2ludD5cZCspXC4pPyg/UDxpZGVudGlmaWVyPi0/XGQrKShA
KD9QPGJyYW5jaD5cUyspKT8kJykKICAgICBOVU1CRVJfUkUgPSByZS5jb21waWxlKHInXi0/XGQq
JCcpCisgICAgRElTUExBWV9TSVpFID0gMTIKIAogICAgIGNsYXNzIEVuY29kZXIoanNvbi5KU09O
RW5jb2Rlcik6CiAKQEAgLTEzMCw3ICsxMzEsNyBAQCBjbGFzcyBDb21taXQob2JqZWN0KToKICAg
ICAgICAgcmV0dXJuIChpZGVudGlmaWVyWzBdLCBpZGVudGlmaWVyWzFdLCBicmFuY2gpCiAKICAg
ICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcGFyc2UoY2xzLCBhcmcpOgorICAgIGRlZiBwYXJzZShj
bHMsIGFyZywgZG9fYXNzZXJ0PVRydWUpOgogICAgICAgICBpZiBjbHMuX3BhcnNlX2lkZW50aWZp
ZXIoYXJnKToKICAgICAgICAgICAgIHJldHVybiBDb21taXQoaWRlbnRpZmllcj1hcmcpCiAKQEAg
LTE0MCw3ICsxNDEsOSBAQCBjbGFzcyBDb21taXQob2JqZWN0KToKICAgICAgICAgaWYgY2xzLl9w
YXJzZV9oYXNoKGFyZyk6CiAgICAgICAgICAgICByZXR1cm4gQ29tbWl0KGhhc2g9YXJnKQogCi0g
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIid7fScgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIGNv
bW1pdCBvYmplY3QiLmZvcm1hdChhcmcpKQorICAgICAgICBpZiBkb19hc3NlcnQ6CisgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCIne30nIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBjb21t
aXQgb2JqZWN0Ii5mb3JtYXQoYXJnKSkKKyAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBf
X2luaXRfXygKICAgICAgICAgc2VsZiwKQEAgLTIxMSw3ICsyMTQsNyBAQCBjbGFzcyBDb21taXQo
b2JqZWN0KToKICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyBvbiB7fScuZm9ybWF0KHNlbGYu
YnJhbmNoKQogICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKICAgICAgICAgaWYgc2VsZi5oYXNo
OgotICAgICAgICAgICAgcmVzdWx0ICs9ICcgICAgZ2l0IGhhc2g6IHt9Jy5mb3JtYXQoc2VsZi5o
YXNoWzoxMl0pCisgICAgICAgICAgICByZXN1bHQgKz0gJyAgICBnaXQgaGFzaDoge30nLmZvcm1h
dChzZWxmLmhhc2hbOnNlbGYuRElTUExBWV9TSVpFXSkKICAgICAgICAgICAgIGlmIHNlbGYuYnJh
bmNoOgogICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnIG9uIHt9Jy5mb3JtYXQoc2VsZi5icmFu
Y2gpCiAgICAgICAgICAgICByZXN1bHQgKz0gJ1xuJwpAQCAtMjQyLDcgKzI0NSw3IEBAIGNsYXNz
IENvbW1pdChvYmplY3QpOgogICAgICAgICBpZiBzZWxmLnJldmlzaW9uOgogICAgICAgICAgICAg
cmV0dXJuICdye30nLmZvcm1hdChzZWxmLnJldmlzaW9uKQogICAgICAgICBpZiBzZWxmLmhhc2g6
Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5oYXNoWzoxMl0KKyAgICAgICAgICAgIHJldHVybiBz
ZWxmLmhhc2hbOnNlbGYuRElTUExBWV9TSVpFXQogICAgICAgICBpZiBzZWxmLmlkZW50aWZpZXIg
aXMgbm90IE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYuaWRlbnRpZmllcikKICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW5jb21wbGV0ZSBjb21taXQgZm9ybWF0JykKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dp
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9sb2NhbC9naXQucHkJKHJldmlzaW9uIDI2ODM3NCkKKysrIFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAKIGltcG9ydCByZQoraW1wb3J0IHNpeAogCiBm
cm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgcnVuLCBkZWNvcmF0b3JzLCBUaW1lb3V0RXhwaXJlZAog
ZnJvbSB3ZWJraXRzY21weS5sb2NhbCBpbXBvcnQgU2NtCkBAIC04Nyw2ICs4OCwxMSBAQCBjbGFz
cyBHaXQoU2NtKToKICAgICBkZWYgZGVmYXVsdF9icmFuY2goc2VsZik6CiAgICAgICAgIHJlc3Vs
dCA9IHJ1bihbc2VsZi5leGVjdXRhYmxlLCAncmV2LXBhcnNlJywgJy0tYWJicmV2LXJlZicsICdv
cmlnaW4vSEVBRCddLCBjd2Q9c2VsZi5wYXRoLCBjYXB0dXJlX291dHB1dD1UcnVlLCBlbmNvZGlu
Zz0ndXRmLTgnKQogICAgICAgICBpZiByZXN1bHQucmV0dXJuY29kZToKKyAgICAgICAgICAgIGNh
bmRpZGF0ZXMgPSBzZWxmLmJyYW5jaGVzCisgICAgICAgICAgICBpZiAnbWFzdGVyJyBpbiBjYW5k
aWRhdGVzOgorICAgICAgICAgICAgICAgIHJldHVybiAnbWFzdGVyJworICAgICAgICAgICAgaWYg
J21haW4nIGluIGNhbmRpZGF0ZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuICdtYWluJwogICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgcmV0dXJuICcvJy5qb2luKHJlc3VsdC5zdGRv
dXQucnN0cmlwKCkuc3BsaXQoJy8nKVsxOl0pCiAKQEAgLTI1MCwzICsyNTYsMjQgQEAgY2xhc3Mg
R2l0KFNjbSk6CiAgICAgICAgICAgICBhdXRob3I9Q29udHJpYnV0b3IuZnJvbV9zY21fbG9nKGxv
Zy5zdGRvdXQuc3BsaXRsaW5lcygpWzFdKSwKICAgICAgICAgICAgIG1lc3NhZ2U9J1xuJy5qb2lu
KGxpbmVbNDpdIGZvciBsaW5lIGluIGxvZy5zdGRvdXQuc3BsaXRsaW5lcygpWzQ6XSksCiAgICAg
ICAgICkKKworICAgIGRlZiBmaW5kKHNlbGYsIGFyZ3VtZW50KToKKyAgICAgICAgaWYgbm90IGlz
aW5zdGFuY2UoYXJndW1lbnQsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigiRXhwZWN0ZWQgJ2FyZ3VtZW50JyB0byBiZSBhIHN0cmluZywgbm90ICd7fSci
LmZvcm1hdCh0eXBlKGFyZ3VtZW50KSkpCisKKyAgICAgICAgcGFyc2VkX2NvbW1pdCA9IENvbW1p
dC5wYXJzZShhcmd1bWVudCwgZG9fYXNzZXJ0PUZhbHNlKQorICAgICAgICBpZiBwYXJzZWRfY29t
bWl0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0KAorICAgICAgICAgICAgICAgIGhh
c2g9cGFyc2VkX2NvbW1pdC5oYXNoLAorICAgICAgICAgICAgICAgIHJldmlzaW9uPXBhcnNlZF9j
b21taXQucmV2aXNpb24sCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1wYXJzZWRfY29tbWl0
LmlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgYnJhbmNoPXBhcnNlZF9jb21taXQuYnJhbmNo
LAorICAgICAgICAgICAgKQorCisgICAgICAgIG91dHB1dCA9IHJ1bigKKyAgICAgICAgICAgIFtz
ZWxmLmV4ZWN1dGFibGUsICdyZXYtcGFyc2UnLCBhcmd1bWVudF0sCisgICAgICAgICAgICBjd2Q9
c2VsZi5yb290X3BhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYtOCcsCisg
ICAgICAgICkKKyAgICAgICAgaWYgb3V0cHV0LnJldHVybmNvZGU6CisgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCIne30nIGlzIG5vdCBhbiBhcmd1ZW1lbnQgcmVjb2duaXplZCBieSBnaXQi
LmZvcm1hdChhcmd1bWVudCkpCisgICAgICAgIHJldHVybiBzZWxmLmNvbW1pdChoYXNoPW91dHB1
dC5zdGRvdXQucnN0cmlwKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9sb2NhbC9zY20ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5CShyZXZpc2lv
biAyNjgzNzQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9sb2NhbC9zY20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEwICsyMywxMSBAQAogCiBp
bXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCitpbXBvcnQgc2l4CiBpbXBvcnQgc3lzCiAKIGZyb20g
bG9nZ2luZyBpbXBvcnQgTnVsbEhhbmRsZXIKLWZyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvZwor
ZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9nLCBDb21taXQKIAogCiBjbGFzcyBTY20ob2JqZWN0
KToKQEAgLTQ4LDcgKzQ5LDcgQEAgY2xhc3MgU2NtKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1
cm4gbG9jYWwuR2l0KHBhdGgpCiAgICAgICAgIGlmIGxvY2FsLlN2bi5pc19jaGVja291dChwYXRo
KToKICAgICAgICAgICAgIHJldHVybiBsb2NhbC5Tdm4ocGF0aCkKLSAgICAgICAgcmFpc2UgT1NF
cnJvcigne30gaXMgbm90IGEga25vd24gU0NNIHR5cGUnKQorICAgICAgICByYWlzZSBPU0Vycm9y
KCIne30nIGlzIG5vdCBhIGtub3duIFNDTSB0eXBlIi5mb3JtYXQocGF0aCkpCiAKICAgICBkZWYg
X19pbml0X18oc2VsZiwgcGF0aCwgZGV2X2JyYW5jaGVzPU5vbmUsIHByb2RfYnJhbmNoZXM9Tm9u
ZSk6CiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhdGgsIHN0cik6CkBAIC04OSw2ICs5MCw0
NCBAQCBjbGFzcyBTY20ob2JqZWN0KToKICAgICBkZWYgcmVtb3RlKHNlbGYsIG5hbWU9Tm9uZSk6
CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQogCisgICAgZGVmIGZpbmQoc2Vs
ZiwgYXJndW1lbnQpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmd1bWVudCwgc2l4LnN0
cmluZ190eXBlcyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCAnYXJn
dW1lbnQnIHRvIGJlIGEgc3RyaW5nLCBub3QgJ3t9JyIuZm9ybWF0KHR5cGUoYXJndW1lbnQpKSkK
KworICAgICAgICBvZmZzZXQgPSAwCisgICAgICAgIGlmICd+JyBpbiBhcmd1bWVudDoKKyAgICAg
ICAgICAgIGZvciBzIGluIGFyZ3VtZW50LnNwbGl0KCd+JylbMTpdOgorICAgICAgICAgICAgICAg
IGlmIHMgYW5kIG5vdCBzLmlzZGlnaXQoKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcigiJ3t9JyBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCB0byBTY20uZmluZCgpIi5mb3Jt
YXQoYXJndW1lbnQpKQorICAgICAgICAgICAgICAgIG9mZnNldCArPSBpbnQocykgaWYgcyBlbHNl
IDEKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJndW1lbnQuc3BsaXQoJ34nKVswXQorCisgICAg
ICAgIGlmIGFyZ3VtZW50ID09ICdIRUFEJzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuY29t
bWl0KCkKKworICAgICAgICBlbGlmIGFyZ3VtZW50IGluIHNlbGYuYnJhbmNoZXM6CisgICAgICAg
ICAgICByZXN1bHQgPSBzZWxmLmNvbW1pdChicmFuY2g9YXJndW1lbnQpCisKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGlmIG9mZnNldDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCInficgb2Zmc2V0cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgcmV2aXNpb25zIGFuZCBpZGVu
dGlmaWVycyIpCisKKyAgICAgICAgICAgIHBhcnNlZF9jb21taXQgPSBDb21taXQucGFyc2UoYXJn
dW1lbnQpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoCisgICAgICAgICAgICAgICAg
aGFzaD1wYXJzZWRfY29tbWl0Lmhhc2gsCisgICAgICAgICAgICAgICAgcmV2aXNpb249cGFyc2Vk
X2NvbW1pdC5yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPXBhcnNlZF9jb21t
aXQuaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBicmFuY2g9cGFyc2VkX2NvbW1pdC5icmFu
Y2gsCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgbm90IG9mZnNldDoKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQKKworICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoCisgICAgICAgICAg
ICBpZGVudGlmaWVyPXJlc3VsdC5pZGVudGlmaWVyIC0gb2Zmc2V0LAorICAgICAgICAgICAgYnJh
bmNoPXJlc3VsdC5icmFuY2gsCisgICAgICAgICkKKwogICAgIGRlZiBjb21taXQoc2VsZiwgaGFz
aD1Ob25lLCByZXZpc2lvbj1Ob25lLCBpZGVudGlmaWVyPU5vbmUsIGJyYW5jaD1Ob25lKToKICAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2Nh
bC9zdm4ucHkJKHJldmlzaW9uIDI2ODM3NCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQCBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRyaWJ1CiAKIAog
Y2xhc3MgU3ZuKFNjbSk6Ci0gICAgZXhlY3V0YWJsZSA9ICcvdXNyL2xvY2FsL2Jpbi9zdm4nCisg
ICAgZXhlY3V0YWJsZSA9ICcvdXNyL2Jpbi9zdm4nIGlmIG9zLnBhdGguZXhpc3RzKCcvdXNyL2Jp
bi9zdm4nKSBlbHNlICcvdXNyL2xvY2FsL2Jpbi9zdm4nCiAgICAgTE9HX1JFID0gcmUuY29tcGls
ZShyJ3IoP1A8cmV2aXNpb24+XGQrKSBcfCAoP1A8ZW1haWw+LiopIFx8ICg/UDxkYXRlPi4qKScp
CiAgICAgQ0FDSEVfVkVSU0lPTiA9IFZlcnNpb24oMSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L21vY2tzL2xvY2FsL2dpdC5weQkocmV2aXNpb24gMjY4Mzc0KQorKysgVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDEzIEBAIG5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5n
IHRyZWUgY2xlYW4KICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PSdvcmlnaW4ve31cbicuZm9y
bWF0KGRlZmF1bHRfYnJhbmNoKSwKICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgKSwg
bW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBsb2NhbC5HaXQuZXhlY3V0
YWJsZSwgJ3Jldi1wYXJzZScsICcuKicsCisgICAgICAgICAgICAgICAgY3dkPXNlbGYucGF0aCwK
KyAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJnczogbW9ja3Mu
UHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGU9MCwKKyAg
ICAgICAgICAgICAgICAgICAgc3Rkb3V0PSd7fVxuJy5mb3JtYXQoc2VsZi5maW5kKGFyZ3NbMl0p
Lmhhc2gpLAorICAgICAgICAgICAgICAgICkgaWYgc2VsZi5maW5kKGFyZ3NbMl0pIGVsc2UgbW9j
a3MuUHJvY2Vzc0NvbXBsZXRpb24ocmV0dXJuY29kZT0xMjgpCisgICAgICAgICAgICApLCBtb2Nr
cy5TdWJwcm9jZXNzLlJvdXRlKAogICAgICAgICAgICAgICAgIGxvY2FsLkdpdC5leGVjdXRhYmxl
LCAnbG9nJywgcmUuY29tcGlsZShyJy4rJyksICctMScsCiAgICAgICAgICAgICAgICAgY3dkPXNl
bGYucGF0aCwKICAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJn
czogbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL19faW5pdF9fLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dy
YW0vX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI2IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
Citmcm9tIHdlYmtpdHNjbXB5LnByb2dyYW0uY29tbWFuZCBpbXBvcnQgQ29tbWFuZAorZnJvbSB3
ZWJraXRzY21weS5wcm9ncmFtLmZpbmQgaW1wb3J0IEZpbmQKKworZnJvbSB3ZWJraXRzY21weS5w
cm9ncmFtLm1haW4gaW1wb3J0IG1haW4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vY29tbWFuZC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2Nv
bW1hbmQucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jb21tYW5kLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
IyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0
IHN5cworCisKK2NsYXNzIENvbW1hbmQob2JqZWN0KToKKyAgICBuYW1lID0gTm9uZQorICAgIGhl
bHAgPSBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcGFyc2VyKGNscywgcGFyc2Vy
LCByZXBvc2l0b3J5KToKKyAgICAgICAgaWYgY2xzLm5hbWUgaXMgTm9uZToKKyAgICAgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0NvbW1hbmQgZG9lcyBub3QgaGF2ZSBhIG5hbWUn
KQorICAgICAgICBpZiBjbHMuaGVscCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcigiJ3t9JyBkb2VzIG5vdCBoYXZlIGEgaGVscCBtZXNzYWdlIikKKworICAg
IEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWluKGNscywgcmVwb3NpdG9yeSk6CisgICAgICAgIHN5
cy5zdGRlcnIud3JpdGUoJ05vIGNvbW1hbmQgc3BlY2lmaWVkXG4nKQorICAgICAgICByZXR1cm4g
LTEKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L3Byb2dyYW0vZmluZC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2ZpbmQucHkJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9m
aW5kLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGpzb24KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQg
c3lzCisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitmcm9tIHdlYmtpdGNvcmVweSBp
bXBvcnQgYXJndW1lbnRzCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIGxvY2FsCitm
cm9tIHdlYmtpdHNjbXB5LnByb2dyYW0gaW1wb3J0IENvbW1hbmQKKworCitjbGFzcyBGaW5kKENv
bW1hbmQpOgorICAgIG5hbWUgPSAnZmluZCcKKyAgICBoZWxwID0gJ0dpdmVuIGFuIGlkZW50aWZp
ZXIsIHJldmlzaW9uIG9yIGhhc2gsIG5vcm1hbGl6ZSBhbmQgcHJpbnQgdGhlIGNvbW1pdCcKKwor
ICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJzZXIoY2xzLCBwYXJzZXIsIHJlcG9zaXRvcnks
IGxvZ2dlcnM9Tm9uZSk6CisgICAgICAgIGFyZ3VtZW50cy5Mb2dnaW5nR3JvdXAoCisgICAgICAg
ICAgICBwYXJzZXIsCisgICAgICAgICAgICBsb2dnZXJzPWxvZ2dlcnMsCisgICAgICAgICAgICBo
ZWxwPSd7fSBhbW91bnQgb2YgbG9nZ2luZyBhbmQgY29tbWl0IGluZm9ybWF0aW9uIGRpc3BsYXll
ZCcKKyAgICAgICAgKS5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAnLS1qc29uJywgJy1qJywK
KyAgICAgICAgICAgIGhlbHA9J0NvbnZlcnQgdGhlIGNvbW1pdCB0byBhIG1hY2hpbmUtcmVhZGFi
bGUgSlNPTiBvYmplY3QnLAorICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAg
ICAgICAgIGRlc3Q9J2pzb24nLAorICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAg
KQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAnYXJndW1lbnQn
LCBuYXJncz0xLAorICAgICAgICAgICAgdHlwZT1zdHIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAg
ICAgIGhlbHA9J1N0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGNvbW1pdCBvciBicmFuY2ggdG8g
YmUgbm9ybWFsaXplZCcsCisgICAgICAgICkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBt
YWluKGNscywgYXJncywgcmVwb3NpdG9yeSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNv
bW1pdCA9IHJlcG9zaXRvcnkuZmluZChhcmdzLmFyZ3VtZW50WzBdKQorICAgICAgICBleGNlcHQg
KGxvY2FsLlNjbS5FeGNlcHRpb24sIFZhbHVlRXJyb3IpIGFzIGV4Y2VwdGlvbjoKKyAgICAgICAg
ICAgICMgVmFsdWVFcnJvcnMgYW5kIFNjbSBleGNlcHRpb25zIHVzdWFsbHkgY29udGFpbiBlbm91
Z2ggaW5mb3JtYXRpb24gdG8gYmUgZGlzcGxheWVkCisgICAgICAgICAgICAjIHRvIHRoZSB1c2Vy
IGFzIGFuIGVycm9yCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHN0cihleGNlcHRpb24p
ICsgJ1xuJykKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgaWYgYXJncy52ZXJib3Nl
ID4gMCBhbmQgbm90IGNvbW1pdC5tZXNzYWdlOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0
ZSgiRmFpbGVkIHRvIGZpbmQgdGhlICBjb21taXQgbWVzc2FnZSBmb3IgJ3t9J1xuIi5mb3JtYXQo
Y29tbWl0KSkKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgaWYgYXJncy5qc29uOgor
ICAgICAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhjb21taXQsIGNscz1Db21taXQuRW5jb2Rlciwg
aW5kZW50PTQpKQorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgICAgICBpZiBhcmdzLnZlcmJv
c2UgPCAwOgorICAgICAgICAgICAgcHJpbnQoJ3tpZGVudGlmaWVyfSB8IHtoYXNofXtyZXZpc2lv
bn17dGl0bGV9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1jb21taXQsCisg
ICAgICAgICAgICAgICAgaGFzaD1jb21taXQuaGFzaFs6Q29tbWl0LkRJU1BMQVlfU0laRV0gaWYg
Y29tbWl0Lmhhc2ggZWxzZSAnJywKKyAgICAgICAgICAgICAgICByZXZpc2lvbj0ne31ye30nLmZv
cm1hdCgnLCAnIGlmIGNvbW1pdC5oYXNoIGVsc2UgJycsIGNvbW1pdC5yZXZpc2lvbikgaWYgY29t
bWl0LnJldmlzaW9uIGVsc2UgJycsCisgICAgICAgICAgICAgICAgdGl0bGU9JyB8IHt9Jy5mb3Jt
YXQoY29tbWl0Lm1lc3NhZ2Uuc3BsaXRsaW5lcygpWzBdKSBpZiBjb21taXQubWVzc2FnZSBlbHNl
ICcnCisgICAgICAgICAgICApKQorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgICAgICBpZiBj
b21taXQubWVzc2FnZToKKyAgICAgICAgICAgIHByaW50KCdUaXRsZToge30nLmZvcm1hdChjb21t
aXQubWVzc2FnZS5zcGxpdGxpbmVzKClbMF0pKQorICAgICAgICBwcmludCgnQXV0aG9yOiB7fScu
Zm9ybWF0KGNvbW1pdC5hdXRob3IpKQorICAgICAgICBwcmludCgnSWRlbnRpZmllcjoge30nLmZv
cm1hdChjb21taXQpKQorICAgICAgICBwcmludChkYXRldGltZS5mcm9tdGltZXN0YW1wKGNvbW1p
dC50aW1lc3RhbXApLnN0cmZ0aW1lKCdEYXRlOiAlYSAlYiAlZCAlSDolTTolUyAlWScpKQorICAg
ICAgICBpZiBhcmdzLnZlcmJvc2UgPiAwIG9yIGNvbW1pdC5yZXZpc2lvbjoKKyAgICAgICAgICAg
IHByaW50KCdSZXZpc2lvbjoge30nLmZvcm1hdChjb21taXQucmV2aXNpb24gb3IgJ04vQScpKQor
ICAgICAgICBpZiBhcmdzLnZlcmJvc2UgPiAwIG9yIGNvbW1pdC5oYXNoOgorICAgICAgICAgICAg
cHJpbnQoJ0hhc2g6IHt9Jy5mb3JtYXQoY29tbWl0Lmhhc2hbOkNvbW1pdC5ESVNQTEFZX1NJWkVd
IGlmIGNvbW1pdC5oYXNoIGVsc2UgJ04vQScpKQorCisgICAgICAgIGlmIGFyZ3MudmVyYm9zZSA+
IDA6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBjb21taXQubWVzc2FnZS5zcGxpdGxpbmVzKCk6
CisgICAgICAgICAgICAgICAgcHJpbnQoJyAgICB7fScuZm9ybWF0KGxpbmUpKQorCisgICAgICAg
IHJldHVybiAwCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJr
aXRzY21weS9wcm9ncmFtL21haW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9tYWluLnB5CShub25leGlzdGVu
dCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3By
b2dyYW0vbWFpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisjIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IG9zCitp
bXBvcnQgbG9nZ2luZworCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgYXJndW1lbnRzLCBsb2cg
YXMgd2Via2l0Y29yZXB5X2xvZworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsIGxvZwor
ZnJvbSB3ZWJraXRzY21weS5wcm9ncmFtIGltcG9ydCBGaW5kCisKKworZGVmIG1haW4oYXJncz1O
b25lLCByZXBvc2l0b3J5PU5vbmUsIGxvZ2dlcnM9Tm9uZSk6CisgICAgbG9nZ2luZy5iYXNpY0Nv
bmZpZyhsZXZlbD1sb2dnaW5nLldBUk5JTkcpCisKKyAgICBsb2dnZXJzID0gW2xvZ2dpbmcuZ2V0
TG9nZ2VyKCksIHdlYmtpdGNvcmVweV9sb2csICBsb2ddICsgKGxvZ2dlcnMgb3IgW10pCisKKyAg
ICBpZiBub3QgcmVwb3NpdG9yeToKKyAgICAgICAgcmVwb3NpdG9yeSA9IGxvY2FsLlNjbS5mcm9t
X3BhdGgocGF0aD1vcy5nZXRjd2QoKSkKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50
UGFyc2VyKAorICAgICAgICBkZXNjcmlwdGlvbj0nQ3VzdG9tIGdpdCB0b29saW5nIGZyb20gdGhl
IFdlYktpdCB0ZWFtIHRvIGludGVyYWN0IHdpdGggYSAnICsKKyAgICAgICAgICAgICAgICAgICAg
J3JlcG9zaXRvcnkgdXNpbmcgaWRlbnRpZmVycycsCisgICAgKQorICAgIGFyZ3VtZW50cy5Mb2dn
aW5nR3JvdXAocGFyc2VyKQorICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMo
aGVscD0nc3ViLWNvbW1hbmQgaGVscCcpCisKKyAgICBmb3IgcHJvZ3JhbSBpbiBbRmluZF06Cisg
ICAgICAgIHN1YnBhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcihwcm9ncmFtLm5hbWUsIGhl
bHA9cHJvZ3JhbS5oZWxwKQorICAgICAgICBzdWJwYXJzZXIuc2V0X2RlZmF1bHRzKG1haW49cHJv
Z3JhbS5tYWluKQorICAgICAgICBwcm9ncmFtLnBhcnNlcihzdWJwYXJzZXIsIHJlcG9zaXRvcnk9
cmVwb3NpdG9yeSwgbG9nZ2Vycz1sb2dnZXJzKQorCisgICAgcGFyc2VkID0gcGFyc2VyLnBhcnNl
X2FyZ3MoYXJncz1hcmdzKQorCisgICAgcmV0dXJuIHBhcnNlZC5tYWluKGFyZ3M9cGFyc2VkLCBy
ZXBvc2l0b3J5PXJlcG9zaXRvcnkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS90ZXN0L2ZpbmRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9maW5k
X3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZmluZF91bml0dGVzdC5weQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE2NyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworaW1wb3J0IGpzb24KK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdGNvcmVweSBpbXBv
cnQgT3V0cHV0Q2FwdHVyZQorZnJvbSB3ZWJraXRjb3JlcHkubW9ja3MgaW1wb3J0IFRpbWUgYXMg
TW9ja1RpbWUKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsLCAgcHJvZ3JhbSwgbW9ja3MK
KworCitjbGFzcyBUZXN0RmluZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcGF0aCA9ICcvbW9j
ay9yZXBvc2l0b3J5JworCisgICAgZGVmIHRlc3RfYmFzaWNfZ2l0KHNlbGYpOgorICAgICAgICB3
aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1Rp
bWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJ0hF
QUQnLCAnLXEnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3Bh
dGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Y2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICc0QG1haW4gfCBiYWU1ZDFlOTA5OTlcbicpCisK
KyAgICBkZWYgdGVzdF9iYXNpY19naXRfc3ZuKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxv
Y2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2Nr
VGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAn
SEVBRCcsICctcScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21f
cGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzRAbWFpbiB8IGJhZTVkMWU5MDk5OSwgcjYg
fCA2dGggY29tbWl0XG4nKQorCisgICAgZGVmIHRlc3RfYmFzaWNfc3ZuKHNlbGYpOgorICAgICAg
ICB3aXRoIG1vY2tzLmxvY2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSwgTW9j
a1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywg
J0hFQUQnLCAnLXEnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9t
X3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICc0QHRydW5rIHwgcjYgfCA2dGggY29tbWl0
XG4nKQorCisgICAgZGVmIHRlc3RfYnJhbmNoX3RpbGRlKHNlbGYpOgorICAgICAgICB3aXRoIG1v
Y2tzLmxvY2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigp
LCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2Zp
bmQnLCAnYnJhbmNoLWF+MScsICctcScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9j
YWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzIuMUBicmFuY2gtYSB8
IGEzMGNlODQ5NGJmMSwgcjMgfCAzcmQgY29tbWl0XG4nKQorCisgICAgZGVmIHRlc3RfaWRlbnRp
Zmllcl9naXQoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCks
IG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVk
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAg
ICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnMkBtYWluJywgJy1xJyksCisgICAgICAgICAgICAgICAg
cmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICAp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAn
MkBtYWluIHwgZmZmODNiYjJkOTE3XG4nKQorCisgICAgZGVmIHRlc3RfaWRlbnRpZmllcl9naXRf
c3ZuKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nr
cy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAg
ICAgIGFyZ3M9KCdmaW5kJywgJzJAbWFpbicsICctcScpLAorICAgICAgICAgICAgICAgIHJlcG9z
aXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzJAbWFp
biB8IGZmZjgzYmIyZDkxN1xuJykKKworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXJfc3ZuKHNlbGYp
OgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4oc2VsZi5w
YXRoKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9
KCdmaW5kJywgJzJAdHJ1bmsnLCAnLXEnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxv
Y2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICcyQHRydW5rIHwgcjIg
fCAybmQgY29tbWl0XG4nKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgd2l0
aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1l
LCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICczY2Qz
MmUzNTI0MTAnLCAnLXEnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5m
cm9tX3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICcyLjJAYnJhbmNoLWIgfCAzY2QzMmUz
NTI0MTBcbicpCisKKyAgICBkZWYgdGVzdF9yZXZpc2lvbl9zdm4oc2VsZik6CisgICAgICAgIHdp
dGggbW9ja3MubG9jYWwuR2l0KCksIG1vY2tzLmxvY2FsLlN2bihzZWxmLnBhdGgpLCBNb2NrVGlt
ZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAncjUn
LCAnLXEnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgo
c2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2Fw
dHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICcyLjJAYnJhbmNoLWIgfCByNSB8IDV0aCBjb21taXRc
bicpCisKKyAgICBkZWYgdGVzdF9yZXZpc2lvbl9naXRfc3ZuKHNlbGYpOgorICAgICAgICB3aXRo
IG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2
bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0o
J2ZpbmQnLCAncjUnLCAnLXEnKSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5PWxvY2FsLlNj
bS5mcm9tX3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICcyLjJAYnJhbmNoLWIgfCAzY2Qz
MmUzNTI0MTAsIHI1IHwgNXRoIGNvbW1pdFxuJykKKworICAgIGRlZiB0ZXN0X3N0YW5kYXJkKHNl
bGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1
ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1
cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAg
ICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnM0BtYWluJyksCisgICAgICAgICAgICAgICAgcmVw
b3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2FwdHVyZWQuc3Rkb3V0Lmdl
dHZhbHVlKCksCisgICAgICAgICAgICAnJydUaXRsZTogNHRoIGNvbW1pdAorQXV0aG9yOiBKb25h
dGhhbiBCZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29tPgorSWRlbnRpZmllcjogM0BtYWluCitEYXRl
OiBGcmkgT2N0IDAyIDExOjIzOjIwIDIwMjAKK1JldmlzaW9uOiA0CitIYXNoOiAxYWJlMjViNDQz
ZTkKKycnJywKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdmVyYm9zZShzZWxmKToKKyAgICAg
ICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5s
b2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAg
IGFyZ3M9KCdmaW5kJywgJzNAbWFpbicsICctdicpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRv
cnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1
ZSgpLAorICAgICAgICAgICAgJycnVGl0bGU6IDR0aCBjb21taXQKK0F1dGhvcjogSm9uYXRoYW4g
QmVkYXJkIDxqYmVkYXJkQGFwcGxlLmNvbT4KK0lkZW50aWZpZXI6IDNAbWFpbgorRGF0ZTogRnJp
IE9jdCAwMiAxMToyMzoyMCAyMDIwCitSZXZpc2lvbjogNAorSGFzaDogMWFiZTI1YjQ0M2U5Cisg
ICAgNHRoIGNvbW1pdAorICAgIHN2bi1pZDogaHR0cHM6Ly9zdm4ud2Via2l0Lm9yZ3JlcG9zaXRv
cnkvcmVwb3NpdG9yeS90cnVua0A0IDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJm
YworJycnLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9qc29uKHNlbGYpOgorICAgICAgICB3
aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2Fs
LlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJn
cz0oJ2ZpbmQnLCAnM0BtYWluJywgJy0tanNvbicpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRv
cnk9bG9jYWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKworICAg
ICAgICBkZWNvZGVkID0ganNvbi5sb2FkcyhjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoCisgICAgICAgICAgICBkZWNvZGVkLCBkaWN0KAor
ICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9JzNAbWFpbicsCisgICAgICAgICAgICAgICAgaGFz
aD0nMWFiZTI1YjQ0M2U5ODVmOTNiOTBkODMwZTRhN2UzNzMxMzM2YWY0ZCcsCisgICAgICAgICAg
ICAgICAgcmV2aXNpb249NCwKKyAgICAgICAgICAgICAgICBhdXRob3I9J2piZWRhcmRAYXBwbGUu
Y29tJywKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2MzAwMCwKKyAgICAgICAgICAg
ICAgICBicmFuY2g9J21haW4nLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9JzR0aCBjb21taXRc
bnN2bi1pZDogaHR0cHM6Ly9zdm4ud2Via2l0Lm9yZ3JlcG9zaXRvcnkvcmVwb3NpdG9yeS90cnVu
a0A0IDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYycsCisgICAgICAgICAgICAp
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411250</attachid>
            <date>2020-10-13 13:58:53 -0700</date>
            <delta_ts>2020-10-13 15:48:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217534-20201013135851.patch</filename>
            <type>text/plain</type>
            <size>38305</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODM5NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU3IEBACisyMDIwLTEwLTEyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBgZ2l0LXdlYmtpdCBmaW5kYAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3NTM0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS83MDE1MjQzMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvZ2l0LXdlYmtpdDogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5w
eTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvYXJndW1lbnRzLnB5OgorICAgICAgICAoTm9BY3Rpb24uX19jYWxsX18p
OgorICAgICAgICAoQ291bnRBY3Rpb24pOiBDcmVhdGUgYW4gYWN0aW9uIHRvIGluY3JlbWVudCBv
ciBkZWNyZW1lbnQgYSB2YXJpYWJsZSBieSBhIHZhbHVlLgorICAgICAgICAoQ2FsbGJhY2tBY3Rp
b24pOiBDcmVhdGUgYW4gYWN0aW9uIHdoaWNoIHdpbGwgdHJpZ2dlciBhIGNhbGxiYWNrIHdoZW4g
c2V0LgorICAgICAgICAoTG9nZ2luZ0dyb3VwKTogQ3JlYXRlIGEgZ3JvdXAgd2hpY2ggYWxsb3dz
IHRoZSB1c2VyIHRvIGNoYW5nZSBsb2dnaW5nIGJlaGF2aW9yLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQ6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5OiBBZGQgd2Via2l0c2NtcHkucHJvZ3Jh
bSBhbmQgZ2l0LXdlYmtpdC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9fX2luaXRfXy5weTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbW1pdC5weToKKyAgICAgICAg
KENvbW1pdCk6IE1ha2UgdGhlIDEyIGNoYXJhY3RlciBoYXNoIGJhc2VkIG9uIGEgY2xhc3MgdmFy
aWFibGUuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvbG9jYWwvZ2l0LnB5OgorICAgICAgICAoR2l0LmRlZmF1bHRfYnJhbmNoKTogRmFsbGJhY2sg
dG8gJ21hc3Rlcicgb3IgJ21haW4nIGlmIHRoZSByZW1vdGUgaXNuJ3QgYXZhaWxhYmxlLgorICAg
ICAgICAoR2l0LmZpbmQpOiBVc2UgZ2l0IHRvIG1hdGNoIGJyYW5jaGVzIGFuZCB0YWdzIHRvIGEg
aGFzaCBpbnN0ZWFkIG9mIHRyeWluZyB0byBkbyBpdCBvdXJzZWx2ZXMuCisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5OgorICAg
ICAgICAoU2NtLmZpbmQpOiBBZGQgZnVuY3Rpb24gdG8gY29udmVydCBnZW5lcmljIHN0cmluZyBh
cmd1bWVudHMgdG8gYSBjb21taXQsIGFuZCB0aGVuIGZpbmQgdGhhdCBjb21taXQgaW4KKyAgICAg
ICAgdGhlIHJlcG9zaXRvcnkuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvbG9jYWwvc3ZuLnB5OgorICAgICAgICAoU3ZuKTogU3VwcG9ydCBhIGZl
dyBkaWZmZXJlbnQgU1ZOIGJpbmFyeSBwYXRocy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9sb2NhbC9naXQucHk6IEFkZCByZXYtcGFy
c2UgYnJhbmNoL3RhZy9IRUFEIC0+IGhhc2ggY29udmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtOiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL19f
aW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9wcm9ncmFtL2NvbW1hbmQucHk6IEFkZGVkLgorICAgICAgICAoQ29tbWFu
ZCk6IEJhc2UgY2xhc3MgZm9yIGFsbCBjb21tYW5kcy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2ZpbmQucHk6IEFkZGVkLgorICAg
ICAgICAoRmluZCk6CisgICAgICAgIChGaW5kLnBhcnNlcik6IENvbmZpZ3VyZSBwYXJzZXIgZm9y
ICdmaW5kJyBzdWItcHJvZ3JhbS4KKyAgICAgICAgKEZpbmQubWFpbik6IEdpdmVuIGFuIGlkZW50
aWZpZXIsIHJldmlzaW9uLCBoYXNoIG9yIGJyYW5jaCBuYW1lLCBmaW5kIGFuZCBwcmludCB0aGUg
bWF0Y2hpbmcgY29tbWl0IGZyb20KKyAgICAgICAgdGhlIHJlcG9zaXRvcnkgaW4gc2NvcGUuCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3Jh
bS9tYWluLnB5OiBBZGRlZC4KKyAgICAgICAgKG1haW4pOiBFbnRyeSBwb2ludCB0byBnaXQtPHBy
b2plY3Q+IHNjcmlwdHMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvdGVzdC9maW5kX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RG
aW5kKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfYmFzaWNfZ2l0KToKKyAgICAgICAgKFRlc3RG
aW5kLnRlc3RfYmFzaWNfZ2l0X3N2bik6CisgICAgICAgIChUZXN0RmluZC50ZXN0X2Jhc2ljX3N2
bik6CisgICAgICAgIChUZXN0RmluZC50ZXN0X2JyYW5jaF90aWxkZSk6CisgICAgICAgIChUZXN0
RmluZC50ZXN0X2lkZW50aWZpZXJfZ2l0KToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfaWRlbnRp
Zmllcl9naXRfc3ZuKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfaWRlbnRpZmllcl9zdm4pOgor
ICAgICAgICAoVGVzdEZpbmQudGVzdF9oYXNoKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfcmV2
aXNpb25fc3ZuKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfcmV2aXNpb25fZ2l0X3N2bik6Cisg
ICAgICAgIChUZXN0RmluZC50ZXN0X3N0YW5kYXJkKToKKwogMjAyMC0xMC0xMyAgQWRyaWFuIFBl
cmV6IGRlIENhc3RybyAgPGFwZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBz
dXBwb3J0IGZvciBnYW1lcGFkIHRlc3RzCkluZGV4OiBUb29scy9TY3JpcHRzL2dpdC13ZWJraXQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0CShub25leGlzdGVudCkKKysr
IFRvb2xzL1NjcmlwdHMvZ2l0LXdlYmtpdAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisj
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCB3ZWJraXRweQoraW1wb3J0IHN5cworCitmcm9tIHdl
YmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgcHJvZ3JhbQorCitzeXMuZXhpdChwcm9ncmFtLm1haW4o
cmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykp
KSkKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0Cl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
Y29yZXB5L3dlYmtpdGNvcmVweS9hcmd1bWVudHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9hcmd1bWVudHMucHkJKHJl
dmlzaW9uIDI2ODM3NCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93
ZWJraXRjb3JlcHkvYXJndW1lbnRzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw5IEBA
CiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogCiBpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0
Y29yZXB5IGltcG9ydCBsb2cKIAogCiBjbGFzcyBOb0FjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgpA
QCAtMjksMyArMzIsNTcgQEAgY2xhc3MgTm9BY3Rpb24oYXJncGFyc2UuQWN0aW9uKToKIAogICAg
IGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3Ry
aW5nPU5vbmUpOgogICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCBGYWxzZSBp
ZiBvcHRpb25fc3RyaW5nLnN0YXJ0c3dpdGgoJy0tbm8nKSBlbHNlIFRydWUpCisKKworZGVmIENv
dW50QWN0aW9uKHZhbHVlPTEpOgorICAgIGNsYXNzIEFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgor
ICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9uX3N0cmluZ3MsIGRlc3QsICoqa3dhcmdz
KToKKyAgICAgICAgICAgIHN1cGVyKEFjdGlvbiwgc2VsZikuX19pbml0X18ob3B0aW9uX3N0cmlu
Z3MsIGRlc3QsIG5hcmdzPTAsICoqa3dhcmdzKQorCisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxm
LCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nKToKKyAgICAgICAgICAg
IHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsIGdldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRl
c3QpICsgdmFsdWUpCisKKyAgICByZXR1cm4gQWN0aW9uCisKKworZGVmIENhbGxiYWNrQWN0aW9u
KGFjdGlvbiwgY2FsbGJhY2s9bGFtYmRhIG5hbWVzcGFjZTogTm9uZSk6CisgICAgY2xhc3MgQWN0
aW9uKGFjdGlvbik6CisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFj
ZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5ncyk6CisgICAgICAgICAgICBzdXBlcihBY3Rpb24sIHNl
bGYpLl9fY2FsbF9fKHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmdzKQor
ICAgICAgICAgICAgY2FsbGJhY2sobmFtZXNwYWNlKQorCisgICAgcmV0dXJuIEFjdGlvbgorCisK
K2RlZiBMb2dnaW5nR3JvdXAocGFyc2VyLCBsb2dnZXJzPU5vbmUsIGRlZmF1bHQ9bG9nZ2luZy5X
QVJOSU5HLCBoZWxwPSd7fSBhbW91bnQgb2YgbG9nZ2luZycpOgorICAgIGlmIG5vdCBpc2luc3Rh
bmNlKHBhcnNlciwgYXJncGFyc2UuQXJndW1lbnRQYXJzZXIpOgorICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCdQcm92aWRlZCBwYXJzZXIgaXMgbm90IGEge30nLmZvcm1hdCh0eXBlKGFyZ3BhcnNl
LkFyZ3VtZW50UGFyc2VyKSkpCisKKyAgICBpZiBub3QgbG9nZ2VyczoKKyAgICAgICAgbG9nZ2Vy
cyA9IFtsb2dnaW5nLmdldExvZ2dlcigpLCBsb2ddCisgICAgZm9yIGxvZ2dlciBpbiBsb2dnZXJz
OgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwoZGVmYXVsdCkKKworICAgIGRlZiB2ZXJib3NlX2Nh
bGxiYWNrKG5hbWVzcGFjZSk6CisgICAgICAgIHZlcmJvc2l0eSA9IGdldGF0dHIobmFtZXNwYWNl
LCAndmVyYm9zZScpCisgICAgICAgIGxvZ19sZXZlbCA9IGRlZmF1bHQgLSB2ZXJib3NpdHkgKiAx
MAorCisgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCAnbG9nX2xldmVsJywgbG9nX2xldmVsKQor
CisgICAgICAgIGZvciBsb2dnZXIgaW4gbG9nZ2VyczoKKyAgICAgICAgICAgIGxvZ2dlci5zZXRM
ZXZlbChsb2dfbGV2ZWwpCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAo
J0xvZ2dpbmcnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy0tdmVyYm9zZScs
ICctdicsCisgICAgICAgIGRlc3Q9J3ZlcmJvc2UnLCBkZWZhdWx0PTAsCisgICAgICAgIGhlbHA9
aGVscC5mb3JtYXQoJ0luY3JlYXNlJyksCisgICAgICAgIGFjdGlvbj1DYWxsYmFja0FjdGlvbihD
b3VudEFjdGlvbih2YWx1ZT0xKSwgY2FsbGJhY2s9dmVyYm9zZV9jYWxsYmFjayksCisgICAgKQor
ICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy0tcXVpZXQnLCAnLXEnLAorICAgICAg
ICBkZXN0PSd2ZXJib3NlJywgZGVmYXVsdD0wLAorICAgICAgICBoZWxwPWhlbHAuZm9ybWF0KCdE
ZWNyZWFzZScpLAorICAgICAgICBhY3Rpb249Q2FsbGJhY2tBY3Rpb24oQ291bnRBY3Rpb24odmFs
dWU9LTEpLCBjYWxsYmFjaz12ZXJib3NlX2NhbGxiYWNrKSwKKyAgICApCisgICAgcmV0dXJuIGdy
b3VwCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9naXQtd2Via2l0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13
ZWJraXQJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvZ2l0LXdlYmtpdAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgc3lzCisKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IHByb2dyYW0KKworCitzeXMuZXhpdChw
cm9ncmFtLm1haW4oKSkKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFi
bGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4
OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQkocmV2aXNp
b24gMjY4Mzc0KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvc2V0dXAu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDEwIEBAIHNldHVwKAogICAgICAgICAnd2Vi
a2l0c2NtcHkubG9jYWwnLAogICAgICAgICAnd2Via2l0c2NtcHkubW9ja3MnLAogICAgICAgICAn
d2Via2l0c2NtcHkubW9ja3MubG9jYWwnLAorICAgICAgICAnd2Via2l0c2NtcHkucHJvZ3JhbScs
CiAgICAgICAgICd3ZWJraXRzY21weS50ZXN0JywKICAgICBdLAorICAgIHNjcmlwdHM9WydnaXQt
d2Via2l0J10sCiAgICAgaW5zdGFsbF9yZXF1aXJlcz1bJ3B5dGhvbi1kYXRldXRpbCcsICd3ZWJr
aXRjb3JlcHknXSwKICAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAogICAgIHppcF9zYWZl
PUZhbHNlLApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI2ODM3NCkKKysr
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9f
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoK
ICAgICAgICAgIlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRoIGBwaXAgaW5zdGFsbCB3
ZWJraXRjb3JlcHkgLS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAiCiAgICAg
KQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCAxLCAzKQordmVyc2lvbiA9IFZlcnNpb24oMCwgMiwg
MCkKIAogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnZGF0ZXV0aWwnLCBWZXJzaW9uKDIs
IDgsIDEpLCBweXBpX25hbWU9J3B5dGhvbi1kYXRldXRpbCcpKQogCkluZGV4OiBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jb21taXQucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29t
bWl0LnB5CShyZXZpc2lvbiAyNjgzNzQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9jb21taXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAgY2xhc3MgQ29tbWl0KG9iamVjdCk6CiAgICAgUkVWSVNJT05fUkUgPSByZS5jb21waWxl
KHInXltScl0/KD9QPHJldmlzaW9uPlxkKykkJykKICAgICBJREVOVElGSUVSX1JFID0gcmUuY29t
cGlsZShyJ14oKD9QPGJyYW5jaF9wb2ludD5cZCspXC4pPyg/UDxpZGVudGlmaWVyPi0/XGQrKShA
KD9QPGJyYW5jaD5cUyspKT8kJykKICAgICBOVU1CRVJfUkUgPSByZS5jb21waWxlKHInXi0/XGQq
JCcpCisgICAgSEFTSF9MQUJFTF9TSVpFID0gMTIKIAogICAgIGNsYXNzIEVuY29kZXIoanNvbi5K
U09ORW5jb2Rlcik6CiAKQEAgLTEzMCw3ICsxMzEsNyBAQCBjbGFzcyBDb21taXQob2JqZWN0KToK
ICAgICAgICAgcmV0dXJuIChpZGVudGlmaWVyWzBdLCBpZGVudGlmaWVyWzFdLCBicmFuY2gpCiAK
ICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcGFyc2UoY2xzLCBhcmcpOgorICAgIGRlZiBwYXJz
ZShjbHMsIGFyZywgZG9fYXNzZXJ0PVRydWUpOgogICAgICAgICBpZiBjbHMuX3BhcnNlX2lkZW50
aWZpZXIoYXJnKToKICAgICAgICAgICAgIHJldHVybiBDb21taXQoaWRlbnRpZmllcj1hcmcpCiAK
QEAgLTE0MCw3ICsxNDEsOSBAQCBjbGFzcyBDb21taXQob2JqZWN0KToKICAgICAgICAgaWYgY2xz
Ll9wYXJzZV9oYXNoKGFyZyk6CiAgICAgICAgICAgICByZXR1cm4gQ29tbWl0KGhhc2g9YXJnKQog
Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIid7fScgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBh
IGNvbW1pdCBvYmplY3QiLmZvcm1hdChhcmcpKQorICAgICAgICBpZiBkb19hc3NlcnQ6CisgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIne30nIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBj
b21taXQgb2JqZWN0Ii5mb3JtYXQoYXJnKSkKKyAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRl
ZiBfX2luaXRfXygKICAgICAgICAgc2VsZiwKQEAgLTIxMSw3ICsyMTQsNyBAQCBjbGFzcyBDb21t
aXQob2JqZWN0KToKICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyBvbiB7fScuZm9ybWF0KHNl
bGYuYnJhbmNoKQogICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKICAgICAgICAgaWYgc2VsZi5o
YXNoOgotICAgICAgICAgICAgcmVzdWx0ICs9ICcgICAgZ2l0IGhhc2g6IHt9Jy5mb3JtYXQoc2Vs
Zi5oYXNoWzoxMl0pCisgICAgICAgICAgICByZXN1bHQgKz0gJyAgICBnaXQgaGFzaDoge30nLmZv
cm1hdChzZWxmLmhhc2hbOnNlbGYuSEFTSF9MQUJFTF9TSVpFXSkKICAgICAgICAgICAgIGlmIHNl
bGYuYnJhbmNoOgogICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnIG9uIHt9Jy5mb3JtYXQoc2Vs
Zi5icmFuY2gpCiAgICAgICAgICAgICByZXN1bHQgKz0gJ1xuJwpAQCAtMjQyLDcgKzI0NSw3IEBA
IGNsYXNzIENvbW1pdChvYmplY3QpOgogICAgICAgICBpZiBzZWxmLnJldmlzaW9uOgogICAgICAg
ICAgICAgcmV0dXJuICdye30nLmZvcm1hdChzZWxmLnJldmlzaW9uKQogICAgICAgICBpZiBzZWxm
Lmhhc2g6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5oYXNoWzoxMl0KKyAgICAgICAgICAgIHJl
dHVybiBzZWxmLmhhc2hbOnNlbGYuSEFTSF9MQUJFTF9TSVpFXQogICAgICAgICBpZiBzZWxmLmlk
ZW50aWZpZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYuaWRlbnRp
ZmllcikKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW5jb21wbGV0ZSBjb21taXQgZm9ybWF0
JykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L2xvY2FsL2dpdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9sb2NhbC9naXQucHkJKHJldmlzaW9uIDI2ODM3NCkKKysrIFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAKIGltcG9ydCByZQoraW1wb3J0
IHNpeAogCiBmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgcnVuLCBkZWNvcmF0b3JzLCBUaW1lb3V0
RXhwaXJlZAogZnJvbSB3ZWJraXRzY21weS5sb2NhbCBpbXBvcnQgU2NtCkBAIC04Nyw2ICs4OCwx
MSBAQCBjbGFzcyBHaXQoU2NtKToKICAgICBkZWYgZGVmYXVsdF9icmFuY2goc2VsZik6CiAgICAg
ICAgIHJlc3VsdCA9IHJ1bihbc2VsZi5leGVjdXRhYmxlLCAncmV2LXBhcnNlJywgJy0tYWJicmV2
LXJlZicsICdvcmlnaW4vSEVBRCddLCBjd2Q9c2VsZi5wYXRoLCBjYXB0dXJlX291dHB1dD1UcnVl
LCBlbmNvZGluZz0ndXRmLTgnKQogICAgICAgICBpZiByZXN1bHQucmV0dXJuY29kZToKKyAgICAg
ICAgICAgIGNhbmRpZGF0ZXMgPSBzZWxmLmJyYW5jaGVzCisgICAgICAgICAgICBpZiAnbWFzdGVy
JyBpbiBjYW5kaWRhdGVzOgorICAgICAgICAgICAgICAgIHJldHVybiAnbWFzdGVyJworICAgICAg
ICAgICAgaWYgJ21haW4nIGluIGNhbmRpZGF0ZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuICdt
YWluJwogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgcmV0dXJuICcvJy5qb2luKHJl
c3VsdC5zdGRvdXQucnN0cmlwKCkuc3BsaXQoJy8nKVsxOl0pCiAKQEAgLTI1MCwzICsyNTYsMjQg
QEAgY2xhc3MgR2l0KFNjbSk6CiAgICAgICAgICAgICBhdXRob3I9Q29udHJpYnV0b3IuZnJvbV9z
Y21fbG9nKGxvZy5zdGRvdXQuc3BsaXRsaW5lcygpWzFdKSwKICAgICAgICAgICAgIG1lc3NhZ2U9
J1xuJy5qb2luKGxpbmVbNDpdIGZvciBsaW5lIGluIGxvZy5zdGRvdXQuc3BsaXRsaW5lcygpWzQ6
XSksCiAgICAgICAgICkKKworICAgIGRlZiBmaW5kKHNlbGYsIGFyZ3VtZW50KToKKyAgICAgICAg
aWYgbm90IGlzaW5zdGFuY2UoYXJndW1lbnQsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0ZWQgJ2FyZ3VtZW50JyB0byBiZSBhIHN0cmluZywg
bm90ICd7fSciLmZvcm1hdCh0eXBlKGFyZ3VtZW50KSkpCisKKyAgICAgICAgcGFyc2VkX2NvbW1p
dCA9IENvbW1pdC5wYXJzZShhcmd1bWVudCwgZG9fYXNzZXJ0PUZhbHNlKQorICAgICAgICBpZiBw
YXJzZWRfY29tbWl0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0KAorICAgICAgICAg
ICAgICAgIGhhc2g9cGFyc2VkX2NvbW1pdC5oYXNoLAorICAgICAgICAgICAgICAgIHJldmlzaW9u
PXBhcnNlZF9jb21taXQucmV2aXNpb24sCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1wYXJz
ZWRfY29tbWl0LmlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgYnJhbmNoPXBhcnNlZF9jb21t
aXQuYnJhbmNoLAorICAgICAgICAgICAgKQorCisgICAgICAgIG91dHB1dCA9IHJ1bigKKyAgICAg
ICAgICAgIFtzZWxmLmV4ZWN1dGFibGUsICdyZXYtcGFyc2UnLCBhcmd1bWVudF0sCisgICAgICAg
ICAgICBjd2Q9c2VsZi5yb290X3BhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1
dGYtOCcsCisgICAgICAgICkKKyAgICAgICAgaWYgb3V0cHV0LnJldHVybmNvZGU6CisgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCIne30nIGlzIG5vdCBhbiBhcmd1ZW1lbnQgcmVjb2duaXpl
ZCBieSBnaXQiLmZvcm1hdChhcmd1bWVudCkpCisgICAgICAgIHJldHVybiBzZWxmLmNvbW1pdCho
YXNoPW91dHB1dC5zdGRvdXQucnN0cmlwKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zY20ucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5
CShyZXZpc2lvbiAyNjgzNzQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9sb2NhbC9zY20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEwICsyMywx
MSBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCitpbXBvcnQgc2l4CiBpbXBvcnQgc3lz
CiAKIGZyb20gbG9nZ2luZyBpbXBvcnQgTnVsbEhhbmRsZXIKLWZyb20gd2Via2l0c2NtcHkgaW1w
b3J0IGxvZworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9nLCBDb21taXQKIAogCiBjbGFzcyBT
Y20ob2JqZWN0KToKQEAgLTQ4LDcgKzQ5LDcgQEAgY2xhc3MgU2NtKG9iamVjdCk6CiAgICAgICAg
ICAgICByZXR1cm4gbG9jYWwuR2l0KHBhdGgpCiAgICAgICAgIGlmIGxvY2FsLlN2bi5pc19jaGVj
a291dChwYXRoKToKICAgICAgICAgICAgIHJldHVybiBsb2NhbC5Tdm4ocGF0aCkKLSAgICAgICAg
cmFpc2UgT1NFcnJvcigne30gaXMgbm90IGEga25vd24gU0NNIHR5cGUnKQorICAgICAgICByYWlz
ZSBPU0Vycm9yKCIne30nIGlzIG5vdCBhIGtub3duIFNDTSB0eXBlIi5mb3JtYXQocGF0aCkpCiAK
ICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgZGV2X2JyYW5jaGVzPU5vbmUsIHByb2RfYnJh
bmNoZXM9Tm9uZSk6CiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhdGgsIHN0cik6CkBAIC04
OSw2ICs5MCw0NCBAQCBjbGFzcyBTY20ob2JqZWN0KToKICAgICBkZWYgcmVtb3RlKHNlbGYsIG5h
bWU9Tm9uZSk6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQogCisgICAgZGVm
IGZpbmQoc2VsZiwgYXJndW1lbnQpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmd1bWVu
dCwgc2l4LnN0cmluZ190eXBlcyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBl
Y3RlZCAnYXJndW1lbnQnIHRvIGJlIGEgc3RyaW5nLCBub3QgJ3t9JyIuZm9ybWF0KHR5cGUoYXJn
dW1lbnQpKSkKKworICAgICAgICBvZmZzZXQgPSAwCisgICAgICAgIGlmICd+JyBpbiBhcmd1bWVu
dDoKKyAgICAgICAgICAgIGZvciBzIGluIGFyZ3VtZW50LnNwbGl0KCd+JylbMTpdOgorICAgICAg
ICAgICAgICAgIGlmIHMgYW5kIG5vdCBzLmlzZGlnaXQoKToKKyAgICAgICAgICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigiJ3t9JyBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCB0byBTY20uZmlu
ZCgpIi5mb3JtYXQoYXJndW1lbnQpKQorICAgICAgICAgICAgICAgIG9mZnNldCArPSBpbnQocykg
aWYgcyBlbHNlIDEKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJndW1lbnQuc3BsaXQoJ34nKVsw
XQorCisgICAgICAgIGlmIGFyZ3VtZW50ID09ICdIRUFEJzoKKyAgICAgICAgICAgIHJlc3VsdCA9
IHNlbGYuY29tbWl0KCkKKworICAgICAgICBlbGlmIGFyZ3VtZW50IGluIHNlbGYuYnJhbmNoZXM6
CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmNvbW1pdChicmFuY2g9YXJndW1lbnQpCisKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG9mZnNldDoKKyAgICAgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCInficgb2Zmc2V0cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgcmV2aXNpb25z
IGFuZCBpZGVudGlmaWVycyIpCisKKyAgICAgICAgICAgIHBhcnNlZF9jb21taXQgPSBDb21taXQu
cGFyc2UoYXJndW1lbnQpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoCisgICAgICAg
ICAgICAgICAgaGFzaD1wYXJzZWRfY29tbWl0Lmhhc2gsCisgICAgICAgICAgICAgICAgcmV2aXNp
b249cGFyc2VkX2NvbW1pdC5yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPXBh
cnNlZF9jb21taXQuaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBicmFuY2g9cGFyc2VkX2Nv
bW1pdC5icmFuY2gsCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgbm90IG9mZnNldDoKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoCisg
ICAgICAgICAgICBpZGVudGlmaWVyPXJlc3VsdC5pZGVudGlmaWVyIC0gb2Zmc2V0LAorICAgICAg
ICAgICAgYnJhbmNoPXJlc3VsdC5icmFuY2gsCisgICAgICAgICkKKwogICAgIGRlZiBjb21taXQo
c2VsZiwgaGFzaD1Ob25lLCByZXZpc2lvbj1Ob25lLCBpZGVudGlmaWVyPU5vbmUsIGJyYW5jaD1O
b25lKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCiAKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9sb2NhbC9zdm4ucHkJKHJldmlzaW9uIDI2ODM3NCkKKysrIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsNyBAQCBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRy
aWJ1CiAKIAogY2xhc3MgU3ZuKFNjbSk6Ci0gICAgZXhlY3V0YWJsZSA9ICcvdXNyL2xvY2FsL2Jp
bi9zdm4nCisgICAgZXhlY3V0YWJsZSA9ICcvdXNyL2Jpbi9zdm4nIGlmIG9zLnBhdGguZXhpc3Rz
KCcvdXNyL2Jpbi9zdm4nKSBlbHNlICcvdXNyL2xvY2FsL2Jpbi9zdm4nCiAgICAgTE9HX1JFID0g
cmUuY29tcGlsZShyJ3IoP1A8cmV2aXNpb24+XGQrKSBcfCAoP1A8ZW1haWw+LiopIFx8ICg/UDxk
YXRlPi4qKScpCiAgICAgQ0FDSEVfVkVSU0lPTiA9IFZlcnNpb24oMSkKIApJbmRleDogVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weQkocmV2aXNpb24gMjY4Mzc0KQorKysgVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDEzIEBAIG5vdGhpbmcgdG8gY29tbWl0
LCB3b3JraW5nIHRyZWUgY2xlYW4KICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PSdvcmlnaW4v
e31cbicuZm9ybWF0KGRlZmF1bHRfYnJhbmNoKSwKICAgICAgICAgICAgICAgICApLAogICAgICAg
ICAgICAgKSwgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBsb2NhbC5H
aXQuZXhlY3V0YWJsZSwgJ3Jldi1wYXJzZScsICcuKicsCisgICAgICAgICAgICAgICAgY3dkPXNl
bGYucGF0aCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJn
czogbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNv
ZGU9MCwKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PSd7fVxuJy5mb3JtYXQoc2VsZi5maW5k
KGFyZ3NbMl0pLmhhc2gpLAorICAgICAgICAgICAgICAgICkgaWYgc2VsZi5maW5kKGFyZ3NbMl0p
IGVsc2UgbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24ocmV0dXJuY29kZT0xMjgpCisgICAgICAgICAg
ICApLCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAogICAgICAgICAgICAgICAgIGxvY2FsLkdpdC5l
eGVjdXRhYmxlLCAnbG9nJywgcmUuY29tcGlsZShyJy4rJyksICctMScsCiAgICAgICAgICAgICAg
ICAgY3dkPXNlbGYucGF0aCwKICAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdz
LCAqKmt3YXJnczogbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCkluZGV4OiBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL19faW5pdF9fLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3Byb2dyYW0vX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9fX2luaXRfXy5weQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
KyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCitmcm9tIHdlYmtpdHNjbXB5LnByb2dyYW0uY29tbWFuZCBpbXBvcnQgQ29tbWFu
ZAorZnJvbSB3ZWJraXRzY21weS5wcm9ncmFtLmZpbmQgaW1wb3J0IEZpbmQKKworZnJvbSB3ZWJr
aXRzY21weS5wcm9ncmFtLm1haW4gaW1wb3J0IG1haW4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0vY29tbWFuZC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9w
cm9ncmFtL2NvbW1hbmQucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS9jb21tYW5kLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworaW1wb3J0IHN5cworCisKK2NsYXNzIENvbW1hbmQob2JqZWN0KToKKyAgICBuYW1lID0gTm9u
ZQorICAgIGhlbHAgPSBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcGFyc2VyKGNs
cywgcGFyc2VyLCByZXBvc2l0b3J5KToKKyAgICAgICAgaWYgY2xzLm5hbWUgaXMgTm9uZToKKyAg
ICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0NvbW1hbmQgZG9lcyBub3QgaGF2
ZSBhIG5hbWUnKQorICAgICAgICBpZiBjbHMuaGVscCBpcyBOb25lOgorICAgICAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcigiJ3t9JyBkb2VzIG5vdCBoYXZlIGEgaGVscCBtZXNzYWdl
IikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWluKGNscywgcmVwb3NpdG9yeSk6Cisg
ICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ05vIGNvbW1hbmQgc3BlY2lmaWVkXG4nKQorICAgICAg
ICByZXR1cm4gLTEKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L3Byb2dyYW0vZmluZC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL2ZpbmQucHkJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
cHJvZ3JhbS9maW5kLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisj
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGpzb24KK2ltcG9ydCBzeXMKKwor
ZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBh
cmd1bWVudHMKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IENvbW1pdCwgbG9jYWwKK2Zyb20gd2Vi
a2l0c2NtcHkucHJvZ3JhbSBpbXBvcnQgQ29tbWFuZAorCisKK2NsYXNzIEZpbmQoQ29tbWFuZCk6
CisgICAgbmFtZSA9ICdmaW5kJworICAgIGhlbHAgPSAnR2l2ZW4gYW4gaWRlbnRpZmllciwgcmV2
aXNpb24gb3IgaGFzaCwgbm9ybWFsaXplIGFuZCBwcmludCB0aGUgY29tbWl0JworCisgICAgQGNs
YXNzbWV0aG9kCisgICAgZGVmIHBhcnNlcihjbHMsIHBhcnNlciwgcmVwb3NpdG9yeSwgbG9nZ2Vy
cz1Ob25lKToKKyAgICAgICAgYXJndW1lbnRzLkxvZ2dpbmdHcm91cCgKKyAgICAgICAgICAgIHBh
cnNlciwKKyAgICAgICAgICAgIGxvZ2dlcnM9bG9nZ2VycywKKyAgICAgICAgICAgIGhlbHA9J3t9
IGFtb3VudCBvZiBsb2dnaW5nIGFuZCBjb21taXQgaW5mb3JtYXRpb24gZGlzcGxheWVkJworICAg
ICAgICApLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICctLWpzb24nLCAnLWonLAorICAgICAg
ICAgICAgaGVscD0nQ29udmVydCB0aGUgY29tbWl0IHRvIGEgbWFjaGluZS1yZWFkYWJsZSBKU09O
IG9iamVjdCcsCisgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAg
ZGVzdD0nanNvbicsCisgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICApCisKKyAg
ICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICdhcmd1bWVudCcsIG5hcmdz
PTEsCisgICAgICAgICAgICB0eXBlPXN0ciwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgaGVs
cD0nU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgY29tbWl0IG9yIGJyYW5jaCB0byBiZSBub3Jt
YWxpemVkJywKKyAgICAgICAgKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1haW4oY2xz
LCBhcmdzLCByZXBvc2l0b3J5KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29tbWl0ID0g
cmVwb3NpdG9yeS5maW5kKGFyZ3MuYXJndW1lbnRbMF0pCisgICAgICAgIGV4Y2VwdCAobG9jYWwu
U2NtLkV4Y2VwdGlvbiwgVmFsdWVFcnJvcikgYXMgZXhjZXB0aW9uOgorICAgICAgICAgICAgIyBW
YWx1ZUVycm9ycyBhbmQgU2NtIGV4Y2VwdGlvbnMgdXN1YWxseSBjb250YWluIGVub3VnaCBpbmZv
cm1hdGlvbiB0byBiZSBkaXNwbGF5ZWQKKyAgICAgICAgICAgICMgdG8gdGhlIHVzZXIgYXMgYW4g
ZXJyb3IKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc3RyKGV4Y2VwdGlvbikgKyAnXG4n
KQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBpZiBhcmdzLnZlcmJvc2UgPiAwIGFu
ZCBub3QgY29tbWl0Lm1lc3NhZ2U6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWls
ZWQgdG8gZmluZCB0aGUgIGNvbW1pdCBtZXNzYWdlIGZvciAne30nXG4iLmZvcm1hdChjb21taXQp
KQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBpZiBhcmdzLmpzb246CisgICAgICAg
ICAgICBwcmludChqc29uLmR1bXBzKGNvbW1pdCwgY2xzPUNvbW1pdC5FbmNvZGVyLCBpbmRlbnQ9
NCkpCisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgIGlmIGFyZ3MudmVyYm9zZSA8IDA6
CisgICAgICAgICAgICBwcmludCgne2lkZW50aWZpZXJ9IHwge2hhc2h9e3JldmlzaW9ufXt0aXRs
ZX0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPWNvbW1pdCwKKyAgICAgICAg
ICAgICAgICBoYXNoPWNvbW1pdC5oYXNoWzpDb21taXQuSEFTSF9MQUJFTF9TSVpFXSBpZiBjb21t
aXQuaGFzaCBlbHNlICcnLAorICAgICAgICAgICAgICAgIHJldmlzaW9uPSd7fXJ7fScuZm9ybWF0
KCcsICcgaWYgY29tbWl0Lmhhc2ggZWxzZSAnJywgY29tbWl0LnJldmlzaW9uKSBpZiBjb21taXQu
cmV2aXNpb24gZWxzZSAnJywKKyAgICAgICAgICAgICAgICB0aXRsZT0nIHwge30nLmZvcm1hdChj
b21taXQubWVzc2FnZS5zcGxpdGxpbmVzKClbMF0pIGlmIGNvbW1pdC5tZXNzYWdlIGVsc2UgJycK
KyAgICAgICAgICAgICkpCisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgIGlmIGNvbW1p
dC5tZXNzYWdlOgorICAgICAgICAgICAgcHJpbnQoJ1RpdGxlOiB7fScuZm9ybWF0KGNvbW1pdC5t
ZXNzYWdlLnNwbGl0bGluZXMoKVswXSkpCisgICAgICAgIHByaW50KCdBdXRob3I6IHt9Jy5mb3Jt
YXQoY29tbWl0LmF1dGhvcikpCisgICAgICAgIHByaW50KCdJZGVudGlmaWVyOiB7fScuZm9ybWF0
KGNvbW1pdCkpCisgICAgICAgIHByaW50KGRhdGV0aW1lLmZyb210aW1lc3RhbXAoY29tbWl0LnRp
bWVzdGFtcCkuc3RyZnRpbWUoJ0RhdGU6ICVhICViICVkICVIOiVNOiVTICVZJykpCisgICAgICAg
IGlmIGFyZ3MudmVyYm9zZSA+IDAgb3IgY29tbWl0LnJldmlzaW9uOgorICAgICAgICAgICAgcHJp
bnQoJ1JldmlzaW9uOiB7fScuZm9ybWF0KGNvbW1pdC5yZXZpc2lvbiBvciAnTi9BJykpCisgICAg
ICAgIGlmIGFyZ3MudmVyYm9zZSA+IDAgb3IgY29tbWl0Lmhhc2g6CisgICAgICAgICAgICBwcmlu
dCgnSGFzaDoge30nLmZvcm1hdChjb21taXQuaGFzaFs6Q29tbWl0LkhBU0hfTEFCRUxfU0laRV0g
aWYgY29tbWl0Lmhhc2ggZWxzZSAnTi9BJykpCisKKyAgICAgICAgaWYgYXJncy52ZXJib3NlID4g
MDoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGNvbW1pdC5tZXNzYWdlLnNwbGl0bGluZXMoKToK
KyAgICAgICAgICAgICAgICBwcmludCgnICAgIHt9Jy5mb3JtYXQobGluZSkpCisKKyAgICAgICAg
cmV0dXJuIDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Byb2dyYW0vbWFpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9wcm9ncmFtL21haW4ucHkJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJv
Z3JhbS9tYWluLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgb3MKK2lt
cG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBhcmd1bWVudHMsIGxvZyBh
cyB3ZWJraXRjb3JlcHlfbG9nCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgbG9nCitm
cm9tIHdlYmtpdHNjbXB5LnByb2dyYW0gaW1wb3J0IEZpbmQKKworCitkZWYgbWFpbihhcmdzPU5v
bmUsIHJlcG9zaXRvcnk9Tm9uZSwgbG9nZ2Vycz1Ob25lKToKKyAgICBsb2dnaW5nLmJhc2ljQ29u
ZmlnKGxldmVsPWxvZ2dpbmcuV0FSTklORykKKworICAgIGxvZ2dlcnMgPSBbbG9nZ2luZy5nZXRM
b2dnZXIoKSwgd2Via2l0Y29yZXB5X2xvZywgIGxvZ10gKyAobG9nZ2VycyBvciBbXSkKKworICAg
IGlmIG5vdCByZXBvc2l0b3J5OgorICAgICAgICByZXBvc2l0b3J5ID0gbG9jYWwuU2NtLmZyb21f
cGF0aChwYXRoPW9zLmdldGN3ZCgpKQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQ
YXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uPSdDdXN0b20gZ2l0IHRvb2xpbmcgZnJvbSB0aGUg
V2ViS2l0IHRlYW0gdG8gaW50ZXJhY3Qgd2l0aCBhICcgKworICAgICAgICAgICAgICAgICAgICAn
cmVwb3NpdG9yeSB1c2luZyBpZGVudGlmZXJzJywKKyAgICApCisgICAgYXJndW1lbnRzLkxvZ2dp
bmdHcm91cChwYXJzZXIpCisgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2Vycyho
ZWxwPSdzdWItY29tbWFuZCBoZWxwJykKKworICAgIGZvciBwcm9ncmFtIGluIFtGaW5kXToKKyAg
ICAgICAgc3VicGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKHByb2dyYW0ubmFtZSwgaGVs
cD1wcm9ncmFtLmhlbHApCisgICAgICAgIHN1YnBhcnNlci5zZXRfZGVmYXVsdHMobWFpbj1wcm9n
cmFtLm1haW4pCisgICAgICAgIHByb2dyYW0ucGFyc2VyKHN1YnBhcnNlciwgcmVwb3NpdG9yeT1y
ZXBvc2l0b3J5LCBsb2dnZXJzPWxvZ2dlcnMpCisKKyAgICBwYXJzZWQgPSBwYXJzZXIucGFyc2Vf
YXJncyhhcmdzPWFyZ3MpCisKKyAgICByZXR1cm4gcGFyc2VkLm1haW4oYXJncz1wYXJzZWQsIHJl
cG9zaXRvcnk9cmVwb3NpdG9yeSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZmluZF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2ZpbmRf
dW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9maW5kX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTY3IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CitpbXBvcnQganNvbgoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9y
dCBPdXRwdXRDYXB0dXJlCitmcm9tIHdlYmtpdGNvcmVweS5tb2NrcyBpbXBvcnQgVGltZSBhcyBN
b2NrVGltZQorZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsICBwcm9ncmFtLCBtb2Nrcwor
CisKK2NsYXNzIFRlc3RGaW5kKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBwYXRoID0gJy9tb2Nr
L3JlcG9zaXRvcnknCisKKyAgICBkZWYgdGVzdF9iYXNpY19naXQoc2VsZik6CisgICAgICAgIHdp
dGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGlt
ZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnSEVB
RCcsICctcScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0
aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChj
YXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzRAbWFpbiB8IGJhZTVkMWU5MDk5OVxuJykKKwor
ICAgIGRlZiB0ZXN0X2Jhc2ljX2dpdF9zdm4oc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9j
YWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tU
aW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICdI
RUFEJywgJy1xJyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2NhbC5TY20uZnJvbV9w
YXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnNEBtYWluIHwgYmFlNWQxZTkwOTk5LCByNiB8
IDZ0aCBjb21taXRcbicpCisKKyAgICBkZWYgdGVzdF9iYXNpY19zdm4oc2VsZik6CisgICAgICAg
IHdpdGggbW9ja3MubG9jYWwuR2l0KCksIG1vY2tzLmxvY2FsLlN2bihzZWxmLnBhdGgpLCBNb2Nr
VGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAn
SEVBRCcsICctcScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21f
cGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzRAdHJ1bmsgfCByNiB8IDZ0aCBjb21taXRc
bicpCisKKyAgICBkZWYgdGVzdF9icmFuY2hfdGlsZGUoc2VsZik6CisgICAgICAgIHdpdGggbW9j
a3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3ZuKCks
IE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmlu
ZCcsICdicmFuY2gtYX4xJywgJy1xJyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeT1sb2Nh
bC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnMi4xQGJyYW5jaC1hIHwg
YTMwY2U4NDk0YmYxLCByMyB8IDNyZCBjb21taXRcbicpCisKKyAgICBkZWYgdGVzdF9pZGVudGlm
aWVyX2dpdChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSwg
bW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAg
ICAgICAgICBhcmdzPSgnZmluZCcsICcyQG1haW4nLCAnLXEnKSwKKyAgICAgICAgICAgICAgICBy
ZXBvc2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICcy
QG1haW4gfCBmZmY4M2JiMmQ5MTdcbicpCisKKyAgICBkZWYgdGVzdF9pZGVudGlmaWVyX2dpdF9z
dm4oc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCksIG1vY2tz
LmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAg
ICAgYXJncz0oJ2ZpbmQnLCAnMkBtYWluJywgJy1xJyksCisgICAgICAgICAgICAgICAgcmVwb3Np
dG9yeT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnMkBtYWlu
IHwgZmZmODNiYjJkOTE3XG4nKQorCisgICAgZGVmIHRlc3RfaWRlbnRpZmllcl9zdm4oc2VsZik6
CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KCksIG1vY2tzLmxvY2FsLlN2bihzZWxmLnBh
dGgpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0o
J2ZpbmQnLCAnMkB0cnVuaycsICctcScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9j
YWwuU2NtLmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzJAdHJ1bmsgfCByMiB8
IDJuZCBjb21taXRcbicpCisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICB3aXRo
IG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nrcy5sb2NhbC5Tdm4oKSwgTW9ja1RpbWUs
IE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJzNjZDMy
ZTM1MjQxMCcsICctcScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZy
b21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzIuMkBicmFuY2gtYiB8IDNjZDMyZTM1
MjQxMFxuJykKKworICAgIGRlZiB0ZXN0X3JldmlzaW9uX3N2bihzZWxmKToKKyAgICAgICAgd2l0
aCBtb2Nrcy5sb2NhbC5HaXQoKSwgbW9ja3MubG9jYWwuU3ZuKHNlbGYucGF0aCksIE1vY2tUaW1l
LCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICdyNScs
ICctcScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2NtLmZyb21fcGF0aChz
ZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0
dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzIuMkBicmFuY2gtYiB8IHI1IHwgNXRoIGNvbW1pdFxu
JykKKworICAgIGRlZiB0ZXN0X3JldmlzaW9uX2dpdF9zdm4oc2VsZik6CisgICAgICAgIHdpdGgg
bW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwuU3Zu
KCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgn
ZmluZCcsICdyNScsICctcScpLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk9bG9jYWwuU2Nt
LmZyb21fcGF0aChzZWxmLnBhdGgpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzIuMkBicmFuY2gtYiB8IDNjZDMy
ZTM1MjQxMCwgcjUgfCA1dGggY29tbWl0XG4nKQorCisgICAgZGVmIHRlc3Rfc3RhbmRhcmQoc2Vs
Zik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVl
KSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVy
ZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAg
ICAgICAgICAgICBhcmdzPSgnZmluZCcsICczQG1haW4nKSwKKyAgICAgICAgICAgICAgICByZXBv
c2l0b3J5PWxvY2FsLlNjbS5mcm9tX3BhdGgoc2VsZi5wYXRoKSwKKyAgICAgICAgICAgICkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjYXB0dXJlZC5zdGRvdXQuZ2V0
dmFsdWUoKSwKKyAgICAgICAgICAgICcnJ1RpdGxlOiA0dGggY29tbWl0CitBdXRob3I6IEpvbmF0
aGFuIEJlZGFyZCA8amJlZGFyZEBhcHBsZS5jb20+CitJZGVudGlmaWVyOiAzQG1haW4KK0RhdGU6
IEZyaSBPY3QgMDIgMTE6MjM6MjAgMjAyMAorUmV2aXNpb246IDQKK0hhc2g6IDFhYmUyNWI0NDNl
OQorJycnLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF92ZXJib3NlKHNlbGYpOgorICAgICAg
ICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxv
Y2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAg
YXJncz0oJ2ZpbmQnLCAnM0BtYWluJywgJy12JyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9y
eT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVl
KCksCisgICAgICAgICAgICAnJydUaXRsZTogNHRoIGNvbW1pdAorQXV0aG9yOiBKb25hdGhhbiBC
ZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29tPgorSWRlbnRpZmllcjogM0BtYWluCitEYXRlOiBGcmkg
T2N0IDAyIDExOjIzOjIwIDIwMjAKK1JldmlzaW9uOiA0CitIYXNoOiAxYWJlMjViNDQzZTkKKyAg
ICA0dGggY29tbWl0CisgICAgc3ZuLWlkOiBodHRwczovL3N2bi53ZWJraXQub3JncmVwb3NpdG9y
eS9yZXBvc2l0b3J5L3RydW5rQDQgMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZj
CisnJycsCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2pzb24oc2VsZik6CisgICAgICAgIHdp
dGggbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKSwgbW9ja3MubG9jYWwu
U3ZuKCksIE1vY2tUaW1lLCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdz
PSgnZmluZCcsICczQG1haW4nLCAnLS1qc29uJyksCisgICAgICAgICAgICAgICAgcmVwb3NpdG9y
eT1sb2NhbC5TY20uZnJvbV9wYXRoKHNlbGYucGF0aCksCisgICAgICAgICAgICApKQorCisgICAg
ICAgIGRlY29kZWQgPSBqc29uLmxvYWRzKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpKQorICAg
ICAgICBzZWxmLmFzc2VydERpY3RFcXVhbCgKKyAgICAgICAgICAgIGRlY29kZWQsIGRpY3QoCisg
ICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nM0BtYWluJywKKyAgICAgICAgICAgICAgICBoYXNo
PScxYWJlMjViNDQzZTk4NWY5M2I5MGQ4MzBlNGE3ZTM3MzEzMzZhZjRkJywKKyAgICAgICAgICAg
ICAgICByZXZpc2lvbj00LAorICAgICAgICAgICAgICAgIGF1dGhvcj0namJlZGFyZEBhcHBsZS5j
b20nLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjYzMDAwLAorICAgICAgICAgICAg
ICAgIGJyYW5jaD0nbWFpbicsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nNHRoIGNvbW1pdFxu
c3ZuLWlkOiBodHRwczovL3N2bi53ZWJraXQub3JncmVwb3NpdG9yeS9yZXBvc2l0b3J5L3RydW5r
QDQgMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjJywKKyAgICAgICAgICAgICkp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411273</attachid>
            <date>2020-10-13 15:48:30 -0700</date>
            <delta_ts>2020-10-13 17:32:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217534-20201013154829.patch</filename>
            <type>text/plain</type>
            <size>32210</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODQyNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDUyIEBACisyMDIwLTEwLTEyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBgZ2l0LXdlYmtpdCBmaW5kYAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3NTM0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS83MDE1MjQzMT4KKworICAgICAgICBSZXZpZXdlZCBieSBEZXdlaSBa
aHUuCisKKyAgICAgICAgKiBTY3JpcHRzL2dpdC13ZWJraXQ6IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHk6IEJ1
bXAgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Vi
a2l0Y29yZXB5L2FyZ3VtZW50cy5weToKKyAgICAgICAgKE5vQWN0aW9uLl9fY2FsbF9fKToKKyAg
ICAgICAgKENvdW50QWN0aW9uKTogQ3JlYXRlIGFuIGFjdGlvbiB0byBpbmNyZW1lbnQgb3IgZGVj
cmVtZW50IGEgdmFyaWFibGUgYnkgYSB2YWx1ZS4KKyAgICAgICAgKENhbGxiYWNrQWN0aW9uKTog
Q3JlYXRlIGFuIGFjdGlvbiB3aGljaCB3aWxsIHRyaWdnZXIgYSBjYWxsYmFjayB3aGVuIHNldC4K
KyAgICAgICAgKExvZ2dpbmdHcm91cCk6IENyZWF0ZSBhIGdyb3VwIHdoaWNoIGFsbG93cyB0aGUg
dXNlciB0byBjaGFuZ2UgbG9nZ2luZyBiZWhhdmlvci4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS9naXQtd2Via2l0OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weTogQWRkIHdlYmtpdHNjbXB5LnByb2dyYW0gYW5k
IGdpdC13ZWJraXQuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvX19pbml0X18ucHk6IEJ1bXAgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jb21taXQucHk6CisgICAgICAgIChDb21t
aXQpOiBNYWtlIHRoZSAxMiBjaGFyYWN0ZXIgaGFzaCBiYXNlZCBvbiBhIGNsYXNzIHZhcmlhYmxl
LgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xv
Y2FsL2dpdC5weToKKyAgICAgICAgKEdpdC5kZWZhdWx0X2JyYW5jaCk6IEZhbGxiYWNrIHRvICdt
YXN0ZXInIG9yICdtYWluJyBpZiB0aGUgcmVtb3RlIGlzbid0IGF2YWlsYWJsZS4KKyAgICAgICAg
KEdpdC5maW5kKTogVXNlIGdpdCB0byBtYXRjaCBicmFuY2hlcyBhbmQgdGFncyB0byBhIGhhc2gg
aW5zdGVhZCBvZiB0cnlpbmcgdG8gZG8gaXQgb3Vyc2VsdmVzLgorICAgICAgICAqIFNjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3NjbS5weToKKyAgICAgICAg
KFNjbS5maW5kKTogQWRkIGZ1bmN0aW9uIHRvIGNvbnZlcnQgZ2VuZXJpYyBzdHJpbmcgYXJndW1l
bnRzIHRvIGEgY29tbWl0LCBhbmQgdGhlbiBmaW5kIHRoYXQgY29tbWl0IGluCisgICAgICAgIHRo
ZSByZXBvc2l0b3J5LgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L2xvY2FsL3N2bi5weToKKyAgICAgICAgKFN2bik6IFN1cHBvcnQgYSBmZXcgZGlm
ZmVyZW50IFNWTiBiaW5hcnkgcGF0aHMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5OiBBZGQgcmV2LXBhcnNlIGJy
YW5jaC90YWcvSEVBRCAtPiBoYXNoIGNvbnZlcnNpb24uCisgICAgICAgICogU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS5weTogQWRkZWQuCisgICAgICAg
IChDb21tYW5kKTogQmFzZSBjbGFzcyBmb3IgYWxsIGNvbW1hbmRzLgorICAgICAgICAoRmluZCk6
CisgICAgICAgIChGaW5kLnBhcnNlcik6IENvbmZpZ3VyZSBwYXJzZXIgZm9yICdmaW5kJyBzdWIt
cHJvZ3JhbS4KKyAgICAgICAgKEZpbmQubWFpbik6IEdpdmVuIGFuIGlkZW50aWZpZXIsIHJldmlz
aW9uLCBoYXNoIG9yIGJyYW5jaCBuYW1lLCBmaW5kIGFuZCBwcmludCB0aGUgbWF0Y2hpbmcgY29t
bWl0IGZyb20KKyAgICAgICAgKG1haW4pOiBFbnRyeSBwb2ludCB0byBnaXQtPHByb2plY3Q+IHNj
cmlwdHMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvdGVzdC9maW5kX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFRlc3RGaW5kKToKKyAg
ICAgICAgKFRlc3RGaW5kLnRlc3RfYmFzaWNfZ2l0KToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3Rf
YmFzaWNfZ2l0X3N2bik6CisgICAgICAgIChUZXN0RmluZC50ZXN0X2Jhc2ljX3N2bik6CisgICAg
ICAgIChUZXN0RmluZC50ZXN0X2JyYW5jaF90aWxkZSk6CisgICAgICAgIChUZXN0RmluZC50ZXN0
X2lkZW50aWZpZXJfZ2l0KToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfaWRlbnRpZmllcl9naXRf
c3ZuKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfaWRlbnRpZmllcl9zdm4pOgorICAgICAgICAo
VGVzdEZpbmQudGVzdF9oYXNoKToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfcmV2aXNpb25fc3Zu
KToKKyAgICAgICAgKFRlc3RGaW5kLnRlc3RfcmV2aXNpb25fZ2l0X3N2bik6CisgICAgICAgIChU
ZXN0RmluZC50ZXN0X3N0YW5kYXJkKToKKwogMjAyMC0xMC0xMyAgS2VpdGggUm9sbGluICA8a3Jv
bGxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGxlZnRvdmVyIE1BQ09TWF9ERVBMT1lN
RU5UX1RBUkdFVF9tYWNvc3ggc3VwcG9ydApJbmRleDogVG9vbHMvU2NyaXB0cy9naXQtd2Via2l0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvZ2l0LXdlYmtpdAkobm9uZXhpc3RlbnQpCisr
KyBUb29scy9TY3JpcHRzL2dpdC13ZWJraXQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
IyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworaW1wb3J0IG9zCitpbXBvcnQgd2Via2l0cHkKK2ltcG9ydCBzeXMKKworZnJvbSB3
ZWJraXRzY21weSBpbXBvcnQgcHJvZ3JhbQorCitzeXMuZXhpdChwcm9ncmFtLm1haW4ocGF0aD1v
cy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSkKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMv
U2NyaXB0cy9naXQtd2Via2l0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0w
LDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9hcmd1bWVudHMucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtp
dGNvcmVweS9hcmd1bWVudHMucHkJKHJldmlzaW9uIDI2ODM3NCkKKysrIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvYXJndW1lbnRzLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw2ICsyMSw5IEBACiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQgYXJncGFyc2UKK2ltcG9y
dCBsb2dnaW5nCisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBsb2cKIAogCiBjbGFzcyBOb0Fj
dGlvbihhcmdwYXJzZS5BY3Rpb24pOgpAQCAtMjksMyArMzIsNTcgQEAgY2xhc3MgTm9BY3Rpb24o
YXJncGFyc2UuQWN0aW9uKToKIAogICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVz
cGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgogICAgICAgICBzZXRhdHRyKG5hbWVz
cGFjZSwgc2VsZi5kZXN0LCBGYWxzZSBpZiBvcHRpb25fc3RyaW5nLnN0YXJ0c3dpdGgoJy0tbm8n
KSBlbHNlIFRydWUpCisKKworZGVmIENvdW50QWN0aW9uKHZhbHVlPTEpOgorICAgIGNsYXNzIEFj
dGlvbihhcmdwYXJzZS5BY3Rpb24pOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9u
X3N0cmluZ3MsIGRlc3QsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHN1cGVyKEFjdGlvbiwgc2Vs
ZikuX19pbml0X18ob3B0aW9uX3N0cmluZ3MsIGRlc3QsIG5hcmdzPTAsICoqa3dhcmdzKQorCisg
ICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRp
b25fc3RyaW5nKToKKyAgICAgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsIGdl
dGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QpICsgdmFsdWUpCisKKyAgICByZXR1cm4gQWN0aW9u
CisKKworZGVmIENhbGxiYWNrQWN0aW9uKGFjdGlvbiwgY2FsbGJhY2s9bGFtYmRhIG5hbWVzcGFj
ZTogTm9uZSk6CisgICAgY2xhc3MgQWN0aW9uKGFjdGlvbik6CisgICAgICAgIGRlZiBfX2NhbGxf
XyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5ncyk6CisgICAg
ICAgICAgICBzdXBlcihBY3Rpb24sIHNlbGYpLl9fY2FsbF9fKHBhcnNlciwgbmFtZXNwYWNlLCB2
YWx1ZXMsIG9wdGlvbl9zdHJpbmdzKQorICAgICAgICAgICAgY2FsbGJhY2sobmFtZXNwYWNlKQor
CisgICAgcmV0dXJuIEFjdGlvbgorCisKK2RlZiBMb2dnaW5nR3JvdXAocGFyc2VyLCBsb2dnZXJz
PU5vbmUsIGRlZmF1bHQ9bG9nZ2luZy5XQVJOSU5HLCBoZWxwPSd7fSBhbW91bnQgb2YgbG9nZ2lu
ZycpOgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcnNlciwgYXJncGFyc2UuQXJndW1lbnRQYXJz
ZXIpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdQcm92aWRlZCBwYXJzZXIgaXMgbm90IGEg
e30nLmZvcm1hdCh0eXBlKGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKSkpCisKKyAgICBpZiBub3Qg
bG9nZ2VyczoKKyAgICAgICAgbG9nZ2VycyA9IFtsb2dnaW5nLmdldExvZ2dlcigpLCBsb2ddCisg
ICAgZm9yIGxvZ2dlciBpbiBsb2dnZXJzOgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwoZGVmYXVs
dCkKKworICAgIGRlZiB2ZXJib3NlX2NhbGxiYWNrKG5hbWVzcGFjZSk6CisgICAgICAgIHZlcmJv
c2l0eSA9IGdldGF0dHIobmFtZXNwYWNlLCAndmVyYm9zZScpCisgICAgICAgIGxvZ19sZXZlbCA9
IGRlZmF1bHQgLSB2ZXJib3NpdHkgKiAxMAorCisgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCAn
bG9nX2xldmVsJywgbG9nX2xldmVsKQorCisgICAgICAgIGZvciBsb2dnZXIgaW4gbG9nZ2VyczoK
KyAgICAgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dfbGV2ZWwpCisKKyAgICBncm91cCA9IHBh
cnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ0xvZ2dpbmcnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVu
dCgKKyAgICAgICAgJy0tdmVyYm9zZScsICctdicsCisgICAgICAgIGRlc3Q9J3ZlcmJvc2UnLCBk
ZWZhdWx0PTAsCisgICAgICAgIGhlbHA9aGVscC5mb3JtYXQoJ0luY3JlYXNlJyksCisgICAgICAg
IGFjdGlvbj1DYWxsYmFja0FjdGlvbihDb3VudEFjdGlvbih2YWx1ZT0xKSwgY2FsbGJhY2s9dmVy
Ym9zZV9jYWxsYmFjayksCisgICAgKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgKKyAgICAgICAg
Jy0tcXVpZXQnLCAnLXEnLAorICAgICAgICBkZXN0PSd2ZXJib3NlJywgZGVmYXVsdD0wLAorICAg
ICAgICBoZWxwPWhlbHAuZm9ybWF0KCdEZWNyZWFzZScpLAorICAgICAgICBhY3Rpb249Q2FsbGJh
Y2tBY3Rpb24oQ291bnRBY3Rpb24odmFsdWU9LTEpLCBjYWxsYmFjaz12ZXJib3NlX2NhbGxiYWNr
KSwKKyAgICApCisgICAgcmV0dXJuIGdyb3VwCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS9naXQtd2Via2l0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvZ2l0LXdlYmtpdAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0
IHByb2dyYW0KKworCitzeXMuZXhpdChwcm9ncmFtLm1haW4oKSkKClByb3BlcnR5IGNoYW5nZXMg
b246IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L2dpdC13ZWJraXQKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS9zZXR1cC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS9zZXR1cC5weQkocmV2aXNpb24gMjY4Mzc0KQorKysgVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvc2V0dXAucHkJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDEw
IEBAIHNldHVwKAogICAgICAgICAnd2Via2l0c2NtcHkubG9jYWwnLAogICAgICAgICAnd2Via2l0
c2NtcHkubW9ja3MnLAogICAgICAgICAnd2Via2l0c2NtcHkubW9ja3MubG9jYWwnLAorICAgICAg
ICAnd2Via2l0c2NtcHkucHJvZ3JhbScsCiAgICAgICAgICd3ZWJraXRzY21weS50ZXN0JywKICAg
ICBdLAorICAgIHNjcmlwdHM9WydnaXQtd2Via2l0J10sCiAgICAgaW5zdGFsbF9yZXF1aXJlcz1b
J3B5dGhvbi1kYXRldXRpbCcsICd3ZWJraXRjb3JlcHknXSwKICAgICBpbmNsdWRlX3BhY2thZ2Vf
ZGF0YT1UcnVlLAogICAgIHppcF9zYWZlPUZhbHNlLApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18u
cHkJKHJldmlzaW9uIDI2ODM3NCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgIlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNv
cmVweSB3aXRoIGBwaXAgaW5zdGFsbCB3ZWJraXRjb3JlcHkgLS1leHRyYS1pbmRleC11cmwgPHBh
Y2thZ2UgaW5kZXggVVJMPmAiCiAgICAgKQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCAxLCAzKQor
dmVyc2lvbiA9IFZlcnNpb24oMCwgMiwgMCkKIAogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2Fn
ZSgnZGF0ZXV0aWwnLCBWZXJzaW9uKDIsIDgsIDEpLCBweXBpX25hbWU9J3B5dGhvbi1kYXRldXRp
bCcpKQogCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9jb21taXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvY29tbWl0LnB5CShyZXZpc2lvbiAyNjgzNzQpCisrKyBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jb21taXQucHkJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgY2xhc3MgQ29tbWl0KG9iamVjdCk6CiAgICAg
UkVWSVNJT05fUkUgPSByZS5jb21waWxlKHInXltScl0/KD9QPHJldmlzaW9uPlxkKykkJykKICAg
ICBJREVOVElGSUVSX1JFID0gcmUuY29tcGlsZShyJ14oKD9QPGJyYW5jaF9wb2ludD5cZCspXC4p
Pyg/UDxpZGVudGlmaWVyPi0/XGQrKShAKD9QPGJyYW5jaD5cUyspKT8kJykKICAgICBOVU1CRVJf
UkUgPSByZS5jb21waWxlKHInXi0/XGQqJCcpCisgICAgSEFTSF9MQUJFTF9TSVpFID0gMTIKIAog
ICAgIGNsYXNzIEVuY29kZXIoanNvbi5KU09ORW5jb2Rlcik6CiAKQEAgLTEzMCw3ICsxMzEsNyBA
QCBjbGFzcyBDb21taXQob2JqZWN0KToKICAgICAgICAgcmV0dXJuIChpZGVudGlmaWVyWzBdLCBp
ZGVudGlmaWVyWzFdLCBicmFuY2gpCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcGFyc2Uo
Y2xzLCBhcmcpOgorICAgIGRlZiBwYXJzZShjbHMsIGFyZywgZG9fYXNzZXJ0PVRydWUpOgogICAg
ICAgICBpZiBjbHMuX3BhcnNlX2lkZW50aWZpZXIoYXJnKToKICAgICAgICAgICAgIHJldHVybiBD
b21taXQoaWRlbnRpZmllcj1hcmcpCiAKQEAgLTE0MCw3ICsxNDEsOSBAQCBjbGFzcyBDb21taXQo
b2JqZWN0KToKICAgICAgICAgaWYgY2xzLl9wYXJzZV9oYXNoKGFyZyk6CiAgICAgICAgICAgICBy
ZXR1cm4gQ29tbWl0KGhhc2g9YXJnKQogCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIid7fScg
Y2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIGNvbW1pdCBvYmplY3QiLmZvcm1hdChhcmcpKQorICAg
ICAgICBpZiBkb19hc3NlcnQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIne30nIGNh
bm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBjb21taXQgb2JqZWN0Ii5mb3JtYXQoYXJnKSkKKyAgICAg
ICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfX2luaXRfXygKICAgICAgICAgc2VsZiwKQEAgLTIx
MSw3ICsyMTQsNyBAQCBjbGFzcyBDb21taXQob2JqZWN0KToKICAgICAgICAgICAgICAgICByZXN1
bHQgKz0gJyBvbiB7fScuZm9ybWF0KHNlbGYuYnJhbmNoKQogICAgICAgICAgICAgcmVzdWx0ICs9
ICdcbicKICAgICAgICAgaWYgc2VsZi5oYXNoOgotICAgICAgICAgICAgcmVzdWx0ICs9ICcgICAg
Z2l0IGhhc2g6IHt9Jy5mb3JtYXQoc2VsZi5oYXNoWzoxMl0pCisgICAgICAgICAgICByZXN1bHQg
Kz0gJyAgICBnaXQgaGFzaDoge30nLmZvcm1hdChzZWxmLmhhc2hbOnNlbGYuSEFTSF9MQUJFTF9T
SVpFXSkKICAgICAgICAgICAgIGlmIHNlbGYuYnJhbmNoOgogICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSAnIG9uIHt9Jy5mb3JtYXQoc2VsZi5icmFuY2gpCiAgICAgICAgICAgICByZXN1bHQgKz0g
J1xuJwpAQCAtMjQyLDcgKzI0NSw3IEBAIGNsYXNzIENvbW1pdChvYmplY3QpOgogICAgICAgICBp
ZiBzZWxmLnJldmlzaW9uOgogICAgICAgICAgICAgcmV0dXJuICdye30nLmZvcm1hdChzZWxmLnJl
dmlzaW9uKQogICAgICAgICBpZiBzZWxmLmhhc2g6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5o
YXNoWzoxMl0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLmhhc2hbOnNlbGYuSEFTSF9MQUJFTF9T
SVpFXQogICAgICAgICBpZiBzZWxmLmlkZW50aWZpZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAg
ICByZXR1cm4gc3RyKHNlbGYuaWRlbnRpZmllcikKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
SW5jb21wbGV0ZSBjb21taXQgZm9ybWF0JykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Byb2dyYW0ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcHJvZ3JhbS5weQkobm9u
ZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9wcm9ncmFtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBACisjIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGpz
b24KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJvbSBkYXRldGlt
ZSBpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBhcmd1bWVudHMsIGxv
ZyBhcyB3ZWJraXRjb3JlcHlfbG9nCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIGxv
Y2FsLCBsb2cKKworCitjbGFzcyBDb21tYW5kKG9iamVjdCk6CisgICAgbmFtZSA9IE5vbmUKKyAg
ICBoZWxwID0gTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBhcnNlcihjbHMsIHBh
cnNlciwgcmVwb3NpdG9yeSk6CisgICAgICAgIGlmIGNscy5uYW1lIGlzIE5vbmU6CisgICAgICAg
ICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdDb21tYW5kIGRvZXMgbm90IGhhdmUgYSBu
YW1lJykKKyAgICAgICAgaWYgY2xzLmhlbHAgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIE5v
dEltcGxlbWVudGVkRXJyb3IoIid7fScgZG9lcyBub3QgaGF2ZSBhIGhlbHAgbWVzc2FnZSIpCisK
KyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbWFpbihjbHMsIHJlcG9zaXRvcnkpOgorICAgICAg
ICBzeXMuc3RkZXJyLndyaXRlKCdObyBjb21tYW5kIHNwZWNpZmllZFxuJykKKyAgICAgICAgcmV0
dXJuIC0xCisKKworY2xhc3MgRmluZChDb21tYW5kKToKKyAgICBuYW1lID0gJ2ZpbmQnCisgICAg
aGVscCA9ICdHaXZlbiBhbiBpZGVudGlmaWVyLCByZXZpc2lvbiBvciBoYXNoLCBub3JtYWxpemUg
YW5kIHByaW50IHRoZSBjb21taXQnCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcGFyc2Vy
KGNscywgcGFyc2VyLCByZXBvc2l0b3J5LCBsb2dnZXJzPU5vbmUpOgorICAgICAgICBhcmd1bWVu
dHMuTG9nZ2luZ0dyb3VwKAorICAgICAgICAgICAgcGFyc2VyLAorICAgICAgICAgICAgbG9nZ2Vy
cz1sb2dnZXJzLAorICAgICAgICAgICAgaGVscD0ne30gYW1vdW50IG9mIGxvZ2dpbmcgYW5kIGNv
bW1pdCBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQnCisgICAgICAgICkuYWRkX2FyZ3VtZW50KAorICAg
ICAgICAgICAgJy0tanNvbicsICctaicsCisgICAgICAgICAgICBoZWxwPSdDb252ZXJ0IHRoZSBj
b21taXQgdG8gYSBtYWNoaW5lLXJlYWRhYmxlIEpTT04gb2JqZWN0JywKKyAgICAgICAgICAgIGFj
dGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICBkZXN0PSdqc29uJywKKyAgICAgICAgICAg
IGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICkKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50
KAorICAgICAgICAgICAgJ2FyZ3VtZW50JywgbmFyZ3M9MSwKKyAgICAgICAgICAgIHR5cGU9c3Ry
LCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICBoZWxwPSdTdHJpbmcgcmVwcmVzZW50YXRpb24g
b2YgYSBjb21taXQgb3IgYnJhbmNoIHRvIGJlIG5vcm1hbGl6ZWQnLAorICAgICAgICApCisKKyAg
ICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbWFpbihjbHMsIGFyZ3MsIHJlcG9zaXRvcnkpOgorICAg
ICAgICB0cnk6CisgICAgICAgICAgICBjb21taXQgPSByZXBvc2l0b3J5LmZpbmQoYXJncy5hcmd1
bWVudFswXSkKKyAgICAgICAgZXhjZXB0IChsb2NhbC5TY20uRXhjZXB0aW9uLCBWYWx1ZUVycm9y
KSBhcyBleGNlcHRpb246CisgICAgICAgICAgICAjIFZhbHVlRXJyb3JzIGFuZCBTY20gZXhjZXB0
aW9ucyB1c3VhbGx5IGNvbnRhaW4gZW5vdWdoIGluZm9ybWF0aW9uIHRvIGJlIGRpc3BsYXllZAor
ICAgICAgICAgICAgIyB0byB0aGUgdXNlciBhcyBhbiBlcnJvcgorICAgICAgICAgICAgc3lzLnN0
ZGVyci53cml0ZShzdHIoZXhjZXB0aW9uKSArICdcbicpCisgICAgICAgICAgICByZXR1cm4gMQor
CisgICAgICAgIGlmIGFyZ3MudmVyYm9zZSA+IDAgYW5kIG5vdCBjb21taXQubWVzc2FnZToKKyAg
ICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxlZCB0byBmaW5kIHRoZSAgY29tbWl0IG1l
c3NhZ2UgZm9yICd7fSdcbiIuZm9ybWF0KGNvbW1pdCkpCisgICAgICAgICAgICByZXR1cm4gMQor
CisgICAgICAgIGlmIGFyZ3MuanNvbjoKKyAgICAgICAgICAgIHByaW50KGpzb24uZHVtcHMoY29t
bWl0LCBjbHM9Q29tbWl0LkVuY29kZXIsIGluZGVudD00KSkKKyAgICAgICAgICAgIHJldHVybiAw
CisKKyAgICAgICAgaWYgYXJncy52ZXJib3NlIDwgMDoKKyAgICAgICAgICAgIHByaW50KCd7aWRl
bnRpZmllcn0gfCB7aGFzaH17cmV2aXNpb259e3RpdGxlfScuZm9ybWF0KAorICAgICAgICAgICAg
ICAgIGlkZW50aWZpZXI9Y29tbWl0LAorICAgICAgICAgICAgICAgIGhhc2g9Y29tbWl0Lmhhc2hb
OkNvbW1pdC5IQVNIX0xBQkVMX1NJWkVdIGlmIGNvbW1pdC5oYXNoIGVsc2UgJycsCisgICAgICAg
ICAgICAgICAgcmV2aXNpb249J3t9cnt9Jy5mb3JtYXQoJywgJyBpZiBjb21taXQuaGFzaCBlbHNl
ICcnLCBjb21taXQucmV2aXNpb24pIGlmIGNvbW1pdC5yZXZpc2lvbiBlbHNlICcnLAorICAgICAg
ICAgICAgICAgIHRpdGxlPScgfCB7fScuZm9ybWF0KGNvbW1pdC5tZXNzYWdlLnNwbGl0bGluZXMo
KVswXSkgaWYgY29tbWl0Lm1lc3NhZ2UgZWxzZSAnJworICAgICAgICAgICAgKSkKKyAgICAgICAg
ICAgIHJldHVybiAwCisKKyAgICAgICAgaWYgY29tbWl0Lm1lc3NhZ2U6CisgICAgICAgICAgICBw
cmludCgnVGl0bGU6IHt9Jy5mb3JtYXQoY29tbWl0Lm1lc3NhZ2Uuc3BsaXRsaW5lcygpWzBdKSkK
KyAgICAgICAgcHJpbnQoJ0F1dGhvcjoge30nLmZvcm1hdChjb21taXQuYXV0aG9yKSkKKyAgICAg
ICAgcHJpbnQoJ0lkZW50aWZpZXI6IHt9Jy5mb3JtYXQoY29tbWl0KSkKKyAgICAgICAgcHJpbnQo
ZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChjb21taXQudGltZXN0YW1wKS5zdHJmdGltZSgnRGF0ZTog
JWEgJWIgJWQgJUg6JU06JVMgJVknKSkKKyAgICAgICAgaWYgYXJncy52ZXJib3NlID4gMCBvciBj
b21taXQucmV2aXNpb246CisgICAgICAgICAgICBwcmludCgnUmV2aXNpb246IHt9Jy5mb3JtYXQo
Y29tbWl0LnJldmlzaW9uIG9yICdOL0EnKSkKKyAgICAgICAgaWYgYXJncy52ZXJib3NlID4gMCBv
ciBjb21taXQuaGFzaDoKKyAgICAgICAgICAgIHByaW50KCdIYXNoOiB7fScuZm9ybWF0KGNvbW1p
dC5oYXNoWzpDb21taXQuSEFTSF9MQUJFTF9TSVpFXSBpZiBjb21taXQuaGFzaCBlbHNlICdOL0En
KSkKKworICAgICAgICBpZiBhcmdzLnZlcmJvc2UgPiAwOgorICAgICAgICAgICAgZm9yIGxpbmUg
aW4gY29tbWl0Lm1lc3NhZ2Uuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIHByaW50KCcg
ICAge30nLmZvcm1hdChsaW5lKSkKKworICAgICAgICByZXR1cm4gMAorCisKK2RlZiBtYWluKGFy
Z3M9Tm9uZSwgcGF0aD1Ob25lLCBsb2dnZXJzPU5vbmUpOgorICAgIGxvZ2dpbmcuYmFzaWNDb25m
aWcobGV2ZWw9bG9nZ2luZy5XQVJOSU5HKQorCisgICAgbG9nZ2VycyA9IFtsb2dnaW5nLmdldExv
Z2dlcigpLCB3ZWJraXRjb3JlcHlfbG9nLCAgbG9nXSArIChsb2dnZXJzIG9yIFtdKQorCisgICAg
cmVwb3NpdG9yeSA9IGxvY2FsLlNjbS5mcm9tX3BhdGgocGF0aD1wYXRoIG9yIG9zLmdldGN3ZCgp
KQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAgICAgIGRlc2Ny
aXB0aW9uPSdDdXN0b20gZ2l0IHRvb2xpbmcgZnJvbSB0aGUgV2ViS2l0IHRlYW0gdG8gaW50ZXJh
Y3Qgd2l0aCBhICcgKworICAgICAgICAgICAgICAgICAgICAncmVwb3NpdG9yeSB1c2luZyBpZGVu
dGlmZXJzJywKKyAgICApCisgICAgYXJndW1lbnRzLkxvZ2dpbmdHcm91cChwYXJzZXIpCisgICAg
c3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhoZWxwPSdzdWItY29tbWFuZCBoZWxw
JykKKworICAgIGZvciBwcm9ncmFtIGluIFtGaW5kXToKKyAgICAgICAgc3VicGFyc2VyID0gc3Vi
cGFyc2Vycy5hZGRfcGFyc2VyKHByb2dyYW0ubmFtZSwgaGVscD1wcm9ncmFtLmhlbHApCisgICAg
ICAgIHN1YnBhcnNlci5zZXRfZGVmYXVsdHMobWFpbj1wcm9ncmFtLm1haW4pCisgICAgICAgIHBy
b2dyYW0ucGFyc2VyKHN1YnBhcnNlciwgcmVwb3NpdG9yeT1yZXBvc2l0b3J5LCBsb2dnZXJzPWxv
Z2dlcnMpCisKKyAgICBwYXJzZWQgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzPWFyZ3MpCisKKyAg
ICByZXR1cm4gcGFyc2VkLm1haW4oYXJncz1wYXJzZWQsIHJlcG9zaXRvcnk9cmVwb3NpdG9yeSkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xv
Y2FsL2dpdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9sb2NhbC9naXQucHkJKHJldmlzaW9uIDI2ODM3NCkKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weQko
d29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAKIGltcG9ydCByZQoraW1wb3J0IHNp
eAogCiBmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgcnVuLCBkZWNvcmF0b3JzLCBUaW1lb3V0RXhw
aXJlZAogZnJvbSB3ZWJraXRzY21weS5sb2NhbCBpbXBvcnQgU2NtCkBAIC04Nyw2ICs4OCwxMSBA
QCBjbGFzcyBHaXQoU2NtKToKICAgICBkZWYgZGVmYXVsdF9icmFuY2goc2VsZik6CiAgICAgICAg
IHJlc3VsdCA9IHJ1bihbc2VsZi5leGVjdXRhYmxlLCAncmV2LXBhcnNlJywgJy0tYWJicmV2LXJl
ZicsICdvcmlnaW4vSEVBRCddLCBjd2Q9c2VsZi5wYXRoLCBjYXB0dXJlX291dHB1dD1UcnVlLCBl
bmNvZGluZz0ndXRmLTgnKQogICAgICAgICBpZiByZXN1bHQucmV0dXJuY29kZToKKyAgICAgICAg
ICAgIGNhbmRpZGF0ZXMgPSBzZWxmLmJyYW5jaGVzCisgICAgICAgICAgICBpZiAnbWFzdGVyJyBp
biBjYW5kaWRhdGVzOgorICAgICAgICAgICAgICAgIHJldHVybiAnbWFzdGVyJworICAgICAgICAg
ICAgaWYgJ21haW4nIGluIGNhbmRpZGF0ZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuICdtYWlu
JwogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgcmV0dXJuICcvJy5qb2luKHJlc3Vs
dC5zdGRvdXQucnN0cmlwKCkuc3BsaXQoJy8nKVsxOl0pCiAKQEAgLTI1MCwzICsyNTYsMjQgQEAg
Y2xhc3MgR2l0KFNjbSk6CiAgICAgICAgICAgICBhdXRob3I9Q29udHJpYnV0b3IuZnJvbV9zY21f
bG9nKGxvZy5zdGRvdXQuc3BsaXRsaW5lcygpWzFdKSwKICAgICAgICAgICAgIG1lc3NhZ2U9J1xu
Jy5qb2luKGxpbmVbNDpdIGZvciBsaW5lIGluIGxvZy5zdGRvdXQuc3BsaXRsaW5lcygpWzQ6XSks
CiAgICAgICAgICkKKworICAgIGRlZiBmaW5kKHNlbGYsIGFyZ3VtZW50KToKKyAgICAgICAgaWYg
bm90IGlzaW5zdGFuY2UoYXJndW1lbnQsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0ZWQgJ2FyZ3VtZW50JyB0byBiZSBhIHN0cmluZywgbm90
ICd7fSciLmZvcm1hdCh0eXBlKGFyZ3VtZW50KSkpCisKKyAgICAgICAgcGFyc2VkX2NvbW1pdCA9
IENvbW1pdC5wYXJzZShhcmd1bWVudCwgZG9fYXNzZXJ0PUZhbHNlKQorICAgICAgICBpZiBwYXJz
ZWRfY29tbWl0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0KAorICAgICAgICAgICAg
ICAgIGhhc2g9cGFyc2VkX2NvbW1pdC5oYXNoLAorICAgICAgICAgICAgICAgIHJldmlzaW9uPXBh
cnNlZF9jb21taXQucmV2aXNpb24sCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1wYXJzZWRf
Y29tbWl0LmlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgYnJhbmNoPXBhcnNlZF9jb21taXQu
YnJhbmNoLAorICAgICAgICAgICAgKQorCisgICAgICAgIG91dHB1dCA9IHJ1bigKKyAgICAgICAg
ICAgIFtzZWxmLmV4ZWN1dGFibGUsICdyZXYtcGFyc2UnLCBhcmd1bWVudF0sCisgICAgICAgICAg
ICBjd2Q9c2VsZi5yb290X3BhdGgsIGNhcHR1cmVfb3V0cHV0PVRydWUsIGVuY29kaW5nPSd1dGYt
OCcsCisgICAgICAgICkKKyAgICAgICAgaWYgb3V0cHV0LnJldHVybmNvZGU6CisgICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCIne30nIGlzIG5vdCBhbiBhcmd1ZW1lbnQgcmVjb2duaXplZCBi
eSBnaXQiLmZvcm1hdChhcmd1bWVudCkpCisgICAgICAgIHJldHVybiBzZWxmLmNvbW1pdChoYXNo
PW91dHB1dC5zdGRvdXQucnN0cmlwKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9zY20ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvc2NtLnB5CShy
ZXZpc2lvbiAyNjgzNzQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9sb2NhbC9zY20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEwICsyMywxMSBA
QAogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCitpbXBvcnQgc2l4CiBpbXBvcnQgc3lzCiAK
IGZyb20gbG9nZ2luZyBpbXBvcnQgTnVsbEhhbmRsZXIKLWZyb20gd2Via2l0c2NtcHkgaW1wb3J0
IGxvZworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9nLCBDb21taXQKIAogCiBjbGFzcyBTY20o
b2JqZWN0KToKQEAgLTQ4LDcgKzQ5LDcgQEAgY2xhc3MgU2NtKG9iamVjdCk6CiAgICAgICAgICAg
ICByZXR1cm4gbG9jYWwuR2l0KHBhdGgpCiAgICAgICAgIGlmIGxvY2FsLlN2bi5pc19jaGVja291
dChwYXRoKToKICAgICAgICAgICAgIHJldHVybiBsb2NhbC5Tdm4ocGF0aCkKLSAgICAgICAgcmFp
c2UgT1NFcnJvcigne30gaXMgbm90IGEga25vd24gU0NNIHR5cGUnKQorICAgICAgICByYWlzZSBP
U0Vycm9yKCIne30nIGlzIG5vdCBhIGtub3duIFNDTSB0eXBlIi5mb3JtYXQocGF0aCkpCiAKICAg
ICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgZGV2X2JyYW5jaGVzPU5vbmUsIHByb2RfYnJhbmNo
ZXM9Tm9uZSk6CiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhdGgsIHN0cik6CkBAIC04OSw2
ICs5MCw0NCBAQCBjbGFzcyBTY20ob2JqZWN0KToKICAgICBkZWYgcmVtb3RlKHNlbGYsIG5hbWU9
Tm9uZSk6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQogCisgICAgZGVmIGZp
bmQoc2VsZiwgYXJndW1lbnQpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmd1bWVudCwg
c2l4LnN0cmluZ190eXBlcyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3Rl
ZCAnYXJndW1lbnQnIHRvIGJlIGEgc3RyaW5nLCBub3QgJ3t9JyIuZm9ybWF0KHR5cGUoYXJndW1l
bnQpKSkKKworICAgICAgICBvZmZzZXQgPSAwCisgICAgICAgIGlmICd+JyBpbiBhcmd1bWVudDoK
KyAgICAgICAgICAgIGZvciBzIGluIGFyZ3VtZW50LnNwbGl0KCd+JylbMTpdOgorICAgICAgICAg
ICAgICAgIGlmIHMgYW5kIG5vdCBzLmlzZGlnaXQoKToKKyAgICAgICAgICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcigiJ3t9JyBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCB0byBTY20uZmluZCgp
Ii5mb3JtYXQoYXJndW1lbnQpKQorICAgICAgICAgICAgICAgIG9mZnNldCArPSBpbnQocykgaWYg
cyBlbHNlIDEKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJndW1lbnQuc3BsaXQoJ34nKVswXQor
CisgICAgICAgIGlmIGFyZ3VtZW50ID09ICdIRUFEJzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNl
bGYuY29tbWl0KCkKKworICAgICAgICBlbGlmIGFyZ3VtZW50IGluIHNlbGYuYnJhbmNoZXM6Cisg
ICAgICAgICAgICByZXN1bHQgPSBzZWxmLmNvbW1pdChicmFuY2g9YXJndW1lbnQpCisKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGlmIG9mZnNldDoKKyAgICAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCInficgb2Zmc2V0cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgcmV2aXNpb25zIGFu
ZCBpZGVudGlmaWVycyIpCisKKyAgICAgICAgICAgIHBhcnNlZF9jb21taXQgPSBDb21taXQucGFy
c2UoYXJndW1lbnQpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoCisgICAgICAgICAg
ICAgICAgaGFzaD1wYXJzZWRfY29tbWl0Lmhhc2gsCisgICAgICAgICAgICAgICAgcmV2aXNpb249
cGFyc2VkX2NvbW1pdC5yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPXBhcnNl
ZF9jb21taXQuaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBicmFuY2g9cGFyc2VkX2NvbW1p
dC5icmFuY2gsCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgbm90IG9mZnNldDoKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoCisgICAg
ICAgICAgICBpZGVudGlmaWVyPXJlc3VsdC5pZGVudGlmaWVyIC0gb2Zmc2V0LAorICAgICAgICAg
ICAgYnJhbmNoPXJlc3VsdC5icmFuY2gsCisgICAgICAgICkKKwogICAgIGRlZiBjb21taXQoc2Vs
ZiwgaGFzaD1Ob25lLCByZXZpc2lvbj1Ob25lLCBpZGVudGlmaWVyPU5vbmUsIGJyYW5jaD1Ob25l
KToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCiAKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9sb2NhbC9zdm4ucHkJKHJldmlzaW9uIDI2ODM3NCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL3N2bi5weQkod29ya2luZyBjb3B5KQpA
QCAtMzcsNyArMzcsNyBAQCBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRyaWJ1
CiAKIAogY2xhc3MgU3ZuKFNjbSk6Ci0gICAgZXhlY3V0YWJsZSA9ICcvdXNyL2xvY2FsL2Jpbi9z
dm4nCisgICAgZXhlY3V0YWJsZSA9ICcvdXNyL2Jpbi9zdm4nIGlmIG9zLnBhdGguZXhpc3RzKCcv
dXNyL2Jpbi9zdm4nKSBlbHNlICcvdXNyL2xvY2FsL2Jpbi9zdm4nCiAgICAgTE9HX1JFID0gcmUu
Y29tcGlsZShyJ3IoP1A8cmV2aXNpb24+XGQrKSBcfCAoP1A8ZW1haWw+LiopIFx8ICg/UDxkYXRl
Pi4qKScpCiAgICAgQ0FDSEVfVkVSU0lPTiA9IFZlcnNpb24oMSkKIApJbmRleDogVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L21vY2tzL2xvY2FsL2dpdC5weQkocmV2aXNpb24gMjY4Mzc0KQorKysgVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvbG9jYWwvZ2l0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDEzIEBAIG5vdGhpbmcgdG8gY29tbWl0LCB3
b3JraW5nIHRyZWUgY2xlYW4KICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PSdvcmlnaW4ve31c
bicuZm9ybWF0KGRlZmF1bHRfYnJhbmNoKSwKICAgICAgICAgICAgICAgICApLAogICAgICAgICAg
ICAgKSwgbW9ja3MuU3VicHJvY2Vzcy5Sb3V0ZSgKKyAgICAgICAgICAgICAgICBsb2NhbC5HaXQu
ZXhlY3V0YWJsZSwgJ3Jldi1wYXJzZScsICcuKicsCisgICAgICAgICAgICAgICAgY3dkPXNlbGYu
cGF0aCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAqKmt3YXJnczog
bW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGU9
MCwKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PSd7fVxuJy5mb3JtYXQoc2VsZi5maW5kKGFy
Z3NbMl0pLmhhc2gpLAorICAgICAgICAgICAgICAgICkgaWYgc2VsZi5maW5kKGFyZ3NbMl0pIGVs
c2UgbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24ocmV0dXJuY29kZT0xMjgpCisgICAgICAgICAgICAp
LCBtb2Nrcy5TdWJwcm9jZXNzLlJvdXRlKAogICAgICAgICAgICAgICAgIGxvY2FsLkdpdC5leGVj
dXRhYmxlLCAnbG9nJywgcmUuY29tcGlsZShyJy4rJyksICctMScsCiAgICAgICAgICAgICAgICAg
Y3dkPXNlbGYucGF0aCwKICAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bGFtYmRhICphcmdzLCAq
Kmt3YXJnczogbW9ja3MuUHJvY2Vzc0NvbXBsZXRpb24oCkluZGV4OiBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2ZpbmRfdW5pdHRlc3QucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvdGVzdC9maW5kX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZmluZF91bml0dGVzdC5weQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAor
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IGpzb24KK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtp
dGNvcmVweSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQorZnJvbSB3ZWJraXRjb3JlcHkubW9ja3MgaW1w
b3J0IFRpbWUgYXMgTW9ja1RpbWUKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsLCAgcHJv
Z3JhbSwgbW9ja3MKKworCitjbGFzcyBUZXN0RmluZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
cGF0aCA9ICcvbW9jay9yZXBvc2l0b3J5JworCisgICAgZGVmIHRlc3RfYmFzaWNfZ2l0KHNlbGYp
OgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nrcy5sb2NhbC5T
dm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9
KCdmaW5kJywgJ0hFQUQnLCAnLXEnKSwKKyAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwK
KyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0
LmdldHZhbHVlKCksICc0QG1haW4gfCBiYWU1ZDFlOTA5OTlcbicpCisKKyAgICBkZWYgdGVzdF9i
YXNpY19naXRfc3ZuKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBh
dGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2Fw
dHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9n
cmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnSEVBRCcsICctcScpLAor
ICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAgICAgKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSwgJzRAbWFpbiB8IGJh
ZTVkMWU5MDk5OSwgcjYgfCA2dGggY29tbWl0XG4nKQorCisgICAgZGVmIHRlc3RfYmFzaWNfc3Zu
KHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdCgpLCBtb2Nrcy5sb2NhbC5Tdm4o
c2VsZi5wYXRoKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAg
IGFyZ3M9KCdmaW5kJywgJ0hFQUQnLCAnLXEnKSwKKyAgICAgICAgICAgICAgICBwYXRoPXNlbGYu
cGF0aCwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQu
c3Rkb3V0LmdldHZhbHVlKCksICc0QHRydW5rIHwgcjYgfCA2dGggY29tbWl0XG4nKQorCisgICAg
ZGVmIHRlc3RfYnJhbmNoX3RpbGRlKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdp
dChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwg
T3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnYnJhbmNo
LWF+MScsICctcScpLAorICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAg
ICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUo
KSwgJzIuMUBicmFuY2gtYSB8IGEzMGNlODQ5NGJmMSwgcjMgfCAzcmQgY29tbWl0XG4nKQorCisg
ICAgZGVmIHRlc3RfaWRlbnRpZmllcl9naXQoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9j
YWwuR2l0KHNlbGYucGF0aCksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2Fw
dHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9n
cmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnMkBtYWluJywgJy1xJyks
CisgICAgICAgICAgICAgICAgcGF0aD1zZWxmLnBhdGgsCisgICAgICAgICAgICApKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnMkBtYWluIHwg
ZmZmODNiYjJkOTE3XG4nKQorCisgICAgZGVmIHRlc3RfaWRlbnRpZmllcl9naXRfc3ZuKHNlbGYp
OgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBhdGgpLCBtb2Nrcy5sb2NhbC5T
dm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAgIGFyZ3M9
KCdmaW5kJywgJzJAbWFpbicsICctcScpLAorICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRo
LAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRv
dXQuZ2V0dmFsdWUoKSwgJzJAbWFpbiB8IGZmZjgzYmIyZDkxN1xuJykKKworICAgIGRlZiB0ZXN0
X2lkZW50aWZpZXJfc3ZuKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdCgpLCBt
b2Nrcy5sb2NhbC5Tdm4oc2VsZi5wYXRoKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBj
YXB0dXJlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAor
ICAgICAgICAgICAgICAgIGFyZ3M9KCdmaW5kJywgJzJAdHJ1bmsnLCAnLXEnKSwKKyAgICAgICAg
ICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCksICcyQHRydW5rIHwgcjIgfCAybmQg
Y29tbWl0XG4nKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nr
cy5sb2NhbC5HaXQoc2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuU3ZuKCksIE1vY2tUaW1lLCBPdXRw
dXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAs
IHByb2dyYW0ubWFpbigKKyAgICAgICAgICAgICAgICBhcmdzPSgnZmluZCcsICczY2QzMmUzNTI0
MTAnLCAnLXEnKSwKKyAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAg
ICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCks
ICcyLjJAYnJhbmNoLWIgfCAzY2QzMmUzNTI0MTBcbicpCisKKyAgICBkZWYgdGVzdF9yZXZpc2lv
bl9zdm4oc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MubG9jYWwuR2l0KCksIG1vY2tzLmxvY2Fs
LlN2bihzZWxmLnBhdGgpLCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAg
ICAgICAgYXJncz0oJ2ZpbmQnLCAncjUnLCAnLXEnKSwKKyAgICAgICAgICAgICAgICBwYXRoPXNl
bGYucGF0aCwKKyAgICAgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVy
ZWQuc3Rkb3V0LmdldHZhbHVlKCksICcyLjJAYnJhbmNoLWIgfCByNSB8IDV0aCBjb21taXRcbicp
CisKKyAgICBkZWYgdGVzdF9yZXZpc2lvbl9naXRfc3ZuKHNlbGYpOgorICAgICAgICB3aXRoIG1v
Y2tzLmxvY2FsLkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigp
LCBNb2NrVGltZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2Zp
bmQnLCAncjUnLCAnLXEnKSwKKyAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAg
ICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZh
bHVlKCksICcyLjJAYnJhbmNoLWIgfCAzY2QzMmUzNTI0MTAsIHI1IHwgNXRoIGNvbW1pdFxuJykK
KworICAgIGRlZiB0ZXN0X3N0YW5kYXJkKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2Fs
LkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGlt
ZSwgT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgwLCBwcm9ncmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnM0Bt
YWluJyksCisgICAgICAgICAgICAgICAgcGF0aD1zZWxmLnBhdGgsCisgICAgICAgICAgICApKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2FwdHVyZWQuc3Rkb3V0Lmdl
dHZhbHVlKCksCisgICAgICAgICAgICAnJydUaXRsZTogNHRoIGNvbW1pdAorQXV0aG9yOiBKb25h
dGhhbiBCZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29tPgorSWRlbnRpZmllcjogM0BtYWluCitEYXRl
OiBGcmkgT2N0IDAyIDExOjIzOjIwIDIwMjAKK1JldmlzaW9uOiA0CitIYXNoOiAxYWJlMjViNDQz
ZTkKKycnJywKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdmVyYm9zZShzZWxmKToKKyAgICAg
ICAgd2l0aCBtb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoLCBnaXRfc3ZuPVRydWUpLCBtb2Nrcy5s
b2NhbC5Tdm4oKSwgTW9ja1RpbWUsIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvZ3JhbS5tYWluKAorICAgICAgICAgICAgICAg
IGFyZ3M9KCdmaW5kJywgJzNAbWFpbicsICctdicpLAorICAgICAgICAgICAgICAgIHBhdGg9c2Vs
Zi5wYXRoLAorICAgICAgICAgICAgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgIGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgJycnVGl0bGU6
IDR0aCBjb21taXQKK0F1dGhvcjogSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFwcGxlLmNvbT4K
K0lkZW50aWZpZXI6IDNAbWFpbgorRGF0ZTogRnJpIE9jdCAwMiAxMToyMzoyMCAyMDIwCitSZXZp
c2lvbjogNAorSGFzaDogMWFiZTI1YjQ0M2U5CisgICAgNHRoIGNvbW1pdAorICAgIHN2bi1pZDog
aHR0cHM6Ly9zdm4ud2Via2l0Lm9yZ3JlcG9zaXRvcnkvcmVwb3NpdG9yeS90cnVua0A0IDI2OGY0
NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYworJycnLAorICAgICAgICApCisKKyAgICBk
ZWYgdGVzdF9qc29uKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBh
dGgsIGdpdF9zdm49VHJ1ZSksIG1vY2tzLmxvY2FsLlN2bigpLCBNb2NrVGltZSwgT3V0cHV0Q2Fw
dHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm9n
cmFtLm1haW4oCisgICAgICAgICAgICAgICAgYXJncz0oJ2ZpbmQnLCAnM0BtYWluJywgJy0tanNv
bicpLAorICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAgICAgKSkKKwor
ICAgICAgICBkZWNvZGVkID0ganNvbi5sb2FkcyhjYXB0dXJlZC5zdGRvdXQuZ2V0dmFsdWUoKSkK
KyAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoCisgICAgICAgICAgICBkZWNvZGVkLCBkaWN0
KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9JzNAbWFpbicsCisgICAgICAgICAgICAgICAg
aGFzaD0nMWFiZTI1YjQ0M2U5ODVmOTNiOTBkODMwZTRhN2UzNzMxMzM2YWY0ZCcsCisgICAgICAg
ICAgICAgICAgcmV2aXNpb249NCwKKyAgICAgICAgICAgICAgICBhdXRob3I9J2piZWRhcmRAYXBw
bGUuY29tJywKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2MzAwMCwKKyAgICAgICAg
ICAgICAgICBicmFuY2g9J21haW4nLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9JzR0aCBjb21t
aXRcbnN2bi1pZDogaHR0cHM6Ly9zdm4ud2Via2l0Lm9yZ3JlcG9zaXRvcnkvcmVwb3NpdG9yeS90
cnVua0A0IDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYycsCisgICAgICAgICAg
ICApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411285</attachid>
            <date>2020-10-13 17:32:18 -0700</date>
            <delta_ts>2020-10-13 18:10:22 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-217534-20201013173218.patch</filename>
            <type>text/plain</type>
            <size>1859</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODQzOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0IEBACisyMDIwLTEwLTEzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBgZ2l0LXdlYmtpdCBmaW5kYCAoRm9sbG93
IHVwIGZpeCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNzUzNAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzAxNTI0MzE+CisKKyAgICAgICAgVW5y
ZXZpZXdlZCBmb2xsb3cgdXAgZml4LgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weTogVmVyc2lvbiBidW1wLgorICAgICAg
ICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3NldHVwLnB5OiAicHJvZ3JhbSIgd2Fz
IG5vdCBhIGRpcmVjdG9yeSBpbiB0aGUgbGFuZGVkIGNoYW5nZS4KKwogMjAyMC0xMC0xMyAgSm9u
YXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdHNjbXB5
XSBBZGQgYGdpdC13ZWJraXQgZmluZGAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQko
cmV2aXNpb24gMjY4NDM3KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5
L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBA
QCBmcm9tIHdlYmtpdGNvcmVweS50aW1lb3V0IGltcG9ydCBUaW1lb3V0CiBmcm9tIHdlYmtpdGNv
cmVweS5zdWJwcm9jZXNzX3V0aWxzIGltcG9ydCBUaW1lb3V0RXhwaXJlZCwgQ29tcGxldGVkUHJv
Y2VzcywgcnVuCiBmcm9tIHdlYmtpdGNvcmVweS5vdXRwdXRfY2FwdHVyZSBpbXBvcnQgTG9nZ2Vy
Q2FwdHVyZSwgT3V0cHV0Q2FwdHVyZSwgT3V0cHV0RHVwbGljYXRlCiAKLXZlcnNpb24gPSBWZXJz
aW9uKDAsIDQsIDE0KQordmVyc2lvbiA9IFZlcnNpb24oMCwgNCwgMTUpCiAKIGZyb20gd2Via2l0
Y29yZXB5LmF1dG9pbnN0YWxsIGltcG9ydCBQYWNrYWdlLCBBdXRvSW5zdGFsbAogaWYgc3lzLnZl
cnNpb25faW5mbyA+ICgzLCAwKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3NldHVwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3NldHVwLnB5CShyZXZpc2lvbiAyNjg0MzcpCisrKyBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS9zZXR1cC5weQkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMs
NiBAQCBzZXR1cCgKICAgICAgICAgJ3dlYmtpdHNjbXB5LmxvY2FsJywKICAgICAgICAgJ3dlYmtp
dHNjbXB5Lm1vY2tzJywKICAgICAgICAgJ3dlYmtpdHNjbXB5Lm1vY2tzLmxvY2FsJywKLSAgICAg
ICAgJ3dlYmtpdHNjbXB5LnByb2dyYW0nLAogICAgICAgICAnd2Via2l0c2NtcHkudGVzdCcsCiAg
ICAgXSwKICAgICBzY3JpcHRzPVsnZ2l0LXdlYmtpdCddLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>