<?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>195755</bug_id>
          
          <creation_ts>2019-03-14 12:09:26 -0700</creation_ts>
          <short_desc>webkitpy: Upload test results</short_desc>
          <delta_ts>2019-03-15 19:49:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1516573</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-14 12:09:26 -0700</bug_when>
    <thetext>Generally, we should be uploading results for all our test suites, to do this, we need a new more general format for uploaded test results. Client-side, that format is managed by webkitpy, so I&apos;m applying the new upload format to that test suite first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516577</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-14 12:11:12 -0700</bug_when>
    <thetext>&lt;rdar://problem/48896182&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516581</commentid>
    <comment_count>2</comment_count>
      <attachid>364676</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-14 12:14:45 -0700</bug_when>
    <thetext>Created attachment 364676
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516582</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-14 12:18:37 -0700</bug_when>
    <thetext>Attachment 364676 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/results/upload.py:131:  [Upload.Encoder.default] An attribute affected in json.encoder line 162 hide this method  [pylint/E0202] [5]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516592</commentid>
    <comment_count>4</comment_count>
      <attachid>364676</attachid>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-03-14 12:59:25 -0700</bug_when>
    <thetext>Comment on attachment 364676
Patch

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

&gt; Tools/Scripts/webkitpy/results/upload.py:36
&gt; +        # These are order by priority, meaning that a test which both crashes and has

ordered

&gt; Tools/Scripts/webkitpy/results/upload.py:164
&gt; +            log_line(&apos; &apos; * 4 + &apos;Failed to upload to {}, results server not online&apos;.format(url))

could there be other connection errors besides server offline. could we fail auth? (is there any auth?)

&gt; Tools/Scripts/webkitpy/results/options.py:1
&gt; +# Copyright (C) 2019 Apple Inc. All rights reserved.

duplicate file?

&gt; Tools/Scripts/webkitpy/results/upload.py:1
&gt; +# Copyright (C) 2019 Apple Inc. All rights reserved.

why is this file in the diff twice?

&gt; Tools/Scripts/webkitpy/test/main.py:243
&gt; +        was_upload_successful = True

if feels weird to prime this to True before we upload... I think it should be set True only after upload is finished and we know it was success.

&gt; Tools/Scripts/webkitpy/test/main.py:279
&gt; +                was_upload_successful &amp;= upload.upload(url, log_line=self.printer.meter.writeln)

we set the value for was_upload_successful here... but it&apos;s inside an if statement. ( if self._options.report_urls: )
if we never enter this block of code, we&apos;ll continue below with was_upload_successful = True (primed from above here)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516594</commentid>
    <comment_count>5</comment_count>
      <attachid>364676</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-14 13:04:22 -0700</bug_when>
    <thetext>Comment on attachment 364676
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/results/upload.py:164
&gt;&gt; +            log_line(&apos; &apos; * 4 + &apos;Failed to upload to {}, results server not online&apos;.format(url))
&gt; 
&gt; could there be other connection errors besides server offline. could we fail auth? (is there any auth?)

Yes, there could....although, I would hope those would be returned via a non-200 status code, in that case we should have an error message encoded in json to print (which we try and do a few lines below this)

&gt;&gt; Tools/Scripts/webkitpy/test/main.py:279
&gt;&gt; +                was_upload_successful &amp;= upload.upload(url, log_line=self.printer.meter.writeln)
&gt; 
&gt; we set the value for was_upload_successful here... but it&apos;s inside an if statement. ( if self._options.report_urls: )
&gt; if we never enter this block of code, we&apos;ll continue below with was_upload_successful = True (primed from above here)

I did this on purpose, and it probably reflects a problem in the variable name...we still want to exit successfully if no upload urls are specified, and I wanted to avoid another if statement when returning status.

Maybe something like &apos;failed_uploads&apos; as an integer that we increment if uploads fail would be better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516762</commentid>
    <comment_count>6</comment_count>
      <attachid>364723</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-14 17:12:36 -0700</bug_when>
    <thetext>Created attachment 364723
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516766</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-14 17:15:38 -0700</bug_when>
    <thetext>Attachment 364723 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/results/upload.py:131:  [Upload.Encoder.default] An attribute affected in json.encoder line 162 hide this method  [pylint/E0202] [5]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516778</commentid>
    <comment_count>8</comment_count>
      <attachid>364729</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-14 17:27:57 -0700</bug_when>
    <thetext>Created attachment 364729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516779</commentid>
    <comment_count>9</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-14 17:28:41 -0700</bug_when>
    <thetext>The fact that some files are in the diff twice is an unfortunate side-effect of svn-create-patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516780</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-14 17:30:26 -0700</bug_when>
    <thetext>Attachment 364729 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/results/upload.py:131:  [Upload.Encoder.default] An attribute affected in json.encoder line 162 hide this method  [pylint/E0202] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516970</commentid>
    <comment_count>11</comment_count>
      <attachid>364798</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 08:13:13 -0700</bug_when>
    <thetext>Created attachment 364798
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516971</commentid>
    <comment_count>12</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-15 08:15:51 -0700</bug_when>
    <thetext>Attachment 364798 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/results/upload.py:133:  [Upload.Encoder.default] An attribute affected in json.encoder line 162 hide this method  [pylint/E0202] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516976</commentid>
    <comment_count>13</comment_count>
      <attachid>364800</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 08:31:08 -0700</bug_when>
    <thetext>Created attachment 364800
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516977</commentid>
    <comment_count>14</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-15 08:33:22 -0700</bug_when>
    <thetext>Attachment 364800 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/results/upload.py:133:  [Upload.Encoder.default] An attribute affected in json.encoder line 162 hide this method  [pylint/E0202] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516984</commentid>
    <comment_count>15</comment_count>
      <attachid>364801</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 08:53:23 -0700</bug_when>
    <thetext>Created attachment 364801
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516987</commentid>
    <comment_count>16</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-15 08:55:51 -0700</bug_when>
    <thetext>Attachment 364801 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/results/upload.py:133:  [Upload.Encoder.default] An attribute affected in json.encoder line 162 hide this method  [pylint/E0202] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516988</commentid>
    <comment_count>17</comment_count>
      <attachid>364803</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 08:58:43 -0700</bug_when>
    <thetext>Created attachment 364803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516989</commentid>
    <comment_count>18</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-15 09:01:03 -0700</bug_when>
    <thetext>Attachment 364803 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/results/upload.py:133:  [Upload.Encoder.default] An attribute affected in json.encoder line 162 hide this method  [pylint/E0202] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516992</commentid>
    <comment_count>19</comment_count>
      <attachid>364805</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 09:16:30 -0700</bug_when>
    <thetext>Created attachment 364805
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516993</commentid>
    <comment_count>20</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-15 09:18:34 -0700</bug_when>
    <thetext>Attachment 364805 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/results/upload.py:133:  [Upload.Encoder.default] An attribute affected in json.encoder line 162 hide this method  [pylint/E0202] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517011</commentid>
    <comment_count>21</comment_count>
      <attachid>364810</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 10:46:08 -0700</bug_when>
    <thetext>Created attachment 364810
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517012</commentid>
    <comment_count>22</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-15 10:48:45 -0700</bug_when>
    <thetext>Attachment 364810 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/results/upload.py:133:  [Upload.Encoder.default] An attribute affected in json.encoder line 162 hide this method  [pylint/E0202] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517018</commentid>
    <comment_count>23</comment_count>
      <attachid>364814</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 11:10:38 -0700</bug_when>
    <thetext>Created attachment 364814
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517022</commentid>
    <comment_count>24</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-15 11:14:36 -0700</bug_when>
    <thetext>Attachment 364814 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/results/upload.py:133:  [Upload.Encoder.default] An attribute affected in json.encoder line 162 hide this method  [pylint/E0202] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517031</commentid>
    <comment_count>25</comment_count>
      <attachid>364816</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 11:29:48 -0700</bug_when>
    <thetext>Created attachment 364816
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517033</commentid>
    <comment_count>26</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-15 11:32:48 -0700</bug_when>
    <thetext>Attachment 364816 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/results/upload.py:133:  [Upload.Encoder.default] An attribute affected in json.encoder line 162 hide this method  [pylint/E0202] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517129</commentid>
    <comment_count>27</comment_count>
      <attachid>364816</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2019-03-15 14:27:58 -0700</bug_when>
    <thetext>Comment on attachment 364816
Patch

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

Looks mostly good; unofficial r+ w/ comments.

&gt; Tools/Scripts/webkitpy/results/upload.py:29
&gt; +import platform as platform_

Can you rename this to host_platform instead?

&gt; Tools/Scripts/webkitpy/results/upload.py:32
&gt; +class Upload(object):

The entire Upload class feels a bit messy with the multiple classes defined within it and __init__ being defined about halfway through... maybe it&apos;d be better to pull some of the classes out to the top level since they&apos;re already part of the `upload` module?

&gt; Tools/Scripts/webkitpy/results/upload.py:64
&gt; +        ):

For any values which *must* be provided, you may want to consider using positional arguments instead of keyword arguments.

&gt; Tools/Scripts/webkitpy/results/upload.py:75
&gt; +                raise ValueError(&apos;{} must be defined in the configuration&apos;.format(key))

Probably worth having a custom exception here.

&gt; Tools/Scripts/webkitpy/results/upload.py:78
&gt; +                config[key] = value

It may be cleaner to do something like:
optional_data = dict(version_name=version_name, model=model, style=style, flavor=flavor, sdk=sdk)
config.update({name: val for val in optiional_data.iteritems() if val is not None})

&gt; Tools/Scripts/webkitpy/results/upload.py:82
&gt; +    def create_commit(repository_id=None, id=None, branch=None):

Ditto to positional vs keyword arguments.

&gt; Tools/Scripts/webkitpy/results/upload.py:97
&gt; +        if options:

It might be more clear to do an early return like:
if not options:
  return result

for element in Upload.BUILDBOT_DETAILS:
  ...
return result

&gt; Tools/Scripts/webkitpy/results/upload.py:98
&gt; +            for element in Upload.BUILDBOT_DETAILS:

Maybe it would be better to put the buildbot-specific logic in its own function, and have that wrap create_details which could be more generalized?

&gt; Tools/Scripts/webkitpy/results/upload.py:107
&gt; +        for key, value in dict(start_time=start_time, end_time=end_time, tests_skipped=tests_skipped).iteritems():

Ditto to positional arguments.

&gt; Tools/Scripts/webkitpy/results/upload.py:117
&gt; +        for key, value in dict(expected=expected, actual=actual, log=log).iteritems():

Ditto to positional arguments.

&gt; Tools/Scripts/webkitpy/results/upload.py:173
&gt; +    def upload(self, url, log_line=lambda val: sys.stdout.write(val + &apos;\n&apos;)):

It may be more clear to define log_line as log_line_func.

&gt; Tools/Scripts/webkitpy/results/upload_unittest.py:58
&gt; +        else:

Nit: `else` is redundant.

&gt; Tools/Scripts/webkitpy/results/upload_unittest.py:61
&gt; +    def test_encoding(self):

This is a really nice integration test for Upload!

&gt; Tools/Scripts/webkitpy/results/upload_unittest.py:129
&gt; +        def raise_exception(url, data):

Nit: Might be more clear to define this as part of UploadTest as `raise_requests_ConnectionError`.

&gt; Tools/Scripts/webkitpy/results/upload_unittest.py:135
&gt; +        with mock.patch(&apos;requests.post&apos;, new=lambda url, data: self.MockResponse(

This broke my brain a little bit.. maybe it would be more clear to define `data: self.MockResponse...` before the `with` block as to keep everything on the same line?

&gt; Tools/Scripts/webkitpy/test/main.py:129
&gt; +        for group_name, group_options in {&apos;Upload Options&apos;: upload_options(), &apos;Configuration Options&apos;: [

I think this is a bit of a regression in readability for this area of code. I think it may be more readable if you define &apos;Configuration Options&apos; outside of the `for` loop.

&gt; Tools/Scripts/webkitpy/test/main.py:248
&gt; +            results = {test: {} for test in test_runner.tests_run}

You may want to add a comment that says &quot;An empty test dictionary indicates the test run was successful/passed.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517150</commentid>
    <comment_count>28</comment_count>
      <attachid>364816</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 14:48:58 -0700</bug_when>
    <thetext>Comment on attachment 364816
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/results/upload.py:32
&gt;&gt; +class Upload(object):
&gt; 
&gt; The entire Upload class feels a bit messy with the multiple classes defined within it and __init__ being defined about halfway through... maybe it&apos;d be better to pull some of the classes out to the top level since they&apos;re already part of the `upload` module?

The only contained class in &apos;Expectations&apos;....the rest are static functions. Would you prefer the __init__ method above the static functions?

&gt;&gt; Tools/Scripts/webkitpy/results/upload.py:75
&gt;&gt; +                raise ValueError(&apos;{} must be defined in the configuration&apos;.format(key))
&gt; 
&gt; Probably worth having a custom exception here.

If we&apos;re going to use positional arguments to enforce values which must be provided, I suppose we can just eliminate this exception entirely.

&gt;&gt; Tools/Scripts/webkitpy/results/upload.py:98
&gt;&gt; +            for element in Upload.BUILDBOT_DETAILS:
&gt; 
&gt; Maybe it would be better to put the buildbot-specific logic in its own function, and have that wrap create_details which could be more generalized?

I might be in favor of that in the future, if we had something other than buildbot details. For now, it seems like extra code that doesn&apos;t do much to increase clarity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517175</commentid>
    <comment_count>29</comment_count>
      <attachid>364816</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 15:11:28 -0700</bug_when>
    <thetext>Comment on attachment 364816
Patch

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/results/upload.py:32
&gt;&gt;&gt; +class Upload(object):
&gt;&gt; 
&gt;&gt; The entire Upload class feels a bit messy with the multiple classes defined within it and __init__ being defined about halfway through... maybe it&apos;d be better to pull some of the classes out to the top level since they&apos;re already part of the `upload` module?
&gt; 
&gt; The only contained class in &apos;Expectations&apos;....the rest are static functions. Would you prefer the __init__ method above the static functions?

Talked to Dean about this, I forgot about the Encoder class contained in this. I&apos;m going to move up the encoder to be with Expectations for consistency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517185</commentid>
    <comment_count>30</comment_count>
      <attachid>364856</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 15:20:44 -0700</bug_when>
    <thetext>Created attachment 364856
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517186</commentid>
    <comment_count>31</comment_count>
      <attachid>364856</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-03-15 15:22:05 -0700</bug_when>
    <thetext>Comment on attachment 364856
Patch

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

&gt; Tools/Scripts/webkitpy/results/upload.py:34
&gt; +    BUILDBOT_DETAILS = [&apos;buildbot-master&apos;, &apos;builder-name&apos;, &apos;build-number&apos;, &apos;buildbot-worker&apos;]

Why doesn&apos;t it have builder-id? how will you construct the url back to the build?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517201</commentid>
    <comment_count>32</comment_count>
      <attachid>364856</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 15:34:57 -0700</bug_when>
    <thetext>Comment on attachment 364856
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/results/upload.py:34
&gt;&gt; +    BUILDBOT_DETAILS = [&apos;buildbot-master&apos;, &apos;builder-name&apos;, &apos;build-number&apos;, &apos;buildbot-worker&apos;]
&gt; 
&gt; Why doesn&apos;t it have builder-id? how will you construct the url back to the build?

I was going to have the back end do this with &lt;{host}/api/v2/builders/{name}&gt; during post-processing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517205</commentid>
    <comment_count>33</comment_count>
      <attachid>364856</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-03-15 15:38:57 -0700</bug_when>
    <thetext>Comment on attachment 364856
Patch

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

&gt; Tools/Scripts/webkitpy/results/upload.py:56
&gt; +            if isinstance(obj, Upload):

It&apos;s a large block of code inside if. It might be better to do an early return. Something like:

if not isinstance(obj, Upload):
    return super(Upload.Encoder, self).default(obj)
...

&gt; Tools/Scripts/webkitpy/results/upload.py:65
&gt; +                    raise ValueError(&apos;All buildbot details must be defined for upload&apos;)

Can we make this error message more informative by printing exactly which buildbot detail is missing?

&gt; Tools/Scripts/webkitpy/results/upload.py:135
&gt; +            value = getattr(options, element.replace(&apos;-&apos;, &apos;_&apos;), None)

why are we replacing &apos;-&apos; with &apos;_&apos;?

&gt; Tools/Scripts/webkitpy/results/upload.py:156
&gt; +    def __init__(self, suite=None, configuration=None, commits=[], timestamp=None, details=None, run_stats=None, results={}):

any specific reason to define __init__ so below in the class (instead of being the first method)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517221</commentid>
    <comment_count>34</comment_count>
      <attachid>364856</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 15:55:46 -0700</bug_when>
    <thetext>Comment on attachment 364856
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/results/upload.py:135
&gt;&gt; +            value = getattr(options, element.replace(&apos;-&apos;, &apos;_&apos;), None)
&gt; 
&gt; why are we replacing &apos;-&apos; with &apos;_&apos;?

Because ArgParse and OptParse both turn args like &apos;argument-details&apos; into variables like &apos;argument_details&apos;

&gt;&gt; Tools/Scripts/webkitpy/results/upload.py:156
&gt;&gt; +    def __init__(self, suite=None, configuration=None, commits=[], timestamp=None, details=None, run_stats=None, results={}):
&gt; 
&gt; any specific reason to define __init__ so below in the class (instead of being the first method)?

I thought it was more clear below the @staticmethods, you and Dean seem to agree it should be the first method, moving it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517223</commentid>
    <comment_count>35</comment_count>
      <attachid>364863</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 15:57:00 -0700</bug_when>
    <thetext>Created attachment 364863
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517227</commentid>
    <comment_count>36</comment_count>
      <attachid>364866</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 15:59:19 -0700</bug_when>
    <thetext>Created attachment 364866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517231</commentid>
    <comment_count>37</comment_count>
      <attachid>364868</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-15 16:00:51 -0700</bug_when>
    <thetext>Created attachment 364868
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517241</commentid>
    <comment_count>38</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-15 16:06:46 -0700</bug_when>
    <thetext>Attachment 364868 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/results/upload.py:55:  [Upload.Encoder.default] An attribute affected in json.encoder line 162 hide this method  [pylint/E0202] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517333</commentid>
    <comment_count>39</comment_count>
      <attachid>364868</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-15 19:49:02 -0700</bug_when>
    <thetext>Comment on attachment 364868
Patch

Clearing flags on attachment: 364868

Committed r243030: &lt;https://trac.webkit.org/changeset/243030&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517334</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-15 19:49:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364676</attachid>
            <date>2019-03-14 12:14:45 -0700</date>
            <delta_ts>2019-03-14 17:12:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190314121444.patch</filename>
            <type>text/plain</type>
            <size>37687</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0Mjk1MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ4IEBACisyMDE5LTAzLTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXN0YWJsaXNoIGEgbmV3IGZvcm1h
dCBmb3IgdXBsb2FkaW5nIHJlc3VsdHMgdGhhdCBpcyBub3QgdGllZCB0byBsYXlvdXQgdGVzdHMs
IGFwcGx5CisgICAgICAgIHRoYXQgZm9ybWF0IHRvIHdlYmtpdHB5IHRlc3RzLgorCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weToKKyAgICAgICAg
KEdpdC5uYXRpdmVfYnJhbmNoKTogUmV0dXJuIHdoYXQgYnJhbmNoIHRoZSBjdXJyZW50IGNoZWNr
b3V0IGlzIG9uLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3Nj
bS9zdm4ucHk6CisgICAgICAgIChTVk4ubmF0aXZlX2JyYW5jaCk6IERpdHRvLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHk6CisgICAgICAg
IChQbGF0Zm9ybUluZm8uYnVpbGRfdmVyc2lvbik6IFJldHVybiBhIGJ1aWxkIHZlcnNpb24gZm9y
IE1hYy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1p
bmZvX21vY2sucHk6CisgICAgICAgIChNb2NrUGxhdGZvcm1JbmZvLl9faW5pdF9fKToKKyAgICAg
ICAgKE1vY2tQbGF0Zm9ybUluZm8uYnVpbGRfdmVyc2lvbik6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9yZXN1bHRzOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3Vs
dHMvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0
cy9vcHRpb25zLnB5OiBBZGRlZC4KKyAgICAgICAgKHVwbG9hZF9vcHRpb25zKTogT3B0UGFyc2Ug
bGlzdCBmb3IgdXBsb2FkIG9wdGlvbnMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1
bHRzL3VwbG9hZC5weTogQWRkZWQuCisgICAgICAgIChVcGxvYWQpOiBDbGFzcyB3aGljaCBlbmZv
cmNlcyB0aGUgdXBsb2FkIGZvcm1hdCBleHBlY3RlZCBieSB0aGUgcmVzdWx0cyBzZXJ2ZXIuCisg
ICAgICAgIChVcGxvYWQuRXhwZWN0YXRpb25zKToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29u
ZmlndXJhdGlvbik6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX2NvbW1pdCk6CisgICAgICAgIChV
cGxvYWQuY3JlYXRlX2RldGFpbHMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMp
OgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdCk6CisgICAgICAgIChVcGxvYWQu
X19pbml0X18pOgorICAgICAgICAoVXBsb2FkLkVuY29kZXIpOiBFbmNvZGUgVXBsb2FkIG9iamVj
dCBhcyBqc29uLgorICAgICAgICAoVXBsb2FkLnVwbG9hZCk6IFVwbG9hZCByZXN1bHRzIHRvIHRo
ZSByZXN1bHRzIHNlcnZlciwgcmV0dXJuaW5nICdUcnVlJyBpZiB0aGUgdXBsb2FkIGlzIHN1Y2Nl
c3NmdWwuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHk6CisgICAgICAg
IChUZXN0ZXIuX3BhcnNlX2FyZ3MpOiBBZGQgdXBsb2FkIGFyZ3VtZW50cy4KKyAgICAgICAgKFRl
c3Rlci5fcnVuX3Rlc3RzKTogQWxsb3cgcmVzdWx0cyB0byBiZSB1cGxvYWRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyLnB5OgorICAgICAgICAoUnVubmVyLl9faW5p
dF9fKTogUmVjb3JkIHdoaWNoIHRlc3RzIHdlcmUgcnVuLCByYXRoZXIgdGhhbiBqdXN0IGNvdW50
aW5nIHRoZW0uCisgICAgICAgIChSdW5uZXIuaGFuZGxlKToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoUnVubmVyVGVzdC50ZXN0
X3J1bik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVlc191
bml0dGVzdC5weToKKyAgICAgICAgKFBhdGNoUHJvY2Vzc2luZ1F1ZXVlVGVzdC50ZXN0X3VwbG9h
ZF9yZXN1bHRzX2FyY2hpdmVfZm9yX3BhdGNoKTogVXBkYXRlIG9zIG5hbWUgZm9yIHRlc3Rpbmcu
CisKIDIwMTktMDMtMTMgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgTWFrZSAtW19XS0F0dGFjaG1lbnQgc2V0RmlsZVdyYXBwZXI6Y29udGVudFR5cGU6
Y29tcGxldGlvbjpdIHJvYnVzdCB3aGVuIGdpdmVuIGEgbmlsIGNvbXBsZXRpb24gaGFuZGxlcgpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5pdF9fLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkobm9uZXhp
c3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNl
YXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCisKKyMgS2VlcCB0aGlzIGZpbGUg
ZnJlZSBvZiBhbnkgY29kZSBvciBpbXBvcnQgc3RhdGVtZW50cyB0aGF0IGNvdWxkCisjIGNhdXNl
IGVpdGhlciBhbiBlcnJvciB0byBvY2N1ciBvciBhIGxvZyBtZXNzYWdlIHRvIGJlIGxvZ2dlZC4K
KyMgVGhpcyBlbnN1cmVzIHRoYXQgY2FsbGluZyBjb2RlIGNhbiBpbXBvcnQgaW5pdGlhbGl6YXRp
b24gY29kZSBmcm9tCisjIHdlYmtpdHB5IGJlZm9yZSBhbnkgZXJyb3JzIG9yIGxvZyBtZXNzYWdl
cyBkdWUgdG8gY29kZSBpbiB0aGlzIGZpbGUuCisjIEluaXRpYWxpemF0aW9uIGNvZGUgY2FuIGlu
Y2x1ZGUgdGhpbmdzIGxpa2UgdmVyc2lvbi1jaGVja2luZyBjb2RlIGFuZAorIyBsb2dnaW5nIGNv
bmZpZ3VyYXRpb24gY29kZS4KKyMKKyMgV2UgZG8gbm90IGV4ZWN1dGUgYW55IHZlcnNpb24tY2hl
Y2tpbmcgY29kZSBvciBsb2dnaW5nIGNvbmZpZ3VyYXRpb24KKyMgY29kZSBpbiB0aGlzIGZpbGUg
c28gdGhhdCBjYWxsZXJzIGNhbiBvcHQtaW4gYXMgdGhleSB3YW50LiAgVGhpcyBhbHNvCisjIGFs
bG93cyBkaWZmZXJlbnQgY2FsbGVycyB0byBjaG9vc2UgZGlmZmVyZW50IGluaXRpYWxpemF0aW9u
IGNvZGUsCisjIGFzIG5lY2Vzc2FyeS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVz
dWx0cy9vcHRpb25zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVz
dWx0cy9vcHRpb25zLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cmVzdWx0cy9vcHRpb25zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9wdHBhcnNlCisKKwor
ZGVmIHVwbG9hZF9vcHRpb25zKCk6CisgICAgcmV0dXJuIFsKKyAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oJy0tcmVwb3J0JywgYWN0aW9uPSdhcHBlbmQnLCBkZXN0PSdyZXBvcnRfdXJscycs
IGhlbHA9J1VSTCAob3IgVVJMcykgdG8gcmVwb3J0IHRlc3QgcmVzdWx0cyB0bycpLAorICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZGJvdC1tYXN0ZXInLCBoZWxwPSdUaGUgdXJs
IG9mIHRoZSBidWlsZGJvdCBtYXN0ZXIuJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9u
KCctLWJ1aWxkZXItbmFtZScsIGhlbHA9J1RoZSBuYW1lIG9mIHRoZSBidWlsZGJvdCBidWlsZGVy
IHRlc3RzIHdlcmUgcnVuIG9uLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1i
dWlsZC1udW1iZXInLCBoZWxwPSdUaGUgYnVpbGRib3QgYnVpbGQgbnVtYmVyIHRlc3RzIGFyZSBh
c3NvY2lhdGVkIHdpdGguJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxk
Ym90LXdvcmtlcicsIGhlbHA9J1RoZSBidWlsZGJvdCB3b3JrZXIgdGVzdHMgd2VyZSBydW4gb24u
JyksCisgICAgXQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5
CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGpzb24KK2ltcG9ydCByZXF1ZXN0cworaW1wb3J0
IHN5cworCitpbXBvcnQgcGxhdGZvcm0gYXMgcGxhdGZvcm1fCisKKworY2xhc3MgVXBsb2FkKG9i
amVjdCk6CisgICAgVVBMT0FEX0VORFBPSU5UID0gJy9hcGkvdXBsb2FkJworICAgIEJVSUxEQk9U
X0RFVEFJTFMgPSBbJ2J1aWxkYm90LW1hc3RlcicsICdidWlsZGVyLW5hbWUnLCAnYnVpbGQtbnVt
YmVyJywgJ2J1aWxkYm90LXdvcmtlciddCisgICAgVkVSU0lPTiA9IDAKKworICAgIGNsYXNzIEV4
cGVjdGF0aW9uczoKKyAgICAgICAgIyBUaGVzZSBhcmUgb3JkZXIgYnkgcHJpb3JpdHksIG1lYW5p
bmcgdGhhdCBhIHRlc3Qgd2hpY2ggYm90aCBjcmFzaGVzIGFuZCBoYXMKKyAgICAgICAgIyBhIHdh
cm5pbmcgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gaGF2ZSBjcmFzaGVkLgorICAgICAgICBPUkRF
UiA9IFsKKyAgICAgICAgICAgICdDUkFTSCcsCisgICAgICAgICAgICAnVElNRU9VVCcsCisgICAg
ICAgICAgICAnSU1BR0UnLCAgICMgSW1hZ2UtZGlmZgorICAgICAgICAgICAgJ0FVRElPJywgICAj
IEF1ZGlvLWRpZmYKKyAgICAgICAgICAgICdURVhUJywgICAgIyBUZXh0LWRpZmYKKyAgICAgICAg
ICAgICdGQUlMJywKKyAgICAgICAgICAgICdFUlJPUicsCisgICAgICAgICAgICAnV0FSTklORycs
CisgICAgICAgICAgICAnUEFTUycsCisgICAgICAgIF0KKyAgICAgICAgQ1JBU0gsIFRJTUVPVVQs
IElNQUdFLCBBVURJTywgVEVYVCwgRkFJTCwgRVJST1IsIFdBUk5JTkcsIFBBU1MgPSBPUkRFUgor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAg
ICAgICAgIHBsYXRmb3JtPU5vbmUsCisgICAgICAgICAgICBpc19zaW11bGF0b3I9RmFsc2UsCisg
ICAgICAgICAgICB2ZXJzaW9uPU5vbmUsCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9Tm9uZSwK
KyAgICAgICAgICAgIHZlcnNpb25fbmFtZT1Ob25lLAorICAgICAgICAgICAgbW9kZWw9Tm9uZSwK
KyAgICAgICAgICAgIHN0eWxlPU5vbmUsICAgIyBEZWJ1Zy9Qcm9kdWN0aW9uL1JlbGVhc2UKKyAg
ICAgICAgICAgIGZsYXZvcj1Ob25lLCAgIyBEdW1waW5nIGdyb3VuZCBzdWl0ZS13aWRlIGNvbmZp
Z3VyYXRpb24gY2hhbmdlcyAoaWUsIEd1YXJkTWFsbG9jKQorICAgICAgICAgICAgc2RrPU5vbmUs
CisgICAgICAgICk6CisKKyAgICAgICAgIyBUaGlzIGRldmlhdGVzIHNsaWdodGx5IGZyb20gdGhl
IHJlc3Qgb2Ygd2Via2l0cHksIGJ1dCBpdCBhbGxvd3MgdGhpcyBmaWxlIHRvIGJlIGVudGlyZWx5
IHBvcnRhYmxlLgorICAgICAgICBjb25maWcgPSBkaWN0KAorICAgICAgICAgICAgcGxhdGZvcm09
cGxhdGZvcm0gb3IgKHBsYXRmb3JtXy5zeXN0ZW0oKSBpZiBwbGF0Zm9ybV8uc3lzdGVtKCkgIT0g
J0RhcndpbicgZWxzZSAnbWFjJykubG93ZXIoKSwKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1p
c19zaW11bGF0b3IsCisgICAgICAgICAgICB2ZXJzaW9uPXZlcnNpb24gb3IgKHBsYXRmb3JtXy5y
ZWxlYXNlKCkgaWYgcGxhdGZvcm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVsc2UgcGxhdGZvcm1f
Lm1hY192ZXIoKVswXSksCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlIG9y
IHBsYXRmb3JtXy5tYWNoaW5lKCksCisgICAgICAgICkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUg
aW4gY29uZmlnLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAg
ICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRlZmluZWQgaW4gdGhl
IGNvbmZpZ3VyYXRpb24nLmZvcm1hdChrZXkpKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBk
aWN0KHZlcnNpb25fbmFtZT12ZXJzaW9uX25hbWUsIG1vZGVsPW1vZGVsLCBzdHlsZT1zdHlsZSwg
Zmxhdm9yPWZsYXZvciwgc2RrPXNkaykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1
ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjb25maWdba2V5XSA9IHZhbHVlCisgICAg
ICAgIHJldHVybiBjb25maWcKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2Nv
bW1pdChyZXBvc2l0b3J5X2lkPU5vbmUsIGlkPU5vbmUsIGJyYW5jaD1Ob25lKToKKyAgICAgICAg
Y29tbWl0ID0gZGljdChyZXBvc2l0b3J5X2lkPXJlcG9zaXRvcnlfaWQsIGlkPWlkKQorICAgICAg
ICBmb3Iga2V5LCB2YWx1ZSBpbiBjb21taXQuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2
YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IG11c3Qg
YmUgZGVmaW5lZCBpbiBhIGNvbW1pdCcuZm9ybWF0KGtleSkpCisgICAgICAgIGlmIGJyYW5jaDoK
KyAgICAgICAgICAgIGNvbW1pdFsnYnJhbmNoJ10gPSBicmFuY2gKKyAgICAgICAgcmV0dXJuIGNv
bW1pdAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfZGV0YWlscyhsaW5rPU5v
bmUsIG9wdGlvbnM9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCoqa3dh
cmdzKQorICAgICAgICBpZiBsaW5rOgorICAgICAgICAgICAgcmVzdWx0WydsaW5rJ10gPSBsaW5r
CisKKyAgICAgICAgaWYgb3B0aW9uczoKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIFVwbG9h
ZC5CVUlMREJPVF9ERVRBSUxTOgorICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihvcHRp
b25zLCBlbGVtZW50LnJlcGxhY2UoJy0nLCAnXycpLCBOb25lKQorICAgICAgICAgICAgICAgIGlm
IHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbZWxlbWVudF0g
PSB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIGNyZWF0ZV9ydW5fc3RhdHMoc3RhcnRfdGltZT1Ob25lLCBlbmRfdGltZT1Ob25lLCB0ZXN0
c19za2lwcGVkPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc3RhdHMgPSBkaWN0KCoqa3dhcmdz
KQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwg
ZW5kX3RpbWU9ZW5kX3RpbWUsIHRlc3RzX3NraXBwZWQ9dGVzdHNfc2tpcHBlZCkuaXRlcml0ZW1z
KCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBz
dGF0c1trZXldID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHN0YXRzCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIGNyZWF0ZV90ZXN0X3Jlc3VsdChleHBlY3RlZD1Ob25lLCBhY3R1YWw9Tm9u
ZSwgbG9nPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgqKmt3YXJncykK
KworICAgICAgICAjIFRlc3RzIHdoaWNoIGRvbid0IGRlY2xhcmUgZXhwZWN0YXRpb25zIG9yIHJl
c3VsdHMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBwYXNzZWQuCisgICAgICAgIGZvciBrZXksIHZhbHVl
IGluIGRpY3QoZXhwZWN0ZWQ9ZXhwZWN0ZWQsIGFjdHVhbD1hY3R1YWwsIGxvZz1sb2cpLml0ZXJp
dGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAg
ICAgcmVzdWx0W2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgc3VpdGU9Tm9uZSwgY29uZmlndXJhdGlvbj1Ob25lLCBjb21taXRzPVtd
LCB0aW1lc3RhbXA9Tm9uZSwgZGV0YWlscz1Ob25lLCBydW5fc3RhdHM9Tm9uZSwgcmVzdWx0cz17
fSk6CisgICAgICAgIHNlbGYuc3VpdGUgPSBzdWl0ZQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRp
b24gPSBjb25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuY29tbWl0cyA9IGNvbW1pdHMKKyAgICAg
ICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAKKyAgICAgICAgc2VsZi5kZXRhaWxzID0gZGV0
YWlscworICAgICAgICBzZWxmLnJ1bl9zdGF0cyA9IHJ1bl9zdGF0cworICAgICAgICBzZWxmLnJl
c3VsdHMgPSByZXN1bHRzCisKKyAgICBjbGFzcyBFbmNvZGVyKGpzb24uSlNPTkVuY29kZXIpOgor
CisgICAgICAgIGRlZiBkZWZhdWx0KHNlbGYsIG9iaik6CisgICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKG9iaiwgVXBsb2FkKToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb2JqLnN1aXRlOgorICAg
ICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBzdWl0ZSBzcGVjaWZpZWQgdG8g
cmVzdWx0cyB1cGxvYWQnKQorICAgICAgICAgICAgICAgIGlmIG5vdCBvYmouY29tbWl0czoKKyAg
ICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm8gY29tbWl0cyBzcGVjaWZpZWQg
dG8gcmVzdWx0cyB1cGxvYWQnKQorCisgICAgICAgICAgICAgICAgZGV0YWlscyA9IG9iai5kZXRh
aWxzIG9yIG9iai5jcmVhdGVfZGV0YWlscygpCisgICAgICAgICAgICAgICAgYnVpbGRib3RfYXJn
cyA9IFtkZXRhaWxzLmdldChhcmcsIE5vbmUpIGlzIE5vbmUgZm9yIGFyZyBpbiBvYmouQlVJTERC
T1RfREVUQUlMU10KKyAgICAgICAgICAgICAgICBpZiBhbnkoYnVpbGRib3RfYXJncykgYW5kIG5v
dCBhbGwoYnVpbGRib3RfYXJncyk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ0FsbCBidWlsZGJvdCBkZXRhaWxzIG11c3QgYmUgZGVmaW5lZCBmb3IgdXBsb2FkJykKKwor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRpY3QoCisgICAgICAgICAgICAgICAgICAgIHZlcnNp
b249b2JqLlZFUlNJT04sCisgICAgICAgICAgICAgICAgICAgIHN1aXRlPW9iai5zdWl0ZSwKKyAg
ICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbj1vYmouY29uZmlndXJhdGlvbiBvciBvYmou
Y3JlYXRlX2NvbmZpZ3VyYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0cz1vYmou
Y29tbWl0cywKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzPWRpY3QoCisgICAgICAg
ICAgICAgICAgICAgICAgICBkZXRhaWxzPWRldGFpbHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICBydW5fc3RhdHM9b2JqLnJ1bl9zdGF0cyBvciBvYmouY3JlYXRlX3J1bl9zdGF0cygpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cz1vYmoucmVzdWx0cywKKyAgICAgICAgICAgICAg
ICAgICAgKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgaWYgb2JqLnRpbWVz
dGFtcDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wyd0aW1lc3RhbXAnXSA9IG9iai50aW1l
c3RhbXAKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgICAgICByZXR1cm4g
c3VwZXIoVXBsb2FkLkVuY29kZXIsIHNlbGYpLmRlZmF1bHQob2JqKQorCisgICAgZGVmIHVwbG9h
ZChzZWxmLCB1cmwsIGxvZ19saW5lPWxhbWJkYSB2YWw6IHN5cy5zdGRvdXQud3JpdGUodmFsICsg
J1xuJykpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmludCBqc29uLmR1bXBzKHNlbGYs
IGNscz1VcGxvYWQuRW5jb2RlciwgaW5kZW50PTQpCisgICAgICAgICAgICByZXNwb25zZSA9IHJl
cXVlc3RzLnBvc3QodXJsICsgc2VsZi5VUExPQURfRU5EUE9JTlQsIGRhdGE9anNvbi5kdW1wcyhz
ZWxmLCBjbHM9VXBsb2FkLkVuY29kZXIpKQorICAgICAgICBleGNlcHQgcmVxdWVzdHMuZXhjZXB0
aW9ucy5Db25uZWN0aW9uRXJyb3I6CisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ0Zh
aWxlZCB0byB1cGxvYWQgdG8ge30sIHJlc3VsdHMgc2VydmVyIG5vdCBvbmxpbmUnLmZvcm1hdCh1
cmwpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9y
IGFzIGU6CisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ0ZhaWxlZCB0byBlbmNvZGUg
dXBsb2FkIGRhdGE6IHt9Jy5mb3JtYXQoZSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICBsb2df
bGluZSgnICcgKiA0ICsgJ0Vycm9yIHVwbG9hZGluZyB0byB7fTonLmZvcm1hdCh1cmwpKQorICAg
ICAgICAgICAgbG9nX2xpbmUoJyAnICogOCArIHJlc3BvbnNlLmpzb24oKVsnZGVzY3JpcHRpb24n
XSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGxvZ19saW5lKCcgJyAqIDQg
KyAnVXBsb2FkZWQgcmVzdWx0cyB0byB7fScuZm9ybWF0KHVybCkpCisgICAgICAgIHJldHVybiBU
cnVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0
L3NjbS9naXQucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw2ICsyOTAs
OSBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYgbmF0aXZlX3Jldmlz
aW9uKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJy1DJywgc2Vs
Zi5maW5kX2NoZWNrb3V0X3Jvb3QocGF0aCksICdsb2cnLCAnLTEnLCAnLS1wcmV0dHk9Zm9ybWF0
OiVIJ10pCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3J1bl9naXQoWyctQycsIHNlbGYuZmluZF9jaGVja291dF9yb290KHBhdGgpLCAn
cmV2LXBhcnNlJywgJy0tYWJicmV2LXJlZicsICdIRUFEJ10pCisKICAgICBkZWYgc3ZuX3VybChz
ZWxmKToKICAgICAgICAgZ2l0X2NvbW1hbmQgPSBbJ3N2bicsICdpbmZvJ10KICAgICAgICAgc3Rh
dHVzID0gc2VsZi5fcnVuX2dpdChnaXRfY29tbWFuZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weQkocmV2aXNpb24gMjQyOTIy
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weQko
d29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBjbGFzcyBTVk4oU0NNLCBTVk5SZXBvc2l0
b3J5KToKICAgICAgICAgU0NNLl9faW5pdF9fKHNlbGYsIGN3ZCwgKiprd2FyZ3MpCiAgICAgICAg
IHNlbGYuX2JvZ3VzX2RpciA9IE5vbmUKICAgICAgICAgaWYgcGF0Y2hfZGlyZWN0b3JpZXMgPT0g
W106Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24obWVzc2FnZT0nRW1wdHkgbGlzdCBvZiBw
YXRjaCBkaXJlY3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5pdF9fJykKKyAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbignRW1wdHkgbGlzdCBvZiBwYXRjaCBkaXJlY3RvcmllcyBwYXNzZWQgdG8g
U0NNLl9faW5pdF9fJykKICAgICAgICAgZWxpZiBwYXRjaF9kaXJlY3RvcmllcyA9PSBOb25lOgog
ICAgICAgICAgICAgc2VsZi5fcGF0Y2hfZGlyZWN0b3JpZXMgPSBbc2VsZi5fZmlsZXN5c3RlbS5y
ZWxwYXRoKGN3ZCwgc2VsZi5jaGVja291dF9yb290KV0KICAgICAgICAgZWxzZToKQEAgLTI3OCw2
ICsyNzgsMTQgQEAgY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVmIG5hdGl2
ZV9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIHNlbGYuc3ZuX3JldmlzaW9u
KHBhdGgpCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBwYXRoKToKKyAgICAgICAgcmVs
YXRpdmVfdXJsID0gc2VsZi52YWx1ZV9mcm9tX3N2bl9pbmZvKHBhdGgsICdSZWxhdGl2ZSBVUkwn
KVsyOl0KKyAgICAgICAgaWYgcmVsYXRpdmVfdXJsLnN0YXJ0c3dpdGgoJ3RydW5rJyk6CisgICAg
ICAgICAgICByZXR1cm4gJ3RydW5rJworICAgICAgICBlbGlmIHJlbGF0aXZlX3VybC5zdGFydHN3
aXRoKCdicmFuY2gnKToKKyAgICAgICAgICAgIHJldHVybiByZWxhdGl2ZV91cmwuc3BsaXQoJy8n
KVsxXQorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3t9IGlzIG5vdCBhIGJyYW5jaCcuZm9ybWF0
KHJlbGF0aXZlX3VybC5zcGxpdCgnLycpWzBdKSkKKwogICAgIGRlZiB0aW1lc3RhbXBfb2ZfcmV2
aXNpb24oc2VsZiwgcGF0aCwgcmV2aXNpb24pOgogICAgICAgICAjIFdlIHVzZSAtLXhtbCB0byBn
ZXQgdGltZXN0YW1wcyBsaWtlIDIwMTMtMDItMDhUMDg6MTg6MDQuOTY0NDA5WgogICAgICAgICBy
ZXBvc2l0b3J5X3Jvb3QgPSBzZWxmLnZhbHVlX2Zyb21fc3ZuX2luZm8oc2VsZi5jaGVja291dF9y
b290LCAnUmVwb3NpdG9yeSBSb290JykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQkocmV2aXNpb24gMjQyOTIyKQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQko
d29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0NiwxMSBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2Jq
ZWN0KToKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcmV0dXJuIHN5cy5tYXhpbnQKIAor
ICAgIGRlZiBidWlsZF92ZXJzaW9uKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlzX21hYygpOgor
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJy91c3IvYmlu
L3N3X3ZlcnMnLCAnLWJ1aWxkVmVyc2lvbiddLCByZXR1cm5fc3RkZXJyPUZhbHNlLCBpZ25vcmVf
ZXJyb3JzPVRydWUpLnJzdHJpcCgpCisgICAgICAgIHJldHVybiBOb25lCisKICAgICBkZWYgeGNv
ZGVfc2RrX3ZlcnNpb24oc2VsZiwgc2RrX25hbWUpOgogICAgICAgICBpZiBzZWxmLmlzX21hYygp
OgogICAgICAgICAgICAgIyBBc3N1bWVzIHRoYXQgeGNydW4gZG9lcyBub3Qgd3JpdGUgdG8gc3Rh
bmRhcmQgb3V0cHV0IG9uIGZhaWx1cmUgKGUuZy4gU0RLIGRvZXMgbm90IGV4aXN0KS4KSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxh
dGZvcm1pbmZvX21vY2sucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weQkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVfbWFwIGlt
CiAKIAogY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPVZlcnNpb24uZnJvbV9uYW1lKCdTbm93IExl
b3BhcmQnKSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9zX25hbWU9J21hYycsIG9zX3ZlcnNp
b249VmVyc2lvbi5mcm9tX25hbWUoJ0hpZ2ggU2llcnJhJykpOgogICAgICAgICBhc3NlcnQgaXNp
bnN0YW5jZShvc192ZXJzaW9uLCBWZXJzaW9uKQogICAgICAgICBzZWxmLm9zX25hbWUgPSBvc19u
YW1lCiAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IG9zX3ZlcnNpb24KQEAgLTc4LDYgKzc4LDEx
IEBAIGNsYXNzIE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICBkZWYgdGVybWluYWxfd2lk
dGgoc2VsZik6CiAgICAgICAgIHJldHVybiA4MAogCisgICAgZGVmIGJ1aWxkX3ZlcnNpb24oc2Vs
Zik6CisgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CisgICAgICAgICAgICByZXR1cm4gJzE3QTQw
NScKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiB4Y29kZV9zZGtfdmVyc2lvbihzZWxm
LCBzZGtfbmFtZSk6CiAgICAgICAgIHJldHVybiBWZXJzaW9uKDgsIDEpCiAKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTMgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBk
aXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCisjIEtlZXAgdGhpcyBmaWxlIGZyZWUgb2YgYW55
IGNvZGUgb3IgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBjb3VsZAorIyBjYXVzZSBlaXRoZXIgYW4g
ZXJyb3IgdG8gb2NjdXIgb3IgYSBsb2cgbWVzc2FnZSB0byBiZSBsb2dnZWQuCisjIFRoaXMgZW5z
dXJlcyB0aGF0IGNhbGxpbmcgY29kZSBjYW4gaW1wb3J0IGluaXRpYWxpemF0aW9uIGNvZGUgZnJv
bQorIyB3ZWJraXRweSBiZWZvcmUgYW55IGVycm9ycyBvciBsb2cgbWVzc2FnZXMgZHVlIHRvIGNv
ZGUgaW4gdGhpcyBmaWxlLgorIyBJbml0aWFsaXphdGlvbiBjb2RlIGNhbiBpbmNsdWRlIHRoaW5n
cyBsaWtlIHZlcnNpb24tY2hlY2tpbmcgY29kZSBhbmQKKyMgbG9nZ2luZyBjb25maWd1cmF0aW9u
IGNvZGUuCisjCisjIFdlIGRvIG5vdCBleGVjdXRlIGFueSB2ZXJzaW9uLWNoZWNraW5nIGNvZGUg
b3IgbG9nZ2luZyBjb25maWd1cmF0aW9uCisjIGNvZGUgaW4gdGhpcyBmaWxlIHNvIHRoYXQgY2Fs
bGVycyBjYW4gb3B0LWluIGFzIHRoZXkgd2FudC4gIFRoaXMgYWxzbworIyBhbGxvd3MgZGlmZmVy
ZW50IGNhbGxlcnMgdG8gY2hvb3NlIGRpZmZlcmVudCBpbml0aWFsaXphdGlvbiBjb2RlLAorIyBh
cyBuZWNlc3NhcnkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvb3B0aW9u
cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvb3B0aW9u
cy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvb3B0
aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcHRwYXJzZQorCisKK2RlZiB1cGxvYWRf
b3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCct
LXJlcG9ydCcsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0ncmVwb3J0X3VybHMnLCBoZWxwPSdVUkwg
KG9yIFVSTHMpIHRvIHJlcG9ydCB0ZXN0IHJlc3VsdHMgdG8nKSwKKyAgICAgICAgb3B0cGFyc2Uu
bWFrZV9vcHRpb24oJy0tYnVpbGRib3QtbWFzdGVyJywgaGVscD0nVGhlIHVybCBvZiB0aGUgYnVp
bGRib3QgbWFzdGVyLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZGVy
LW5hbWUnLCBoZWxwPSdUaGUgbmFtZSBvZiB0aGUgYnVpbGRib3QgYnVpbGRlciB0ZXN0cyB3ZXJl
IHJ1biBvbi4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGQtbnVtYmVy
JywgaGVscD0nVGhlIGJ1aWxkYm90IGJ1aWxkIG51bWJlciB0ZXN0cyBhcmUgYXNzb2NpYXRlZCB3
aXRoLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZGJvdC13b3JrZXIn
LCBoZWxwPSdUaGUgYnVpbGRib3Qgd29ya2VyIHRlc3RzIHdlcmUgcnVuIG9uLicpLAorICAgIF0K
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQkobm9uZXhpc3Rl
bnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTc2IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgor
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
CisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCBqc29uCitpbXBvcnQgcmVxdWVzdHMKK2ltcG9ydCBzeXMKKworaW1w
b3J0IHBsYXRmb3JtIGFzIHBsYXRmb3JtXworCisKK2NsYXNzIFVwbG9hZChvYmplY3QpOgorICAg
IFVQTE9BRF9FTkRQT0lOVCA9ICcvYXBpL3VwbG9hZCcKKyAgICBCVUlMREJPVF9ERVRBSUxTID0g
WydidWlsZGJvdC1tYXN0ZXInLCAnYnVpbGRlci1uYW1lJywgJ2J1aWxkLW51bWJlcicsICdidWls
ZGJvdC13b3JrZXInXQorICAgIFZFUlNJT04gPSAwCisKKyAgICBjbGFzcyBFeHBlY3RhdGlvbnM6
CisgICAgICAgICMgVGhlc2UgYXJlIG9yZGVyIGJ5IHByaW9yaXR5LCBtZWFuaW5nIHRoYXQgYSB0
ZXN0IHdoaWNoIGJvdGggY3Jhc2hlcyBhbmQgaGFzCisgICAgICAgICMgYSB3YXJuaW5nIHNob3Vs
ZCBiZSBjb25zaWRlcmVkIHRvIGhhdmUgY3Jhc2hlZC4KKyAgICAgICAgT1JERVIgPSBbCisgICAg
ICAgICAgICAnQ1JBU0gnLAorICAgICAgICAgICAgJ1RJTUVPVVQnLAorICAgICAgICAgICAgJ0lN
QUdFJywgICAjIEltYWdlLWRpZmYKKyAgICAgICAgICAgICdBVURJTycsICAgIyBBdWRpby1kaWZm
CisgICAgICAgICAgICAnVEVYVCcsICAgICMgVGV4dC1kaWZmCisgICAgICAgICAgICAnRkFJTCcs
CisgICAgICAgICAgICAnRVJST1InLAorICAgICAgICAgICAgJ1dBUk5JTkcnLAorICAgICAgICAg
ICAgJ1BBU1MnLAorICAgICAgICBdCisgICAgICAgIENSQVNILCBUSU1FT1VULCBJTUFHRSwgQVVE
SU8sIFRFWFQsIEZBSUwsIEVSUk9SLCBXQVJOSU5HLCBQQVNTID0gT1JERVIKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICBwbGF0
Zm9ybT1Ob25lLAorICAgICAgICAgICAgaXNfc2ltdWxhdG9yPUZhbHNlLAorICAgICAgICAgICAg
dmVyc2lvbj1Ob25lLAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPU5vbmUsCisgICAgICAgICAg
ICB2ZXJzaW9uX25hbWU9Tm9uZSwKKyAgICAgICAgICAgIG1vZGVsPU5vbmUsCisgICAgICAgICAg
ICBzdHlsZT1Ob25lLCAgICMgRGVidWcvUHJvZHVjdGlvbi9SZWxlYXNlCisgICAgICAgICAgICBm
bGF2b3I9Tm9uZSwgICMgRHVtcGluZyBncm91bmQgc3VpdGUtd2lkZSBjb25maWd1cmF0aW9uIGNo
YW5nZXMgKGllLCBHdWFyZE1hbGxvYykKKyAgICAgICAgICAgIHNkaz1Ob25lLAorICAgICAgICAp
OgorCisgICAgICAgICMgVGhpcyBkZXZpYXRlcyBzbGlnaHRseSBmcm9tIHRoZSByZXN0IG9mIHdl
YmtpdHB5LCBidXQgaXQgYWxsb3dzIHRoaXMgZmlsZSB0byBiZSBlbnRpcmVseSBwb3J0YWJsZS4K
KyAgICAgICAgY29uZmlnID0gZGljdCgKKyAgICAgICAgICAgIHBsYXRmb3JtPXBsYXRmb3JtIG9y
IChwbGF0Zm9ybV8uc3lzdGVtKCkgaWYgcGxhdGZvcm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVs
c2UgJ21hYycpLmxvd2VyKCksCisgICAgICAgICAgICBpc19zaW11bGF0b3I9aXNfc2ltdWxhdG9y
LAorICAgICAgICAgICAgdmVyc2lvbj12ZXJzaW9uIG9yIChwbGF0Zm9ybV8ucmVsZWFzZSgpIGlm
IHBsYXRmb3JtXy5zeXN0ZW0oKSAhPSAnRGFyd2luJyBlbHNlIHBsYXRmb3JtXy5tYWNfdmVyKClb
MF0pLAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPWFyY2hpdGVjdHVyZSBvciBwbGF0Zm9ybV8u
bWFjaGluZSgpLAorICAgICAgICApCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbmZpZy5p
dGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcigne30gbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjb25maWd1cmF0
aW9uJy5mb3JtYXQoa2V5KSkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGljdCh2ZXJzaW9u
X25hbWU9dmVyc2lvbl9uYW1lLCBtb2RlbD1tb2RlbCwgc3R5bGU9c3R5bGUsIGZsYXZvcj1mbGF2
b3IsIHNkaz1zZGspLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICAgICAgY29uZmlnW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4g
Y29uZmlnCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9jb21taXQocmVwb3Np
dG9yeV9pZD1Ob25lLCBpZD1Ob25lLCBicmFuY2g9Tm9uZSk6CisgICAgICAgIGNvbW1pdCA9IGRp
Y3QocmVwb3NpdG9yeV9pZD1yZXBvc2l0b3J5X2lkLCBpZD1pZCkKKyAgICAgICAgZm9yIGtleSwg
dmFsdWUgaW4gY29tbWl0Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9u
ZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRlZmluZWQg
aW4gYSBjb21taXQnLmZvcm1hdChrZXkpKQorICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAg
ICBjb21taXRbJ2JyYW5jaCddID0gYnJhbmNoCisgICAgICAgIHJldHVybiBjb21taXQKKworICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2RldGFpbHMobGluaz1Ob25lLCBvcHRpb25z
PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgqKmt3YXJncykKKyAgICAg
ICAgaWYgbGluazoKKyAgICAgICAgICAgIHJlc3VsdFsnbGluayddID0gbGluaworCisgICAgICAg
IGlmIG9wdGlvbnM6CisgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBVcGxvYWQuQlVJTERCT1Rf
REVUQUlMUzoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob3B0aW9ucywgZWxlbWVu
dC5yZXBsYWNlKCctJywgJ18nKSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2VsZW1lbnRdID0gdmFsdWUKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVf
cnVuX3N0YXRzKHN0YXJ0X3RpbWU9Tm9uZSwgZW5kX3RpbWU9Tm9uZSwgdGVzdHNfc2tpcHBlZD1O
b25lLCAqKmt3YXJncyk6CisgICAgICAgIHN0YXRzID0gZGljdCgqKmt3YXJncykKKyAgICAgICAg
Zm9yIGtleSwgdmFsdWUgaW4gZGljdChzdGFydF90aW1lPXN0YXJ0X3RpbWUsIGVuZF90aW1lPWVu
ZF90aW1lLCB0ZXN0c19za2lwcGVkPXRlc3RzX3NraXBwZWQpLml0ZXJpdGVtcygpOgorICAgICAg
ICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RhdHNba2V5XSA9
IHZhbHVlCisgICAgICAgIHJldHVybiBzdGF0cworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBjcmVhdGVfdGVzdF9yZXN1bHQoZXhwZWN0ZWQ9Tm9uZSwgYWN0dWFsPU5vbmUsIGxvZz1Ob25l
LCAqKmt3YXJncyk6CisgICAgICAgIHJlc3VsdCA9IGRpY3QoKiprd2FyZ3MpCisKKyAgICAgICAg
IyBUZXN0cyB3aGljaCBkb24ndCBkZWNsYXJlIGV4cGVjdGF0aW9ucyBvciByZXN1bHRzIGFyZSBh
c3N1bWVkIHRvIGhhdmUgcGFzc2VkLgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KGV4
cGVjdGVkPWV4cGVjdGVkLCBhY3R1YWw9YWN0dWFsLCBsb2c9bG9nKS5pdGVyaXRlbXMoKToKKyAg
ICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdFtr
ZXldID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHN1aXRlPU5vbmUsIGNvbmZpZ3VyYXRpb249Tm9uZSwgY29tbWl0cz1bXSwgdGltZXN0YW1w
PU5vbmUsIGRldGFpbHM9Tm9uZSwgcnVuX3N0YXRzPU5vbmUsIHJlc3VsdHM9e30pOgorICAgICAg
ICBzZWxmLnN1aXRlID0gc3VpdGUKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmln
dXJhdGlvbgorICAgICAgICBzZWxmLmNvbW1pdHMgPSBjb21taXRzCisgICAgICAgIHNlbGYudGlt
ZXN0YW1wID0gdGltZXN0YW1wCisgICAgICAgIHNlbGYuZGV0YWlscyA9IGRldGFpbHMKKyAgICAg
ICAgc2VsZi5ydW5fc3RhdHMgPSBydW5fc3RhdHMKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gcmVz
dWx0cworCisgICAgY2xhc3MgRW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKToKKworICAgICAgICBk
ZWYgZGVmYXVsdChzZWxmLCBvYmopOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIFVw
bG9hZCk6CisgICAgICAgICAgICAgICAgaWYgbm90IG9iai5zdWl0ZToKKyAgICAgICAgICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm8gc3VpdGUgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBs
b2FkJykKKyAgICAgICAgICAgICAgICBpZiBub3Qgb2JqLmNvbW1pdHM6CisgICAgICAgICAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIGNvbW1pdHMgc3BlY2lmaWVkIHRvIHJlc3VsdHMg
dXBsb2FkJykKKworICAgICAgICAgICAgICAgIGRldGFpbHMgPSBvYmouZGV0YWlscyBvciBvYmou
Y3JlYXRlX2RldGFpbHMoKQorICAgICAgICAgICAgICAgIGJ1aWxkYm90X2FyZ3MgPSBbZGV0YWls
cy5nZXQoYXJnLCBOb25lKSBpcyBOb25lIGZvciBhcmcgaW4gb2JqLkJVSUxEQk9UX0RFVEFJTFNd
CisgICAgICAgICAgICAgICAgaWYgYW55KGJ1aWxkYm90X2FyZ3MpIGFuZCBub3QgYWxsKGJ1aWxk
Ym90X2FyZ3MpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBbGwgYnVp
bGRib3QgZGV0YWlscyBtdXN0IGJlIGRlZmluZWQgZm9yIHVwbG9hZCcpCisKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBkaWN0KAorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPW9iai5WRVJT
SU9OLAorICAgICAgICAgICAgICAgICAgICBzdWl0ZT1vYmouc3VpdGUsCisgICAgICAgICAgICAg
ICAgICAgIGNvbmZpZ3VyYXRpb249b2JqLmNvbmZpZ3VyYXRpb24gb3Igb2JqLmNyZWF0ZV9jb25m
aWd1cmF0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdHM9b2JqLmNvbW1pdHMsCisg
ICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0cz1kaWN0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgZGV0YWlscz1kZXRhaWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgcnVuX3N0YXRz
PW9iai5ydW5fc3RhdHMgb3Igb2JqLmNyZWF0ZV9ydW5fc3RhdHMoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdHM9b2JqLnJlc3VsdHMsCisgICAgICAgICAgICAgICAgICAgICksCisg
ICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGlmIG9iai50aW1lc3RhbXA6CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFsndGltZXN0YW1wJ10gPSBvYmoudGltZXN0YW1wCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFVwbG9h
ZC5FbmNvZGVyLCBzZWxmKS5kZWZhdWx0KG9iaikKKworICAgIGRlZiB1cGxvYWQoc2VsZiwgdXJs
LCBsb2dfbGluZT1sYW1iZGEgdmFsOiBzeXMuc3Rkb3V0LndyaXRlKHZhbCArICdcbicpKToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcHJpbnQganNvbi5kdW1wcyhzZWxmLCBjbHM9VXBsb2Fk
LkVuY29kZXIsIGluZGVudD00KQorICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wb3N0
KHVybCArIHNlbGYuVVBMT0FEX0VORFBPSU5ULCBkYXRhPWpzb24uZHVtcHMoc2VsZiwgY2xzPVVw
bG9hZC5FbmNvZGVyKSkKKyAgICAgICAgZXhjZXB0IHJlcXVlc3RzLmV4Y2VwdGlvbnMuQ29ubmVj
dGlvbkVycm9yOgorICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdGYWlsZWQgdG8gdXBs
b2FkIHRvIHt9LCByZXN1bHRzIHNlcnZlciBub3Qgb25saW5lJy5mb3JtYXQodXJsKSkKKyAgICAg
ICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAg
ICAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdGYWlsZWQgdG8gZW5jb2RlIHVwbG9hZCBkYXRh
OiB7fScuZm9ybWF0KGUpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYg
cmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgbG9nX2xpbmUoJyAnICog
NCArICdFcnJvciB1cGxvYWRpbmcgdG8ge306Jy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgIGxv
Z19saW5lKCcgJyAqIDggKyByZXNwb25zZS5qc29uKClbJ2Rlc2NyaXB0aW9uJ10pCisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ1VwbG9hZGVk
IHJlc3VsdHMgdG8ge30nLmZvcm1hdCh1cmwpKQorICAgICAgICByZXR1cm4gVHJ1ZQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCiAjIENvcHlyaWdodCAoQykg
MjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCi0jIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykg
MjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzgsMTcgKzM4LDE5IEBAIGltcG9ydCB0cmFjZWJhY2sKIGltcG9y
dCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ubG9ndXRpbHMgaW1wb3J0
IGNvbmZpZ3VyZV9sb2dnaW5nCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZl
IGltcG9ydCBFeGVjdXRpdmUsIFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5o
b3N0IGltcG9ydCBIb3N0CiBmcm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBDb25maWcK
IGZyb20gd2Via2l0cHkudGVzdC5maW5kZXIgaW1wb3J0IEZpbmRlcgogZnJvbSB3ZWJraXRweS50
ZXN0LnByaW50ZXIgaW1wb3J0IFByaW50ZXIKIGZyb20gd2Via2l0cHkudGVzdC5ydW5uZXIgaW1w
b3J0IFJ1bm5lciwgdW5pdF90ZXN0X25hbWUKK2Zyb20gd2Via2l0cHkucmVzdWx0cy51cGxvYWQg
aW1wb3J0IFVwbG9hZAorZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9wdGlvbnMgaW1wb3J0IHVwbG9h
ZF9vcHRpb25zCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAotX2hvc3Qg
PSBTeXN0ZW1Ib3N0KCkKK19ob3N0ID0gSG9zdCgpCiBfd2Via2l0X3Jvb3QgPSBOb25lCiAKIApA
QCAtMTI0LDEyICsxMjYsMTUgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIHBhcnNl
ciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0ndXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBb
YXJncy4uLl0nKQogCiAgICAgICAgICMgIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbmx5IGVmZmVj
dCB0aGUgYnVpbGRpbmcgb2YgbGxkYldlYktpdFRlc3Rlci4KLSAgICAgICAgY29uZmlndXJhdGlv
bl9ncm91cCA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgJ0NvbmZpZ3VyYXRpb24gb3B0
aW9ucycpCi0gICAgICAgIGNvbmZpZ3VyYXRpb25fZ3JvdXAuYWRkX29wdGlvbignLS1kZWJ1Zycs
IGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nRGVidWcnLCBkZXN0PSJjb25maWd1cmF0aW9u
IiwKLSAgICAgICAgICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBEZWJ1ZycpCi0g
ICAgICAgIGNvbmZpZ3VyYXRpb25fZ3JvdXAuYWRkX29wdGlvbignLS1yZWxlYXNlJywgYWN0aW9u
PSdzdG9yZV9jb25zdCcsIGNvbnN0PSdSZWxlYXNlJywgZGVzdD0iY29uZmlndXJhdGlvbiIsCi0g
ICAgICAgICAgICBoZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gUmVsZWFzZScpCi0gICAg
ICAgIHBhcnNlci5hZGRfb3B0aW9uX2dyb3VwKGNvbmZpZ3VyYXRpb25fZ3JvdXApCisgICAgICAg
IGZvciBncm91cF9uYW1lLCBncm91cF9vcHRpb25zIGluIHsnVXBsb2FkIE9wdGlvbnMnOiB1cGxv
YWRfb3B0aW9ucygpLCAnQ29uZmlndXJhdGlvbiBPcHRpb25zJzogWworICAgICAgICAgICAgb3B0
cGFyc2UubWFrZV9vcHRpb24oJy0tZGVidWcnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9
J0RlYnVnJywgZGVzdD0iY29uZmlndXJhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gRGVidWcnKSwKKyAgICAgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJlbGVhc2UnLCBhY3Rpb249J3N0b3JlX2NvbnN0
JywgY29uc3Q9J1JlbGVhc2UnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBSZWxlYXNl
JyksCisgICAgICAgIF19Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgb3B0aW9uX2dyb3VwID0g
b3B0cGFyc2UuT3B0aW9uR3JvdXAocGFyc2VyLCBncm91cF9uYW1lKQorICAgICAgICAgICAgb3B0
aW9uX2dyb3VwLmFkZF9vcHRpb25zKGdyb3VwX29wdGlvbnMpCisgICAgICAgICAgICBwYXJzZXIu
YWRkX29wdGlvbl9ncm91cChvcHRpb25fZ3JvdXApCiAKICAgICAgICAgcGFyc2VyLmFkZF9vcHRp
b24oJy1hJywgJy0tYWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIGFsbCB0aGUgdGVzdHMnKQpAQCAtMTgx
LDExICsxODYsMTIgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIGZyb20gd2Via2l0
cHkudGhpcmRwYXJ0eSBpbXBvcnQgYXV0b2luc3RhbGxfZXZlcnl0aGluZwogICAgICAgICBhdXRv
aW5zdGFsbF9ldmVyeXRoaW5nKCkKIAorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkK
KyAgICAgICAgY29uZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIuZmls
ZXN5c3RlbSkKKyAgICAgICAgY29uZmlndXJhdGlvbl90b191c2UgPSBzZWxmLl9vcHRpb25zLmNv
bmZpZ3VyYXRpb24gb3IgY29uZmlnLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAgICAgICAgIGlm
IHdpbGxfcnVuX2xsZGJfd2Via2l0X3Rlc3RzOgogICAgICAgICAgICAgc2VsZi5wcmludGVyLndy
aXRlX3VwZGF0ZSgnQnVpbGRpbmcgbGxkYldlYktpdFRlc3RlciAuLi4nKQogICAgICAgICAgICAg
YnVpbGRfbGxkYndlYmtpdHRlc3RlciA9IHNlbGYuZmluZGVyLmZpbGVzeXN0ZW0uam9pbihfd2Vi
a2l0X3Jvb3QsICdUb29scycsICdTY3JpcHRzJywgJ2J1aWxkLWxsZGJ3ZWJraXR0ZXN0ZXInKQot
ICAgICAgICAgICAgY29uZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIu
ZmlsZXN5c3RlbSkKLSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25fdG9fdXNlID0gc2VsZi5fb3B0
aW9ucy5jb25maWd1cmF0aW9uIG9yIGNvbmZpZy5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQogICAg
ICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIF9ob3N0LmV4ZWN1dGl2ZS5ydW5fYW5kX3Ro
cm93X2lmX2ZhaWwoW2J1aWxkX2xsZGJ3ZWJraXR0ZXN0ZXIsIGNvbmZpZy5mbGFnX2Zvcl9jb25m
aWd1cmF0aW9uKGNvbmZpZ3VyYXRpb25fdG9fdXNlKV0sIHF1aWV0PShub3QgYm9vbChzZWxmLl9v
cHRpb25zLnZlcmJvc2UpKSkKICAgICAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciBhcyBlOgpA
QCAtMjE4LDYgKzIyNCw3IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICB0ZXN0X3J1
bm5lciA9IFJ1bm5lcihzZWxmLnByaW50ZXIsIGxvYWRlcikKICAgICAgICAgdGVzdF9ydW5uZXIu
cnVuKHBhcmFsbGVsX3Rlc3RzLCBzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykKICAgICAg
ICAgdGVzdF9ydW5uZXIucnVuKHNlcmlhbF90ZXN0cywgMSkKKyAgICAgICAgZW5kX3RpbWUgPSB0
aW1lLnRpbWUoKQogCiAgICAgICAgIHNlbGYucHJpbnRlci5wcmludF9yZXN1bHQodGltZS50aW1l
KCkgLSBzdGFydCkKIApAQCAtMjMyLDkgKzIzOSw1MCBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToK
ICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKICAgICAgICAgICAgIGNvdi5zdG9w
KCkKICAgICAgICAgICAgIGNvdi5zYXZlKCkKKworICAgICAgICB3YXNfdXBsb2FkX3N1Y2Nlc3Nm
dWwgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmVwb3J0X3VybHM6CisgICAgICAg
ICAgICBzZWxmLnByaW50ZXIubWV0ZXIud3JpdGVsbignXG4nKQorICAgICAgICAgICAgc2VsZi5w
cmludGVyLndyaXRlX3VwZGF0ZSgnUHJlcGFyaW5nIHVwbG9hZCBkYXRhIC4uLicpCisKKyAgICAg
ICAgICAgIHJlc3VsdHMgPSB7dGVzdDoge30gZm9yIHRlc3QgaW4gdGVzdF9ydW5uZXIudGVzdHNf
cnVufQorICAgICAgICAgICAgZm9yIHRlc3QsIGVycm9ycyBpbiB0ZXN0X3J1bm5lci5lcnJvcnM6
CisgICAgICAgICAgICAgICAgcmVzdWx0c1t0ZXN0XSA9IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1
bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRVJST1IsIGxvZz0nL24nLmpvaW4oZXJyb3Jz
KSkKKyAgICAgICAgICAgIGZvciB0ZXN0LCBmYWlsdXJlcyBpbiB0ZXN0X3J1bm5lci5mYWlsdXJl
czoKKyAgICAgICAgICAgICAgICByZXN1bHRzW3Rlc3RdID0gVXBsb2FkLmNyZWF0ZV90ZXN0X3Jl
c3VsdChhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMLCBsb2c9Jy9uJy5qb2luKGZhaWx1
cmVzKSkKKworICAgICAgICAgICAgX2hvc3QuaW5pdGlhbGl6ZV9zY20oKQorICAgICAgICAgICAg
dXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycs
CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbj1VcGxvYWQuY3JlYXRlX2NvbmZpZ3VyYXRp
b24oCisgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtPV9ob3N0LnBsYXRmb3JtLm9zX25hbWUs
CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb249c3RyKF9ob3N0LnBsYXRmb3JtLm9zX3ZlcnNp
b24pLAorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uX25hbWU9X2hvc3QucGxhdGZvcm0ub3Nf
dmVyc2lvbl9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgIHN0eWxlPWNvbmZpZ3VyYXRpb25f
dG9fdXNlLAorICAgICAgICAgICAgICAgICAgICBzZGs9X2hvc3QucGxhdGZvcm0uYnVpbGRfdmVy
c2lvbigpLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgZGV0YWlscz1VcGxv
YWQuY3JlYXRlX2RldGFpbHMob3B0aW9ucz1zZWxmLl9vcHRpb25zKSwKKyAgICAgICAgICAgICAg
ICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICAgICAgcmVw
b3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICAgICAgaWQ9X2hvc3Quc2NtKCku
bmF0aXZlX3JldmlzaW9uKF93ZWJraXRfcm9vdCksCisgICAgICAgICAgICAgICAgICAgIGJyYW5j
aD1faG9zdC5zY20oKS5uYXRpdmVfYnJhbmNoKF93ZWJraXRfcm9vdCksCisgICAgICAgICAgICAg
ICAgKV0sCisgICAgICAgICAgICAgICAgcnVuX3N0YXRzPVVwbG9hZC5jcmVhdGVfcnVuX3N0YXRz
KAorICAgICAgICAgICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAgICAgICAg
ICAgICAgICAgIGVuZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgICAgICAgICB0ZXN0c19z
a2lwcGVkPWxlbih0ZXN0X3J1bm5lci50ZXN0c19ydW4pIC0gbGVuKHBhcmFsbGVsX3Rlc3RzKSAt
IGxlbihzZXJpYWxfdGVzdHMpLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAg
cmVzdWx0cz1yZXN1bHRzLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgZm9yIHVybCBpbiBz
ZWxmLl9vcHRpb25zLnJlcG9ydF91cmxzOgorICAgICAgICAgICAgICAgIHNlbGYucHJpbnRlci53
cml0ZV91cGRhdGUoJ1VwbG9hZGluZyB0byB7fSAuLi4nLmZvcm1hdCh1cmwpKQorICAgICAgICAg
ICAgICAgIHdhc191cGxvYWRfc3VjY2Vzc2Z1bCAmPSB1cGxvYWQudXBsb2FkKHVybCwgbG9nX2xp
bmU9c2VsZi5wcmludGVyLm1ldGVyLndyaXRlbG4pCisgICAgICAgICAgICBzZWxmLnByaW50ZXIu
bWV0ZXIud3JpdGVsbignVXBsb2FkcyBjb21wbGV0ZWQhJykKKworICAgICAgICBpZiBzZWxmLl9v
cHRpb25zLmNvdmVyYWdlOgogICAgICAgICAgICAgY292LnJlcG9ydChzaG93X21pc3Npbmc9RmFs
c2UpCiAKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmLnByaW50ZXIubnVtX2Vycm9ycyBhbmQgbm90
IHNlbGYucHJpbnRlci5udW1fZmFpbHVyZXMKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLnByaW50
ZXIubnVtX2Vycm9ycyBhbmQgbm90IHNlbGYucHJpbnRlci5udW1fZmFpbHVyZXMgYW5kIHdhc191
cGxvYWRfc3VjY2Vzc2Z1bAogCiAgICAgZGVmIF9jaGVja19pbXBvcnRzKHNlbGYsIG5hbWVzKToK
ICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rlc3QvcnVubmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVz
dC9ydW5uZXIucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dGVzdC9ydW5uZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgUnVu
bmVyKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByaW50ZXIsIGxvYWRlcik6CiAg
ICAgICAgIHNlbGYucHJpbnRlciA9IHByaW50ZXIKICAgICAgICAgc2VsZi5sb2FkZXIgPSBsb2Fk
ZXIKLSAgICAgICAgc2VsZi50ZXN0c19ydW4gPSAwCisgICAgICAgIHNlbGYudGVzdHNfcnVuID0g
W10KICAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQogICAgICAgICBzZWxmLmZhaWx1cmVzID0gW10K
ICAgICAgICAgc2VsZi53b3JrZXJfZmFjdG9yeSA9IGxhbWJkYSBjYWxsZXI6IF9Xb3JrZXIoY2Fs
bGVyLCBzZWxmLmxvYWRlcikKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgUnVubmVyKG9iamVjdCk6
CiAgICAgICAgICAgICBzZWxmLnByaW50ZXIucHJpbnRfc3RhcnRlZF90ZXN0KHNvdXJjZSwgdGVz
dF9uYW1lKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgc2VsZi50ZXN0c19ydW4gKz0g
MQorICAgICAgICBzZWxmLnRlc3RzX3J1bi5hcHBlbmQodGVzdF9uYW1lKQogICAgICAgICBpZiBm
YWlsdXJlczoKICAgICAgICAgICAgIHNlbGYuZmFpbHVyZXMuYXBwZW5kKCh0ZXN0X25hbWUsIGZh
aWx1cmVzKSkKICAgICAgICAgaWYgZXJyb3JzOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90ZXN0L3J1bm5lcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkp
CkBAIC05Miw2ICs5Miw2IEBAIGNsYXNzIFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgndGVzdDMgKEZvbyknLCAnRScsICd0ZXN0M1xu
ZXJyZWQnKSkKICAgICAgICAgcnVubmVyID0gUnVubmVyKFByaW50ZXIoc3RyZWFtLCBvcHRpb25z
KSwgbG9hZGVyKQogICAgICAgICBydW5uZXIucnVuKFsnRm9vLnRlc3QxJywgJ0Zvby50ZXN0Mics
ICdGb28udGVzdDMnXSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5uZXIudGVzdHNf
cnVuLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5uZXIudGVzdHNfcnVuKSwg
MykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocnVubmVyLmZhaWx1cmVzKSwgMSkKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocnVubmVyLmVycm9ycyksIDEpCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5p
dHRlc3QucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTE4MywxMCAr
MTgzLDEwIEBAIGNsYXNzIFBhdGNoUHJvY2Vzc2luZ1F1ZXVlVGVzdChDb21tYW5kc1QKICAgICAg
ICAgcXVldWUuX29wdGlvbnMgPSBNb2NrKCkKICAgICAgICAgcXVldWUuX29wdGlvbnMucG9ydCA9
IE5vbmUKICAgICAgICAgcGF0Y2ggPSBxdWV1ZS5fdG9vbC5idWdzLmZldGNoX2F0dGFjaG1lbnQo
MTAwMDEpCi0gICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJNT0NLIGFkZF9hdHRhY2htZW50X3Rv
X2J1ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlwdGlvbj1BcmNoaXZlIG9mIGxheW91dC10ZXN0LXJl
c3VsdHMgZnJvbSBib3QgZm9yIG1hYy1zbm93bGVvcGFyZCBmaWxlbmFtZT1sYXlvdXQtdGVzdC1y
ZXN1bHRzLnppcCBtaW1ldHlwZT1Ob25lCisgICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJNT0NL
IGFkZF9hdHRhY2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlwdGlvbj1BcmNoaXZl
IG9mIGxheW91dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9yIG1hYy1oaWdoc2llcnJhIGZpbGVu
YW1lPWxheW91dC10ZXN0LXJlc3VsdHMuemlwIG1pbWV0eXBlPU5vbmUKIC0tIEJlZ2luIGNvbW1l
bnQgLS0KIFRoZSBhdHRhY2hlZCB0ZXN0IGZhaWx1cmVzIHdlcmUgc2VlbiB3aGlsZSBydW5uaW5n
IHJ1bi13ZWJraXQtdGVzdHMgb24gdGhlIG1vY2stcXVldWUuCi1Qb3J0OiBtYWMtc25vd2xlb3Bh
cmQgIFBsYXRmb3JtOiBNb2NrUGxhdGZvcm0gMS4wCitQb3J0OiBtYWMtaGlnaHNpZXJyYSAgUGxh
dGZvcm06IE1vY2tQbGF0Zm9ybSAxLjAKIC0tIEVuZCBjb21tZW50IC0tCiAiIiIKICAgICAgICAg
T3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHF1ZXVlLl91cGxvYWRfcmVzdWx0
c19hcmNoaXZlX2Zvcl9wYXRjaCwgW3BhdGNoLCBNb2NrKCldLCBleHBlY3RlZF9sb2dzPWV4cGVj
dGVkX2xvZ3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364723</attachid>
            <date>2019-03-14 17:12:36 -0700</date>
            <delta_ts>2019-03-14 17:27:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190314171235.patch</filename>
            <type>text/plain</type>
            <size>58627</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0Mjk3NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDUyIEBACisyMDE5LTAzLTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0
ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBsb2FkX3Jl
c3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGluZy4KKwog
MjAxOS0wMy0xNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAg
TW92ZSBJREIgc3RvcmFnZSBpbiBwcml2YXRlIGJyb3dzaW5nIG1vZGUgdG8gTmV0d29ya1Byb2Nl
c3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5pdF9fLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0
byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCisjIEtlZXAgdGhpcyBm
aWxlIGZyZWUgb2YgYW55IGNvZGUgb3IgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBjb3VsZAorIyBj
YXVzZSBlaXRoZXIgYW4gZXJyb3IgdG8gb2NjdXIgb3IgYSBsb2cgbWVzc2FnZSB0byBiZSBsb2dn
ZWQuCisjIFRoaXMgZW5zdXJlcyB0aGF0IGNhbGxpbmcgY29kZSBjYW4gaW1wb3J0IGluaXRpYWxp
emF0aW9uIGNvZGUgZnJvbQorIyB3ZWJraXRweSBiZWZvcmUgYW55IGVycm9ycyBvciBsb2cgbWVz
c2FnZXMgZHVlIHRvIGNvZGUgaW4gdGhpcyBmaWxlLgorIyBJbml0aWFsaXphdGlvbiBjb2RlIGNh
biBpbmNsdWRlIHRoaW5ncyBsaWtlIHZlcnNpb24tY2hlY2tpbmcgY29kZSBhbmQKKyMgbG9nZ2lu
ZyBjb25maWd1cmF0aW9uIGNvZGUuCisjCisjIFdlIGRvIG5vdCBleGVjdXRlIGFueSB2ZXJzaW9u
LWNoZWNraW5nIGNvZGUgb3IgbG9nZ2luZyBjb25maWd1cmF0aW9uCisjIGNvZGUgaW4gdGhpcyBm
aWxlIHNvIHRoYXQgY2FsbGVycyBjYW4gb3B0LWluIGFzIHRoZXkgd2FudC4gIFRoaXMgYWxzbwor
IyBhbGxvd3MgZGlmZmVyZW50IGNhbGxlcnMgdG8gY2hvb3NlIGRpZmZlcmVudCBpbml0aWFsaXph
dGlvbiBjb2RlLAorIyBhcyBuZWNlc3NhcnkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Jlc3VsdHMvb3B0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Jlc3VsdHMvb3B0aW9ucy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisj
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisj
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcHRwYXJzZQor
CisKK2RlZiB1cGxvYWRfb3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCctLXJlcG9ydCcsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0ncmVwb3J0X3Vy
bHMnLCBoZWxwPSdVUkwgKG9yIFVSTHMpIHRvIHJlcG9ydCB0ZXN0IHJlc3VsdHMgdG8nKSwKKyAg
ICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRib3QtbWFzdGVyJywgaGVscD0nVGhl
IHVybCBvZiB0aGUgYnVpbGRib3QgbWFzdGVyLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29w
dGlvbignLS1idWlsZGVyLW5hbWUnLCBoZWxwPSdUaGUgbmFtZSBvZiB0aGUgYnVpbGRib3QgYnVp
bGRlciB0ZXN0cyB3ZXJlIHJ1biBvbi4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Jy0tYnVpbGQtbnVtYmVyJywgaGVscD0nVGhlIGJ1aWxkYm90IGJ1aWxkIG51bWJlciB0ZXN0cyBh
cmUgYXNzb2NpYXRlZCB3aXRoLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1i
dWlsZGJvdC13b3JrZXInLCBoZWxwPSdUaGUgYnVpbGRib3Qgd29ya2VyIHRlc3RzIHdlcmUgcnVu
IG9uLicpLAorICAgIF0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxv
YWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9h
ZC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBs
b2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg3IEBACisjIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBqc29uCitpbXBvcnQgcmVxdWVzdHMKK2lt
cG9ydCBzeXMKKworaW1wb3J0IHBsYXRmb3JtIGFzIHBsYXRmb3JtXworCisKK2NsYXNzIFVwbG9h
ZChvYmplY3QpOgorICAgIFVQTE9BRF9FTkRQT0lOVCA9ICcvYXBpL3VwbG9hZCcKKyAgICBCVUlM
REJPVF9ERVRBSUxTID0gWydidWlsZGJvdC1tYXN0ZXInLCAnYnVpbGRlci1uYW1lJywgJ2J1aWxk
LW51bWJlcicsICdidWlsZGJvdC13b3JrZXInXQorICAgIFZFUlNJT04gPSAwCisKKyAgICBjbGFz
cyBFeHBlY3RhdGlvbnM6CisgICAgICAgICMgVGhlc2UgYXJlIG9yZGVyZWQgYnkgcHJpb3JpdHks
IG1lYW5pbmcgdGhhdCBhIHRlc3Qgd2hpY2ggYm90aCBjcmFzaGVzIGFuZCBoYXMKKyAgICAgICAg
IyBhIHdhcm5pbmcgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gaGF2ZSBjcmFzaGVkLgorICAgICAg
ICBPUkRFUiA9IFsKKyAgICAgICAgICAgICdDUkFTSCcsCisgICAgICAgICAgICAnVElNRU9VVCcs
CisgICAgICAgICAgICAnSU1BR0UnLCAgICMgSW1hZ2UtZGlmZgorICAgICAgICAgICAgJ0FVRElP
JywgICAjIEF1ZGlvLWRpZmYKKyAgICAgICAgICAgICdURVhUJywgICAgIyBUZXh0LWRpZmYKKyAg
ICAgICAgICAgICdGQUlMJywKKyAgICAgICAgICAgICdFUlJPUicsCisgICAgICAgICAgICAnV0FS
TklORycsCisgICAgICAgICAgICAnUEFTUycsCisgICAgICAgIF0KKyAgICAgICAgQ1JBU0gsIFRJ
TUVPVVQsIElNQUdFLCBBVURJTywgVEVYVCwgRkFJTCwgRVJST1IsIFdBUk5JTkcsIFBBU1MgPSBP
UkRFUgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfY29uZmlndXJhdGlvbigK
KyAgICAgICAgICAgIHBsYXRmb3JtPU5vbmUsCisgICAgICAgICAgICBpc19zaW11bGF0b3I9RmFs
c2UsCisgICAgICAgICAgICB2ZXJzaW9uPU5vbmUsCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9
Tm9uZSwKKyAgICAgICAgICAgIHZlcnNpb25fbmFtZT1Ob25lLAorICAgICAgICAgICAgbW9kZWw9
Tm9uZSwKKyAgICAgICAgICAgIHN0eWxlPU5vbmUsICAgIyBEZWJ1Zy9Qcm9kdWN0aW9uL1JlbGVh
c2UKKyAgICAgICAgICAgIGZsYXZvcj1Ob25lLCAgIyBEdW1waW5nIGdyb3VuZCBzdWl0ZS13aWRl
IGNvbmZpZ3VyYXRpb24gY2hhbmdlcyAoaWUsIEd1YXJkTWFsbG9jKQorICAgICAgICAgICAgc2Rr
PU5vbmUsCisgICAgICAgICk6CisKKyAgICAgICAgIyBUaGlzIGRldmlhdGVzIHNsaWdodGx5IGZy
b20gdGhlIHJlc3Qgb2Ygd2Via2l0cHksIGJ1dCBpdCBhbGxvd3MgdGhpcyBmaWxlIHRvIGJlIGVu
dGlyZWx5IHBvcnRhYmxlLgorICAgICAgICBjb25maWcgPSBkaWN0KAorICAgICAgICAgICAgcGxh
dGZvcm09cGxhdGZvcm0gb3IgKHBsYXRmb3JtXy5zeXN0ZW0oKSBpZiBwbGF0Zm9ybV8uc3lzdGVt
KCkgIT0gJ0RhcndpbicgZWxzZSAnbWFjJykubG93ZXIoKSwKKyAgICAgICAgICAgIGlzX3NpbXVs
YXRvcj1pc19zaW11bGF0b3IsCisgICAgICAgICAgICB2ZXJzaW9uPXZlcnNpb24gb3IgKHBsYXRm
b3JtXy5yZWxlYXNlKCkgaWYgcGxhdGZvcm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVsc2UgcGxh
dGZvcm1fLm1hY192ZXIoKVswXSksCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0
dXJlIG9yIHBsYXRmb3JtXy5tYWNoaW5lKCksCisgICAgICAgICkKKyAgICAgICAgZm9yIGtleSwg
dmFsdWUgaW4gY29uZmlnLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9u
ZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRlZmluZWQg
aW4gdGhlIGNvbmZpZ3VyYXRpb24nLmZvcm1hdChrZXkpKQorICAgICAgICBmb3Iga2V5LCB2YWx1
ZSBpbiBkaWN0KHZlcnNpb25fbmFtZT12ZXJzaW9uX25hbWUsIG1vZGVsPW1vZGVsLCBzdHlsZT1z
dHlsZSwgZmxhdm9yPWZsYXZvciwgc2RrPXNkaykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBp
ZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjb25maWdba2V5XSA9IHZhbHVl
CisgICAgICAgIHJldHVybiBjb25maWcKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3Jl
YXRlX2NvbW1pdChyZXBvc2l0b3J5X2lkPU5vbmUsIGlkPU5vbmUsIGJyYW5jaD1Ob25lKToKKyAg
ICAgICAgY29tbWl0ID0gZGljdChyZXBvc2l0b3J5X2lkPXJlcG9zaXRvcnlfaWQsIGlkPWlkKQor
ICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBjb21taXQuaXRlcml0ZW1zKCk6CisgICAgICAgICAg
ICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9
IG11c3QgYmUgZGVmaW5lZCBpbiBhIGNvbW1pdCcuZm9ybWF0KGtleSkpCisgICAgICAgIGlmIGJy
YW5jaDoKKyAgICAgICAgICAgIGNvbW1pdFsnYnJhbmNoJ10gPSBicmFuY2gKKyAgICAgICAgcmV0
dXJuIGNvbW1pdAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfZGV0YWlscyhs
aW5rPU5vbmUsIG9wdGlvbnM9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0
KCoqa3dhcmdzKQorICAgICAgICBpZiBsaW5rOgorICAgICAgICAgICAgcmVzdWx0WydsaW5rJ10g
PSBsaW5rCisKKyAgICAgICAgaWYgb3B0aW9uczoKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGlu
IFVwbG9hZC5CVUlMREJPVF9ERVRBSUxTOgorICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0
cihvcHRpb25zLCBlbGVtZW50LnJlcGxhY2UoJy0nLCAnXycpLCBOb25lKQorICAgICAgICAgICAg
ICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbZWxl
bWVudF0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIGNyZWF0ZV9ydW5fc3RhdHMoc3RhcnRfdGltZT1Ob25lLCBlbmRfdGltZT1Ob25l
LCB0ZXN0c19za2lwcGVkPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc3RhdHMgPSBkaWN0KCoq
a3dhcmdzKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KHN0YXJ0X3RpbWU9c3RhcnRf
dGltZSwgZW5kX3RpbWU9ZW5kX3RpbWUsIHRlc3RzX3NraXBwZWQ9dGVzdHNfc2tpcHBlZCkuaXRl
cml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
ICAgICBzdGF0c1trZXldID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHN0YXRzCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV90ZXN0X3Jlc3VsdChleHBlY3RlZD1Ob25lLCBhY3R1
YWw9Tm9uZSwgbG9nPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgqKmt3
YXJncykKKworICAgICAgICAjIFRlc3RzIHdoaWNoIGRvbid0IGRlY2xhcmUgZXhwZWN0YXRpb25z
IG9yIHJlc3VsdHMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBwYXNzZWQuCisgICAgICAgIGZvciBrZXks
IHZhbHVlIGluIGRpY3QoZXhwZWN0ZWQ9ZXhwZWN0ZWQsIGFjdHVhbD1hY3R1YWwsIGxvZz1sb2cp
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgc3VpdGU9Tm9uZSwgY29uZmlndXJhdGlvbj1Ob25lLCBjb21t
aXRzPVtdLCB0aW1lc3RhbXA9Tm9uZSwgZGV0YWlscz1Ob25lLCBydW5fc3RhdHM9Tm9uZSwgcmVz
dWx0cz17fSk6CisgICAgICAgIHNlbGYuc3VpdGUgPSBzdWl0ZQorICAgICAgICBzZWxmLmNvbmZp
Z3VyYXRpb24gPSBjb25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuY29tbWl0cyA9IGNvbW1pdHMK
KyAgICAgICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAKKyAgICAgICAgc2VsZi5kZXRhaWxz
ID0gZGV0YWlscworICAgICAgICBzZWxmLnJ1bl9zdGF0cyA9IHJ1bl9zdGF0cworICAgICAgICBz
ZWxmLnJlc3VsdHMgPSByZXN1bHRzCisKKyAgICBjbGFzcyBFbmNvZGVyKGpzb24uSlNPTkVuY29k
ZXIpOgorCisgICAgICAgIGRlZiBkZWZhdWx0KHNlbGYsIG9iaik6CisgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKG9iaiwgVXBsb2FkKToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb2JqLnN1aXRl
OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBzdWl0ZSBzcGVjaWZp
ZWQgdG8gcmVzdWx0cyB1cGxvYWQnKQorICAgICAgICAgICAgICAgIGlmIG5vdCBvYmouY29tbWl0
czoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm8gY29tbWl0cyBzcGVj
aWZpZWQgdG8gcmVzdWx0cyB1cGxvYWQnKQorCisgICAgICAgICAgICAgICAgZGV0YWlscyA9IG9i
ai5kZXRhaWxzIG9yIG9iai5jcmVhdGVfZGV0YWlscygpCisgICAgICAgICAgICAgICAgYnVpbGRi
b3RfYXJncyA9IFtkZXRhaWxzLmdldChhcmcsIE5vbmUpIGlzIE5vbmUgZm9yIGFyZyBpbiBvYmou
QlVJTERCT1RfREVUQUlMU10KKyAgICAgICAgICAgICAgICBpZiBhbnkoYnVpbGRib3RfYXJncykg
YW5kIG5vdCBhbGwoYnVpbGRib3RfYXJncyk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoJ0FsbCBidWlsZGJvdCBkZXRhaWxzIG11c3QgYmUgZGVmaW5lZCBmb3IgdXBsb2Fk
JykKKworICAgICAgICAgICAgICAgIGRlZiB1bnBhY2tfdGVzdChjdXJyZW50LCBwYXRoX3RvX3Rl
c3QsIGRhdGEpOgorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocGF0aF90b190ZXN0KSA9PSAx
OgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1dID0gZGF0
YQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIGlm
IG5vdCBjdXJyZW50LmdldChwYXRoX3RvX3Rlc3RbMF0pOgorICAgICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1dID0ge30KKyAgICAgICAgICAgICAgICAgICAgdW5w
YWNrX3Rlc3QoY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1dLCBwYXRoX3RvX3Rlc3RbMTpdLCBkYXRh
KQorCisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHt9CisgICAgICAgICAgICAgICAgZm9yIHRl
c3QsIGRhdGEgaW4gb2JqLnJlc3VsdHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAg
IHVucGFja190ZXN0KHJlc3VsdHMsIHRlc3Quc3BsaXQoJy8nKSwgZGF0YSkKKworICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGRpY3QoCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb249b2JqLlZF
UlNJT04sCisgICAgICAgICAgICAgICAgICAgIHN1aXRlPW9iai5zdWl0ZSwKKyAgICAgICAgICAg
ICAgICAgICAgY29uZmlndXJhdGlvbj1vYmouY29uZmlndXJhdGlvbiBvciBvYmouY3JlYXRlX2Nv
bmZpZ3VyYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0cz1vYmouY29tbWl0cywK
KyAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzPWRpY3QoCisgICAgICAgICAgICAgICAg
ICAgICAgICBkZXRhaWxzPWRldGFpbHMsCisgICAgICAgICAgICAgICAgICAgICAgICBydW5fc3Rh
dHM9b2JqLnJ1bl9zdGF0cyBvciBvYmouY3JlYXRlX3J1bl9zdGF0cygpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0cz1yZXN1bHRzLAorICAgICAgICAgICAgICAgICAgICApLAorICAg
ICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBpZiBvYmoudGltZXN0YW1wOgorICAgICAg
ICAgICAgICAgICAgICByZXN1bHRbJ3RpbWVzdGFtcCddID0gb2JqLnRpbWVzdGFtcAorICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihVcGxvYWQu
RW5jb2Rlciwgc2VsZikuZGVmYXVsdChvYmopCisKKyAgICBkZWYgdXBsb2FkKHNlbGYsIHVybCwg
bG9nX2xpbmU9bGFtYmRhIHZhbDogc3lzLnN0ZG91dC53cml0ZSh2YWwgKyAnXG4nKSk6CisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMucG9zdCh1cmwgKyBzZWxm
LlVQTE9BRF9FTkRQT0lOVCwgZGF0YT1qc29uLmR1bXBzKHNlbGYsIGNscz1VcGxvYWQuRW5jb2Rl
cikpCisgICAgICAgIGV4Y2VwdCByZXF1ZXN0cy5leGNlcHRpb25zLkNvbm5lY3Rpb25FcnJvcjoK
KyAgICAgICAgICAgIGxvZ19saW5lKCcgJyAqIDQgKyAnRmFpbGVkIHRvIHVwbG9hZCB0byB7fSwg
cmVzdWx0cyBzZXJ2ZXIgbm90IG9ubGluZScuZm9ybWF0KHVybCkpCisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGxv
Z19saW5lKCcgJyAqIDQgKyAnRmFpbGVkIHRvIGVuY29kZSB1cGxvYWQgZGF0YToge30nLmZvcm1h
dChlKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0
YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAgICAgIGxvZ19saW5lKCcgJyAqIDQgKyAnRXJyb3Ig
dXBsb2FkaW5nIHRvIHt9OicuZm9ybWF0KHVybCkpCisgICAgICAgICAgICBsb2dfbGluZSgnICcg
KiA4ICsgcmVzcG9uc2UuanNvbigpWydkZXNjcmlwdGlvbiddKQorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdVcGxvYWRlZCByZXN1bHRzIHRv
IHt9Jy5mb3JtYXQodXJsKSkKKyAgICAgICAgcmV0dXJuIFRydWUKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkobm9uZXhpc3Rl
bnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEzIEBACisjIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGpzb24KK2ltcG9y
dCBtb2NrCitpbXBvcnQgcmVxdWVzdHMKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKwor
ZnJvbSB3ZWJraXRweS5yZXN1bHRzLnVwbG9hZCBpbXBvcnQgVXBsb2FkCisKKworY2xhc3MgVXBs
b2FkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBPcHRpb25zKG9iamVjdCk6
CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgICAgICBmb3Ig
a2V5LCB2YWx1ZSBpbiBrd2FyZ3MuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2V0YXR0
cihzZWxmLCBrZXksIHZhbHVlKQorCisgICAgY2xhc3MgTW9ja1Jlc3BvbnNlKG9iamVjdCk6Cisg
ICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0dXNfY29kZT0yMDAsIHRleHQ9JycpOgorICAg
ICAgICAgICAgc2VsZi5zdGF0dXNfY29kZSA9IHN0YXR1c19jb2RlCisgICAgICAgICAgICBzZWxm
LnRleHQgPSB0ZXh0CisKKyAgICAgICAgZGVmIGpzb24oc2VsZik6CisgICAgICAgICAgICByZXR1
cm4ganNvbi5sb2FkcyhzZWxmLnRleHQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG5v
cm1hbGl6ZShkYXRhKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBiYXNlc3RyaW5nKToK
KyAgICAgICAgICAgIHJldHVybiBzdHIoZGF0YSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRh
dGEsIGNvbGxlY3Rpb25zLk1hcHBpbmcpOgorICAgICAgICAgICAgcmV0dXJuIGRpY3QobWFwKFVw
bG9hZFRlc3Qubm9ybWFsaXplLCBkYXRhLml0ZXJpdGVtcygpKSkKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKToKKyAgICAgICAgICAgIHJldHVybiB0
eXBlKGRhdGEpKG1hcChVcGxvYWRUZXN0Lm5vcm1hbGl6ZSwgZGF0YSkpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmcoc2VsZik6
CisgICAgICAgIHN0YXJ0X3RpbWUsIGVuZF90aW1lID0gdGltZS50aW1lKCkgLSAzLCB0aW1lLnRp
bWUoKQorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0
cHktdGVzdHMnLAorICAgICAgICAgICAgY29uZmlndXJhdGlvbj1VcGxvYWQuY3JlYXRlX2NvbmZp
Z3VyYXRpb24oCisgICAgICAgICAgICAgICAgcGxhdGZvcm09J21hYycsCisgICAgICAgICAgICAg
ICAgdmVyc2lvbj0nMTAuMTMuMCcsCisgICAgICAgICAgICAgICAgdmVyc2lvbl9uYW1lPSdIaWdo
IFNpZXJyYScsCisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPSd4ODZfNjQnLAorICAgICAg
ICAgICAgICAgIHNkaz0nMTdBNDA1JywKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBkZXRh
aWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhsaW5rPSdodHRwczovL3dlYmtpdC5vcmcnKSwKKyAg
ICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAg
IHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAg
ICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICAgICBy
dW5fc3RhdHM9VXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisgICAgICAgICAgICAgICAgc3RhcnRf
dGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgICAgIGVuZF90aW1lPWVuZF90aW1lLAorICAg
ICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwKKyAgICAgICAgICAgICksCisgICAgICAgICAg
ICByZXN1bHRzPXsKKyAgICAgICAgICAgICAgICAnd2Via2l0cHkudGVzdDEnOiB7fSwKKyAgICAg
ICAgICAgICAgICAnd2Via2l0cHkudGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGV4
cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlv
bnMuRkFJTCksCisgICAgICAgICAgICB9LAorICAgICAgICApCisgICAgICAgIGdlbmVyYXRlZF9k
aWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVw
bG9hZC5FbmNvZGVyKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGlj
dFsndmVyc2lvbiddLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0
WydzdWl0ZSddLCAnd2Via2l0cHktdGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdl
bmVyYXRlZF9kaWN0Wydjb25maWd1cmF0aW9uJ10sIHNlbGYubm9ybWFsaXplKGRpY3QoCisgICAg
ICAgICAgICBwbGF0Zm9ybT0nbWFjJywKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1GYWxzZSwK
KyAgICAgICAgICAgIHZlcnNpb249JzEwLjEzLjAnLAorICAgICAgICAgICAgdmVyc2lvbl9uYW1l
PSdIaWdoIFNpZXJyYScsCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9J3g4Nl82NCcsCisgICAg
ICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICkpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGdlbmVyYXRlZF9kaWN0Wydjb21taXRzJ10sIFtkaWN0KAorICAgICAgICAgICAgcmVwb3Np
dG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgIGJyYW5j
aD0ndHJ1bmsnLAorICAgICAgICApXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0
ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwgc2VsZi5ub3JtYWxpemUoZGljdChs
aW5rPSdodHRwczovL3dlYmtpdC5vcmcnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2Vu
ZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydydW5fc3RhdHMnXSwgc2VsZi5ub3JtYWxpemUo
ZGljdCgKKyAgICAgICAgICAgIHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgIGVu
ZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgdGVzdHNfc2tpcHBlZD0wLAorICAgICAgICAp
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRz
J11bJ3Jlc3VsdHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAgJ3dlYmtpdHB5LnRl
c3QxJzoge30sCisgICAgICAgICAgICAnd2Via2l0cHkudGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rl
c3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0dWFsPVVwbG9h
ZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgIH0pKQorCisgICAgZGVmIHRlc3RfdXBsb2Fk
KHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Vi
a2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQo
CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAg
ICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICAp
XSwKKyAgICAgICAgKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVzdHMucG9zdCcs
IG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNwb25zZSgpKToKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dlYmtpdC5vcmcvcmVzdWx0
cycsIGxvZ19saW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAgICAgICBkZWYgcmFpc2VfZXhjZXB0
aW9uKHVybCwgZGF0YSk6CisgICAgICAgICAgICByYWlzZSByZXF1ZXN0cy5leGNlcHRpb25zLkNv
bm5lY3Rpb25FcnJvcigpCisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdyZXF1ZXN0cy5wb3N0
JywgbmV3PXJhaXNlX2V4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHVw
bG9hZC51cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1bHRzJywgbG9nX2xpbmU9bGFtYmRh
IF86IE5vbmUpKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVzdHMucG9zdCcsIG5l
dz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNwb25zZSgKKyAgICAgICAgICAgIHN0YXR1
c19jb2RlPTQwNCwKKyAgICAgICAgICAgIHRleHQ9anNvbi5kdW1wcyhkaWN0KGRlc2NyaXB0aW9u
PSdObyBzdWNoIGFkZHJlc3MnKSksCisgICAgICAgICkpOgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19s
aW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAgIGRlZiB0ZXN0X3BhY2tlZF90ZXN0KHNlbGYpOgor
ICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVz
dHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAg
ICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScs
CisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAg
ICAgICAgIHJlc3VsdHM9eworICAgICAgICAgICAgICAgICdkaXIxL3N1Yi1kaXIxL3Rlc3QxJzog
VXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlM
KSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90ZXN0Mic6IFVwbG9hZC5jcmVhdGVf
dGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuVElNRU9VVCksCisgICAgICAg
ICAgICAgICAgJ2RpcjEvc3ViLWRpcjIvdGVzdDMnOiB7fSwKKyAgICAgICAgICAgICAgICAnZGly
MS9zdWItZGlyMi90ZXN0NCc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIyL3N1Yi1kaXIzL3Rl
c3Q1Jzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjIvdGVzdDYnOiB7fSwKKyAgICAgICAgICAg
IH0KKyAgICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGljdCA9IHNlbGYubm9ybWFsaXplKGpz
b24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncmVzdWx0
cyddLCBzZWxmLm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAnZGlyMSc6IHsKKyAgICAgICAgICAg
ICAgICAnc3ViLWRpcjEnOiB7CisgICAgICAgICAgICAgICAgICAgICd0ZXN0MSc6IHsnYWN0dWFs
JzogVXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMfSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3Qy
JzogeydhY3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLlRJTUVPVVR9LAorICAgICAgICAgICAg
ICAgIH0sICdzdWItZGlyMic6IHsKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3QzJzoge30sCisg
ICAgICAgICAgICAgICAgICAgICd0ZXN0NCc6IHt9LAorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0sICdkaXIyJzogeworICAgICAgICAgICAgICAgICdzdWItZGlyMyc6IHsndGVzdDUn
OiB7fX0sCisgICAgICAgICAgICAgICAgJ3Rlc3Q2Jzoge30sCisgICAgICAgICAgICB9LAorICAg
ICAgICB9KSkKKworICAgIGRlZiB0ZXN0X25vX3N1aXRlKHNlbGYpOgorICAgICAgICB1cGxvYWQg
PSBVcGxvYWQoCisgICAgICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAg
ICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlk
PSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAor
ICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Cisg
ICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQorCisgICAg
ZGVmIHRlc3Rfbm9fY29tbWl0cyhzZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAg
ICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgKQorICAgICAgICB3aXRo
IHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAganNvbi5kdW1wcyh1
cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRlZiB0ZXN0X2J1aWxkYm90KHNlbGYp
OgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHkt
dGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0n
NScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAg
ICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRhaWxzKG9wdGlvbnM9c2VsZi5PcHRp
b25zKAorICAgICAgICAgICAgICAgIGJ1aWxkYm90X21hc3Rlcj0nd2Via2l0Lm9yZycsCisgICAg
ICAgICAgICAgICAgYnVpbGRlcl9uYW1lPSdRdWV1ZS0xJywKKyAgICAgICAgICAgICAgICBidWls
ZF9udW1iZXI9MSwKKyAgICAgICAgKSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMo
VmFsdWVFcnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5F
bmNvZGVyKQorCisgICAgICAgIHVwbG9hZC5kZXRhaWxzWydidWlsZGJvdC13b3JrZXInXSA9ICdi
b3QxMjMnCisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fk
cyhqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKSkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydkZXRhaWxzJ10sIHNl
bGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICdidWlsZGJvdC1tYXN0ZXInOiAnd2Via2l0Lm9y
ZycsCisgICAgICAgICAgICAnYnVpbGRlci1uYW1lJzogJ1F1ZXVlLTEnLAorICAgICAgICAgICAg
J2J1aWxkLW51bWJlcic6IDEsCisgICAgICAgICAgICAnYnVpbGRib3Qtd29ya2VyJzogJ2JvdDEy
MycsCisgICAgICAgIH0pKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL2dpdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0yOTAsNiArMjkwLDE0IEBAIGNsYXNzIEdpdChTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgIGRl
ZiBuYXRpdmVfcmV2aXNpb24oc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBzZWxmLl9ydW5f
Z2l0KFsnLUMnLCBzZWxmLmZpbmRfY2hlY2tvdXRfcm9vdChwYXRoKSwgJ2xvZycsICctMScsICct
LXByZXR0eT1mb3JtYXQ6JUgnXSkKIAorICAgIGRlZiBuYXRpdmVfYnJhbmNoKHNlbGYsIHBhdGgp
OgorICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fZ2l0KFsnLUMnLCBzZWxmLmZpbmRfY2hlY2tv
dXRfcm9vdChwYXRoKSwgJ3Jldi1wYXJzZScsICctLWFiYnJldi1yZWYnLCAnSEVBRCddKS5yc3Ry
aXAoKQorCisgICAgICAgICMgRm9yIGdpdC1zdm4KKyAgICAgICAgaWYgcmVzdWx0LnN0YXJ0c3dp
dGgoJ2hlYWRzJyk6CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0WzY6XQorICAgICAgICByZXR1
cm4gcmVzdWx0CisKICAgICBkZWYgc3ZuX3VybChzZWxmKToKICAgICAgICAgZ2l0X2NvbW1hbmQg
PSBbJ3N2bicsICdpbmZvJ10KICAgICAgICAgc3RhdHVzID0gc2VsZi5fcnVuX2dpdChnaXRfY29t
bWFuZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9z
Y21fbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9zY20vc2NtX21vY2sucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weQkod29ya2luZyBjb3B5
KQpAQCAtODcsNiArODcsOSBAQCBjbGFzcyBNb2NrU0NNKG9iamVjdCk6CiAgICAgZGVmIG5hdGl2
ZV9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIHNlbGYuc3ZuX3JldmlzaW9u
KHBhdGgpCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0
dXJuICd0cnVuaycKKwogICAgIGRlZiB0aW1lc3RhbXBfb2ZfcmV2aXNpb24oc2VsZiwgcGF0aCwg
cmV2aXNpb24pOgogICAgICAgICByZXR1cm4gJzIwMTMtMDItMDEgMDg6NDg6MDUgKzAwMDAnCiAK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtOTA5LDYgKzkwOSw5IEBAIEVORAogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuc2NtLmhlYWRfc3ZuX3JldmlzaW9uKCksIHNlbGYuc2NtLm5hdGl2ZV9yZXZpc2lvbign
LicpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NtLm5hdGl2ZV9yZXZpc2lvbign
LicpLCAnNScpCiAKKyAgICBkZWYgdGVzdF9uYXRpdmVfYnJhbmNoKHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NtLm5hdGl2ZV9icmFuY2goJy4nKSwgJ3RydW5rJykKKwog
ICAgIGRlZiB0ZXN0X3Byb3BzZXRfcHJvcGdldChzZWxmKToKICAgICAgICAgZmlsZXBhdGggPSBv
cy5wYXRoLmpvaW4oc2VsZi5zdm5fY2hlY2tvdXRfcGF0aCwgInRlc3RfZmlsZSIpCiAgICAgICAg
IGV4cGVjdGVkX21pbWVfdHlwZSA9ICJ4LWFwcGxpY2F0aW9uL2Zvby1iYXIiCkBAIC0xMTEyLDYg
KzExMTUsMTAgQEAgY2xhc3MgR2l0VGVzdChTQ01UZXN0KToKICAgICAgICAgY29tbWFuZCA9IFsn
Z2l0JywgJy1DJywgc2NtLmNoZWNrb3V0X3Jvb3QsICdyZXYtcGFyc2UnLCAnSEVBRCddCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2NtLm5hdGl2ZV9yZXZpc2lvbihzY20uY2hlY2tvdXRfcm9v
dCksIHJ1bl9jb21tYW5kKGNvbW1hbmQpLnN0cmlwKCkpCiAKKyAgICBkZWYgdGVzdF9uYXRpdmVf
YnJhbmNoKHNlbGYpOgorICAgICAgICBzY20gPSBzZWxmLnRyYWNraW5nX3NjbQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCdtYXN0ZXInLCBzY20ubmF0aXZlX2JyYW5jaChzY20uY2hlY2tvdXRf
cm9vdCkpCisKICAgICBkZWYgdGVzdF9yZW5hbWVfZmlsZXMoc2VsZik6CiAgICAgICAgIHNjbSA9
IHNlbGYudHJhY2tpbmdfc2NtCiAKQEAgLTE2MjcsNiArMTYzNCw5IEBAIGNsYXNzIEdpdFNWTlRl
c3QoU0NNVGVzdCk6CiAgICAgICAgIGNvbW1hbmQgPSBbJ2dpdCcsICctQycsIHNlbGYuZ2l0X2No
ZWNrb3V0X3BhdGgsICdyZXYtcGFyc2UnLCAnSEVBRCddCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5zY20ubmF0aXZlX3JldmlzaW9uKHNlbGYuZ2l0X2NoZWNrb3V0X3BhdGgpLCBydW5f
Y29tbWFuZChjb21tYW5kKS5zdHJpcCgpKQogCisgICAgZGVmIHRlc3RfbmF0aXZlX2JyYW5jaChz
ZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgndHJ1bmsnLCBzZWxmLnNjbS5uYXRpdmVf
YnJhbmNoKHNlbGYuZ2l0X2NoZWNrb3V0X3BhdGgpKQorCiAgICAgZGVmIHRlc3RfdG9fb2JqZWN0
X25hbWUoc2VsZik6CiAgICAgICAgIHJlbHBhdGggPSAndGVzdF9maWxlX2NvbW1pdDEnCiAgICAg
ICAgIGZ1bGxwYXRoID0gb3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmpvaW4oc2VsZi5naXRfY2hl
Y2tvdXRfcGF0aCwgcmVscGF0aCkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9jaGVja291dC9zY20vc3ZuLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDcgKzgzLDcgQEAgY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAg
ICAgIFNDTS5fX2luaXRfXyhzZWxmLCBjd2QsICoqa3dhcmdzKQogICAgICAgICBzZWxmLl9ib2d1
c19kaXIgPSBOb25lCiAgICAgICAgIGlmIHBhdGNoX2RpcmVjdG9yaWVzID09IFtdOgotICAgICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKG1lc3NhZ2U9J0VtcHR5IGxpc3Qgb2YgcGF0Y2ggZGlyZWN0
b3JpZXMgcGFzc2VkIHRvIFNDTS5fX2luaXRfXycpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oJ0VtcHR5IGxpc3Qgb2YgcGF0Y2ggZGlyZWN0b3JpZXMgcGFzc2VkIHRvIFNDTS5fX2luaXRf
XycpCiAgICAgICAgIGVsaWYgcGF0Y2hfZGlyZWN0b3JpZXMgPT0gTm9uZToKICAgICAgICAgICAg
IHNlbGYuX3BhdGNoX2RpcmVjdG9yaWVzID0gW3NlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0aChjd2Qs
IHNlbGYuY2hlY2tvdXRfcm9vdCldCiAgICAgICAgIGVsc2U6CkBAIC0yNzgsNiArMjc4LDE0IEBA
IGNsYXNzIFNWTihTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgIGRlZiBuYXRpdmVfcmV2aXNpb24o
c2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBzZWxmLnN2bl9yZXZpc2lvbihwYXRoKQogCisg
ICAgZGVmIG5hdGl2ZV9icmFuY2goc2VsZiwgcGF0aCk6CisgICAgICAgIHJlbGF0aXZlX3VybCA9
IHNlbGYudmFsdWVfZnJvbV9zdm5faW5mbyhwYXRoLCAnUmVsYXRpdmUgVVJMJylbMjpdCisgICAg
ICAgIGlmIHJlbGF0aXZlX3VybC5zdGFydHN3aXRoKCd0cnVuaycpOgorICAgICAgICAgICAgcmV0
dXJuICd0cnVuaycKKyAgICAgICAgZWxpZiByZWxhdGl2ZV91cmwuc3RhcnRzd2l0aCgnYnJhbmNo
Jyk6CisgICAgICAgICAgICByZXR1cm4gcmVsYXRpdmVfdXJsLnNwbGl0KCcvJylbMV0KKyAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCd7fSBpcyBub3QgYSBicmFuY2gnLmZvcm1hdChyZWxhdGl2ZV91
cmwuc3BsaXQoJy8nKVswXSkpCisKICAgICBkZWYgdGltZXN0YW1wX29mX3JldmlzaW9uKHNlbGYs
IHBhdGgsIHJldmlzaW9uKToKICAgICAgICAgIyBXZSB1c2UgLS14bWwgdG8gZ2V0IHRpbWVzdGFt
cHMgbGlrZSAyMDEzLTAyLTA4VDA4OjE4OjA0Ljk2NDQwOVoKICAgICAgICAgcmVwb3NpdG9yeV9y
b290ID0gc2VsZi52YWx1ZV9mcm9tX3N2bl9pbmZvKHNlbGYuY2hlY2tvdXRfcm9vdCwgJ1JlcG9z
aXRvcnkgUm9vdCcpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
cGxhdGZvcm1pbmZvLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Niw2ICsxNDYsMTEgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAg
ICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHJldHVybiBzeXMubWF4aW50CiAKKyAgICBkZWYgYnVp
bGRfdmVyc2lvbihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pc19tYWMoKToKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWycvdXNyL2Jpbi9zd192ZXJzJywg
Jy1idWlsZFZlcnNpb24nXSwgcmV0dXJuX3N0ZGVycj1GYWxzZSwgaWdub3JlX2Vycm9ycz1UcnVl
KS5yc3RyaXAoKQorICAgICAgICByZXR1cm4gTm9uZQorCiAgICAgZGVmIHhjb2RlX3Nka192ZXJz
aW9uKHNlbGYsIHNka19uYW1lKToKICAgICAgICAgaWYgc2VsZi5pc19tYWMoKToKICAgICAgICAg
ICAgICMgQXNzdW1lcyB0aGF0IHhjcnVuIGRvZXMgbm90IHdyaXRlIHRvIHN0YW5kYXJkIG91dHB1
dCBvbiBmYWlsdXJlIChlLmcuIFNESyBkb2VzIG5vdCBleGlzdCkuCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19t
b2NrLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMy
LDcgQEAgZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbl9uYW1lX21hcCBpbQogCiAKIGNsYXNz
IE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3NfbmFt
ZT0nbWFjJywgb3NfdmVyc2lvbj1WZXJzaW9uLmZyb21fbmFtZSgnU25vdyBMZW9wYXJkJykpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPVZlcnNpb24u
ZnJvbV9uYW1lKCdIaWdoIFNpZXJyYScpKToKICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob3Nf
dmVyc2lvbiwgVmVyc2lvbikKICAgICAgICAgc2VsZi5vc19uYW1lID0gb3NfbmFtZQogICAgICAg
ICBzZWxmLm9zX3ZlcnNpb24gPSBvc192ZXJzaW9uCkBAIC03OCw2ICs3OCwxMSBAQCBjbGFzcyBN
b2NrUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgZGVmIHRlcm1pbmFsX3dpZHRoKHNlbGYpOgog
ICAgICAgICByZXR1cm4gODAKIAorICAgIGRlZiBidWlsZF92ZXJzaW9uKHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLmlzX21hYygpOgorICAgICAgICAgICAgcmV0dXJuICcxN0E0MDUnCisgICAgICAg
IHJldHVybiBOb25lCisKICAgICBkZWYgeGNvZGVfc2RrX3ZlcnNpb24oc2VsZiwgc2RrX25hbWUp
OgogICAgICAgICByZXR1cm4gVmVyc2lvbig4LCAxKQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9yZXN1bHRzL19faW5pdF9fLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEzIEBACisjIFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZv
ciBtb2R1bGUgZmlsZXMKKworIyBLZWVwIHRoaXMgZmlsZSBmcmVlIG9mIGFueSBjb2RlIG9yIGlt
cG9ydCBzdGF0ZW1lbnRzIHRoYXQgY291bGQKKyMgY2F1c2UgZWl0aGVyIGFuIGVycm9yIHRvIG9j
Y3VyIG9yIGEgbG9nIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLgorIyBUaGlzIGVuc3VyZXMgdGhhdCBj
YWxsaW5nIGNvZGUgY2FuIGltcG9ydCBpbml0aWFsaXphdGlvbiBjb2RlIGZyb20KKyMgd2Via2l0
cHkgYmVmb3JlIGFueSBlcnJvcnMgb3IgbG9nIG1lc3NhZ2VzIGR1ZSB0byBjb2RlIGluIHRoaXMg
ZmlsZS4KKyMgSW5pdGlhbGl6YXRpb24gY29kZSBjYW4gaW5jbHVkZSB0aGluZ3MgbGlrZSB2ZXJz
aW9uLWNoZWNraW5nIGNvZGUgYW5kCisjIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBjb2RlLgorIwor
IyBXZSBkbyBub3QgZXhlY3V0ZSBhbnkgdmVyc2lvbi1jaGVja2luZyBjb2RlIG9yIGxvZ2dpbmcg
Y29uZmlndXJhdGlvbgorIyBjb2RlIGluIHRoaXMgZmlsZSBzbyB0aGF0IGNhbGxlcnMgY2FuIG9w
dC1pbiBhcyB0aGV5IHdhbnQuICBUaGlzIGFsc28KKyMgYWxsb3dzIGRpZmZlcmVudCBjYWxsZXJz
IHRvIGNob29zZSBkaWZmZXJlbnQgaW5pdGlhbGl6YXRpb24gY29kZSwKKyMgYXMgbmVjZXNzYXJ5
LgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMucHkJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMucHkJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisj
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCitpbXBvcnQgb3B0cGFyc2UKKworCitkZWYgdXBsb2FkX29wdGlvbnMoKToK
KyAgICByZXR1cm4gWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1yZXBvcnQnLCBh
Y3Rpb249J2FwcGVuZCcsIGRlc3Q9J3JlcG9ydF91cmxzJywgaGVscD0nVVJMIChvciBVUkxzKSB0
byByZXBvcnQgdGVzdCByZXN1bHRzIHRvJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9u
KCctLWJ1aWxkYm90LW1hc3RlcicsIGhlbHA9J1RoZSB1cmwgb2YgdGhlIGJ1aWxkYm90IG1hc3Rl
ci4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRlci1uYW1lJywgaGVs
cD0nVGhlIG5hbWUgb2YgdGhlIGJ1aWxkYm90IGJ1aWxkZXIgdGVzdHMgd2VyZSBydW4gb24uJyks
CisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkLW51bWJlcicsIGhlbHA9J1Ro
ZSBidWlsZGJvdCBidWlsZCBudW1iZXIgdGVzdHMgYXJlIGFzc29jaWF0ZWQgd2l0aC4nKSwKKyAg
ICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRib3Qtd29ya2VyJywgaGVscD0nVGhl
IGJ1aWxkYm90IHdvcmtlciB0ZXN0cyB3ZXJlIHJ1biBvbi4nKSwKKyAgICBdCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE4NyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQganNvbgoraW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBwbGF0Zm9y
bSBhcyBwbGF0Zm9ybV8KKworCitjbGFzcyBVcGxvYWQob2JqZWN0KToKKyAgICBVUExPQURfRU5E
UE9JTlQgPSAnL2FwaS91cGxvYWQnCisgICAgQlVJTERCT1RfREVUQUlMUyA9IFsnYnVpbGRib3Qt
bWFzdGVyJywgJ2J1aWxkZXItbmFtZScsICdidWlsZC1udW1iZXInLCAnYnVpbGRib3Qtd29ya2Vy
J10KKyAgICBWRVJTSU9OID0gMAorCisgICAgY2xhc3MgRXhwZWN0YXRpb25zOgorICAgICAgICAj
IFRoZXNlIGFyZSBvcmRlcmVkIGJ5IHByaW9yaXR5LCBtZWFuaW5nIHRoYXQgYSB0ZXN0IHdoaWNo
IGJvdGggY3Jhc2hlcyBhbmQgaGFzCisgICAgICAgICMgYSB3YXJuaW5nIHNob3VsZCBiZSBjb25z
aWRlcmVkIHRvIGhhdmUgY3Jhc2hlZC4KKyAgICAgICAgT1JERVIgPSBbCisgICAgICAgICAgICAn
Q1JBU0gnLAorICAgICAgICAgICAgJ1RJTUVPVVQnLAorICAgICAgICAgICAgJ0lNQUdFJywgICAj
IEltYWdlLWRpZmYKKyAgICAgICAgICAgICdBVURJTycsICAgIyBBdWRpby1kaWZmCisgICAgICAg
ICAgICAnVEVYVCcsICAgICMgVGV4dC1kaWZmCisgICAgICAgICAgICAnRkFJTCcsCisgICAgICAg
ICAgICAnRVJST1InLAorICAgICAgICAgICAgJ1dBUk5JTkcnLAorICAgICAgICAgICAgJ1BBU1Mn
LAorICAgICAgICBdCisgICAgICAgIENSQVNILCBUSU1FT1VULCBJTUFHRSwgQVVESU8sIFRFWFQs
IEZBSUwsIEVSUk9SLCBXQVJOSU5HLCBQQVNTID0gT1JERVIKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICBwbGF0Zm9ybT1Ob25l
LAorICAgICAgICAgICAgaXNfc2ltdWxhdG9yPUZhbHNlLAorICAgICAgICAgICAgdmVyc2lvbj1O
b25lLAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPU5vbmUsCisgICAgICAgICAgICB2ZXJzaW9u
X25hbWU9Tm9uZSwKKyAgICAgICAgICAgIG1vZGVsPU5vbmUsCisgICAgICAgICAgICBzdHlsZT1O
b25lLCAgICMgRGVidWcvUHJvZHVjdGlvbi9SZWxlYXNlCisgICAgICAgICAgICBmbGF2b3I9Tm9u
ZSwgICMgRHVtcGluZyBncm91bmQgc3VpdGUtd2lkZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgKGll
LCBHdWFyZE1hbGxvYykKKyAgICAgICAgICAgIHNkaz1Ob25lLAorICAgICAgICApOgorCisgICAg
ICAgICMgVGhpcyBkZXZpYXRlcyBzbGlnaHRseSBmcm9tIHRoZSByZXN0IG9mIHdlYmtpdHB5LCBi
dXQgaXQgYWxsb3dzIHRoaXMgZmlsZSB0byBiZSBlbnRpcmVseSBwb3J0YWJsZS4KKyAgICAgICAg
Y29uZmlnID0gZGljdCgKKyAgICAgICAgICAgIHBsYXRmb3JtPXBsYXRmb3JtIG9yIChwbGF0Zm9y
bV8uc3lzdGVtKCkgaWYgcGxhdGZvcm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVsc2UgJ21hYycp
Lmxvd2VyKCksCisgICAgICAgICAgICBpc19zaW11bGF0b3I9aXNfc2ltdWxhdG9yLAorICAgICAg
ICAgICAgdmVyc2lvbj12ZXJzaW9uIG9yIChwbGF0Zm9ybV8ucmVsZWFzZSgpIGlmIHBsYXRmb3Jt
Xy5zeXN0ZW0oKSAhPSAnRGFyd2luJyBlbHNlIHBsYXRmb3JtXy5tYWNfdmVyKClbMF0pLAorICAg
ICAgICAgICAgYXJjaGl0ZWN0dXJlPWFyY2hpdGVjdHVyZSBvciBwbGF0Zm9ybV8ubWFjaGluZSgp
LAorICAgICAgICApCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbmZpZy5pdGVyaXRlbXMo
KToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigne30gbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uJy5mb3Jt
YXQoa2V5KSkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGljdCh2ZXJzaW9uX25hbWU9dmVy
c2lvbl9uYW1lLCBtb2RlbD1tb2RlbCwgc3R5bGU9c3R5bGUsIGZsYXZvcj1mbGF2b3IsIHNkaz1z
ZGspLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICAgICAgY29uZmlnW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gY29uZmlnCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9jb21taXQocmVwb3NpdG9yeV9pZD1O
b25lLCBpZD1Ob25lLCBicmFuY2g9Tm9uZSk6CisgICAgICAgIGNvbW1pdCA9IGRpY3QocmVwb3Np
dG9yeV9pZD1yZXBvc2l0b3J5X2lkLCBpZD1pZCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4g
Y29tbWl0Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRlZmluZWQgaW4gYSBjb21t
aXQnLmZvcm1hdChrZXkpKQorICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICBjb21taXRb
J2JyYW5jaCddID0gYnJhbmNoCisgICAgICAgIHJldHVybiBjb21taXQKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgY3JlYXRlX2RldGFpbHMobGluaz1Ob25lLCBvcHRpb25zPU5vbmUsICoq
a3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgaWYgbGlu
azoKKyAgICAgICAgICAgIHJlc3VsdFsnbGluayddID0gbGluaworCisgICAgICAgIGlmIG9wdGlv
bnM6CisgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBVcGxvYWQuQlVJTERCT1RfREVUQUlMUzoK
KyAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob3B0aW9ucywgZWxlbWVudC5yZXBsYWNl
KCctJywgJ18nKSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2VsZW1lbnRdID0gdmFsdWUKKyAgICAgICAgcmV0
dXJuIHJlc3VsdAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfcnVuX3N0YXRz
KHN0YXJ0X3RpbWU9Tm9uZSwgZW5kX3RpbWU9Tm9uZSwgdGVzdHNfc2tpcHBlZD1Ob25lLCAqKmt3
YXJncyk6CisgICAgICAgIHN0YXRzID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgZm9yIGtleSwg
dmFsdWUgaW4gZGljdChzdGFydF90aW1lPXN0YXJ0X3RpbWUsIGVuZF90aW1lPWVuZF90aW1lLCB0
ZXN0c19za2lwcGVkPXRlc3RzX3NraXBwZWQpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYg
dmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RhdHNba2V5XSA9IHZhbHVlCisg
ICAgICAgIHJldHVybiBzdGF0cworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVf
dGVzdF9yZXN1bHQoZXhwZWN0ZWQ9Tm9uZSwgYWN0dWFsPU5vbmUsIGxvZz1Ob25lLCAqKmt3YXJn
cyk6CisgICAgICAgIHJlc3VsdCA9IGRpY3QoKiprd2FyZ3MpCisKKyAgICAgICAgIyBUZXN0cyB3
aGljaCBkb24ndCBkZWNsYXJlIGV4cGVjdGF0aW9ucyBvciByZXN1bHRzIGFyZSBhc3N1bWVkIHRv
IGhhdmUgcGFzc2VkLgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KGV4cGVjdGVkPWV4
cGVjdGVkLCBhY3R1YWw9YWN0dWFsLCBsb2c9bG9nKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAg
IGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFs
dWUKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1aXRl
PU5vbmUsIGNvbmZpZ3VyYXRpb249Tm9uZSwgY29tbWl0cz1bXSwgdGltZXN0YW1wPU5vbmUsIGRl
dGFpbHM9Tm9uZSwgcnVuX3N0YXRzPU5vbmUsIHJlc3VsdHM9e30pOgorICAgICAgICBzZWxmLnN1
aXRlID0gc3VpdGUKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgor
ICAgICAgICBzZWxmLmNvbW1pdHMgPSBjb21taXRzCisgICAgICAgIHNlbGYudGltZXN0YW1wID0g
dGltZXN0YW1wCisgICAgICAgIHNlbGYuZGV0YWlscyA9IGRldGFpbHMKKyAgICAgICAgc2VsZi5y
dW5fc3RhdHMgPSBydW5fc3RhdHMKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gcmVzdWx0cworCisg
ICAgY2xhc3MgRW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKToKKworICAgICAgICBkZWYgZGVmYXVs
dChzZWxmLCBvYmopOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIFVwbG9hZCk6Cisg
ICAgICAgICAgICAgICAgaWYgbm90IG9iai5zdWl0ZToKKyAgICAgICAgICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcignTm8gc3VpdGUgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKyAg
ICAgICAgICAgICAgICBpZiBub3Qgb2JqLmNvbW1pdHM6CisgICAgICAgICAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoJ05vIGNvbW1pdHMgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykK
KworICAgICAgICAgICAgICAgIGRldGFpbHMgPSBvYmouZGV0YWlscyBvciBvYmouY3JlYXRlX2Rl
dGFpbHMoKQorICAgICAgICAgICAgICAgIGJ1aWxkYm90X2FyZ3MgPSBbZGV0YWlscy5nZXQoYXJn
LCBOb25lKSBpcyBOb25lIGZvciBhcmcgaW4gb2JqLkJVSUxEQk9UX0RFVEFJTFNdCisgICAgICAg
ICAgICAgICAgaWYgYW55KGJ1aWxkYm90X2FyZ3MpIGFuZCBub3QgYWxsKGJ1aWxkYm90X2FyZ3Mp
OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBbGwgYnVpbGRib3QgZGV0
YWlscyBtdXN0IGJlIGRlZmluZWQgZm9yIHVwbG9hZCcpCisKKyAgICAgICAgICAgICAgICBkZWYg
dW5wYWNrX3Rlc3QoY3VycmVudCwgcGF0aF90b190ZXN0LCBkYXRhKToKKyAgICAgICAgICAgICAg
ICAgICAgaWYgbGVuKHBhdGhfdG9fdGVzdCkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRbcGF0aF90b190ZXN0WzBdXSA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3VycmVudC5nZXQocGF0aF90b190
ZXN0WzBdKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbcGF0aF90b190ZXN0WzBd
XSA9IHt9CisgICAgICAgICAgICAgICAgICAgIHVucGFja190ZXN0KGN1cnJlbnRbcGF0aF90b190
ZXN0WzBdXSwgcGF0aF90b190ZXN0WzE6XSwgZGF0YSkKKworICAgICAgICAgICAgICAgIHJlc3Vs
dHMgPSB7fQorICAgICAgICAgICAgICAgIGZvciB0ZXN0LCBkYXRhIGluIG9iai5yZXN1bHRzLml0
ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICB1bnBhY2tfdGVzdChyZXN1bHRzLCB0ZXN0
LnNwbGl0KCcvJyksIGRhdGEpCisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkaWN0KAorICAg
ICAgICAgICAgICAgICAgICB2ZXJzaW9uPW9iai5WRVJTSU9OLAorICAgICAgICAgICAgICAgICAg
ICBzdWl0ZT1vYmouc3VpdGUsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249b2Jq
LmNvbmZpZ3VyYXRpb24gb3Igb2JqLmNyZWF0ZV9jb25maWd1cmF0aW9uKCksCisgICAgICAgICAg
ICAgICAgICAgIGNvbW1pdHM9b2JqLmNvbW1pdHMsCisgICAgICAgICAgICAgICAgICAgIHRlc3Rf
cmVzdWx0cz1kaWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscz1kZXRhaWxzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgcnVuX3N0YXRzPW9iai5ydW5fc3RhdHMgb3Igb2JqLmNy
ZWF0ZV9ydW5fc3RhdHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHM9cmVzdWx0
cywKKyAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAg
ICAgICAgaWYgb2JqLnRpbWVzdGFtcDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wyd0aW1l
c3RhbXAnXSA9IG9iai50aW1lc3RhbXAKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Cisg
ICAgICAgICAgICByZXR1cm4gc3VwZXIoVXBsb2FkLkVuY29kZXIsIHNlbGYpLmRlZmF1bHQob2Jq
KQorCisgICAgZGVmIHVwbG9hZChzZWxmLCB1cmwsIGxvZ19saW5lPWxhbWJkYSB2YWw6IHN5cy5z
dGRvdXQud3JpdGUodmFsICsgJ1xuJykpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNw
b25zZSA9IHJlcXVlc3RzLnBvc3QodXJsICsgc2VsZi5VUExPQURfRU5EUE9JTlQsIGRhdGE9anNv
bi5kdW1wcyhzZWxmLCBjbHM9VXBsb2FkLkVuY29kZXIpKQorICAgICAgICBleGNlcHQgcmVxdWVz
dHMuZXhjZXB0aW9ucy5Db25uZWN0aW9uRXJyb3I6CisgICAgICAgICAgICBsb2dfbGluZSgnICcg
KiA0ICsgJ0ZhaWxlZCB0byB1cGxvYWQgdG8ge30sIHJlc3VsdHMgc2VydmVyIG5vdCBvbmxpbmUn
LmZvcm1hdCh1cmwpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBW
YWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ0ZhaWxlZCB0
byBlbmNvZGUgdXBsb2FkIGRhdGE6IHt9Jy5mb3JtYXQoZSkpCisgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAg
ICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ0Vycm9yIHVwbG9hZGluZyB0byB7fTonLmZvcm1hdCh1
cmwpKQorICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogOCArIHJlc3BvbnNlLmpzb24oKVsnZGVz
Y3JpcHRpb24nXSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGxvZ19saW5l
KCcgJyAqIDQgKyAnVXBsb2FkZWQgcmVzdWx0cyB0byB7fScuZm9ybWF0KHVybCkpCisgICAgICAg
IHJldHVybiBUcnVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0
cy91cGxvYWRfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIxMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
IyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQg
Y29sbGVjdGlvbnMKK2ltcG9ydCBqc29uCitpbXBvcnQgbW9jaworaW1wb3J0IHJlcXVlc3RzCitp
bXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkucmVzdWx0cy51cGxv
YWQgaW1wb3J0IFVwbG9hZAorCisKK2NsYXNzIFVwbG9hZFRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgorCisgICAgY2xhc3MgT3B0aW9ucyhvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2Vs
ZiwgKiprd2FyZ3MpOgorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4ga3dhcmdzLml0ZXJp
dGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCB2YWx1ZSkKKworICAg
IGNsYXNzIE1vY2tSZXNwb25zZShvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwg
c3RhdHVzX2NvZGU9MjAwLCB0ZXh0PScnKToKKyAgICAgICAgICAgIHNlbGYuc3RhdHVzX2NvZGUg
PSBzdGF0dXNfY29kZQorICAgICAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAorCisgICAgICAgIGRl
ZiBqc29uKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZHMoc2VsZi50ZXh0KQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBub3JtYWxpemUoZGF0YSk6CisgICAgICAgIGlm
IGlzaW5zdGFuY2UoZGF0YSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICByZXR1cm4gc3RyKGRh
dGEpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkYXRhLCBjb2xsZWN0aW9ucy5NYXBwaW5nKToK
KyAgICAgICAgICAgIHJldHVybiBkaWN0KG1hcChVcGxvYWRUZXN0Lm5vcm1hbGl6ZSwgZGF0YS5p
dGVyaXRlbXMoKSkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkYXRhLCBjb2xsZWN0aW9ucy5J
dGVyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gdHlwZShkYXRhKShtYXAoVXBsb2FkVGVzdC5u
b3JtYWxpemUsIGRhdGEpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGRhdGEK
KworICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzdGFydF90aW1lLCBlbmRf
dGltZSA9IHRpbWUudGltZSgpIC0gMywgdGltZS50aW1lKCkKKyAgICAgICAgdXBsb2FkID0gVXBs
b2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNv
bmZpZ3VyYXRpb249VXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9uKAorICAgICAgICAgICAgICAg
IHBsYXRmb3JtPSdtYWMnLAorICAgICAgICAgICAgICAgIHZlcnNpb249JzEwLjEzLjAnLAorICAg
ICAgICAgICAgICAgIHZlcnNpb25fbmFtZT0nSGlnaCBTaWVycmEnLAorICAgICAgICAgICAgICAg
IGFyY2hpdGVjdHVyZT0neDg2XzY0JywKKyAgICAgICAgICAgICAgICBzZGs9JzE3QTQwNScsCisg
ICAgICAgICAgICApLAorICAgICAgICAgICAgZGV0YWlscz1VcGxvYWQuY3JlYXRlX2RldGFpbHMo
bGluaz0naHR0cHM6Ly93ZWJraXQub3JnJyksCisgICAgICAgICAgICBjb21taXRzPVtVcGxvYWQu
Y3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAor
ICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5rJywK
KyAgICAgICAgICAgICldLAorICAgICAgICAgICAgcnVuX3N0YXRzPVVwbG9hZC5jcmVhdGVfcnVu
X3N0YXRzKAorICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAg
ICAgICAgICBlbmRfdGltZT1lbmRfdGltZSwKKyAgICAgICAgICAgICAgICB0ZXN0c19za2lwcGVk
PTAsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgcmVzdWx0cz17CisgICAgICAgICAgICAg
ICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3Qy
JzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChleHBlY3RlZD1VcGxvYWQuRXhwZWN0YXRpb25z
LlBBU1MsIGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICAgICAgfSwK
KyAgICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGljdCA9IHNlbGYubm9ybWFsaXplKGpzb24u
bG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikpKQorCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3ZlcnNpb24nXSwgMCkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsnc3VpdGUnXSwgJ3dlYmtpdHB5LXRlc3Rz
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsnY29uZmlndXJhdGlv
biddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KAorICAgICAgICAgICAgcGxhdGZvcm09J21hYycsCisg
ICAgICAgICAgICBpc19zaW11bGF0b3I9RmFsc2UsCisgICAgICAgICAgICB2ZXJzaW9uPScxMC4x
My4wJywKKyAgICAgICAgICAgIHZlcnNpb25fbmFtZT0nSGlnaCBTaWVycmEnLAorICAgICAgICAg
ICAgYXJjaGl0ZWN0dXJlPSd4ODZfNjQnLAorICAgICAgICAgICAgc2RrPScxN0E0MDUnLAorICAg
ICAgICApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsnY29tbWl0
cyddLCBbZGljdCgKKyAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAg
ICAgICBpZD0nNScsCisgICAgICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgKV0pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydk
ZXRhaWxzJ10sIHNlbGYubm9ybWFsaXplKGRpY3QobGluaz0naHR0cHM6Ly93ZWJraXQub3JnJykp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMn
XVsncnVuX3N0YXRzJ10sIHNlbGYubm9ybWFsaXplKGRpY3QoCisgICAgICAgICAgICBzdGFydF90
aW1lPXN0YXJ0X3RpbWUsCisgICAgICAgICAgICBlbmRfdGltZT1lbmRfdGltZSwKKyAgICAgICAg
ICAgIHRlc3RzX3NraXBwZWQ9MCwKKyAgICAgICAgKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydyZXN1bHRzJ10sIHNlbGYubm9ybWFs
aXplKHsKKyAgICAgICAgICAgICd3ZWJraXRweS50ZXN0MSc6IHt9LAorICAgICAgICAgICAgJ3dl
YmtpdHB5LnRlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChleHBlY3RlZD1VcGxvYWQu
RXhwZWN0YXRpb25zLlBBU1MsIGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLkZBSUwpLAorICAg
ICAgICB9KSkKKworICAgIGRlZiB0ZXN0X3VwbG9hZChzZWxmKToKKyAgICAgICAgdXBsb2FkID0g
VXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAg
IGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRv
cnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAg
IGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICkKKworICAgICAgICB3
aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBuZXc9bGFtYmRhIHVybCwgZGF0YTogc2Vs
Zi5Nb2NrUmVzcG9uc2UoKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodXBsb2FkLnVw
bG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMnLCBsb2dfbGluZT1sYW1iZGEgXzogTm9u
ZSkpCisKKyAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlvbih1cmwsIGRhdGEpOgorICAgICAgICAg
ICAgcmFpc2UgcmVxdWVzdHMuZXhjZXB0aW9ucy5Db25uZWN0aW9uRXJyb3IoKQorCisgICAgICAg
IHdpdGggbW9jay5wYXRjaCgncmVxdWVzdHMucG9zdCcsIG5ldz1yYWlzZV9leGNlcHRpb24pOgor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dlYmtp
dC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAgICAgICB3aXRo
IG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBuZXc9bGFtYmRhIHVybCwgZGF0YTogc2VsZi5N
b2NrUmVzcG9uc2UoCisgICAgICAgICAgICBzdGF0dXNfY29kZT00MDQsCisgICAgICAgICAgICB0
ZXh0PWpzb24uZHVtcHMoZGljdChkZXNjcmlwdGlvbj0nTm8gc3VjaCBhZGRyZXNzJykpLAorICAg
ICAgICApKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodXBsb2FkLnVwbG9hZCgnaHR0
cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMnLCBsb2dfbGluZT1sYW1iZGEgXzogTm9uZSkpCisKKyAg
ICBkZWYgdGVzdF9wYWNrZWRfdGVzdChzZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAor
ICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNvbW1pdHM9
W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dl
YmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0n
dHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICAgICByZXN1bHRzPXsKKyAgICAgICAg
ICAgICAgICAnZGlyMS9zdWItZGlyMS90ZXN0MSc6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQo
YWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgICAgICAgICAgJ2RpcjEv
c3ViLWRpcjEvdGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQu
RXhwZWN0YXRpb25zLlRJTUVPVVQpLAorICAgICAgICAgICAgICAgICdkaXIxL3N1Yi1kaXIyL3Rl
c3QzJzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjEvc3ViLWRpcjIvdGVzdDQnOiB7fSwKKyAg
ICAgICAgICAgICAgICAnZGlyMi9zdWItZGlyMy90ZXN0NSc6IHt9LAorICAgICAgICAgICAgICAg
ICdkaXIyL3Rlc3Q2Jzoge30sCisgICAgICAgICAgICB9CisgICAgICAgICkKKyAgICAgICAgZ2Vu
ZXJhdGVkX2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29uLmxvYWRzKGpzb24uZHVtcHModXBsb2Fk
LCBjbHM9VXBsb2FkLkVuY29kZXIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0
ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAg
ICAgICAgICAgJ2RpcjEnOiB7CisgICAgICAgICAgICAgICAgJ3N1Yi1kaXIxJzogeworICAgICAg
ICAgICAgICAgICAgICAndGVzdDEnOiB7J2FjdHVhbCc6IFVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJ
TH0sCisgICAgICAgICAgICAgICAgICAgICd0ZXN0Mic6IHsnYWN0dWFsJzogVXBsb2FkLkV4cGVj
dGF0aW9ucy5USU1FT1VUfSwKKyAgICAgICAgICAgICAgICB9LCAnc3ViLWRpcjInOiB7CisgICAg
ICAgICAgICAgICAgICAgICd0ZXN0Myc6IHt9LAorICAgICAgICAgICAgICAgICAgICAndGVzdDQn
OiB7fSwKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCAnZGlyMic6IHsKKyAgICAg
ICAgICAgICAgICAnc3ViLWRpcjMnOiB7J3Rlc3Q1Jzoge319LAorICAgICAgICAgICAgICAgICd0
ZXN0Nic6IHt9LAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSkpCisKKyAgICBkZWYgdGVzdF9u
b19zdWl0ZShzZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgY29t
bWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9p
ZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJh
bmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAgKQorICAgICAgICB3aXRoIHNl
bGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAganNvbi5kdW1wcyh1cGxv
YWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRlZiB0ZXN0X25vX2NvbW1pdHMoc2VsZik6
CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10
ZXN0cycsCisgICAgICAgICkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVy
cm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIp
CisKKyAgICBkZWYgdGVzdF9idWlsZGJvdChzZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2Fk
KAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNvbW1p
dHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9
J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5j
aD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5j
cmVhdGVfZGV0YWlscyhvcHRpb25zPXNlbGYuT3B0aW9ucygKKyAgICAgICAgICAgICAgICBidWls
ZGJvdF9tYXN0ZXI9J3dlYmtpdC5vcmcnLAorICAgICAgICAgICAgICAgIGJ1aWxkZXJfbmFtZT0n
UXVldWUtMScsCisgICAgICAgICAgICAgICAgYnVpbGRfbnVtYmVyPTEsCisgICAgICAgICkpKQor
ICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAg
anNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgICAgICB1cGxvYWQu
ZGV0YWlsc1snYnVpbGRib3Qtd29ya2VyJ10gPSAnYm90MTIzJworICAgICAgICBnZW5lcmF0ZWRf
ZGljdCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1V
cGxvYWQuRW5jb2RlcikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0
Wyd0ZXN0X3Jlc3VsdHMnXVsnZGV0YWlscyddLCBzZWxmLm5vcm1hbGl6ZSh7CisgICAgICAgICAg
ICAnYnVpbGRib3QtbWFzdGVyJzogJ3dlYmtpdC5vcmcnLAorICAgICAgICAgICAgJ2J1aWxkZXIt
bmFtZSc6ICdRdWV1ZS0xJywKKyAgICAgICAgICAgICdidWlsZC1udW1iZXInOiAxLAorICAgICAg
ICAgICAgJ2J1aWxkYm90LXdvcmtlcic6ICdib3QxMjMnLAorICAgICAgICB9KSkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKICMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgogIyBDb3B5cmlnaHQgKEMpIDIw
MTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQotIyBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIw
MTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM4LDE3ICszOCwxOSBAQCBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQg
dW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmxvZ3V0aWxzIGltcG9ydCBj
b25maWd1cmVfbG9nZ2luZwotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBp
bXBvcnQgRXhlY3V0aXZlLCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24uaG9z
dCBpbXBvcnQgSG9zdAogZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBpbXBvcnQgQ29uZmlnCiBm
cm9tIHdlYmtpdHB5LnRlc3QuZmluZGVyIGltcG9ydCBGaW5kZXIKIGZyb20gd2Via2l0cHkudGVz
dC5wcmludGVyIGltcG9ydCBQcmludGVyCiBmcm9tIHdlYmtpdHB5LnRlc3QucnVubmVyIGltcG9y
dCBSdW5uZXIsIHVuaXRfdGVzdF9uYW1lCitmcm9tIHdlYmtpdHB5LnJlc3VsdHMudXBsb2FkIGlt
cG9ydCBVcGxvYWQKK2Zyb20gd2Via2l0cHkucmVzdWx0cy5vcHRpb25zIGltcG9ydCB1cGxvYWRf
b3B0aW9ucwogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKLV9ob3N0ID0g
U3lzdGVtSG9zdCgpCitfaG9zdCA9IEhvc3QoKQogX3dlYmtpdF9yb290ID0gTm9uZQogCiAKQEAg
LTEyNCwxMiArMTI2LDE1IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICBwYXJzZXIg
PSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9J3VzYWdlOiAlcHJvZyBbb3B0aW9uc10gW2Fy
Z3MuLi5dJykKIAogICAgICAgICAjICBDb25maWd1cmF0aW9uIG9wdGlvbnMgb25seSBlZmZlY3Qg
dGhlIGJ1aWxkaW5nIG9mIGxsZGJXZWJLaXRUZXN0ZXIuCi0gICAgICAgIGNvbmZpZ3VyYXRpb25f
Z3JvdXAgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdDb25maWd1cmF0aW9uIG9wdGlv
bnMnKQotICAgICAgICBjb25maWd1cmF0aW9uX2dyb3VwLmFkZF9vcHRpb24oJy0tZGVidWcnLCBh
Y3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J0RlYnVnJywgZGVzdD0iY29uZmlndXJhdGlvbiIs
Ci0gICAgICAgICAgICBoZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gRGVidWcnKQotICAg
ICAgICBjb25maWd1cmF0aW9uX2dyb3VwLmFkZF9vcHRpb24oJy0tcmVsZWFzZScsIGFjdGlvbj0n
c3RvcmVfY29uc3QnLCBjb25zdD0nUmVsZWFzZScsIGRlc3Q9ImNvbmZpZ3VyYXRpb24iLAotICAg
ICAgICAgICAgaGVscD0nU2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIFJlbGVhc2UnKQotICAgICAg
ICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cChjb25maWd1cmF0aW9uX2dyb3VwKQorICAgICAgICBm
b3IgZ3JvdXBfbmFtZSwgZ3JvdXBfb3B0aW9ucyBpbiB7J1VwbG9hZCBPcHRpb25zJzogdXBsb2Fk
X29wdGlvbnMoKSwgJ0NvbmZpZ3VyYXRpb24gT3B0aW9ucyc6IFsKKyAgICAgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCctLWRlYnVnJywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdE
ZWJ1ZycsIGRlc3Q9ImNvbmZpZ3VyYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscD0nU2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIERlYnVnJyksCisgICAgICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1yZWxlYXNlJywgYWN0aW9uPSdzdG9yZV9jb25zdCcs
IGNvbnN0PSdSZWxlYXNlJywgZGVzdD0iY29uZmlndXJhdGlvbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gUmVsZWFzZScp
LAorICAgICAgICBdfS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIG9wdGlvbl9ncm91cCA9IG9w
dHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgZ3JvdXBfbmFtZSkKKyAgICAgICAgICAgIG9wdGlv
bl9ncm91cC5hZGRfb3B0aW9ucyhncm91cF9vcHRpb25zKQorICAgICAgICAgICAgcGFyc2VyLmFk
ZF9vcHRpb25fZ3JvdXAob3B0aW9uX2dyb3VwKQogCiAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9u
KCctYScsICctLWFsbCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biBhbGwgdGhlIHRlc3RzJykKQEAgLTE4MSwx
MSArMTg2LDEyIEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICBmcm9tIHdlYmtpdHB5
LnRoaXJkcGFydHkgaW1wb3J0IGF1dG9pbnN0YWxsX2V2ZXJ5dGhpbmcKICAgICAgICAgYXV0b2lu
c3RhbGxfZXZlcnl0aGluZygpCiAKKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisg
ICAgICAgIGNvbmZpZyA9IENvbmZpZyhfaG9zdC5leGVjdXRpdmUsIHNlbGYuZmluZGVyLmZpbGVz
eXN0ZW0pCisgICAgICAgIGNvbmZpZ3VyYXRpb25fdG9fdXNlID0gc2VsZi5fb3B0aW9ucy5jb25m
aWd1cmF0aW9uIG9yIGNvbmZpZy5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQogICAgICAgICBpZiB3
aWxsX3J1bl9sbGRiX3dlYmtpdF90ZXN0czoKICAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0
ZV91cGRhdGUoJ0J1aWxkaW5nIGxsZGJXZWJLaXRUZXN0ZXIgLi4uJykKICAgICAgICAgICAgIGJ1
aWxkX2xsZGJ3ZWJraXR0ZXN0ZXIgPSBzZWxmLmZpbmRlci5maWxlc3lzdGVtLmpvaW4oX3dlYmtp
dF9yb290LCAnVG9vbHMnLCAnU2NyaXB0cycsICdidWlsZC1sbGRid2Via2l0dGVzdGVyJykKLSAg
ICAgICAgICAgIGNvbmZpZyA9IENvbmZpZyhfaG9zdC5leGVjdXRpdmUsIHNlbGYuZmluZGVyLmZp
bGVzeXN0ZW0pCi0gICAgICAgICAgICBjb25maWd1cmF0aW9uX3RvX3VzZSA9IHNlbGYuX29wdGlv
bnMuY29uZmlndXJhdGlvbiBvciBjb25maWcuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkKICAgICAg
ICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBfaG9zdC5leGVjdXRpdmUucnVuX2FuZF90aHJv
d19pZl9mYWlsKFtidWlsZF9sbGRid2Via2l0dGVzdGVyLCBjb25maWcuZmxhZ19mb3JfY29uZmln
dXJhdGlvbihjb25maWd1cmF0aW9uX3RvX3VzZSldLCBxdWlldD0obm90IGJvb2woc2VsZi5fb3B0
aW9ucy52ZXJib3NlKSkpCiAgICAgICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IgYXMgZToKQEAg
LTIxOCw2ICsyMjQsNyBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgdGVzdF9ydW5u
ZXIgPSBSdW5uZXIoc2VsZi5wcmludGVyLCBsb2FkZXIpCiAgICAgICAgIHRlc3RfcnVubmVyLnJ1
bihwYXJhbGxlbF90ZXN0cywgc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpCiAgICAgICAg
IHRlc3RfcnVubmVyLnJ1bihzZXJpYWxfdGVzdHMsIDEpCisgICAgICAgIGVuZF90aW1lID0gdGlt
ZS50aW1lKCkKIAogICAgICAgICBzZWxmLnByaW50ZXIucHJpbnRfcmVzdWx0KHRpbWUudGltZSgp
IC0gc3RhcnQpCiAKQEAgLTIzMiw5ICsyMzksNTAgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMuY292ZXJhZ2U6CiAgICAgICAgICAgICBjb3Yuc3RvcCgp
CiAgICAgICAgICAgICBjb3Yuc2F2ZSgpCisKKyAgICAgICAgZmFpbGVkX3VwbG9hZHMgPSAwCisg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmVwb3J0X3VybHM6CisgICAgICAgICAgICBzZWxmLnBy
aW50ZXIubWV0ZXIud3JpdGVsbignXG4nKQorICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRl
X3VwZGF0ZSgnUHJlcGFyaW5nIHVwbG9hZCBkYXRhIC4uLicpCisKKyAgICAgICAgICAgIHJlc3Vs
dHMgPSB7dGVzdDoge30gZm9yIHRlc3QgaW4gdGVzdF9ydW5uZXIudGVzdHNfcnVufQorICAgICAg
ICAgICAgZm9yIHRlc3QsIGVycm9ycyBpbiB0ZXN0X3J1bm5lci5lcnJvcnM6CisgICAgICAgICAg
ICAgICAgcmVzdWx0c1t0ZXN0XSA9IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVw
bG9hZC5FeHBlY3RhdGlvbnMuRVJST1IsIGxvZz0nL24nLmpvaW4oZXJyb3JzKSkKKyAgICAgICAg
ICAgIGZvciB0ZXN0LCBmYWlsdXJlcyBpbiB0ZXN0X3J1bm5lci5mYWlsdXJlczoKKyAgICAgICAg
ICAgICAgICByZXN1bHRzW3Rlc3RdID0gVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9
VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMLCBsb2c9Jy9uJy5qb2luKGZhaWx1cmVzKSkKKworICAg
ICAgICAgICAgX2hvc3QuaW5pdGlhbGl6ZV9zY20oKQorICAgICAgICAgICAgdXBsb2FkID0gVXBs
b2FkKAorICAgICAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAg
ICAgICAgY29uZmlndXJhdGlvbj1VcGxvYWQuY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisgICAgICAg
ICAgICAgICAgICAgIHBsYXRmb3JtPV9ob3N0LnBsYXRmb3JtLm9zX25hbWUsCisgICAgICAgICAg
ICAgICAgICAgIHZlcnNpb249c3RyKF9ob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb24pLAorICAgICAg
ICAgICAgICAgICAgICB2ZXJzaW9uX25hbWU9X2hvc3QucGxhdGZvcm0ub3NfdmVyc2lvbl9uYW1l
KCksCisgICAgICAgICAgICAgICAgICAgIHN0eWxlPWNvbmZpZ3VyYXRpb25fdG9fdXNlLAorICAg
ICAgICAgICAgICAgICAgICBzZGs9X2hvc3QucGxhdGZvcm0uYnVpbGRfdmVyc2lvbigpLAorICAg
ICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgZGV0YWlscz1VcGxvYWQuY3JlYXRlX2Rl
dGFpbHMob3B0aW9ucz1zZWxmLl9vcHRpb25zKSwKKyAgICAgICAgICAgICAgICBjb21taXRzPVtV
cGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0n
d2Via2l0JywKKyAgICAgICAgICAgICAgICAgICAgaWQ9X2hvc3Quc2NtKCkubmF0aXZlX3Jldmlz
aW9uKF93ZWJraXRfcm9vdCksCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaD1faG9zdC5zY20o
KS5uYXRpdmVfYnJhbmNoKF93ZWJraXRfcm9vdCksCisgICAgICAgICAgICAgICAgKV0sCisgICAg
ICAgICAgICAgICAgcnVuX3N0YXRzPVVwbG9hZC5jcmVhdGVfcnVuX3N0YXRzKAorICAgICAgICAg
ICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAgICAgICAgICAgICAgICAgIGVu
ZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgICAgICAgICB0ZXN0c19za2lwcGVkPWxlbih0
ZXN0X3J1bm5lci50ZXN0c19ydW4pIC0gbGVuKHBhcmFsbGVsX3Rlc3RzKSAtIGxlbihzZXJpYWxf
dGVzdHMpLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgcmVzdWx0cz1yZXN1
bHRzLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgZm9yIHVybCBpbiBzZWxmLl9vcHRpb25z
LnJlcG9ydF91cmxzOgorICAgICAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZV91cGRhdGUo
J1VwbG9hZGluZyB0byB7fSAuLi4nLmZvcm1hdCh1cmwpKQorICAgICAgICAgICAgICAgIGZhaWxl
ZF91cGxvYWRzID0gZmFpbGVkX3VwbG9hZHMgaWYgdXBsb2FkLnVwbG9hZCh1cmwsIGxvZ19saW5l
PXNlbGYucHJpbnRlci5tZXRlci53cml0ZWxuKSBlbHNlIChmYWlsZWRfdXBsb2FkcyArIDEpCisg
ICAgICAgICAgICBzZWxmLnByaW50ZXIubWV0ZXIud3JpdGVsbignVXBsb2FkcyBjb21wbGV0ZWQh
JykKKworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdlOgogICAgICAgICAgICAgY292
LnJlcG9ydChzaG93X21pc3Npbmc9RmFsc2UpCiAKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmLnBy
aW50ZXIubnVtX2Vycm9ycyBhbmQgbm90IHNlbGYucHJpbnRlci5udW1fZmFpbHVyZXMKKyAgICAg
ICAgcmV0dXJuIG5vdCBzZWxmLnByaW50ZXIubnVtX2Vycm9ycyBhbmQgbm90IHNlbGYucHJpbnRl
ci5udW1fZmFpbHVyZXMgYW5kIG5vdCBmYWlsZWRfdXBsb2FkcwogCiAgICAgZGVmIF9jaGVja19p
bXBvcnRzKHNlbGYsIG5hbWVzKToKICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgY2xhc3MgUnVubmVyKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHByaW50ZXIsIGxvYWRlcik6CiAgICAgICAgIHNlbGYucHJpbnRlciA9IHByaW50ZXIKICAgICAg
ICAgc2VsZi5sb2FkZXIgPSBsb2FkZXIKLSAgICAgICAgc2VsZi50ZXN0c19ydW4gPSAwCisgICAg
ICAgIHNlbGYudGVzdHNfcnVuID0gW10KICAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQogICAgICAg
ICBzZWxmLmZhaWx1cmVzID0gW10KICAgICAgICAgc2VsZi53b3JrZXJfZmFjdG9yeSA9IGxhbWJk
YSBjYWxsZXI6IF9Xb3JrZXIoY2FsbGVyLCBzZWxmLmxvYWRlcikKQEAgLTYwLDcgKzYwLDcgQEAg
Y2xhc3MgUnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLnByaW50ZXIucHJpbnRfc3Rh
cnRlZF90ZXN0KHNvdXJjZSwgdGVzdF9uYW1lKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAg
ICAgc2VsZi50ZXN0c19ydW4gKz0gMQorICAgICAgICBzZWxmLnRlc3RzX3J1bi5hcHBlbmQodGVz
dF9uYW1lKQogICAgICAgICBpZiBmYWlsdXJlczoKICAgICAgICAgICAgIHNlbGYuZmFpbHVyZXMu
YXBwZW5kKCh0ZXN0X25hbWUsIGZhaWx1cmVzKSkKICAgICAgICAgaWYgZXJyb3JzOgpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L3J1bm5lcl91bml0dGVzdC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5CShyZXZp
c2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0
ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw2IEBAIGNsYXNzIFJ1bm5lclRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgndGVzdDMg
KEZvbyknLCAnRScsICd0ZXN0M1xuZXJyZWQnKSkKICAgICAgICAgcnVubmVyID0gUnVubmVyKFBy
aW50ZXIoc3RyZWFtLCBvcHRpb25zKSwgbG9hZGVyKQogICAgICAgICBydW5uZXIucnVuKFsnRm9v
LnRlc3QxJywgJ0Zvby50ZXN0MicsICdGb28udGVzdDMnXSwgMSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChydW5uZXIudGVzdHNfcnVuLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxl
bihydW5uZXIudGVzdHNfcnVuKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocnVu
bmVyLmZhaWx1cmVzKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocnVubmVyLmVy
cm9ycyksIDEpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVl
dWVzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHdvcmtp
bmcgY29weSkKQEAgLTE4MywxMCArMTgzLDEwIEBAIGNsYXNzIFBhdGNoUHJvY2Vzc2luZ1F1ZXVl
VGVzdChDb21tYW5kc1QKICAgICAgICAgcXVldWUuX29wdGlvbnMgPSBNb2NrKCkKICAgICAgICAg
cXVldWUuX29wdGlvbnMucG9ydCA9IE5vbmUKICAgICAgICAgcGF0Y2ggPSBxdWV1ZS5fdG9vbC5i
dWdzLmZldGNoX2F0dGFjaG1lbnQoMTAwMDEpCi0gICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJN
T0NLIGFkZF9hdHRhY2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlwdGlvbj1BcmNo
aXZlIG9mIGxheW91dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9yIG1hYy1zbm93bGVvcGFyZCBm
aWxlbmFtZT1sYXlvdXQtdGVzdC1yZXN1bHRzLnppcCBtaW1ldHlwZT1Ob25lCisgICAgICAgIGV4
cGVjdGVkX2xvZ3MgPSAiIiJNT0NLIGFkZF9hdHRhY2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAw
LCBkZXNjcmlwdGlvbj1BcmNoaXZlIG9mIGxheW91dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9y
IG1hYy1oaWdoc2llcnJhIGZpbGVuYW1lPWxheW91dC10ZXN0LXJlc3VsdHMuemlwIG1pbWV0eXBl
PU5vbmUKIC0tIEJlZ2luIGNvbW1lbnQgLS0KIFRoZSBhdHRhY2hlZCB0ZXN0IGZhaWx1cmVzIHdl
cmUgc2VlbiB3aGlsZSBydW5uaW5nIHJ1bi13ZWJraXQtdGVzdHMgb24gdGhlIG1vY2stcXVldWUu
Ci1Qb3J0OiBtYWMtc25vd2xlb3BhcmQgIFBsYXRmb3JtOiBNb2NrUGxhdGZvcm0gMS4wCitQb3J0
OiBtYWMtaGlnaHNpZXJyYSAgUGxhdGZvcm06IE1vY2tQbGF0Zm9ybSAxLjAKIC0tIEVuZCBjb21t
ZW50IC0tCiAiIiIKICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYs
IHF1ZXVlLl91cGxvYWRfcmVzdWx0c19hcmNoaXZlX2Zvcl9wYXRjaCwgW3BhdGNoLCBNb2NrKCld
LCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364729</attachid>
            <date>2019-03-14 17:27:57 -0700</date>
            <delta_ts>2019-03-15 08:13:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190314172756.patch</filename>
            <type>text/plain</type>
            <size>60254</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0Mjk3OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE5LTAzLTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6Cisg
ICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOiBBZGQgcmVxdWVzdHMg
YXV0by1pbnN0YWxsLgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxsX3Jl
cXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBs
b2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGlu
Zy4KKwogMjAxOS0wMy0xNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgTW92ZSBJREIgc3RvcmFnZSBpbiBwcml2YXRlIGJyb3dzaW5nIG1vZGUgdG8gTmV0d29y
a1Byb2Nlc3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18u
cHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5p
dF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKKyMgUmVxdWlyZWQgZm9yIFB5
dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCisjIEtlZXAg
dGhpcyBmaWxlIGZyZWUgb2YgYW55IGNvZGUgb3IgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBjb3Vs
ZAorIyBjYXVzZSBlaXRoZXIgYW4gZXJyb3IgdG8gb2NjdXIgb3IgYSBsb2cgbWVzc2FnZSB0byBi
ZSBsb2dnZWQuCisjIFRoaXMgZW5zdXJlcyB0aGF0IGNhbGxpbmcgY29kZSBjYW4gaW1wb3J0IGlu
aXRpYWxpemF0aW9uIGNvZGUgZnJvbQorIyB3ZWJraXRweSBiZWZvcmUgYW55IGVycm9ycyBvciBs
b2cgbWVzc2FnZXMgZHVlIHRvIGNvZGUgaW4gdGhpcyBmaWxlLgorIyBJbml0aWFsaXphdGlvbiBj
b2RlIGNhbiBpbmNsdWRlIHRoaW5ncyBsaWtlIHZlcnNpb24tY2hlY2tpbmcgY29kZSBhbmQKKyMg
bG9nZ2luZyBjb25maWd1cmF0aW9uIGNvZGUuCisjCisjIFdlIGRvIG5vdCBleGVjdXRlIGFueSB2
ZXJzaW9uLWNoZWNraW5nIGNvZGUgb3IgbG9nZ2luZyBjb25maWd1cmF0aW9uCisjIGNvZGUgaW4g
dGhpcyBmaWxlIHNvIHRoYXQgY2FsbGVycyBjYW4gb3B0LWluIGFzIHRoZXkgd2FudC4gIFRoaXMg
YWxzbworIyBhbGxvd3MgZGlmZmVyZW50IGNhbGxlcnMgdG8gY2hvb3NlIGRpZmZlcmVudCBpbml0
aWFsaXphdGlvbiBjb2RlLAorIyBhcyBuZWNlc3NhcnkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMz
IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcHRw
YXJzZQorCisKK2RlZiB1cGxvYWRfb3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJlcG9ydCcsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0ncmVw
b3J0X3VybHMnLCBoZWxwPSdVUkwgKG9yIFVSTHMpIHRvIHJlcG9ydCB0ZXN0IHJlc3VsdHMgdG8n
KSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRib3QtbWFzdGVyJywgaGVs
cD0nVGhlIHVybCBvZiB0aGUgYnVpbGRib3QgbWFzdGVyLicpLAorICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbignLS1idWlsZGVyLW5hbWUnLCBoZWxwPSdUaGUgbmFtZSBvZiB0aGUgYnVpbGRi
b3QgYnVpbGRlciB0ZXN0cyB3ZXJlIHJ1biBvbi4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oJy0tYnVpbGQtbnVtYmVyJywgaGVscD0nVGhlIGJ1aWxkYm90IGJ1aWxkIG51bWJlciB0
ZXN0cyBhcmUgYXNzb2NpYXRlZCB3aXRoLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bignLS1idWlsZGJvdC13b3JrZXInLCBoZWxwPSdUaGUgYnVpbGRib3Qgd29ya2VyIHRlc3RzIHdl
cmUgcnVuIG9uLicpLAorICAgIF0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0
cy91cGxvYWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRz
L3VwbG9hZC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3Vs
dHMvdXBsb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg3IEBACisjIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBqc29uCitpbXBvcnQgcmVxdWVz
dHMKK2ltcG9ydCBzeXMKKworaW1wb3J0IHBsYXRmb3JtIGFzIHBsYXRmb3JtXworCisKK2NsYXNz
IFVwbG9hZChvYmplY3QpOgorICAgIFVQTE9BRF9FTkRQT0lOVCA9ICcvYXBpL3VwbG9hZCcKKyAg
ICBCVUlMREJPVF9ERVRBSUxTID0gWydidWlsZGJvdC1tYXN0ZXInLCAnYnVpbGRlci1uYW1lJywg
J2J1aWxkLW51bWJlcicsICdidWlsZGJvdC13b3JrZXInXQorICAgIFZFUlNJT04gPSAwCisKKyAg
ICBjbGFzcyBFeHBlY3RhdGlvbnM6CisgICAgICAgICMgVGhlc2UgYXJlIG9yZGVyZWQgYnkgcHJp
b3JpdHksIG1lYW5pbmcgdGhhdCBhIHRlc3Qgd2hpY2ggYm90aCBjcmFzaGVzIGFuZCBoYXMKKyAg
ICAgICAgIyBhIHdhcm5pbmcgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gaGF2ZSBjcmFzaGVkLgor
ICAgICAgICBPUkRFUiA9IFsKKyAgICAgICAgICAgICdDUkFTSCcsCisgICAgICAgICAgICAnVElN
RU9VVCcsCisgICAgICAgICAgICAnSU1BR0UnLCAgICMgSW1hZ2UtZGlmZgorICAgICAgICAgICAg
J0FVRElPJywgICAjIEF1ZGlvLWRpZmYKKyAgICAgICAgICAgICdURVhUJywgICAgIyBUZXh0LWRp
ZmYKKyAgICAgICAgICAgICdGQUlMJywKKyAgICAgICAgICAgICdFUlJPUicsCisgICAgICAgICAg
ICAnV0FSTklORycsCisgICAgICAgICAgICAnUEFTUycsCisgICAgICAgIF0KKyAgICAgICAgQ1JB
U0gsIFRJTUVPVVQsIElNQUdFLCBBVURJTywgVEVYVCwgRkFJTCwgRVJST1IsIFdBUk5JTkcsIFBB
U1MgPSBPUkRFUgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfY29uZmlndXJh
dGlvbigKKyAgICAgICAgICAgIHBsYXRmb3JtPU5vbmUsCisgICAgICAgICAgICBpc19zaW11bGF0
b3I9RmFsc2UsCisgICAgICAgICAgICB2ZXJzaW9uPU5vbmUsCisgICAgICAgICAgICBhcmNoaXRl
Y3R1cmU9Tm9uZSwKKyAgICAgICAgICAgIHZlcnNpb25fbmFtZT1Ob25lLAorICAgICAgICAgICAg
bW9kZWw9Tm9uZSwKKyAgICAgICAgICAgIHN0eWxlPU5vbmUsICAgIyBEZWJ1Zy9Qcm9kdWN0aW9u
L1JlbGVhc2UKKyAgICAgICAgICAgIGZsYXZvcj1Ob25lLCAgIyBEdW1waW5nIGdyb3VuZCBzdWl0
ZS13aWRlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyAoaWUsIEd1YXJkTWFsbG9jKQorICAgICAgICAg
ICAgc2RrPU5vbmUsCisgICAgICAgICk6CisKKyAgICAgICAgIyBUaGlzIGRldmlhdGVzIHNsaWdo
dGx5IGZyb20gdGhlIHJlc3Qgb2Ygd2Via2l0cHksIGJ1dCBpdCBhbGxvd3MgdGhpcyBmaWxlIHRv
IGJlIGVudGlyZWx5IHBvcnRhYmxlLgorICAgICAgICBjb25maWcgPSBkaWN0KAorICAgICAgICAg
ICAgcGxhdGZvcm09cGxhdGZvcm0gb3IgKHBsYXRmb3JtXy5zeXN0ZW0oKSBpZiBwbGF0Zm9ybV8u
c3lzdGVtKCkgIT0gJ0RhcndpbicgZWxzZSAnbWFjJykubG93ZXIoKSwKKyAgICAgICAgICAgIGlz
X3NpbXVsYXRvcj1pc19zaW11bGF0b3IsCisgICAgICAgICAgICB2ZXJzaW9uPXZlcnNpb24gb3Ig
KHBsYXRmb3JtXy5yZWxlYXNlKCkgaWYgcGxhdGZvcm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVs
c2UgcGxhdGZvcm1fLm1hY192ZXIoKVswXSksCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9YXJj
aGl0ZWN0dXJlIG9yIHBsYXRmb3JtXy5tYWNoaW5lKCksCisgICAgICAgICkKKyAgICAgICAgZm9y
IGtleSwgdmFsdWUgaW4gY29uZmlnLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUg
aXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRl
ZmluZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24nLmZvcm1hdChrZXkpKQorICAgICAgICBmb3Iga2V5
LCB2YWx1ZSBpbiBkaWN0KHZlcnNpb25fbmFtZT12ZXJzaW9uX25hbWUsIG1vZGVsPW1vZGVsLCBz
dHlsZT1zdHlsZSwgZmxhdm9yPWZsYXZvciwgc2RrPXNkaykuaXRlcml0ZW1zKCk6CisgICAgICAg
ICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjb25maWdba2V5XSA9
IHZhbHVlCisgICAgICAgIHJldHVybiBjb25maWcKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgY3JlYXRlX2NvbW1pdChyZXBvc2l0b3J5X2lkPU5vbmUsIGlkPU5vbmUsIGJyYW5jaD1Ob25l
KToKKyAgICAgICAgY29tbWl0ID0gZGljdChyZXBvc2l0b3J5X2lkPXJlcG9zaXRvcnlfaWQsIGlk
PWlkKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBjb21taXQuaXRlcml0ZW1zKCk6CisgICAg
ICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ3t9IG11c3QgYmUgZGVmaW5lZCBpbiBhIGNvbW1pdCcuZm9ybWF0KGtleSkpCisgICAgICAg
IGlmIGJyYW5jaDoKKyAgICAgICAgICAgIGNvbW1pdFsnYnJhbmNoJ10gPSBicmFuY2gKKyAgICAg
ICAgcmV0dXJuIGNvbW1pdAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfZGV0
YWlscyhsaW5rPU5vbmUsIG9wdGlvbnM9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQg
PSBkaWN0KCoqa3dhcmdzKQorICAgICAgICBpZiBsaW5rOgorICAgICAgICAgICAgcmVzdWx0Wyds
aW5rJ10gPSBsaW5rCisKKyAgICAgICAgaWYgb3B0aW9uczoKKyAgICAgICAgICAgIGZvciBlbGVt
ZW50IGluIFVwbG9hZC5CVUlMREJPVF9ERVRBSUxTOgorICAgICAgICAgICAgICAgIHZhbHVlID0g
Z2V0YXR0cihvcHRpb25zLCBlbGVtZW50LnJlcGxhY2UoJy0nLCAnXycpLCBOb25lKQorICAgICAg
ICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXN1
bHRbZWxlbWVudF0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIGNyZWF0ZV9ydW5fc3RhdHMoc3RhcnRfdGltZT1Ob25lLCBlbmRfdGlt
ZT1Ob25lLCB0ZXN0c19za2lwcGVkPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc3RhdHMgPSBk
aWN0KCoqa3dhcmdzKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KHN0YXJ0X3RpbWU9
c3RhcnRfdGltZSwgZW5kX3RpbWU9ZW5kX3RpbWUsIHRlc3RzX3NraXBwZWQ9dGVzdHNfc2tpcHBl
ZCkuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICBzdGF0c1trZXldID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHN0YXRzCisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV90ZXN0X3Jlc3VsdChleHBlY3RlZD1Ob25l
LCBhY3R1YWw9Tm9uZSwgbG9nPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gZGlj
dCgqKmt3YXJncykKKworICAgICAgICAjIFRlc3RzIHdoaWNoIGRvbid0IGRlY2xhcmUgZXhwZWN0
YXRpb25zIG9yIHJlc3VsdHMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBwYXNzZWQuCisgICAgICAgIGZv
ciBrZXksIHZhbHVlIGluIGRpY3QoZXhwZWN0ZWQ9ZXhwZWN0ZWQsIGFjdHVhbD1hY3R1YWwsIGxv
Zz1sb2cpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3VpdGU9Tm9uZSwgY29uZmlndXJhdGlvbj1Ob25l
LCBjb21taXRzPVtdLCB0aW1lc3RhbXA9Tm9uZSwgZGV0YWlscz1Ob25lLCBydW5fc3RhdHM9Tm9u
ZSwgcmVzdWx0cz17fSk6CisgICAgICAgIHNlbGYuc3VpdGUgPSBzdWl0ZQorICAgICAgICBzZWxm
LmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuY29tbWl0cyA9IGNv
bW1pdHMKKyAgICAgICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAKKyAgICAgICAgc2VsZi5k
ZXRhaWxzID0gZGV0YWlscworICAgICAgICBzZWxmLnJ1bl9zdGF0cyA9IHJ1bl9zdGF0cworICAg
ICAgICBzZWxmLnJlc3VsdHMgPSByZXN1bHRzCisKKyAgICBjbGFzcyBFbmNvZGVyKGpzb24uSlNP
TkVuY29kZXIpOgorCisgICAgICAgIGRlZiBkZWZhdWx0KHNlbGYsIG9iaik6CisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKG9iaiwgVXBsb2FkKToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb2Jq
LnN1aXRlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBzdWl0ZSBz
cGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxvYWQnKQorICAgICAgICAgICAgICAgIGlmIG5vdCBvYmou
Y29tbWl0czoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm8gY29tbWl0
cyBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxvYWQnKQorCisgICAgICAgICAgICAgICAgZGV0YWls
cyA9IG9iai5kZXRhaWxzIG9yIG9iai5jcmVhdGVfZGV0YWlscygpCisgICAgICAgICAgICAgICAg
YnVpbGRib3RfYXJncyA9IFtkZXRhaWxzLmdldChhcmcsIE5vbmUpIGlzIE5vbmUgZm9yIGFyZyBp
biBvYmouQlVJTERCT1RfREVUQUlMU10KKyAgICAgICAgICAgICAgICBpZiBhbnkoYnVpbGRib3Rf
YXJncykgYW5kIG5vdCBhbGwoYnVpbGRib3RfYXJncyk6CisgICAgICAgICAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoJ0FsbCBidWlsZGJvdCBkZXRhaWxzIG11c3QgYmUgZGVmaW5lZCBmb3Ig
dXBsb2FkJykKKworICAgICAgICAgICAgICAgIGRlZiB1bnBhY2tfdGVzdChjdXJyZW50LCBwYXRo
X3RvX3Rlc3QsIGRhdGEpOgorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocGF0aF90b190ZXN0
KSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1d
ID0gZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAg
ICAgIGlmIG5vdCBjdXJyZW50LmdldChwYXRoX3RvX3Rlc3RbMF0pOgorICAgICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1dID0ge30KKyAgICAgICAgICAgICAgICAg
ICAgdW5wYWNrX3Rlc3QoY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1dLCBwYXRoX3RvX3Rlc3RbMTpd
LCBkYXRhKQorCisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHt9CisgICAgICAgICAgICAgICAg
Zm9yIHRlc3QsIGRhdGEgaW4gb2JqLnJlc3VsdHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAg
ICAgICAgIHVucGFja190ZXN0KHJlc3VsdHMsIHRlc3Quc3BsaXQoJy8nKSwgZGF0YSkKKworICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGRpY3QoCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb249
b2JqLlZFUlNJT04sCisgICAgICAgICAgICAgICAgICAgIHN1aXRlPW9iai5zdWl0ZSwKKyAgICAg
ICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbj1vYmouY29uZmlndXJhdGlvbiBvciBvYmouY3Jl
YXRlX2NvbmZpZ3VyYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0cz1vYmouY29t
bWl0cywKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzPWRpY3QoCisgICAgICAgICAg
ICAgICAgICAgICAgICBkZXRhaWxzPWRldGFpbHMsCisgICAgICAgICAgICAgICAgICAgICAgICBy
dW5fc3RhdHM9b2JqLnJ1bl9zdGF0cyBvciBvYmouY3JlYXRlX3J1bl9zdGF0cygpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0cz1yZXN1bHRzLAorICAgICAgICAgICAgICAgICAgICAp
LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBpZiBvYmoudGltZXN0YW1wOgor
ICAgICAgICAgICAgICAgICAgICByZXN1bHRbJ3RpbWVzdGFtcCddID0gb2JqLnRpbWVzdGFtcAor
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihV
cGxvYWQuRW5jb2Rlciwgc2VsZikuZGVmYXVsdChvYmopCisKKyAgICBkZWYgdXBsb2FkKHNlbGYs
IHVybCwgbG9nX2xpbmU9bGFtYmRhIHZhbDogc3lzLnN0ZG91dC53cml0ZSh2YWwgKyAnXG4nKSk6
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMucG9zdCh1cmwg
KyBzZWxmLlVQTE9BRF9FTkRQT0lOVCwgZGF0YT1qc29uLmR1bXBzKHNlbGYsIGNscz1VcGxvYWQu
RW5jb2RlcikpCisgICAgICAgIGV4Y2VwdCByZXF1ZXN0cy5leGNlcHRpb25zLkNvbm5lY3Rpb25F
cnJvcjoKKyAgICAgICAgICAgIGxvZ19saW5lKCcgJyAqIDQgKyAnRmFpbGVkIHRvIHVwbG9hZCB0
byB7fSwgcmVzdWx0cyBzZXJ2ZXIgbm90IG9ubGluZScuZm9ybWF0KHVybCkpCisgICAgICAgICAg
ICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAg
ICAgIGxvZ19saW5lKCcgJyAqIDQgKyAnRmFpbGVkIHRvIGVuY29kZSB1cGxvYWQgZGF0YToge30n
LmZvcm1hdChlKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHJlc3Bv
bnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAgICAgIGxvZ19saW5lKCcgJyAqIDQgKyAn
RXJyb3IgdXBsb2FkaW5nIHRvIHt9OicuZm9ybWF0KHVybCkpCisgICAgICAgICAgICBsb2dfbGlu
ZSgnICcgKiA4ICsgcmVzcG9uc2UuanNvbigpWydkZXNjcmlwdGlvbiddKQorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdVcGxvYWRlZCByZXN1
bHRzIHRvIHt9Jy5mb3JtYXQodXJsKSkKKyAgICAgICAgcmV0dXJuIFRydWUKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWRfdW5pdHRlc3QucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkobm9u
ZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0
ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE1IEBACisjIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9p
bnN0YWxsZWQucmVxdWVzdHMKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQganNvbgoraW1w
b3J0IG1vY2sKK2ltcG9ydCByZXF1ZXN0cworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAor
Citmcm9tIHdlYmtpdHB5LnJlc3VsdHMudXBsb2FkIGltcG9ydCBVcGxvYWQKKworCitjbGFzcyBV
cGxvYWRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGNsYXNzIE9wdGlvbnMob2JqZWN0
KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgICAgIGZv
ciBrZXksIHZhbHVlIGluIGt3YXJncy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRh
dHRyKHNlbGYsIGtleSwgdmFsdWUpCisKKyAgICBjbGFzcyBNb2NrUmVzcG9uc2Uob2JqZWN0KToK
KyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXR1c19jb2RlPTIwMCwgdGV4dD0nJyk6Cisg
ICAgICAgICAgICBzZWxmLnN0YXR1c19jb2RlID0gc3RhdHVzX2NvZGUKKyAgICAgICAgICAgIHNl
bGYudGV4dCA9IHRleHQKKworICAgICAgICBkZWYganNvbihzZWxmKToKKyAgICAgICAgICAgIHJl
dHVybiBqc29uLmxvYWRzKHNlbGYudGV4dCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
bm9ybWFsaXplKGRhdGEpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGEsIGJhc2VzdHJpbmcp
OgorICAgICAgICAgICAgcmV0dXJuIHN0cihkYXRhKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo
ZGF0YSwgY29sbGVjdGlvbnMuTWFwcGluZyk6CisgICAgICAgICAgICByZXR1cm4gZGljdChtYXAo
VXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEuaXRlcml0ZW1zKCkpKQorICAgICAgICBlbGlmIGlz
aW5zdGFuY2UoZGF0YSwgY29sbGVjdGlvbnMuSXRlcmFibGUpOgorICAgICAgICAgICAgcmV0dXJu
IHR5cGUoZGF0YSkobWFwKFVwbG9hZFRlc3Qubm9ybWFsaXplLCBkYXRhKSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZyhzZWxm
KToKKyAgICAgICAgc3RhcnRfdGltZSwgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKSAtIDMsIHRpbWUu
dGltZSgpCisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJr
aXRweS10ZXN0cycsCisgICAgICAgICAgICBjb25maWd1cmF0aW9uPVVwbG9hZC5jcmVhdGVfY29u
ZmlndXJhdGlvbigKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybT0nbWFjJywKKyAgICAgICAgICAg
ICAgICB2ZXJzaW9uPScxMC4xMy4wJywKKyAgICAgICAgICAgICAgICB2ZXJzaW9uX25hbWU9J0hp
Z2ggU2llcnJhJywKKyAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmU9J3g4Nl82NCcsCisgICAg
ICAgICAgICAgICAgc2RrPScxN0E0MDUnLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGRl
dGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRhaWxzKGxpbms9J2h0dHBzOi8vd2Via2l0Lm9yZycpLAor
ICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAg
ICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAg
ICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAgICAg
IHJ1bl9zdGF0cz1VcGxvYWQuY3JlYXRlX3J1bl9zdGF0cygKKyAgICAgICAgICAgICAgICBzdGFy
dF90aW1lPXN0YXJ0X3RpbWUsCisgICAgICAgICAgICAgICAgZW5kX3RpbWU9ZW5kX3RpbWUsCisg
ICAgICAgICAgICAgICAgdGVzdHNfc2tpcHBlZD0wLAorICAgICAgICAgICAgKSwKKyAgICAgICAg
ICAgIHJlc3VsdHM9eworICAgICAgICAgICAgICAgICd3ZWJraXRweS50ZXN0MSc6IHt9LAorICAg
ICAgICAgICAgICAgICd3ZWJraXRweS50ZXN0Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQo
ZXhwZWN0ZWQ9VXBsb2FkLkV4cGVjdGF0aW9ucy5QQVNTLCBhY3R1YWw9VXBsb2FkLkV4cGVjdGF0
aW9ucy5GQUlMKSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICkKKyAgICAgICAgZ2VuZXJhdGVk
X2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29uLmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9
VXBsb2FkLkVuY29kZXIpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9k
aWN0Wyd2ZXJzaW9uJ10sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2Rp
Y3RbJ3N1aXRlJ10sICd3ZWJraXRweS10ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Z2VuZXJhdGVkX2RpY3RbJ2NvbmZpZ3VyYXRpb24nXSwgc2VsZi5ub3JtYWxpemUoZGljdCgKKyAg
ICAgICAgICAgIHBsYXRmb3JtPSdtYWMnLAorICAgICAgICAgICAgaXNfc2ltdWxhdG9yPUZhbHNl
LAorICAgICAgICAgICAgdmVyc2lvbj0nMTAuMTMuMCcsCisgICAgICAgICAgICB2ZXJzaW9uX25h
bWU9J0hpZ2ggU2llcnJhJywKKyAgICAgICAgICAgIGFyY2hpdGVjdHVyZT0neDg2XzY0JywKKyAg
ICAgICAgICAgIHNkaz0nMTdBNDA1JywKKyAgICAgICAgKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ2NvbW1pdHMnXSwgW2RpY3QoCisgICAgICAgICAgICByZXBv
c2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgYnJh
bmNoPSd0cnVuaycsCisgICAgICAgICldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVy
YXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsnZGV0YWlscyddLCBzZWxmLm5vcm1hbGl6ZShkaWN0
KGxpbms9J2h0dHBzOi8vd2Via2l0Lm9yZycpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChn
ZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3J1bl9zdGF0cyddLCBzZWxmLm5vcm1hbGl6
ZShkaWN0KAorICAgICAgICAgICAgc3RhcnRfdGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAg
ZW5kX3RpbWU9ZW5kX3RpbWUsCisgICAgICAgICAgICB0ZXN0c19za2lwcGVkPTAsCisgICAgICAg
ICkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3Vs
dHMnXVsncmVzdWx0cyddLCBzZWxmLm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAnd2Via2l0cHku
dGVzdDEnOiB7fSwKKyAgICAgICAgICAgICd3ZWJraXRweS50ZXN0Mic6IFVwbG9hZC5jcmVhdGVf
dGVzdF9yZXN1bHQoZXhwZWN0ZWQ9VXBsb2FkLkV4cGVjdGF0aW9ucy5QQVNTLCBhY3R1YWw9VXBs
b2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAgICAgICAgfSkpCisKKyAgICBkZWYgdGVzdF91cGxv
YWQoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIHN1aXRlPSd3
ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1p
dCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAg
ICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAg
ICldLAorICAgICAgICApCisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdyZXF1ZXN0cy5wb3N0
JywgbmV3PWxhbWJkYSB1cmwsIGRhdGE6IHNlbGYuTW9ja1Jlc3BvbnNlKCkpOgorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKHVwbG9hZC51cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1
bHRzJywgbG9nX2xpbmU9bGFtYmRhIF86IE5vbmUpKQorCisgICAgICAgIGRlZiByYWlzZV9leGNl
cHRpb24odXJsLCBkYXRhKToKKyAgICAgICAgICAgIHJhaXNlIHJlcXVlc3RzLmV4Y2VwdGlvbnMu
Q29ubmVjdGlvbkVycm9yKCkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBv
c3QnLCBuZXc9cmFpc2VfZXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
dXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMnLCBsb2dfbGluZT1sYW1i
ZGEgXzogTm9uZSkpCisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdyZXF1ZXN0cy5wb3N0Jywg
bmV3PWxhbWJkYSB1cmwsIGRhdGE6IHNlbGYuTW9ja1Jlc3BvbnNlKAorICAgICAgICAgICAgc3Rh
dHVzX2NvZGU9NDA0LAorICAgICAgICAgICAgdGV4dD1qc29uLmR1bXBzKGRpY3QoZGVzY3JpcHRp
b249J05vIHN1Y2ggYWRkcmVzcycpKSwKKyAgICAgICAgKSk6CisgICAgICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKHVwbG9hZC51cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1bHRzJywgbG9n
X2xpbmU9bGFtYmRhIF86IE5vbmUpKQorCisgICAgZGVmIHRlc3RfcGFja2VkX3Rlc3Qoc2VsZik6
CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10
ZXN0cycsCisgICAgICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAg
ICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1
JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAg
ICAgICAgICAgcmVzdWx0cz17CisgICAgICAgICAgICAgICAgJ2RpcjEvc3ViLWRpcjEvdGVzdDEn
OiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLkZB
SUwpLAorICAgICAgICAgICAgICAgICdkaXIxL3N1Yi1kaXIxL3Rlc3QyJzogVXBsb2FkLmNyZWF0
ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAgICAg
ICAgICAgICAgICAnZGlyMS9zdWItZGlyMi90ZXN0Myc6IHt9LAorICAgICAgICAgICAgICAgICdk
aXIxL3N1Yi1kaXIyL3Rlc3Q0Jzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjIvc3ViLWRpcjMv
dGVzdDUnOiB7fSwKKyAgICAgICAgICAgICAgICAnZGlyMi90ZXN0Nic6IHt9LAorICAgICAgICAg
ICAgfQorICAgICAgICApCisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUo
anNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKSkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydyZXN1
bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICdkaXIxJzogeworICAgICAgICAg
ICAgICAgICdzdWItZGlyMSc6IHsKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3QxJzogeydhY3R1
YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLkZBSUx9LAorICAgICAgICAgICAgICAgICAgICAndGVz
dDInOiB7J2FjdHVhbCc6IFVwbG9hZC5FeHBlY3RhdGlvbnMuVElNRU9VVH0sCisgICAgICAgICAg
ICAgICAgfSwgJ3N1Yi1kaXIyJzogeworICAgICAgICAgICAgICAgICAgICAndGVzdDMnOiB7fSwK
KyAgICAgICAgICAgICAgICAgICAgJ3Rlc3Q0Jzoge30sCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSwgJ2RpcjInOiB7CisgICAgICAgICAgICAgICAgJ3N1Yi1kaXIzJzogeyd0ZXN0
NSc6IHt9fSwKKyAgICAgICAgICAgICAgICAndGVzdDYnOiB7fSwKKyAgICAgICAgICAgIH0sCisg
ICAgICAgIH0pKQorCisgICAgZGVmIHRlc3Rfbm9fc3VpdGUoc2VsZik6CisgICAgICAgIHVwbG9h
ZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAor
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAg
aWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0s
CisgICAgICAgICkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToK
KyAgICAgICAgICAgIGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAg
ICBkZWYgdGVzdF9ub19jb21taXRzKHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisg
ICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICApCisgICAgICAgIHdp
dGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBz
KHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQorCisgICAgZGVmIHRlc3RfYnVpbGRib3Qoc2Vs
Zik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRw
eS10ZXN0cycsCisgICAgICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAg
ICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlk
PSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAor
ICAgICAgICAgICAgZGV0YWlscz1VcGxvYWQuY3JlYXRlX2RldGFpbHMob3B0aW9ucz1zZWxmLk9w
dGlvbnMoCisgICAgICAgICAgICAgICAgYnVpbGRib3RfbWFzdGVyPSd3ZWJraXQub3JnJywKKyAg
ICAgICAgICAgICAgICBidWlsZGVyX25hbWU9J1F1ZXVlLTEnLAorICAgICAgICAgICAgICAgIGJ1
aWxkX251bWJlcj0xLAorICAgICAgICApKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNl
cyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2Fk
LkVuY29kZXIpCisKKyAgICAgICAgdXBsb2FkLmRldGFpbHNbJ2J1aWxkYm90LXdvcmtlciddID0g
J2JvdDEyMycKKyAgICAgICAgZ2VuZXJhdGVkX2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29uLmxv
YWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwg
c2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAgJ2J1aWxkYm90LW1hc3Rlcic6ICd3ZWJraXQu
b3JnJywKKyAgICAgICAgICAgICdidWlsZGVyLW5hbWUnOiAnUXVldWUtMScsCisgICAgICAgICAg
ICAnYnVpbGQtbnVtYmVyJzogMSwKKyAgICAgICAgICAgICdidWlsZGJvdC13b3JrZXInOiAnYm90
MTIzJywKKyAgICAgICAgfSkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9zY20vZ2l0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkJKHdvcmtpbmcgY29weSkK
QEAgLTI5MCw2ICsyOTAsMTQgQEAgY2xhc3MgR2l0KFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAg
ZGVmIG5hdGl2ZV9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3J1
bl9naXQoWyctQycsIHNlbGYuZmluZF9jaGVja291dF9yb290KHBhdGgpLCAnbG9nJywgJy0xJywg
Jy0tcHJldHR5PWZvcm1hdDolSCddKQogCisgICAgZGVmIG5hdGl2ZV9icmFuY2goc2VsZiwgcGF0
aCk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl9naXQoWyctQycsIHNlbGYuZmluZF9jaGVj
a291dF9yb290KHBhdGgpLCAncmV2LXBhcnNlJywgJy0tYWJicmV2LXJlZicsICdIRUFEJ10pLnJz
dHJpcCgpCisKKyAgICAgICAgIyBGb3IgZ2l0LXN2bgorICAgICAgICBpZiByZXN1bHQuc3RhcnRz
d2l0aCgnaGVhZHMnKToKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRbNjpdCisgICAgICAgIHJl
dHVybiByZXN1bHQKKwogICAgIGRlZiBzdm5fdXJsKHNlbGYpOgogICAgICAgICBnaXRfY29tbWFu
ZCA9IFsnc3ZuJywgJ2luZm8nXQogICAgICAgICBzdGF0dXMgPSBzZWxmLl9ydW5fZ2l0KGdpdF9j
b21tYW5kKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2Nt
L3NjbV9tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NoZWNrb3V0L3NjbS9zY21fbW9jay5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC04Nyw2ICs4Nyw5IEBAIGNsYXNzIE1vY2tTQ00ob2JqZWN0KToKICAgICBkZWYgbmF0
aXZlX3JldmlzaW9uKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5zdm5fcmV2aXNp
b24ocGF0aCkKIAorICAgIGRlZiBuYXRpdmVfYnJhbmNoKHNlbGYsIHBhdGgpOgorICAgICAgICBy
ZXR1cm4gJ3RydW5rJworCiAgICAgZGVmIHRpbWVzdGFtcF9vZl9yZXZpc2lvbihzZWxmLCBwYXRo
LCByZXZpc2lvbik6CiAgICAgICAgIHJldHVybiAnMjAxMy0wMi0wMSAwODo0ODowNSArMDAwMCcK
IApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91
bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC05MDksNiArOTA5LDkgQEAgRU5ECiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5zY20uaGVhZF9zdm5fcmV2aXNpb24oKSwgc2VsZi5zY20ubmF0aXZlX3JldmlzaW9u
KCcuJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20ubmF0aXZlX3JldmlzaW9u
KCcuJyksICc1JykKIAorICAgIGRlZiB0ZXN0X25hdGl2ZV9icmFuY2goc2VsZik6CisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20ubmF0aXZlX2JyYW5jaCgnLicpLCAndHJ1bmsnKQor
CiAgICAgZGVmIHRlc3RfcHJvcHNldF9wcm9wZ2V0KHNlbGYpOgogICAgICAgICBmaWxlcGF0aCA9
IG9zLnBhdGguam9pbihzZWxmLnN2bl9jaGVja291dF9wYXRoLCAidGVzdF9maWxlIikKICAgICAg
ICAgZXhwZWN0ZWRfbWltZV90eXBlID0gIngtYXBwbGljYXRpb24vZm9vLWJhciIKQEAgLTExMTIs
NiArMTExNSwxMCBAQCBjbGFzcyBHaXRUZXN0KFNDTVRlc3QpOgogICAgICAgICBjb21tYW5kID0g
WydnaXQnLCAnLUMnLCBzY20uY2hlY2tvdXRfcm9vdCwgJ3Jldi1wYXJzZScsICdIRUFEJ10KICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY20ubmF0aXZlX3JldmlzaW9uKHNjbS5jaGVja291dF9y
b290KSwgcnVuX2NvbW1hbmQoY29tbWFuZCkuc3RyaXAoKSkKIAorICAgIGRlZiB0ZXN0X25hdGl2
ZV9icmFuY2goc2VsZik6CisgICAgICAgIHNjbSA9IHNlbGYudHJhY2tpbmdfc2NtCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ21hc3RlcicsIHNjbS5uYXRpdmVfYnJhbmNoKHNjbS5jaGVja291
dF9yb290KSkKKwogICAgIGRlZiB0ZXN0X3JlbmFtZV9maWxlcyhzZWxmKToKICAgICAgICAgc2Nt
ID0gc2VsZi50cmFja2luZ19zY20KIApAQCAtMTYyNyw2ICsxNjM0LDkgQEAgY2xhc3MgR2l0U1ZO
VGVzdChTQ01UZXN0KToKICAgICAgICAgY29tbWFuZCA9IFsnZ2l0JywgJy1DJywgc2VsZi5naXRf
Y2hlY2tvdXRfcGF0aCwgJ3Jldi1wYXJzZScsICdIRUFEJ10KICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24oc2VsZi5naXRfY2hlY2tvdXRfcGF0aCksIHJ1
bl9jb21tYW5kKGNvbW1hbmQpLnN0cmlwKCkpCiAKKyAgICBkZWYgdGVzdF9uYXRpdmVfYnJhbmNo
KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd0cnVuaycsIHNlbGYuc2NtLm5hdGl2
ZV9icmFuY2goc2VsZi5naXRfY2hlY2tvdXRfcGF0aCkpCisKICAgICBkZWYgdGVzdF90b19vYmpl
Y3RfbmFtZShzZWxmKToKICAgICAgICAgcmVscGF0aCA9ICd0ZXN0X2ZpbGVfY29tbWl0MScKICAg
ICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbihzZWxmLmdpdF9j
aGVja291dF9wYXRoLCByZWxwYXRoKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weQkod29ya2luZyBj
b3B5KQpAQCAtODMsNyArODMsNyBAQCBjbGFzcyBTVk4oU0NNLCBTVk5SZXBvc2l0b3J5KToKICAg
ICAgICAgU0NNLl9faW5pdF9fKHNlbGYsIGN3ZCwgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX2Jv
Z3VzX2RpciA9IE5vbmUKICAgICAgICAgaWYgcGF0Y2hfZGlyZWN0b3JpZXMgPT0gW106Ci0gICAg
ICAgICAgICByYWlzZSBFeGNlcHRpb24obWVzc2FnZT0nRW1wdHkgbGlzdCBvZiBwYXRjaCBkaXJl
Y3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5pdF9fJykKKyAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbignRW1wdHkgbGlzdCBvZiBwYXRjaCBkaXJlY3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5p
dF9fJykKICAgICAgICAgZWxpZiBwYXRjaF9kaXJlY3RvcmllcyA9PSBOb25lOgogICAgICAgICAg
ICAgc2VsZi5fcGF0Y2hfZGlyZWN0b3JpZXMgPSBbc2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRoKGN3
ZCwgc2VsZi5jaGVja291dF9yb290KV0KICAgICAgICAgZWxzZToKQEAgLTI3OCw2ICsyNzgsMTQg
QEAgY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVmIG5hdGl2ZV9yZXZpc2lv
bihzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIHNlbGYuc3ZuX3JldmlzaW9uKHBhdGgpCiAK
KyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBwYXRoKToKKyAgICAgICAgcmVsYXRpdmVfdXJs
ID0gc2VsZi52YWx1ZV9mcm9tX3N2bl9pbmZvKHBhdGgsICdSZWxhdGl2ZSBVUkwnKVsyOl0KKyAg
ICAgICAgaWYgcmVsYXRpdmVfdXJsLnN0YXJ0c3dpdGgoJ3RydW5rJyk6CisgICAgICAgICAgICBy
ZXR1cm4gJ3RydW5rJworICAgICAgICBlbGlmIHJlbGF0aXZlX3VybC5zdGFydHN3aXRoKCdicmFu
Y2gnKToKKyAgICAgICAgICAgIHJldHVybiByZWxhdGl2ZV91cmwuc3BsaXQoJy8nKVsxXQorICAg
ICAgICByYWlzZSBFeGNlcHRpb24oJ3t9IGlzIG5vdCBhIGJyYW5jaCcuZm9ybWF0KHJlbGF0aXZl
X3VybC5zcGxpdCgnLycpWzBdKSkKKwogICAgIGRlZiB0aW1lc3RhbXBfb2ZfcmV2aXNpb24oc2Vs
ZiwgcGF0aCwgcmV2aXNpb24pOgogICAgICAgICAjIFdlIHVzZSAtLXhtbCB0byBnZXQgdGltZXN0
YW1wcyBsaWtlIDIwMTMtMDItMDhUMDg6MTg6MDQuOTY0NDA5WgogICAgICAgICByZXBvc2l0b3J5
X3Jvb3QgPSBzZWxmLnZhbHVlX2Zyb21fc3ZuX2luZm8oc2VsZi5jaGVja291dF9yb290LCAnUmVw
b3NpdG9yeSBSb290JykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wbGF0Zm9ybWluZm8ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQkod29ya2luZyBj
b3B5KQpAQCAtMTQ2LDYgKzE0NiwxMSBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAg
ICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcmV0dXJuIHN5cy5tYXhpbnQKIAorICAgIGRlZiBi
dWlsZF92ZXJzaW9uKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlzX21hYygpOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJy91c3IvYmluL3N3X3ZlcnMn
LCAnLWJ1aWxkVmVyc2lvbiddLCByZXR1cm5fc3RkZXJyPUZhbHNlLCBpZ25vcmVfZXJyb3JzPVRy
dWUpLnJzdHJpcCgpCisgICAgICAgIHJldHVybiBOb25lCisKICAgICBkZWYgeGNvZGVfc2RrX3Zl
cnNpb24oc2VsZiwgc2RrX25hbWUpOgogICAgICAgICBpZiBzZWxmLmlzX21hYygpOgogICAgICAg
ICAgICAgIyBBc3N1bWVzIHRoYXQgeGNydW4gZG9lcyBub3Qgd3JpdGUgdG8gc3RhbmRhcmQgb3V0
cHV0IG9uIGZhaWx1cmUgKGUuZy4gU0RLIGRvZXMgbm90IGV4aXN0KS4KSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZv
X21vY2sucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weQkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVfbWFwIGltCiAKIAogY2xh
c3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc19u
YW1lPSdtYWMnLCBvc192ZXJzaW9uPVZlcnNpb24uZnJvbV9uYW1lKCdTbm93IExlb3BhcmQnKSk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9zX25hbWU9J21hYycsIG9zX3ZlcnNpb249VmVyc2lv
bi5mcm9tX25hbWUoJ0hpZ2ggU2llcnJhJykpOgogICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShv
c192ZXJzaW9uLCBWZXJzaW9uKQogICAgICAgICBzZWxmLm9zX25hbWUgPSBvc19uYW1lCiAgICAg
ICAgIHNlbGYub3NfdmVyc2lvbiA9IG9zX3ZlcnNpb24KQEAgLTc4LDYgKzc4LDExIEBAIGNsYXNz
IE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICBkZWYgdGVybWluYWxfd2lkdGgoc2VsZik6
CiAgICAgICAgIHJldHVybiA4MAogCisgICAgZGVmIGJ1aWxkX3ZlcnNpb24oc2VsZik6CisgICAg
ICAgIGlmIHNlbGYuaXNfbWFjKCk6CisgICAgICAgICAgICByZXR1cm4gJzE3QTQwNScKKyAgICAg
ICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiB4Y29kZV9zZGtfdmVyc2lvbihzZWxmLCBzZGtfbmFt
ZSk6CiAgICAgICAgIHJldHVybiBWZXJzaW9uKDgsIDEpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTMgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3Rvcnkg
Zm9yIG1vZHVsZSBmaWxlcworCisjIEtlZXAgdGhpcyBmaWxlIGZyZWUgb2YgYW55IGNvZGUgb3Ig
aW1wb3J0IHN0YXRlbWVudHMgdGhhdCBjb3VsZAorIyBjYXVzZSBlaXRoZXIgYW4gZXJyb3IgdG8g
b2NjdXIgb3IgYSBsb2cgbWVzc2FnZSB0byBiZSBsb2dnZWQuCisjIFRoaXMgZW5zdXJlcyB0aGF0
IGNhbGxpbmcgY29kZSBjYW4gaW1wb3J0IGluaXRpYWxpemF0aW9uIGNvZGUgZnJvbQorIyB3ZWJr
aXRweSBiZWZvcmUgYW55IGVycm9ycyBvciBsb2cgbWVzc2FnZXMgZHVlIHRvIGNvZGUgaW4gdGhp
cyBmaWxlLgorIyBJbml0aWFsaXphdGlvbiBjb2RlIGNhbiBpbmNsdWRlIHRoaW5ncyBsaWtlIHZl
cnNpb24tY2hlY2tpbmcgY29kZSBhbmQKKyMgbG9nZ2luZyBjb25maWd1cmF0aW9uIGNvZGUuCisj
CisjIFdlIGRvIG5vdCBleGVjdXRlIGFueSB2ZXJzaW9uLWNoZWNraW5nIGNvZGUgb3IgbG9nZ2lu
ZyBjb25maWd1cmF0aW9uCisjIGNvZGUgaW4gdGhpcyBmaWxlIHNvIHRoYXQgY2FsbGVycyBjYW4g
b3B0LWluIGFzIHRoZXkgd2FudC4gIFRoaXMgYWxzbworIyBhbGxvd3MgZGlmZmVyZW50IGNhbGxl
cnMgdG8gY2hvb3NlIGRpZmZlcmVudCBpbml0aWFsaXphdGlvbiBjb2RlLAorIyBhcyBuZWNlc3Nh
cnkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkobm9u
ZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcHRwYXJzZQorCisKK2RlZiB1cGxvYWRfb3B0aW9ucygp
OgorICAgIHJldHVybiBbCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJlcG9ydCcs
IGFjdGlvbj0nYXBwZW5kJywgZGVzdD0ncmVwb3J0X3VybHMnLCBoZWxwPSdVUkwgKG9yIFVSTHMp
IHRvIHJlcG9ydCB0ZXN0IHJlc3VsdHMgdG8nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0tYnVpbGRib3QtbWFzdGVyJywgaGVscD0nVGhlIHVybCBvZiB0aGUgYnVpbGRib3QgbWFz
dGVyLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZGVyLW5hbWUnLCBo
ZWxwPSdUaGUgbmFtZSBvZiB0aGUgYnVpbGRib3QgYnVpbGRlciB0ZXN0cyB3ZXJlIHJ1biBvbi4n
KSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGQtbnVtYmVyJywgaGVscD0n
VGhlIGJ1aWxkYm90IGJ1aWxkIG51bWJlciB0ZXN0cyBhcmUgYXNzb2NpYXRlZCB3aXRoLicpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZGJvdC13b3JrZXInLCBoZWxwPSdU
aGUgYnVpbGRib3Qgd29ya2VyIHRlc3RzIHdlcmUgcnVuIG9uLicpLAorICAgIF0KSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQkobm9uZXhpc3RlbnQpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTg3IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2ltcG9ydCBqc29uCitpbXBvcnQgcmVxdWVzdHMKK2ltcG9ydCBzeXMKKworaW1wb3J0IHBsYXRm
b3JtIGFzIHBsYXRmb3JtXworCisKK2NsYXNzIFVwbG9hZChvYmplY3QpOgorICAgIFVQTE9BRF9F
TkRQT0lOVCA9ICcvYXBpL3VwbG9hZCcKKyAgICBCVUlMREJPVF9ERVRBSUxTID0gWydidWlsZGJv
dC1tYXN0ZXInLCAnYnVpbGRlci1uYW1lJywgJ2J1aWxkLW51bWJlcicsICdidWlsZGJvdC13b3Jr
ZXInXQorICAgIFZFUlNJT04gPSAwCisKKyAgICBjbGFzcyBFeHBlY3RhdGlvbnM6CisgICAgICAg
ICMgVGhlc2UgYXJlIG9yZGVyZWQgYnkgcHJpb3JpdHksIG1lYW5pbmcgdGhhdCBhIHRlc3Qgd2hp
Y2ggYm90aCBjcmFzaGVzIGFuZCBoYXMKKyAgICAgICAgIyBhIHdhcm5pbmcgc2hvdWxkIGJlIGNv
bnNpZGVyZWQgdG8gaGF2ZSBjcmFzaGVkLgorICAgICAgICBPUkRFUiA9IFsKKyAgICAgICAgICAg
ICdDUkFTSCcsCisgICAgICAgICAgICAnVElNRU9VVCcsCisgICAgICAgICAgICAnSU1BR0UnLCAg
ICMgSW1hZ2UtZGlmZgorICAgICAgICAgICAgJ0FVRElPJywgICAjIEF1ZGlvLWRpZmYKKyAgICAg
ICAgICAgICdURVhUJywgICAgIyBUZXh0LWRpZmYKKyAgICAgICAgICAgICdGQUlMJywKKyAgICAg
ICAgICAgICdFUlJPUicsCisgICAgICAgICAgICAnV0FSTklORycsCisgICAgICAgICAgICAnUEFT
UycsCisgICAgICAgIF0KKyAgICAgICAgQ1JBU0gsIFRJTUVPVVQsIElNQUdFLCBBVURJTywgVEVY
VCwgRkFJTCwgRVJST1IsIFdBUk5JTkcsIFBBU1MgPSBPUkRFUgorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBjcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgIHBsYXRmb3JtPU5v
bmUsCisgICAgICAgICAgICBpc19zaW11bGF0b3I9RmFsc2UsCisgICAgICAgICAgICB2ZXJzaW9u
PU5vbmUsCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9Tm9uZSwKKyAgICAgICAgICAgIHZlcnNp
b25fbmFtZT1Ob25lLAorICAgICAgICAgICAgbW9kZWw9Tm9uZSwKKyAgICAgICAgICAgIHN0eWxl
PU5vbmUsICAgIyBEZWJ1Zy9Qcm9kdWN0aW9uL1JlbGVhc2UKKyAgICAgICAgICAgIGZsYXZvcj1O
b25lLCAgIyBEdW1waW5nIGdyb3VuZCBzdWl0ZS13aWRlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyAo
aWUsIEd1YXJkTWFsbG9jKQorICAgICAgICAgICAgc2RrPU5vbmUsCisgICAgICAgICk6CisKKyAg
ICAgICAgIyBUaGlzIGRldmlhdGVzIHNsaWdodGx5IGZyb20gdGhlIHJlc3Qgb2Ygd2Via2l0cHks
IGJ1dCBpdCBhbGxvd3MgdGhpcyBmaWxlIHRvIGJlIGVudGlyZWx5IHBvcnRhYmxlLgorICAgICAg
ICBjb25maWcgPSBkaWN0KAorICAgICAgICAgICAgcGxhdGZvcm09cGxhdGZvcm0gb3IgKHBsYXRm
b3JtXy5zeXN0ZW0oKSBpZiBwbGF0Zm9ybV8uc3lzdGVtKCkgIT0gJ0RhcndpbicgZWxzZSAnbWFj
JykubG93ZXIoKSwKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1pc19zaW11bGF0b3IsCisgICAg
ICAgICAgICB2ZXJzaW9uPXZlcnNpb24gb3IgKHBsYXRmb3JtXy5yZWxlYXNlKCkgaWYgcGxhdGZv
cm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVsc2UgcGxhdGZvcm1fLm1hY192ZXIoKVswXSksCisg
ICAgICAgICAgICBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlIG9yIHBsYXRmb3JtXy5tYWNoaW5l
KCksCisgICAgICAgICkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gY29uZmlnLml0ZXJpdGVt
cygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24nLmZv
cm1hdChrZXkpKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KHZlcnNpb25fbmFtZT12
ZXJzaW9uX25hbWUsIG1vZGVsPW1vZGVsLCBzdHlsZT1zdHlsZSwgZmxhdm9yPWZsYXZvciwgc2Rr
PXNkaykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgICAgICBjb25maWdba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiBjb25maWcK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2NvbW1pdChyZXBvc2l0b3J5X2lk
PU5vbmUsIGlkPU5vbmUsIGJyYW5jaD1Ob25lKToKKyAgICAgICAgY29tbWl0ID0gZGljdChyZXBv
c2l0b3J5X2lkPXJlcG9zaXRvcnlfaWQsIGlkPWlkKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBp
biBjb21taXQuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAg
ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IG11c3QgYmUgZGVmaW5lZCBpbiBhIGNv
bW1pdCcuZm9ybWF0KGtleSkpCisgICAgICAgIGlmIGJyYW5jaDoKKyAgICAgICAgICAgIGNvbW1p
dFsnYnJhbmNoJ10gPSBicmFuY2gKKyAgICAgICAgcmV0dXJuIGNvbW1pdAorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBjcmVhdGVfZGV0YWlscyhsaW5rPU5vbmUsIG9wdGlvbnM9Tm9uZSwg
Kiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCoqa3dhcmdzKQorICAgICAgICBpZiBs
aW5rOgorICAgICAgICAgICAgcmVzdWx0WydsaW5rJ10gPSBsaW5rCisKKyAgICAgICAgaWYgb3B0
aW9uczoKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIFVwbG9hZC5CVUlMREJPVF9ERVRBSUxT
OgorICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihvcHRpb25zLCBlbGVtZW50LnJlcGxh
Y2UoJy0nLCAnXycpLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbZWxlbWVudF0gPSB2YWx1ZQorICAgICAgICBy
ZXR1cm4gcmVzdWx0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9ydW5fc3Rh
dHMoc3RhcnRfdGltZT1Ob25lLCBlbmRfdGltZT1Ob25lLCB0ZXN0c19za2lwcGVkPU5vbmUsICoq
a3dhcmdzKToKKyAgICAgICAgc3RhdHMgPSBkaWN0KCoqa3dhcmdzKQorICAgICAgICBmb3Iga2V5
LCB2YWx1ZSBpbiBkaWN0KHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwgZW5kX3RpbWU9ZW5kX3RpbWUs
IHRlc3RzX3NraXBwZWQ9dGVzdHNfc2tpcHBlZCkuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBp
ZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzdGF0c1trZXldID0gdmFsdWUK
KyAgICAgICAgcmV0dXJuIHN0YXRzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0
ZV90ZXN0X3Jlc3VsdChleHBlY3RlZD1Ob25lLCBhY3R1YWw9Tm9uZSwgbG9nPU5vbmUsICoqa3dh
cmdzKToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgqKmt3YXJncykKKworICAgICAgICAjIFRlc3Rz
IHdoaWNoIGRvbid0IGRlY2xhcmUgZXhwZWN0YXRpb25zIG9yIHJlc3VsdHMgYXJlIGFzc3VtZWQg
dG8gaGF2ZSBwYXNzZWQuCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRpY3QoZXhwZWN0ZWQ9
ZXhwZWN0ZWQsIGFjdHVhbD1hY3R1YWwsIGxvZz1sb2cpLml0ZXJpdGVtcygpOgorICAgICAgICAg
ICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2
YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3Vp
dGU9Tm9uZSwgY29uZmlndXJhdGlvbj1Ob25lLCBjb21taXRzPVtdLCB0aW1lc3RhbXA9Tm9uZSwg
ZGV0YWlscz1Ob25lLCBydW5fc3RhdHM9Tm9uZSwgcmVzdWx0cz17fSk6CisgICAgICAgIHNlbGYu
c3VpdGUgPSBzdWl0ZQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9u
CisgICAgICAgIHNlbGYuY29tbWl0cyA9IGNvbW1pdHMKKyAgICAgICAgc2VsZi50aW1lc3RhbXAg
PSB0aW1lc3RhbXAKKyAgICAgICAgc2VsZi5kZXRhaWxzID0gZGV0YWlscworICAgICAgICBzZWxm
LnJ1bl9zdGF0cyA9IHJ1bl9zdGF0cworICAgICAgICBzZWxmLnJlc3VsdHMgPSByZXN1bHRzCisK
KyAgICBjbGFzcyBFbmNvZGVyKGpzb24uSlNPTkVuY29kZXIpOgorCisgICAgICAgIGRlZiBkZWZh
dWx0KHNlbGYsIG9iaik6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgVXBsb2FkKToK
KyAgICAgICAgICAgICAgICBpZiBub3Qgb2JqLnN1aXRlOgorICAgICAgICAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCdObyBzdWl0ZSBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxvYWQnKQor
ICAgICAgICAgICAgICAgIGlmIG5vdCBvYmouY29tbWl0czoKKyAgICAgICAgICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcignTm8gY29tbWl0cyBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxvYWQn
KQorCisgICAgICAgICAgICAgICAgZGV0YWlscyA9IG9iai5kZXRhaWxzIG9yIG9iai5jcmVhdGVf
ZGV0YWlscygpCisgICAgICAgICAgICAgICAgYnVpbGRib3RfYXJncyA9IFtkZXRhaWxzLmdldChh
cmcsIE5vbmUpIGlzIE5vbmUgZm9yIGFyZyBpbiBvYmouQlVJTERCT1RfREVUQUlMU10KKyAgICAg
ICAgICAgICAgICBpZiBhbnkoYnVpbGRib3RfYXJncykgYW5kIG5vdCBhbGwoYnVpbGRib3RfYXJn
cyk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0FsbCBidWlsZGJvdCBk
ZXRhaWxzIG11c3QgYmUgZGVmaW5lZCBmb3IgdXBsb2FkJykKKworICAgICAgICAgICAgICAgIGRl
ZiB1bnBhY2tfdGVzdChjdXJyZW50LCBwYXRoX3RvX3Rlc3QsIGRhdGEpOgorICAgICAgICAgICAg
ICAgICAgICBpZiBsZW4ocGF0aF90b190ZXN0KSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1dID0gZGF0YQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjdXJyZW50LmdldChwYXRoX3Rv
X3Rlc3RbMF0pOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFtwYXRoX3RvX3Rlc3Rb
MF1dID0ge30KKyAgICAgICAgICAgICAgICAgICAgdW5wYWNrX3Rlc3QoY3VycmVudFtwYXRoX3Rv
X3Rlc3RbMF1dLCBwYXRoX3RvX3Rlc3RbMTpdLCBkYXRhKQorCisgICAgICAgICAgICAgICAgcmVz
dWx0cyA9IHt9CisgICAgICAgICAgICAgICAgZm9yIHRlc3QsIGRhdGEgaW4gb2JqLnJlc3VsdHMu
aXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHVucGFja190ZXN0KHJlc3VsdHMsIHRl
c3Quc3BsaXQoJy8nKSwgZGF0YSkKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRpY3QoCisg
ICAgICAgICAgICAgICAgICAgIHZlcnNpb249b2JqLlZFUlNJT04sCisgICAgICAgICAgICAgICAg
ICAgIHN1aXRlPW9iai5zdWl0ZSwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbj1v
YmouY29uZmlndXJhdGlvbiBvciBvYmouY3JlYXRlX2NvbmZpZ3VyYXRpb24oKSwKKyAgICAgICAg
ICAgICAgICAgICAgY29tbWl0cz1vYmouY29tbWl0cywKKyAgICAgICAgICAgICAgICAgICAgdGVz
dF9yZXN1bHRzPWRpY3QoCisgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzPWRldGFpbHMs
CisgICAgICAgICAgICAgICAgICAgICAgICBydW5fc3RhdHM9b2JqLnJ1bl9zdGF0cyBvciBvYmou
Y3JlYXRlX3J1bl9zdGF0cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cz1yZXN1
bHRzLAorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAg
ICAgICAgICBpZiBvYmoudGltZXN0YW1wOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbJ3Rp
bWVzdGFtcCddID0gb2JqLnRpbWVzdGFtcAorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQK
KyAgICAgICAgICAgIHJldHVybiBzdXBlcihVcGxvYWQuRW5jb2Rlciwgc2VsZikuZGVmYXVsdChv
YmopCisKKyAgICBkZWYgdXBsb2FkKHNlbGYsIHVybCwgbG9nX2xpbmU9bGFtYmRhIHZhbDogc3lz
LnN0ZG91dC53cml0ZSh2YWwgKyAnXG4nKSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJl
c3BvbnNlID0gcmVxdWVzdHMucG9zdCh1cmwgKyBzZWxmLlVQTE9BRF9FTkRQT0lOVCwgZGF0YT1q
c29uLmR1bXBzKHNlbGYsIGNscz1VcGxvYWQuRW5jb2RlcikpCisgICAgICAgIGV4Y2VwdCByZXF1
ZXN0cy5leGNlcHRpb25zLkNvbm5lY3Rpb25FcnJvcjoKKyAgICAgICAgICAgIGxvZ19saW5lKCcg
JyAqIDQgKyAnRmFpbGVkIHRvIHVwbG9hZCB0byB7fSwgcmVzdWx0cyBzZXJ2ZXIgbm90IG9ubGlu
ZScuZm9ybWF0KHVybCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhjZXB0
IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGxvZ19saW5lKCcgJyAqIDQgKyAnRmFpbGVk
IHRvIGVuY29kZSB1cGxvYWQgZGF0YToge30nLmZvcm1hdChlKSkKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAg
ICAgICAgIGxvZ19saW5lKCcgJyAqIDQgKyAnRXJyb3IgdXBsb2FkaW5nIHRvIHt9OicuZm9ybWF0
KHVybCkpCisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA4ICsgcmVzcG9uc2UuanNvbigpWydk
ZXNjcmlwdGlvbiddKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgbG9nX2xp
bmUoJyAnICogNCArICdVcGxvYWRlZCByZXN1bHRzIHRvIHt9Jy5mb3JtYXQodXJsKSkKKyAgICAg
ICAgcmV0dXJuIFRydWUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxv
YWRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1
bHRzL3VwbG9hZF91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjE1IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9y
dCB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQucmVxdWVzdHMKKworaW1wb3J0IGNv
bGxlY3Rpb25zCitpbXBvcnQganNvbgoraW1wb3J0IG1vY2sKK2ltcG9ydCByZXF1ZXN0cworaW1w
b3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LnJlc3VsdHMudXBsb2Fk
IGltcG9ydCBVcGxvYWQKKworCitjbGFzcyBVcGxvYWRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
KworICAgIGNsYXNzIE9wdGlvbnMob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYs
ICoqa3dhcmdzKToKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGt3YXJncy5pdGVyaXRl
bXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsdWUpCisKKyAgICBj
bGFzcyBNb2NrUmVzcG9uc2Uob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0
YXR1c19jb2RlPTIwMCwgdGV4dD0nJyk6CisgICAgICAgICAgICBzZWxmLnN0YXR1c19jb2RlID0g
c3RhdHVzX2NvZGUKKyAgICAgICAgICAgIHNlbGYudGV4dCA9IHRleHQKKworICAgICAgICBkZWYg
anNvbihzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHNlbGYudGV4dCkKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbm9ybWFsaXplKGRhdGEpOgorICAgICAgICBpZiBp
c2luc3RhbmNlKGRhdGEsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmV0dXJuIHN0cihkYXRh
KQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YSwgY29sbGVjdGlvbnMuTWFwcGluZyk6Cisg
ICAgICAgICAgICByZXR1cm4gZGljdChtYXAoVXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEuaXRl
cml0ZW1zKCkpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YSwgY29sbGVjdGlvbnMuSXRl
cmFibGUpOgorICAgICAgICAgICAgcmV0dXJuIHR5cGUoZGF0YSkobWFwKFVwbG9hZFRlc3Qubm9y
bWFsaXplLCBkYXRhKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisK
KyAgICBkZWYgdGVzdF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc3RhcnRfdGltZSwgZW5kX3Rp
bWUgPSB0aW1lLnRpbWUoKSAtIDMsIHRpbWUudGltZSgpCisgICAgICAgIHVwbG9hZCA9IFVwbG9h
ZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb25m
aWd1cmF0aW9uPVVwbG9hZC5jcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgICAgICBw
bGF0Zm9ybT0nbWFjJywKKyAgICAgICAgICAgICAgICB2ZXJzaW9uPScxMC4xMy4wJywKKyAgICAg
ICAgICAgICAgICB2ZXJzaW9uX25hbWU9J0hpZ2ggU2llcnJhJywKKyAgICAgICAgICAgICAgICBh
cmNoaXRlY3R1cmU9J3g4Nl82NCcsCisgICAgICAgICAgICAgICAgc2RrPScxN0E0MDUnLAorICAg
ICAgICAgICAgKSwKKyAgICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRhaWxzKGxp
bms9J2h0dHBzOi8vd2Via2l0Lm9yZycpLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNy
ZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAg
ICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisg
ICAgICAgICAgICApXSwKKyAgICAgICAgICAgIHJ1bl9zdGF0cz1VcGxvYWQuY3JlYXRlX3J1bl9z
dGF0cygKKyAgICAgICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAgICAgICAg
ICAgICAgZW5kX3RpbWU9ZW5kX3RpbWUsCisgICAgICAgICAgICAgICAgdGVzdHNfc2tpcHBlZD0w
LAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIHJlc3VsdHM9eworICAgICAgICAgICAgICAg
ICd3ZWJraXRweS50ZXN0MSc6IHt9LAorICAgICAgICAgICAgICAgICd3ZWJraXRweS50ZXN0Mic6
IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoZXhwZWN0ZWQ9VXBsb2FkLkV4cGVjdGF0aW9ucy5Q
QVNTLCBhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAgICAgICAgICAgIH0sCisg
ICAgICAgICkKKyAgICAgICAgZ2VuZXJhdGVkX2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29uLmxv
YWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpKSkKKworICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd2ZXJzaW9uJ10sIDApCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3N1aXRlJ10sICd3ZWJraXRweS10ZXN0cycp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ2NvbmZpZ3VyYXRpb24n
XSwgc2VsZi5ub3JtYWxpemUoZGljdCgKKyAgICAgICAgICAgIHBsYXRmb3JtPSdtYWMnLAorICAg
ICAgICAgICAgaXNfc2ltdWxhdG9yPUZhbHNlLAorICAgICAgICAgICAgdmVyc2lvbj0nMTAuMTMu
MCcsCisgICAgICAgICAgICB2ZXJzaW9uX25hbWU9J0hpZ2ggU2llcnJhJywKKyAgICAgICAgICAg
IGFyY2hpdGVjdHVyZT0neDg2XzY0JywKKyAgICAgICAgICAgIHNkaz0nMTdBNDA1JywKKyAgICAg
ICAgKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ2NvbW1pdHMn
XSwgW2RpY3QoCisgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAg
ICAgaWQ9JzUnLAorICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICldKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsnZGV0
YWlscyddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KGxpbms9J2h0dHBzOi8vd2Via2l0Lm9yZycpKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11b
J3J1bl9zdGF0cyddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KAorICAgICAgICAgICAgc3RhcnRfdGlt
ZT1zdGFydF90aW1lLAorICAgICAgICAgICAgZW5kX3RpbWU9ZW5kX3RpbWUsCisgICAgICAgICAg
ICB0ZXN0c19za2lwcGVkPTAsCisgICAgICAgICkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncmVzdWx0cyddLCBzZWxmLm5vcm1hbGl6
ZSh7CisgICAgICAgICAgICAnd2Via2l0cHkudGVzdDEnOiB7fSwKKyAgICAgICAgICAgICd3ZWJr
aXRweS50ZXN0Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoZXhwZWN0ZWQ9VXBsb2FkLkV4
cGVjdGF0aW9ucy5QQVNTLCBhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAgICAg
ICAgfSkpCisKKyAgICBkZWYgdGVzdF91cGxvYWQoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVw
bG9hZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBj
b21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5
X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBi
cmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICApCisKKyAgICAgICAgd2l0
aCBtb2NrLnBhdGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PWxhbWJkYSB1cmwsIGRhdGE6IHNlbGYu
TW9ja1Jlc3BvbnNlKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVwbG9hZC51cGxv
YWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1bHRzJywgbG9nX2xpbmU9bGFtYmRhIF86IE5vbmUp
KQorCisgICAgICAgIGRlZiByYWlzZV9leGNlcHRpb24odXJsLCBkYXRhKToKKyAgICAgICAgICAg
IHJhaXNlIHJlcXVlc3RzLmV4Y2VwdGlvbnMuQ29ubmVjdGlvbkVycm9yKCkKKworICAgICAgICB3
aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBuZXc9cmFpc2VfZXhjZXB0aW9uKToKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQu
b3JnL3Jlc3VsdHMnLCBsb2dfbGluZT1sYW1iZGEgXzogTm9uZSkpCisKKyAgICAgICAgd2l0aCBt
b2NrLnBhdGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PWxhbWJkYSB1cmwsIGRhdGE6IHNlbGYuTW9j
a1Jlc3BvbnNlKAorICAgICAgICAgICAgc3RhdHVzX2NvZGU9NDA0LAorICAgICAgICAgICAgdGV4
dD1qc29uLmR1bXBzKGRpY3QoZGVzY3JpcHRpb249J05vIHN1Y2ggYWRkcmVzcycpKSwKKyAgICAg
ICAgKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHVwbG9hZC51cGxvYWQoJ2h0dHBz
Oi8vd2Via2l0Lm9yZy9yZXN1bHRzJywgbG9nX2xpbmU9bGFtYmRhIF86IE5vbmUpKQorCisgICAg
ZGVmIHRlc3RfcGFja2VkX3Rlc3Qoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAg
ICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb21taXRzPVtV
cGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJr
aXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3Ry
dW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgcmVzdWx0cz17CisgICAgICAgICAg
ICAgICAgJ2RpcjEvc3ViLWRpcjEvdGVzdDEnOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFj
dHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICAgICAgICAgICdkaXIxL3N1
Yi1kaXIxL3Rlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4
cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMi90ZXN0
Myc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIxL3N1Yi1kaXIyL3Rlc3Q0Jzoge30sCisgICAg
ICAgICAgICAgICAgJ2RpcjIvc3ViLWRpcjMvdGVzdDUnOiB7fSwKKyAgICAgICAgICAgICAgICAn
ZGlyMi90ZXN0Nic6IHt9LAorICAgICAgICAgICAgfQorICAgICAgICApCisgICAgICAgIGdlbmVy
YXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwg
Y2xzPVVwbG9hZC5FbmNvZGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVk
X2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydyZXN1bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAg
ICAgICAgICdkaXIxJzogeworICAgICAgICAgICAgICAgICdzdWItZGlyMSc6IHsKKyAgICAgICAg
ICAgICAgICAgICAgJ3Rlc3QxJzogeydhY3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLkZBSUx9
LAorICAgICAgICAgICAgICAgICAgICAndGVzdDInOiB7J2FjdHVhbCc6IFVwbG9hZC5FeHBlY3Rh
dGlvbnMuVElNRU9VVH0sCisgICAgICAgICAgICAgICAgfSwgJ3N1Yi1kaXIyJzogeworICAgICAg
ICAgICAgICAgICAgICAndGVzdDMnOiB7fSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3Q0Jzog
e30sCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgJ2RpcjInOiB7CisgICAgICAg
ICAgICAgICAgJ3N1Yi1kaXIzJzogeyd0ZXN0NSc6IHt9fSwKKyAgICAgICAgICAgICAgICAndGVz
dDYnOiB7fSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0pKQorCisgICAgZGVmIHRlc3Rfbm9f
c3VpdGUoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIGNvbW1p
dHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9
J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5j
aD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICkKKyAgICAgICAgd2l0aCBzZWxm
LmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBsb2Fk
LCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICBkZWYgdGVzdF9ub19jb21taXRzKHNlbGYpOgor
ICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVz
dHMnLAorICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
cik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQor
CisgICAgZGVmIHRlc3RfYnVpbGRib3Qoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgK
KyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb21taXRz
PVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3
ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9
J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgZGV0YWlscz1VcGxvYWQuY3Jl
YXRlX2RldGFpbHMob3B0aW9ucz1zZWxmLk9wdGlvbnMoCisgICAgICAgICAgICAgICAgYnVpbGRi
b3RfbWFzdGVyPSd3ZWJraXQub3JnJywKKyAgICAgICAgICAgICAgICBidWlsZGVyX25hbWU9J1F1
ZXVlLTEnLAorICAgICAgICAgICAgICAgIGJ1aWxkX251bWJlcj0xLAorICAgICAgICApKSkKKyAg
ICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpz
b24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICAgICAgdXBsb2FkLmRl
dGFpbHNbJ2J1aWxkYm90LXdvcmtlciddID0gJ2JvdDEyMycKKyAgICAgICAgZ2VuZXJhdGVkX2Rp
Y3QgPSBzZWxmLm5vcm1hbGl6ZShqc29uLmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBs
b2FkLkVuY29kZXIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsn
dGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAg
J2J1aWxkYm90LW1hc3Rlcic6ICd3ZWJraXQub3JnJywKKyAgICAgICAgICAgICdidWlsZGVyLW5h
bWUnOiAnUXVldWUtMScsCisgICAgICAgICAgICAnYnVpbGQtbnVtYmVyJzogMSwKKyAgICAgICAg
ICAgICdidWlsZGJvdC13b3JrZXInOiAnYm90MTIzJywKKyAgICAgICAgfSkpCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAjIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4KICMgQ29weXJpZ2h0IChDKSAyMDEw
IENocmlzIEplcmRvbmVrIChjamVyZG9uZWtAd2Via2l0Lm9yZykKLSMgQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE4
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zOCwxNyArMzgsMTkgQEAgaW1wb3J0IHRyYWNlYmFjawogaW1wb3J0IHVu
aXR0ZXN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5sb2d1dGlscyBpbXBvcnQgY29u
ZmlndXJlX2xvZ2dpbmcKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1w
b3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5l
eGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
ZmlsZXN5c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3Qg
aW1wb3J0IEhvc3QKIGZyb20gd2Via2l0cHkucG9ydC5jb25maWcgaW1wb3J0IENvbmZpZwogZnJv
bSB3ZWJraXRweS50ZXN0LmZpbmRlciBpbXBvcnQgRmluZGVyCiBmcm9tIHdlYmtpdHB5LnRlc3Qu
cHJpbnRlciBpbXBvcnQgUHJpbnRlcgogZnJvbSB3ZWJraXRweS50ZXN0LnJ1bm5lciBpbXBvcnQg
UnVubmVyLCB1bml0X3Rlc3RfbmFtZQorZnJvbSB3ZWJraXRweS5yZXN1bHRzLnVwbG9hZCBpbXBv
cnQgVXBsb2FkCitmcm9tIHdlYmtpdHB5LnJlc3VsdHMub3B0aW9ucyBpbXBvcnQgdXBsb2FkX29w
dGlvbnMKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCi1faG9zdCA9IFN5
c3RlbUhvc3QoKQorX2hvc3QgPSBIb3N0KCkKIF93ZWJraXRfcm9vdCA9IE5vbmUKIAogCkBAIC0x
MjQsMTIgKzEyNiwxNSBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgcGFyc2VyID0g
b3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPSd1c2FnZTogJXByb2cgW29wdGlvbnNdIFthcmdz
Li4uXScpCiAKICAgICAgICAgIyAgQ29uZmlndXJhdGlvbiBvcHRpb25zIG9ubHkgZWZmZWN0IHRo
ZSBidWlsZGluZyBvZiBsbGRiV2ViS2l0VGVzdGVyLgotICAgICAgICBjb25maWd1cmF0aW9uX2dy
b3VwID0gb3B0cGFyc2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnQ29uZmlndXJhdGlvbiBvcHRpb25z
JykKLSAgICAgICAgY29uZmlndXJhdGlvbl9ncm91cC5hZGRfb3B0aW9uKCctLWRlYnVnJywgYWN0
aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdEZWJ1ZycsIGRlc3Q9ImNvbmZpZ3VyYXRpb24iLAot
ICAgICAgICAgICAgaGVscD0nU2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIERlYnVnJykKLSAgICAg
ICAgY29uZmlndXJhdGlvbl9ncm91cC5hZGRfb3B0aW9uKCctLXJlbGVhc2UnLCBhY3Rpb249J3N0
b3JlX2NvbnN0JywgY29uc3Q9J1JlbGVhc2UnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKLSAgICAg
ICAgICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBSZWxlYXNlJykKLSAgICAgICAg
cGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAoY29uZmlndXJhdGlvbl9ncm91cCkKKyAgICAgICAgZm9y
IGdyb3VwX25hbWUsIGdyb3VwX29wdGlvbnMgaW4geydVcGxvYWQgT3B0aW9ucyc6IHVwbG9hZF9v
cHRpb25zKCksICdDb25maWd1cmF0aW9uIE9wdGlvbnMnOiBbCisgICAgICAgICAgICBvcHRwYXJz
ZS5tYWtlX29wdGlvbignLS1kZWJ1ZycsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nRGVi
dWcnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBEZWJ1ZycpLAorICAgICAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcmVsZWFzZScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBj
b25zdD0nUmVsZWFzZScsIGRlc3Q9ImNvbmZpZ3VyYXRpb24iLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0nU2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIFJlbGVhc2UnKSwK
KyAgICAgICAgXX0uaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBvcHRpb25fZ3JvdXAgPSBvcHRw
YXJzZS5PcHRpb25Hcm91cChwYXJzZXIsIGdyb3VwX25hbWUpCisgICAgICAgICAgICBvcHRpb25f
Z3JvdXAuYWRkX29wdGlvbnMoZ3JvdXBfb3B0aW9ucykKKyAgICAgICAgICAgIHBhcnNlci5hZGRf
b3B0aW9uX2dyb3VwKG9wdGlvbl9ncm91cCkKIAogICAgICAgICBwYXJzZXIuYWRkX29wdGlvbign
LWEnLCAnLS1hbGwnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gYWxsIHRoZSB0ZXN0cycpCkBAIC0xODEsMTEg
KzE4NiwxMiBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgZnJvbSB3ZWJraXRweS50
aGlyZHBhcnR5IGltcG9ydCBhdXRvaW5zdGFsbF9ldmVyeXRoaW5nCiAgICAgICAgIGF1dG9pbnN0
YWxsX2V2ZXJ5dGhpbmcoKQogCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAg
ICAgICBjb25maWcgPSBDb25maWcoX2hvc3QuZXhlY3V0aXZlLCBzZWxmLmZpbmRlci5maWxlc3lz
dGVtKQorICAgICAgICBjb25maWd1cmF0aW9uX3RvX3VzZSA9IHNlbGYuX29wdGlvbnMuY29uZmln
dXJhdGlvbiBvciBjb25maWcuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkKICAgICAgICAgaWYgd2ls
bF9ydW5fbGxkYl93ZWJraXRfdGVzdHM6CiAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVf
dXBkYXRlKCdCdWlsZGluZyBsbGRiV2ViS2l0VGVzdGVyIC4uLicpCiAgICAgICAgICAgICBidWls
ZF9sbGRid2Via2l0dGVzdGVyID0gc2VsZi5maW5kZXIuZmlsZXN5c3RlbS5qb2luKF93ZWJraXRf
cm9vdCwgJ1Rvb2xzJywgJ1NjcmlwdHMnLCAnYnVpbGQtbGxkYndlYmtpdHRlc3RlcicpCi0gICAg
ICAgICAgICBjb25maWcgPSBDb25maWcoX2hvc3QuZXhlY3V0aXZlLCBzZWxmLmZpbmRlci5maWxl
c3lzdGVtKQotICAgICAgICAgICAgY29uZmlndXJhdGlvbl90b191c2UgPSBzZWxmLl9vcHRpb25z
LmNvbmZpZ3VyYXRpb24gb3IgY29uZmlnLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAgICAgICAg
ICAgICB0cnk6CiAgICAgICAgICAgICAgICAgX2hvc3QuZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3df
aWZfZmFpbChbYnVpbGRfbGxkYndlYmtpdHRlc3RlciwgY29uZmlnLmZsYWdfZm9yX2NvbmZpZ3Vy
YXRpb24oY29uZmlndXJhdGlvbl90b191c2UpXSwgcXVpZXQ9KG5vdCBib29sKHNlbGYuX29wdGlv
bnMudmVyYm9zZSkpKQogICAgICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yIGFzIGU6CkBAIC0y
MTgsNiArMjI0LDcgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIHRlc3RfcnVubmVy
ID0gUnVubmVyKHNlbGYucHJpbnRlciwgbG9hZGVyKQogICAgICAgICB0ZXN0X3J1bm5lci5ydW4o
cGFyYWxsZWxfdGVzdHMsIHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQogICAgICAgICB0
ZXN0X3J1bm5lci5ydW4oc2VyaWFsX3Rlc3RzLCAxKQorICAgICAgICBlbmRfdGltZSA9IHRpbWUu
dGltZSgpCiAKICAgICAgICAgc2VsZi5wcmludGVyLnByaW50X3Jlc3VsdCh0aW1lLnRpbWUoKSAt
IHN0YXJ0KQogCkBAIC0yMzIsOSArMjM5LDUwIEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdlOgogICAgICAgICAgICAgY292LnN0b3AoKQog
ICAgICAgICAgICAgY292LnNhdmUoKQorCisgICAgICAgIGZhaWxlZF91cGxvYWRzID0gMAorICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLnJlcG9ydF91cmxzOgorICAgICAgICAgICAgc2VsZi5wcmlu
dGVyLm1ldGVyLndyaXRlbG4oJ1xuJykKKyAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZV91
cGRhdGUoJ1ByZXBhcmluZyB1cGxvYWQgZGF0YSAuLi4nKQorCisgICAgICAgICAgICByZXN1bHRz
ID0ge3Rlc3Q6IHt9IGZvciB0ZXN0IGluIHRlc3RfcnVubmVyLnRlc3RzX3J1bn0KKyAgICAgICAg
ICAgIGZvciB0ZXN0LCBlcnJvcnMgaW4gdGVzdF9ydW5uZXIuZXJyb3JzOgorICAgICAgICAgICAg
ICAgIHJlc3VsdHNbdGVzdF0gPSBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxv
YWQuRXhwZWN0YXRpb25zLkVSUk9SLCBsb2c9Jy9uJy5qb2luKGVycm9ycykpCisgICAgICAgICAg
ICBmb3IgdGVzdCwgZmFpbHVyZXMgaW4gdGVzdF9ydW5uZXIuZmFpbHVyZXM6CisgICAgICAgICAg
ICAgICAgcmVzdWx0c1t0ZXN0XSA9IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVw
bG9hZC5FeHBlY3RhdGlvbnMuRkFJTCwgbG9nPScvbicuam9pbihmYWlsdXJlcykpCisKKyAgICAg
ICAgICAgIF9ob3N0LmluaXRpYWxpemVfc2NtKCkKKyAgICAgICAgICAgIHVwbG9hZCA9IFVwbG9h
ZCgKKyAgICAgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAg
ICAgIGNvbmZpZ3VyYXRpb249VXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9uKAorICAgICAgICAg
ICAgICAgICAgICBwbGF0Zm9ybT1faG9zdC5wbGF0Zm9ybS5vc19uYW1lLAorICAgICAgICAgICAg
ICAgICAgICB2ZXJzaW9uPXN0cihfaG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uKSwKKyAgICAgICAg
ICAgICAgICAgICAgdmVyc2lvbl9uYW1lPV9ob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb25fbmFtZSgp
LAorICAgICAgICAgICAgICAgICAgICBzdHlsZT1jb25maWd1cmF0aW9uX3RvX3VzZSwKKyAgICAg
ICAgICAgICAgICAgICAgc2RrPV9ob3N0LnBsYXRmb3JtLmJ1aWxkX3ZlcnNpb24oKSwKKyAgICAg
ICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRh
aWxzKG9wdGlvbnM9c2VsZi5fb3B0aW9ucyksCisgICAgICAgICAgICAgICAgY29tbWl0cz1bVXBs
b2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dl
YmtpdCcsCisgICAgICAgICAgICAgICAgICAgIGlkPV9ob3N0LnNjbSgpLm5hdGl2ZV9yZXZpc2lv
bihfd2Via2l0X3Jvb3QpLAorICAgICAgICAgICAgICAgICAgICBicmFuY2g9X2hvc3Quc2NtKCku
bmF0aXZlX2JyYW5jaChfd2Via2l0X3Jvb3QpLAorICAgICAgICAgICAgICAgICldLAorICAgICAg
ICAgICAgICAgIHJ1bl9zdGF0cz1VcGxvYWQuY3JlYXRlX3J1bl9zdGF0cygKKyAgICAgICAgICAg
ICAgICAgICAgc3RhcnRfdGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAgICBlbmRf
dGltZT1lbmRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgdGVzdHNfc2tpcHBlZD1sZW4odGVz
dF9ydW5uZXIudGVzdHNfcnVuKSAtIGxlbihwYXJhbGxlbF90ZXN0cykgLSBsZW4oc2VyaWFsX3Rl
c3RzKSwKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIHJlc3VsdHM9cmVzdWx0
cywKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIGZvciB1cmwgaW4gc2VsZi5fb3B0aW9ucy5y
ZXBvcnRfdXJsczoKKyAgICAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKCdV
cGxvYWRpbmcgdG8ge30gLi4uJy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgICAgICBmYWlsZWRf
dXBsb2FkcyA9IGZhaWxlZF91cGxvYWRzIGlmIHVwbG9hZC51cGxvYWQodXJsLCBsb2dfbGluZT1z
ZWxmLnByaW50ZXIubWV0ZXIud3JpdGVsbikgZWxzZSAoZmFpbGVkX3VwbG9hZHMgKyAxKQorICAg
ICAgICAgICAgc2VsZi5wcmludGVyLm1ldGVyLndyaXRlbG4oJ1VwbG9hZHMgY29tcGxldGVkIScp
CisKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKICAgICAgICAgICAgIGNvdi5y
ZXBvcnQoc2hvd19taXNzaW5nPUZhbHNlKQogCi0gICAgICAgIHJldHVybiBub3Qgc2VsZi5wcmlu
dGVyLm51bV9lcnJvcnMgYW5kIG5vdCBzZWxmLnByaW50ZXIubnVtX2ZhaWx1cmVzCisgICAgICAg
IHJldHVybiBub3Qgc2VsZi5wcmludGVyLm51bV9lcnJvcnMgYW5kIG5vdCBzZWxmLnByaW50ZXIu
bnVtX2ZhaWx1cmVzIGFuZCBub3QgZmFpbGVkX3VwbG9hZHMKIAogICAgIGRlZiBfY2hlY2tfaW1w
b3J0cyhzZWxmLCBuYW1lcyk6CiAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L3J1bm5lci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw3IEBAIGNsYXNzIFJ1bm5lcihvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
cmludGVyLCBsb2FkZXIpOgogICAgICAgICBzZWxmLnByaW50ZXIgPSBwcmludGVyCiAgICAgICAg
IHNlbGYubG9hZGVyID0gbG9hZGVyCi0gICAgICAgIHNlbGYudGVzdHNfcnVuID0gMAorICAgICAg
ICBzZWxmLnRlc3RzX3J1biA9IFtdCiAgICAgICAgIHNlbGYuZXJyb3JzID0gW10KICAgICAgICAg
c2VsZi5mYWlsdXJlcyA9IFtdCiAgICAgICAgIHNlbGYud29ya2VyX2ZhY3RvcnkgPSBsYW1iZGEg
Y2FsbGVyOiBfV29ya2VyKGNhbGxlciwgc2VsZi5sb2FkZXIpCkBAIC02MCw3ICs2MCw3IEBAIGNs
YXNzIFJ1bm5lcihvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5wcmludGVyLnByaW50X3N0YXJ0
ZWRfdGVzdChzb3VyY2UsIHRlc3RfbmFtZSkKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAg
IHNlbGYudGVzdHNfcnVuICs9IDEKKyAgICAgICAgc2VsZi50ZXN0c19ydW4uYXBwZW5kKHRlc3Rf
bmFtZSkKICAgICAgICAgaWYgZmFpbHVyZXM6CiAgICAgICAgICAgICBzZWxmLmZhaWx1cmVzLmFw
cGVuZCgodGVzdF9uYW1lLCBmYWlsdXJlcykpCiAgICAgICAgIGlmIGVycm9yczoKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L3J1bm5lcl91bml0dGVzdC5weQkocmV2aXNp
b24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L3J1bm5lcl91bml0dGVz
dC5weQkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNiBAQCBjbGFzcyBSdW5uZXJUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3Rlc3QzIChG
b28pJywgJ0UnLCAndGVzdDNcbmVycmVkJykpCiAgICAgICAgIHJ1bm5lciA9IFJ1bm5lcihQcmlu
dGVyKHN0cmVhbSwgb3B0aW9ucyksIGxvYWRlcikKICAgICAgICAgcnVubmVyLnJ1bihbJ0Zvby50
ZXN0MScsICdGb28udGVzdDInLCAnRm9vLnRlc3QzJ10sIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwocnVubmVyLnRlc3RzX3J1biwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4o
cnVubmVyLnRlc3RzX3J1biksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJ1bm5l
ci5mYWlsdXJlcyksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJ1bm5lci5lcnJv
cnMpLCAxKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9f
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2lu
aXRfXy5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGly
ZHBhcnR5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDggQEAgY2xh
c3MgQXV0b2luc3RhbGxJbXBvcnRIb29rKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLl9pbnN0
YWxsX3B5dGVzdF90aW1lb3V0KCkKICAgICAgICAgZWxpZiAnLnB5dGVzdCcgaW4gZnVsbG5hbWU6
CiAgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX3B5dGVzdCgpCisgICAgICAgIGVsaWYgJy5yZXF1
ZXN0cycgaW4gZnVsbG5hbWU6CisgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX3JlcXVlc3RzKCkK
IAogICAgIGRlZiBfaW5zdGFsbF9tZWNoYW5pemUoc2VsZik6CiAgICAgICAgIHNlbGYuX2luc3Rh
bGwoImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNo
YW5pemUvbWVjaGFuaXplLTAuMi41LnRhci5neiIsCkBAIC0xNjEsNiArMTYzLDEwIEBAIGNsYXNz
IEF1dG9pbnN0YWxsSW1wb3J0SG9vayhvYmplY3QpOgogICAgICAgICBzZWxmLl9pbnN0YWxsKCJo
dHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvYTIvZWMvNDE1ZDBjY2NjMWVk
NDFjZDdmZGY2OWFkOTg5ZGExNmE4ZDEzMDU3OTk2MzcxMDA0Y2FiNGJhZmM0OGYzL3B5dGVzdC0z
LjYuMi50YXIuZ3oiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGVzdC0zLjYu
Mi9zcmMvcHl0ZXN0LnB5IikKIAorICAgIGRlZiBfaW5zdGFsbF9yZXF1ZXN0cyhzZWxmKToKKyAg
ICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2th
Z2VzLzUyLzJjLzUxNGU0YWMyNWRhMmIwOGNhNWE0NjRjNTA0NjM2ODIxMjYzODVjNDI3MmMxODE5
Mzg3NmU5MWY0YmMzOC9yZXF1ZXN0cy0yLjIxLjAudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInJlcXVlc3RzLTIuMjEuMC9yZXF1ZXN0cyIpCisKICAgICBkZWYgX2luc3Rh
bGxfcHlsaW50KHNlbGYpOgogICAgICAgICBzZWxmLl9lbnN1cmVfYXV0b2luc3RhbGxlZF9kaXJf
aXNfaW5fc3lzX3BhdGgoKQogICAgICAgICBpZiAobm90IHNlbGYuX2ZzLmV4aXN0cyhzZWxmLl9m
cy5qb2luKF9BVVRPSU5TVEFMTEVEX0RJUiwgInB5bGludCIpKSBvcgpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVlc191bml0dGVzdC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0
LnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvcXVldWVzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xODMsMTAgKzE4Mywx
MCBAQCBjbGFzcyBQYXRjaFByb2Nlc3NpbmdRdWV1ZVRlc3QoQ29tbWFuZHNUCiAgICAgICAgIHF1
ZXVlLl9vcHRpb25zID0gTW9jaygpCiAgICAgICAgIHF1ZXVlLl9vcHRpb25zLnBvcnQgPSBOb25l
CiAgICAgICAgIHBhdGNoID0gcXVldWUuX3Rvb2wuYnVncy5mZXRjaF9hdHRhY2htZW50KDEwMDAx
KQotICAgICAgICBleHBlY3RlZF9sb2dzID0gIiIiTU9DSyBhZGRfYXR0YWNobWVudF90b19idWc6
IGJ1Z19pZD01MDAwMCwgZGVzY3JpcHRpb249QXJjaGl2ZSBvZiBsYXlvdXQtdGVzdC1yZXN1bHRz
IGZyb20gYm90IGZvciBtYWMtc25vd2xlb3BhcmQgZmlsZW5hbWU9bGF5b3V0LXRlc3QtcmVzdWx0
cy56aXAgbWltZXR5cGU9Tm9uZQorICAgICAgICBleHBlY3RlZF9sb2dzID0gIiIiTU9DSyBhZGRf
YXR0YWNobWVudF90b19idWc6IGJ1Z19pZD01MDAwMCwgZGVzY3JpcHRpb249QXJjaGl2ZSBvZiBs
YXlvdXQtdGVzdC1yZXN1bHRzIGZyb20gYm90IGZvciBtYWMtaGlnaHNpZXJyYSBmaWxlbmFtZT1s
YXlvdXQtdGVzdC1yZXN1bHRzLnppcCBtaW1ldHlwZT1Ob25lCiAtLSBCZWdpbiBjb21tZW50IC0t
CiBUaGUgYXR0YWNoZWQgdGVzdCBmYWlsdXJlcyB3ZXJlIHNlZW4gd2hpbGUgcnVubmluZyBydW4t
d2Via2l0LXRlc3RzIG9uIHRoZSBtb2NrLXF1ZXVlLgotUG9ydDogbWFjLXNub3dsZW9wYXJkICBQ
bGF0Zm9ybTogTW9ja1BsYXRmb3JtIDEuMAorUG9ydDogbWFjLWhpZ2hzaWVycmEgIFBsYXRmb3Jt
OiBNb2NrUGxhdGZvcm0gMS4wCiAtLSBFbmQgY29tbWVudCAtLQogIiIiCiAgICAgICAgIE91dHB1
dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBxdWV1ZS5fdXBsb2FkX3Jlc3VsdHNfYXJj
aGl2ZV9mb3JfcGF0Y2gsIFtwYXRjaCwgTW9jaygpXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9s
b2dzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364798</attachid>
            <date>2019-03-15 08:13:13 -0700</date>
            <delta_ts>2019-03-15 08:31:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190315081315.patch</filename>
            <type>text/plain</type>
            <size>60360</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0Mjk3OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE5LTAzLTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6Cisg
ICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOiBBZGQgcmVxdWVzdHMg
YXV0by1pbnN0YWxsLgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxsX3Jl
cXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBs
b2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGlu
Zy4KKwogMjAxOS0wMy0xNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgTW92ZSBJREIgc3RvcmFnZSBpbiBwcml2YXRlIGJyb3dzaW5nIG1vZGUgdG8gTmV0d29y
a1Byb2Nlc3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18u
cHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5p
dF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKKyMgUmVxdWlyZWQgZm9yIFB5
dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCisjIEtlZXAg
dGhpcyBmaWxlIGZyZWUgb2YgYW55IGNvZGUgb3IgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBjb3Vs
ZAorIyBjYXVzZSBlaXRoZXIgYW4gZXJyb3IgdG8gb2NjdXIgb3IgYSBsb2cgbWVzc2FnZSB0byBi
ZSBsb2dnZWQuCisjIFRoaXMgZW5zdXJlcyB0aGF0IGNhbGxpbmcgY29kZSBjYW4gaW1wb3J0IGlu
aXRpYWxpemF0aW9uIGNvZGUgZnJvbQorIyB3ZWJraXRweSBiZWZvcmUgYW55IGVycm9ycyBvciBs
b2cgbWVzc2FnZXMgZHVlIHRvIGNvZGUgaW4gdGhpcyBmaWxlLgorIyBJbml0aWFsaXphdGlvbiBj
b2RlIGNhbiBpbmNsdWRlIHRoaW5ncyBsaWtlIHZlcnNpb24tY2hlY2tpbmcgY29kZSBhbmQKKyMg
bG9nZ2luZyBjb25maWd1cmF0aW9uIGNvZGUuCisjCisjIFdlIGRvIG5vdCBleGVjdXRlIGFueSB2
ZXJzaW9uLWNoZWNraW5nIGNvZGUgb3IgbG9nZ2luZyBjb25maWd1cmF0aW9uCisjIGNvZGUgaW4g
dGhpcyBmaWxlIHNvIHRoYXQgY2FsbGVycyBjYW4gb3B0LWluIGFzIHRoZXkgd2FudC4gIFRoaXMg
YWxzbworIyBhbGxvd3MgZGlmZmVyZW50IGNhbGxlcnMgdG8gY2hvb3NlIGRpZmZlcmVudCBpbml0
aWFsaXphdGlvbiBjb2RlLAorIyBhcyBuZWNlc3NhcnkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMz
IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcHRw
YXJzZQorCisKK2RlZiB1cGxvYWRfb3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJlcG9ydCcsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0ncmVw
b3J0X3VybHMnLCBoZWxwPSdVUkwgKG9yIFVSTHMpIHRvIHJlcG9ydCB0ZXN0IHJlc3VsdHMgdG8n
KSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRib3QtbWFzdGVyJywgaGVs
cD0nVGhlIHVybCBvZiB0aGUgYnVpbGRib3QgbWFzdGVyLicpLAorICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbignLS1idWlsZGVyLW5hbWUnLCBoZWxwPSdUaGUgbmFtZSBvZiB0aGUgYnVpbGRi
b3QgYnVpbGRlciB0ZXN0cyB3ZXJlIHJ1biBvbi4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oJy0tYnVpbGQtbnVtYmVyJywgaGVscD0nVGhlIGJ1aWxkYm90IGJ1aWxkIG51bWJlciB0
ZXN0cyBhcmUgYXNzb2NpYXRlZCB3aXRoLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bignLS1idWlsZGJvdC13b3JrZXInLCBoZWxwPSdUaGUgYnVpbGRib3Qgd29ya2VyIHRlc3RzIHdl
cmUgcnVuIG9uLicpLAorICAgIF0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0
cy91cGxvYWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRz
L3VwbG9hZC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3Vs
dHMvdXBsb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg5IEBACisjIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5
LmF1dG9pbnN0YWxsZWQucmVxdWVzdHMKKworaW1wb3J0IGpzb24KK2ltcG9ydCByZXF1ZXN0cwor
aW1wb3J0IHN5cworCitpbXBvcnQgcGxhdGZvcm0gYXMgcGxhdGZvcm1fCisKKworY2xhc3MgVXBs
b2FkKG9iamVjdCk6CisgICAgVVBMT0FEX0VORFBPSU5UID0gJy9hcGkvdXBsb2FkJworICAgIEJV
SUxEQk9UX0RFVEFJTFMgPSBbJ2J1aWxkYm90LW1hc3RlcicsICdidWlsZGVyLW5hbWUnLCAnYnVp
bGQtbnVtYmVyJywgJ2J1aWxkYm90LXdvcmtlciddCisgICAgVkVSU0lPTiA9IDAKKworICAgIGNs
YXNzIEV4cGVjdGF0aW9uczoKKyAgICAgICAgIyBUaGVzZSBhcmUgb3JkZXJlZCBieSBwcmlvcml0
eSwgbWVhbmluZyB0aGF0IGEgdGVzdCB3aGljaCBib3RoIGNyYXNoZXMgYW5kIGhhcworICAgICAg
ICAjIGEgd2FybmluZyBzaG91bGQgYmUgY29uc2lkZXJlZCB0byBoYXZlIGNyYXNoZWQuCisgICAg
ICAgIE9SREVSID0gWworICAgICAgICAgICAgJ0NSQVNIJywKKyAgICAgICAgICAgICdUSU1FT1VU
JywKKyAgICAgICAgICAgICdJTUFHRScsICAgIyBJbWFnZS1kaWZmCisgICAgICAgICAgICAnQVVE
SU8nLCAgICMgQXVkaW8tZGlmZgorICAgICAgICAgICAgJ1RFWFQnLCAgICAjIFRleHQtZGlmZgor
ICAgICAgICAgICAgJ0ZBSUwnLAorICAgICAgICAgICAgJ0VSUk9SJywKKyAgICAgICAgICAgICdX
QVJOSU5HJywKKyAgICAgICAgICAgICdQQVNTJywKKyAgICAgICAgXQorICAgICAgICBDUkFTSCwg
VElNRU9VVCwgSU1BR0UsIEFVRElPLCBURVhULCBGQUlMLCBFUlJPUiwgV0FSTklORywgUEFTUyA9
IE9SREVSCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9jb25maWd1cmF0aW9u
KAorICAgICAgICAgICAgcGxhdGZvcm09Tm9uZSwKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1G
YWxzZSwKKyAgICAgICAgICAgIHZlcnNpb249Tm9uZSwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVy
ZT1Ob25lLAorICAgICAgICAgICAgdmVyc2lvbl9uYW1lPU5vbmUsCisgICAgICAgICAgICBtb2Rl
bD1Ob25lLAorICAgICAgICAgICAgc3R5bGU9Tm9uZSwgICAjIERlYnVnL1Byb2R1Y3Rpb24vUmVs
ZWFzZQorICAgICAgICAgICAgZmxhdm9yPU5vbmUsICAjIER1bXBpbmcgZ3JvdW5kIHN1aXRlLXdp
ZGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIChpZSwgR3VhcmRNYWxsb2MpCisgICAgICAgICAgICBz
ZGs9Tm9uZSwKKyAgICAgICAgKToKKworICAgICAgICAjIFRoaXMgZGV2aWF0ZXMgc2xpZ2h0bHkg
ZnJvbSB0aGUgcmVzdCBvZiB3ZWJraXRweSwgYnV0IGl0IGFsbG93cyB0aGlzIGZpbGUgdG8gYmUg
ZW50aXJlbHkgcG9ydGFibGUuCisgICAgICAgIGNvbmZpZyA9IGRpY3QoCisgICAgICAgICAgICBw
bGF0Zm9ybT1wbGF0Zm9ybSBvciAocGxhdGZvcm1fLnN5c3RlbSgpIGlmIHBsYXRmb3JtXy5zeXN0
ZW0oKSAhPSAnRGFyd2luJyBlbHNlICdtYWMnKS5sb3dlcigpLAorICAgICAgICAgICAgaXNfc2lt
dWxhdG9yPWlzX3NpbXVsYXRvciwKKyAgICAgICAgICAgIHZlcnNpb249dmVyc2lvbiBvciAocGxh
dGZvcm1fLnJlbGVhc2UoKSBpZiBwbGF0Zm9ybV8uc3lzdGVtKCkgIT0gJ0RhcndpbicgZWxzZSBw
bGF0Zm9ybV8ubWFjX3ZlcigpWzBdKSwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVyZT1hcmNoaXRl
Y3R1cmUgb3IgcGxhdGZvcm1fLm1hY2hpbmUoKSwKKyAgICAgICAgKQorICAgICAgICBmb3Iga2V5
LCB2YWx1ZSBpbiBjb25maWcuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBO
b25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IG11c3QgYmUgZGVmaW5l
ZCBpbiB0aGUgY29uZmlndXJhdGlvbicuZm9ybWF0KGtleSkpCisgICAgICAgIGZvciBrZXksIHZh
bHVlIGluIGRpY3QodmVyc2lvbl9uYW1lPXZlcnNpb25fbmFtZSwgbW9kZWw9bW9kZWwsIHN0eWxl
PXN0eWxlLCBmbGF2b3I9Zmxhdm9yLCBzZGs9c2RrKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAg
IGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNvbmZpZ1trZXldID0gdmFs
dWUKKyAgICAgICAgcmV0dXJuIGNvbmZpZworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBj
cmVhdGVfY29tbWl0KHJlcG9zaXRvcnlfaWQ9Tm9uZSwgaWQ9Tm9uZSwgYnJhbmNoPU5vbmUpOgor
ICAgICAgICBjb21taXQgPSBkaWN0KHJlcG9zaXRvcnlfaWQ9cmVwb3NpdG9yeV9pZCwgaWQ9aWQp
CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbW1pdC5pdGVyaXRlbXMoKToKKyAgICAgICAg
ICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
e30gbXVzdCBiZSBkZWZpbmVkIGluIGEgY29tbWl0Jy5mb3JtYXQoa2V5KSkKKyAgICAgICAgaWYg
YnJhbmNoOgorICAgICAgICAgICAgY29tbWl0WydicmFuY2gnXSA9IGJyYW5jaAorICAgICAgICBy
ZXR1cm4gY29tbWl0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9kZXRhaWxz
KGxpbms9Tm9uZSwgb3B0aW9ucz1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHJlc3VsdCA9IGRp
Y3QoKiprd2FyZ3MpCisgICAgICAgIGlmIGxpbms6CisgICAgICAgICAgICByZXN1bHRbJ2xpbmsn
XSA9IGxpbmsKKworICAgICAgICBpZiBvcHRpb25zOgorICAgICAgICAgICAgZm9yIGVsZW1lbnQg
aW4gVXBsb2FkLkJVSUxEQk9UX0RFVEFJTFM6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRh
dHRyKG9wdGlvbnMsIGVsZW1lbnQucmVwbGFjZSgnLScsICdfJyksIE5vbmUpCisgICAgICAgICAg
ICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtl
bGVtZW50XSA9IHZhbHVlCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgY3JlYXRlX3J1bl9zdGF0cyhzdGFydF90aW1lPU5vbmUsIGVuZF90aW1lPU5v
bmUsIHRlc3RzX3NraXBwZWQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzdGF0cyA9IGRpY3Qo
Kiprd2FyZ3MpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRpY3Qoc3RhcnRfdGltZT1zdGFy
dF90aW1lLCBlbmRfdGltZT1lbmRfdGltZSwgdGVzdHNfc2tpcHBlZD10ZXN0c19za2lwcGVkKS5p
dGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIHN0YXRzW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gc3RhdHMKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPU5vbmUsIGFj
dHVhbD1Ob25lLCBsb2c9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCoq
a3dhcmdzKQorCisgICAgICAgICMgVGVzdHMgd2hpY2ggZG9uJ3QgZGVjbGFyZSBleHBlY3RhdGlv
bnMgb3IgcmVzdWx0cyBhcmUgYXNzdW1lZCB0byBoYXZlIHBhc3NlZC4KKyAgICAgICAgZm9yIGtl
eSwgdmFsdWUgaW4gZGljdChleHBlY3RlZD1leHBlY3RlZCwgYWN0dWFsPWFjdHVhbCwgbG9nPWxv
ZykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiByZXN1bHQKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWl0ZT1Ob25lLCBjb25maWd1cmF0aW9uPU5vbmUsIGNv
bW1pdHM9W10sIHRpbWVzdGFtcD1Ob25lLCBkZXRhaWxzPU5vbmUsIHJ1bl9zdGF0cz1Ob25lLCBy
ZXN1bHRzPXt9KToKKyAgICAgICAgc2VsZi5zdWl0ZSA9IHN1aXRlCisgICAgICAgIHNlbGYuY29u
ZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VsZi5jb21taXRzID0gY29tbWl0
cworICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcAorICAgICAgICBzZWxmLmRldGFp
bHMgPSBkZXRhaWxzCisgICAgICAgIHNlbGYucnVuX3N0YXRzID0gcnVuX3N0YXRzCisgICAgICAg
IHNlbGYucmVzdWx0cyA9IHJlc3VsdHMKKworICAgIGNsYXNzIEVuY29kZXIoanNvbi5KU09ORW5j
b2Rlcik6CisKKyAgICAgICAgZGVmIGRlZmF1bHQoc2VsZiwgb2JqKToKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2Uob2JqLCBVcGxvYWQpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvYmouc3Vp
dGU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIHN1aXRlIHNwZWNp
ZmllZCB0byByZXN1bHRzIHVwbG9hZCcpCisgICAgICAgICAgICAgICAgaWYgbm90IG9iai5jb21t
aXRzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBjb21taXRzIHNw
ZWNpZmllZCB0byByZXN1bHRzIHVwbG9hZCcpCisKKyAgICAgICAgICAgICAgICBkZXRhaWxzID0g
b2JqLmRldGFpbHMgb3Igb2JqLmNyZWF0ZV9kZXRhaWxzKCkKKyAgICAgICAgICAgICAgICBidWls
ZGJvdF9hcmdzID0gW2RldGFpbHMuZ2V0KGFyZywgTm9uZSkgaXMgTm9uZSBmb3IgYXJnIGluIG9i
ai5CVUlMREJPVF9ERVRBSUxTXQorICAgICAgICAgICAgICAgIGlmIGFueShidWlsZGJvdF9hcmdz
KSBhbmQgbm90IGFsbChidWlsZGJvdF9hcmdzKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcignQWxsIGJ1aWxkYm90IGRldGFpbHMgbXVzdCBiZSBkZWZpbmVkIGZvciB1cGxv
YWQnKQorCisgICAgICAgICAgICAgICAgZGVmIHVucGFja190ZXN0KGN1cnJlbnQsIHBhdGhfdG9f
dGVzdCwgZGF0YSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYXRoX3RvX3Rlc3QpID09
IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0gPSBk
YXRhCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAg
aWYgbm90IGN1cnJlbnQuZ2V0KHBhdGhfdG9fdGVzdFswXSk6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0gPSB7fQorICAgICAgICAgICAgICAgICAgICB1
bnBhY2tfdGVzdChjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0sIHBhdGhfdG9fdGVzdFsxOl0sIGRh
dGEpCisKKyAgICAgICAgICAgICAgICByZXN1bHRzID0ge30KKyAgICAgICAgICAgICAgICBmb3Ig
dGVzdCwgZGF0YSBpbiBvYmoucmVzdWx0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAg
ICAgdW5wYWNrX3Rlc3QocmVzdWx0cywgdGVzdC5zcGxpdCgnLycpLCBkYXRhKQorCisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gZGljdCgKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj1vYmou
VkVSU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgc3VpdGU9b2JqLnN1aXRlLAorICAgICAgICAg
ICAgICAgICAgICBjb25maWd1cmF0aW9uPW9iai5jb25maWd1cmF0aW9uIG9yIG9iai5jcmVhdGVf
Y29uZmlndXJhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBjb21taXRzPW9iai5jb21taXRz
LAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHM9ZGljdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRldGFpbHM9ZGV0YWlscywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9z
dGF0cz1vYmoucnVuX3N0YXRzIG9yIG9iai5jcmVhdGVfcnVuX3N0YXRzKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRzPXJlc3VsdHMsCisgICAgICAgICAgICAgICAgICAgICksCisg
ICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGlmIG9iai50aW1lc3RhbXA6CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFsndGltZXN0YW1wJ10gPSBvYmoudGltZXN0YW1wCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFVwbG9h
ZC5FbmNvZGVyLCBzZWxmKS5kZWZhdWx0KG9iaikKKworICAgIGRlZiB1cGxvYWQoc2VsZiwgdXJs
LCBsb2dfbGluZT1sYW1iZGEgdmFsOiBzeXMuc3Rkb3V0LndyaXRlKHZhbCArICdcbicpKToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wb3N0KHVybCArIHNl
bGYuVVBMT0FEX0VORFBPSU5ULCBkYXRhPWpzb24uZHVtcHMoc2VsZiwgY2xzPVVwbG9hZC5FbmNv
ZGVyKSkKKyAgICAgICAgZXhjZXB0IHJlcXVlc3RzLmV4Y2VwdGlvbnMuQ29ubmVjdGlvbkVycm9y
OgorICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdGYWlsZWQgdG8gdXBsb2FkIHRvIHt9
LCByZXN1bHRzIHNlcnZlciBub3Qgb25saW5lJy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAg
bG9nX2xpbmUoJyAnICogNCArICdGYWlsZWQgdG8gZW5jb2RlIHVwbG9hZCBkYXRhOiB7fScuZm9y
bWF0KGUpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgcmVzcG9uc2Uu
c3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdFcnJv
ciB1cGxvYWRpbmcgdG8ge306Jy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgIGxvZ19saW5lKCcg
JyAqIDggKyByZXNwb25zZS5qc29uKClbJ2Rlc2NyaXB0aW9uJ10pCisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ1VwbG9hZGVkIHJlc3VsdHMg
dG8ge30nLmZvcm1hdCh1cmwpKQorICAgICAgICByZXR1cm4gVHJ1ZQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWRfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3Rh
bGxlZC5yZXF1ZXN0cworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBqc29uCitpbXBvcnQg
bW9jaworaW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zy
b20gd2Via2l0cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVwbG9hZAorCisKK2NsYXNzIFVwbG9h
ZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgT3B0aW9ucyhvYmplY3QpOgor
ICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAgICAgZm9yIGtl
eSwgdmFsdWUgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIo
c2VsZiwga2V5LCB2YWx1ZSkKKworICAgIGNsYXNzIE1vY2tSZXNwb25zZShvYmplY3QpOgorICAg
ICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzX2NvZGU9MjAwLCB0ZXh0PScnKToKKyAgICAg
ICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSBzdGF0dXNfY29kZQorICAgICAgICAgICAgc2VsZi50
ZXh0ID0gdGV4dAorCisgICAgICAgIGRlZiBqc29uKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJu
IGpzb24ubG9hZHMoc2VsZi50ZXh0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBub3Jt
YWxpemUoZGF0YSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgYmFzZXN0cmluZyk6Cisg
ICAgICAgICAgICByZXR1cm4gc3RyKGRhdGEpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkYXRh
LCBjb2xsZWN0aW9ucy5NYXBwaW5nKToKKyAgICAgICAgICAgIHJldHVybiBkaWN0KG1hcChVcGxv
YWRUZXN0Lm5vcm1hbGl6ZSwgZGF0YS5pdGVyaXRlbXMoKSkpCisgICAgICAgIGVsaWYgaXNpbnN0
YW5jZShkYXRhLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gdHlw
ZShkYXRhKShtYXAoVXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEpKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgor
ICAgICAgICBzdGFydF90aW1lLCBlbmRfdGltZSA9IHRpbWUudGltZSgpIC0gMywgdGltZS50aW1l
KCkKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5
LXRlc3RzJywKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249VXBsb2FkLmNyZWF0ZV9jb25maWd1
cmF0aW9uKAorICAgICAgICAgICAgICAgIHBsYXRmb3JtPSdtYWMnLAorICAgICAgICAgICAgICAg
IHZlcnNpb249JzEwLjEzLjAnLAorICAgICAgICAgICAgICAgIHZlcnNpb25fbmFtZT0nSGlnaCBT
aWVycmEnLAorICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZT0neDg2XzY0JywKKyAgICAgICAg
ICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgZGV0YWls
cz1VcGxvYWQuY3JlYXRlX2RldGFpbHMobGluaz0naHR0cHM6Ly93ZWJraXQub3JnJyksCisgICAg
ICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICBy
ZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAg
ICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgcnVu
X3N0YXRzPVVwbG9hZC5jcmVhdGVfcnVuX3N0YXRzKAorICAgICAgICAgICAgICAgIHN0YXJ0X3Rp
bWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICBlbmRfdGltZT1lbmRfdGltZSwKKyAgICAg
ICAgICAgICAgICB0ZXN0c19za2lwcGVkPTAsCisgICAgICAgICAgICApLAorICAgICAgICAgICAg
cmVzdWx0cz17CisgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisgICAgICAg
ICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChleHBl
Y3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25z
LkZBSUwpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGlj
dCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxv
YWQuRW5jb2RlcikpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3Rb
J3ZlcnNpb24nXSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsn
c3VpdGUnXSwgJ3dlYmtpdHB5LXRlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5l
cmF0ZWRfZGljdFsnY29uZmlndXJhdGlvbiddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KAorICAgICAg
ICAgICAgcGxhdGZvcm09J21hYycsCisgICAgICAgICAgICBpc19zaW11bGF0b3I9RmFsc2UsCisg
ICAgICAgICAgICB2ZXJzaW9uPScxMC4xMy4wJywKKyAgICAgICAgICAgIHZlcnNpb25fbmFtZT0n
SGlnaCBTaWVycmEnLAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPSd4ODZfNjQnLAorICAgICAg
ICAgICAgc2RrPScxN0E0MDUnLAorICAgICAgICApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChnZW5lcmF0ZWRfZGljdFsnY29tbWl0cyddLCBbZGljdCgKKyAgICAgICAgICAgIHJlcG9zaXRv
cnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICBicmFuY2g9
J3RydW5rJywKKyAgICAgICAgKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVk
X2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9ybWFsaXplKGRpY3QobGlu
az0naHR0cHM6Ly93ZWJraXQub3JnJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVy
YXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncnVuX3N0YXRzJ10sIHNlbGYubm9ybWFsaXplKGRp
Y3QoCisgICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAgICAgICAgICBlbmRf
dGltZT1lbmRfdGltZSwKKyAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwKKyAgICAgICAgKSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cydd
WydyZXN1bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICd3ZWJraXRweS50ZXN0
MSc6IHt9LAorICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0
X3Jlc3VsdChleHBlY3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFjdHVhbD1VcGxvYWQu
RXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICB9KSkKKworICAgIGRlZiB0ZXN0X3VwbG9hZChz
ZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtp
dHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAor
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAg
aWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0s
CisgICAgICAgICkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBu
ZXc9bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoKSk6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydFRydWUodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMn
LCBsb2dfbGluZT1sYW1iZGEgXzogTm9uZSkpCisKKyAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlv
bih1cmwsIGRhdGEpOgorICAgICAgICAgICAgcmFpc2UgcmVxdWVzdHMuZXhjZXB0aW9ucy5Db25u
ZWN0aW9uRXJyb3IoKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVzdHMucG9zdCcs
IG5ldz1yYWlzZV9leGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxv
YWQudXBsb2FkKCdodHRwczovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBf
OiBOb25lKSkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBuZXc9
bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoCisgICAgICAgICAgICBzdGF0dXNf
Y29kZT00MDQsCisgICAgICAgICAgICB0ZXh0PWpzb24uZHVtcHMoZGljdChkZXNjcmlwdGlvbj0n
Tm8gc3VjaCBhZGRyZXNzJykpLAorICAgICAgICApKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMnLCBsb2dfbGlu
ZT1sYW1iZGEgXzogTm9uZSkpCisKKyAgICBkZWYgdGVzdF9wYWNrZWRfdGVzdChzZWxmKToKKyAg
ICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3Rz
JywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAg
ICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAor
ICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAg
ICAgICByZXN1bHRzPXsKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90ZXN0MSc6IFVw
bG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCks
CisgICAgICAgICAgICAgICAgJ2RpcjEvc3ViLWRpcjEvdGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rl
c3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLlRJTUVPVVQpLAorICAgICAgICAg
ICAgICAgICdkaXIxL3N1Yi1kaXIyL3Rlc3QzJzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjEv
c3ViLWRpcjIvdGVzdDQnOiB7fSwKKyAgICAgICAgICAgICAgICAnZGlyMi9zdWItZGlyMy90ZXN0
NSc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIyL3Rlc3Q2Jzoge30sCisgICAgICAgICAgICB9
CisgICAgICAgICkKKyAgICAgICAgZ2VuZXJhdGVkX2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29u
LmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMn
XSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAgJ2RpcjEnOiB7CisgICAgICAgICAgICAg
ICAgJ3N1Yi1kaXIxJzogeworICAgICAgICAgICAgICAgICAgICAndGVzdDEnOiB7J2FjdHVhbCc6
IFVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTH0sCisgICAgICAgICAgICAgICAgICAgICd0ZXN0Mic6
IHsnYWN0dWFsJzogVXBsb2FkLkV4cGVjdGF0aW9ucy5USU1FT1VUfSwKKyAgICAgICAgICAgICAg
ICB9LCAnc3ViLWRpcjInOiB7CisgICAgICAgICAgICAgICAgICAgICd0ZXN0Myc6IHt9LAorICAg
ICAgICAgICAgICAgICAgICAndGVzdDQnOiB7fSwKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9LCAnZGlyMic6IHsKKyAgICAgICAgICAgICAgICAnc3ViLWRpcjMnOiB7J3Rlc3Q1Jzog
e319LAorICAgICAgICAgICAgICAgICd0ZXN0Nic6IHt9LAorICAgICAgICAgICAgfSwKKyAgICAg
ICAgfSkpCisKKyAgICBkZWYgdGVzdF9ub19zdWl0ZShzZWxmKToKKyAgICAgICAgdXBsb2FkID0g
VXBsb2FkKAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0n
NScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAg
ICAgICAgKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAg
ICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRl
ZiB0ZXN0X25vX2NvbW1pdHMoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAg
ICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICkKKyAgICAgICAgd2l0aCBz
ZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBs
b2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICBkZWYgdGVzdF9idWlsZGJvdChzZWxmKToK
KyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRl
c3RzJywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAg
ICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUn
LAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAg
ICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhvcHRpb25zPXNlbGYuT3B0aW9u
cygKKyAgICAgICAgICAgICAgICBidWlsZGJvdF9tYXN0ZXI9J3dlYmtpdC5vcmcnLAorICAgICAg
ICAgICAgICAgIGJ1aWxkZXJfbmFtZT0nUXVldWUtMScsCisgICAgICAgICAgICAgICAgYnVpbGRf
bnVtYmVyPTEsCisgICAgICAgICkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZh
bHVlRXJyb3IpOgorICAgICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5j
b2RlcikKKworICAgICAgICB1cGxvYWQuZGV0YWlsc1snYnVpbGRib3Qtd29ya2VyJ10gPSAnYm90
MTIzJworICAgICAgICBnZW5lcmF0ZWRfZGljdCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMo
anNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsnZGV0YWlscyddLCBzZWxm
Lm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAnYnVpbGRib3QtbWFzdGVyJzogJ3dlYmtpdC5vcmcn
LAorICAgICAgICAgICAgJ2J1aWxkZXItbmFtZSc6ICdRdWV1ZS0xJywKKyAgICAgICAgICAgICdi
dWlsZC1udW1iZXInOiAxLAorICAgICAgICAgICAgJ2J1aWxkYm90LXdvcmtlcic6ICdib3QxMjMn
LAorICAgICAgICB9KSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9naXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY2hlY2tvdXQvc2NtL2dpdC5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MjkwLDYgKzI5MCwxNCBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYg
bmF0aXZlX3JldmlzaW9uKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dp
dChbJy1DJywgc2VsZi5maW5kX2NoZWNrb3V0X3Jvb3QocGF0aCksICdsb2cnLCAnLTEnLCAnLS1w
cmV0dHk9Zm9ybWF0OiVIJ10pCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBwYXRoKToK
KyAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX2dpdChbJy1DJywgc2VsZi5maW5kX2NoZWNrb3V0
X3Jvb3QocGF0aCksICdyZXYtcGFyc2UnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQnXSkucnN0cmlw
KCkKKworICAgICAgICAjIEZvciBnaXQtc3ZuCisgICAgICAgIGlmIHJlc3VsdC5zdGFydHN3aXRo
KCdoZWFkcycpOgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFs2Ol0KKyAgICAgICAgcmV0dXJu
IHJlc3VsdAorCiAgICAgZGVmIHN2bl91cmwoc2VsZik6CiAgICAgICAgIGdpdF9jb21tYW5kID0g
Wydzdm4nLCAnaW5mbyddCiAgICAgICAgIHN0YXR1cyA9IHNlbGYuX3J1bl9naXQoZ2l0X2NvbW1h
bmQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2Nt
X21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3NjbV9tb2NrLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHkJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDYgKzg3LDkgQEAgY2xhc3MgTW9ja1NDTShvYmplY3QpOgogICAgIGRlZiBuYXRpdmVf
cmV2aXNpb24oc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBzZWxmLnN2bl9yZXZpc2lvbihw
YXRoKQogCisgICAgZGVmIG5hdGl2ZV9icmFuY2goc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVy
biAndHJ1bmsnCisKICAgICBkZWYgdGltZXN0YW1wX29mX3JldmlzaW9uKHNlbGYsIHBhdGgsIHJl
dmlzaW9uKToKICAgICAgICAgcmV0dXJuICcyMDEzLTAyLTAxIDA4OjQ4OjA1ICswMDAwJwogCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9zY21fdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTkwOSw2ICs5MDksOSBAQCBFTkQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLnNjbS5oZWFkX3N2bl9yZXZpc2lvbigpLCBzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24oJy4n
KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24oJy4n
KSwgJzUnKQogCisgICAgZGVmIHRlc3RfbmF0aXZlX2JyYW5jaChzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfYnJhbmNoKCcuJyksICd0cnVuaycpCisKICAg
ICBkZWYgdGVzdF9wcm9wc2V0X3Byb3BnZXQoc2VsZik6CiAgICAgICAgIGZpbGVwYXRoID0gb3Mu
cGF0aC5qb2luKHNlbGYuc3ZuX2NoZWNrb3V0X3BhdGgsICJ0ZXN0X2ZpbGUiKQogICAgICAgICBl
eHBlY3RlZF9taW1lX3R5cGUgPSAieC1hcHBsaWNhdGlvbi9mb28tYmFyIgpAQCAtMTExMiw2ICsx
MTE1LDEwIEBAIGNsYXNzIEdpdFRlc3QoU0NNVGVzdCk6CiAgICAgICAgIGNvbW1hbmQgPSBbJ2dp
dCcsICctQycsIHNjbS5jaGVja291dF9yb290LCAncmV2LXBhcnNlJywgJ0hFQUQnXQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNjbS5uYXRpdmVfcmV2aXNpb24oc2NtLmNoZWNrb3V0X3Jvb3Qp
LCBydW5fY29tbWFuZChjb21tYW5kKS5zdHJpcCgpKQogCisgICAgZGVmIHRlc3RfbmF0aXZlX2Jy
YW5jaChzZWxmKToKKyAgICAgICAgc2NtID0gc2VsZi50cmFja2luZ19zY20KKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnbWFzdGVyJywgc2NtLm5hdGl2ZV9icmFuY2goc2NtLmNoZWNrb3V0X3Jv
b3QpKQorCiAgICAgZGVmIHRlc3RfcmVuYW1lX2ZpbGVzKHNlbGYpOgogICAgICAgICBzY20gPSBz
ZWxmLnRyYWNraW5nX3NjbQogCkBAIC0xNjI3LDYgKzE2MzQsOSBAQCBjbGFzcyBHaXRTVk5UZXN0
KFNDTVRlc3QpOgogICAgICAgICBjb21tYW5kID0gWydnaXQnLCAnLUMnLCBzZWxmLmdpdF9jaGVj
a291dF9wYXRoLCAncmV2LXBhcnNlJywgJ0hFQUQnXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuc2NtLm5hdGl2ZV9yZXZpc2lvbihzZWxmLmdpdF9jaGVja291dF9wYXRoKSwgcnVuX2Nv
bW1hbmQoY29tbWFuZCkuc3RyaXAoKSkKIAorICAgIGRlZiB0ZXN0X25hdGl2ZV9icmFuY2goc2Vs
Zik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3RydW5rJywgc2VsZi5zY20ubmF0aXZlX2Jy
YW5jaChzZWxmLmdpdF9jaGVja291dF9wYXRoKSkKKwogICAgIGRlZiB0ZXN0X3RvX29iamVjdF9u
YW1lKHNlbGYpOgogICAgICAgICByZWxwYXRoID0gJ3Rlc3RfZmlsZV9jb21taXQxJwogICAgICAg
ICBmdWxscGF0aCA9IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKHNlbGYuZ2l0X2NoZWNr
b3V0X3BhdGgsIHJlbHBhdGgpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y2hlY2tvdXQvc2NtL3N2bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC04Myw3ICs4Myw3IEBAIGNsYXNzIFNWTihTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgICAg
ICBTQ00uX19pbml0X18oc2VsZiwgY3dkLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5fYm9ndXNf
ZGlyID0gTm9uZQogICAgICAgICBpZiBwYXRjaF9kaXJlY3RvcmllcyA9PSBbXToKLSAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbihtZXNzYWdlPSdFbXB0eSBsaXN0IG9mIHBhdGNoIGRpcmVjdG9y
aWVzIHBhc3NlZCB0byBTQ00uX19pbml0X18nKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCdFbXB0eSBsaXN0IG9mIHBhdGNoIGRpcmVjdG9yaWVzIHBhc3NlZCB0byBTQ00uX19pbml0X18n
KQogICAgICAgICBlbGlmIHBhdGNoX2RpcmVjdG9yaWVzID09IE5vbmU6CiAgICAgICAgICAgICBz
ZWxmLl9wYXRjaF9kaXJlY3RvcmllcyA9IFtzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgoY3dkLCBz
ZWxmLmNoZWNrb3V0X3Jvb3QpXQogICAgICAgICBlbHNlOgpAQCAtMjc4LDYgKzI3OCwxNCBAQCBj
bGFzcyBTVk4oU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYgbmF0aXZlX3JldmlzaW9uKHNl
bGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5zdm5fcmV2aXNpb24ocGF0aCkKIAorICAg
IGRlZiBuYXRpdmVfYnJhbmNoKHNlbGYsIHBhdGgpOgorICAgICAgICByZWxhdGl2ZV91cmwgPSBz
ZWxmLnZhbHVlX2Zyb21fc3ZuX2luZm8ocGF0aCwgJ1JlbGF0aXZlIFVSTCcpWzI6XQorICAgICAg
ICBpZiByZWxhdGl2ZV91cmwuc3RhcnRzd2l0aCgndHJ1bmsnKToKKyAgICAgICAgICAgIHJldHVy
biAndHJ1bmsnCisgICAgICAgIGVsaWYgcmVsYXRpdmVfdXJsLnN0YXJ0c3dpdGgoJ2JyYW5jaCcp
OgorICAgICAgICAgICAgcmV0dXJuIHJlbGF0aXZlX3VybC5zcGxpdCgnLycpWzFdCisgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbigne30gaXMgbm90IGEgYnJhbmNoJy5mb3JtYXQocmVsYXRpdmVfdXJs
LnNwbGl0KCcvJylbMF0pKQorCiAgICAgZGVmIHRpbWVzdGFtcF9vZl9yZXZpc2lvbihzZWxmLCBw
YXRoLCByZXZpc2lvbik6CiAgICAgICAgICMgV2UgdXNlIC0teG1sIHRvIGdldCB0aW1lc3RhbXBz
IGxpa2UgMjAxMy0wMi0wOFQwODoxODowNC45NjQ0MDlaCiAgICAgICAgIHJlcG9zaXRvcnlfcm9v
dCA9IHNlbGYudmFsdWVfZnJvbV9zdm5faW5mbyhzZWxmLmNoZWNrb3V0X3Jvb3QsICdSZXBvc2l0
b3J5IFJvb3QnKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Bs
YXRmb3JtaW5mby5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0xNDYsNiArMTQ2LDExIEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAg
ICBleGNlcHQ6CiAgICAgICAgICAgICByZXR1cm4gc3lzLm1heGludAogCisgICAgZGVmIGJ1aWxk
X3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnL3Vzci9iaW4vc3dfdmVycycsICct
YnVpbGRWZXJzaW9uJ10sIHJldHVybl9zdGRlcnI9RmFsc2UsIGlnbm9yZV9lcnJvcnM9VHJ1ZSku
cnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiB4Y29kZV9zZGtfdmVyc2lv
bihzZWxmLCBzZGtfbmFtZSk6CiAgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CiAgICAgICAgICAg
ICAjIEFzc3VtZXMgdGhhdCB4Y3J1biBkb2VzIG5vdCB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQg
b24gZmFpbHVyZSAoZS5nLiBTREsgZG9lcyBub3QgZXhpc3QpLgpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9j
ay5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3
IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW0KIAogCiBjbGFzcyBN
b2NrUGxhdGZvcm1JbmZvKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9zX25hbWU9
J21hYycsIG9zX3ZlcnNpb249VmVyc2lvbi5mcm9tX25hbWUoJ1Nub3cgTGVvcGFyZCcpKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgb3NfbmFtZT0nbWFjJywgb3NfdmVyc2lvbj1WZXJzaW9uLmZy
b21fbmFtZSgnSGlnaCBTaWVycmEnKSk6CiAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9zX3Zl
cnNpb24sIFZlcnNpb24pCiAgICAgICAgIHNlbGYub3NfbmFtZSA9IG9zX25hbWUKICAgICAgICAg
c2VsZi5vc192ZXJzaW9uID0gb3NfdmVyc2lvbgpAQCAtNzgsNiArNzgsMTEgQEAgY2xhc3MgTW9j
a1BsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRlZiB0ZXJtaW5hbF93aWR0aChzZWxmKToKICAg
ICAgICAgcmV0dXJuIDgwCiAKKyAgICBkZWYgYnVpbGRfdmVyc2lvbihzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5pc19tYWMoKToKKyAgICAgICAgICAgIHJldHVybiAnMTdBNDA1JworICAgICAgICBy
ZXR1cm4gTm9uZQorCiAgICAgZGVmIHhjb2RlX3Nka192ZXJzaW9uKHNlbGYsIHNka19uYW1lKToK
ICAgICAgICAgcmV0dXJuIFZlcnNpb24oOCwgMSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9yZXN1bHRzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MyBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3Ig
bW9kdWxlIGZpbGVzCisKKyMgS2VlcCB0aGlzIGZpbGUgZnJlZSBvZiBhbnkgY29kZSBvciBpbXBv
cnQgc3RhdGVtZW50cyB0aGF0IGNvdWxkCisjIGNhdXNlIGVpdGhlciBhbiBlcnJvciB0byBvY2N1
ciBvciBhIGxvZyBtZXNzYWdlIHRvIGJlIGxvZ2dlZC4KKyMgVGhpcyBlbnN1cmVzIHRoYXQgY2Fs
bGluZyBjb2RlIGNhbiBpbXBvcnQgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tCisjIHdlYmtpdHB5
IGJlZm9yZSBhbnkgZXJyb3JzIG9yIGxvZyBtZXNzYWdlcyBkdWUgdG8gY29kZSBpbiB0aGlzIGZp
bGUuCisjIEluaXRpYWxpemF0aW9uIGNvZGUgY2FuIGluY2x1ZGUgdGhpbmdzIGxpa2UgdmVyc2lv
bi1jaGVja2luZyBjb2RlIGFuZAorIyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gY29kZS4KKyMKKyMg
V2UgZG8gbm90IGV4ZWN1dGUgYW55IHZlcnNpb24tY2hlY2tpbmcgY29kZSBvciBsb2dnaW5nIGNv
bmZpZ3VyYXRpb24KKyMgY29kZSBpbiB0aGlzIGZpbGUgc28gdGhhdCBjYWxsZXJzIGNhbiBvcHQt
aW4gYXMgdGhleSB3YW50LiAgVGhpcyBhbHNvCisjIGFsbG93cyBkaWZmZXJlbnQgY2FsbGVycyB0
byBjaG9vc2UgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uIGNvZGUsCisjIGFzIG5lY2Vzc2FyeS4K
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IG9wdHBhcnNlCisKKworZGVmIHVwbG9hZF9vcHRpb25zKCk6Cisg
ICAgcmV0dXJuIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcmVwb3J0JywgYWN0
aW9uPSdhcHBlbmQnLCBkZXN0PSdyZXBvcnRfdXJscycsIGhlbHA9J1VSTCAob3IgVVJMcykgdG8g
cmVwb3J0IHRlc3QgcmVzdWx0cyB0bycpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1idWlsZGJvdC1tYXN0ZXInLCBoZWxwPSdUaGUgdXJsIG9mIHRoZSBidWlsZGJvdCBtYXN0ZXIu
JyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkZXItbmFtZScsIGhlbHA9
J1RoZSBuYW1lIG9mIHRoZSBidWlsZGJvdCBidWlsZGVyIHRlc3RzIHdlcmUgcnVuIG9uLicpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZC1udW1iZXInLCBoZWxwPSdUaGUg
YnVpbGRib3QgYnVpbGQgbnVtYmVyIHRlc3RzIGFyZSBhc3NvY2lhdGVkIHdpdGguJyksCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkYm90LXdvcmtlcicsIGhlbHA9J1RoZSBi
dWlsZGJvdCB3b3JrZXIgdGVzdHMgd2VyZSBydW4gb24uJyksCisgICAgXQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5CShub25leGlzdGVudCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxODkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5yZXF1ZXN0cworCitpbXBvcnQg
anNvbgoraW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBwbGF0Zm9ybSBhcyBw
bGF0Zm9ybV8KKworCitjbGFzcyBVcGxvYWQob2JqZWN0KToKKyAgICBVUExPQURfRU5EUE9JTlQg
PSAnL2FwaS91cGxvYWQnCisgICAgQlVJTERCT1RfREVUQUlMUyA9IFsnYnVpbGRib3QtbWFzdGVy
JywgJ2J1aWxkZXItbmFtZScsICdidWlsZC1udW1iZXInLCAnYnVpbGRib3Qtd29ya2VyJ10KKyAg
ICBWRVJTSU9OID0gMAorCisgICAgY2xhc3MgRXhwZWN0YXRpb25zOgorICAgICAgICAjIFRoZXNl
IGFyZSBvcmRlcmVkIGJ5IHByaW9yaXR5LCBtZWFuaW5nIHRoYXQgYSB0ZXN0IHdoaWNoIGJvdGgg
Y3Jhc2hlcyBhbmQgaGFzCisgICAgICAgICMgYSB3YXJuaW5nIHNob3VsZCBiZSBjb25zaWRlcmVk
IHRvIGhhdmUgY3Jhc2hlZC4KKyAgICAgICAgT1JERVIgPSBbCisgICAgICAgICAgICAnQ1JBU0gn
LAorICAgICAgICAgICAgJ1RJTUVPVVQnLAorICAgICAgICAgICAgJ0lNQUdFJywgICAjIEltYWdl
LWRpZmYKKyAgICAgICAgICAgICdBVURJTycsICAgIyBBdWRpby1kaWZmCisgICAgICAgICAgICAn
VEVYVCcsICAgICMgVGV4dC1kaWZmCisgICAgICAgICAgICAnRkFJTCcsCisgICAgICAgICAgICAn
RVJST1InLAorICAgICAgICAgICAgJ1dBUk5JTkcnLAorICAgICAgICAgICAgJ1BBU1MnLAorICAg
ICAgICBdCisgICAgICAgIENSQVNILCBUSU1FT1VULCBJTUFHRSwgQVVESU8sIFRFWFQsIEZBSUws
IEVSUk9SLCBXQVJOSU5HLCBQQVNTID0gT1JERVIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICBwbGF0Zm9ybT1Ob25lLAorICAg
ICAgICAgICAgaXNfc2ltdWxhdG9yPUZhbHNlLAorICAgICAgICAgICAgdmVyc2lvbj1Ob25lLAor
ICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPU5vbmUsCisgICAgICAgICAgICB2ZXJzaW9uX25hbWU9
Tm9uZSwKKyAgICAgICAgICAgIG1vZGVsPU5vbmUsCisgICAgICAgICAgICBzdHlsZT1Ob25lLCAg
ICMgRGVidWcvUHJvZHVjdGlvbi9SZWxlYXNlCisgICAgICAgICAgICBmbGF2b3I9Tm9uZSwgICMg
RHVtcGluZyBncm91bmQgc3VpdGUtd2lkZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgKGllLCBHdWFy
ZE1hbGxvYykKKyAgICAgICAgICAgIHNkaz1Ob25lLAorICAgICAgICApOgorCisgICAgICAgICMg
VGhpcyBkZXZpYXRlcyBzbGlnaHRseSBmcm9tIHRoZSByZXN0IG9mIHdlYmtpdHB5LCBidXQgaXQg
YWxsb3dzIHRoaXMgZmlsZSB0byBiZSBlbnRpcmVseSBwb3J0YWJsZS4KKyAgICAgICAgY29uZmln
ID0gZGljdCgKKyAgICAgICAgICAgIHBsYXRmb3JtPXBsYXRmb3JtIG9yIChwbGF0Zm9ybV8uc3lz
dGVtKCkgaWYgcGxhdGZvcm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVsc2UgJ21hYycpLmxvd2Vy
KCksCisgICAgICAgICAgICBpc19zaW11bGF0b3I9aXNfc2ltdWxhdG9yLAorICAgICAgICAgICAg
dmVyc2lvbj12ZXJzaW9uIG9yIChwbGF0Zm9ybV8ucmVsZWFzZSgpIGlmIHBsYXRmb3JtXy5zeXN0
ZW0oKSAhPSAnRGFyd2luJyBlbHNlIHBsYXRmb3JtXy5tYWNfdmVyKClbMF0pLAorICAgICAgICAg
ICAgYXJjaGl0ZWN0dXJlPWFyY2hpdGVjdHVyZSBvciBwbGF0Zm9ybV8ubWFjaGluZSgpLAorICAg
ICAgICApCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbmZpZy5pdGVyaXRlbXMoKToKKyAg
ICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcigne30gbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uJy5mb3JtYXQoa2V5
KSkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGljdCh2ZXJzaW9uX25hbWU9dmVyc2lvbl9u
YW1lLCBtb2RlbD1tb2RlbCwgc3R5bGU9c3R5bGUsIGZsYXZvcj1mbGF2b3IsIHNkaz1zZGspLml0
ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICAgICAgY29uZmlnW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gY29uZmlnCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9jb21taXQocmVwb3NpdG9yeV9pZD1Ob25lLCBp
ZD1Ob25lLCBicmFuY2g9Tm9uZSk6CisgICAgICAgIGNvbW1pdCA9IGRpY3QocmVwb3NpdG9yeV9p
ZD1yZXBvc2l0b3J5X2lkLCBpZD1pZCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gY29tbWl0
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRlZmluZWQgaW4gYSBjb21taXQnLmZv
cm1hdChrZXkpKQorICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICBjb21taXRbJ2JyYW5j
aCddID0gYnJhbmNoCisgICAgICAgIHJldHVybiBjb21taXQKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgY3JlYXRlX2RldGFpbHMobGluaz1Ob25lLCBvcHRpb25zPU5vbmUsICoqa3dhcmdz
KToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgaWYgbGluazoKKyAg
ICAgICAgICAgIHJlc3VsdFsnbGluayddID0gbGluaworCisgICAgICAgIGlmIG9wdGlvbnM6Cisg
ICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBVcGxvYWQuQlVJTERCT1RfREVUQUlMUzoKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob3B0aW9ucywgZWxlbWVudC5yZXBsYWNlKCctJywg
J18nKSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0W2VsZW1lbnRdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHJl
c3VsdAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfcnVuX3N0YXRzKHN0YXJ0
X3RpbWU9Tm9uZSwgZW5kX3RpbWU9Tm9uZSwgdGVzdHNfc2tpcHBlZD1Ob25lLCAqKmt3YXJncyk6
CisgICAgICAgIHN0YXRzID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgZm9yIGtleSwgdmFsdWUg
aW4gZGljdChzdGFydF90aW1lPXN0YXJ0X3RpbWUsIGVuZF90aW1lPWVuZF90aW1lLCB0ZXN0c19z
a2lwcGVkPXRlc3RzX3NraXBwZWQpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RhdHNba2V5XSA9IHZhbHVlCisgICAgICAg
IHJldHVybiBzdGF0cworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfdGVzdF9y
ZXN1bHQoZXhwZWN0ZWQ9Tm9uZSwgYWN0dWFsPU5vbmUsIGxvZz1Ob25lLCAqKmt3YXJncyk6Cisg
ICAgICAgIHJlc3VsdCA9IGRpY3QoKiprd2FyZ3MpCisKKyAgICAgICAgIyBUZXN0cyB3aGljaCBk
b24ndCBkZWNsYXJlIGV4cGVjdGF0aW9ucyBvciByZXN1bHRzIGFyZSBhc3N1bWVkIHRvIGhhdmUg
cGFzc2VkLgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KGV4cGVjdGVkPWV4cGVjdGVk
LCBhY3R1YWw9YWN0dWFsLCBsb2c9bG9nKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZh
bHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1aXRlPU5vbmUs
IGNvbmZpZ3VyYXRpb249Tm9uZSwgY29tbWl0cz1bXSwgdGltZXN0YW1wPU5vbmUsIGRldGFpbHM9
Tm9uZSwgcnVuX3N0YXRzPU5vbmUsIHJlc3VsdHM9e30pOgorICAgICAgICBzZWxmLnN1aXRlID0g
c3VpdGUKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorICAgICAg
ICBzZWxmLmNvbW1pdHMgPSBjb21taXRzCisgICAgICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0
YW1wCisgICAgICAgIHNlbGYuZGV0YWlscyA9IGRldGFpbHMKKyAgICAgICAgc2VsZi5ydW5fc3Rh
dHMgPSBydW5fc3RhdHMKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gcmVzdWx0cworCisgICAgY2xh
c3MgRW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKToKKworICAgICAgICBkZWYgZGVmYXVsdChzZWxm
LCBvYmopOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIFVwbG9hZCk6CisgICAgICAg
ICAgICAgICAgaWYgbm90IG9iai5zdWl0ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignTm8gc3VpdGUgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKyAgICAgICAg
ICAgICAgICBpZiBub3Qgb2JqLmNvbW1pdHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoJ05vIGNvbW1pdHMgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKworICAg
ICAgICAgICAgICAgIGRldGFpbHMgPSBvYmouZGV0YWlscyBvciBvYmouY3JlYXRlX2RldGFpbHMo
KQorICAgICAgICAgICAgICAgIGJ1aWxkYm90X2FyZ3MgPSBbZGV0YWlscy5nZXQoYXJnLCBOb25l
KSBpcyBOb25lIGZvciBhcmcgaW4gb2JqLkJVSUxEQk9UX0RFVEFJTFNdCisgICAgICAgICAgICAg
ICAgaWYgYW55KGJ1aWxkYm90X2FyZ3MpIGFuZCBub3QgYWxsKGJ1aWxkYm90X2FyZ3MpOgorICAg
ICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBbGwgYnVpbGRib3QgZGV0YWlscyBt
dXN0IGJlIGRlZmluZWQgZm9yIHVwbG9hZCcpCisKKyAgICAgICAgICAgICAgICBkZWYgdW5wYWNr
X3Rlc3QoY3VycmVudCwgcGF0aF90b190ZXN0LCBkYXRhKToKKyAgICAgICAgICAgICAgICAgICAg
aWYgbGVuKHBhdGhfdG9fdGVzdCkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRbcGF0aF90b190ZXN0WzBdXSA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3VycmVudC5nZXQocGF0aF90b190ZXN0WzBd
KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbcGF0aF90b190ZXN0WzBdXSA9IHt9
CisgICAgICAgICAgICAgICAgICAgIHVucGFja190ZXN0KGN1cnJlbnRbcGF0aF90b190ZXN0WzBd
XSwgcGF0aF90b190ZXN0WzE6XSwgZGF0YSkKKworICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB7
fQorICAgICAgICAgICAgICAgIGZvciB0ZXN0LCBkYXRhIGluIG9iai5yZXN1bHRzLml0ZXJpdGVt
cygpOgorICAgICAgICAgICAgICAgICAgICB1bnBhY2tfdGVzdChyZXN1bHRzLCB0ZXN0LnNwbGl0
KCcvJyksIGRhdGEpCisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkaWN0KAorICAgICAgICAg
ICAgICAgICAgICB2ZXJzaW9uPW9iai5WRVJTSU9OLAorICAgICAgICAgICAgICAgICAgICBzdWl0
ZT1vYmouc3VpdGUsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249b2JqLmNvbmZp
Z3VyYXRpb24gb3Igb2JqLmNyZWF0ZV9jb25maWd1cmF0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgIGNvbW1pdHM9b2JqLmNvbW1pdHMsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0
cz1kaWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscz1kZXRhaWxzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcnVuX3N0YXRzPW9iai5ydW5fc3RhdHMgb3Igb2JqLmNyZWF0ZV9y
dW5fc3RhdHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHM9cmVzdWx0cywKKyAg
ICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAg
aWYgb2JqLnRpbWVzdGFtcDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wyd0aW1lc3RhbXAn
XSA9IG9iai50aW1lc3RhbXAKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAg
ICAgICByZXR1cm4gc3VwZXIoVXBsb2FkLkVuY29kZXIsIHNlbGYpLmRlZmF1bHQob2JqKQorCisg
ICAgZGVmIHVwbG9hZChzZWxmLCB1cmwsIGxvZ19saW5lPWxhbWJkYSB2YWw6IHN5cy5zdGRvdXQu
d3JpdGUodmFsICsgJ1xuJykpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwb25zZSA9
IHJlcXVlc3RzLnBvc3QodXJsICsgc2VsZi5VUExPQURfRU5EUE9JTlQsIGRhdGE9anNvbi5kdW1w
cyhzZWxmLCBjbHM9VXBsb2FkLkVuY29kZXIpKQorICAgICAgICBleGNlcHQgcmVxdWVzdHMuZXhj
ZXB0aW9ucy5Db25uZWN0aW9uRXJyb3I6CisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsg
J0ZhaWxlZCB0byB1cGxvYWQgdG8ge30sIHJlc3VsdHMgc2VydmVyIG5vdCBvbmxpbmUnLmZvcm1h
dCh1cmwpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVy
cm9yIGFzIGU6CisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ0ZhaWxlZCB0byBlbmNv
ZGUgdXBsb2FkIGRhdGE6IHt9Jy5mb3JtYXQoZSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICBs
b2dfbGluZSgnICcgKiA0ICsgJ0Vycm9yIHVwbG9hZGluZyB0byB7fTonLmZvcm1hdCh1cmwpKQor
ICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogOCArIHJlc3BvbnNlLmpzb24oKVsnZGVzY3JpcHRp
b24nXSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGxvZ19saW5lKCcgJyAq
IDQgKyAnVXBsb2FkZWQgcmVzdWx0cyB0byB7fScuZm9ybWF0KHVybCkpCisgICAgICAgIHJldHVy
biBUcnVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxv
YWRfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9y
ZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxNSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgd2Via2l0
cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnJlcXVlc3RzCisKK2ltcG9ydCBjb2xsZWN0aW9u
cworaW1wb3J0IGpzb24KK2ltcG9ydCBtb2NrCitpbXBvcnQgcmVxdWVzdHMKK2ltcG9ydCB0aW1l
CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5yZXN1bHRzLnVwbG9hZCBpbXBvcnQg
VXBsb2FkCisKKworY2xhc3MgVXBsb2FkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBj
bGFzcyBPcHRpb25zKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJn
cyk6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2FyZ3MuaXRlcml0ZW1zKCk6Cisg
ICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbHVlKQorCisgICAgY2xhc3MgTW9j
a1Jlc3BvbnNlKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0dXNfY29k
ZT0yMDAsIHRleHQ9JycpOgorICAgICAgICAgICAgc2VsZi5zdGF0dXNfY29kZSA9IHN0YXR1c19j
b2RlCisgICAgICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisKKyAgICAgICAgZGVmIGpzb24oc2Vs
Zik6CisgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhzZWxmLnRleHQpCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIG5vcm1hbGl6ZShkYXRhKToKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShkYXRhLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBzdHIoZGF0YSkKKyAgICAg
ICAgZWxpZiBpc2luc3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLk1hcHBpbmcpOgorICAgICAgICAg
ICAgcmV0dXJuIGRpY3QobWFwKFVwbG9hZFRlc3Qubm9ybWFsaXplLCBkYXRhLml0ZXJpdGVtcygp
KSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKToK
KyAgICAgICAgICAgIHJldHVybiB0eXBlKGRhdGEpKG1hcChVcGxvYWRUZXN0Lm5vcm1hbGl6ZSwg
ZGF0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVm
IHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHN0YXJ0X3RpbWUsIGVuZF90aW1lID0gdGlt
ZS50aW1lKCkgLSAzLCB0aW1lLnRpbWUoKQorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAg
ICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29uZmlndXJhdGlv
bj1VcGxvYWQuY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICAgICAgcGxhdGZvcm09
J21hYycsCisgICAgICAgICAgICAgICAgdmVyc2lvbj0nMTAuMTMuMCcsCisgICAgICAgICAgICAg
ICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJyYScsCisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0
dXJlPSd4ODZfNjQnLAorICAgICAgICAgICAgICAgIHNkaz0nMTdBNDA1JywKKyAgICAgICAgICAg
ICksCisgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhsaW5rPSdodHRw
czovL3dlYmtpdC5vcmcnKSwKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29t
bWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAg
ICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAg
ICAgKV0sCisgICAgICAgICAgICBydW5fc3RhdHM9VXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisg
ICAgICAgICAgICAgICAgc3RhcnRfdGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgICAgIGVu
ZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwKKyAgICAg
ICAgICAgICksCisgICAgICAgICAgICByZXN1bHRzPXsKKyAgICAgICAgICAgICAgICAnd2Via2l0
cHkudGVzdDEnOiB7fSwKKyAgICAgICAgICAgICAgICAnd2Via2l0cHkudGVzdDInOiBVcGxvYWQu
Y3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0
dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgICAgICB9LAorICAgICAgICAp
CisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29u
LmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKSkpCisKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndmVyc2lvbiddLCAwKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGdlbmVyYXRlZF9kaWN0WydzdWl0ZSddLCAnd2Via2l0cHktdGVzdHMnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wydjb25maWd1cmF0aW9uJ10sIHNlbGYu
bm9ybWFsaXplKGRpY3QoCisgICAgICAgICAgICBwbGF0Zm9ybT0nbWFjJywKKyAgICAgICAgICAg
IGlzX3NpbXVsYXRvcj1GYWxzZSwKKyAgICAgICAgICAgIHZlcnNpb249JzEwLjEzLjAnLAorICAg
ICAgICAgICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJyYScsCisgICAgICAgICAgICBhcmNoaXRl
Y3R1cmU9J3g4Nl82NCcsCisgICAgICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICkpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wydjb21taXRzJ10sIFtkaWN0
KAorICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgIGlkPSc1
JywKKyAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICApXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwg
c2VsZi5ub3JtYWxpemUoZGljdChsaW5rPSdodHRwczovL3dlYmtpdC5vcmcnKSkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydydW5fc3Rh
dHMnXSwgc2VsZi5ub3JtYWxpemUoZGljdCgKKyAgICAgICAgICAgIHN0YXJ0X3RpbWU9c3RhcnRf
dGltZSwKKyAgICAgICAgICAgIGVuZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgdGVzdHNf
c2tpcHBlZD0wLAorICAgICAgICApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0
ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAg
ICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisgICAgICAgICAgICAnd2Via2l0cHkudGVz
dDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlv
bnMuUEFTUywgYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgIH0pKQor
CisgICAgZGVmIHRlc3RfdXBsb2FkKHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisg
ICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1b
VXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Vi
a2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0
cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAgKQorCisgICAgICAgIHdpdGggbW9jay5w
YXRjaCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNw
b25zZSgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cGxvYWQudXBsb2FkKCdodHRw
czovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAg
ICAgICBkZWYgcmFpc2VfZXhjZXB0aW9uKHVybCwgZGF0YSk6CisgICAgICAgICAgICByYWlzZSBy
ZXF1ZXN0cy5leGNlcHRpb25zLkNvbm5lY3Rpb25FcnJvcigpCisKKyAgICAgICAgd2l0aCBtb2Nr
LnBhdGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PXJhaXNlX2V4Y2VwdGlvbik6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHVwbG9hZC51cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1
bHRzJywgbG9nX2xpbmU9bGFtYmRhIF86IE5vbmUpKQorCisgICAgICAgIHdpdGggbW9jay5wYXRj
aCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNwb25z
ZSgKKyAgICAgICAgICAgIHN0YXR1c19jb2RlPTQwNCwKKyAgICAgICAgICAgIHRleHQ9anNvbi5k
dW1wcyhkaWN0KGRlc2NyaXB0aW9uPSdObyBzdWNoIGFkZHJlc3MnKSksCisgICAgICAgICkpOgor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dlYmtp
dC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAgIGRlZiB0ZXN0
X3BhY2tlZF90ZXN0KHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAg
ICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNy
ZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAg
ICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisg
ICAgICAgICAgICApXSwKKyAgICAgICAgICAgIHJlc3VsdHM9eworICAgICAgICAgICAgICAgICdk
aXIxL3N1Yi1kaXIxL3Rlc3QxJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBs
b2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90
ZXN0Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlv
bnMuVElNRU9VVCksCisgICAgICAgICAgICAgICAgJ2RpcjEvc3ViLWRpcjIvdGVzdDMnOiB7fSwK
KyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMi90ZXN0NCc6IHt9LAorICAgICAgICAgICAg
ICAgICdkaXIyL3N1Yi1kaXIzL3Rlc3Q1Jzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjIvdGVz
dDYnOiB7fSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGlj
dCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxv
YWQuRW5jb2RlcikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0
ZXN0X3Jlc3VsdHMnXVsncmVzdWx0cyddLCBzZWxmLm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAn
ZGlyMSc6IHsKKyAgICAgICAgICAgICAgICAnc3ViLWRpcjEnOiB7CisgICAgICAgICAgICAgICAg
ICAgICd0ZXN0MSc6IHsnYWN0dWFsJzogVXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMfSwKKyAgICAg
ICAgICAgICAgICAgICAgJ3Rlc3QyJzogeydhY3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLlRJ
TUVPVVR9LAorICAgICAgICAgICAgICAgIH0sICdzdWItZGlyMic6IHsKKyAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3QzJzoge30sCisgICAgICAgICAgICAgICAgICAgICd0ZXN0NCc6IHt9LAorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sICdkaXIyJzogeworICAgICAgICAgICAgICAg
ICdzdWItZGlyMyc6IHsndGVzdDUnOiB7fX0sCisgICAgICAgICAgICAgICAgJ3Rlc3Q2Jzoge30s
CisgICAgICAgICAgICB9LAorICAgICAgICB9KSkKKworICAgIGRlZiB0ZXN0X25vX3N1aXRlKHNl
bGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBjb21taXRzPVtVcGxv
YWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQn
LAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5r
JywKKyAgICAgICAgICAgICldLAorICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVw
bG9hZC5FbmNvZGVyKQorCisgICAgZGVmIHRlc3Rfbm9fY29tbWl0cyhzZWxmKToKKyAgICAgICAg
dXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAg
ICAgICAgKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAg
ICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRl
ZiB0ZXN0X2J1aWxkYm90KHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAg
ICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2Fk
LmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywK
KyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycs
CisgICAgICAgICAgICApXSwKKyAgICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRh
aWxzKG9wdGlvbnM9c2VsZi5PcHRpb25zKAorICAgICAgICAgICAgICAgIGJ1aWxkYm90X21hc3Rl
cj0nd2Via2l0Lm9yZycsCisgICAgICAgICAgICAgICAgYnVpbGRlcl9uYW1lPSdRdWV1ZS0xJywK
KyAgICAgICAgICAgICAgICBidWlsZF9udW1iZXI9MSwKKyAgICAgICAgKSkpCisgICAgICAgIHdp
dGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBz
KHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQorCisgICAgICAgIHVwbG9hZC5kZXRhaWxzWydi
dWlsZGJvdC13b3JrZXInXSA9ICdib3QxMjMnCisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2Vs
Zi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNv
ZGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVz
dWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICdidWlsZGJv
dC1tYXN0ZXInOiAnd2Via2l0Lm9yZycsCisgICAgICAgICAgICAnYnVpbGRlci1uYW1lJzogJ1F1
ZXVlLTEnLAorICAgICAgICAgICAgJ2J1aWxkLW51bWJlcic6IDEsCisgICAgICAgICAgICAnYnVp
bGRib3Qtd29ya2VyJzogJ2JvdDEyMycsCisgICAgICAgIH0pKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L21haW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90ZXN0L21haW4ucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGVzdC9tYWluLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCiAjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBK
ZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCi0jIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzgsMTcgKzM4LDE5IEBAIGltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCB1bml0dGVzdAog
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ubG9ndXRpbHMgaW1wb3J0IGNvbmZpZ3VyZV9s
b2dnaW5nCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVj
dXRpdmUsIFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZl
IGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0
ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1o
b3N0IGltcG9ydCBTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBI
b3N0CiBmcm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBDb25maWcKIGZyb20gd2Via2l0
cHkudGVzdC5maW5kZXIgaW1wb3J0IEZpbmRlcgogZnJvbSB3ZWJraXRweS50ZXN0LnByaW50ZXIg
aW1wb3J0IFByaW50ZXIKIGZyb20gd2Via2l0cHkudGVzdC5ydW5uZXIgaW1wb3J0IFJ1bm5lciwg
dW5pdF90ZXN0X25hbWUKK2Zyb20gd2Via2l0cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVwbG9h
ZAorZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9wdGlvbnMgaW1wb3J0IHVwbG9hZF9vcHRpb25zCiAK
IF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAotX2hvc3QgPSBTeXN0ZW1Ib3N0
KCkKK19ob3N0ID0gSG9zdCgpCiBfd2Via2l0X3Jvb3QgPSBOb25lCiAKIApAQCAtMTI0LDEyICsx
MjYsMTUgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIHBhcnNlciA9IG9wdHBhcnNl
Lk9wdGlvblBhcnNlcih1c2FnZT0ndXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBbYXJncy4uLl0nKQog
CiAgICAgICAgICMgIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbmx5IGVmZmVjdCB0aGUgYnVpbGRp
bmcgb2YgbGxkYldlYktpdFRlc3Rlci4KLSAgICAgICAgY29uZmlndXJhdGlvbl9ncm91cCA9IG9w
dHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgJ0NvbmZpZ3VyYXRpb24gb3B0aW9ucycpCi0gICAg
ICAgIGNvbmZpZ3VyYXRpb25fZ3JvdXAuYWRkX29wdGlvbignLS1kZWJ1ZycsIGFjdGlvbj0nc3Rv
cmVfY29uc3QnLCBjb25zdD0nRGVidWcnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKLSAgICAgICAg
ICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBEZWJ1ZycpCi0gICAgICAgIGNvbmZp
Z3VyYXRpb25fZ3JvdXAuYWRkX29wdGlvbignLS1yZWxlYXNlJywgYWN0aW9uPSdzdG9yZV9jb25z
dCcsIGNvbnN0PSdSZWxlYXNlJywgZGVzdD0iY29uZmlndXJhdGlvbiIsCi0gICAgICAgICAgICBo
ZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gUmVsZWFzZScpCi0gICAgICAgIHBhcnNlci5h
ZGRfb3B0aW9uX2dyb3VwKGNvbmZpZ3VyYXRpb25fZ3JvdXApCisgICAgICAgIGZvciBncm91cF9u
YW1lLCBncm91cF9vcHRpb25zIGluIHsnVXBsb2FkIE9wdGlvbnMnOiB1cGxvYWRfb3B0aW9ucygp
LCAnQ29uZmlndXJhdGlvbiBPcHRpb25zJzogWworICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oJy0tZGVidWcnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J0RlYnVnJywgZGVz
dD0iY29uZmlndXJhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gRGVidWcnKSwKKyAgICAgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCctLXJlbGVhc2UnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Jl
bGVhc2UnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBSZWxlYXNlJyksCisgICAgICAg
IF19Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgb3B0aW9uX2dyb3VwID0gb3B0cGFyc2UuT3B0
aW9uR3JvdXAocGFyc2VyLCBncm91cF9uYW1lKQorICAgICAgICAgICAgb3B0aW9uX2dyb3VwLmFk
ZF9vcHRpb25zKGdyb3VwX29wdGlvbnMpCisgICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9n
cm91cChvcHRpb25fZ3JvdXApCiAKICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1hJywgJy0t
YWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0ncnVuIGFsbCB0aGUgdGVzdHMnKQpAQCAtMTgxLDExICsxODYsMTIg
QEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0
eSBpbXBvcnQgYXV0b2luc3RhbGxfZXZlcnl0aGluZwogICAgICAgICBhdXRvaW5zdGFsbF9ldmVy
eXRoaW5nKCkKIAorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgY29u
ZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIuZmlsZXN5c3RlbSkKKyAg
ICAgICAgY29uZmlndXJhdGlvbl90b191c2UgPSBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24g
b3IgY29uZmlnLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAgICAgICAgIGlmIHdpbGxfcnVuX2xs
ZGJfd2Via2l0X3Rlc3RzOgogICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgn
QnVpbGRpbmcgbGxkYldlYktpdFRlc3RlciAuLi4nKQogICAgICAgICAgICAgYnVpbGRfbGxkYndl
YmtpdHRlc3RlciA9IHNlbGYuZmluZGVyLmZpbGVzeXN0ZW0uam9pbihfd2Via2l0X3Jvb3QsICdU
b29scycsICdTY3JpcHRzJywgJ2J1aWxkLWxsZGJ3ZWJraXR0ZXN0ZXInKQotICAgICAgICAgICAg
Y29uZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIuZmlsZXN5c3RlbSkK
LSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25fdG9fdXNlID0gc2VsZi5fb3B0aW9ucy5jb25maWd1
cmF0aW9uIG9yIGNvbmZpZy5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQogICAgICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgICAgIF9ob3N0LmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwo
W2J1aWxkX2xsZGJ3ZWJraXR0ZXN0ZXIsIGNvbmZpZy5mbGFnX2Zvcl9jb25maWd1cmF0aW9uKGNv
bmZpZ3VyYXRpb25fdG9fdXNlKV0sIHF1aWV0PShub3QgYm9vbChzZWxmLl9vcHRpb25zLnZlcmJv
c2UpKSkKICAgICAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciBhcyBlOgpAQCAtMjE4LDYgKzIy
NCw3IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICB0ZXN0X3J1bm5lciA9IFJ1bm5l
cihzZWxmLnByaW50ZXIsIGxvYWRlcikKICAgICAgICAgdGVzdF9ydW5uZXIucnVuKHBhcmFsbGVs
X3Rlc3RzLCBzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykKICAgICAgICAgdGVzdF9ydW5u
ZXIucnVuKHNlcmlhbF90ZXN0cywgMSkKKyAgICAgICAgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQog
CiAgICAgICAgIHNlbGYucHJpbnRlci5wcmludF9yZXN1bHQodGltZS50aW1lKCkgLSBzdGFydCkK
IApAQCAtMjMyLDkgKzIzOSw1MCBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKICAgICAgICAgICAgIGNvdi5zdG9wKCkKICAgICAgICAg
ICAgIGNvdi5zYXZlKCkKKworICAgICAgICBmYWlsZWRfdXBsb2FkcyA9IDAKKyAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5yZXBvcnRfdXJsczoKKyAgICAgICAgICAgIHNlbGYucHJpbnRlci5tZXRl
ci53cml0ZWxuKCdcbicpCisgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKCdQ
cmVwYXJpbmcgdXBsb2FkIGRhdGEgLi4uJykKKworICAgICAgICAgICAgcmVzdWx0cyA9IHt0ZXN0
OiB7fSBmb3IgdGVzdCBpbiB0ZXN0X3J1bm5lci50ZXN0c19ydW59CisgICAgICAgICAgICBmb3Ig
dGVzdCwgZXJyb3JzIGluIHRlc3RfcnVubmVyLmVycm9yczoKKyAgICAgICAgICAgICAgICByZXN1
bHRzW3Rlc3RdID0gVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4cGVj
dGF0aW9ucy5FUlJPUiwgbG9nPScvbicuam9pbihlcnJvcnMpKQorICAgICAgICAgICAgZm9yIHRl
c3QsIGZhaWx1cmVzIGluIHRlc3RfcnVubmVyLmZhaWx1cmVzOgorICAgICAgICAgICAgICAgIHJl
c3VsdHNbdGVzdF0gPSBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhw
ZWN0YXRpb25zLkZBSUwsIGxvZz0nL24nLmpvaW4oZmFpbHVyZXMpKQorCisgICAgICAgICAgICBf
aG9zdC5pbml0aWFsaXplX3NjbSgpCisgICAgICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAg
ICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgICAgICBjb25m
aWd1cmF0aW9uPVVwbG9hZC5jcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgICAgICAg
ICAgcGxhdGZvcm09X2hvc3QucGxhdGZvcm0ub3NfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
dmVyc2lvbj1zdHIoX2hvc3QucGxhdGZvcm0ub3NfdmVyc2lvbiksCisgICAgICAgICAgICAgICAg
ICAgIHZlcnNpb25fbmFtZT1faG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uX25hbWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgc3R5bGU9Y29uZmlndXJhdGlvbl90b191c2UsCisgICAgICAgICAgICAg
ICAgICAgIHNkaz1faG9zdC5wbGF0Zm9ybS5idWlsZF92ZXJzaW9uKCksCisgICAgICAgICAgICAg
ICAgKSwKKyAgICAgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhvcHRp
b25zPXNlbGYuX29wdGlvbnMpLAorICAgICAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVh
dGVfY29tbWl0KAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAor
ICAgICAgICAgICAgICAgICAgICBpZD1faG9zdC5zY20oKS5uYXRpdmVfcmV2aXNpb24oX3dlYmtp
dF9yb290KSwKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoPV9ob3N0LnNjbSgpLm5hdGl2ZV9i
cmFuY2goX3dlYmtpdF9yb290KSwKKyAgICAgICAgICAgICAgICApXSwKKyAgICAgICAgICAgICAg
ICBydW5fc3RhdHM9VXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisgICAgICAgICAgICAgICAgICAg
IHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgZW5kX3RpbWU9ZW5k
X3RpbWUsCisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9bGVuKHRlc3RfcnVubmVy
LnRlc3RzX3J1bikgLSBsZW4ocGFyYWxsZWxfdGVzdHMpIC0gbGVuKHNlcmlhbF90ZXN0cyksCisg
ICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICByZXN1bHRzPXJlc3VsdHMsCisgICAg
ICAgICAgICApCisgICAgICAgICAgICBmb3IgdXJsIGluIHNlbGYuX29wdGlvbnMucmVwb3J0X3Vy
bHM6CisgICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgnVXBsb2FkaW5n
IHRvIHt9IC4uLicuZm9ybWF0KHVybCkpCisgICAgICAgICAgICAgICAgZmFpbGVkX3VwbG9hZHMg
PSBmYWlsZWRfdXBsb2FkcyBpZiB1cGxvYWQudXBsb2FkKHVybCwgbG9nX2xpbmU9c2VsZi5wcmlu
dGVyLm1ldGVyLndyaXRlbG4pIGVsc2UgKGZhaWxlZF91cGxvYWRzICsgMSkKKyAgICAgICAgICAg
IHNlbGYucHJpbnRlci5tZXRlci53cml0ZWxuKCdVcGxvYWRzIGNvbXBsZXRlZCEnKQorCisgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMuY292ZXJhZ2U6CiAgICAgICAgICAgICBjb3YucmVwb3J0KHNo
b3dfbWlzc2luZz1GYWxzZSkKIAotICAgICAgICByZXR1cm4gbm90IHNlbGYucHJpbnRlci5udW1f
ZXJyb3JzIGFuZCBub3Qgc2VsZi5wcmludGVyLm51bV9mYWlsdXJlcworICAgICAgICByZXR1cm4g
bm90IHNlbGYucHJpbnRlci5udW1fZXJyb3JzIGFuZCBub3Qgc2VsZi5wcmludGVyLm51bV9mYWls
dXJlcyBhbmQgbm90IGZhaWxlZF91cGxvYWRzCiAKICAgICBkZWYgX2NoZWNrX2ltcG9ydHMoc2Vs
ZiwgbmFtZXMpOgogICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0L3J1bm5lci5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L3J1bm5lci5weQkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBjbGFzcyBSdW5uZXIob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJpbnRlciwg
bG9hZGVyKToKICAgICAgICAgc2VsZi5wcmludGVyID0gcHJpbnRlcgogICAgICAgICBzZWxmLmxv
YWRlciA9IGxvYWRlcgotICAgICAgICBzZWxmLnRlc3RzX3J1biA9IDAKKyAgICAgICAgc2VsZi50
ZXN0c19ydW4gPSBbXQogICAgICAgICBzZWxmLmVycm9ycyA9IFtdCiAgICAgICAgIHNlbGYuZmFp
bHVyZXMgPSBbXQogICAgICAgICBzZWxmLndvcmtlcl9mYWN0b3J5ID0gbGFtYmRhIGNhbGxlcjog
X1dvcmtlcihjYWxsZXIsIHNlbGYubG9hZGVyKQpAQCAtNjAsNyArNjAsNyBAQCBjbGFzcyBSdW5u
ZXIob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYucHJpbnRlci5wcmludF9zdGFydGVkX3Rlc3Qo
c291cmNlLCB0ZXN0X25hbWUpCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBzZWxmLnRl
c3RzX3J1biArPSAxCisgICAgICAgIHNlbGYudGVzdHNfcnVuLmFwcGVuZCh0ZXN0X25hbWUpCiAg
ICAgICAgIGlmIGZhaWx1cmVzOgogICAgICAgICAgICAgc2VsZi5mYWlsdXJlcy5hcHBlbmQoKHRl
c3RfbmFtZSwgZmFpbHVyZXMpKQogICAgICAgICBpZiBlcnJvcnM6CkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0Mjky
MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDYgQEAgY2xhc3MgUnVubmVyVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCd0ZXN0MyAoRm9vKScsICdF
JywgJ3Rlc3QzXG5lcnJlZCcpKQogICAgICAgICBydW5uZXIgPSBSdW5uZXIoUHJpbnRlcihzdHJl
YW0sIG9wdGlvbnMpLCBsb2FkZXIpCiAgICAgICAgIHJ1bm5lci5ydW4oWydGb28udGVzdDEnLCAn
Rm9vLnRlc3QyJywgJ0Zvby50ZXN0MyddLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1
bm5lci50ZXN0c19ydW4sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJ1bm5lci50
ZXN0c19ydW4pLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5uZXIuZmFpbHVy
ZXMpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5uZXIuZXJyb3JzKSwgMSkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkJ
KHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9f
X2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw4IEBAIGNsYXNzIEF1dG9p
bnN0YWxsSW1wb3J0SG9vayhvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9weXRl
c3RfdGltZW91dCgpCiAgICAgICAgIGVsaWYgJy5weXRlc3QnIGluIGZ1bGxuYW1lOgogICAgICAg
ICAgICAgc2VsZi5faW5zdGFsbF9weXRlc3QoKQorICAgICAgICBlbGlmICcucmVxdWVzdHMnIGlu
IGZ1bGxuYW1lOgorICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9yZXF1ZXN0cygpCiAKICAgICBk
ZWYgX2luc3RhbGxfbWVjaGFuaXplKHNlbGYpOgogICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRw
czovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL20vbWVjaGFuaXplL21l
Y2hhbml6ZS0wLjIuNS50YXIuZ3oiLApAQCAtMTYxLDYgKzE2MywxMCBAQCBjbGFzcyBBdXRvaW5z
dGFsbEltcG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9m
aWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2EyL2VjLzQxNWQwY2NjYzFlZDQxY2Q3ZmRm
NjlhZDk4OWRhMTZhOGQxMzA1Nzk5NjM3MTAwNGNhYjRiYWZjNDhmMy9weXRlc3QtMy42LjIudGFy
Lmd6IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRlc3QtMy42LjIvc3JjL3B5
dGVzdC5weSIpCiAKKyAgICBkZWYgX2luc3RhbGxfcmVxdWVzdHMoc2VsZik6CisgICAgICAgIHNl
bGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy81Mi8y
Yy81MTRlNGFjMjVkYTJiMDhjYTVhNDY0YzUwNDYzNjgyMTI2Mzg1YzQyNzJjMTgxOTM4NzZlOTFm
NGJjMzgvcmVxdWVzdHMtMi4yMS4wLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJyZXF1ZXN0cy0yLjIxLjAvcmVxdWVzdHMiKQorCiAgICAgZGVmIF9pbnN0YWxsX3B5bGlu
dChzZWxmKToKICAgICAgICAgc2VsZi5fZW5zdXJlX2F1dG9pbnN0YWxsZWRfZGlyX2lzX2luX3N5
c19wYXRoKCkKICAgICAgICAgaWYgKG5vdCBzZWxmLl9mcy5leGlzdHMoc2VsZi5fZnMuam9pbihf
QVVUT0lOU1RBTExFRF9ESVIsICJweWxpbnQiKSkgb3IKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVlc191bml0dGVzdC5weQkocmV2
aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1
ZXVlc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMTgzLDEwICsxODMsMTAgQEAgY2xh
c3MgUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0KENvbW1hbmRzVAogICAgICAgICBxdWV1ZS5fb3B0
aW9ucyA9IE1vY2soKQogICAgICAgICBxdWV1ZS5fb3B0aW9ucy5wb3J0ID0gTm9uZQogICAgICAg
ICBwYXRjaCA9IHF1ZXVlLl90b29sLmJ1Z3MuZmV0Y2hfYXR0YWNobWVudCgxMDAwMSkKLSAgICAg
ICAgZXhwZWN0ZWRfbG9ncyA9ICIiIk1PQ0sgYWRkX2F0dGFjaG1lbnRfdG9fYnVnOiBidWdfaWQ9
NTAwMDAsIGRlc2NyaXB0aW9uPUFyY2hpdmUgb2YgbGF5b3V0LXRlc3QtcmVzdWx0cyBmcm9tIGJv
dCBmb3IgbWFjLXNub3dsZW9wYXJkIGZpbGVuYW1lPWxheW91dC10ZXN0LXJlc3VsdHMuemlwIG1p
bWV0eXBlPU5vbmUKKyAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICIiIk1PQ0sgYWRkX2F0dGFjaG1l
bnRfdG9fYnVnOiBidWdfaWQ9NTAwMDAsIGRlc2NyaXB0aW9uPUFyY2hpdmUgb2YgbGF5b3V0LXRl
c3QtcmVzdWx0cyBmcm9tIGJvdCBmb3IgbWFjLWhpZ2hzaWVycmEgZmlsZW5hbWU9bGF5b3V0LXRl
c3QtcmVzdWx0cy56aXAgbWltZXR5cGU9Tm9uZQogLS0gQmVnaW4gY29tbWVudCAtLQogVGhlIGF0
dGFjaGVkIHRlc3QgZmFpbHVyZXMgd2VyZSBzZWVuIHdoaWxlIHJ1bm5pbmcgcnVuLXdlYmtpdC10
ZXN0cyBvbiB0aGUgbW9jay1xdWV1ZS4KLVBvcnQ6IG1hYy1zbm93bGVvcGFyZCAgUGxhdGZvcm06
IE1vY2tQbGF0Zm9ybSAxLjAKK1BvcnQ6IG1hYy1oaWdoc2llcnJhICBQbGF0Zm9ybTogTW9ja1Bs
YXRmb3JtIDEuMAogLS0gRW5kIGNvbW1lbnQgLS0KICIiIgogICAgICAgICBPdXRwdXRDYXB0dXJl
KCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcXVldWUuX3VwbG9hZF9yZXN1bHRzX2FyY2hpdmVfZm9y
X3BhdGNoLCBbcGF0Y2gsIE1vY2soKV0sIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0ZWRfbG9ncykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364800</attachid>
            <date>2019-03-15 08:31:08 -0700</date>
            <delta_ts>2019-03-15 08:53:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190315083107.patch</filename>
            <type>text/plain</type>
            <size>61180</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0Mjk3OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE5LTAzLTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6Cisg
ICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOiBBZGQgcmVxdWVzdHMg
YXV0by1pbnN0YWxsLgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxsX3Jl
cXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBs
b2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGlu
Zy4KKwogMjAxOS0wMy0xNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgTW92ZSBJREIgc3RvcmFnZSBpbiBwcml2YXRlIGJyb3dzaW5nIG1vZGUgdG8gTmV0d29y
a1Byb2Nlc3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18u
cHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5p
dF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKKyMgUmVxdWlyZWQgZm9yIFB5
dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCisjIEtlZXAg
dGhpcyBmaWxlIGZyZWUgb2YgYW55IGNvZGUgb3IgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBjb3Vs
ZAorIyBjYXVzZSBlaXRoZXIgYW4gZXJyb3IgdG8gb2NjdXIgb3IgYSBsb2cgbWVzc2FnZSB0byBi
ZSBsb2dnZWQuCisjIFRoaXMgZW5zdXJlcyB0aGF0IGNhbGxpbmcgY29kZSBjYW4gaW1wb3J0IGlu
aXRpYWxpemF0aW9uIGNvZGUgZnJvbQorIyB3ZWJraXRweSBiZWZvcmUgYW55IGVycm9ycyBvciBs
b2cgbWVzc2FnZXMgZHVlIHRvIGNvZGUgaW4gdGhpcyBmaWxlLgorIyBJbml0aWFsaXphdGlvbiBj
b2RlIGNhbiBpbmNsdWRlIHRoaW5ncyBsaWtlIHZlcnNpb24tY2hlY2tpbmcgY29kZSBhbmQKKyMg
bG9nZ2luZyBjb25maWd1cmF0aW9uIGNvZGUuCisjCisjIFdlIGRvIG5vdCBleGVjdXRlIGFueSB2
ZXJzaW9uLWNoZWNraW5nIGNvZGUgb3IgbG9nZ2luZyBjb25maWd1cmF0aW9uCisjIGNvZGUgaW4g
dGhpcyBmaWxlIHNvIHRoYXQgY2FsbGVycyBjYW4gb3B0LWluIGFzIHRoZXkgd2FudC4gIFRoaXMg
YWxzbworIyBhbGxvd3MgZGlmZmVyZW50IGNhbGxlcnMgdG8gY2hvb3NlIGRpZmZlcmVudCBpbml0
aWFsaXphdGlvbiBjb2RlLAorIyBhcyBuZWNlc3NhcnkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMz
IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcHRw
YXJzZQorCisKK2RlZiB1cGxvYWRfb3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJlcG9ydCcsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0ncmVw
b3J0X3VybHMnLCBoZWxwPSdVUkwgKG9yIFVSTHMpIHRvIHJlcG9ydCB0ZXN0IHJlc3VsdHMgdG8n
KSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRib3QtbWFzdGVyJywgaGVs
cD0nVGhlIHVybCBvZiB0aGUgYnVpbGRib3QgbWFzdGVyLicpLAorICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbignLS1idWlsZGVyLW5hbWUnLCBoZWxwPSdUaGUgbmFtZSBvZiB0aGUgYnVpbGRi
b3QgYnVpbGRlciB0ZXN0cyB3ZXJlIHJ1biBvbi4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oJy0tYnVpbGQtbnVtYmVyJywgaGVscD0nVGhlIGJ1aWxkYm90IGJ1aWxkIG51bWJlciB0
ZXN0cyBhcmUgYXNzb2NpYXRlZCB3aXRoLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bignLS1idWlsZGJvdC13b3JrZXInLCBoZWxwPSdUaGUgYnVpbGRib3Qgd29ya2VyIHRlc3RzIHdl
cmUgcnVuIG9uLicpLAorICAgIF0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0
cy91cGxvYWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRz
L3VwbG9hZC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3Vs
dHMvdXBsb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg5IEBACisjIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5
LmF1dG9pbnN0YWxsZWQucmVxdWVzdHMKKworaW1wb3J0IGpzb24KK2ltcG9ydCByZXF1ZXN0cwor
aW1wb3J0IHN5cworCitpbXBvcnQgcGxhdGZvcm0gYXMgcGxhdGZvcm1fCisKKworY2xhc3MgVXBs
b2FkKG9iamVjdCk6CisgICAgVVBMT0FEX0VORFBPSU5UID0gJy9hcGkvdXBsb2FkJworICAgIEJV
SUxEQk9UX0RFVEFJTFMgPSBbJ2J1aWxkYm90LW1hc3RlcicsICdidWlsZGVyLW5hbWUnLCAnYnVp
bGQtbnVtYmVyJywgJ2J1aWxkYm90LXdvcmtlciddCisgICAgVkVSU0lPTiA9IDAKKworICAgIGNs
YXNzIEV4cGVjdGF0aW9uczoKKyAgICAgICAgIyBUaGVzZSBhcmUgb3JkZXJlZCBieSBwcmlvcml0
eSwgbWVhbmluZyB0aGF0IGEgdGVzdCB3aGljaCBib3RoIGNyYXNoZXMgYW5kIGhhcworICAgICAg
ICAjIGEgd2FybmluZyBzaG91bGQgYmUgY29uc2lkZXJlZCB0byBoYXZlIGNyYXNoZWQuCisgICAg
ICAgIE9SREVSID0gWworICAgICAgICAgICAgJ0NSQVNIJywKKyAgICAgICAgICAgICdUSU1FT1VU
JywKKyAgICAgICAgICAgICdJTUFHRScsICAgIyBJbWFnZS1kaWZmCisgICAgICAgICAgICAnQVVE
SU8nLCAgICMgQXVkaW8tZGlmZgorICAgICAgICAgICAgJ1RFWFQnLCAgICAjIFRleHQtZGlmZgor
ICAgICAgICAgICAgJ0ZBSUwnLAorICAgICAgICAgICAgJ0VSUk9SJywKKyAgICAgICAgICAgICdX
QVJOSU5HJywKKyAgICAgICAgICAgICdQQVNTJywKKyAgICAgICAgXQorICAgICAgICBDUkFTSCwg
VElNRU9VVCwgSU1BR0UsIEFVRElPLCBURVhULCBGQUlMLCBFUlJPUiwgV0FSTklORywgUEFTUyA9
IE9SREVSCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9jb25maWd1cmF0aW9u
KAorICAgICAgICAgICAgcGxhdGZvcm09Tm9uZSwKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1G
YWxzZSwKKyAgICAgICAgICAgIHZlcnNpb249Tm9uZSwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVy
ZT1Ob25lLAorICAgICAgICAgICAgdmVyc2lvbl9uYW1lPU5vbmUsCisgICAgICAgICAgICBtb2Rl
bD1Ob25lLAorICAgICAgICAgICAgc3R5bGU9Tm9uZSwgICAjIERlYnVnL1Byb2R1Y3Rpb24vUmVs
ZWFzZQorICAgICAgICAgICAgZmxhdm9yPU5vbmUsICAjIER1bXBpbmcgZ3JvdW5kIHN1aXRlLXdp
ZGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIChpZSwgR3VhcmRNYWxsb2MpCisgICAgICAgICAgICBz
ZGs9Tm9uZSwKKyAgICAgICAgKToKKworICAgICAgICAjIFRoaXMgZGV2aWF0ZXMgc2xpZ2h0bHkg
ZnJvbSB0aGUgcmVzdCBvZiB3ZWJraXRweSwgYnV0IGl0IGFsbG93cyB0aGlzIGZpbGUgdG8gYmUg
ZW50aXJlbHkgcG9ydGFibGUuCisgICAgICAgIGNvbmZpZyA9IGRpY3QoCisgICAgICAgICAgICBw
bGF0Zm9ybT1wbGF0Zm9ybSBvciAocGxhdGZvcm1fLnN5c3RlbSgpIGlmIHBsYXRmb3JtXy5zeXN0
ZW0oKSAhPSAnRGFyd2luJyBlbHNlICdtYWMnKS5sb3dlcigpLAorICAgICAgICAgICAgaXNfc2lt
dWxhdG9yPWlzX3NpbXVsYXRvciwKKyAgICAgICAgICAgIHZlcnNpb249dmVyc2lvbiBvciAocGxh
dGZvcm1fLnJlbGVhc2UoKSBpZiBwbGF0Zm9ybV8uc3lzdGVtKCkgIT0gJ0RhcndpbicgZWxzZSBw
bGF0Zm9ybV8ubWFjX3ZlcigpWzBdKSwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVyZT1hcmNoaXRl
Y3R1cmUgb3IgcGxhdGZvcm1fLm1hY2hpbmUoKSwKKyAgICAgICAgKQorICAgICAgICBmb3Iga2V5
LCB2YWx1ZSBpbiBjb25maWcuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBO
b25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IG11c3QgYmUgZGVmaW5l
ZCBpbiB0aGUgY29uZmlndXJhdGlvbicuZm9ybWF0KGtleSkpCisgICAgICAgIGZvciBrZXksIHZh
bHVlIGluIGRpY3QodmVyc2lvbl9uYW1lPXZlcnNpb25fbmFtZSwgbW9kZWw9bW9kZWwsIHN0eWxl
PXN0eWxlLCBmbGF2b3I9Zmxhdm9yLCBzZGs9c2RrKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAg
IGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNvbmZpZ1trZXldID0gdmFs
dWUKKyAgICAgICAgcmV0dXJuIGNvbmZpZworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBj
cmVhdGVfY29tbWl0KHJlcG9zaXRvcnlfaWQ9Tm9uZSwgaWQ9Tm9uZSwgYnJhbmNoPU5vbmUpOgor
ICAgICAgICBjb21taXQgPSBkaWN0KHJlcG9zaXRvcnlfaWQ9cmVwb3NpdG9yeV9pZCwgaWQ9aWQp
CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbW1pdC5pdGVyaXRlbXMoKToKKyAgICAgICAg
ICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
e30gbXVzdCBiZSBkZWZpbmVkIGluIGEgY29tbWl0Jy5mb3JtYXQoa2V5KSkKKyAgICAgICAgaWYg
YnJhbmNoOgorICAgICAgICAgICAgY29tbWl0WydicmFuY2gnXSA9IGJyYW5jaAorICAgICAgICBy
ZXR1cm4gY29tbWl0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9kZXRhaWxz
KGxpbms9Tm9uZSwgb3B0aW9ucz1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHJlc3VsdCA9IGRp
Y3QoKiprd2FyZ3MpCisgICAgICAgIGlmIGxpbms6CisgICAgICAgICAgICByZXN1bHRbJ2xpbmsn
XSA9IGxpbmsKKworICAgICAgICBpZiBvcHRpb25zOgorICAgICAgICAgICAgZm9yIGVsZW1lbnQg
aW4gVXBsb2FkLkJVSUxEQk9UX0RFVEFJTFM6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRh
dHRyKG9wdGlvbnMsIGVsZW1lbnQucmVwbGFjZSgnLScsICdfJyksIE5vbmUpCisgICAgICAgICAg
ICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtl
bGVtZW50XSA9IHZhbHVlCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgY3JlYXRlX3J1bl9zdGF0cyhzdGFydF90aW1lPU5vbmUsIGVuZF90aW1lPU5v
bmUsIHRlc3RzX3NraXBwZWQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzdGF0cyA9IGRpY3Qo
Kiprd2FyZ3MpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRpY3Qoc3RhcnRfdGltZT1zdGFy
dF90aW1lLCBlbmRfdGltZT1lbmRfdGltZSwgdGVzdHNfc2tpcHBlZD10ZXN0c19za2lwcGVkKS5p
dGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIHN0YXRzW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gc3RhdHMKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPU5vbmUsIGFj
dHVhbD1Ob25lLCBsb2c9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCoq
a3dhcmdzKQorCisgICAgICAgICMgVGVzdHMgd2hpY2ggZG9uJ3QgZGVjbGFyZSBleHBlY3RhdGlv
bnMgb3IgcmVzdWx0cyBhcmUgYXNzdW1lZCB0byBoYXZlIHBhc3NlZC4KKyAgICAgICAgZm9yIGtl
eSwgdmFsdWUgaW4gZGljdChleHBlY3RlZD1leHBlY3RlZCwgYWN0dWFsPWFjdHVhbCwgbG9nPWxv
ZykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiByZXN1bHQKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWl0ZT1Ob25lLCBjb25maWd1cmF0aW9uPU5vbmUsIGNv
bW1pdHM9W10sIHRpbWVzdGFtcD1Ob25lLCBkZXRhaWxzPU5vbmUsIHJ1bl9zdGF0cz1Ob25lLCBy
ZXN1bHRzPXt9KToKKyAgICAgICAgc2VsZi5zdWl0ZSA9IHN1aXRlCisgICAgICAgIHNlbGYuY29u
ZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VsZi5jb21taXRzID0gY29tbWl0
cworICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcAorICAgICAgICBzZWxmLmRldGFp
bHMgPSBkZXRhaWxzCisgICAgICAgIHNlbGYucnVuX3N0YXRzID0gcnVuX3N0YXRzCisgICAgICAg
IHNlbGYucmVzdWx0cyA9IHJlc3VsdHMKKworICAgIGNsYXNzIEVuY29kZXIoanNvbi5KU09ORW5j
b2Rlcik6CisKKyAgICAgICAgZGVmIGRlZmF1bHQoc2VsZiwgb2JqKToKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2Uob2JqLCBVcGxvYWQpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvYmouc3Vp
dGU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIHN1aXRlIHNwZWNp
ZmllZCB0byByZXN1bHRzIHVwbG9hZCcpCisgICAgICAgICAgICAgICAgaWYgbm90IG9iai5jb21t
aXRzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBjb21taXRzIHNw
ZWNpZmllZCB0byByZXN1bHRzIHVwbG9hZCcpCisKKyAgICAgICAgICAgICAgICBkZXRhaWxzID0g
b2JqLmRldGFpbHMgb3Igb2JqLmNyZWF0ZV9kZXRhaWxzKCkKKyAgICAgICAgICAgICAgICBidWls
ZGJvdF9hcmdzID0gW2RldGFpbHMuZ2V0KGFyZywgTm9uZSkgaXMgTm9uZSBmb3IgYXJnIGluIG9i
ai5CVUlMREJPVF9ERVRBSUxTXQorICAgICAgICAgICAgICAgIGlmIGFueShidWlsZGJvdF9hcmdz
KSBhbmQgbm90IGFsbChidWlsZGJvdF9hcmdzKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcignQWxsIGJ1aWxkYm90IGRldGFpbHMgbXVzdCBiZSBkZWZpbmVkIGZvciB1cGxv
YWQnKQorCisgICAgICAgICAgICAgICAgZGVmIHVucGFja190ZXN0KGN1cnJlbnQsIHBhdGhfdG9f
dGVzdCwgZGF0YSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYXRoX3RvX3Rlc3QpID09
IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0gPSBk
YXRhCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAg
aWYgbm90IGN1cnJlbnQuZ2V0KHBhdGhfdG9fdGVzdFswXSk6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0gPSB7fQorICAgICAgICAgICAgICAgICAgICB1
bnBhY2tfdGVzdChjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0sIHBhdGhfdG9fdGVzdFsxOl0sIGRh
dGEpCisKKyAgICAgICAgICAgICAgICByZXN1bHRzID0ge30KKyAgICAgICAgICAgICAgICBmb3Ig
dGVzdCwgZGF0YSBpbiBvYmoucmVzdWx0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAg
ICAgdW5wYWNrX3Rlc3QocmVzdWx0cywgdGVzdC5zcGxpdCgnLycpLCBkYXRhKQorCisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gZGljdCgKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj1vYmou
VkVSU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgc3VpdGU9b2JqLnN1aXRlLAorICAgICAgICAg
ICAgICAgICAgICBjb25maWd1cmF0aW9uPW9iai5jb25maWd1cmF0aW9uIG9yIG9iai5jcmVhdGVf
Y29uZmlndXJhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBjb21taXRzPW9iai5jb21taXRz
LAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHM9ZGljdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRldGFpbHM9ZGV0YWlscywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9z
dGF0cz1vYmoucnVuX3N0YXRzIG9yIG9iai5jcmVhdGVfcnVuX3N0YXRzKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRzPXJlc3VsdHMsCisgICAgICAgICAgICAgICAgICAgICksCisg
ICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGlmIG9iai50aW1lc3RhbXA6CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFsndGltZXN0YW1wJ10gPSBvYmoudGltZXN0YW1wCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFVwbG9h
ZC5FbmNvZGVyLCBzZWxmKS5kZWZhdWx0KG9iaikKKworICAgIGRlZiB1cGxvYWQoc2VsZiwgdXJs
LCBsb2dfbGluZT1sYW1iZGEgdmFsOiBzeXMuc3Rkb3V0LndyaXRlKHZhbCArICdcbicpKToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wb3N0KHVybCArIHNl
bGYuVVBMT0FEX0VORFBPSU5ULCBkYXRhPWpzb24uZHVtcHMoc2VsZiwgY2xzPVVwbG9hZC5FbmNv
ZGVyKSkKKyAgICAgICAgZXhjZXB0IHJlcXVlc3RzLmV4Y2VwdGlvbnMuQ29ubmVjdGlvbkVycm9y
OgorICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdGYWlsZWQgdG8gdXBsb2FkIHRvIHt9
LCByZXN1bHRzIHNlcnZlciBub3Qgb25saW5lJy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAg
bG9nX2xpbmUoJyAnICogNCArICdGYWlsZWQgdG8gZW5jb2RlIHVwbG9hZCBkYXRhOiB7fScuZm9y
bWF0KGUpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgcmVzcG9uc2Uu
c3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdFcnJv
ciB1cGxvYWRpbmcgdG8ge306Jy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgIGxvZ19saW5lKCcg
JyAqIDggKyByZXNwb25zZS5qc29uKClbJ2Rlc2NyaXB0aW9uJ10pCisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ1VwbG9hZGVkIHJlc3VsdHMg
dG8ge30nLmZvcm1hdCh1cmwpKQorICAgICAgICByZXR1cm4gVHJ1ZQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWRfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3Rh
bGxlZC5yZXF1ZXN0cworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBqc29uCitpbXBvcnQg
bW9jaworaW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zy
b20gd2Via2l0cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVwbG9hZAorCisKK2NsYXNzIFVwbG9h
ZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgT3B0aW9ucyhvYmplY3QpOgor
ICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAgICAgZm9yIGtl
eSwgdmFsdWUgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIo
c2VsZiwga2V5LCB2YWx1ZSkKKworICAgIGNsYXNzIE1vY2tSZXNwb25zZShvYmplY3QpOgorICAg
ICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzX2NvZGU9MjAwLCB0ZXh0PScnKToKKyAgICAg
ICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSBzdGF0dXNfY29kZQorICAgICAgICAgICAgc2VsZi50
ZXh0ID0gdGV4dAorCisgICAgICAgIGRlZiBqc29uKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJu
IGpzb24ubG9hZHMoc2VsZi50ZXh0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBub3Jt
YWxpemUoZGF0YSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgYmFzZXN0cmluZyk6Cisg
ICAgICAgICAgICByZXR1cm4gc3RyKGRhdGEpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkYXRh
LCBjb2xsZWN0aW9ucy5NYXBwaW5nKToKKyAgICAgICAgICAgIHJldHVybiBkaWN0KG1hcChVcGxv
YWRUZXN0Lm5vcm1hbGl6ZSwgZGF0YS5pdGVyaXRlbXMoKSkpCisgICAgICAgIGVsaWYgaXNpbnN0
YW5jZShkYXRhLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gdHlw
ZShkYXRhKShtYXAoVXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEpKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgor
ICAgICAgICBzdGFydF90aW1lLCBlbmRfdGltZSA9IHRpbWUudGltZSgpIC0gMywgdGltZS50aW1l
KCkKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5
LXRlc3RzJywKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249VXBsb2FkLmNyZWF0ZV9jb25maWd1
cmF0aW9uKAorICAgICAgICAgICAgICAgIHBsYXRmb3JtPSdtYWMnLAorICAgICAgICAgICAgICAg
IHZlcnNpb249JzEwLjEzLjAnLAorICAgICAgICAgICAgICAgIHZlcnNpb25fbmFtZT0nSGlnaCBT
aWVycmEnLAorICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZT0neDg2XzY0JywKKyAgICAgICAg
ICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgZGV0YWls
cz1VcGxvYWQuY3JlYXRlX2RldGFpbHMobGluaz0naHR0cHM6Ly93ZWJraXQub3JnJyksCisgICAg
ICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICBy
ZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAg
ICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgcnVu
X3N0YXRzPVVwbG9hZC5jcmVhdGVfcnVuX3N0YXRzKAorICAgICAgICAgICAgICAgIHN0YXJ0X3Rp
bWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICBlbmRfdGltZT1lbmRfdGltZSwKKyAgICAg
ICAgICAgICAgICB0ZXN0c19za2lwcGVkPTAsCisgICAgICAgICAgICApLAorICAgICAgICAgICAg
cmVzdWx0cz17CisgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisgICAgICAg
ICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChleHBl
Y3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25z
LkZBSUwpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGlj
dCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxv
YWQuRW5jb2RlcikpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3Rb
J3ZlcnNpb24nXSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsn
c3VpdGUnXSwgJ3dlYmtpdHB5LXRlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5l
cmF0ZWRfZGljdFsnY29uZmlndXJhdGlvbiddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KAorICAgICAg
ICAgICAgcGxhdGZvcm09J21hYycsCisgICAgICAgICAgICBpc19zaW11bGF0b3I9RmFsc2UsCisg
ICAgICAgICAgICB2ZXJzaW9uPScxMC4xMy4wJywKKyAgICAgICAgICAgIHZlcnNpb25fbmFtZT0n
SGlnaCBTaWVycmEnLAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPSd4ODZfNjQnLAorICAgICAg
ICAgICAgc2RrPScxN0E0MDUnLAorICAgICAgICApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChnZW5lcmF0ZWRfZGljdFsnY29tbWl0cyddLCBbZGljdCgKKyAgICAgICAgICAgIHJlcG9zaXRv
cnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICBicmFuY2g9
J3RydW5rJywKKyAgICAgICAgKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVk
X2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9ybWFsaXplKGRpY3QobGlu
az0naHR0cHM6Ly93ZWJraXQub3JnJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVy
YXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncnVuX3N0YXRzJ10sIHNlbGYubm9ybWFsaXplKGRp
Y3QoCisgICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAgICAgICAgICBlbmRf
dGltZT1lbmRfdGltZSwKKyAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwKKyAgICAgICAgKSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cydd
WydyZXN1bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICd3ZWJraXRweS50ZXN0
MSc6IHt9LAorICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0
X3Jlc3VsdChleHBlY3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFjdHVhbD1VcGxvYWQu
RXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICB9KSkKKworICAgIGRlZiB0ZXN0X3VwbG9hZChz
ZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtp
dHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAor
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAg
aWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0s
CisgICAgICAgICkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBu
ZXc9bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoKSk6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydFRydWUodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMn
LCBsb2dfbGluZT1sYW1iZGEgXzogTm9uZSkpCisKKyAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlv
bih1cmwsIGRhdGEpOgorICAgICAgICAgICAgcmFpc2UgcmVxdWVzdHMuZXhjZXB0aW9ucy5Db25u
ZWN0aW9uRXJyb3IoKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVzdHMucG9zdCcs
IG5ldz1yYWlzZV9leGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxv
YWQudXBsb2FkKCdodHRwczovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBf
OiBOb25lKSkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBuZXc9
bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoCisgICAgICAgICAgICBzdGF0dXNf
Y29kZT00MDQsCisgICAgICAgICAgICB0ZXh0PWpzb24uZHVtcHMoZGljdChkZXNjcmlwdGlvbj0n
Tm8gc3VjaCBhZGRyZXNzJykpLAorICAgICAgICApKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMnLCBsb2dfbGlu
ZT1sYW1iZGEgXzogTm9uZSkpCisKKyAgICBkZWYgdGVzdF9wYWNrZWRfdGVzdChzZWxmKToKKyAg
ICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3Rz
JywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAg
ICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAor
ICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAg
ICAgICByZXN1bHRzPXsKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90ZXN0MSc6IFVw
bG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCks
CisgICAgICAgICAgICAgICAgJ2RpcjEvc3ViLWRpcjEvdGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rl
c3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLlRJTUVPVVQpLAorICAgICAgICAg
ICAgICAgICdkaXIxL3N1Yi1kaXIyL3Rlc3QzJzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjEv
c3ViLWRpcjIvdGVzdDQnOiB7fSwKKyAgICAgICAgICAgICAgICAnZGlyMi9zdWItZGlyMy90ZXN0
NSc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIyL3Rlc3Q2Jzoge30sCisgICAgICAgICAgICB9
CisgICAgICAgICkKKyAgICAgICAgZ2VuZXJhdGVkX2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29u
LmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMn
XSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAgJ2RpcjEnOiB7CisgICAgICAgICAgICAg
ICAgJ3N1Yi1kaXIxJzogeworICAgICAgICAgICAgICAgICAgICAndGVzdDEnOiB7J2FjdHVhbCc6
IFVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTH0sCisgICAgICAgICAgICAgICAgICAgICd0ZXN0Mic6
IHsnYWN0dWFsJzogVXBsb2FkLkV4cGVjdGF0aW9ucy5USU1FT1VUfSwKKyAgICAgICAgICAgICAg
ICB9LCAnc3ViLWRpcjInOiB7CisgICAgICAgICAgICAgICAgICAgICd0ZXN0Myc6IHt9LAorICAg
ICAgICAgICAgICAgICAgICAndGVzdDQnOiB7fSwKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9LCAnZGlyMic6IHsKKyAgICAgICAgICAgICAgICAnc3ViLWRpcjMnOiB7J3Rlc3Q1Jzog
e319LAorICAgICAgICAgICAgICAgICd0ZXN0Nic6IHt9LAorICAgICAgICAgICAgfSwKKyAgICAg
ICAgfSkpCisKKyAgICBkZWYgdGVzdF9ub19zdWl0ZShzZWxmKToKKyAgICAgICAgdXBsb2FkID0g
VXBsb2FkKAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0n
NScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAg
ICAgICAgKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAg
ICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRl
ZiB0ZXN0X25vX2NvbW1pdHMoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAg
ICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICkKKyAgICAgICAgd2l0aCBz
ZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBs
b2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICBkZWYgdGVzdF9idWlsZGJvdChzZWxmKToK
KyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRl
c3RzJywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAg
ICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUn
LAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAg
ICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhvcHRpb25zPXNlbGYuT3B0aW9u
cygKKyAgICAgICAgICAgICAgICBidWlsZGJvdF9tYXN0ZXI9J3dlYmtpdC5vcmcnLAorICAgICAg
ICAgICAgICAgIGJ1aWxkZXJfbmFtZT0nUXVldWUtMScsCisgICAgICAgICAgICAgICAgYnVpbGRf
bnVtYmVyPTEsCisgICAgICAgICkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZh
bHVlRXJyb3IpOgorICAgICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5j
b2RlcikKKworICAgICAgICB1cGxvYWQuZGV0YWlsc1snYnVpbGRib3Qtd29ya2VyJ10gPSAnYm90
MTIzJworICAgICAgICBnZW5lcmF0ZWRfZGljdCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMo
anNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsnZGV0YWlscyddLCBzZWxm
Lm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAnYnVpbGRib3QtbWFzdGVyJzogJ3dlYmtpdC5vcmcn
LAorICAgICAgICAgICAgJ2J1aWxkZXItbmFtZSc6ICdRdWV1ZS0xJywKKyAgICAgICAgICAgICdi
dWlsZC1udW1iZXInOiAxLAorICAgICAgICAgICAgJ2J1aWxkYm90LXdvcmtlcic6ICdib3QxMjMn
LAorICAgICAgICB9KSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9naXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY2hlY2tvdXQvc2NtL2dpdC5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MjkwLDYgKzI5MCwxNCBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYg
bmF0aXZlX3JldmlzaW9uKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dp
dChbJy1DJywgc2VsZi5maW5kX2NoZWNrb3V0X3Jvb3QocGF0aCksICdsb2cnLCAnLTEnLCAnLS1w
cmV0dHk9Zm9ybWF0OiVIJ10pCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBwYXRoKToK
KyAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX2dpdChbJy1DJywgc2VsZi5maW5kX2NoZWNrb3V0
X3Jvb3QocGF0aCksICdyZXYtcGFyc2UnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQnXSkucnN0cmlw
KCkKKworICAgICAgICAjIEZvciBnaXQtc3ZuCisgICAgICAgIGlmIHJlc3VsdC5zdGFydHN3aXRo
KCdoZWFkcycpOgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFs2Ol0KKyAgICAgICAgcmV0dXJu
IHJlc3VsdAorCiAgICAgZGVmIHN2bl91cmwoc2VsZik6CiAgICAgICAgIGdpdF9jb21tYW5kID0g
Wydzdm4nLCAnaW5mbyddCiAgICAgICAgIHN0YXR1cyA9IHNlbGYuX3J1bl9naXQoZ2l0X2NvbW1h
bmQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2Nt
X21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3NjbV9tb2NrLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHkJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDYgKzg3LDkgQEAgY2xhc3MgTW9ja1NDTShvYmplY3QpOgogICAgIGRlZiBuYXRpdmVf
cmV2aXNpb24oc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBzZWxmLnN2bl9yZXZpc2lvbihw
YXRoKQogCisgICAgZGVmIG5hdGl2ZV9icmFuY2goc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVy
biAndHJ1bmsnCisKICAgICBkZWYgdGltZXN0YW1wX29mX3JldmlzaW9uKHNlbGYsIHBhdGgsIHJl
dmlzaW9uKToKICAgICAgICAgcmV0dXJuICcyMDEzLTAyLTAxIDA4OjQ4OjA1ICswMDAwJwogCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9zY21fdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTkwOSw2ICs5MDksOSBAQCBFTkQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLnNjbS5oZWFkX3N2bl9yZXZpc2lvbigpLCBzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24oJy4n
KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24oJy4n
KSwgJzUnKQogCisgICAgZGVmIHRlc3RfbmF0aXZlX2JyYW5jaChzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfYnJhbmNoKCcuJyksICd0cnVuaycpCisKICAg
ICBkZWYgdGVzdF9wcm9wc2V0X3Byb3BnZXQoc2VsZik6CiAgICAgICAgIGZpbGVwYXRoID0gb3Mu
cGF0aC5qb2luKHNlbGYuc3ZuX2NoZWNrb3V0X3BhdGgsICJ0ZXN0X2ZpbGUiKQogICAgICAgICBl
eHBlY3RlZF9taW1lX3R5cGUgPSAieC1hcHBsaWNhdGlvbi9mb28tYmFyIgpAQCAtMTExMiw2ICsx
MTE1LDEwIEBAIGNsYXNzIEdpdFRlc3QoU0NNVGVzdCk6CiAgICAgICAgIGNvbW1hbmQgPSBbJ2dp
dCcsICctQycsIHNjbS5jaGVja291dF9yb290LCAncmV2LXBhcnNlJywgJ0hFQUQnXQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNjbS5uYXRpdmVfcmV2aXNpb24oc2NtLmNoZWNrb3V0X3Jvb3Qp
LCBydW5fY29tbWFuZChjb21tYW5kKS5zdHJpcCgpKQogCisgICAgZGVmIHRlc3RfbmF0aXZlX2Jy
YW5jaChzZWxmKToKKyAgICAgICAgc2NtID0gc2VsZi50cmFja2luZ19zY20KKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnbWFzdGVyJywgc2NtLm5hdGl2ZV9icmFuY2goc2NtLmNoZWNrb3V0X3Jv
b3QpKQorCiAgICAgZGVmIHRlc3RfcmVuYW1lX2ZpbGVzKHNlbGYpOgogICAgICAgICBzY20gPSBz
ZWxmLnRyYWNraW5nX3NjbQogCkBAIC0xNjI3LDYgKzE2MzQsOSBAQCBjbGFzcyBHaXRTVk5UZXN0
KFNDTVRlc3QpOgogICAgICAgICBjb21tYW5kID0gWydnaXQnLCAnLUMnLCBzZWxmLmdpdF9jaGVj
a291dF9wYXRoLCAncmV2LXBhcnNlJywgJ0hFQUQnXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuc2NtLm5hdGl2ZV9yZXZpc2lvbihzZWxmLmdpdF9jaGVja291dF9wYXRoKSwgcnVuX2Nv
bW1hbmQoY29tbWFuZCkuc3RyaXAoKSkKIAorICAgIGRlZiB0ZXN0X25hdGl2ZV9icmFuY2goc2Vs
Zik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3RydW5rJywgc2VsZi5zY20ubmF0aXZlX2Jy
YW5jaChzZWxmLmdpdF9jaGVja291dF9wYXRoKSkKKwogICAgIGRlZiB0ZXN0X3RvX29iamVjdF9u
YW1lKHNlbGYpOgogICAgICAgICByZWxwYXRoID0gJ3Rlc3RfZmlsZV9jb21taXQxJwogICAgICAg
ICBmdWxscGF0aCA9IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKHNlbGYuZ2l0X2NoZWNr
b3V0X3BhdGgsIHJlbHBhdGgpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y2hlY2tvdXQvc2NtL3N2bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC04Myw3ICs4Myw3IEBAIGNsYXNzIFNWTihTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgICAg
ICBTQ00uX19pbml0X18oc2VsZiwgY3dkLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5fYm9ndXNf
ZGlyID0gTm9uZQogICAgICAgICBpZiBwYXRjaF9kaXJlY3RvcmllcyA9PSBbXToKLSAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbihtZXNzYWdlPSdFbXB0eSBsaXN0IG9mIHBhdGNoIGRpcmVjdG9y
aWVzIHBhc3NlZCB0byBTQ00uX19pbml0X18nKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCdFbXB0eSBsaXN0IG9mIHBhdGNoIGRpcmVjdG9yaWVzIHBhc3NlZCB0byBTQ00uX19pbml0X18n
KQogICAgICAgICBlbGlmIHBhdGNoX2RpcmVjdG9yaWVzID09IE5vbmU6CiAgICAgICAgICAgICBz
ZWxmLl9wYXRjaF9kaXJlY3RvcmllcyA9IFtzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgoY3dkLCBz
ZWxmLmNoZWNrb3V0X3Jvb3QpXQogICAgICAgICBlbHNlOgpAQCAtMjc4LDYgKzI3OCwxNCBAQCBj
bGFzcyBTVk4oU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYgbmF0aXZlX3JldmlzaW9uKHNl
bGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5zdm5fcmV2aXNpb24ocGF0aCkKIAorICAg
IGRlZiBuYXRpdmVfYnJhbmNoKHNlbGYsIHBhdGgpOgorICAgICAgICByZWxhdGl2ZV91cmwgPSBz
ZWxmLnZhbHVlX2Zyb21fc3ZuX2luZm8ocGF0aCwgJ1JlbGF0aXZlIFVSTCcpWzI6XQorICAgICAg
ICBpZiByZWxhdGl2ZV91cmwuc3RhcnRzd2l0aCgndHJ1bmsnKToKKyAgICAgICAgICAgIHJldHVy
biAndHJ1bmsnCisgICAgICAgIGVsaWYgcmVsYXRpdmVfdXJsLnN0YXJ0c3dpdGgoJ2JyYW5jaCcp
OgorICAgICAgICAgICAgcmV0dXJuIHJlbGF0aXZlX3VybC5zcGxpdCgnLycpWzFdCisgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbigne30gaXMgbm90IGEgYnJhbmNoJy5mb3JtYXQocmVsYXRpdmVfdXJs
LnNwbGl0KCcvJylbMF0pKQorCiAgICAgZGVmIHRpbWVzdGFtcF9vZl9yZXZpc2lvbihzZWxmLCBw
YXRoLCByZXZpc2lvbik6CiAgICAgICAgICMgV2UgdXNlIC0teG1sIHRvIGdldCB0aW1lc3RhbXBz
IGxpa2UgMjAxMy0wMi0wOFQwODoxODowNC45NjQ0MDlaCiAgICAgICAgIHJlcG9zaXRvcnlfcm9v
dCA9IHNlbGYudmFsdWVfZnJvbV9zdm5faW5mbyhzZWxmLmNoZWNrb3V0X3Jvb3QsICdSZXBvc2l0
b3J5IFJvb3QnKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Bs
YXRmb3JtaW5mby5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0xNDYsNiArMTQ2LDExIEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAg
ICBleGNlcHQ6CiAgICAgICAgICAgICByZXR1cm4gc3lzLm1heGludAogCisgICAgZGVmIGJ1aWxk
X3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnL3Vzci9iaW4vc3dfdmVycycsICct
YnVpbGRWZXJzaW9uJ10sIHJldHVybl9zdGRlcnI9RmFsc2UsIGlnbm9yZV9lcnJvcnM9VHJ1ZSku
cnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiB4Y29kZV9zZGtfdmVyc2lv
bihzZWxmLCBzZGtfbmFtZSk6CiAgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CiAgICAgICAgICAg
ICAjIEFzc3VtZXMgdGhhdCB4Y3J1biBkb2VzIG5vdCB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQg
b24gZmFpbHVyZSAoZS5nLiBTREsgZG9lcyBub3QgZXhpc3QpLgpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9j
ay5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3
IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW0KIAogCiBjbGFzcyBN
b2NrUGxhdGZvcm1JbmZvKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9zX25hbWU9
J21hYycsIG9zX3ZlcnNpb249VmVyc2lvbi5mcm9tX25hbWUoJ1Nub3cgTGVvcGFyZCcpKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgb3NfbmFtZT0nbWFjJywgb3NfdmVyc2lvbj1WZXJzaW9uLmZy
b21fbmFtZSgnSGlnaCBTaWVycmEnKSk6CiAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9zX3Zl
cnNpb24sIFZlcnNpb24pCiAgICAgICAgIHNlbGYub3NfbmFtZSA9IG9zX25hbWUKICAgICAgICAg
c2VsZi5vc192ZXJzaW9uID0gb3NfdmVyc2lvbgpAQCAtNzgsNiArNzgsMTEgQEAgY2xhc3MgTW9j
a1BsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRlZiB0ZXJtaW5hbF93aWR0aChzZWxmKToKICAg
ICAgICAgcmV0dXJuIDgwCiAKKyAgICBkZWYgYnVpbGRfdmVyc2lvbihzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5pc19tYWMoKToKKyAgICAgICAgICAgIHJldHVybiAnMTdBNDA1JworICAgICAgICBy
ZXR1cm4gTm9uZQorCiAgICAgZGVmIHhjb2RlX3Nka192ZXJzaW9uKHNlbGYsIHNka19uYW1lKToK
ICAgICAgICAgcmV0dXJuIFZlcnNpb24oOCwgMSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9yZXN1bHRzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MyBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3Ig
bW9kdWxlIGZpbGVzCisKKyMgS2VlcCB0aGlzIGZpbGUgZnJlZSBvZiBhbnkgY29kZSBvciBpbXBv
cnQgc3RhdGVtZW50cyB0aGF0IGNvdWxkCisjIGNhdXNlIGVpdGhlciBhbiBlcnJvciB0byBvY2N1
ciBvciBhIGxvZyBtZXNzYWdlIHRvIGJlIGxvZ2dlZC4KKyMgVGhpcyBlbnN1cmVzIHRoYXQgY2Fs
bGluZyBjb2RlIGNhbiBpbXBvcnQgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tCisjIHdlYmtpdHB5
IGJlZm9yZSBhbnkgZXJyb3JzIG9yIGxvZyBtZXNzYWdlcyBkdWUgdG8gY29kZSBpbiB0aGlzIGZp
bGUuCisjIEluaXRpYWxpemF0aW9uIGNvZGUgY2FuIGluY2x1ZGUgdGhpbmdzIGxpa2UgdmVyc2lv
bi1jaGVja2luZyBjb2RlIGFuZAorIyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gY29kZS4KKyMKKyMg
V2UgZG8gbm90IGV4ZWN1dGUgYW55IHZlcnNpb24tY2hlY2tpbmcgY29kZSBvciBsb2dnaW5nIGNv
bmZpZ3VyYXRpb24KKyMgY29kZSBpbiB0aGlzIGZpbGUgc28gdGhhdCBjYWxsZXJzIGNhbiBvcHQt
aW4gYXMgdGhleSB3YW50LiAgVGhpcyBhbHNvCisjIGFsbG93cyBkaWZmZXJlbnQgY2FsbGVycyB0
byBjaG9vc2UgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uIGNvZGUsCisjIGFzIG5lY2Vzc2FyeS4K
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IG9wdHBhcnNlCisKKworZGVmIHVwbG9hZF9vcHRpb25zKCk6Cisg
ICAgcmV0dXJuIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcmVwb3J0JywgYWN0
aW9uPSdhcHBlbmQnLCBkZXN0PSdyZXBvcnRfdXJscycsIGhlbHA9J1VSTCAob3IgVVJMcykgdG8g
cmVwb3J0IHRlc3QgcmVzdWx0cyB0bycpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1idWlsZGJvdC1tYXN0ZXInLCBoZWxwPSdUaGUgdXJsIG9mIHRoZSBidWlsZGJvdCBtYXN0ZXIu
JyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkZXItbmFtZScsIGhlbHA9
J1RoZSBuYW1lIG9mIHRoZSBidWlsZGJvdCBidWlsZGVyIHRlc3RzIHdlcmUgcnVuIG9uLicpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZC1udW1iZXInLCBoZWxwPSdUaGUg
YnVpbGRib3QgYnVpbGQgbnVtYmVyIHRlc3RzIGFyZSBhc3NvY2lhdGVkIHdpdGguJyksCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkYm90LXdvcmtlcicsIGhlbHA9J1RoZSBi
dWlsZGJvdCB3b3JrZXIgdGVzdHMgd2VyZSBydW4gb24uJyksCisgICAgXQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5CShub25leGlzdGVudCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxODkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5yZXF1ZXN0cworCitpbXBvcnQg
anNvbgoraW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBwbGF0Zm9ybSBhcyBw
bGF0Zm9ybV8KKworCitjbGFzcyBVcGxvYWQob2JqZWN0KToKKyAgICBVUExPQURfRU5EUE9JTlQg
PSAnL2FwaS91cGxvYWQnCisgICAgQlVJTERCT1RfREVUQUlMUyA9IFsnYnVpbGRib3QtbWFzdGVy
JywgJ2J1aWxkZXItbmFtZScsICdidWlsZC1udW1iZXInLCAnYnVpbGRib3Qtd29ya2VyJ10KKyAg
ICBWRVJTSU9OID0gMAorCisgICAgY2xhc3MgRXhwZWN0YXRpb25zOgorICAgICAgICAjIFRoZXNl
IGFyZSBvcmRlcmVkIGJ5IHByaW9yaXR5LCBtZWFuaW5nIHRoYXQgYSB0ZXN0IHdoaWNoIGJvdGgg
Y3Jhc2hlcyBhbmQgaGFzCisgICAgICAgICMgYSB3YXJuaW5nIHNob3VsZCBiZSBjb25zaWRlcmVk
IHRvIGhhdmUgY3Jhc2hlZC4KKyAgICAgICAgT1JERVIgPSBbCisgICAgICAgICAgICAnQ1JBU0gn
LAorICAgICAgICAgICAgJ1RJTUVPVVQnLAorICAgICAgICAgICAgJ0lNQUdFJywgICAjIEltYWdl
LWRpZmYKKyAgICAgICAgICAgICdBVURJTycsICAgIyBBdWRpby1kaWZmCisgICAgICAgICAgICAn
VEVYVCcsICAgICMgVGV4dC1kaWZmCisgICAgICAgICAgICAnRkFJTCcsCisgICAgICAgICAgICAn
RVJST1InLAorICAgICAgICAgICAgJ1dBUk5JTkcnLAorICAgICAgICAgICAgJ1BBU1MnLAorICAg
ICAgICBdCisgICAgICAgIENSQVNILCBUSU1FT1VULCBJTUFHRSwgQVVESU8sIFRFWFQsIEZBSUws
IEVSUk9SLCBXQVJOSU5HLCBQQVNTID0gT1JERVIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICBwbGF0Zm9ybT1Ob25lLAorICAg
ICAgICAgICAgaXNfc2ltdWxhdG9yPUZhbHNlLAorICAgICAgICAgICAgdmVyc2lvbj1Ob25lLAor
ICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPU5vbmUsCisgICAgICAgICAgICB2ZXJzaW9uX25hbWU9
Tm9uZSwKKyAgICAgICAgICAgIG1vZGVsPU5vbmUsCisgICAgICAgICAgICBzdHlsZT1Ob25lLCAg
ICMgRGVidWcvUHJvZHVjdGlvbi9SZWxlYXNlCisgICAgICAgICAgICBmbGF2b3I9Tm9uZSwgICMg
RHVtcGluZyBncm91bmQgc3VpdGUtd2lkZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgKGllLCBHdWFy
ZE1hbGxvYykKKyAgICAgICAgICAgIHNkaz1Ob25lLAorICAgICAgICApOgorCisgICAgICAgICMg
VGhpcyBkZXZpYXRlcyBzbGlnaHRseSBmcm9tIHRoZSByZXN0IG9mIHdlYmtpdHB5LCBidXQgaXQg
YWxsb3dzIHRoaXMgZmlsZSB0byBiZSBlbnRpcmVseSBwb3J0YWJsZS4KKyAgICAgICAgY29uZmln
ID0gZGljdCgKKyAgICAgICAgICAgIHBsYXRmb3JtPXBsYXRmb3JtIG9yIChwbGF0Zm9ybV8uc3lz
dGVtKCkgaWYgcGxhdGZvcm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVsc2UgJ21hYycpLmxvd2Vy
KCksCisgICAgICAgICAgICBpc19zaW11bGF0b3I9aXNfc2ltdWxhdG9yLAorICAgICAgICAgICAg
dmVyc2lvbj12ZXJzaW9uIG9yIChwbGF0Zm9ybV8ucmVsZWFzZSgpIGlmIHBsYXRmb3JtXy5zeXN0
ZW0oKSAhPSAnRGFyd2luJyBlbHNlIHBsYXRmb3JtXy5tYWNfdmVyKClbMF0pLAorICAgICAgICAg
ICAgYXJjaGl0ZWN0dXJlPWFyY2hpdGVjdHVyZSBvciBwbGF0Zm9ybV8ubWFjaGluZSgpLAorICAg
ICAgICApCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbmZpZy5pdGVyaXRlbXMoKToKKyAg
ICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcigne30gbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uJy5mb3JtYXQoa2V5
KSkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGljdCh2ZXJzaW9uX25hbWU9dmVyc2lvbl9u
YW1lLCBtb2RlbD1tb2RlbCwgc3R5bGU9c3R5bGUsIGZsYXZvcj1mbGF2b3IsIHNkaz1zZGspLml0
ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICAgICAgY29uZmlnW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gY29uZmlnCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9jb21taXQocmVwb3NpdG9yeV9pZD1Ob25lLCBp
ZD1Ob25lLCBicmFuY2g9Tm9uZSk6CisgICAgICAgIGNvbW1pdCA9IGRpY3QocmVwb3NpdG9yeV9p
ZD1yZXBvc2l0b3J5X2lkLCBpZD1pZCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gY29tbWl0
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRlZmluZWQgaW4gYSBjb21taXQnLmZv
cm1hdChrZXkpKQorICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICBjb21taXRbJ2JyYW5j
aCddID0gYnJhbmNoCisgICAgICAgIHJldHVybiBjb21taXQKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgY3JlYXRlX2RldGFpbHMobGluaz1Ob25lLCBvcHRpb25zPU5vbmUsICoqa3dhcmdz
KToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgaWYgbGluazoKKyAg
ICAgICAgICAgIHJlc3VsdFsnbGluayddID0gbGluaworCisgICAgICAgIGlmIG9wdGlvbnM6Cisg
ICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBVcGxvYWQuQlVJTERCT1RfREVUQUlMUzoKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob3B0aW9ucywgZWxlbWVudC5yZXBsYWNlKCctJywg
J18nKSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0W2VsZW1lbnRdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHJl
c3VsdAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfcnVuX3N0YXRzKHN0YXJ0
X3RpbWU9Tm9uZSwgZW5kX3RpbWU9Tm9uZSwgdGVzdHNfc2tpcHBlZD1Ob25lLCAqKmt3YXJncyk6
CisgICAgICAgIHN0YXRzID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgZm9yIGtleSwgdmFsdWUg
aW4gZGljdChzdGFydF90aW1lPXN0YXJ0X3RpbWUsIGVuZF90aW1lPWVuZF90aW1lLCB0ZXN0c19z
a2lwcGVkPXRlc3RzX3NraXBwZWQpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RhdHNba2V5XSA9IHZhbHVlCisgICAgICAg
IHJldHVybiBzdGF0cworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfdGVzdF9y
ZXN1bHQoZXhwZWN0ZWQ9Tm9uZSwgYWN0dWFsPU5vbmUsIGxvZz1Ob25lLCAqKmt3YXJncyk6Cisg
ICAgICAgIHJlc3VsdCA9IGRpY3QoKiprd2FyZ3MpCisKKyAgICAgICAgIyBUZXN0cyB3aGljaCBk
b24ndCBkZWNsYXJlIGV4cGVjdGF0aW9ucyBvciByZXN1bHRzIGFyZSBhc3N1bWVkIHRvIGhhdmUg
cGFzc2VkLgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KGV4cGVjdGVkPWV4cGVjdGVk
LCBhY3R1YWw9YWN0dWFsLCBsb2c9bG9nKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZh
bHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1aXRlPU5vbmUs
IGNvbmZpZ3VyYXRpb249Tm9uZSwgY29tbWl0cz1bXSwgdGltZXN0YW1wPU5vbmUsIGRldGFpbHM9
Tm9uZSwgcnVuX3N0YXRzPU5vbmUsIHJlc3VsdHM9e30pOgorICAgICAgICBzZWxmLnN1aXRlID0g
c3VpdGUKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorICAgICAg
ICBzZWxmLmNvbW1pdHMgPSBjb21taXRzCisgICAgICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0
YW1wCisgICAgICAgIHNlbGYuZGV0YWlscyA9IGRldGFpbHMKKyAgICAgICAgc2VsZi5ydW5fc3Rh
dHMgPSBydW5fc3RhdHMKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gcmVzdWx0cworCisgICAgY2xh
c3MgRW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKToKKworICAgICAgICBkZWYgZGVmYXVsdChzZWxm
LCBvYmopOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIFVwbG9hZCk6CisgICAgICAg
ICAgICAgICAgaWYgbm90IG9iai5zdWl0ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignTm8gc3VpdGUgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKyAgICAgICAg
ICAgICAgICBpZiBub3Qgb2JqLmNvbW1pdHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoJ05vIGNvbW1pdHMgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKworICAg
ICAgICAgICAgICAgIGRldGFpbHMgPSBvYmouZGV0YWlscyBvciBvYmouY3JlYXRlX2RldGFpbHMo
KQorICAgICAgICAgICAgICAgIGJ1aWxkYm90X2FyZ3MgPSBbZGV0YWlscy5nZXQoYXJnLCBOb25l
KSBpcyBOb25lIGZvciBhcmcgaW4gb2JqLkJVSUxEQk9UX0RFVEFJTFNdCisgICAgICAgICAgICAg
ICAgaWYgYW55KGJ1aWxkYm90X2FyZ3MpIGFuZCBub3QgYWxsKGJ1aWxkYm90X2FyZ3MpOgorICAg
ICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBbGwgYnVpbGRib3QgZGV0YWlscyBt
dXN0IGJlIGRlZmluZWQgZm9yIHVwbG9hZCcpCisKKyAgICAgICAgICAgICAgICBkZWYgdW5wYWNr
X3Rlc3QoY3VycmVudCwgcGF0aF90b190ZXN0LCBkYXRhKToKKyAgICAgICAgICAgICAgICAgICAg
aWYgbGVuKHBhdGhfdG9fdGVzdCkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRbcGF0aF90b190ZXN0WzBdXSA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3VycmVudC5nZXQocGF0aF90b190ZXN0WzBd
KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbcGF0aF90b190ZXN0WzBdXSA9IHt9
CisgICAgICAgICAgICAgICAgICAgIHVucGFja190ZXN0KGN1cnJlbnRbcGF0aF90b190ZXN0WzBd
XSwgcGF0aF90b190ZXN0WzE6XSwgZGF0YSkKKworICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB7
fQorICAgICAgICAgICAgICAgIGZvciB0ZXN0LCBkYXRhIGluIG9iai5yZXN1bHRzLml0ZXJpdGVt
cygpOgorICAgICAgICAgICAgICAgICAgICB1bnBhY2tfdGVzdChyZXN1bHRzLCB0ZXN0LnNwbGl0
KCcvJyksIGRhdGEpCisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkaWN0KAorICAgICAgICAg
ICAgICAgICAgICB2ZXJzaW9uPW9iai5WRVJTSU9OLAorICAgICAgICAgICAgICAgICAgICBzdWl0
ZT1vYmouc3VpdGUsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249b2JqLmNvbmZp
Z3VyYXRpb24gb3Igb2JqLmNyZWF0ZV9jb25maWd1cmF0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgIGNvbW1pdHM9b2JqLmNvbW1pdHMsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0
cz1kaWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscz1kZXRhaWxzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcnVuX3N0YXRzPW9iai5ydW5fc3RhdHMgb3Igb2JqLmNyZWF0ZV9y
dW5fc3RhdHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHM9cmVzdWx0cywKKyAg
ICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAg
aWYgb2JqLnRpbWVzdGFtcDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wyd0aW1lc3RhbXAn
XSA9IG9iai50aW1lc3RhbXAKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAg
ICAgICByZXR1cm4gc3VwZXIoVXBsb2FkLkVuY29kZXIsIHNlbGYpLmRlZmF1bHQob2JqKQorCisg
ICAgZGVmIHVwbG9hZChzZWxmLCB1cmwsIGxvZ19saW5lPWxhbWJkYSB2YWw6IHN5cy5zdGRvdXQu
d3JpdGUodmFsICsgJ1xuJykpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwb25zZSA9
IHJlcXVlc3RzLnBvc3QodXJsICsgc2VsZi5VUExPQURfRU5EUE9JTlQsIGRhdGE9anNvbi5kdW1w
cyhzZWxmLCBjbHM9VXBsb2FkLkVuY29kZXIpKQorICAgICAgICBleGNlcHQgcmVxdWVzdHMuZXhj
ZXB0aW9ucy5Db25uZWN0aW9uRXJyb3I6CisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsg
J0ZhaWxlZCB0byB1cGxvYWQgdG8ge30sIHJlc3VsdHMgc2VydmVyIG5vdCBvbmxpbmUnLmZvcm1h
dCh1cmwpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVy
cm9yIGFzIGU6CisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ0ZhaWxlZCB0byBlbmNv
ZGUgdXBsb2FkIGRhdGE6IHt9Jy5mb3JtYXQoZSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICBs
b2dfbGluZSgnICcgKiA0ICsgJ0Vycm9yIHVwbG9hZGluZyB0byB7fTonLmZvcm1hdCh1cmwpKQor
ICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogOCArIHJlc3BvbnNlLmpzb24oKVsnZGVzY3JpcHRp
b24nXSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGxvZ19saW5lKCcgJyAq
IDQgKyAnVXBsb2FkZWQgcmVzdWx0cyB0byB7fScuZm9ybWF0KHVybCkpCisgICAgICAgIHJldHVy
biBUcnVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxv
YWRfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9y
ZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxNSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgd2Via2l0
cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnJlcXVlc3RzCisKK2ltcG9ydCBjb2xsZWN0aW9u
cworaW1wb3J0IGpzb24KK2ltcG9ydCBtb2NrCitpbXBvcnQgcmVxdWVzdHMKK2ltcG9ydCB0aW1l
CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5yZXN1bHRzLnVwbG9hZCBpbXBvcnQg
VXBsb2FkCisKKworY2xhc3MgVXBsb2FkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBj
bGFzcyBPcHRpb25zKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJn
cyk6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2FyZ3MuaXRlcml0ZW1zKCk6Cisg
ICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbHVlKQorCisgICAgY2xhc3MgTW9j
a1Jlc3BvbnNlKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0dXNfY29k
ZT0yMDAsIHRleHQ9JycpOgorICAgICAgICAgICAgc2VsZi5zdGF0dXNfY29kZSA9IHN0YXR1c19j
b2RlCisgICAgICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisKKyAgICAgICAgZGVmIGpzb24oc2Vs
Zik6CisgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhzZWxmLnRleHQpCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIG5vcm1hbGl6ZShkYXRhKToKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShkYXRhLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBzdHIoZGF0YSkKKyAgICAg
ICAgZWxpZiBpc2luc3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLk1hcHBpbmcpOgorICAgICAgICAg
ICAgcmV0dXJuIGRpY3QobWFwKFVwbG9hZFRlc3Qubm9ybWFsaXplLCBkYXRhLml0ZXJpdGVtcygp
KSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKToK
KyAgICAgICAgICAgIHJldHVybiB0eXBlKGRhdGEpKG1hcChVcGxvYWRUZXN0Lm5vcm1hbGl6ZSwg
ZGF0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVm
IHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHN0YXJ0X3RpbWUsIGVuZF90aW1lID0gdGlt
ZS50aW1lKCkgLSAzLCB0aW1lLnRpbWUoKQorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAg
ICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29uZmlndXJhdGlv
bj1VcGxvYWQuY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICAgICAgcGxhdGZvcm09
J21hYycsCisgICAgICAgICAgICAgICAgdmVyc2lvbj0nMTAuMTMuMCcsCisgICAgICAgICAgICAg
ICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJyYScsCisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0
dXJlPSd4ODZfNjQnLAorICAgICAgICAgICAgICAgIHNkaz0nMTdBNDA1JywKKyAgICAgICAgICAg
ICksCisgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhsaW5rPSdodHRw
czovL3dlYmtpdC5vcmcnKSwKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29t
bWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAg
ICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAg
ICAgKV0sCisgICAgICAgICAgICBydW5fc3RhdHM9VXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisg
ICAgICAgICAgICAgICAgc3RhcnRfdGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgICAgIGVu
ZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwKKyAgICAg
ICAgICAgICksCisgICAgICAgICAgICByZXN1bHRzPXsKKyAgICAgICAgICAgICAgICAnd2Via2l0
cHkudGVzdDEnOiB7fSwKKyAgICAgICAgICAgICAgICAnd2Via2l0cHkudGVzdDInOiBVcGxvYWQu
Y3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0
dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgICAgICB9LAorICAgICAgICAp
CisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29u
LmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKSkpCisKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndmVyc2lvbiddLCAwKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGdlbmVyYXRlZF9kaWN0WydzdWl0ZSddLCAnd2Via2l0cHktdGVzdHMnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wydjb25maWd1cmF0aW9uJ10sIHNlbGYu
bm9ybWFsaXplKGRpY3QoCisgICAgICAgICAgICBwbGF0Zm9ybT0nbWFjJywKKyAgICAgICAgICAg
IGlzX3NpbXVsYXRvcj1GYWxzZSwKKyAgICAgICAgICAgIHZlcnNpb249JzEwLjEzLjAnLAorICAg
ICAgICAgICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJyYScsCisgICAgICAgICAgICBhcmNoaXRl
Y3R1cmU9J3g4Nl82NCcsCisgICAgICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICkpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wydjb21taXRzJ10sIFtkaWN0
KAorICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgIGlkPSc1
JywKKyAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICApXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwg
c2VsZi5ub3JtYWxpemUoZGljdChsaW5rPSdodHRwczovL3dlYmtpdC5vcmcnKSkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydydW5fc3Rh
dHMnXSwgc2VsZi5ub3JtYWxpemUoZGljdCgKKyAgICAgICAgICAgIHN0YXJ0X3RpbWU9c3RhcnRf
dGltZSwKKyAgICAgICAgICAgIGVuZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgdGVzdHNf
c2tpcHBlZD0wLAorICAgICAgICApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0
ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAg
ICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisgICAgICAgICAgICAnd2Via2l0cHkudGVz
dDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlv
bnMuUEFTUywgYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgIH0pKQor
CisgICAgZGVmIHRlc3RfdXBsb2FkKHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisg
ICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1b
VXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Vi
a2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0
cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAgKQorCisgICAgICAgIHdpdGggbW9jay5w
YXRjaCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNw
b25zZSgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cGxvYWQudXBsb2FkKCdodHRw
czovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAg
ICAgICBkZWYgcmFpc2VfZXhjZXB0aW9uKHVybCwgZGF0YSk6CisgICAgICAgICAgICByYWlzZSBy
ZXF1ZXN0cy5leGNlcHRpb25zLkNvbm5lY3Rpb25FcnJvcigpCisKKyAgICAgICAgd2l0aCBtb2Nr
LnBhdGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PXJhaXNlX2V4Y2VwdGlvbik6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHVwbG9hZC51cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1
bHRzJywgbG9nX2xpbmU9bGFtYmRhIF86IE5vbmUpKQorCisgICAgICAgIHdpdGggbW9jay5wYXRj
aCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNwb25z
ZSgKKyAgICAgICAgICAgIHN0YXR1c19jb2RlPTQwNCwKKyAgICAgICAgICAgIHRleHQ9anNvbi5k
dW1wcyhkaWN0KGRlc2NyaXB0aW9uPSdObyBzdWNoIGFkZHJlc3MnKSksCisgICAgICAgICkpOgor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dlYmtp
dC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAgIGRlZiB0ZXN0
X3BhY2tlZF90ZXN0KHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAg
ICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNy
ZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAg
ICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisg
ICAgICAgICAgICApXSwKKyAgICAgICAgICAgIHJlc3VsdHM9eworICAgICAgICAgICAgICAgICdk
aXIxL3N1Yi1kaXIxL3Rlc3QxJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBs
b2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90
ZXN0Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlv
bnMuVElNRU9VVCksCisgICAgICAgICAgICAgICAgJ2RpcjEvc3ViLWRpcjIvdGVzdDMnOiB7fSwK
KyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMi90ZXN0NCc6IHt9LAorICAgICAgICAgICAg
ICAgICdkaXIyL3N1Yi1kaXIzL3Rlc3Q1Jzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjIvdGVz
dDYnOiB7fSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGlj
dCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxv
YWQuRW5jb2RlcikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0
ZXN0X3Jlc3VsdHMnXVsncmVzdWx0cyddLCBzZWxmLm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAn
ZGlyMSc6IHsKKyAgICAgICAgICAgICAgICAnc3ViLWRpcjEnOiB7CisgICAgICAgICAgICAgICAg
ICAgICd0ZXN0MSc6IHsnYWN0dWFsJzogVXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMfSwKKyAgICAg
ICAgICAgICAgICAgICAgJ3Rlc3QyJzogeydhY3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLlRJ
TUVPVVR9LAorICAgICAgICAgICAgICAgIH0sICdzdWItZGlyMic6IHsKKyAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3QzJzoge30sCisgICAgICAgICAgICAgICAgICAgICd0ZXN0NCc6IHt9LAorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sICdkaXIyJzogeworICAgICAgICAgICAgICAg
ICdzdWItZGlyMyc6IHsndGVzdDUnOiB7fX0sCisgICAgICAgICAgICAgICAgJ3Rlc3Q2Jzoge30s
CisgICAgICAgICAgICB9LAorICAgICAgICB9KSkKKworICAgIGRlZiB0ZXN0X25vX3N1aXRlKHNl
bGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBjb21taXRzPVtVcGxv
YWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQn
LAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5r
JywKKyAgICAgICAgICAgICldLAorICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVw
bG9hZC5FbmNvZGVyKQorCisgICAgZGVmIHRlc3Rfbm9fY29tbWl0cyhzZWxmKToKKyAgICAgICAg
dXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAg
ICAgICAgKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAg
ICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRl
ZiB0ZXN0X2J1aWxkYm90KHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAg
ICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2Fk
LmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywK
KyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycs
CisgICAgICAgICAgICApXSwKKyAgICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRh
aWxzKG9wdGlvbnM9c2VsZi5PcHRpb25zKAorICAgICAgICAgICAgICAgIGJ1aWxkYm90X21hc3Rl
cj0nd2Via2l0Lm9yZycsCisgICAgICAgICAgICAgICAgYnVpbGRlcl9uYW1lPSdRdWV1ZS0xJywK
KyAgICAgICAgICAgICAgICBidWlsZF9udW1iZXI9MSwKKyAgICAgICAgKSkpCisgICAgICAgIHdp
dGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBz
KHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQorCisgICAgICAgIHVwbG9hZC5kZXRhaWxzWydi
dWlsZGJvdC13b3JrZXInXSA9ICdib3QxMjMnCisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2Vs
Zi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNv
ZGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVz
dWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICdidWlsZGJv
dC1tYXN0ZXInOiAnd2Via2l0Lm9yZycsCisgICAgICAgICAgICAnYnVpbGRlci1uYW1lJzogJ1F1
ZXVlLTEnLAorICAgICAgICAgICAgJ2J1aWxkLW51bWJlcic6IDEsCisgICAgICAgICAgICAnYnVp
bGRib3Qtd29ya2VyJzogJ2JvdDEyMycsCisgICAgICAgIH0pKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L21haW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90ZXN0L21haW4ucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGVzdC9tYWluLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCiAjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBK
ZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCi0jIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzgsMTcgKzM4LDE5IEBAIGltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCB1bml0dGVzdAog
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ubG9ndXRpbHMgaW1wb3J0IGNvbmZpZ3VyZV9s
b2dnaW5nCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVj
dXRpdmUsIFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZl
IGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0
ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1o
b3N0IGltcG9ydCBTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBI
b3N0CiBmcm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBDb25maWcKIGZyb20gd2Via2l0
cHkudGVzdC5maW5kZXIgaW1wb3J0IEZpbmRlcgogZnJvbSB3ZWJraXRweS50ZXN0LnByaW50ZXIg
aW1wb3J0IFByaW50ZXIKIGZyb20gd2Via2l0cHkudGVzdC5ydW5uZXIgaW1wb3J0IFJ1bm5lciwg
dW5pdF90ZXN0X25hbWUKK2Zyb20gd2Via2l0cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVwbG9h
ZAorZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9wdGlvbnMgaW1wb3J0IHVwbG9hZF9vcHRpb25zCiAK
IF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAotX2hvc3QgPSBTeXN0ZW1Ib3N0
KCkKK19ob3N0ID0gSG9zdCgpCiBfd2Via2l0X3Jvb3QgPSBOb25lCiAKIApAQCAtMTI0LDEyICsx
MjYsMTUgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIHBhcnNlciA9IG9wdHBhcnNl
Lk9wdGlvblBhcnNlcih1c2FnZT0ndXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBbYXJncy4uLl0nKQog
CiAgICAgICAgICMgIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbmx5IGVmZmVjdCB0aGUgYnVpbGRp
bmcgb2YgbGxkYldlYktpdFRlc3Rlci4KLSAgICAgICAgY29uZmlndXJhdGlvbl9ncm91cCA9IG9w
dHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgJ0NvbmZpZ3VyYXRpb24gb3B0aW9ucycpCi0gICAg
ICAgIGNvbmZpZ3VyYXRpb25fZ3JvdXAuYWRkX29wdGlvbignLS1kZWJ1ZycsIGFjdGlvbj0nc3Rv
cmVfY29uc3QnLCBjb25zdD0nRGVidWcnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKLSAgICAgICAg
ICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBEZWJ1ZycpCi0gICAgICAgIGNvbmZp
Z3VyYXRpb25fZ3JvdXAuYWRkX29wdGlvbignLS1yZWxlYXNlJywgYWN0aW9uPSdzdG9yZV9jb25z
dCcsIGNvbnN0PSdSZWxlYXNlJywgZGVzdD0iY29uZmlndXJhdGlvbiIsCi0gICAgICAgICAgICBo
ZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gUmVsZWFzZScpCi0gICAgICAgIHBhcnNlci5h
ZGRfb3B0aW9uX2dyb3VwKGNvbmZpZ3VyYXRpb25fZ3JvdXApCisgICAgICAgIGZvciBncm91cF9u
YW1lLCBncm91cF9vcHRpb25zIGluIHsnVXBsb2FkIE9wdGlvbnMnOiB1cGxvYWRfb3B0aW9ucygp
LCAnQ29uZmlndXJhdGlvbiBPcHRpb25zJzogWworICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oJy0tZGVidWcnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J0RlYnVnJywgZGVz
dD0iY29uZmlndXJhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gRGVidWcnKSwKKyAgICAgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCctLXJlbGVhc2UnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Jl
bGVhc2UnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBSZWxlYXNlJyksCisgICAgICAg
IF19Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgb3B0aW9uX2dyb3VwID0gb3B0cGFyc2UuT3B0
aW9uR3JvdXAocGFyc2VyLCBncm91cF9uYW1lKQorICAgICAgICAgICAgb3B0aW9uX2dyb3VwLmFk
ZF9vcHRpb25zKGdyb3VwX29wdGlvbnMpCisgICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9n
cm91cChvcHRpb25fZ3JvdXApCiAKICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1hJywgJy0t
YWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0ncnVuIGFsbCB0aGUgdGVzdHMnKQpAQCAtMTgxLDExICsxODYsMTIg
QEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0
eSBpbXBvcnQgYXV0b2luc3RhbGxfZXZlcnl0aGluZwogICAgICAgICBhdXRvaW5zdGFsbF9ldmVy
eXRoaW5nKCkKIAorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgY29u
ZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIuZmlsZXN5c3RlbSkKKyAg
ICAgICAgY29uZmlndXJhdGlvbl90b191c2UgPSBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24g
b3IgY29uZmlnLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAgICAgICAgIGlmIHdpbGxfcnVuX2xs
ZGJfd2Via2l0X3Rlc3RzOgogICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgn
QnVpbGRpbmcgbGxkYldlYktpdFRlc3RlciAuLi4nKQogICAgICAgICAgICAgYnVpbGRfbGxkYndl
YmtpdHRlc3RlciA9IHNlbGYuZmluZGVyLmZpbGVzeXN0ZW0uam9pbihfd2Via2l0X3Jvb3QsICdU
b29scycsICdTY3JpcHRzJywgJ2J1aWxkLWxsZGJ3ZWJraXR0ZXN0ZXInKQotICAgICAgICAgICAg
Y29uZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIuZmlsZXN5c3RlbSkK
LSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25fdG9fdXNlID0gc2VsZi5fb3B0aW9ucy5jb25maWd1
cmF0aW9uIG9yIGNvbmZpZy5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQogICAgICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgICAgIF9ob3N0LmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwo
W2J1aWxkX2xsZGJ3ZWJraXR0ZXN0ZXIsIGNvbmZpZy5mbGFnX2Zvcl9jb25maWd1cmF0aW9uKGNv
bmZpZ3VyYXRpb25fdG9fdXNlKV0sIHF1aWV0PShub3QgYm9vbChzZWxmLl9vcHRpb25zLnZlcmJv
c2UpKSkKICAgICAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciBhcyBlOgpAQCAtMjE4LDYgKzIy
NCw3IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICB0ZXN0X3J1bm5lciA9IFJ1bm5l
cihzZWxmLnByaW50ZXIsIGxvYWRlcikKICAgICAgICAgdGVzdF9ydW5uZXIucnVuKHBhcmFsbGVs
X3Rlc3RzLCBzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykKICAgICAgICAgdGVzdF9ydW5u
ZXIucnVuKHNlcmlhbF90ZXN0cywgMSkKKyAgICAgICAgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQog
CiAgICAgICAgIHNlbGYucHJpbnRlci5wcmludF9yZXN1bHQodGltZS50aW1lKCkgLSBzdGFydCkK
IApAQCAtMjMyLDkgKzIzOSw1MCBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKICAgICAgICAgICAgIGNvdi5zdG9wKCkKICAgICAgICAg
ICAgIGNvdi5zYXZlKCkKKworICAgICAgICBmYWlsZWRfdXBsb2FkcyA9IDAKKyAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5yZXBvcnRfdXJsczoKKyAgICAgICAgICAgIHNlbGYucHJpbnRlci5tZXRl
ci53cml0ZWxuKCdcbicpCisgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKCdQ
cmVwYXJpbmcgdXBsb2FkIGRhdGEgLi4uJykKKworICAgICAgICAgICAgcmVzdWx0cyA9IHt0ZXN0
OiB7fSBmb3IgdGVzdCBpbiB0ZXN0X3J1bm5lci50ZXN0c19ydW59CisgICAgICAgICAgICBmb3Ig
dGVzdCwgZXJyb3JzIGluIHRlc3RfcnVubmVyLmVycm9yczoKKyAgICAgICAgICAgICAgICByZXN1
bHRzW3Rlc3RdID0gVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4cGVj
dGF0aW9ucy5FUlJPUiwgbG9nPScvbicuam9pbihlcnJvcnMpKQorICAgICAgICAgICAgZm9yIHRl
c3QsIGZhaWx1cmVzIGluIHRlc3RfcnVubmVyLmZhaWx1cmVzOgorICAgICAgICAgICAgICAgIHJl
c3VsdHNbdGVzdF0gPSBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhw
ZWN0YXRpb25zLkZBSUwsIGxvZz0nL24nLmpvaW4oZmFpbHVyZXMpKQorCisgICAgICAgICAgICBf
aG9zdC5pbml0aWFsaXplX3NjbSgpCisgICAgICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAg
ICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgICAgICBjb25m
aWd1cmF0aW9uPVVwbG9hZC5jcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgICAgICAg
ICAgcGxhdGZvcm09X2hvc3QucGxhdGZvcm0ub3NfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
dmVyc2lvbj1zdHIoX2hvc3QucGxhdGZvcm0ub3NfdmVyc2lvbiksCisgICAgICAgICAgICAgICAg
ICAgIHZlcnNpb25fbmFtZT1faG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uX25hbWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgc3R5bGU9Y29uZmlndXJhdGlvbl90b191c2UsCisgICAgICAgICAgICAg
ICAgICAgIHNkaz1faG9zdC5wbGF0Zm9ybS5idWlsZF92ZXJzaW9uKCksCisgICAgICAgICAgICAg
ICAgKSwKKyAgICAgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhvcHRp
b25zPXNlbGYuX29wdGlvbnMpLAorICAgICAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVh
dGVfY29tbWl0KAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAor
ICAgICAgICAgICAgICAgICAgICBpZD1faG9zdC5zY20oKS5uYXRpdmVfcmV2aXNpb24oX3dlYmtp
dF9yb290KSwKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoPV9ob3N0LnNjbSgpLm5hdGl2ZV9i
cmFuY2goX3dlYmtpdF9yb290KSwKKyAgICAgICAgICAgICAgICApXSwKKyAgICAgICAgICAgICAg
ICBydW5fc3RhdHM9VXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisgICAgICAgICAgICAgICAgICAg
IHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgZW5kX3RpbWU9ZW5k
X3RpbWUsCisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9bGVuKHRlc3RfcnVubmVy
LnRlc3RzX3J1bikgLSBsZW4ocGFyYWxsZWxfdGVzdHMpIC0gbGVuKHNlcmlhbF90ZXN0cyksCisg
ICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICByZXN1bHRzPXJlc3VsdHMsCisgICAg
ICAgICAgICApCisgICAgICAgICAgICBmb3IgdXJsIGluIHNlbGYuX29wdGlvbnMucmVwb3J0X3Vy
bHM6CisgICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgnVXBsb2FkaW5n
IHRvIHt9IC4uLicuZm9ybWF0KHVybCkpCisgICAgICAgICAgICAgICAgZmFpbGVkX3VwbG9hZHMg
PSBmYWlsZWRfdXBsb2FkcyBpZiB1cGxvYWQudXBsb2FkKHVybCwgbG9nX2xpbmU9c2VsZi5wcmlu
dGVyLm1ldGVyLndyaXRlbG4pIGVsc2UgKGZhaWxlZF91cGxvYWRzICsgMSkKKyAgICAgICAgICAg
IHNlbGYucHJpbnRlci5tZXRlci53cml0ZWxuKCdVcGxvYWRzIGNvbXBsZXRlZCEnKQorCisgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMuY292ZXJhZ2U6CiAgICAgICAgICAgICBjb3YucmVwb3J0KHNo
b3dfbWlzc2luZz1GYWxzZSkKIAotICAgICAgICByZXR1cm4gbm90IHNlbGYucHJpbnRlci5udW1f
ZXJyb3JzIGFuZCBub3Qgc2VsZi5wcmludGVyLm51bV9mYWlsdXJlcworICAgICAgICByZXR1cm4g
bm90IHNlbGYucHJpbnRlci5udW1fZXJyb3JzIGFuZCBub3Qgc2VsZi5wcmludGVyLm51bV9mYWls
dXJlcyBhbmQgbm90IGZhaWxlZF91cGxvYWRzCiAKICAgICBkZWYgX2NoZWNrX2ltcG9ydHMoc2Vs
ZiwgbmFtZXMpOgogICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0L3J1bm5lci5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L3J1bm5lci5weQkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBjbGFzcyBSdW5uZXIob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJpbnRlciwg
bG9hZGVyKToKICAgICAgICAgc2VsZi5wcmludGVyID0gcHJpbnRlcgogICAgICAgICBzZWxmLmxv
YWRlciA9IGxvYWRlcgotICAgICAgICBzZWxmLnRlc3RzX3J1biA9IDAKKyAgICAgICAgc2VsZi50
ZXN0c19ydW4gPSBbXQogICAgICAgICBzZWxmLmVycm9ycyA9IFtdCiAgICAgICAgIHNlbGYuZmFp
bHVyZXMgPSBbXQogICAgICAgICBzZWxmLndvcmtlcl9mYWN0b3J5ID0gbGFtYmRhIGNhbGxlcjog
X1dvcmtlcihjYWxsZXIsIHNlbGYubG9hZGVyKQpAQCAtNjAsNyArNjAsNyBAQCBjbGFzcyBSdW5u
ZXIob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYucHJpbnRlci5wcmludF9zdGFydGVkX3Rlc3Qo
c291cmNlLCB0ZXN0X25hbWUpCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBzZWxmLnRl
c3RzX3J1biArPSAxCisgICAgICAgIHNlbGYudGVzdHNfcnVuLmFwcGVuZCh0ZXN0X25hbWUpCiAg
ICAgICAgIGlmIGZhaWx1cmVzOgogICAgICAgICAgICAgc2VsZi5mYWlsdXJlcy5hcHBlbmQoKHRl
c3RfbmFtZSwgZmFpbHVyZXMpKQogICAgICAgICBpZiBlcnJvcnM6CkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0Mjky
MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDYgQEAgY2xhc3MgUnVubmVyVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCd0ZXN0MyAoRm9vKScsICdF
JywgJ3Rlc3QzXG5lcnJlZCcpKQogICAgICAgICBydW5uZXIgPSBSdW5uZXIoUHJpbnRlcihzdHJl
YW0sIG9wdGlvbnMpLCBsb2FkZXIpCiAgICAgICAgIHJ1bm5lci5ydW4oWydGb28udGVzdDEnLCAn
Rm9vLnRlc3QyJywgJ0Zvby50ZXN0MyddLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1
bm5lci50ZXN0c19ydW4sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJ1bm5lci50
ZXN0c19ydW4pLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5uZXIuZmFpbHVy
ZXMpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5uZXIuZXJyb3JzKSwgMSkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkJ
KHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9f
X2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw4IEBAIGNsYXNzIEF1dG9p
bnN0YWxsSW1wb3J0SG9vayhvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9weXRl
c3RfdGltZW91dCgpCiAgICAgICAgIGVsaWYgJy5weXRlc3QnIGluIGZ1bGxuYW1lOgogICAgICAg
ICAgICAgc2VsZi5faW5zdGFsbF9weXRlc3QoKQorICAgICAgICBlbGlmICcucmVxdWVzdHMnIGlu
IGZ1bGxuYW1lOgorICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9yZXF1ZXN0cygpCiAKICAgICBk
ZWYgX2luc3RhbGxfbWVjaGFuaXplKHNlbGYpOgogICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRw
czovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL20vbWVjaGFuaXplL21l
Y2hhbml6ZS0wLjIuNS50YXIuZ3oiLApAQCAtMTYxLDYgKzE2MywyMyBAQCBjbGFzcyBBdXRvaW5z
dGFsbEltcG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9m
aWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2EyL2VjLzQxNWQwY2NjYzFlZDQxY2Q3ZmRm
NjlhZDk4OWRhMTZhOGQxMzA1Nzk5NjM3MTAwNGNhYjRiYWZjNDhmMy9weXRlc3QtMy42LjIudGFy
Lmd6IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRlc3QtMy42LjIvc3JjL3B5
dGVzdC5weSIpCiAKKyAgICBkZWYgX2luc3RhbGxfcmVxdWVzdHMoc2VsZik6CisgICAgICAgIHNl
bGYuX2luc3RhbGwoCisgICAgICAgICAgICAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3Jn
L3BhY2thZ2VzLzA2L2I4L2QxZWEzODUxM2MyMmU4YzkwNjI3NWQxMzU4MThmZWUxNmFkODQ5NTk4
NTk1NmE5YjdlMmJiMjE5NDJhMS9jZXJ0aWZpLTIwMTkuMy45LnRhci5neiIsCisgICAgICAgICAg
ICAiY2VydGlmaS0yMDE5LjMuOS9jZXJ0aWZpIikKKyAgICAgICAgc2VsZi5faW5zdGFsbCgKKyAg
ICAgICAgICAgICJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvZmMvYmIv
YTU3NjhjMjMwZjlkZGIwM2FjYzllZjNmMGQ0YTNjZjkzNDYyNDczNzk1ZDE4ZTk1MzU0OThjOGY5
MjlkL2NoYXJkZXQtMy4wLjQudGFyLmd6IiwKKyAgICAgICAgICAgICJjaGFyZGV0LTMuMC40L2No
YXJkZXQiKQorICAgICAgICBzZWxmLl9pbnN0YWxsKAorICAgICAgICAgICAgImh0dHBzOi8vZmls
ZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9hZC8xMy9lYjU2OTUxYjZmNzk1MGNhZGI1Nzlj
YTE2NmU0NDhiYTc3ZjlkMjRlZmMwM2VkZDdlNTVmYTU3ZDA0YjcvaWRuYS0yLjgudGFyLmd6IiwK
KyAgICAgICAgICAgICJpZG5hLTIuOC9pZG5hIikKKyAgICAgICAgc2VsZi5faW5zdGFsbCgKKyAg
ICAgICAgICAgICJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvYjEvNTMv
MzdkODJhYjM5MTM5MzU2NWYyZjgzMWI4ZWVkYmZmZDU3ZGI1YTcxODIxNmY4MmYxYThiNGQzODFh
MWMxL3VybGxpYjMtMS4yNC4xLnRhci5neiIsCisgICAgICAgICAgICAidXJsbGliMy0xLjI0LjEv
c3JjL3VybGxpYjMiKQorICAgICAgICBzZWxmLl9pbnN0YWxsKAorICAgICAgICAgICAgImh0dHBz
Oi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy81Mi8yYy81MTRlNGFjMjVkYTJiMDhj
YTVhNDY0YzUwNDYzNjgyMTI2Mzg1YzQyNzJjMTgxOTM4NzZlOTFmNGJjMzgvcmVxdWVzdHMtMi4y
MS4wLnRhci5neiIsCisgICAgICAgICAgICAicmVxdWVzdHMtMi4yMS4wL3JlcXVlc3RzIikKKwog
ICAgIGRlZiBfaW5zdGFsbF9weWxpbnQoc2VsZik6CiAgICAgICAgIHNlbGYuX2Vuc3VyZV9hdXRv
aW5zdGFsbGVkX2Rpcl9pc19pbl9zeXNfcGF0aCgpCiAgICAgICAgIGlmIChub3Qgc2VsZi5fZnMu
ZXhpc3RzKHNlbGYuX2ZzLmpvaW4oX0FVVE9JTlNUQUxMRURfRElSLCAicHlsaW50IikpIG9yCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9x
dWV1ZXNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAg
LTE4MywxMCArMTgzLDEwIEBAIGNsYXNzIFBhdGNoUHJvY2Vzc2luZ1F1ZXVlVGVzdChDb21tYW5k
c1QKICAgICAgICAgcXVldWUuX29wdGlvbnMgPSBNb2NrKCkKICAgICAgICAgcXVldWUuX29wdGlv
bnMucG9ydCA9IE5vbmUKICAgICAgICAgcGF0Y2ggPSBxdWV1ZS5fdG9vbC5idWdzLmZldGNoX2F0
dGFjaG1lbnQoMTAwMDEpCi0gICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJNT0NLIGFkZF9hdHRh
Y2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlwdGlvbj1BcmNoaXZlIG9mIGxheW91
dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9yIG1hYy1zbm93bGVvcGFyZCBmaWxlbmFtZT1sYXlv
dXQtdGVzdC1yZXN1bHRzLnppcCBtaW1ldHlwZT1Ob25lCisgICAgICAgIGV4cGVjdGVkX2xvZ3Mg
PSAiIiJNT0NLIGFkZF9hdHRhY2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlwdGlv
bj1BcmNoaXZlIG9mIGxheW91dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9yIG1hYy1oaWdoc2ll
cnJhIGZpbGVuYW1lPWxheW91dC10ZXN0LXJlc3VsdHMuemlwIG1pbWV0eXBlPU5vbmUKIC0tIEJl
Z2luIGNvbW1lbnQgLS0KIFRoZSBhdHRhY2hlZCB0ZXN0IGZhaWx1cmVzIHdlcmUgc2VlbiB3aGls
ZSBydW5uaW5nIHJ1bi13ZWJraXQtdGVzdHMgb24gdGhlIG1vY2stcXVldWUuCi1Qb3J0OiBtYWMt
c25vd2xlb3BhcmQgIFBsYXRmb3JtOiBNb2NrUGxhdGZvcm0gMS4wCitQb3J0OiBtYWMtaGlnaHNp
ZXJyYSAgUGxhdGZvcm06IE1vY2tQbGF0Zm9ybSAxLjAKIC0tIEVuZCBjb21tZW50IC0tCiAiIiIK
ICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHF1ZXVlLl91cGxv
YWRfcmVzdWx0c19hcmNoaXZlX2Zvcl9wYXRjaCwgW3BhdGNoLCBNb2NrKCldLCBleHBlY3RlZF9s
b2dzPWV4cGVjdGVkX2xvZ3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364801</attachid>
            <date>2019-03-15 08:53:23 -0700</date>
            <delta_ts>2019-03-15 08:58:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190315085322.patch</filename>
            <type>text/plain</type>
            <size>61535</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0Mjk3OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE5LTAzLTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6Cisg
ICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOiBBZGQgcmVxdWVzdHMg
YXV0by1pbnN0YWxsLgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxsX3Jl
cXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBs
b2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGlu
Zy4KKwogMjAxOS0wMy0xNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgTW92ZSBJREIgc3RvcmFnZSBpbiBwcml2YXRlIGJyb3dzaW5nIG1vZGUgdG8gTmV0d29y
a1Byb2Nlc3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18u
cHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5p
dF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKKyMgUmVxdWlyZWQgZm9yIFB5
dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCisjIEtlZXAg
dGhpcyBmaWxlIGZyZWUgb2YgYW55IGNvZGUgb3IgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBjb3Vs
ZAorIyBjYXVzZSBlaXRoZXIgYW4gZXJyb3IgdG8gb2NjdXIgb3IgYSBsb2cgbWVzc2FnZSB0byBi
ZSBsb2dnZWQuCisjIFRoaXMgZW5zdXJlcyB0aGF0IGNhbGxpbmcgY29kZSBjYW4gaW1wb3J0IGlu
aXRpYWxpemF0aW9uIGNvZGUgZnJvbQorIyB3ZWJraXRweSBiZWZvcmUgYW55IGVycm9ycyBvciBs
b2cgbWVzc2FnZXMgZHVlIHRvIGNvZGUgaW4gdGhpcyBmaWxlLgorIyBJbml0aWFsaXphdGlvbiBj
b2RlIGNhbiBpbmNsdWRlIHRoaW5ncyBsaWtlIHZlcnNpb24tY2hlY2tpbmcgY29kZSBhbmQKKyMg
bG9nZ2luZyBjb25maWd1cmF0aW9uIGNvZGUuCisjCisjIFdlIGRvIG5vdCBleGVjdXRlIGFueSB2
ZXJzaW9uLWNoZWNraW5nIGNvZGUgb3IgbG9nZ2luZyBjb25maWd1cmF0aW9uCisjIGNvZGUgaW4g
dGhpcyBmaWxlIHNvIHRoYXQgY2FsbGVycyBjYW4gb3B0LWluIGFzIHRoZXkgd2FudC4gIFRoaXMg
YWxzbworIyBhbGxvd3MgZGlmZmVyZW50IGNhbGxlcnMgdG8gY2hvb3NlIGRpZmZlcmVudCBpbml0
aWFsaXphdGlvbiBjb2RlLAorIyBhcyBuZWNlc3NhcnkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMz
IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcHRw
YXJzZQorCisKK2RlZiB1cGxvYWRfb3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJlcG9ydCcsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0ncmVw
b3J0X3VybHMnLCBoZWxwPSdVUkwgKG9yIFVSTHMpIHRvIHJlcG9ydCB0ZXN0IHJlc3VsdHMgdG8n
KSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRib3QtbWFzdGVyJywgaGVs
cD0nVGhlIHVybCBvZiB0aGUgYnVpbGRib3QgbWFzdGVyLicpLAorICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbignLS1idWlsZGVyLW5hbWUnLCBoZWxwPSdUaGUgbmFtZSBvZiB0aGUgYnVpbGRi
b3QgYnVpbGRlciB0ZXN0cyB3ZXJlIHJ1biBvbi4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oJy0tYnVpbGQtbnVtYmVyJywgaGVscD0nVGhlIGJ1aWxkYm90IGJ1aWxkIG51bWJlciB0
ZXN0cyBhcmUgYXNzb2NpYXRlZCB3aXRoLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bignLS1idWlsZGJvdC13b3JrZXInLCBoZWxwPSdUaGUgYnVpbGRib3Qgd29ya2VyIHRlc3RzIHdl
cmUgcnVuIG9uLicpLAorICAgIF0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0
cy91cGxvYWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRz
L3VwbG9hZC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3Vs
dHMvdXBsb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg5IEBACisjIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5
LmF1dG9pbnN0YWxsZWQucmVxdWVzdHMKKworaW1wb3J0IGpzb24KK2ltcG9ydCByZXF1ZXN0cwor
aW1wb3J0IHN5cworCitpbXBvcnQgcGxhdGZvcm0gYXMgcGxhdGZvcm1fCisKKworY2xhc3MgVXBs
b2FkKG9iamVjdCk6CisgICAgVVBMT0FEX0VORFBPSU5UID0gJy9hcGkvdXBsb2FkJworICAgIEJV
SUxEQk9UX0RFVEFJTFMgPSBbJ2J1aWxkYm90LW1hc3RlcicsICdidWlsZGVyLW5hbWUnLCAnYnVp
bGQtbnVtYmVyJywgJ2J1aWxkYm90LXdvcmtlciddCisgICAgVkVSU0lPTiA9IDAKKworICAgIGNs
YXNzIEV4cGVjdGF0aW9uczoKKyAgICAgICAgIyBUaGVzZSBhcmUgb3JkZXJlZCBieSBwcmlvcml0
eSwgbWVhbmluZyB0aGF0IGEgdGVzdCB3aGljaCBib3RoIGNyYXNoZXMgYW5kIGhhcworICAgICAg
ICAjIGEgd2FybmluZyBzaG91bGQgYmUgY29uc2lkZXJlZCB0byBoYXZlIGNyYXNoZWQuCisgICAg
ICAgIE9SREVSID0gWworICAgICAgICAgICAgJ0NSQVNIJywKKyAgICAgICAgICAgICdUSU1FT1VU
JywKKyAgICAgICAgICAgICdJTUFHRScsICAgIyBJbWFnZS1kaWZmCisgICAgICAgICAgICAnQVVE
SU8nLCAgICMgQXVkaW8tZGlmZgorICAgICAgICAgICAgJ1RFWFQnLCAgICAjIFRleHQtZGlmZgor
ICAgICAgICAgICAgJ0ZBSUwnLAorICAgICAgICAgICAgJ0VSUk9SJywKKyAgICAgICAgICAgICdX
QVJOSU5HJywKKyAgICAgICAgICAgICdQQVNTJywKKyAgICAgICAgXQorICAgICAgICBDUkFTSCwg
VElNRU9VVCwgSU1BR0UsIEFVRElPLCBURVhULCBGQUlMLCBFUlJPUiwgV0FSTklORywgUEFTUyA9
IE9SREVSCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9jb25maWd1cmF0aW9u
KAorICAgICAgICAgICAgcGxhdGZvcm09Tm9uZSwKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1G
YWxzZSwKKyAgICAgICAgICAgIHZlcnNpb249Tm9uZSwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVy
ZT1Ob25lLAorICAgICAgICAgICAgdmVyc2lvbl9uYW1lPU5vbmUsCisgICAgICAgICAgICBtb2Rl
bD1Ob25lLAorICAgICAgICAgICAgc3R5bGU9Tm9uZSwgICAjIERlYnVnL1Byb2R1Y3Rpb24vUmVs
ZWFzZQorICAgICAgICAgICAgZmxhdm9yPU5vbmUsICAjIER1bXBpbmcgZ3JvdW5kIHN1aXRlLXdp
ZGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIChpZSwgR3VhcmRNYWxsb2MpCisgICAgICAgICAgICBz
ZGs9Tm9uZSwKKyAgICAgICAgKToKKworICAgICAgICAjIFRoaXMgZGV2aWF0ZXMgc2xpZ2h0bHkg
ZnJvbSB0aGUgcmVzdCBvZiB3ZWJraXRweSwgYnV0IGl0IGFsbG93cyB0aGlzIGZpbGUgdG8gYmUg
ZW50aXJlbHkgcG9ydGFibGUuCisgICAgICAgIGNvbmZpZyA9IGRpY3QoCisgICAgICAgICAgICBw
bGF0Zm9ybT1wbGF0Zm9ybSBvciAocGxhdGZvcm1fLnN5c3RlbSgpIGlmIHBsYXRmb3JtXy5zeXN0
ZW0oKSAhPSAnRGFyd2luJyBlbHNlICdtYWMnKS5sb3dlcigpLAorICAgICAgICAgICAgaXNfc2lt
dWxhdG9yPWlzX3NpbXVsYXRvciwKKyAgICAgICAgICAgIHZlcnNpb249dmVyc2lvbiBvciAocGxh
dGZvcm1fLnJlbGVhc2UoKSBpZiBwbGF0Zm9ybV8uc3lzdGVtKCkgIT0gJ0RhcndpbicgZWxzZSBw
bGF0Zm9ybV8ubWFjX3ZlcigpWzBdKSwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVyZT1hcmNoaXRl
Y3R1cmUgb3IgcGxhdGZvcm1fLm1hY2hpbmUoKSwKKyAgICAgICAgKQorICAgICAgICBmb3Iga2V5
LCB2YWx1ZSBpbiBjb25maWcuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBO
b25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IG11c3QgYmUgZGVmaW5l
ZCBpbiB0aGUgY29uZmlndXJhdGlvbicuZm9ybWF0KGtleSkpCisgICAgICAgIGZvciBrZXksIHZh
bHVlIGluIGRpY3QodmVyc2lvbl9uYW1lPXZlcnNpb25fbmFtZSwgbW9kZWw9bW9kZWwsIHN0eWxl
PXN0eWxlLCBmbGF2b3I9Zmxhdm9yLCBzZGs9c2RrKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAg
IGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNvbmZpZ1trZXldID0gdmFs
dWUKKyAgICAgICAgcmV0dXJuIGNvbmZpZworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBj
cmVhdGVfY29tbWl0KHJlcG9zaXRvcnlfaWQ9Tm9uZSwgaWQ9Tm9uZSwgYnJhbmNoPU5vbmUpOgor
ICAgICAgICBjb21taXQgPSBkaWN0KHJlcG9zaXRvcnlfaWQ9cmVwb3NpdG9yeV9pZCwgaWQ9aWQp
CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbW1pdC5pdGVyaXRlbXMoKToKKyAgICAgICAg
ICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
e30gbXVzdCBiZSBkZWZpbmVkIGluIGEgY29tbWl0Jy5mb3JtYXQoa2V5KSkKKyAgICAgICAgaWYg
YnJhbmNoOgorICAgICAgICAgICAgY29tbWl0WydicmFuY2gnXSA9IGJyYW5jaAorICAgICAgICBy
ZXR1cm4gY29tbWl0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9kZXRhaWxz
KGxpbms9Tm9uZSwgb3B0aW9ucz1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHJlc3VsdCA9IGRp
Y3QoKiprd2FyZ3MpCisgICAgICAgIGlmIGxpbms6CisgICAgICAgICAgICByZXN1bHRbJ2xpbmsn
XSA9IGxpbmsKKworICAgICAgICBpZiBvcHRpb25zOgorICAgICAgICAgICAgZm9yIGVsZW1lbnQg
aW4gVXBsb2FkLkJVSUxEQk9UX0RFVEFJTFM6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRh
dHRyKG9wdGlvbnMsIGVsZW1lbnQucmVwbGFjZSgnLScsICdfJyksIE5vbmUpCisgICAgICAgICAg
ICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtl
bGVtZW50XSA9IHZhbHVlCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgY3JlYXRlX3J1bl9zdGF0cyhzdGFydF90aW1lPU5vbmUsIGVuZF90aW1lPU5v
bmUsIHRlc3RzX3NraXBwZWQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzdGF0cyA9IGRpY3Qo
Kiprd2FyZ3MpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRpY3Qoc3RhcnRfdGltZT1zdGFy
dF90aW1lLCBlbmRfdGltZT1lbmRfdGltZSwgdGVzdHNfc2tpcHBlZD10ZXN0c19za2lwcGVkKS5p
dGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIHN0YXRzW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gc3RhdHMKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPU5vbmUsIGFj
dHVhbD1Ob25lLCBsb2c9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCoq
a3dhcmdzKQorCisgICAgICAgICMgVGVzdHMgd2hpY2ggZG9uJ3QgZGVjbGFyZSBleHBlY3RhdGlv
bnMgb3IgcmVzdWx0cyBhcmUgYXNzdW1lZCB0byBoYXZlIHBhc3NlZC4KKyAgICAgICAgZm9yIGtl
eSwgdmFsdWUgaW4gZGljdChleHBlY3RlZD1leHBlY3RlZCwgYWN0dWFsPWFjdHVhbCwgbG9nPWxv
ZykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiByZXN1bHQKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWl0ZT1Ob25lLCBjb25maWd1cmF0aW9uPU5vbmUsIGNv
bW1pdHM9W10sIHRpbWVzdGFtcD1Ob25lLCBkZXRhaWxzPU5vbmUsIHJ1bl9zdGF0cz1Ob25lLCBy
ZXN1bHRzPXt9KToKKyAgICAgICAgc2VsZi5zdWl0ZSA9IHN1aXRlCisgICAgICAgIHNlbGYuY29u
ZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VsZi5jb21taXRzID0gY29tbWl0
cworICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcAorICAgICAgICBzZWxmLmRldGFp
bHMgPSBkZXRhaWxzCisgICAgICAgIHNlbGYucnVuX3N0YXRzID0gcnVuX3N0YXRzCisgICAgICAg
IHNlbGYucmVzdWx0cyA9IHJlc3VsdHMKKworICAgIGNsYXNzIEVuY29kZXIoanNvbi5KU09ORW5j
b2Rlcik6CisKKyAgICAgICAgZGVmIGRlZmF1bHQoc2VsZiwgb2JqKToKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2Uob2JqLCBVcGxvYWQpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvYmouc3Vp
dGU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIHN1aXRlIHNwZWNp
ZmllZCB0byByZXN1bHRzIHVwbG9hZCcpCisgICAgICAgICAgICAgICAgaWYgbm90IG9iai5jb21t
aXRzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBjb21taXRzIHNw
ZWNpZmllZCB0byByZXN1bHRzIHVwbG9hZCcpCisKKyAgICAgICAgICAgICAgICBkZXRhaWxzID0g
b2JqLmRldGFpbHMgb3Igb2JqLmNyZWF0ZV9kZXRhaWxzKCkKKyAgICAgICAgICAgICAgICBidWls
ZGJvdF9hcmdzID0gW2RldGFpbHMuZ2V0KGFyZywgTm9uZSkgaXMgTm9uZSBmb3IgYXJnIGluIG9i
ai5CVUlMREJPVF9ERVRBSUxTXQorICAgICAgICAgICAgICAgIGlmIGFueShidWlsZGJvdF9hcmdz
KSBhbmQgbm90IGFsbChidWlsZGJvdF9hcmdzKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcignQWxsIGJ1aWxkYm90IGRldGFpbHMgbXVzdCBiZSBkZWZpbmVkIGZvciB1cGxv
YWQnKQorCisgICAgICAgICAgICAgICAgZGVmIHVucGFja190ZXN0KGN1cnJlbnQsIHBhdGhfdG9f
dGVzdCwgZGF0YSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYXRoX3RvX3Rlc3QpID09
IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0gPSBk
YXRhCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAg
aWYgbm90IGN1cnJlbnQuZ2V0KHBhdGhfdG9fdGVzdFswXSk6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0gPSB7fQorICAgICAgICAgICAgICAgICAgICB1
bnBhY2tfdGVzdChjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0sIHBhdGhfdG9fdGVzdFsxOl0sIGRh
dGEpCisKKyAgICAgICAgICAgICAgICByZXN1bHRzID0ge30KKyAgICAgICAgICAgICAgICBmb3Ig
dGVzdCwgZGF0YSBpbiBvYmoucmVzdWx0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAg
ICAgdW5wYWNrX3Rlc3QocmVzdWx0cywgdGVzdC5zcGxpdCgnLycpLCBkYXRhKQorCisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gZGljdCgKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj1vYmou
VkVSU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgc3VpdGU9b2JqLnN1aXRlLAorICAgICAgICAg
ICAgICAgICAgICBjb25maWd1cmF0aW9uPW9iai5jb25maWd1cmF0aW9uIG9yIG9iai5jcmVhdGVf
Y29uZmlndXJhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBjb21taXRzPW9iai5jb21taXRz
LAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHM9ZGljdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRldGFpbHM9ZGV0YWlscywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9z
dGF0cz1vYmoucnVuX3N0YXRzIG9yIG9iai5jcmVhdGVfcnVuX3N0YXRzKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRzPXJlc3VsdHMsCisgICAgICAgICAgICAgICAgICAgICksCisg
ICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGlmIG9iai50aW1lc3RhbXA6CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFsndGltZXN0YW1wJ10gPSBvYmoudGltZXN0YW1wCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFVwbG9h
ZC5FbmNvZGVyLCBzZWxmKS5kZWZhdWx0KG9iaikKKworICAgIGRlZiB1cGxvYWQoc2VsZiwgdXJs
LCBsb2dfbGluZT1sYW1iZGEgdmFsOiBzeXMuc3Rkb3V0LndyaXRlKHZhbCArICdcbicpKToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wb3N0KHVybCArIHNl
bGYuVVBMT0FEX0VORFBPSU5ULCBkYXRhPWpzb24uZHVtcHMoc2VsZiwgY2xzPVVwbG9hZC5FbmNv
ZGVyKSkKKyAgICAgICAgZXhjZXB0IHJlcXVlc3RzLmV4Y2VwdGlvbnMuQ29ubmVjdGlvbkVycm9y
OgorICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdGYWlsZWQgdG8gdXBsb2FkIHRvIHt9
LCByZXN1bHRzIHNlcnZlciBub3Qgb25saW5lJy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAg
bG9nX2xpbmUoJyAnICogNCArICdGYWlsZWQgdG8gZW5jb2RlIHVwbG9hZCBkYXRhOiB7fScuZm9y
bWF0KGUpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgcmVzcG9uc2Uu
c3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdFcnJv
ciB1cGxvYWRpbmcgdG8ge306Jy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgIGxvZ19saW5lKCcg
JyAqIDggKyByZXNwb25zZS5qc29uKClbJ2Rlc2NyaXB0aW9uJ10pCisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ1VwbG9hZGVkIHJlc3VsdHMg
dG8ge30nLmZvcm1hdCh1cmwpKQorICAgICAgICByZXR1cm4gVHJ1ZQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWRfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3Rh
bGxlZC5yZXF1ZXN0cworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBqc29uCitpbXBvcnQg
bW9jaworaW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zy
b20gd2Via2l0cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVwbG9hZAorCisKK2NsYXNzIFVwbG9h
ZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgT3B0aW9ucyhvYmplY3QpOgor
ICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAgICAgZm9yIGtl
eSwgdmFsdWUgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIo
c2VsZiwga2V5LCB2YWx1ZSkKKworICAgIGNsYXNzIE1vY2tSZXNwb25zZShvYmplY3QpOgorICAg
ICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzX2NvZGU9MjAwLCB0ZXh0PScnKToKKyAgICAg
ICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSBzdGF0dXNfY29kZQorICAgICAgICAgICAgc2VsZi50
ZXh0ID0gdGV4dAorCisgICAgICAgIGRlZiBqc29uKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJu
IGpzb24ubG9hZHMoc2VsZi50ZXh0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBub3Jt
YWxpemUoZGF0YSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgYmFzZXN0cmluZyk6Cisg
ICAgICAgICAgICByZXR1cm4gc3RyKGRhdGEpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkYXRh
LCBjb2xsZWN0aW9ucy5NYXBwaW5nKToKKyAgICAgICAgICAgIHJldHVybiBkaWN0KG1hcChVcGxv
YWRUZXN0Lm5vcm1hbGl6ZSwgZGF0YS5pdGVyaXRlbXMoKSkpCisgICAgICAgIGVsaWYgaXNpbnN0
YW5jZShkYXRhLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gdHlw
ZShkYXRhKShtYXAoVXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEpKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgor
ICAgICAgICBzdGFydF90aW1lLCBlbmRfdGltZSA9IHRpbWUudGltZSgpIC0gMywgdGltZS50aW1l
KCkKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5
LXRlc3RzJywKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249VXBsb2FkLmNyZWF0ZV9jb25maWd1
cmF0aW9uKAorICAgICAgICAgICAgICAgIHBsYXRmb3JtPSdtYWMnLAorICAgICAgICAgICAgICAg
IHZlcnNpb249JzEwLjEzLjAnLAorICAgICAgICAgICAgICAgIHZlcnNpb25fbmFtZT0nSGlnaCBT
aWVycmEnLAorICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZT0neDg2XzY0JywKKyAgICAgICAg
ICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgZGV0YWls
cz1VcGxvYWQuY3JlYXRlX2RldGFpbHMobGluaz0naHR0cHM6Ly93ZWJraXQub3JnJyksCisgICAg
ICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICBy
ZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAg
ICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgcnVu
X3N0YXRzPVVwbG9hZC5jcmVhdGVfcnVuX3N0YXRzKAorICAgICAgICAgICAgICAgIHN0YXJ0X3Rp
bWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICBlbmRfdGltZT1lbmRfdGltZSwKKyAgICAg
ICAgICAgICAgICB0ZXN0c19za2lwcGVkPTAsCisgICAgICAgICAgICApLAorICAgICAgICAgICAg
cmVzdWx0cz17CisgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisgICAgICAg
ICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChleHBl
Y3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25z
LkZBSUwpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGlj
dCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxv
YWQuRW5jb2RlcikpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3Rb
J3ZlcnNpb24nXSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsn
c3VpdGUnXSwgJ3dlYmtpdHB5LXRlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5l
cmF0ZWRfZGljdFsnY29uZmlndXJhdGlvbiddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KAorICAgICAg
ICAgICAgcGxhdGZvcm09J21hYycsCisgICAgICAgICAgICBpc19zaW11bGF0b3I9RmFsc2UsCisg
ICAgICAgICAgICB2ZXJzaW9uPScxMC4xMy4wJywKKyAgICAgICAgICAgIHZlcnNpb25fbmFtZT0n
SGlnaCBTaWVycmEnLAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPSd4ODZfNjQnLAorICAgICAg
ICAgICAgc2RrPScxN0E0MDUnLAorICAgICAgICApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChnZW5lcmF0ZWRfZGljdFsnY29tbWl0cyddLCBbZGljdCgKKyAgICAgICAgICAgIHJlcG9zaXRv
cnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICBicmFuY2g9
J3RydW5rJywKKyAgICAgICAgKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVk
X2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9ybWFsaXplKGRpY3QobGlu
az0naHR0cHM6Ly93ZWJraXQub3JnJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVy
YXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncnVuX3N0YXRzJ10sIHNlbGYubm9ybWFsaXplKGRp
Y3QoCisgICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAgICAgICAgICBlbmRf
dGltZT1lbmRfdGltZSwKKyAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwKKyAgICAgICAgKSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cydd
WydyZXN1bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICd3ZWJraXRweS50ZXN0
MSc6IHt9LAorICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0
X3Jlc3VsdChleHBlY3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFjdHVhbD1VcGxvYWQu
RXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICB9KSkKKworICAgIGRlZiB0ZXN0X3VwbG9hZChz
ZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtp
dHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAor
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAg
aWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0s
CisgICAgICAgICkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBu
ZXc9bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoKSk6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydFRydWUodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMn
LCBsb2dfbGluZT1sYW1iZGEgXzogTm9uZSkpCisKKyAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlv
bih1cmwsIGRhdGEpOgorICAgICAgICAgICAgcmFpc2UgcmVxdWVzdHMuZXhjZXB0aW9ucy5Db25u
ZWN0aW9uRXJyb3IoKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVzdHMucG9zdCcs
IG5ldz1yYWlzZV9leGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxv
YWQudXBsb2FkKCdodHRwczovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBf
OiBOb25lKSkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBuZXc9
bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoCisgICAgICAgICAgICBzdGF0dXNf
Y29kZT00MDQsCisgICAgICAgICAgICB0ZXh0PWpzb24uZHVtcHMoZGljdChkZXNjcmlwdGlvbj0n
Tm8gc3VjaCBhZGRyZXNzJykpLAorICAgICAgICApKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMnLCBsb2dfbGlu
ZT1sYW1iZGEgXzogTm9uZSkpCisKKyAgICBkZWYgdGVzdF9wYWNrZWRfdGVzdChzZWxmKToKKyAg
ICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3Rz
JywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAg
ICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAor
ICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAg
ICAgICByZXN1bHRzPXsKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90ZXN0MSc6IFVw
bG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCks
CisgICAgICAgICAgICAgICAgJ2RpcjEvc3ViLWRpcjEvdGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rl
c3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLlRJTUVPVVQpLAorICAgICAgICAg
ICAgICAgICdkaXIxL3N1Yi1kaXIyL3Rlc3QzJzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjEv
c3ViLWRpcjIvdGVzdDQnOiB7fSwKKyAgICAgICAgICAgICAgICAnZGlyMi9zdWItZGlyMy90ZXN0
NSc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIyL3Rlc3Q2Jzoge30sCisgICAgICAgICAgICB9
CisgICAgICAgICkKKyAgICAgICAgZ2VuZXJhdGVkX2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29u
LmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMn
XSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAgJ2RpcjEnOiB7CisgICAgICAgICAgICAg
ICAgJ3N1Yi1kaXIxJzogeworICAgICAgICAgICAgICAgICAgICAndGVzdDEnOiB7J2FjdHVhbCc6
IFVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTH0sCisgICAgICAgICAgICAgICAgICAgICd0ZXN0Mic6
IHsnYWN0dWFsJzogVXBsb2FkLkV4cGVjdGF0aW9ucy5USU1FT1VUfSwKKyAgICAgICAgICAgICAg
ICB9LCAnc3ViLWRpcjInOiB7CisgICAgICAgICAgICAgICAgICAgICd0ZXN0Myc6IHt9LAorICAg
ICAgICAgICAgICAgICAgICAndGVzdDQnOiB7fSwKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9LCAnZGlyMic6IHsKKyAgICAgICAgICAgICAgICAnc3ViLWRpcjMnOiB7J3Rlc3Q1Jzog
e319LAorICAgICAgICAgICAgICAgICd0ZXN0Nic6IHt9LAorICAgICAgICAgICAgfSwKKyAgICAg
ICAgfSkpCisKKyAgICBkZWYgdGVzdF9ub19zdWl0ZShzZWxmKToKKyAgICAgICAgdXBsb2FkID0g
VXBsb2FkKAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0n
NScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAg
ICAgICAgKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAg
ICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRl
ZiB0ZXN0X25vX2NvbW1pdHMoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAg
ICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICkKKyAgICAgICAgd2l0aCBz
ZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBs
b2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICBkZWYgdGVzdF9idWlsZGJvdChzZWxmKToK
KyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRl
c3RzJywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAg
ICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUn
LAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAg
ICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhvcHRpb25zPXNlbGYuT3B0aW9u
cygKKyAgICAgICAgICAgICAgICBidWlsZGJvdF9tYXN0ZXI9J3dlYmtpdC5vcmcnLAorICAgICAg
ICAgICAgICAgIGJ1aWxkZXJfbmFtZT0nUXVldWUtMScsCisgICAgICAgICAgICAgICAgYnVpbGRf
bnVtYmVyPTEsCisgICAgICAgICkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZh
bHVlRXJyb3IpOgorICAgICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5j
b2RlcikKKworICAgICAgICB1cGxvYWQuZGV0YWlsc1snYnVpbGRib3Qtd29ya2VyJ10gPSAnYm90
MTIzJworICAgICAgICBnZW5lcmF0ZWRfZGljdCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMo
anNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsnZGV0YWlscyddLCBzZWxm
Lm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAnYnVpbGRib3QtbWFzdGVyJzogJ3dlYmtpdC5vcmcn
LAorICAgICAgICAgICAgJ2J1aWxkZXItbmFtZSc6ICdRdWV1ZS0xJywKKyAgICAgICAgICAgICdi
dWlsZC1udW1iZXInOiAxLAorICAgICAgICAgICAgJ2J1aWxkYm90LXdvcmtlcic6ICdib3QxMjMn
LAorICAgICAgICB9KSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9naXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY2hlY2tvdXQvc2NtL2dpdC5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MjkwLDYgKzI5MCwxNCBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYg
bmF0aXZlX3JldmlzaW9uKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dp
dChbJy1DJywgc2VsZi5maW5kX2NoZWNrb3V0X3Jvb3QocGF0aCksICdsb2cnLCAnLTEnLCAnLS1w
cmV0dHk9Zm9ybWF0OiVIJ10pCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBwYXRoKToK
KyAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX2dpdChbJy1DJywgc2VsZi5maW5kX2NoZWNrb3V0
X3Jvb3QocGF0aCksICdyZXYtcGFyc2UnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQnXSkucnN0cmlw
KCkKKworICAgICAgICAjIEZvciBnaXQtc3ZuCisgICAgICAgIGlmIHJlc3VsdC5zdGFydHN3aXRo
KCdoZWFkcycpOgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFs2Ol0KKyAgICAgICAgcmV0dXJu
IHJlc3VsdAorCiAgICAgZGVmIHN2bl91cmwoc2VsZik6CiAgICAgICAgIGdpdF9jb21tYW5kID0g
Wydzdm4nLCAnaW5mbyddCiAgICAgICAgIHN0YXR1cyA9IHNlbGYuX3J1bl9naXQoZ2l0X2NvbW1h
bmQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2Nt
X21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3NjbV9tb2NrLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHkJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDYgKzg3LDkgQEAgY2xhc3MgTW9ja1NDTShvYmplY3QpOgogICAgIGRlZiBuYXRpdmVf
cmV2aXNpb24oc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBzZWxmLnN2bl9yZXZpc2lvbihw
YXRoKQogCisgICAgZGVmIG5hdGl2ZV9icmFuY2goc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVy
biAndHJ1bmsnCisKICAgICBkZWYgdGltZXN0YW1wX29mX3JldmlzaW9uKHNlbGYsIHBhdGgsIHJl
dmlzaW9uKToKICAgICAgICAgcmV0dXJuICcyMDEzLTAyLTAxIDA4OjQ4OjA1ICswMDAwJwogCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9zY21fdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTkwOSw2ICs5MDksOSBAQCBFTkQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLnNjbS5oZWFkX3N2bl9yZXZpc2lvbigpLCBzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24oJy4n
KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24oJy4n
KSwgJzUnKQogCisgICAgZGVmIHRlc3RfbmF0aXZlX2JyYW5jaChzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfYnJhbmNoKCcuJyksICd0cnVuaycpCisKICAg
ICBkZWYgdGVzdF9wcm9wc2V0X3Byb3BnZXQoc2VsZik6CiAgICAgICAgIGZpbGVwYXRoID0gb3Mu
cGF0aC5qb2luKHNlbGYuc3ZuX2NoZWNrb3V0X3BhdGgsICJ0ZXN0X2ZpbGUiKQogICAgICAgICBl
eHBlY3RlZF9taW1lX3R5cGUgPSAieC1hcHBsaWNhdGlvbi9mb28tYmFyIgpAQCAtMTExMiw2ICsx
MTE1LDEwIEBAIGNsYXNzIEdpdFRlc3QoU0NNVGVzdCk6CiAgICAgICAgIGNvbW1hbmQgPSBbJ2dp
dCcsICctQycsIHNjbS5jaGVja291dF9yb290LCAncmV2LXBhcnNlJywgJ0hFQUQnXQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNjbS5uYXRpdmVfcmV2aXNpb24oc2NtLmNoZWNrb3V0X3Jvb3Qp
LCBydW5fY29tbWFuZChjb21tYW5kKS5zdHJpcCgpKQogCisgICAgZGVmIHRlc3RfbmF0aXZlX2Jy
YW5jaChzZWxmKToKKyAgICAgICAgc2NtID0gc2VsZi50cmFja2luZ19zY20KKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnbWFzdGVyJywgc2NtLm5hdGl2ZV9icmFuY2goc2NtLmNoZWNrb3V0X3Jv
b3QpKQorCiAgICAgZGVmIHRlc3RfcmVuYW1lX2ZpbGVzKHNlbGYpOgogICAgICAgICBzY20gPSBz
ZWxmLnRyYWNraW5nX3NjbQogCkBAIC0xNjI3LDYgKzE2MzQsOSBAQCBjbGFzcyBHaXRTVk5UZXN0
KFNDTVRlc3QpOgogICAgICAgICBjb21tYW5kID0gWydnaXQnLCAnLUMnLCBzZWxmLmdpdF9jaGVj
a291dF9wYXRoLCAncmV2LXBhcnNlJywgJ0hFQUQnXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuc2NtLm5hdGl2ZV9yZXZpc2lvbihzZWxmLmdpdF9jaGVja291dF9wYXRoKSwgcnVuX2Nv
bW1hbmQoY29tbWFuZCkuc3RyaXAoKSkKIAorICAgIGRlZiB0ZXN0X25hdGl2ZV9icmFuY2goc2Vs
Zik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3RydW5rJywgc2VsZi5zY20ubmF0aXZlX2Jy
YW5jaChzZWxmLmdpdF9jaGVja291dF9wYXRoKSkKKwogICAgIGRlZiB0ZXN0X3RvX29iamVjdF9u
YW1lKHNlbGYpOgogICAgICAgICByZWxwYXRoID0gJ3Rlc3RfZmlsZV9jb21taXQxJwogICAgICAg
ICBmdWxscGF0aCA9IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKHNlbGYuZ2l0X2NoZWNr
b3V0X3BhdGgsIHJlbHBhdGgpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y2hlY2tvdXQvc2NtL3N2bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC04Myw3ICs4Myw3IEBAIGNsYXNzIFNWTihTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgICAg
ICBTQ00uX19pbml0X18oc2VsZiwgY3dkLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5fYm9ndXNf
ZGlyID0gTm9uZQogICAgICAgICBpZiBwYXRjaF9kaXJlY3RvcmllcyA9PSBbXToKLSAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbihtZXNzYWdlPSdFbXB0eSBsaXN0IG9mIHBhdGNoIGRpcmVjdG9y
aWVzIHBhc3NlZCB0byBTQ00uX19pbml0X18nKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCdFbXB0eSBsaXN0IG9mIHBhdGNoIGRpcmVjdG9yaWVzIHBhc3NlZCB0byBTQ00uX19pbml0X18n
KQogICAgICAgICBlbGlmIHBhdGNoX2RpcmVjdG9yaWVzID09IE5vbmU6CiAgICAgICAgICAgICBz
ZWxmLl9wYXRjaF9kaXJlY3RvcmllcyA9IFtzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgoY3dkLCBz
ZWxmLmNoZWNrb3V0X3Jvb3QpXQogICAgICAgICBlbHNlOgpAQCAtMjc4LDYgKzI3OCwxNCBAQCBj
bGFzcyBTVk4oU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYgbmF0aXZlX3JldmlzaW9uKHNl
bGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5zdm5fcmV2aXNpb24ocGF0aCkKIAorICAg
IGRlZiBuYXRpdmVfYnJhbmNoKHNlbGYsIHBhdGgpOgorICAgICAgICByZWxhdGl2ZV91cmwgPSBz
ZWxmLnZhbHVlX2Zyb21fc3ZuX2luZm8ocGF0aCwgJ1JlbGF0aXZlIFVSTCcpWzI6XQorICAgICAg
ICBpZiByZWxhdGl2ZV91cmwuc3RhcnRzd2l0aCgndHJ1bmsnKToKKyAgICAgICAgICAgIHJldHVy
biAndHJ1bmsnCisgICAgICAgIGVsaWYgcmVsYXRpdmVfdXJsLnN0YXJ0c3dpdGgoJ2JyYW5jaCcp
OgorICAgICAgICAgICAgcmV0dXJuIHJlbGF0aXZlX3VybC5zcGxpdCgnLycpWzFdCisgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbigne30gaXMgbm90IGEgYnJhbmNoJy5mb3JtYXQocmVsYXRpdmVfdXJs
LnNwbGl0KCcvJylbMF0pKQorCiAgICAgZGVmIHRpbWVzdGFtcF9vZl9yZXZpc2lvbihzZWxmLCBw
YXRoLCByZXZpc2lvbik6CiAgICAgICAgICMgV2UgdXNlIC0teG1sIHRvIGdldCB0aW1lc3RhbXBz
IGxpa2UgMjAxMy0wMi0wOFQwODoxODowNC45NjQ0MDlaCiAgICAgICAgIHJlcG9zaXRvcnlfcm9v
dCA9IHNlbGYudmFsdWVfZnJvbV9zdm5faW5mbyhzZWxmLmNoZWNrb3V0X3Jvb3QsICdSZXBvc2l0
b3J5IFJvb3QnKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Bs
YXRmb3JtaW5mby5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0xNDYsNiArMTQ2LDExIEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAg
ICBleGNlcHQ6CiAgICAgICAgICAgICByZXR1cm4gc3lzLm1heGludAogCisgICAgZGVmIGJ1aWxk
X3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnL3Vzci9iaW4vc3dfdmVycycsICct
YnVpbGRWZXJzaW9uJ10sIHJldHVybl9zdGRlcnI9RmFsc2UsIGlnbm9yZV9lcnJvcnM9VHJ1ZSku
cnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiB4Y29kZV9zZGtfdmVyc2lv
bihzZWxmLCBzZGtfbmFtZSk6CiAgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CiAgICAgICAgICAg
ICAjIEFzc3VtZXMgdGhhdCB4Y3J1biBkb2VzIG5vdCB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQg
b24gZmFpbHVyZSAoZS5nLiBTREsgZG9lcyBub3QgZXhpc3QpLgpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9j
ay5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3
IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW0KIAogCiBjbGFzcyBN
b2NrUGxhdGZvcm1JbmZvKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9zX25hbWU9
J21hYycsIG9zX3ZlcnNpb249VmVyc2lvbi5mcm9tX25hbWUoJ1Nub3cgTGVvcGFyZCcpKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgb3NfbmFtZT0nbWFjJywgb3NfdmVyc2lvbj1WZXJzaW9uLmZy
b21fbmFtZSgnSGlnaCBTaWVycmEnKSk6CiAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9zX3Zl
cnNpb24sIFZlcnNpb24pCiAgICAgICAgIHNlbGYub3NfbmFtZSA9IG9zX25hbWUKICAgICAgICAg
c2VsZi5vc192ZXJzaW9uID0gb3NfdmVyc2lvbgpAQCAtNzgsNiArNzgsMTEgQEAgY2xhc3MgTW9j
a1BsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRlZiB0ZXJtaW5hbF93aWR0aChzZWxmKToKICAg
ICAgICAgcmV0dXJuIDgwCiAKKyAgICBkZWYgYnVpbGRfdmVyc2lvbihzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5pc19tYWMoKToKKyAgICAgICAgICAgIHJldHVybiAnMTdBNDA1JworICAgICAgICBy
ZXR1cm4gTm9uZQorCiAgICAgZGVmIHhjb2RlX3Nka192ZXJzaW9uKHNlbGYsIHNka19uYW1lKToK
ICAgICAgICAgcmV0dXJuIFZlcnNpb24oOCwgMSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9yZXN1bHRzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MyBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3Ig
bW9kdWxlIGZpbGVzCisKKyMgS2VlcCB0aGlzIGZpbGUgZnJlZSBvZiBhbnkgY29kZSBvciBpbXBv
cnQgc3RhdGVtZW50cyB0aGF0IGNvdWxkCisjIGNhdXNlIGVpdGhlciBhbiBlcnJvciB0byBvY2N1
ciBvciBhIGxvZyBtZXNzYWdlIHRvIGJlIGxvZ2dlZC4KKyMgVGhpcyBlbnN1cmVzIHRoYXQgY2Fs
bGluZyBjb2RlIGNhbiBpbXBvcnQgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tCisjIHdlYmtpdHB5
IGJlZm9yZSBhbnkgZXJyb3JzIG9yIGxvZyBtZXNzYWdlcyBkdWUgdG8gY29kZSBpbiB0aGlzIGZp
bGUuCisjIEluaXRpYWxpemF0aW9uIGNvZGUgY2FuIGluY2x1ZGUgdGhpbmdzIGxpa2UgdmVyc2lv
bi1jaGVja2luZyBjb2RlIGFuZAorIyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gY29kZS4KKyMKKyMg
V2UgZG8gbm90IGV4ZWN1dGUgYW55IHZlcnNpb24tY2hlY2tpbmcgY29kZSBvciBsb2dnaW5nIGNv
bmZpZ3VyYXRpb24KKyMgY29kZSBpbiB0aGlzIGZpbGUgc28gdGhhdCBjYWxsZXJzIGNhbiBvcHQt
aW4gYXMgdGhleSB3YW50LiAgVGhpcyBhbHNvCisjIGFsbG93cyBkaWZmZXJlbnQgY2FsbGVycyB0
byBjaG9vc2UgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uIGNvZGUsCisjIGFzIG5lY2Vzc2FyeS4K
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IG9wdHBhcnNlCisKKworZGVmIHVwbG9hZF9vcHRpb25zKCk6Cisg
ICAgcmV0dXJuIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcmVwb3J0JywgYWN0
aW9uPSdhcHBlbmQnLCBkZXN0PSdyZXBvcnRfdXJscycsIGhlbHA9J1VSTCAob3IgVVJMcykgdG8g
cmVwb3J0IHRlc3QgcmVzdWx0cyB0bycpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1idWlsZGJvdC1tYXN0ZXInLCBoZWxwPSdUaGUgdXJsIG9mIHRoZSBidWlsZGJvdCBtYXN0ZXIu
JyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkZXItbmFtZScsIGhlbHA9
J1RoZSBuYW1lIG9mIHRoZSBidWlsZGJvdCBidWlsZGVyIHRlc3RzIHdlcmUgcnVuIG9uLicpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZC1udW1iZXInLCBoZWxwPSdUaGUg
YnVpbGRib3QgYnVpbGQgbnVtYmVyIHRlc3RzIGFyZSBhc3NvY2lhdGVkIHdpdGguJyksCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkYm90LXdvcmtlcicsIGhlbHA9J1RoZSBi
dWlsZGJvdCB3b3JrZXIgdGVzdHMgd2VyZSBydW4gb24uJyksCisgICAgXQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5CShub25leGlzdGVudCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxODkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5yZXF1ZXN0cworCitpbXBvcnQg
anNvbgoraW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBwbGF0Zm9ybSBhcyBw
bGF0Zm9ybV8KKworCitjbGFzcyBVcGxvYWQob2JqZWN0KToKKyAgICBVUExPQURfRU5EUE9JTlQg
PSAnL2FwaS91cGxvYWQnCisgICAgQlVJTERCT1RfREVUQUlMUyA9IFsnYnVpbGRib3QtbWFzdGVy
JywgJ2J1aWxkZXItbmFtZScsICdidWlsZC1udW1iZXInLCAnYnVpbGRib3Qtd29ya2VyJ10KKyAg
ICBWRVJTSU9OID0gMAorCisgICAgY2xhc3MgRXhwZWN0YXRpb25zOgorICAgICAgICAjIFRoZXNl
IGFyZSBvcmRlcmVkIGJ5IHByaW9yaXR5LCBtZWFuaW5nIHRoYXQgYSB0ZXN0IHdoaWNoIGJvdGgg
Y3Jhc2hlcyBhbmQgaGFzCisgICAgICAgICMgYSB3YXJuaW5nIHNob3VsZCBiZSBjb25zaWRlcmVk
IHRvIGhhdmUgY3Jhc2hlZC4KKyAgICAgICAgT1JERVIgPSBbCisgICAgICAgICAgICAnQ1JBU0gn
LAorICAgICAgICAgICAgJ1RJTUVPVVQnLAorICAgICAgICAgICAgJ0lNQUdFJywgICAjIEltYWdl
LWRpZmYKKyAgICAgICAgICAgICdBVURJTycsICAgIyBBdWRpby1kaWZmCisgICAgICAgICAgICAn
VEVYVCcsICAgICMgVGV4dC1kaWZmCisgICAgICAgICAgICAnRkFJTCcsCisgICAgICAgICAgICAn
RVJST1InLAorICAgICAgICAgICAgJ1dBUk5JTkcnLAorICAgICAgICAgICAgJ1BBU1MnLAorICAg
ICAgICBdCisgICAgICAgIENSQVNILCBUSU1FT1VULCBJTUFHRSwgQVVESU8sIFRFWFQsIEZBSUws
IEVSUk9SLCBXQVJOSU5HLCBQQVNTID0gT1JERVIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICBwbGF0Zm9ybT1Ob25lLAorICAg
ICAgICAgICAgaXNfc2ltdWxhdG9yPUZhbHNlLAorICAgICAgICAgICAgdmVyc2lvbj1Ob25lLAor
ICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPU5vbmUsCisgICAgICAgICAgICB2ZXJzaW9uX25hbWU9
Tm9uZSwKKyAgICAgICAgICAgIG1vZGVsPU5vbmUsCisgICAgICAgICAgICBzdHlsZT1Ob25lLCAg
ICMgRGVidWcvUHJvZHVjdGlvbi9SZWxlYXNlCisgICAgICAgICAgICBmbGF2b3I9Tm9uZSwgICMg
RHVtcGluZyBncm91bmQgc3VpdGUtd2lkZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgKGllLCBHdWFy
ZE1hbGxvYykKKyAgICAgICAgICAgIHNkaz1Ob25lLAorICAgICAgICApOgorCisgICAgICAgICMg
VGhpcyBkZXZpYXRlcyBzbGlnaHRseSBmcm9tIHRoZSByZXN0IG9mIHdlYmtpdHB5LCBidXQgaXQg
YWxsb3dzIHRoaXMgZmlsZSB0byBiZSBlbnRpcmVseSBwb3J0YWJsZS4KKyAgICAgICAgY29uZmln
ID0gZGljdCgKKyAgICAgICAgICAgIHBsYXRmb3JtPXBsYXRmb3JtIG9yIChwbGF0Zm9ybV8uc3lz
dGVtKCkgaWYgcGxhdGZvcm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVsc2UgJ21hYycpLmxvd2Vy
KCksCisgICAgICAgICAgICBpc19zaW11bGF0b3I9aXNfc2ltdWxhdG9yLAorICAgICAgICAgICAg
dmVyc2lvbj12ZXJzaW9uIG9yIChwbGF0Zm9ybV8ucmVsZWFzZSgpIGlmIHBsYXRmb3JtXy5zeXN0
ZW0oKSAhPSAnRGFyd2luJyBlbHNlIHBsYXRmb3JtXy5tYWNfdmVyKClbMF0pLAorICAgICAgICAg
ICAgYXJjaGl0ZWN0dXJlPWFyY2hpdGVjdHVyZSBvciBwbGF0Zm9ybV8ubWFjaGluZSgpLAorICAg
ICAgICApCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbmZpZy5pdGVyaXRlbXMoKToKKyAg
ICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcigne30gbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uJy5mb3JtYXQoa2V5
KSkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGljdCh2ZXJzaW9uX25hbWU9dmVyc2lvbl9u
YW1lLCBtb2RlbD1tb2RlbCwgc3R5bGU9c3R5bGUsIGZsYXZvcj1mbGF2b3IsIHNkaz1zZGspLml0
ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICAgICAgY29uZmlnW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gY29uZmlnCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9jb21taXQocmVwb3NpdG9yeV9pZD1Ob25lLCBp
ZD1Ob25lLCBicmFuY2g9Tm9uZSk6CisgICAgICAgIGNvbW1pdCA9IGRpY3QocmVwb3NpdG9yeV9p
ZD1yZXBvc2l0b3J5X2lkLCBpZD1pZCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gY29tbWl0
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRlZmluZWQgaW4gYSBjb21taXQnLmZv
cm1hdChrZXkpKQorICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICBjb21taXRbJ2JyYW5j
aCddID0gYnJhbmNoCisgICAgICAgIHJldHVybiBjb21taXQKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgY3JlYXRlX2RldGFpbHMobGluaz1Ob25lLCBvcHRpb25zPU5vbmUsICoqa3dhcmdz
KToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgaWYgbGluazoKKyAg
ICAgICAgICAgIHJlc3VsdFsnbGluayddID0gbGluaworCisgICAgICAgIGlmIG9wdGlvbnM6Cisg
ICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBVcGxvYWQuQlVJTERCT1RfREVUQUlMUzoKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob3B0aW9ucywgZWxlbWVudC5yZXBsYWNlKCctJywg
J18nKSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0W2VsZW1lbnRdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHJl
c3VsdAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfcnVuX3N0YXRzKHN0YXJ0
X3RpbWU9Tm9uZSwgZW5kX3RpbWU9Tm9uZSwgdGVzdHNfc2tpcHBlZD1Ob25lLCAqKmt3YXJncyk6
CisgICAgICAgIHN0YXRzID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgZm9yIGtleSwgdmFsdWUg
aW4gZGljdChzdGFydF90aW1lPXN0YXJ0X3RpbWUsIGVuZF90aW1lPWVuZF90aW1lLCB0ZXN0c19z
a2lwcGVkPXRlc3RzX3NraXBwZWQpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RhdHNba2V5XSA9IHZhbHVlCisgICAgICAg
IHJldHVybiBzdGF0cworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfdGVzdF9y
ZXN1bHQoZXhwZWN0ZWQ9Tm9uZSwgYWN0dWFsPU5vbmUsIGxvZz1Ob25lLCAqKmt3YXJncyk6Cisg
ICAgICAgIHJlc3VsdCA9IGRpY3QoKiprd2FyZ3MpCisKKyAgICAgICAgIyBUZXN0cyB3aGljaCBk
b24ndCBkZWNsYXJlIGV4cGVjdGF0aW9ucyBvciByZXN1bHRzIGFyZSBhc3N1bWVkIHRvIGhhdmUg
cGFzc2VkLgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KGV4cGVjdGVkPWV4cGVjdGVk
LCBhY3R1YWw9YWN0dWFsLCBsb2c9bG9nKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZh
bHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1aXRlPU5vbmUs
IGNvbmZpZ3VyYXRpb249Tm9uZSwgY29tbWl0cz1bXSwgdGltZXN0YW1wPU5vbmUsIGRldGFpbHM9
Tm9uZSwgcnVuX3N0YXRzPU5vbmUsIHJlc3VsdHM9e30pOgorICAgICAgICBzZWxmLnN1aXRlID0g
c3VpdGUKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorICAgICAg
ICBzZWxmLmNvbW1pdHMgPSBjb21taXRzCisgICAgICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0
YW1wCisgICAgICAgIHNlbGYuZGV0YWlscyA9IGRldGFpbHMKKyAgICAgICAgc2VsZi5ydW5fc3Rh
dHMgPSBydW5fc3RhdHMKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gcmVzdWx0cworCisgICAgY2xh
c3MgRW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKToKKworICAgICAgICBkZWYgZGVmYXVsdChzZWxm
LCBvYmopOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIFVwbG9hZCk6CisgICAgICAg
ICAgICAgICAgaWYgbm90IG9iai5zdWl0ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignTm8gc3VpdGUgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKyAgICAgICAg
ICAgICAgICBpZiBub3Qgb2JqLmNvbW1pdHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoJ05vIGNvbW1pdHMgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKworICAg
ICAgICAgICAgICAgIGRldGFpbHMgPSBvYmouZGV0YWlscyBvciBvYmouY3JlYXRlX2RldGFpbHMo
KQorICAgICAgICAgICAgICAgIGJ1aWxkYm90X2FyZ3MgPSBbZGV0YWlscy5nZXQoYXJnLCBOb25l
KSBpcyBOb25lIGZvciBhcmcgaW4gb2JqLkJVSUxEQk9UX0RFVEFJTFNdCisgICAgICAgICAgICAg
ICAgaWYgYW55KGJ1aWxkYm90X2FyZ3MpIGFuZCBub3QgYWxsKGJ1aWxkYm90X2FyZ3MpOgorICAg
ICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBbGwgYnVpbGRib3QgZGV0YWlscyBt
dXN0IGJlIGRlZmluZWQgZm9yIHVwbG9hZCcpCisKKyAgICAgICAgICAgICAgICBkZWYgdW5wYWNr
X3Rlc3QoY3VycmVudCwgcGF0aF90b190ZXN0LCBkYXRhKToKKyAgICAgICAgICAgICAgICAgICAg
aWYgbGVuKHBhdGhfdG9fdGVzdCkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRbcGF0aF90b190ZXN0WzBdXSA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3VycmVudC5nZXQocGF0aF90b190ZXN0WzBd
KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbcGF0aF90b190ZXN0WzBdXSA9IHt9
CisgICAgICAgICAgICAgICAgICAgIHVucGFja190ZXN0KGN1cnJlbnRbcGF0aF90b190ZXN0WzBd
XSwgcGF0aF90b190ZXN0WzE6XSwgZGF0YSkKKworICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB7
fQorICAgICAgICAgICAgICAgIGZvciB0ZXN0LCBkYXRhIGluIG9iai5yZXN1bHRzLml0ZXJpdGVt
cygpOgorICAgICAgICAgICAgICAgICAgICB1bnBhY2tfdGVzdChyZXN1bHRzLCB0ZXN0LnNwbGl0
KCcvJyksIGRhdGEpCisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkaWN0KAorICAgICAgICAg
ICAgICAgICAgICB2ZXJzaW9uPW9iai5WRVJTSU9OLAorICAgICAgICAgICAgICAgICAgICBzdWl0
ZT1vYmouc3VpdGUsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249b2JqLmNvbmZp
Z3VyYXRpb24gb3Igb2JqLmNyZWF0ZV9jb25maWd1cmF0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgIGNvbW1pdHM9b2JqLmNvbW1pdHMsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0
cz1kaWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscz1kZXRhaWxzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcnVuX3N0YXRzPW9iai5ydW5fc3RhdHMgb3Igb2JqLmNyZWF0ZV9y
dW5fc3RhdHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHM9cmVzdWx0cywKKyAg
ICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAg
aWYgb2JqLnRpbWVzdGFtcDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wyd0aW1lc3RhbXAn
XSA9IG9iai50aW1lc3RhbXAKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAg
ICAgICByZXR1cm4gc3VwZXIoVXBsb2FkLkVuY29kZXIsIHNlbGYpLmRlZmF1bHQob2JqKQorCisg
ICAgZGVmIHVwbG9hZChzZWxmLCB1cmwsIGxvZ19saW5lPWxhbWJkYSB2YWw6IHN5cy5zdGRvdXQu
d3JpdGUodmFsICsgJ1xuJykpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwb25zZSA9
IHJlcXVlc3RzLnBvc3QodXJsICsgc2VsZi5VUExPQURfRU5EUE9JTlQsIGRhdGE9anNvbi5kdW1w
cyhzZWxmLCBjbHM9VXBsb2FkLkVuY29kZXIpKQorICAgICAgICBleGNlcHQgcmVxdWVzdHMuZXhj
ZXB0aW9ucy5Db25uZWN0aW9uRXJyb3I6CisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsg
J0ZhaWxlZCB0byB1cGxvYWQgdG8ge30sIHJlc3VsdHMgc2VydmVyIG5vdCBvbmxpbmUnLmZvcm1h
dCh1cmwpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVy
cm9yIGFzIGU6CisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ0ZhaWxlZCB0byBlbmNv
ZGUgdXBsb2FkIGRhdGE6IHt9Jy5mb3JtYXQoZSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICBs
b2dfbGluZSgnICcgKiA0ICsgJ0Vycm9yIHVwbG9hZGluZyB0byB7fTonLmZvcm1hdCh1cmwpKQor
ICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogOCArIHJlc3BvbnNlLmpzb24oKVsnZGVzY3JpcHRp
b24nXSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGxvZ19saW5lKCcgJyAq
IDQgKyAnVXBsb2FkZWQgcmVzdWx0cyB0byB7fScuZm9ybWF0KHVybCkpCisgICAgICAgIHJldHVy
biBUcnVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxv
YWRfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9y
ZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxNSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgd2Via2l0
cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnJlcXVlc3RzCisKK2ltcG9ydCBjb2xsZWN0aW9u
cworaW1wb3J0IGpzb24KK2ltcG9ydCBtb2NrCitpbXBvcnQgcmVxdWVzdHMKK2ltcG9ydCB0aW1l
CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5yZXN1bHRzLnVwbG9hZCBpbXBvcnQg
VXBsb2FkCisKKworY2xhc3MgVXBsb2FkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBj
bGFzcyBPcHRpb25zKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJn
cyk6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2FyZ3MuaXRlcml0ZW1zKCk6Cisg
ICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbHVlKQorCisgICAgY2xhc3MgTW9j
a1Jlc3BvbnNlKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0dXNfY29k
ZT0yMDAsIHRleHQ9JycpOgorICAgICAgICAgICAgc2VsZi5zdGF0dXNfY29kZSA9IHN0YXR1c19j
b2RlCisgICAgICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisKKyAgICAgICAgZGVmIGpzb24oc2Vs
Zik6CisgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhzZWxmLnRleHQpCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIG5vcm1hbGl6ZShkYXRhKToKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShkYXRhLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBzdHIoZGF0YSkKKyAgICAg
ICAgZWxpZiBpc2luc3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLk1hcHBpbmcpOgorICAgICAgICAg
ICAgcmV0dXJuIGRpY3QobWFwKFVwbG9hZFRlc3Qubm9ybWFsaXplLCBkYXRhLml0ZXJpdGVtcygp
KSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKToK
KyAgICAgICAgICAgIHJldHVybiB0eXBlKGRhdGEpKG1hcChVcGxvYWRUZXN0Lm5vcm1hbGl6ZSwg
ZGF0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVm
IHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHN0YXJ0X3RpbWUsIGVuZF90aW1lID0gdGlt
ZS50aW1lKCkgLSAzLCB0aW1lLnRpbWUoKQorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAg
ICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29uZmlndXJhdGlv
bj1VcGxvYWQuY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICAgICAgcGxhdGZvcm09
J21hYycsCisgICAgICAgICAgICAgICAgdmVyc2lvbj0nMTAuMTMuMCcsCisgICAgICAgICAgICAg
ICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJyYScsCisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0
dXJlPSd4ODZfNjQnLAorICAgICAgICAgICAgICAgIHNkaz0nMTdBNDA1JywKKyAgICAgICAgICAg
ICksCisgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhsaW5rPSdodHRw
czovL3dlYmtpdC5vcmcnKSwKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29t
bWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAg
ICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAg
ICAgKV0sCisgICAgICAgICAgICBydW5fc3RhdHM9VXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisg
ICAgICAgICAgICAgICAgc3RhcnRfdGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgICAgIGVu
ZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwKKyAgICAg
ICAgICAgICksCisgICAgICAgICAgICByZXN1bHRzPXsKKyAgICAgICAgICAgICAgICAnd2Via2l0
cHkudGVzdDEnOiB7fSwKKyAgICAgICAgICAgICAgICAnd2Via2l0cHkudGVzdDInOiBVcGxvYWQu
Y3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0
dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgICAgICB9LAorICAgICAgICAp
CisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29u
LmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKSkpCisKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndmVyc2lvbiddLCAwKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGdlbmVyYXRlZF9kaWN0WydzdWl0ZSddLCAnd2Via2l0cHktdGVzdHMnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wydjb25maWd1cmF0aW9uJ10sIHNlbGYu
bm9ybWFsaXplKGRpY3QoCisgICAgICAgICAgICBwbGF0Zm9ybT0nbWFjJywKKyAgICAgICAgICAg
IGlzX3NpbXVsYXRvcj1GYWxzZSwKKyAgICAgICAgICAgIHZlcnNpb249JzEwLjEzLjAnLAorICAg
ICAgICAgICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJyYScsCisgICAgICAgICAgICBhcmNoaXRl
Y3R1cmU9J3g4Nl82NCcsCisgICAgICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICkpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wydjb21taXRzJ10sIFtkaWN0
KAorICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgIGlkPSc1
JywKKyAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICApXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwg
c2VsZi5ub3JtYWxpemUoZGljdChsaW5rPSdodHRwczovL3dlYmtpdC5vcmcnKSkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydydW5fc3Rh
dHMnXSwgc2VsZi5ub3JtYWxpemUoZGljdCgKKyAgICAgICAgICAgIHN0YXJ0X3RpbWU9c3RhcnRf
dGltZSwKKyAgICAgICAgICAgIGVuZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgdGVzdHNf
c2tpcHBlZD0wLAorICAgICAgICApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0
ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAg
ICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisgICAgICAgICAgICAnd2Via2l0cHkudGVz
dDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlv
bnMuUEFTUywgYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgIH0pKQor
CisgICAgZGVmIHRlc3RfdXBsb2FkKHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisg
ICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1b
VXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Vi
a2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0
cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAgKQorCisgICAgICAgIHdpdGggbW9jay5w
YXRjaCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNw
b25zZSgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cGxvYWQudXBsb2FkKCdodHRw
czovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAg
ICAgICBkZWYgcmFpc2VfZXhjZXB0aW9uKHVybCwgZGF0YSk6CisgICAgICAgICAgICByYWlzZSBy
ZXF1ZXN0cy5leGNlcHRpb25zLkNvbm5lY3Rpb25FcnJvcigpCisKKyAgICAgICAgd2l0aCBtb2Nr
LnBhdGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PXJhaXNlX2V4Y2VwdGlvbik6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHVwbG9hZC51cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1
bHRzJywgbG9nX2xpbmU9bGFtYmRhIF86IE5vbmUpKQorCisgICAgICAgIHdpdGggbW9jay5wYXRj
aCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNwb25z
ZSgKKyAgICAgICAgICAgIHN0YXR1c19jb2RlPTQwNCwKKyAgICAgICAgICAgIHRleHQ9anNvbi5k
dW1wcyhkaWN0KGRlc2NyaXB0aW9uPSdObyBzdWNoIGFkZHJlc3MnKSksCisgICAgICAgICkpOgor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dlYmtp
dC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAgIGRlZiB0ZXN0
X3BhY2tlZF90ZXN0KHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAg
ICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNy
ZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAg
ICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisg
ICAgICAgICAgICApXSwKKyAgICAgICAgICAgIHJlc3VsdHM9eworICAgICAgICAgICAgICAgICdk
aXIxL3N1Yi1kaXIxL3Rlc3QxJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBs
b2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90
ZXN0Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlv
bnMuVElNRU9VVCksCisgICAgICAgICAgICAgICAgJ2RpcjEvc3ViLWRpcjIvdGVzdDMnOiB7fSwK
KyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMi90ZXN0NCc6IHt9LAorICAgICAgICAgICAg
ICAgICdkaXIyL3N1Yi1kaXIzL3Rlc3Q1Jzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjIvdGVz
dDYnOiB7fSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGlj
dCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxv
YWQuRW5jb2RlcikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0
ZXN0X3Jlc3VsdHMnXVsncmVzdWx0cyddLCBzZWxmLm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAn
ZGlyMSc6IHsKKyAgICAgICAgICAgICAgICAnc3ViLWRpcjEnOiB7CisgICAgICAgICAgICAgICAg
ICAgICd0ZXN0MSc6IHsnYWN0dWFsJzogVXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMfSwKKyAgICAg
ICAgICAgICAgICAgICAgJ3Rlc3QyJzogeydhY3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLlRJ
TUVPVVR9LAorICAgICAgICAgICAgICAgIH0sICdzdWItZGlyMic6IHsKKyAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3QzJzoge30sCisgICAgICAgICAgICAgICAgICAgICd0ZXN0NCc6IHt9LAorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sICdkaXIyJzogeworICAgICAgICAgICAgICAg
ICdzdWItZGlyMyc6IHsndGVzdDUnOiB7fX0sCisgICAgICAgICAgICAgICAgJ3Rlc3Q2Jzoge30s
CisgICAgICAgICAgICB9LAorICAgICAgICB9KSkKKworICAgIGRlZiB0ZXN0X25vX3N1aXRlKHNl
bGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBjb21taXRzPVtVcGxv
YWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQn
LAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5r
JywKKyAgICAgICAgICAgICldLAorICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVw
bG9hZC5FbmNvZGVyKQorCisgICAgZGVmIHRlc3Rfbm9fY29tbWl0cyhzZWxmKToKKyAgICAgICAg
dXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAg
ICAgICAgKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAg
ICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRl
ZiB0ZXN0X2J1aWxkYm90KHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAg
ICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2Fk
LmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywK
KyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycs
CisgICAgICAgICAgICApXSwKKyAgICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRh
aWxzKG9wdGlvbnM9c2VsZi5PcHRpb25zKAorICAgICAgICAgICAgICAgIGJ1aWxkYm90X21hc3Rl
cj0nd2Via2l0Lm9yZycsCisgICAgICAgICAgICAgICAgYnVpbGRlcl9uYW1lPSdRdWV1ZS0xJywK
KyAgICAgICAgICAgICAgICBidWlsZF9udW1iZXI9MSwKKyAgICAgICAgKSkpCisgICAgICAgIHdp
dGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBz
KHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQorCisgICAgICAgIHVwbG9hZC5kZXRhaWxzWydi
dWlsZGJvdC13b3JrZXInXSA9ICdib3QxMjMnCisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2Vs
Zi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNv
ZGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVz
dWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICdidWlsZGJv
dC1tYXN0ZXInOiAnd2Via2l0Lm9yZycsCisgICAgICAgICAgICAnYnVpbGRlci1uYW1lJzogJ1F1
ZXVlLTEnLAorICAgICAgICAgICAgJ2J1aWxkLW51bWJlcic6IDEsCisgICAgICAgICAgICAnYnVp
bGRib3Qtd29ya2VyJzogJ2JvdDEyMycsCisgICAgICAgIH0pKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L21haW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90ZXN0L21haW4ucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGVzdC9tYWluLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCiAjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBK
ZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCi0jIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzgsMTcgKzM4LDE5IEBAIGltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCB1bml0dGVzdAog
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ubG9ndXRpbHMgaW1wb3J0IGNvbmZpZ3VyZV9s
b2dnaW5nCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVj
dXRpdmUsIFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZl
IGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0
ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1o
b3N0IGltcG9ydCBTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBI
b3N0CiBmcm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBDb25maWcKIGZyb20gd2Via2l0
cHkudGVzdC5maW5kZXIgaW1wb3J0IEZpbmRlcgogZnJvbSB3ZWJraXRweS50ZXN0LnByaW50ZXIg
aW1wb3J0IFByaW50ZXIKIGZyb20gd2Via2l0cHkudGVzdC5ydW5uZXIgaW1wb3J0IFJ1bm5lciwg
dW5pdF90ZXN0X25hbWUKK2Zyb20gd2Via2l0cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVwbG9h
ZAorZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9wdGlvbnMgaW1wb3J0IHVwbG9hZF9vcHRpb25zCiAK
IF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAotX2hvc3QgPSBTeXN0ZW1Ib3N0
KCkKK19ob3N0ID0gSG9zdCgpCiBfd2Via2l0X3Jvb3QgPSBOb25lCiAKIApAQCAtMTI0LDEyICsx
MjYsMTUgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIHBhcnNlciA9IG9wdHBhcnNl
Lk9wdGlvblBhcnNlcih1c2FnZT0ndXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBbYXJncy4uLl0nKQog
CiAgICAgICAgICMgIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbmx5IGVmZmVjdCB0aGUgYnVpbGRp
bmcgb2YgbGxkYldlYktpdFRlc3Rlci4KLSAgICAgICAgY29uZmlndXJhdGlvbl9ncm91cCA9IG9w
dHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgJ0NvbmZpZ3VyYXRpb24gb3B0aW9ucycpCi0gICAg
ICAgIGNvbmZpZ3VyYXRpb25fZ3JvdXAuYWRkX29wdGlvbignLS1kZWJ1ZycsIGFjdGlvbj0nc3Rv
cmVfY29uc3QnLCBjb25zdD0nRGVidWcnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKLSAgICAgICAg
ICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBEZWJ1ZycpCi0gICAgICAgIGNvbmZp
Z3VyYXRpb25fZ3JvdXAuYWRkX29wdGlvbignLS1yZWxlYXNlJywgYWN0aW9uPSdzdG9yZV9jb25z
dCcsIGNvbnN0PSdSZWxlYXNlJywgZGVzdD0iY29uZmlndXJhdGlvbiIsCi0gICAgICAgICAgICBo
ZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gUmVsZWFzZScpCi0gICAgICAgIHBhcnNlci5h
ZGRfb3B0aW9uX2dyb3VwKGNvbmZpZ3VyYXRpb25fZ3JvdXApCisgICAgICAgIGZvciBncm91cF9u
YW1lLCBncm91cF9vcHRpb25zIGluIHsnVXBsb2FkIE9wdGlvbnMnOiB1cGxvYWRfb3B0aW9ucygp
LCAnQ29uZmlndXJhdGlvbiBPcHRpb25zJzogWworICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oJy0tZGVidWcnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J0RlYnVnJywgZGVz
dD0iY29uZmlndXJhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gRGVidWcnKSwKKyAgICAgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCctLXJlbGVhc2UnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Jl
bGVhc2UnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBSZWxlYXNlJyksCisgICAgICAg
IF19Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgb3B0aW9uX2dyb3VwID0gb3B0cGFyc2UuT3B0
aW9uR3JvdXAocGFyc2VyLCBncm91cF9uYW1lKQorICAgICAgICAgICAgb3B0aW9uX2dyb3VwLmFk
ZF9vcHRpb25zKGdyb3VwX29wdGlvbnMpCisgICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9n
cm91cChvcHRpb25fZ3JvdXApCiAKICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1hJywgJy0t
YWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0ncnVuIGFsbCB0aGUgdGVzdHMnKQpAQCAtMTgxLDExICsxODYsMTIg
QEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0
eSBpbXBvcnQgYXV0b2luc3RhbGxfZXZlcnl0aGluZwogICAgICAgICBhdXRvaW5zdGFsbF9ldmVy
eXRoaW5nKCkKIAorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgY29u
ZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIuZmlsZXN5c3RlbSkKKyAg
ICAgICAgY29uZmlndXJhdGlvbl90b191c2UgPSBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24g
b3IgY29uZmlnLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAgICAgICAgIGlmIHdpbGxfcnVuX2xs
ZGJfd2Via2l0X3Rlc3RzOgogICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgn
QnVpbGRpbmcgbGxkYldlYktpdFRlc3RlciAuLi4nKQogICAgICAgICAgICAgYnVpbGRfbGxkYndl
YmtpdHRlc3RlciA9IHNlbGYuZmluZGVyLmZpbGVzeXN0ZW0uam9pbihfd2Via2l0X3Jvb3QsICdU
b29scycsICdTY3JpcHRzJywgJ2J1aWxkLWxsZGJ3ZWJraXR0ZXN0ZXInKQotICAgICAgICAgICAg
Y29uZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIuZmlsZXN5c3RlbSkK
LSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25fdG9fdXNlID0gc2VsZi5fb3B0aW9ucy5jb25maWd1
cmF0aW9uIG9yIGNvbmZpZy5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQogICAgICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgICAgIF9ob3N0LmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwo
W2J1aWxkX2xsZGJ3ZWJraXR0ZXN0ZXIsIGNvbmZpZy5mbGFnX2Zvcl9jb25maWd1cmF0aW9uKGNv
bmZpZ3VyYXRpb25fdG9fdXNlKV0sIHF1aWV0PShub3QgYm9vbChzZWxmLl9vcHRpb25zLnZlcmJv
c2UpKSkKICAgICAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciBhcyBlOgpAQCAtMjE4LDYgKzIy
NCw3IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICB0ZXN0X3J1bm5lciA9IFJ1bm5l
cihzZWxmLnByaW50ZXIsIGxvYWRlcikKICAgICAgICAgdGVzdF9ydW5uZXIucnVuKHBhcmFsbGVs
X3Rlc3RzLCBzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykKICAgICAgICAgdGVzdF9ydW5u
ZXIucnVuKHNlcmlhbF90ZXN0cywgMSkKKyAgICAgICAgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQog
CiAgICAgICAgIHNlbGYucHJpbnRlci5wcmludF9yZXN1bHQodGltZS50aW1lKCkgLSBzdGFydCkK
IApAQCAtMjMyLDkgKzIzOSw1MCBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKICAgICAgICAgICAgIGNvdi5zdG9wKCkKICAgICAgICAg
ICAgIGNvdi5zYXZlKCkKKworICAgICAgICBmYWlsZWRfdXBsb2FkcyA9IDAKKyAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5yZXBvcnRfdXJsczoKKyAgICAgICAgICAgIHNlbGYucHJpbnRlci5tZXRl
ci53cml0ZWxuKCdcbicpCisgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKCdQ
cmVwYXJpbmcgdXBsb2FkIGRhdGEgLi4uJykKKworICAgICAgICAgICAgcmVzdWx0cyA9IHt0ZXN0
OiB7fSBmb3IgdGVzdCBpbiB0ZXN0X3J1bm5lci50ZXN0c19ydW59CisgICAgICAgICAgICBmb3Ig
dGVzdCwgZXJyb3JzIGluIHRlc3RfcnVubmVyLmVycm9yczoKKyAgICAgICAgICAgICAgICByZXN1
bHRzW3Rlc3RdID0gVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4cGVj
dGF0aW9ucy5FUlJPUiwgbG9nPScvbicuam9pbihlcnJvcnMpKQorICAgICAgICAgICAgZm9yIHRl
c3QsIGZhaWx1cmVzIGluIHRlc3RfcnVubmVyLmZhaWx1cmVzOgorICAgICAgICAgICAgICAgIHJl
c3VsdHNbdGVzdF0gPSBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhw
ZWN0YXRpb25zLkZBSUwsIGxvZz0nL24nLmpvaW4oZmFpbHVyZXMpKQorCisgICAgICAgICAgICBf
aG9zdC5pbml0aWFsaXplX3NjbSgpCisgICAgICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAg
ICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgICAgICBjb25m
aWd1cmF0aW9uPVVwbG9hZC5jcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgICAgICAg
ICAgcGxhdGZvcm09X2hvc3QucGxhdGZvcm0ub3NfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
dmVyc2lvbj1zdHIoX2hvc3QucGxhdGZvcm0ub3NfdmVyc2lvbiksCisgICAgICAgICAgICAgICAg
ICAgIHZlcnNpb25fbmFtZT1faG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uX25hbWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgc3R5bGU9Y29uZmlndXJhdGlvbl90b191c2UsCisgICAgICAgICAgICAg
ICAgICAgIHNkaz1faG9zdC5wbGF0Zm9ybS5idWlsZF92ZXJzaW9uKCksCisgICAgICAgICAgICAg
ICAgKSwKKyAgICAgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhvcHRp
b25zPXNlbGYuX29wdGlvbnMpLAorICAgICAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVh
dGVfY29tbWl0KAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAor
ICAgICAgICAgICAgICAgICAgICBpZD1faG9zdC5zY20oKS5uYXRpdmVfcmV2aXNpb24oX3dlYmtp
dF9yb290KSwKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoPV9ob3N0LnNjbSgpLm5hdGl2ZV9i
cmFuY2goX3dlYmtpdF9yb290KSwKKyAgICAgICAgICAgICAgICApXSwKKyAgICAgICAgICAgICAg
ICBydW5fc3RhdHM9VXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisgICAgICAgICAgICAgICAgICAg
IHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgZW5kX3RpbWU9ZW5k
X3RpbWUsCisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9bGVuKHRlc3RfcnVubmVy
LnRlc3RzX3J1bikgLSBsZW4ocGFyYWxsZWxfdGVzdHMpIC0gbGVuKHNlcmlhbF90ZXN0cyksCisg
ICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICByZXN1bHRzPXJlc3VsdHMsCisgICAg
ICAgICAgICApCisgICAgICAgICAgICBmb3IgdXJsIGluIHNlbGYuX29wdGlvbnMucmVwb3J0X3Vy
bHM6CisgICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgnVXBsb2FkaW5n
IHRvIHt9IC4uLicuZm9ybWF0KHVybCkpCisgICAgICAgICAgICAgICAgZmFpbGVkX3VwbG9hZHMg
PSBmYWlsZWRfdXBsb2FkcyBpZiB1cGxvYWQudXBsb2FkKHVybCwgbG9nX2xpbmU9c2VsZi5wcmlu
dGVyLm1ldGVyLndyaXRlbG4pIGVsc2UgKGZhaWxlZF91cGxvYWRzICsgMSkKKyAgICAgICAgICAg
IHNlbGYucHJpbnRlci5tZXRlci53cml0ZWxuKCdVcGxvYWRzIGNvbXBsZXRlZCEnKQorCisgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMuY292ZXJhZ2U6CiAgICAgICAgICAgICBjb3YucmVwb3J0KHNo
b3dfbWlzc2luZz1GYWxzZSkKIAotICAgICAgICByZXR1cm4gbm90IHNlbGYucHJpbnRlci5udW1f
ZXJyb3JzIGFuZCBub3Qgc2VsZi5wcmludGVyLm51bV9mYWlsdXJlcworICAgICAgICByZXR1cm4g
bm90IHNlbGYucHJpbnRlci5udW1fZXJyb3JzIGFuZCBub3Qgc2VsZi5wcmludGVyLm51bV9mYWls
dXJlcyBhbmQgbm90IGZhaWxlZF91cGxvYWRzCiAKICAgICBkZWYgX2NoZWNrX2ltcG9ydHMoc2Vs
ZiwgbmFtZXMpOgogICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0L3J1bm5lci5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L3J1bm5lci5weQkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBjbGFzcyBSdW5uZXIob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJpbnRlciwg
bG9hZGVyKToKICAgICAgICAgc2VsZi5wcmludGVyID0gcHJpbnRlcgogICAgICAgICBzZWxmLmxv
YWRlciA9IGxvYWRlcgotICAgICAgICBzZWxmLnRlc3RzX3J1biA9IDAKKyAgICAgICAgc2VsZi50
ZXN0c19ydW4gPSBbXQogICAgICAgICBzZWxmLmVycm9ycyA9IFtdCiAgICAgICAgIHNlbGYuZmFp
bHVyZXMgPSBbXQogICAgICAgICBzZWxmLndvcmtlcl9mYWN0b3J5ID0gbGFtYmRhIGNhbGxlcjog
X1dvcmtlcihjYWxsZXIsIHNlbGYubG9hZGVyKQpAQCAtNjAsNyArNjAsNyBAQCBjbGFzcyBSdW5u
ZXIob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYucHJpbnRlci5wcmludF9zdGFydGVkX3Rlc3Qo
c291cmNlLCB0ZXN0X25hbWUpCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBzZWxmLnRl
c3RzX3J1biArPSAxCisgICAgICAgIHNlbGYudGVzdHNfcnVuLmFwcGVuZCh0ZXN0X25hbWUpCiAg
ICAgICAgIGlmIGZhaWx1cmVzOgogICAgICAgICAgICAgc2VsZi5mYWlsdXJlcy5hcHBlbmQoKHRl
c3RfbmFtZSwgZmFpbHVyZXMpKQogICAgICAgICBpZiBlcnJvcnM6CkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0Mjky
MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDYgQEAgY2xhc3MgUnVubmVyVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCd0ZXN0MyAoRm9vKScsICdF
JywgJ3Rlc3QzXG5lcnJlZCcpKQogICAgICAgICBydW5uZXIgPSBSdW5uZXIoUHJpbnRlcihzdHJl
YW0sIG9wdGlvbnMpLCBsb2FkZXIpCiAgICAgICAgIHJ1bm5lci5ydW4oWydGb28udGVzdDEnLCAn
Rm9vLnRlc3QyJywgJ0Zvby50ZXN0MyddLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1
bm5lci50ZXN0c19ydW4sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJ1bm5lci50
ZXN0c19ydW4pLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5uZXIuZmFpbHVy
ZXMpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5uZXIuZXJyb3JzKSwgMSkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkJ
KHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9f
X2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw4IEBAIGNsYXNzIEF1dG9p
bnN0YWxsSW1wb3J0SG9vayhvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9weXRl
c3RfdGltZW91dCgpCiAgICAgICAgIGVsaWYgJy5weXRlc3QnIGluIGZ1bGxuYW1lOgogICAgICAg
ICAgICAgc2VsZi5faW5zdGFsbF9weXRlc3QoKQorICAgICAgICBlbGlmICcucmVxdWVzdHMnIGlu
IGZ1bGxuYW1lOgorICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9yZXF1ZXN0cygpCiAKICAgICBk
ZWYgX2luc3RhbGxfbWVjaGFuaXplKHNlbGYpOgogICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRw
czovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL20vbWVjaGFuaXplL21l
Y2hhbml6ZS0wLjIuNS50YXIuZ3oiLApAQCAtMTYxLDYgKzE2MywzMiBAQCBjbGFzcyBBdXRvaW5z
dGFsbEltcG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9m
aWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2EyL2VjLzQxNWQwY2NjYzFlZDQxY2Q3ZmRm
NjlhZDk4OWRhMTZhOGQxMzA1Nzk5NjM3MTAwNGNhYjRiYWZjNDhmMy9weXRlc3QtMy42LjIudGFy
Lmd6IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRlc3QtMy42LjIvc3JjL3B5
dGVzdC5weSIpCiAKKyAgICBkZWYgX2luc3RhbGxfcmVxdWVzdHMoc2VsZik6CisgICAgICAgIGlu
c3RhbGxlciA9IEF1dG9JbnN0YWxsZXIodGFyZ2V0X2Rpcj1zZWxmLl9mcy5qb2luKF9BVVRPSU5T
VEFMTEVEX0RJUikpCisKKyAgICAgICAgaW5zdGFsbGVyLmluc3RhbGwoCisgICAgICAgICAgICAi
aHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzLzA2L2I4L2QxZWEzODUxM2My
MmU4YzkwNjI3NWQxMzU4MThmZWUxNmFkODQ5NTk4NTk1NmE5YjdlMmJiMjE5NDJhMS9jZXJ0aWZp
LTIwMTkuMy45LnRhci5neiIsCisgICAgICAgICAgICB1cmxfc3VicGF0aD0iY2VydGlmaS0yMDE5
LjMuOS9jZXJ0aWZpIiwKKyAgICAgICAgICAgIHRhcmdldF9uYW1lPSJjZXJ0aWZpIiwKKyAgICAg
ICAgKQorICAgICAgICBpbnN0YWxsZXIuaW5zdGFsbCgKKyAgICAgICAgICAgICJodHRwczovL2Zp
bGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvZmMvYmIvYTU3NjhjMjMwZjlkZGIwM2FjYzll
ZjNmMGQ0YTNjZjkzNDYyNDczNzk1ZDE4ZTk1MzU0OThjOGY5MjlkL2NoYXJkZXQtMy4wLjQudGFy
Lmd6IiwKKyAgICAgICAgICAgIHVybF9zdWJwYXRoPSJjaGFyZGV0LTMuMC40L2NoYXJkZXQiLAor
ICAgICAgICAgICAgdGFyZ2V0X25hbWU9ImNoYXJkZXQiLAorICAgICAgICApCisgICAgICAgIGlu
c3RhbGxlci5pbnN0YWxsKAorICAgICAgICAgICAgImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVk
Lm9yZy9wYWNrYWdlcy9hZC8xMy9lYjU2OTUxYjZmNzk1MGNhZGI1NzljYTE2NmU0NDhiYTc3Zjlk
MjRlZmMwM2VkZDdlNTVmYTU3ZDA0YjcvaWRuYS0yLjgudGFyLmd6IiwKKyAgICAgICAgICAgIHVy
bF9zdWJwYXRoPSJpZG5hLTIuOC9pZG5hIiwKKyAgICAgICAgICAgIHRhcmdldF9uYW1lPSdpZG5h
JykKKyAgICAgICAgaW5zdGFsbGVyLmluc3RhbGwoCisgICAgICAgICAgICB1cmw9Imh0dHBzOi8v
ZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9iMS81My8zN2Q4MmFiMzkxMzkzNTY1ZjJm
ODMxYjhlZWRiZmZkNTdkYjVhNzE4MjE2ZjgyZjFhOGI0ZDM4MWExYzEvdXJsbGliMy0xLjI0LjEu
dGFyLmd6IiwKKyAgICAgICAgICAgIHVybF9zdWJwYXRoPSJ1cmxsaWIzLTEuMjQuMSIsCisgICAg
ICAgICAgICB0YXJnZXRfbmFtZT0idXJsbGliMyIpCisgICAgICAgIGluc3RhbGxlci5pbnN0YWxs
KAorICAgICAgICAgICAgImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy81
Mi8yYy81MTRlNGFjMjVkYTJiMDhjYTVhNDY0YzUwNDYzNjgyMTI2Mzg1YzQyNzJjMTgxOTM4NzZl
OTFmNGJjMzgvcmVxdWVzdHMtMi4yMS4wLnRhci5neiIsCisgICAgICAgICAgICB1cmxfc3VicGF0
aD0icmVxdWVzdHMtMi4yMS4wL3JlcXVlc3RzIiwKKyAgICAgICAgICAgIHRhcmdldF9uYW1lPSJy
ZXF1ZXN0cyIpCisKICAgICBkZWYgX2luc3RhbGxfcHlsaW50KHNlbGYpOgogICAgICAgICBzZWxm
Ll9lbnN1cmVfYXV0b2luc3RhbGxlZF9kaXJfaXNfaW5fc3lzX3BhdGgoKQogICAgICAgICBpZiAo
bm90IHNlbGYuX2ZzLmV4aXN0cyhzZWxmLl9mcy5qb2luKF9BVVRPSU5TVEFMTEVEX0RJUiwgInB5
bGludCIpKSBvcgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1
ZXVlc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODMsMTAgKzE4MywxMCBAQCBjbGFzcyBQYXRjaFByb2Nlc3NpbmdRdWV1
ZVRlc3QoQ29tbWFuZHNUCiAgICAgICAgIHF1ZXVlLl9vcHRpb25zID0gTW9jaygpCiAgICAgICAg
IHF1ZXVlLl9vcHRpb25zLnBvcnQgPSBOb25lCiAgICAgICAgIHBhdGNoID0gcXVldWUuX3Rvb2wu
YnVncy5mZXRjaF9hdHRhY2htZW50KDEwMDAxKQotICAgICAgICBleHBlY3RlZF9sb2dzID0gIiIi
TU9DSyBhZGRfYXR0YWNobWVudF90b19idWc6IGJ1Z19pZD01MDAwMCwgZGVzY3JpcHRpb249QXJj
aGl2ZSBvZiBsYXlvdXQtdGVzdC1yZXN1bHRzIGZyb20gYm90IGZvciBtYWMtc25vd2xlb3BhcmQg
ZmlsZW5hbWU9bGF5b3V0LXRlc3QtcmVzdWx0cy56aXAgbWltZXR5cGU9Tm9uZQorICAgICAgICBl
eHBlY3RlZF9sb2dzID0gIiIiTU9DSyBhZGRfYXR0YWNobWVudF90b19idWc6IGJ1Z19pZD01MDAw
MCwgZGVzY3JpcHRpb249QXJjaGl2ZSBvZiBsYXlvdXQtdGVzdC1yZXN1bHRzIGZyb20gYm90IGZv
ciBtYWMtaGlnaHNpZXJyYSBmaWxlbmFtZT1sYXlvdXQtdGVzdC1yZXN1bHRzLnppcCBtaW1ldHlw
ZT1Ob25lCiAtLSBCZWdpbiBjb21tZW50IC0tCiBUaGUgYXR0YWNoZWQgdGVzdCBmYWlsdXJlcyB3
ZXJlIHNlZW4gd2hpbGUgcnVubmluZyBydW4td2Via2l0LXRlc3RzIG9uIHRoZSBtb2NrLXF1ZXVl
LgotUG9ydDogbWFjLXNub3dsZW9wYXJkICBQbGF0Zm9ybTogTW9ja1BsYXRmb3JtIDEuMAorUG9y
dDogbWFjLWhpZ2hzaWVycmEgIFBsYXRmb3JtOiBNb2NrUGxhdGZvcm0gMS4wCiAtLSBFbmQgY29t
bWVudCAtLQogIiIiCiAgICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxm
LCBxdWV1ZS5fdXBsb2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gsIFtwYXRjaCwgTW9jaygp
XSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364803</attachid>
            <date>2019-03-15 08:58:43 -0700</date>
            <delta_ts>2019-03-15 09:16:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190315085842.patch</filename>
            <type>text/plain</type>
            <size>61564</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0Mjk3OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE5LTAzLTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6Cisg
ICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOiBBZGQgcmVxdWVzdHMg
YXV0by1pbnN0YWxsLgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxsX3Jl
cXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBs
b2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGlu
Zy4KKwogMjAxOS0wMy0xNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgTW92ZSBJREIgc3RvcmFnZSBpbiBwcml2YXRlIGJyb3dzaW5nIG1vZGUgdG8gTmV0d29y
a1Byb2Nlc3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18u
cHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5p
dF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKKyMgUmVxdWlyZWQgZm9yIFB5
dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCisjIEtlZXAg
dGhpcyBmaWxlIGZyZWUgb2YgYW55IGNvZGUgb3IgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBjb3Vs
ZAorIyBjYXVzZSBlaXRoZXIgYW4gZXJyb3IgdG8gb2NjdXIgb3IgYSBsb2cgbWVzc2FnZSB0byBi
ZSBsb2dnZWQuCisjIFRoaXMgZW5zdXJlcyB0aGF0IGNhbGxpbmcgY29kZSBjYW4gaW1wb3J0IGlu
aXRpYWxpemF0aW9uIGNvZGUgZnJvbQorIyB3ZWJraXRweSBiZWZvcmUgYW55IGVycm9ycyBvciBs
b2cgbWVzc2FnZXMgZHVlIHRvIGNvZGUgaW4gdGhpcyBmaWxlLgorIyBJbml0aWFsaXphdGlvbiBj
b2RlIGNhbiBpbmNsdWRlIHRoaW5ncyBsaWtlIHZlcnNpb24tY2hlY2tpbmcgY29kZSBhbmQKKyMg
bG9nZ2luZyBjb25maWd1cmF0aW9uIGNvZGUuCisjCisjIFdlIGRvIG5vdCBleGVjdXRlIGFueSB2
ZXJzaW9uLWNoZWNraW5nIGNvZGUgb3IgbG9nZ2luZyBjb25maWd1cmF0aW9uCisjIGNvZGUgaW4g
dGhpcyBmaWxlIHNvIHRoYXQgY2FsbGVycyBjYW4gb3B0LWluIGFzIHRoZXkgd2FudC4gIFRoaXMg
YWxzbworIyBhbGxvd3MgZGlmZmVyZW50IGNhbGxlcnMgdG8gY2hvb3NlIGRpZmZlcmVudCBpbml0
aWFsaXphdGlvbiBjb2RlLAorIyBhcyBuZWNlc3NhcnkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMz
IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcHRw
YXJzZQorCisKK2RlZiB1cGxvYWRfb3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJlcG9ydCcsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0ncmVw
b3J0X3VybHMnLCBoZWxwPSdVUkwgKG9yIFVSTHMpIHRvIHJlcG9ydCB0ZXN0IHJlc3VsdHMgdG8n
KSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRib3QtbWFzdGVyJywgaGVs
cD0nVGhlIHVybCBvZiB0aGUgYnVpbGRib3QgbWFzdGVyLicpLAorICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbignLS1idWlsZGVyLW5hbWUnLCBoZWxwPSdUaGUgbmFtZSBvZiB0aGUgYnVpbGRi
b3QgYnVpbGRlciB0ZXN0cyB3ZXJlIHJ1biBvbi4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oJy0tYnVpbGQtbnVtYmVyJywgaGVscD0nVGhlIGJ1aWxkYm90IGJ1aWxkIG51bWJlciB0
ZXN0cyBhcmUgYXNzb2NpYXRlZCB3aXRoLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bignLS1idWlsZGJvdC13b3JrZXInLCBoZWxwPSdUaGUgYnVpbGRib3Qgd29ya2VyIHRlc3RzIHdl
cmUgcnVuIG9uLicpLAorICAgIF0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0
cy91cGxvYWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRz
L3VwbG9hZC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3Vs
dHMvdXBsb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg5IEBACisjIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5
LmF1dG9pbnN0YWxsZWQucmVxdWVzdHMKKworaW1wb3J0IGpzb24KK2ltcG9ydCByZXF1ZXN0cwor
aW1wb3J0IHN5cworCitpbXBvcnQgcGxhdGZvcm0gYXMgcGxhdGZvcm1fCisKKworY2xhc3MgVXBs
b2FkKG9iamVjdCk6CisgICAgVVBMT0FEX0VORFBPSU5UID0gJy9hcGkvdXBsb2FkJworICAgIEJV
SUxEQk9UX0RFVEFJTFMgPSBbJ2J1aWxkYm90LW1hc3RlcicsICdidWlsZGVyLW5hbWUnLCAnYnVp
bGQtbnVtYmVyJywgJ2J1aWxkYm90LXdvcmtlciddCisgICAgVkVSU0lPTiA9IDAKKworICAgIGNs
YXNzIEV4cGVjdGF0aW9uczoKKyAgICAgICAgIyBUaGVzZSBhcmUgb3JkZXJlZCBieSBwcmlvcml0
eSwgbWVhbmluZyB0aGF0IGEgdGVzdCB3aGljaCBib3RoIGNyYXNoZXMgYW5kIGhhcworICAgICAg
ICAjIGEgd2FybmluZyBzaG91bGQgYmUgY29uc2lkZXJlZCB0byBoYXZlIGNyYXNoZWQuCisgICAg
ICAgIE9SREVSID0gWworICAgICAgICAgICAgJ0NSQVNIJywKKyAgICAgICAgICAgICdUSU1FT1VU
JywKKyAgICAgICAgICAgICdJTUFHRScsICAgIyBJbWFnZS1kaWZmCisgICAgICAgICAgICAnQVVE
SU8nLCAgICMgQXVkaW8tZGlmZgorICAgICAgICAgICAgJ1RFWFQnLCAgICAjIFRleHQtZGlmZgor
ICAgICAgICAgICAgJ0ZBSUwnLAorICAgICAgICAgICAgJ0VSUk9SJywKKyAgICAgICAgICAgICdX
QVJOSU5HJywKKyAgICAgICAgICAgICdQQVNTJywKKyAgICAgICAgXQorICAgICAgICBDUkFTSCwg
VElNRU9VVCwgSU1BR0UsIEFVRElPLCBURVhULCBGQUlMLCBFUlJPUiwgV0FSTklORywgUEFTUyA9
IE9SREVSCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9jb25maWd1cmF0aW9u
KAorICAgICAgICAgICAgcGxhdGZvcm09Tm9uZSwKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1G
YWxzZSwKKyAgICAgICAgICAgIHZlcnNpb249Tm9uZSwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVy
ZT1Ob25lLAorICAgICAgICAgICAgdmVyc2lvbl9uYW1lPU5vbmUsCisgICAgICAgICAgICBtb2Rl
bD1Ob25lLAorICAgICAgICAgICAgc3R5bGU9Tm9uZSwgICAjIERlYnVnL1Byb2R1Y3Rpb24vUmVs
ZWFzZQorICAgICAgICAgICAgZmxhdm9yPU5vbmUsICAjIER1bXBpbmcgZ3JvdW5kIHN1aXRlLXdp
ZGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIChpZSwgR3VhcmRNYWxsb2MpCisgICAgICAgICAgICBz
ZGs9Tm9uZSwKKyAgICAgICAgKToKKworICAgICAgICAjIFRoaXMgZGV2aWF0ZXMgc2xpZ2h0bHkg
ZnJvbSB0aGUgcmVzdCBvZiB3ZWJraXRweSwgYnV0IGl0IGFsbG93cyB0aGlzIGZpbGUgdG8gYmUg
ZW50aXJlbHkgcG9ydGFibGUuCisgICAgICAgIGNvbmZpZyA9IGRpY3QoCisgICAgICAgICAgICBw
bGF0Zm9ybT1wbGF0Zm9ybSBvciAocGxhdGZvcm1fLnN5c3RlbSgpIGlmIHBsYXRmb3JtXy5zeXN0
ZW0oKSAhPSAnRGFyd2luJyBlbHNlICdtYWMnKS5sb3dlcigpLAorICAgICAgICAgICAgaXNfc2lt
dWxhdG9yPWlzX3NpbXVsYXRvciwKKyAgICAgICAgICAgIHZlcnNpb249dmVyc2lvbiBvciAocGxh
dGZvcm1fLnJlbGVhc2UoKSBpZiBwbGF0Zm9ybV8uc3lzdGVtKCkgIT0gJ0RhcndpbicgZWxzZSBw
bGF0Zm9ybV8ubWFjX3ZlcigpWzBdKSwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVyZT1hcmNoaXRl
Y3R1cmUgb3IgcGxhdGZvcm1fLm1hY2hpbmUoKSwKKyAgICAgICAgKQorICAgICAgICBmb3Iga2V5
LCB2YWx1ZSBpbiBjb25maWcuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBO
b25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IG11c3QgYmUgZGVmaW5l
ZCBpbiB0aGUgY29uZmlndXJhdGlvbicuZm9ybWF0KGtleSkpCisgICAgICAgIGZvciBrZXksIHZh
bHVlIGluIGRpY3QodmVyc2lvbl9uYW1lPXZlcnNpb25fbmFtZSwgbW9kZWw9bW9kZWwsIHN0eWxl
PXN0eWxlLCBmbGF2b3I9Zmxhdm9yLCBzZGs9c2RrKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAg
IGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNvbmZpZ1trZXldID0gdmFs
dWUKKyAgICAgICAgcmV0dXJuIGNvbmZpZworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBj
cmVhdGVfY29tbWl0KHJlcG9zaXRvcnlfaWQ9Tm9uZSwgaWQ9Tm9uZSwgYnJhbmNoPU5vbmUpOgor
ICAgICAgICBjb21taXQgPSBkaWN0KHJlcG9zaXRvcnlfaWQ9cmVwb3NpdG9yeV9pZCwgaWQ9aWQp
CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbW1pdC5pdGVyaXRlbXMoKToKKyAgICAgICAg
ICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
e30gbXVzdCBiZSBkZWZpbmVkIGluIGEgY29tbWl0Jy5mb3JtYXQoa2V5KSkKKyAgICAgICAgaWYg
YnJhbmNoOgorICAgICAgICAgICAgY29tbWl0WydicmFuY2gnXSA9IGJyYW5jaAorICAgICAgICBy
ZXR1cm4gY29tbWl0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9kZXRhaWxz
KGxpbms9Tm9uZSwgb3B0aW9ucz1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHJlc3VsdCA9IGRp
Y3QoKiprd2FyZ3MpCisgICAgICAgIGlmIGxpbms6CisgICAgICAgICAgICByZXN1bHRbJ2xpbmsn
XSA9IGxpbmsKKworICAgICAgICBpZiBvcHRpb25zOgorICAgICAgICAgICAgZm9yIGVsZW1lbnQg
aW4gVXBsb2FkLkJVSUxEQk9UX0RFVEFJTFM6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRh
dHRyKG9wdGlvbnMsIGVsZW1lbnQucmVwbGFjZSgnLScsICdfJyksIE5vbmUpCisgICAgICAgICAg
ICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtl
bGVtZW50XSA9IHZhbHVlCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgY3JlYXRlX3J1bl9zdGF0cyhzdGFydF90aW1lPU5vbmUsIGVuZF90aW1lPU5v
bmUsIHRlc3RzX3NraXBwZWQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzdGF0cyA9IGRpY3Qo
Kiprd2FyZ3MpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRpY3Qoc3RhcnRfdGltZT1zdGFy
dF90aW1lLCBlbmRfdGltZT1lbmRfdGltZSwgdGVzdHNfc2tpcHBlZD10ZXN0c19za2lwcGVkKS5p
dGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIHN0YXRzW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gc3RhdHMKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPU5vbmUsIGFj
dHVhbD1Ob25lLCBsb2c9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCoq
a3dhcmdzKQorCisgICAgICAgICMgVGVzdHMgd2hpY2ggZG9uJ3QgZGVjbGFyZSBleHBlY3RhdGlv
bnMgb3IgcmVzdWx0cyBhcmUgYXNzdW1lZCB0byBoYXZlIHBhc3NlZC4KKyAgICAgICAgZm9yIGtl
eSwgdmFsdWUgaW4gZGljdChleHBlY3RlZD1leHBlY3RlZCwgYWN0dWFsPWFjdHVhbCwgbG9nPWxv
ZykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiByZXN1bHQKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWl0ZT1Ob25lLCBjb25maWd1cmF0aW9uPU5vbmUsIGNv
bW1pdHM9W10sIHRpbWVzdGFtcD1Ob25lLCBkZXRhaWxzPU5vbmUsIHJ1bl9zdGF0cz1Ob25lLCBy
ZXN1bHRzPXt9KToKKyAgICAgICAgc2VsZi5zdWl0ZSA9IHN1aXRlCisgICAgICAgIHNlbGYuY29u
ZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VsZi5jb21taXRzID0gY29tbWl0
cworICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcAorICAgICAgICBzZWxmLmRldGFp
bHMgPSBkZXRhaWxzCisgICAgICAgIHNlbGYucnVuX3N0YXRzID0gcnVuX3N0YXRzCisgICAgICAg
IHNlbGYucmVzdWx0cyA9IHJlc3VsdHMKKworICAgIGNsYXNzIEVuY29kZXIoanNvbi5KU09ORW5j
b2Rlcik6CisKKyAgICAgICAgZGVmIGRlZmF1bHQoc2VsZiwgb2JqKToKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2Uob2JqLCBVcGxvYWQpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvYmouc3Vp
dGU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIHN1aXRlIHNwZWNp
ZmllZCB0byByZXN1bHRzIHVwbG9hZCcpCisgICAgICAgICAgICAgICAgaWYgbm90IG9iai5jb21t
aXRzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBjb21taXRzIHNw
ZWNpZmllZCB0byByZXN1bHRzIHVwbG9hZCcpCisKKyAgICAgICAgICAgICAgICBkZXRhaWxzID0g
b2JqLmRldGFpbHMgb3Igb2JqLmNyZWF0ZV9kZXRhaWxzKCkKKyAgICAgICAgICAgICAgICBidWls
ZGJvdF9hcmdzID0gW2RldGFpbHMuZ2V0KGFyZywgTm9uZSkgaXMgTm9uZSBmb3IgYXJnIGluIG9i
ai5CVUlMREJPVF9ERVRBSUxTXQorICAgICAgICAgICAgICAgIGlmIGFueShidWlsZGJvdF9hcmdz
KSBhbmQgbm90IGFsbChidWlsZGJvdF9hcmdzKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcignQWxsIGJ1aWxkYm90IGRldGFpbHMgbXVzdCBiZSBkZWZpbmVkIGZvciB1cGxv
YWQnKQorCisgICAgICAgICAgICAgICAgZGVmIHVucGFja190ZXN0KGN1cnJlbnQsIHBhdGhfdG9f
dGVzdCwgZGF0YSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYXRoX3RvX3Rlc3QpID09
IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0gPSBk
YXRhCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAg
aWYgbm90IGN1cnJlbnQuZ2V0KHBhdGhfdG9fdGVzdFswXSk6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0gPSB7fQorICAgICAgICAgICAgICAgICAgICB1
bnBhY2tfdGVzdChjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0sIHBhdGhfdG9fdGVzdFsxOl0sIGRh
dGEpCisKKyAgICAgICAgICAgICAgICByZXN1bHRzID0ge30KKyAgICAgICAgICAgICAgICBmb3Ig
dGVzdCwgZGF0YSBpbiBvYmoucmVzdWx0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAg
ICAgdW5wYWNrX3Rlc3QocmVzdWx0cywgdGVzdC5zcGxpdCgnLycpLCBkYXRhKQorCisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gZGljdCgKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj1vYmou
VkVSU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgc3VpdGU9b2JqLnN1aXRlLAorICAgICAgICAg
ICAgICAgICAgICBjb25maWd1cmF0aW9uPW9iai5jb25maWd1cmF0aW9uIG9yIG9iai5jcmVhdGVf
Y29uZmlndXJhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBjb21taXRzPW9iai5jb21taXRz
LAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHM9ZGljdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRldGFpbHM9ZGV0YWlscywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9z
dGF0cz1vYmoucnVuX3N0YXRzIG9yIG9iai5jcmVhdGVfcnVuX3N0YXRzKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRzPXJlc3VsdHMsCisgICAgICAgICAgICAgICAgICAgICksCisg
ICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGlmIG9iai50aW1lc3RhbXA6CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFsndGltZXN0YW1wJ10gPSBvYmoudGltZXN0YW1wCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFVwbG9h
ZC5FbmNvZGVyLCBzZWxmKS5kZWZhdWx0KG9iaikKKworICAgIGRlZiB1cGxvYWQoc2VsZiwgdXJs
LCBsb2dfbGluZT1sYW1iZGEgdmFsOiBzeXMuc3Rkb3V0LndyaXRlKHZhbCArICdcbicpKToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wb3N0KHVybCArIHNl
bGYuVVBMT0FEX0VORFBPSU5ULCBkYXRhPWpzb24uZHVtcHMoc2VsZiwgY2xzPVVwbG9hZC5FbmNv
ZGVyKSkKKyAgICAgICAgZXhjZXB0IHJlcXVlc3RzLmV4Y2VwdGlvbnMuQ29ubmVjdGlvbkVycm9y
OgorICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdGYWlsZWQgdG8gdXBsb2FkIHRvIHt9
LCByZXN1bHRzIHNlcnZlciBub3Qgb25saW5lJy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAg
bG9nX2xpbmUoJyAnICogNCArICdGYWlsZWQgdG8gZW5jb2RlIHVwbG9hZCBkYXRhOiB7fScuZm9y
bWF0KGUpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgcmVzcG9uc2Uu
c3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdFcnJv
ciB1cGxvYWRpbmcgdG8ge306Jy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgIGxvZ19saW5lKCcg
JyAqIDggKyByZXNwb25zZS5qc29uKClbJ2Rlc2NyaXB0aW9uJ10pCisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ1VwbG9hZGVkIHJlc3VsdHMg
dG8ge30nLmZvcm1hdCh1cmwpKQorICAgICAgICByZXR1cm4gVHJ1ZQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWRfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3Rh
bGxlZC5yZXF1ZXN0cworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBqc29uCitpbXBvcnQg
bW9jaworaW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zy
b20gd2Via2l0cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVwbG9hZAorCisKK2NsYXNzIFVwbG9h
ZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgT3B0aW9ucyhvYmplY3QpOgor
ICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAgICAgZm9yIGtl
eSwgdmFsdWUgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIo
c2VsZiwga2V5LCB2YWx1ZSkKKworICAgIGNsYXNzIE1vY2tSZXNwb25zZShvYmplY3QpOgorICAg
ICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzX2NvZGU9MjAwLCB0ZXh0PScnKToKKyAgICAg
ICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSBzdGF0dXNfY29kZQorICAgICAgICAgICAgc2VsZi50
ZXh0ID0gdGV4dAorCisgICAgICAgIGRlZiBqc29uKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJu
IGpzb24ubG9hZHMoc2VsZi50ZXh0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBub3Jt
YWxpemUoZGF0YSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgYmFzZXN0cmluZyk6Cisg
ICAgICAgICAgICByZXR1cm4gc3RyKGRhdGEpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkYXRh
LCBjb2xsZWN0aW9ucy5NYXBwaW5nKToKKyAgICAgICAgICAgIHJldHVybiBkaWN0KG1hcChVcGxv
YWRUZXN0Lm5vcm1hbGl6ZSwgZGF0YS5pdGVyaXRlbXMoKSkpCisgICAgICAgIGVsaWYgaXNpbnN0
YW5jZShkYXRhLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gdHlw
ZShkYXRhKShtYXAoVXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEpKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgor
ICAgICAgICBzdGFydF90aW1lLCBlbmRfdGltZSA9IHRpbWUudGltZSgpIC0gMywgdGltZS50aW1l
KCkKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5
LXRlc3RzJywKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249VXBsb2FkLmNyZWF0ZV9jb25maWd1
cmF0aW9uKAorICAgICAgICAgICAgICAgIHBsYXRmb3JtPSdtYWMnLAorICAgICAgICAgICAgICAg
IHZlcnNpb249JzEwLjEzLjAnLAorICAgICAgICAgICAgICAgIHZlcnNpb25fbmFtZT0nSGlnaCBT
aWVycmEnLAorICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZT0neDg2XzY0JywKKyAgICAgICAg
ICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgZGV0YWls
cz1VcGxvYWQuY3JlYXRlX2RldGFpbHMobGluaz0naHR0cHM6Ly93ZWJraXQub3JnJyksCisgICAg
ICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICBy
ZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAg
ICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgcnVu
X3N0YXRzPVVwbG9hZC5jcmVhdGVfcnVuX3N0YXRzKAorICAgICAgICAgICAgICAgIHN0YXJ0X3Rp
bWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICBlbmRfdGltZT1lbmRfdGltZSwKKyAgICAg
ICAgICAgICAgICB0ZXN0c19za2lwcGVkPTAsCisgICAgICAgICAgICApLAorICAgICAgICAgICAg
cmVzdWx0cz17CisgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisgICAgICAg
ICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChleHBl
Y3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25z
LkZBSUwpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGlj
dCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxv
YWQuRW5jb2RlcikpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3Rb
J3ZlcnNpb24nXSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsn
c3VpdGUnXSwgJ3dlYmtpdHB5LXRlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5l
cmF0ZWRfZGljdFsnY29uZmlndXJhdGlvbiddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KAorICAgICAg
ICAgICAgcGxhdGZvcm09J21hYycsCisgICAgICAgICAgICBpc19zaW11bGF0b3I9RmFsc2UsCisg
ICAgICAgICAgICB2ZXJzaW9uPScxMC4xMy4wJywKKyAgICAgICAgICAgIHZlcnNpb25fbmFtZT0n
SGlnaCBTaWVycmEnLAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPSd4ODZfNjQnLAorICAgICAg
ICAgICAgc2RrPScxN0E0MDUnLAorICAgICAgICApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChnZW5lcmF0ZWRfZGljdFsnY29tbWl0cyddLCBbZGljdCgKKyAgICAgICAgICAgIHJlcG9zaXRv
cnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICBicmFuY2g9
J3RydW5rJywKKyAgICAgICAgKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVk
X2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9ybWFsaXplKGRpY3QobGlu
az0naHR0cHM6Ly93ZWJraXQub3JnJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVy
YXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncnVuX3N0YXRzJ10sIHNlbGYubm9ybWFsaXplKGRp
Y3QoCisgICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAgICAgICAgICBlbmRf
dGltZT1lbmRfdGltZSwKKyAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwKKyAgICAgICAgKSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cydd
WydyZXN1bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICd3ZWJraXRweS50ZXN0
MSc6IHt9LAorICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0
X3Jlc3VsdChleHBlY3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFjdHVhbD1VcGxvYWQu
RXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICB9KSkKKworICAgIGRlZiB0ZXN0X3VwbG9hZChz
ZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtp
dHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAor
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAg
aWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0s
CisgICAgICAgICkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBu
ZXc9bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoKSk6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydFRydWUodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMn
LCBsb2dfbGluZT1sYW1iZGEgXzogTm9uZSkpCisKKyAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlv
bih1cmwsIGRhdGEpOgorICAgICAgICAgICAgcmFpc2UgcmVxdWVzdHMuZXhjZXB0aW9ucy5Db25u
ZWN0aW9uRXJyb3IoKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVzdHMucG9zdCcs
IG5ldz1yYWlzZV9leGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxv
YWQudXBsb2FkKCdodHRwczovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBf
OiBOb25lKSkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBuZXc9
bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoCisgICAgICAgICAgICBzdGF0dXNf
Y29kZT00MDQsCisgICAgICAgICAgICB0ZXh0PWpzb24uZHVtcHMoZGljdChkZXNjcmlwdGlvbj0n
Tm8gc3VjaCBhZGRyZXNzJykpLAorICAgICAgICApKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMnLCBsb2dfbGlu
ZT1sYW1iZGEgXzogTm9uZSkpCisKKyAgICBkZWYgdGVzdF9wYWNrZWRfdGVzdChzZWxmKToKKyAg
ICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3Rz
JywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAg
ICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAor
ICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAg
ICAgICByZXN1bHRzPXsKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90ZXN0MSc6IFVw
bG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCks
CisgICAgICAgICAgICAgICAgJ2RpcjEvc3ViLWRpcjEvdGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rl
c3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLlRJTUVPVVQpLAorICAgICAgICAg
ICAgICAgICdkaXIxL3N1Yi1kaXIyL3Rlc3QzJzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjEv
c3ViLWRpcjIvdGVzdDQnOiB7fSwKKyAgICAgICAgICAgICAgICAnZGlyMi9zdWItZGlyMy90ZXN0
NSc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIyL3Rlc3Q2Jzoge30sCisgICAgICAgICAgICB9
CisgICAgICAgICkKKyAgICAgICAgZ2VuZXJhdGVkX2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29u
LmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMn
XSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAgJ2RpcjEnOiB7CisgICAgICAgICAgICAg
ICAgJ3N1Yi1kaXIxJzogeworICAgICAgICAgICAgICAgICAgICAndGVzdDEnOiB7J2FjdHVhbCc6
IFVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTH0sCisgICAgICAgICAgICAgICAgICAgICd0ZXN0Mic6
IHsnYWN0dWFsJzogVXBsb2FkLkV4cGVjdGF0aW9ucy5USU1FT1VUfSwKKyAgICAgICAgICAgICAg
ICB9LCAnc3ViLWRpcjInOiB7CisgICAgICAgICAgICAgICAgICAgICd0ZXN0Myc6IHt9LAorICAg
ICAgICAgICAgICAgICAgICAndGVzdDQnOiB7fSwKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9LCAnZGlyMic6IHsKKyAgICAgICAgICAgICAgICAnc3ViLWRpcjMnOiB7J3Rlc3Q1Jzog
e319LAorICAgICAgICAgICAgICAgICd0ZXN0Nic6IHt9LAorICAgICAgICAgICAgfSwKKyAgICAg
ICAgfSkpCisKKyAgICBkZWYgdGVzdF9ub19zdWl0ZShzZWxmKToKKyAgICAgICAgdXBsb2FkID0g
VXBsb2FkKAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0n
NScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAg
ICAgICAgKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAg
ICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRl
ZiB0ZXN0X25vX2NvbW1pdHMoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAg
ICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICkKKyAgICAgICAgd2l0aCBz
ZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBs
b2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICBkZWYgdGVzdF9idWlsZGJvdChzZWxmKToK
KyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRl
c3RzJywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAg
ICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUn
LAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAg
ICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhvcHRpb25zPXNlbGYuT3B0aW9u
cygKKyAgICAgICAgICAgICAgICBidWlsZGJvdF9tYXN0ZXI9J3dlYmtpdC5vcmcnLAorICAgICAg
ICAgICAgICAgIGJ1aWxkZXJfbmFtZT0nUXVldWUtMScsCisgICAgICAgICAgICAgICAgYnVpbGRf
bnVtYmVyPTEsCisgICAgICAgICkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZh
bHVlRXJyb3IpOgorICAgICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5j
b2RlcikKKworICAgICAgICB1cGxvYWQuZGV0YWlsc1snYnVpbGRib3Qtd29ya2VyJ10gPSAnYm90
MTIzJworICAgICAgICBnZW5lcmF0ZWRfZGljdCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMo
anNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsnZGV0YWlscyddLCBzZWxm
Lm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAnYnVpbGRib3QtbWFzdGVyJzogJ3dlYmtpdC5vcmcn
LAorICAgICAgICAgICAgJ2J1aWxkZXItbmFtZSc6ICdRdWV1ZS0xJywKKyAgICAgICAgICAgICdi
dWlsZC1udW1iZXInOiAxLAorICAgICAgICAgICAgJ2J1aWxkYm90LXdvcmtlcic6ICdib3QxMjMn
LAorICAgICAgICB9KSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9naXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY2hlY2tvdXQvc2NtL2dpdC5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MjkwLDYgKzI5MCwxNCBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYg
bmF0aXZlX3JldmlzaW9uKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dp
dChbJy1DJywgc2VsZi5maW5kX2NoZWNrb3V0X3Jvb3QocGF0aCksICdsb2cnLCAnLTEnLCAnLS1w
cmV0dHk9Zm9ybWF0OiVIJ10pCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBwYXRoKToK
KyAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX2dpdChbJy1DJywgc2VsZi5maW5kX2NoZWNrb3V0
X3Jvb3QocGF0aCksICdyZXYtcGFyc2UnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQnXSkucnN0cmlw
KCkKKworICAgICAgICAjIEZvciBnaXQtc3ZuCisgICAgICAgIGlmIHJlc3VsdC5zdGFydHN3aXRo
KCdoZWFkcycpOgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFs2Ol0KKyAgICAgICAgcmV0dXJu
IHJlc3VsdAorCiAgICAgZGVmIHN2bl91cmwoc2VsZik6CiAgICAgICAgIGdpdF9jb21tYW5kID0g
Wydzdm4nLCAnaW5mbyddCiAgICAgICAgIHN0YXR1cyA9IHNlbGYuX3J1bl9naXQoZ2l0X2NvbW1h
bmQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2Nt
X21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3NjbV9tb2NrLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHkJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDYgKzg3LDkgQEAgY2xhc3MgTW9ja1NDTShvYmplY3QpOgogICAgIGRlZiBuYXRpdmVf
cmV2aXNpb24oc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBzZWxmLnN2bl9yZXZpc2lvbihw
YXRoKQogCisgICAgZGVmIG5hdGl2ZV9icmFuY2goc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVy
biAndHJ1bmsnCisKICAgICBkZWYgdGltZXN0YW1wX29mX3JldmlzaW9uKHNlbGYsIHBhdGgsIHJl
dmlzaW9uKToKICAgICAgICAgcmV0dXJuICcyMDEzLTAyLTAxIDA4OjQ4OjA1ICswMDAwJwogCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9zY21fdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTkwOSw2ICs5MDksOSBAQCBFTkQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLnNjbS5oZWFkX3N2bl9yZXZpc2lvbigpLCBzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24oJy4n
KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24oJy4n
KSwgJzUnKQogCisgICAgZGVmIHRlc3RfbmF0aXZlX2JyYW5jaChzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfYnJhbmNoKCcuJyksICd0cnVuaycpCisKICAg
ICBkZWYgdGVzdF9wcm9wc2V0X3Byb3BnZXQoc2VsZik6CiAgICAgICAgIGZpbGVwYXRoID0gb3Mu
cGF0aC5qb2luKHNlbGYuc3ZuX2NoZWNrb3V0X3BhdGgsICJ0ZXN0X2ZpbGUiKQogICAgICAgICBl
eHBlY3RlZF9taW1lX3R5cGUgPSAieC1hcHBsaWNhdGlvbi9mb28tYmFyIgpAQCAtMTExMiw2ICsx
MTE1LDEwIEBAIGNsYXNzIEdpdFRlc3QoU0NNVGVzdCk6CiAgICAgICAgIGNvbW1hbmQgPSBbJ2dp
dCcsICctQycsIHNjbS5jaGVja291dF9yb290LCAncmV2LXBhcnNlJywgJ0hFQUQnXQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNjbS5uYXRpdmVfcmV2aXNpb24oc2NtLmNoZWNrb3V0X3Jvb3Qp
LCBydW5fY29tbWFuZChjb21tYW5kKS5zdHJpcCgpKQogCisgICAgZGVmIHRlc3RfbmF0aXZlX2Jy
YW5jaChzZWxmKToKKyAgICAgICAgc2NtID0gc2VsZi50cmFja2luZ19zY20KKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnbWFzdGVyJywgc2NtLm5hdGl2ZV9icmFuY2goc2NtLmNoZWNrb3V0X3Jv
b3QpKQorCiAgICAgZGVmIHRlc3RfcmVuYW1lX2ZpbGVzKHNlbGYpOgogICAgICAgICBzY20gPSBz
ZWxmLnRyYWNraW5nX3NjbQogCkBAIC0xNjI3LDYgKzE2MzQsOSBAQCBjbGFzcyBHaXRTVk5UZXN0
KFNDTVRlc3QpOgogICAgICAgICBjb21tYW5kID0gWydnaXQnLCAnLUMnLCBzZWxmLmdpdF9jaGVj
a291dF9wYXRoLCAncmV2LXBhcnNlJywgJ0hFQUQnXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuc2NtLm5hdGl2ZV9yZXZpc2lvbihzZWxmLmdpdF9jaGVja291dF9wYXRoKSwgcnVuX2Nv
bW1hbmQoY29tbWFuZCkuc3RyaXAoKSkKIAorICAgIGRlZiB0ZXN0X25hdGl2ZV9icmFuY2goc2Vs
Zik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3RydW5rJywgc2VsZi5zY20ubmF0aXZlX2Jy
YW5jaChzZWxmLmdpdF9jaGVja291dF9wYXRoKSkKKwogICAgIGRlZiB0ZXN0X3RvX29iamVjdF9u
YW1lKHNlbGYpOgogICAgICAgICByZWxwYXRoID0gJ3Rlc3RfZmlsZV9jb21taXQxJwogICAgICAg
ICBmdWxscGF0aCA9IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKHNlbGYuZ2l0X2NoZWNr
b3V0X3BhdGgsIHJlbHBhdGgpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y2hlY2tvdXQvc2NtL3N2bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC04Myw3ICs4Myw3IEBAIGNsYXNzIFNWTihTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgICAg
ICBTQ00uX19pbml0X18oc2VsZiwgY3dkLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5fYm9ndXNf
ZGlyID0gTm9uZQogICAgICAgICBpZiBwYXRjaF9kaXJlY3RvcmllcyA9PSBbXToKLSAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbihtZXNzYWdlPSdFbXB0eSBsaXN0IG9mIHBhdGNoIGRpcmVjdG9y
aWVzIHBhc3NlZCB0byBTQ00uX19pbml0X18nKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCdFbXB0eSBsaXN0IG9mIHBhdGNoIGRpcmVjdG9yaWVzIHBhc3NlZCB0byBTQ00uX19pbml0X18n
KQogICAgICAgICBlbGlmIHBhdGNoX2RpcmVjdG9yaWVzID09IE5vbmU6CiAgICAgICAgICAgICBz
ZWxmLl9wYXRjaF9kaXJlY3RvcmllcyA9IFtzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgoY3dkLCBz
ZWxmLmNoZWNrb3V0X3Jvb3QpXQogICAgICAgICBlbHNlOgpAQCAtMjc4LDYgKzI3OCwxNCBAQCBj
bGFzcyBTVk4oU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYgbmF0aXZlX3JldmlzaW9uKHNl
bGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5zdm5fcmV2aXNpb24ocGF0aCkKIAorICAg
IGRlZiBuYXRpdmVfYnJhbmNoKHNlbGYsIHBhdGgpOgorICAgICAgICByZWxhdGl2ZV91cmwgPSBz
ZWxmLnZhbHVlX2Zyb21fc3ZuX2luZm8ocGF0aCwgJ1JlbGF0aXZlIFVSTCcpWzI6XQorICAgICAg
ICBpZiByZWxhdGl2ZV91cmwuc3RhcnRzd2l0aCgndHJ1bmsnKToKKyAgICAgICAgICAgIHJldHVy
biAndHJ1bmsnCisgICAgICAgIGVsaWYgcmVsYXRpdmVfdXJsLnN0YXJ0c3dpdGgoJ2JyYW5jaCcp
OgorICAgICAgICAgICAgcmV0dXJuIHJlbGF0aXZlX3VybC5zcGxpdCgnLycpWzFdCisgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbigne30gaXMgbm90IGEgYnJhbmNoJy5mb3JtYXQocmVsYXRpdmVfdXJs
LnNwbGl0KCcvJylbMF0pKQorCiAgICAgZGVmIHRpbWVzdGFtcF9vZl9yZXZpc2lvbihzZWxmLCBw
YXRoLCByZXZpc2lvbik6CiAgICAgICAgICMgV2UgdXNlIC0teG1sIHRvIGdldCB0aW1lc3RhbXBz
IGxpa2UgMjAxMy0wMi0wOFQwODoxODowNC45NjQ0MDlaCiAgICAgICAgIHJlcG9zaXRvcnlfcm9v
dCA9IHNlbGYudmFsdWVfZnJvbV9zdm5faW5mbyhzZWxmLmNoZWNrb3V0X3Jvb3QsICdSZXBvc2l0
b3J5IFJvb3QnKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Bs
YXRmb3JtaW5mby5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0xNDYsNiArMTQ2LDExIEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAg
ICBleGNlcHQ6CiAgICAgICAgICAgICByZXR1cm4gc3lzLm1heGludAogCisgICAgZGVmIGJ1aWxk
X3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnL3Vzci9iaW4vc3dfdmVycycsICct
YnVpbGRWZXJzaW9uJ10sIHJldHVybl9zdGRlcnI9RmFsc2UsIGlnbm9yZV9lcnJvcnM9VHJ1ZSku
cnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiB4Y29kZV9zZGtfdmVyc2lv
bihzZWxmLCBzZGtfbmFtZSk6CiAgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CiAgICAgICAgICAg
ICAjIEFzc3VtZXMgdGhhdCB4Y3J1biBkb2VzIG5vdCB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQg
b24gZmFpbHVyZSAoZS5nLiBTREsgZG9lcyBub3QgZXhpc3QpLgpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9j
ay5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3
IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW0KIAogCiBjbGFzcyBN
b2NrUGxhdGZvcm1JbmZvKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9zX25hbWU9
J21hYycsIG9zX3ZlcnNpb249VmVyc2lvbi5mcm9tX25hbWUoJ1Nub3cgTGVvcGFyZCcpKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgb3NfbmFtZT0nbWFjJywgb3NfdmVyc2lvbj1WZXJzaW9uLmZy
b21fbmFtZSgnSGlnaCBTaWVycmEnKSk6CiAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9zX3Zl
cnNpb24sIFZlcnNpb24pCiAgICAgICAgIHNlbGYub3NfbmFtZSA9IG9zX25hbWUKICAgICAgICAg
c2VsZi5vc192ZXJzaW9uID0gb3NfdmVyc2lvbgpAQCAtNzgsNiArNzgsMTEgQEAgY2xhc3MgTW9j
a1BsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRlZiB0ZXJtaW5hbF93aWR0aChzZWxmKToKICAg
ICAgICAgcmV0dXJuIDgwCiAKKyAgICBkZWYgYnVpbGRfdmVyc2lvbihzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5pc19tYWMoKToKKyAgICAgICAgICAgIHJldHVybiAnMTdBNDA1JworICAgICAgICBy
ZXR1cm4gTm9uZQorCiAgICAgZGVmIHhjb2RlX3Nka192ZXJzaW9uKHNlbGYsIHNka19uYW1lKToK
ICAgICAgICAgcmV0dXJuIFZlcnNpb24oOCwgMSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9yZXN1bHRzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MyBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3Ig
bW9kdWxlIGZpbGVzCisKKyMgS2VlcCB0aGlzIGZpbGUgZnJlZSBvZiBhbnkgY29kZSBvciBpbXBv
cnQgc3RhdGVtZW50cyB0aGF0IGNvdWxkCisjIGNhdXNlIGVpdGhlciBhbiBlcnJvciB0byBvY2N1
ciBvciBhIGxvZyBtZXNzYWdlIHRvIGJlIGxvZ2dlZC4KKyMgVGhpcyBlbnN1cmVzIHRoYXQgY2Fs
bGluZyBjb2RlIGNhbiBpbXBvcnQgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tCisjIHdlYmtpdHB5
IGJlZm9yZSBhbnkgZXJyb3JzIG9yIGxvZyBtZXNzYWdlcyBkdWUgdG8gY29kZSBpbiB0aGlzIGZp
bGUuCisjIEluaXRpYWxpemF0aW9uIGNvZGUgY2FuIGluY2x1ZGUgdGhpbmdzIGxpa2UgdmVyc2lv
bi1jaGVja2luZyBjb2RlIGFuZAorIyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gY29kZS4KKyMKKyMg
V2UgZG8gbm90IGV4ZWN1dGUgYW55IHZlcnNpb24tY2hlY2tpbmcgY29kZSBvciBsb2dnaW5nIGNv
bmZpZ3VyYXRpb24KKyMgY29kZSBpbiB0aGlzIGZpbGUgc28gdGhhdCBjYWxsZXJzIGNhbiBvcHQt
aW4gYXMgdGhleSB3YW50LiAgVGhpcyBhbHNvCisjIGFsbG93cyBkaWZmZXJlbnQgY2FsbGVycyB0
byBjaG9vc2UgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uIGNvZGUsCisjIGFzIG5lY2Vzc2FyeS4K
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IG9wdHBhcnNlCisKKworZGVmIHVwbG9hZF9vcHRpb25zKCk6Cisg
ICAgcmV0dXJuIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcmVwb3J0JywgYWN0
aW9uPSdhcHBlbmQnLCBkZXN0PSdyZXBvcnRfdXJscycsIGhlbHA9J1VSTCAob3IgVVJMcykgdG8g
cmVwb3J0IHRlc3QgcmVzdWx0cyB0bycpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1idWlsZGJvdC1tYXN0ZXInLCBoZWxwPSdUaGUgdXJsIG9mIHRoZSBidWlsZGJvdCBtYXN0ZXIu
JyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkZXItbmFtZScsIGhlbHA9
J1RoZSBuYW1lIG9mIHRoZSBidWlsZGJvdCBidWlsZGVyIHRlc3RzIHdlcmUgcnVuIG9uLicpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZC1udW1iZXInLCBoZWxwPSdUaGUg
YnVpbGRib3QgYnVpbGQgbnVtYmVyIHRlc3RzIGFyZSBhc3NvY2lhdGVkIHdpdGguJyksCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkYm90LXdvcmtlcicsIGhlbHA9J1RoZSBi
dWlsZGJvdCB3b3JrZXIgdGVzdHMgd2VyZSBydW4gb24uJyksCisgICAgXQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5CShub25leGlzdGVudCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxODkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5yZXF1ZXN0cworCitpbXBvcnQg
anNvbgoraW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBwbGF0Zm9ybSBhcyBw
bGF0Zm9ybV8KKworCitjbGFzcyBVcGxvYWQob2JqZWN0KToKKyAgICBVUExPQURfRU5EUE9JTlQg
PSAnL2FwaS91cGxvYWQnCisgICAgQlVJTERCT1RfREVUQUlMUyA9IFsnYnVpbGRib3QtbWFzdGVy
JywgJ2J1aWxkZXItbmFtZScsICdidWlsZC1udW1iZXInLCAnYnVpbGRib3Qtd29ya2VyJ10KKyAg
ICBWRVJTSU9OID0gMAorCisgICAgY2xhc3MgRXhwZWN0YXRpb25zOgorICAgICAgICAjIFRoZXNl
IGFyZSBvcmRlcmVkIGJ5IHByaW9yaXR5LCBtZWFuaW5nIHRoYXQgYSB0ZXN0IHdoaWNoIGJvdGgg
Y3Jhc2hlcyBhbmQgaGFzCisgICAgICAgICMgYSB3YXJuaW5nIHNob3VsZCBiZSBjb25zaWRlcmVk
IHRvIGhhdmUgY3Jhc2hlZC4KKyAgICAgICAgT1JERVIgPSBbCisgICAgICAgICAgICAnQ1JBU0gn
LAorICAgICAgICAgICAgJ1RJTUVPVVQnLAorICAgICAgICAgICAgJ0lNQUdFJywgICAjIEltYWdl
LWRpZmYKKyAgICAgICAgICAgICdBVURJTycsICAgIyBBdWRpby1kaWZmCisgICAgICAgICAgICAn
VEVYVCcsICAgICMgVGV4dC1kaWZmCisgICAgICAgICAgICAnRkFJTCcsCisgICAgICAgICAgICAn
RVJST1InLAorICAgICAgICAgICAgJ1dBUk5JTkcnLAorICAgICAgICAgICAgJ1BBU1MnLAorICAg
ICAgICBdCisgICAgICAgIENSQVNILCBUSU1FT1VULCBJTUFHRSwgQVVESU8sIFRFWFQsIEZBSUws
IEVSUk9SLCBXQVJOSU5HLCBQQVNTID0gT1JERVIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICBwbGF0Zm9ybT1Ob25lLAorICAg
ICAgICAgICAgaXNfc2ltdWxhdG9yPUZhbHNlLAorICAgICAgICAgICAgdmVyc2lvbj1Ob25lLAor
ICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPU5vbmUsCisgICAgICAgICAgICB2ZXJzaW9uX25hbWU9
Tm9uZSwKKyAgICAgICAgICAgIG1vZGVsPU5vbmUsCisgICAgICAgICAgICBzdHlsZT1Ob25lLCAg
ICMgRGVidWcvUHJvZHVjdGlvbi9SZWxlYXNlCisgICAgICAgICAgICBmbGF2b3I9Tm9uZSwgICMg
RHVtcGluZyBncm91bmQgc3VpdGUtd2lkZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgKGllLCBHdWFy
ZE1hbGxvYykKKyAgICAgICAgICAgIHNkaz1Ob25lLAorICAgICAgICApOgorCisgICAgICAgICMg
VGhpcyBkZXZpYXRlcyBzbGlnaHRseSBmcm9tIHRoZSByZXN0IG9mIHdlYmtpdHB5LCBidXQgaXQg
YWxsb3dzIHRoaXMgZmlsZSB0byBiZSBlbnRpcmVseSBwb3J0YWJsZS4KKyAgICAgICAgY29uZmln
ID0gZGljdCgKKyAgICAgICAgICAgIHBsYXRmb3JtPXBsYXRmb3JtIG9yIChwbGF0Zm9ybV8uc3lz
dGVtKCkgaWYgcGxhdGZvcm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVsc2UgJ21hYycpLmxvd2Vy
KCksCisgICAgICAgICAgICBpc19zaW11bGF0b3I9aXNfc2ltdWxhdG9yLAorICAgICAgICAgICAg
dmVyc2lvbj12ZXJzaW9uIG9yIChwbGF0Zm9ybV8ucmVsZWFzZSgpIGlmIHBsYXRmb3JtXy5zeXN0
ZW0oKSAhPSAnRGFyd2luJyBlbHNlIHBsYXRmb3JtXy5tYWNfdmVyKClbMF0pLAorICAgICAgICAg
ICAgYXJjaGl0ZWN0dXJlPWFyY2hpdGVjdHVyZSBvciBwbGF0Zm9ybV8ubWFjaGluZSgpLAorICAg
ICAgICApCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbmZpZy5pdGVyaXRlbXMoKToKKyAg
ICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcigne30gbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uJy5mb3JtYXQoa2V5
KSkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGljdCh2ZXJzaW9uX25hbWU9dmVyc2lvbl9u
YW1lLCBtb2RlbD1tb2RlbCwgc3R5bGU9c3R5bGUsIGZsYXZvcj1mbGF2b3IsIHNkaz1zZGspLml0
ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICAgICAgY29uZmlnW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gY29uZmlnCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9jb21taXQocmVwb3NpdG9yeV9pZD1Ob25lLCBp
ZD1Ob25lLCBicmFuY2g9Tm9uZSk6CisgICAgICAgIGNvbW1pdCA9IGRpY3QocmVwb3NpdG9yeV9p
ZD1yZXBvc2l0b3J5X2lkLCBpZD1pZCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gY29tbWl0
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRlZmluZWQgaW4gYSBjb21taXQnLmZv
cm1hdChrZXkpKQorICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICBjb21taXRbJ2JyYW5j
aCddID0gYnJhbmNoCisgICAgICAgIHJldHVybiBjb21taXQKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgY3JlYXRlX2RldGFpbHMobGluaz1Ob25lLCBvcHRpb25zPU5vbmUsICoqa3dhcmdz
KToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgaWYgbGluazoKKyAg
ICAgICAgICAgIHJlc3VsdFsnbGluayddID0gbGluaworCisgICAgICAgIGlmIG9wdGlvbnM6Cisg
ICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBVcGxvYWQuQlVJTERCT1RfREVUQUlMUzoKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob3B0aW9ucywgZWxlbWVudC5yZXBsYWNlKCctJywg
J18nKSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0W2VsZW1lbnRdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHJl
c3VsdAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfcnVuX3N0YXRzKHN0YXJ0
X3RpbWU9Tm9uZSwgZW5kX3RpbWU9Tm9uZSwgdGVzdHNfc2tpcHBlZD1Ob25lLCAqKmt3YXJncyk6
CisgICAgICAgIHN0YXRzID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgZm9yIGtleSwgdmFsdWUg
aW4gZGljdChzdGFydF90aW1lPXN0YXJ0X3RpbWUsIGVuZF90aW1lPWVuZF90aW1lLCB0ZXN0c19z
a2lwcGVkPXRlc3RzX3NraXBwZWQpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RhdHNba2V5XSA9IHZhbHVlCisgICAgICAg
IHJldHVybiBzdGF0cworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfdGVzdF9y
ZXN1bHQoZXhwZWN0ZWQ9Tm9uZSwgYWN0dWFsPU5vbmUsIGxvZz1Ob25lLCAqKmt3YXJncyk6Cisg
ICAgICAgIHJlc3VsdCA9IGRpY3QoKiprd2FyZ3MpCisKKyAgICAgICAgIyBUZXN0cyB3aGljaCBk
b24ndCBkZWNsYXJlIGV4cGVjdGF0aW9ucyBvciByZXN1bHRzIGFyZSBhc3N1bWVkIHRvIGhhdmUg
cGFzc2VkLgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KGV4cGVjdGVkPWV4cGVjdGVk
LCBhY3R1YWw9YWN0dWFsLCBsb2c9bG9nKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZh
bHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1aXRlPU5vbmUs
IGNvbmZpZ3VyYXRpb249Tm9uZSwgY29tbWl0cz1bXSwgdGltZXN0YW1wPU5vbmUsIGRldGFpbHM9
Tm9uZSwgcnVuX3N0YXRzPU5vbmUsIHJlc3VsdHM9e30pOgorICAgICAgICBzZWxmLnN1aXRlID0g
c3VpdGUKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorICAgICAg
ICBzZWxmLmNvbW1pdHMgPSBjb21taXRzCisgICAgICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0
YW1wCisgICAgICAgIHNlbGYuZGV0YWlscyA9IGRldGFpbHMKKyAgICAgICAgc2VsZi5ydW5fc3Rh
dHMgPSBydW5fc3RhdHMKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gcmVzdWx0cworCisgICAgY2xh
c3MgRW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKToKKworICAgICAgICBkZWYgZGVmYXVsdChzZWxm
LCBvYmopOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIFVwbG9hZCk6CisgICAgICAg
ICAgICAgICAgaWYgbm90IG9iai5zdWl0ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignTm8gc3VpdGUgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKyAgICAgICAg
ICAgICAgICBpZiBub3Qgb2JqLmNvbW1pdHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoJ05vIGNvbW1pdHMgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKworICAg
ICAgICAgICAgICAgIGRldGFpbHMgPSBvYmouZGV0YWlscyBvciBvYmouY3JlYXRlX2RldGFpbHMo
KQorICAgICAgICAgICAgICAgIGJ1aWxkYm90X2FyZ3MgPSBbZGV0YWlscy5nZXQoYXJnLCBOb25l
KSBpcyBOb25lIGZvciBhcmcgaW4gb2JqLkJVSUxEQk9UX0RFVEFJTFNdCisgICAgICAgICAgICAg
ICAgaWYgYW55KGJ1aWxkYm90X2FyZ3MpIGFuZCBub3QgYWxsKGJ1aWxkYm90X2FyZ3MpOgorICAg
ICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBbGwgYnVpbGRib3QgZGV0YWlscyBt
dXN0IGJlIGRlZmluZWQgZm9yIHVwbG9hZCcpCisKKyAgICAgICAgICAgICAgICBkZWYgdW5wYWNr
X3Rlc3QoY3VycmVudCwgcGF0aF90b190ZXN0LCBkYXRhKToKKyAgICAgICAgICAgICAgICAgICAg
aWYgbGVuKHBhdGhfdG9fdGVzdCkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRbcGF0aF90b190ZXN0WzBdXSA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3VycmVudC5nZXQocGF0aF90b190ZXN0WzBd
KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbcGF0aF90b190ZXN0WzBdXSA9IHt9
CisgICAgICAgICAgICAgICAgICAgIHVucGFja190ZXN0KGN1cnJlbnRbcGF0aF90b190ZXN0WzBd
XSwgcGF0aF90b190ZXN0WzE6XSwgZGF0YSkKKworICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB7
fQorICAgICAgICAgICAgICAgIGZvciB0ZXN0LCBkYXRhIGluIG9iai5yZXN1bHRzLml0ZXJpdGVt
cygpOgorICAgICAgICAgICAgICAgICAgICB1bnBhY2tfdGVzdChyZXN1bHRzLCB0ZXN0LnNwbGl0
KCcvJyksIGRhdGEpCisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkaWN0KAorICAgICAgICAg
ICAgICAgICAgICB2ZXJzaW9uPW9iai5WRVJTSU9OLAorICAgICAgICAgICAgICAgICAgICBzdWl0
ZT1vYmouc3VpdGUsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249b2JqLmNvbmZp
Z3VyYXRpb24gb3Igb2JqLmNyZWF0ZV9jb25maWd1cmF0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgIGNvbW1pdHM9b2JqLmNvbW1pdHMsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0
cz1kaWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscz1kZXRhaWxzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcnVuX3N0YXRzPW9iai5ydW5fc3RhdHMgb3Igb2JqLmNyZWF0ZV9y
dW5fc3RhdHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHM9cmVzdWx0cywKKyAg
ICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAg
aWYgb2JqLnRpbWVzdGFtcDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wyd0aW1lc3RhbXAn
XSA9IG9iai50aW1lc3RhbXAKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAg
ICAgICByZXR1cm4gc3VwZXIoVXBsb2FkLkVuY29kZXIsIHNlbGYpLmRlZmF1bHQob2JqKQorCisg
ICAgZGVmIHVwbG9hZChzZWxmLCB1cmwsIGxvZ19saW5lPWxhbWJkYSB2YWw6IHN5cy5zdGRvdXQu
d3JpdGUodmFsICsgJ1xuJykpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwb25zZSA9
IHJlcXVlc3RzLnBvc3QodXJsICsgc2VsZi5VUExPQURfRU5EUE9JTlQsIGRhdGE9anNvbi5kdW1w
cyhzZWxmLCBjbHM9VXBsb2FkLkVuY29kZXIpKQorICAgICAgICBleGNlcHQgcmVxdWVzdHMuZXhj
ZXB0aW9ucy5Db25uZWN0aW9uRXJyb3I6CisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsg
J0ZhaWxlZCB0byB1cGxvYWQgdG8ge30sIHJlc3VsdHMgc2VydmVyIG5vdCBvbmxpbmUnLmZvcm1h
dCh1cmwpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVy
cm9yIGFzIGU6CisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ0ZhaWxlZCB0byBlbmNv
ZGUgdXBsb2FkIGRhdGE6IHt9Jy5mb3JtYXQoZSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICBs
b2dfbGluZSgnICcgKiA0ICsgJ0Vycm9yIHVwbG9hZGluZyB0byB7fTonLmZvcm1hdCh1cmwpKQor
ICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogOCArIHJlc3BvbnNlLmpzb24oKVsnZGVzY3JpcHRp
b24nXSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGxvZ19saW5lKCcgJyAq
IDQgKyAnVXBsb2FkZWQgcmVzdWx0cyB0byB7fScuZm9ybWF0KHVybCkpCisgICAgICAgIHJldHVy
biBUcnVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxv
YWRfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9y
ZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxNSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgd2Via2l0
cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnJlcXVlc3RzCisKK2ltcG9ydCBjb2xsZWN0aW9u
cworaW1wb3J0IGpzb24KK2ltcG9ydCBtb2NrCitpbXBvcnQgcmVxdWVzdHMKK2ltcG9ydCB0aW1l
CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5yZXN1bHRzLnVwbG9hZCBpbXBvcnQg
VXBsb2FkCisKKworY2xhc3MgVXBsb2FkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBj
bGFzcyBPcHRpb25zKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJn
cyk6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2FyZ3MuaXRlcml0ZW1zKCk6Cisg
ICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbHVlKQorCisgICAgY2xhc3MgTW9j
a1Jlc3BvbnNlKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0dXNfY29k
ZT0yMDAsIHRleHQ9JycpOgorICAgICAgICAgICAgc2VsZi5zdGF0dXNfY29kZSA9IHN0YXR1c19j
b2RlCisgICAgICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisKKyAgICAgICAgZGVmIGpzb24oc2Vs
Zik6CisgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhzZWxmLnRleHQpCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIG5vcm1hbGl6ZShkYXRhKToKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShkYXRhLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBzdHIoZGF0YSkKKyAgICAg
ICAgZWxpZiBpc2luc3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLk1hcHBpbmcpOgorICAgICAgICAg
ICAgcmV0dXJuIGRpY3QobWFwKFVwbG9hZFRlc3Qubm9ybWFsaXplLCBkYXRhLml0ZXJpdGVtcygp
KSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKToK
KyAgICAgICAgICAgIHJldHVybiB0eXBlKGRhdGEpKG1hcChVcGxvYWRUZXN0Lm5vcm1hbGl6ZSwg
ZGF0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVm
IHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHN0YXJ0X3RpbWUsIGVuZF90aW1lID0gdGlt
ZS50aW1lKCkgLSAzLCB0aW1lLnRpbWUoKQorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAg
ICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29uZmlndXJhdGlv
bj1VcGxvYWQuY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICAgICAgcGxhdGZvcm09
J21hYycsCisgICAgICAgICAgICAgICAgdmVyc2lvbj0nMTAuMTMuMCcsCisgICAgICAgICAgICAg
ICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJyYScsCisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0
dXJlPSd4ODZfNjQnLAorICAgICAgICAgICAgICAgIHNkaz0nMTdBNDA1JywKKyAgICAgICAgICAg
ICksCisgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhsaW5rPSdodHRw
czovL3dlYmtpdC5vcmcnKSwKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29t
bWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAg
ICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAg
ICAgKV0sCisgICAgICAgICAgICBydW5fc3RhdHM9VXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisg
ICAgICAgICAgICAgICAgc3RhcnRfdGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgICAgIGVu
ZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwKKyAgICAg
ICAgICAgICksCisgICAgICAgICAgICByZXN1bHRzPXsKKyAgICAgICAgICAgICAgICAnd2Via2l0
cHkudGVzdDEnOiB7fSwKKyAgICAgICAgICAgICAgICAnd2Via2l0cHkudGVzdDInOiBVcGxvYWQu
Y3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0
dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgICAgICB9LAorICAgICAgICAp
CisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29u
LmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKSkpCisKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndmVyc2lvbiddLCAwKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGdlbmVyYXRlZF9kaWN0WydzdWl0ZSddLCAnd2Via2l0cHktdGVzdHMnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wydjb25maWd1cmF0aW9uJ10sIHNlbGYu
bm9ybWFsaXplKGRpY3QoCisgICAgICAgICAgICBwbGF0Zm9ybT0nbWFjJywKKyAgICAgICAgICAg
IGlzX3NpbXVsYXRvcj1GYWxzZSwKKyAgICAgICAgICAgIHZlcnNpb249JzEwLjEzLjAnLAorICAg
ICAgICAgICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJyYScsCisgICAgICAgICAgICBhcmNoaXRl
Y3R1cmU9J3g4Nl82NCcsCisgICAgICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICkpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wydjb21taXRzJ10sIFtkaWN0
KAorICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgIGlkPSc1
JywKKyAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICApXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwg
c2VsZi5ub3JtYWxpemUoZGljdChsaW5rPSdodHRwczovL3dlYmtpdC5vcmcnKSkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydydW5fc3Rh
dHMnXSwgc2VsZi5ub3JtYWxpemUoZGljdCgKKyAgICAgICAgICAgIHN0YXJ0X3RpbWU9c3RhcnRf
dGltZSwKKyAgICAgICAgICAgIGVuZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgdGVzdHNf
c2tpcHBlZD0wLAorICAgICAgICApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0
ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAg
ICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisgICAgICAgICAgICAnd2Via2l0cHkudGVz
dDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlv
bnMuUEFTUywgYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgIH0pKQor
CisgICAgZGVmIHRlc3RfdXBsb2FkKHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisg
ICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1b
VXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Vi
a2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0
cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAgKQorCisgICAgICAgIHdpdGggbW9jay5w
YXRjaCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNw
b25zZSgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cGxvYWQudXBsb2FkKCdodHRw
czovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAg
ICAgICBkZWYgcmFpc2VfZXhjZXB0aW9uKHVybCwgZGF0YSk6CisgICAgICAgICAgICByYWlzZSBy
ZXF1ZXN0cy5leGNlcHRpb25zLkNvbm5lY3Rpb25FcnJvcigpCisKKyAgICAgICAgd2l0aCBtb2Nr
LnBhdGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PXJhaXNlX2V4Y2VwdGlvbik6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHVwbG9hZC51cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1
bHRzJywgbG9nX2xpbmU9bGFtYmRhIF86IE5vbmUpKQorCisgICAgICAgIHdpdGggbW9jay5wYXRj
aCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNwb25z
ZSgKKyAgICAgICAgICAgIHN0YXR1c19jb2RlPTQwNCwKKyAgICAgICAgICAgIHRleHQ9anNvbi5k
dW1wcyhkaWN0KGRlc2NyaXB0aW9uPSdObyBzdWNoIGFkZHJlc3MnKSksCisgICAgICAgICkpOgor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dlYmtp
dC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAgIGRlZiB0ZXN0
X3BhY2tlZF90ZXN0KHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAg
ICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNy
ZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAg
ICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisg
ICAgICAgICAgICApXSwKKyAgICAgICAgICAgIHJlc3VsdHM9eworICAgICAgICAgICAgICAgICdk
aXIxL3N1Yi1kaXIxL3Rlc3QxJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBs
b2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90
ZXN0Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlv
bnMuVElNRU9VVCksCisgICAgICAgICAgICAgICAgJ2RpcjEvc3ViLWRpcjIvdGVzdDMnOiB7fSwK
KyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMi90ZXN0NCc6IHt9LAorICAgICAgICAgICAg
ICAgICdkaXIyL3N1Yi1kaXIzL3Rlc3Q1Jzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjIvdGVz
dDYnOiB7fSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGlj
dCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxv
YWQuRW5jb2RlcikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0
ZXN0X3Jlc3VsdHMnXVsncmVzdWx0cyddLCBzZWxmLm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAn
ZGlyMSc6IHsKKyAgICAgICAgICAgICAgICAnc3ViLWRpcjEnOiB7CisgICAgICAgICAgICAgICAg
ICAgICd0ZXN0MSc6IHsnYWN0dWFsJzogVXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMfSwKKyAgICAg
ICAgICAgICAgICAgICAgJ3Rlc3QyJzogeydhY3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLlRJ
TUVPVVR9LAorICAgICAgICAgICAgICAgIH0sICdzdWItZGlyMic6IHsKKyAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3QzJzoge30sCisgICAgICAgICAgICAgICAgICAgICd0ZXN0NCc6IHt9LAorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sICdkaXIyJzogeworICAgICAgICAgICAgICAg
ICdzdWItZGlyMyc6IHsndGVzdDUnOiB7fX0sCisgICAgICAgICAgICAgICAgJ3Rlc3Q2Jzoge30s
CisgICAgICAgICAgICB9LAorICAgICAgICB9KSkKKworICAgIGRlZiB0ZXN0X25vX3N1aXRlKHNl
bGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBjb21taXRzPVtVcGxv
YWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQn
LAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5r
JywKKyAgICAgICAgICAgICldLAorICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVw
bG9hZC5FbmNvZGVyKQorCisgICAgZGVmIHRlc3Rfbm9fY29tbWl0cyhzZWxmKToKKyAgICAgICAg
dXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAg
ICAgICAgKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAg
ICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRl
ZiB0ZXN0X2J1aWxkYm90KHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAg
ICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2Fk
LmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywK
KyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycs
CisgICAgICAgICAgICApXSwKKyAgICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRh
aWxzKG9wdGlvbnM9c2VsZi5PcHRpb25zKAorICAgICAgICAgICAgICAgIGJ1aWxkYm90X21hc3Rl
cj0nd2Via2l0Lm9yZycsCisgICAgICAgICAgICAgICAgYnVpbGRlcl9uYW1lPSdRdWV1ZS0xJywK
KyAgICAgICAgICAgICAgICBidWlsZF9udW1iZXI9MSwKKyAgICAgICAgKSkpCisgICAgICAgIHdp
dGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBz
KHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQorCisgICAgICAgIHVwbG9hZC5kZXRhaWxzWydi
dWlsZGJvdC13b3JrZXInXSA9ICdib3QxMjMnCisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2Vs
Zi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNv
ZGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVz
dWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICdidWlsZGJv
dC1tYXN0ZXInOiAnd2Via2l0Lm9yZycsCisgICAgICAgICAgICAnYnVpbGRlci1uYW1lJzogJ1F1
ZXVlLTEnLAorICAgICAgICAgICAgJ2J1aWxkLW51bWJlcic6IDEsCisgICAgICAgICAgICAnYnVp
bGRib3Qtd29ya2VyJzogJ2JvdDEyMycsCisgICAgICAgIH0pKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L21haW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90ZXN0L21haW4ucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGVzdC9tYWluLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCiAjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBK
ZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCi0jIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzgsMTcgKzM4LDE5IEBAIGltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCB1bml0dGVzdAog
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ubG9ndXRpbHMgaW1wb3J0IGNvbmZpZ3VyZV9s
b2dnaW5nCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVj
dXRpdmUsIFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZl
IGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0
ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1o
b3N0IGltcG9ydCBTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBI
b3N0CiBmcm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBDb25maWcKIGZyb20gd2Via2l0
cHkudGVzdC5maW5kZXIgaW1wb3J0IEZpbmRlcgogZnJvbSB3ZWJraXRweS50ZXN0LnByaW50ZXIg
aW1wb3J0IFByaW50ZXIKIGZyb20gd2Via2l0cHkudGVzdC5ydW5uZXIgaW1wb3J0IFJ1bm5lciwg
dW5pdF90ZXN0X25hbWUKK2Zyb20gd2Via2l0cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVwbG9h
ZAorZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9wdGlvbnMgaW1wb3J0IHVwbG9hZF9vcHRpb25zCiAK
IF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAotX2hvc3QgPSBTeXN0ZW1Ib3N0
KCkKK19ob3N0ID0gSG9zdCgpCiBfd2Via2l0X3Jvb3QgPSBOb25lCiAKIApAQCAtMTI0LDEyICsx
MjYsMTUgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIHBhcnNlciA9IG9wdHBhcnNl
Lk9wdGlvblBhcnNlcih1c2FnZT0ndXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBbYXJncy4uLl0nKQog
CiAgICAgICAgICMgIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbmx5IGVmZmVjdCB0aGUgYnVpbGRp
bmcgb2YgbGxkYldlYktpdFRlc3Rlci4KLSAgICAgICAgY29uZmlndXJhdGlvbl9ncm91cCA9IG9w
dHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgJ0NvbmZpZ3VyYXRpb24gb3B0aW9ucycpCi0gICAg
ICAgIGNvbmZpZ3VyYXRpb25fZ3JvdXAuYWRkX29wdGlvbignLS1kZWJ1ZycsIGFjdGlvbj0nc3Rv
cmVfY29uc3QnLCBjb25zdD0nRGVidWcnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKLSAgICAgICAg
ICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBEZWJ1ZycpCi0gICAgICAgIGNvbmZp
Z3VyYXRpb25fZ3JvdXAuYWRkX29wdGlvbignLS1yZWxlYXNlJywgYWN0aW9uPSdzdG9yZV9jb25z
dCcsIGNvbnN0PSdSZWxlYXNlJywgZGVzdD0iY29uZmlndXJhdGlvbiIsCi0gICAgICAgICAgICBo
ZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gUmVsZWFzZScpCi0gICAgICAgIHBhcnNlci5h
ZGRfb3B0aW9uX2dyb3VwKGNvbmZpZ3VyYXRpb25fZ3JvdXApCisgICAgICAgIGZvciBncm91cF9u
YW1lLCBncm91cF9vcHRpb25zIGluIHsnVXBsb2FkIE9wdGlvbnMnOiB1cGxvYWRfb3B0aW9ucygp
LCAnQ29uZmlndXJhdGlvbiBPcHRpb25zJzogWworICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oJy0tZGVidWcnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J0RlYnVnJywgZGVz
dD0iY29uZmlndXJhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gRGVidWcnKSwKKyAgICAgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCctLXJlbGVhc2UnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Jl
bGVhc2UnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBSZWxlYXNlJyksCisgICAgICAg
IF19Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgb3B0aW9uX2dyb3VwID0gb3B0cGFyc2UuT3B0
aW9uR3JvdXAocGFyc2VyLCBncm91cF9uYW1lKQorICAgICAgICAgICAgb3B0aW9uX2dyb3VwLmFk
ZF9vcHRpb25zKGdyb3VwX29wdGlvbnMpCisgICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9n
cm91cChvcHRpb25fZ3JvdXApCiAKICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1hJywgJy0t
YWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0ncnVuIGFsbCB0aGUgdGVzdHMnKQpAQCAtMTgxLDExICsxODYsMTIg
QEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0
eSBpbXBvcnQgYXV0b2luc3RhbGxfZXZlcnl0aGluZwogICAgICAgICBhdXRvaW5zdGFsbF9ldmVy
eXRoaW5nKCkKIAorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgY29u
ZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIuZmlsZXN5c3RlbSkKKyAg
ICAgICAgY29uZmlndXJhdGlvbl90b191c2UgPSBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24g
b3IgY29uZmlnLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAgICAgICAgIGlmIHdpbGxfcnVuX2xs
ZGJfd2Via2l0X3Rlc3RzOgogICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgn
QnVpbGRpbmcgbGxkYldlYktpdFRlc3RlciAuLi4nKQogICAgICAgICAgICAgYnVpbGRfbGxkYndl
YmtpdHRlc3RlciA9IHNlbGYuZmluZGVyLmZpbGVzeXN0ZW0uam9pbihfd2Via2l0X3Jvb3QsICdU
b29scycsICdTY3JpcHRzJywgJ2J1aWxkLWxsZGJ3ZWJraXR0ZXN0ZXInKQotICAgICAgICAgICAg
Y29uZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIuZmlsZXN5c3RlbSkK
LSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25fdG9fdXNlID0gc2VsZi5fb3B0aW9ucy5jb25maWd1
cmF0aW9uIG9yIGNvbmZpZy5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQogICAgICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgICAgIF9ob3N0LmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwo
W2J1aWxkX2xsZGJ3ZWJraXR0ZXN0ZXIsIGNvbmZpZy5mbGFnX2Zvcl9jb25maWd1cmF0aW9uKGNv
bmZpZ3VyYXRpb25fdG9fdXNlKV0sIHF1aWV0PShub3QgYm9vbChzZWxmLl9vcHRpb25zLnZlcmJv
c2UpKSkKICAgICAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciBhcyBlOgpAQCAtMjE4LDYgKzIy
NCw3IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICB0ZXN0X3J1bm5lciA9IFJ1bm5l
cihzZWxmLnByaW50ZXIsIGxvYWRlcikKICAgICAgICAgdGVzdF9ydW5uZXIucnVuKHBhcmFsbGVs
X3Rlc3RzLCBzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykKICAgICAgICAgdGVzdF9ydW5u
ZXIucnVuKHNlcmlhbF90ZXN0cywgMSkKKyAgICAgICAgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQog
CiAgICAgICAgIHNlbGYucHJpbnRlci5wcmludF9yZXN1bHQodGltZS50aW1lKCkgLSBzdGFydCkK
IApAQCAtMjMyLDkgKzIzOSw1MCBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKICAgICAgICAgICAgIGNvdi5zdG9wKCkKICAgICAgICAg
ICAgIGNvdi5zYXZlKCkKKworICAgICAgICBmYWlsZWRfdXBsb2FkcyA9IDAKKyAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5yZXBvcnRfdXJsczoKKyAgICAgICAgICAgIHNlbGYucHJpbnRlci5tZXRl
ci53cml0ZWxuKCdcbicpCisgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKCdQ
cmVwYXJpbmcgdXBsb2FkIGRhdGEgLi4uJykKKworICAgICAgICAgICAgcmVzdWx0cyA9IHt0ZXN0
OiB7fSBmb3IgdGVzdCBpbiB0ZXN0X3J1bm5lci50ZXN0c19ydW59CisgICAgICAgICAgICBmb3Ig
dGVzdCwgZXJyb3JzIGluIHRlc3RfcnVubmVyLmVycm9yczoKKyAgICAgICAgICAgICAgICByZXN1
bHRzW3Rlc3RdID0gVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4cGVj
dGF0aW9ucy5FUlJPUiwgbG9nPScvbicuam9pbihlcnJvcnMpKQorICAgICAgICAgICAgZm9yIHRl
c3QsIGZhaWx1cmVzIGluIHRlc3RfcnVubmVyLmZhaWx1cmVzOgorICAgICAgICAgICAgICAgIHJl
c3VsdHNbdGVzdF0gPSBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhw
ZWN0YXRpb25zLkZBSUwsIGxvZz0nL24nLmpvaW4oZmFpbHVyZXMpKQorCisgICAgICAgICAgICBf
aG9zdC5pbml0aWFsaXplX3NjbSgpCisgICAgICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAg
ICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgICAgICBjb25m
aWd1cmF0aW9uPVVwbG9hZC5jcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgICAgICAg
ICAgcGxhdGZvcm09X2hvc3QucGxhdGZvcm0ub3NfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
dmVyc2lvbj1zdHIoX2hvc3QucGxhdGZvcm0ub3NfdmVyc2lvbiksCisgICAgICAgICAgICAgICAg
ICAgIHZlcnNpb25fbmFtZT1faG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uX25hbWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgc3R5bGU9Y29uZmlndXJhdGlvbl90b191c2UsCisgICAgICAgICAgICAg
ICAgICAgIHNkaz1faG9zdC5wbGF0Zm9ybS5idWlsZF92ZXJzaW9uKCksCisgICAgICAgICAgICAg
ICAgKSwKKyAgICAgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhvcHRp
b25zPXNlbGYuX29wdGlvbnMpLAorICAgICAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVh
dGVfY29tbWl0KAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAor
ICAgICAgICAgICAgICAgICAgICBpZD1faG9zdC5zY20oKS5uYXRpdmVfcmV2aXNpb24oX3dlYmtp
dF9yb290KSwKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoPV9ob3N0LnNjbSgpLm5hdGl2ZV9i
cmFuY2goX3dlYmtpdF9yb290KSwKKyAgICAgICAgICAgICAgICApXSwKKyAgICAgICAgICAgICAg
ICBydW5fc3RhdHM9VXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisgICAgICAgICAgICAgICAgICAg
IHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgZW5kX3RpbWU9ZW5k
X3RpbWUsCisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9bGVuKHRlc3RfcnVubmVy
LnRlc3RzX3J1bikgLSBsZW4ocGFyYWxsZWxfdGVzdHMpIC0gbGVuKHNlcmlhbF90ZXN0cyksCisg
ICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICByZXN1bHRzPXJlc3VsdHMsCisgICAg
ICAgICAgICApCisgICAgICAgICAgICBmb3IgdXJsIGluIHNlbGYuX29wdGlvbnMucmVwb3J0X3Vy
bHM6CisgICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgnVXBsb2FkaW5n
IHRvIHt9IC4uLicuZm9ybWF0KHVybCkpCisgICAgICAgICAgICAgICAgZmFpbGVkX3VwbG9hZHMg
PSBmYWlsZWRfdXBsb2FkcyBpZiB1cGxvYWQudXBsb2FkKHVybCwgbG9nX2xpbmU9c2VsZi5wcmlu
dGVyLm1ldGVyLndyaXRlbG4pIGVsc2UgKGZhaWxlZF91cGxvYWRzICsgMSkKKyAgICAgICAgICAg
IHNlbGYucHJpbnRlci5tZXRlci53cml0ZWxuKCdVcGxvYWRzIGNvbXBsZXRlZCEnKQorCisgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMuY292ZXJhZ2U6CiAgICAgICAgICAgICBjb3YucmVwb3J0KHNo
b3dfbWlzc2luZz1GYWxzZSkKIAotICAgICAgICByZXR1cm4gbm90IHNlbGYucHJpbnRlci5udW1f
ZXJyb3JzIGFuZCBub3Qgc2VsZi5wcmludGVyLm51bV9mYWlsdXJlcworICAgICAgICByZXR1cm4g
bm90IHNlbGYucHJpbnRlci5udW1fZXJyb3JzIGFuZCBub3Qgc2VsZi5wcmludGVyLm51bV9mYWls
dXJlcyBhbmQgbm90IGZhaWxlZF91cGxvYWRzCiAKICAgICBkZWYgX2NoZWNrX2ltcG9ydHMoc2Vs
ZiwgbmFtZXMpOgogICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0L3J1bm5lci5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L3J1bm5lci5weQkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBjbGFzcyBSdW5uZXIob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJpbnRlciwg
bG9hZGVyKToKICAgICAgICAgc2VsZi5wcmludGVyID0gcHJpbnRlcgogICAgICAgICBzZWxmLmxv
YWRlciA9IGxvYWRlcgotICAgICAgICBzZWxmLnRlc3RzX3J1biA9IDAKKyAgICAgICAgc2VsZi50
ZXN0c19ydW4gPSBbXQogICAgICAgICBzZWxmLmVycm9ycyA9IFtdCiAgICAgICAgIHNlbGYuZmFp
bHVyZXMgPSBbXQogICAgICAgICBzZWxmLndvcmtlcl9mYWN0b3J5ID0gbGFtYmRhIGNhbGxlcjog
X1dvcmtlcihjYWxsZXIsIHNlbGYubG9hZGVyKQpAQCAtNjAsNyArNjAsNyBAQCBjbGFzcyBSdW5u
ZXIob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYucHJpbnRlci5wcmludF9zdGFydGVkX3Rlc3Qo
c291cmNlLCB0ZXN0X25hbWUpCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBzZWxmLnRl
c3RzX3J1biArPSAxCisgICAgICAgIHNlbGYudGVzdHNfcnVuLmFwcGVuZCh0ZXN0X25hbWUpCiAg
ICAgICAgIGlmIGZhaWx1cmVzOgogICAgICAgICAgICAgc2VsZi5mYWlsdXJlcy5hcHBlbmQoKHRl
c3RfbmFtZSwgZmFpbHVyZXMpKQogICAgICAgICBpZiBlcnJvcnM6CkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0Mjky
MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDYgQEAgY2xhc3MgUnVubmVyVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCd0ZXN0MyAoRm9vKScsICdF
JywgJ3Rlc3QzXG5lcnJlZCcpKQogICAgICAgICBydW5uZXIgPSBSdW5uZXIoUHJpbnRlcihzdHJl
YW0sIG9wdGlvbnMpLCBsb2FkZXIpCiAgICAgICAgIHJ1bm5lci5ydW4oWydGb28udGVzdDEnLCAn
Rm9vLnRlc3QyJywgJ0Zvby50ZXN0MyddLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1
bm5lci50ZXN0c19ydW4sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJ1bm5lci50
ZXN0c19ydW4pLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5uZXIuZmFpbHVy
ZXMpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5uZXIuZXJyb3JzKSwgMSkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkJ
KHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9f
X2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw4IEBAIGNsYXNzIEF1dG9p
bnN0YWxsSW1wb3J0SG9vayhvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9weXRl
c3RfdGltZW91dCgpCiAgICAgICAgIGVsaWYgJy5weXRlc3QnIGluIGZ1bGxuYW1lOgogICAgICAg
ICAgICAgc2VsZi5faW5zdGFsbF9weXRlc3QoKQorICAgICAgICBlbGlmICcucmVxdWVzdHMnIGlu
IGZ1bGxuYW1lOgorICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9yZXF1ZXN0cygpCiAKICAgICBk
ZWYgX2luc3RhbGxfbWVjaGFuaXplKHNlbGYpOgogICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRw
czovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL20vbWVjaGFuaXplL21l
Y2hhbml6ZS0wLjIuNS50YXIuZ3oiLApAQCAtMTYxLDYgKzE2MywzMiBAQCBjbGFzcyBBdXRvaW5z
dGFsbEltcG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9m
aWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2EyL2VjLzQxNWQwY2NjYzFlZDQxY2Q3ZmRm
NjlhZDk4OWRhMTZhOGQxMzA1Nzk5NjM3MTAwNGNhYjRiYWZjNDhmMy9weXRlc3QtMy42LjIudGFy
Lmd6IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRlc3QtMy42LjIvc3JjL3B5
dGVzdC5weSIpCiAKKyAgICBkZWYgX2luc3RhbGxfcmVxdWVzdHMoc2VsZik6CisgICAgICAgIGlu
c3RhbGxlciA9IEF1dG9JbnN0YWxsZXIocHJlcGVuZF90b19zZWFyY2hfcGF0aD1UcnVlLCB0YXJn
ZXRfZGlyPXNlbGYuX2ZzLmpvaW4oX0FVVE9JTlNUQUxMRURfRElSKSkKKworICAgICAgICBpbnN0
YWxsZXIuaW5zdGFsbCgKKyAgICAgICAgICAgICJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5v
cmcvcGFja2FnZXMvMDYvYjgvZDFlYTM4NTEzYzIyZThjOTA2Mjc1ZDEzNTgxOGZlZTE2YWQ4NDk1
OTg1OTU2YTliN2UyYmIyMTk0MmExL2NlcnRpZmktMjAxOS4zLjkudGFyLmd6IiwKKyAgICAgICAg
ICAgIHVybF9zdWJwYXRoPSJjZXJ0aWZpLTIwMTkuMy45L2NlcnRpZmkiLAorICAgICAgICAgICAg
dGFyZ2V0X25hbWU9ImNlcnRpZmkiLAorICAgICAgICApCisgICAgICAgIGluc3RhbGxlci5pbnN0
YWxsKAorICAgICAgICAgICAgImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdl
cy9mYy9iYi9hNTc2OGMyMzBmOWRkYjAzYWNjOWVmM2YwZDRhM2NmOTM0NjI0NzM3OTVkMThlOTUz
NTQ5OGM4ZjkyOWQvY2hhcmRldC0zLjAuNC50YXIuZ3oiLAorICAgICAgICAgICAgdXJsX3N1YnBh
dGg9ImNoYXJkZXQtMy4wLjQvY2hhcmRldCIsCisgICAgICAgICAgICB0YXJnZXRfbmFtZT0iY2hh
cmRldCIsCisgICAgICAgICkKKyAgICAgICAgaW5zdGFsbGVyLmluc3RhbGwoCisgICAgICAgICAg
ICAiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2FkLzEzL2ViNTY5NTFi
NmY3OTUwY2FkYjU3OWNhMTY2ZTQ0OGJhNzdmOWQyNGVmYzAzZWRkN2U1NWZhNTdkMDRiNy9pZG5h
LTIuOC50YXIuZ3oiLAorICAgICAgICAgICAgdXJsX3N1YnBhdGg9ImlkbmEtMi44L2lkbmEiLAor
ICAgICAgICAgICAgdGFyZ2V0X25hbWU9J2lkbmEnKQorICAgICAgICBpbnN0YWxsZXIuaW5zdGFs
bCgKKyAgICAgICAgICAgIHVybD0iaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2th
Z2VzL2IxLzUzLzM3ZDgyYWIzOTEzOTM1NjVmMmY4MzFiOGVlZGJmZmQ1N2RiNWE3MTgyMTZmODJm
MWE4YjRkMzgxYTFjMS91cmxsaWIzLTEuMjQuMS50YXIuZ3oiLAorICAgICAgICAgICAgdXJsX3N1
YnBhdGg9InVybGxpYjMtMS4yNC4xIiwKKyAgICAgICAgICAgIHRhcmdldF9uYW1lPSJ1cmxsaWIz
IikKKyAgICAgICAgaW5zdGFsbGVyLmluc3RhbGwoCisgICAgICAgICAgICAiaHR0cHM6Ly9maWxl
cy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzLzUyLzJjLzUxNGU0YWMyNWRhMmIwOGNhNWE0NjRj
NTA0NjM2ODIxMjYzODVjNDI3MmMxODE5Mzg3NmU5MWY0YmMzOC9yZXF1ZXN0cy0yLjIxLjAudGFy
Lmd6IiwKKyAgICAgICAgICAgIHVybF9zdWJwYXRoPSJyZXF1ZXN0cy0yLjIxLjAvcmVxdWVzdHMi
LAorICAgICAgICAgICAgdGFyZ2V0X25hbWU9InJlcXVlc3RzIikKKwogICAgIGRlZiBfaW5zdGFs
bF9weWxpbnQoc2VsZik6CiAgICAgICAgIHNlbGYuX2Vuc3VyZV9hdXRvaW5zdGFsbGVkX2Rpcl9p
c19pbl9zeXNfcGF0aCgpCiAgICAgICAgIGlmIChub3Qgc2VsZi5fZnMuZXhpc3RzKHNlbGYuX2Zz
LmpvaW4oX0FVVE9JTlNUQUxMRURfRElSLCAicHlsaW50IikpIG9yCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3Qu
cHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTE4MywxMCArMTgzLDEw
IEBAIGNsYXNzIFBhdGNoUHJvY2Vzc2luZ1F1ZXVlVGVzdChDb21tYW5kc1QKICAgICAgICAgcXVl
dWUuX29wdGlvbnMgPSBNb2NrKCkKICAgICAgICAgcXVldWUuX29wdGlvbnMucG9ydCA9IE5vbmUK
ICAgICAgICAgcGF0Y2ggPSBxdWV1ZS5fdG9vbC5idWdzLmZldGNoX2F0dGFjaG1lbnQoMTAwMDEp
Ci0gICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJNT0NLIGFkZF9hdHRhY2htZW50X3RvX2J1Zzog
YnVnX2lkPTUwMDAwLCBkZXNjcmlwdGlvbj1BcmNoaXZlIG9mIGxheW91dC10ZXN0LXJlc3VsdHMg
ZnJvbSBib3QgZm9yIG1hYy1zbm93bGVvcGFyZCBmaWxlbmFtZT1sYXlvdXQtdGVzdC1yZXN1bHRz
LnppcCBtaW1ldHlwZT1Ob25lCisgICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJNT0NLIGFkZF9h
dHRhY2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlwdGlvbj1BcmNoaXZlIG9mIGxh
eW91dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9yIG1hYy1oaWdoc2llcnJhIGZpbGVuYW1lPWxh
eW91dC10ZXN0LXJlc3VsdHMuemlwIG1pbWV0eXBlPU5vbmUKIC0tIEJlZ2luIGNvbW1lbnQgLS0K
IFRoZSBhdHRhY2hlZCB0ZXN0IGZhaWx1cmVzIHdlcmUgc2VlbiB3aGlsZSBydW5uaW5nIHJ1bi13
ZWJraXQtdGVzdHMgb24gdGhlIG1vY2stcXVldWUuCi1Qb3J0OiBtYWMtc25vd2xlb3BhcmQgIFBs
YXRmb3JtOiBNb2NrUGxhdGZvcm0gMS4wCitQb3J0OiBtYWMtaGlnaHNpZXJyYSAgUGxhdGZvcm06
IE1vY2tQbGF0Zm9ybSAxLjAKIC0tIEVuZCBjb21tZW50IC0tCiAiIiIKICAgICAgICAgT3V0cHV0
Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHF1ZXVlLl91cGxvYWRfcmVzdWx0c19hcmNo
aXZlX2Zvcl9wYXRjaCwgW3BhdGNoLCBNb2NrKCldLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xv
Z3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364805</attachid>
            <date>2019-03-15 09:16:30 -0700</date>
            <delta_ts>2019-03-15 10:46:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190315091629.patch</filename>
            <type>text/plain</type>
            <size>61797</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0Mjk3OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE5LTAzLTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6Cisg
ICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOiBBZGQgcmVxdWVzdHMg
YXV0by1pbnN0YWxsLgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxsX3Jl
cXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBs
b2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGlu
Zy4KKwogMjAxOS0wMy0xNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgTW92ZSBJREIgc3RvcmFnZSBpbiBwcml2YXRlIGJyb3dzaW5nIG1vZGUgdG8gTmV0d29y
a1Byb2Nlc3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18u
cHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5p
dF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKKyMgUmVxdWlyZWQgZm9yIFB5
dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCisjIEtlZXAg
dGhpcyBmaWxlIGZyZWUgb2YgYW55IGNvZGUgb3IgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBjb3Vs
ZAorIyBjYXVzZSBlaXRoZXIgYW4gZXJyb3IgdG8gb2NjdXIgb3IgYSBsb2cgbWVzc2FnZSB0byBi
ZSBsb2dnZWQuCisjIFRoaXMgZW5zdXJlcyB0aGF0IGNhbGxpbmcgY29kZSBjYW4gaW1wb3J0IGlu
aXRpYWxpemF0aW9uIGNvZGUgZnJvbQorIyB3ZWJraXRweSBiZWZvcmUgYW55IGVycm9ycyBvciBs
b2cgbWVzc2FnZXMgZHVlIHRvIGNvZGUgaW4gdGhpcyBmaWxlLgorIyBJbml0aWFsaXphdGlvbiBj
b2RlIGNhbiBpbmNsdWRlIHRoaW5ncyBsaWtlIHZlcnNpb24tY2hlY2tpbmcgY29kZSBhbmQKKyMg
bG9nZ2luZyBjb25maWd1cmF0aW9uIGNvZGUuCisjCisjIFdlIGRvIG5vdCBleGVjdXRlIGFueSB2
ZXJzaW9uLWNoZWNraW5nIGNvZGUgb3IgbG9nZ2luZyBjb25maWd1cmF0aW9uCisjIGNvZGUgaW4g
dGhpcyBmaWxlIHNvIHRoYXQgY2FsbGVycyBjYW4gb3B0LWluIGFzIHRoZXkgd2FudC4gIFRoaXMg
YWxzbworIyBhbGxvd3MgZGlmZmVyZW50IGNhbGxlcnMgdG8gY2hvb3NlIGRpZmZlcmVudCBpbml0
aWFsaXphdGlvbiBjb2RlLAorIyBhcyBuZWNlc3NhcnkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMz
IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcHRw
YXJzZQorCisKK2RlZiB1cGxvYWRfb3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCctLXJlcG9ydCcsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0ncmVw
b3J0X3VybHMnLCBoZWxwPSdVUkwgKG9yIFVSTHMpIHRvIHJlcG9ydCB0ZXN0IHJlc3VsdHMgdG8n
KSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRib3QtbWFzdGVyJywgaGVs
cD0nVGhlIHVybCBvZiB0aGUgYnVpbGRib3QgbWFzdGVyLicpLAorICAgICAgICBvcHRwYXJzZS5t
YWtlX29wdGlvbignLS1idWlsZGVyLW5hbWUnLCBoZWxwPSdUaGUgbmFtZSBvZiB0aGUgYnVpbGRi
b3QgYnVpbGRlciB0ZXN0cyB3ZXJlIHJ1biBvbi4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oJy0tYnVpbGQtbnVtYmVyJywgaGVscD0nVGhlIGJ1aWxkYm90IGJ1aWxkIG51bWJlciB0
ZXN0cyBhcmUgYXNzb2NpYXRlZCB3aXRoLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bignLS1idWlsZGJvdC13b3JrZXInLCBoZWxwPSdUaGUgYnVpbGRib3Qgd29ya2VyIHRlc3RzIHdl
cmUgcnVuIG9uLicpLAorICAgIF0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0
cy91cGxvYWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRz
L3VwbG9hZC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3Vs
dHMvdXBsb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg5IEBACisjIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5
LmF1dG9pbnN0YWxsZWQucmVxdWVzdHMKKworaW1wb3J0IGpzb24KK2ltcG9ydCByZXF1ZXN0cwor
aW1wb3J0IHN5cworCitpbXBvcnQgcGxhdGZvcm0gYXMgcGxhdGZvcm1fCisKKworY2xhc3MgVXBs
b2FkKG9iamVjdCk6CisgICAgVVBMT0FEX0VORFBPSU5UID0gJy9hcGkvdXBsb2FkJworICAgIEJV
SUxEQk9UX0RFVEFJTFMgPSBbJ2J1aWxkYm90LW1hc3RlcicsICdidWlsZGVyLW5hbWUnLCAnYnVp
bGQtbnVtYmVyJywgJ2J1aWxkYm90LXdvcmtlciddCisgICAgVkVSU0lPTiA9IDAKKworICAgIGNs
YXNzIEV4cGVjdGF0aW9uczoKKyAgICAgICAgIyBUaGVzZSBhcmUgb3JkZXJlZCBieSBwcmlvcml0
eSwgbWVhbmluZyB0aGF0IGEgdGVzdCB3aGljaCBib3RoIGNyYXNoZXMgYW5kIGhhcworICAgICAg
ICAjIGEgd2FybmluZyBzaG91bGQgYmUgY29uc2lkZXJlZCB0byBoYXZlIGNyYXNoZWQuCisgICAg
ICAgIE9SREVSID0gWworICAgICAgICAgICAgJ0NSQVNIJywKKyAgICAgICAgICAgICdUSU1FT1VU
JywKKyAgICAgICAgICAgICdJTUFHRScsICAgIyBJbWFnZS1kaWZmCisgICAgICAgICAgICAnQVVE
SU8nLCAgICMgQXVkaW8tZGlmZgorICAgICAgICAgICAgJ1RFWFQnLCAgICAjIFRleHQtZGlmZgor
ICAgICAgICAgICAgJ0ZBSUwnLAorICAgICAgICAgICAgJ0VSUk9SJywKKyAgICAgICAgICAgICdX
QVJOSU5HJywKKyAgICAgICAgICAgICdQQVNTJywKKyAgICAgICAgXQorICAgICAgICBDUkFTSCwg
VElNRU9VVCwgSU1BR0UsIEFVRElPLCBURVhULCBGQUlMLCBFUlJPUiwgV0FSTklORywgUEFTUyA9
IE9SREVSCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9jb25maWd1cmF0aW9u
KAorICAgICAgICAgICAgcGxhdGZvcm09Tm9uZSwKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1G
YWxzZSwKKyAgICAgICAgICAgIHZlcnNpb249Tm9uZSwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVy
ZT1Ob25lLAorICAgICAgICAgICAgdmVyc2lvbl9uYW1lPU5vbmUsCisgICAgICAgICAgICBtb2Rl
bD1Ob25lLAorICAgICAgICAgICAgc3R5bGU9Tm9uZSwgICAjIERlYnVnL1Byb2R1Y3Rpb24vUmVs
ZWFzZQorICAgICAgICAgICAgZmxhdm9yPU5vbmUsICAjIER1bXBpbmcgZ3JvdW5kIHN1aXRlLXdp
ZGUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIChpZSwgR3VhcmRNYWxsb2MpCisgICAgICAgICAgICBz
ZGs9Tm9uZSwKKyAgICAgICAgKToKKworICAgICAgICAjIFRoaXMgZGV2aWF0ZXMgc2xpZ2h0bHkg
ZnJvbSB0aGUgcmVzdCBvZiB3ZWJraXRweSwgYnV0IGl0IGFsbG93cyB0aGlzIGZpbGUgdG8gYmUg
ZW50aXJlbHkgcG9ydGFibGUuCisgICAgICAgIGNvbmZpZyA9IGRpY3QoCisgICAgICAgICAgICBw
bGF0Zm9ybT1wbGF0Zm9ybSBvciAocGxhdGZvcm1fLnN5c3RlbSgpIGlmIHBsYXRmb3JtXy5zeXN0
ZW0oKSAhPSAnRGFyd2luJyBlbHNlICdtYWMnKS5sb3dlcigpLAorICAgICAgICAgICAgaXNfc2lt
dWxhdG9yPWlzX3NpbXVsYXRvciwKKyAgICAgICAgICAgIHZlcnNpb249dmVyc2lvbiBvciAocGxh
dGZvcm1fLnJlbGVhc2UoKSBpZiBwbGF0Zm9ybV8uc3lzdGVtKCkgIT0gJ0RhcndpbicgZWxzZSBw
bGF0Zm9ybV8ubWFjX3ZlcigpWzBdKSwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVyZT1hcmNoaXRl
Y3R1cmUgb3IgcGxhdGZvcm1fLm1hY2hpbmUoKSwKKyAgICAgICAgKQorICAgICAgICBmb3Iga2V5
LCB2YWx1ZSBpbiBjb25maWcuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBO
b25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IG11c3QgYmUgZGVmaW5l
ZCBpbiB0aGUgY29uZmlndXJhdGlvbicuZm9ybWF0KGtleSkpCisgICAgICAgIGZvciBrZXksIHZh
bHVlIGluIGRpY3QodmVyc2lvbl9uYW1lPXZlcnNpb25fbmFtZSwgbW9kZWw9bW9kZWwsIHN0eWxl
PXN0eWxlLCBmbGF2b3I9Zmxhdm9yLCBzZGs9c2RrKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAg
IGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNvbmZpZ1trZXldID0gdmFs
dWUKKyAgICAgICAgcmV0dXJuIGNvbmZpZworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBj
cmVhdGVfY29tbWl0KHJlcG9zaXRvcnlfaWQ9Tm9uZSwgaWQ9Tm9uZSwgYnJhbmNoPU5vbmUpOgor
ICAgICAgICBjb21taXQgPSBkaWN0KHJlcG9zaXRvcnlfaWQ9cmVwb3NpdG9yeV9pZCwgaWQ9aWQp
CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbW1pdC5pdGVyaXRlbXMoKToKKyAgICAgICAg
ICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
e30gbXVzdCBiZSBkZWZpbmVkIGluIGEgY29tbWl0Jy5mb3JtYXQoa2V5KSkKKyAgICAgICAgaWYg
YnJhbmNoOgorICAgICAgICAgICAgY29tbWl0WydicmFuY2gnXSA9IGJyYW5jaAorICAgICAgICBy
ZXR1cm4gY29tbWl0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9kZXRhaWxz
KGxpbms9Tm9uZSwgb3B0aW9ucz1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHJlc3VsdCA9IGRp
Y3QoKiprd2FyZ3MpCisgICAgICAgIGlmIGxpbms6CisgICAgICAgICAgICByZXN1bHRbJ2xpbmsn
XSA9IGxpbmsKKworICAgICAgICBpZiBvcHRpb25zOgorICAgICAgICAgICAgZm9yIGVsZW1lbnQg
aW4gVXBsb2FkLkJVSUxEQk9UX0RFVEFJTFM6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRh
dHRyKG9wdGlvbnMsIGVsZW1lbnQucmVwbGFjZSgnLScsICdfJyksIE5vbmUpCisgICAgICAgICAg
ICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtl
bGVtZW50XSA9IHZhbHVlCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgY3JlYXRlX3J1bl9zdGF0cyhzdGFydF90aW1lPU5vbmUsIGVuZF90aW1lPU5v
bmUsIHRlc3RzX3NraXBwZWQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzdGF0cyA9IGRpY3Qo
Kiprd2FyZ3MpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRpY3Qoc3RhcnRfdGltZT1zdGFy
dF90aW1lLCBlbmRfdGltZT1lbmRfdGltZSwgdGVzdHNfc2tpcHBlZD10ZXN0c19za2lwcGVkKS5p
dGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIHN0YXRzW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gc3RhdHMKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPU5vbmUsIGFj
dHVhbD1Ob25lLCBsb2c9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCoq
a3dhcmdzKQorCisgICAgICAgICMgVGVzdHMgd2hpY2ggZG9uJ3QgZGVjbGFyZSBleHBlY3RhdGlv
bnMgb3IgcmVzdWx0cyBhcmUgYXNzdW1lZCB0byBoYXZlIHBhc3NlZC4KKyAgICAgICAgZm9yIGtl
eSwgdmFsdWUgaW4gZGljdChleHBlY3RlZD1leHBlY3RlZCwgYWN0dWFsPWFjdHVhbCwgbG9nPWxv
ZykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiByZXN1bHQKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWl0ZT1Ob25lLCBjb25maWd1cmF0aW9uPU5vbmUsIGNv
bW1pdHM9W10sIHRpbWVzdGFtcD1Ob25lLCBkZXRhaWxzPU5vbmUsIHJ1bl9zdGF0cz1Ob25lLCBy
ZXN1bHRzPXt9KToKKyAgICAgICAgc2VsZi5zdWl0ZSA9IHN1aXRlCisgICAgICAgIHNlbGYuY29u
ZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VsZi5jb21taXRzID0gY29tbWl0
cworICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcAorICAgICAgICBzZWxmLmRldGFp
bHMgPSBkZXRhaWxzCisgICAgICAgIHNlbGYucnVuX3N0YXRzID0gcnVuX3N0YXRzCisgICAgICAg
IHNlbGYucmVzdWx0cyA9IHJlc3VsdHMKKworICAgIGNsYXNzIEVuY29kZXIoanNvbi5KU09ORW5j
b2Rlcik6CisKKyAgICAgICAgZGVmIGRlZmF1bHQoc2VsZiwgb2JqKToKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2Uob2JqLCBVcGxvYWQpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvYmouc3Vp
dGU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIHN1aXRlIHNwZWNp
ZmllZCB0byByZXN1bHRzIHVwbG9hZCcpCisgICAgICAgICAgICAgICAgaWYgbm90IG9iai5jb21t
aXRzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBjb21taXRzIHNw
ZWNpZmllZCB0byByZXN1bHRzIHVwbG9hZCcpCisKKyAgICAgICAgICAgICAgICBkZXRhaWxzID0g
b2JqLmRldGFpbHMgb3Igb2JqLmNyZWF0ZV9kZXRhaWxzKCkKKyAgICAgICAgICAgICAgICBidWls
ZGJvdF9hcmdzID0gW2RldGFpbHMuZ2V0KGFyZywgTm9uZSkgaXMgTm9uZSBmb3IgYXJnIGluIG9i
ai5CVUlMREJPVF9ERVRBSUxTXQorICAgICAgICAgICAgICAgIGlmIGFueShidWlsZGJvdF9hcmdz
KSBhbmQgbm90IGFsbChidWlsZGJvdF9hcmdzKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcignQWxsIGJ1aWxkYm90IGRldGFpbHMgbXVzdCBiZSBkZWZpbmVkIGZvciB1cGxv
YWQnKQorCisgICAgICAgICAgICAgICAgZGVmIHVucGFja190ZXN0KGN1cnJlbnQsIHBhdGhfdG9f
dGVzdCwgZGF0YSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYXRoX3RvX3Rlc3QpID09
IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0gPSBk
YXRhCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAg
aWYgbm90IGN1cnJlbnQuZ2V0KHBhdGhfdG9fdGVzdFswXSk6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0gPSB7fQorICAgICAgICAgICAgICAgICAgICB1
bnBhY2tfdGVzdChjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0sIHBhdGhfdG9fdGVzdFsxOl0sIGRh
dGEpCisKKyAgICAgICAgICAgICAgICByZXN1bHRzID0ge30KKyAgICAgICAgICAgICAgICBmb3Ig
dGVzdCwgZGF0YSBpbiBvYmoucmVzdWx0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAg
ICAgdW5wYWNrX3Rlc3QocmVzdWx0cywgdGVzdC5zcGxpdCgnLycpLCBkYXRhKQorCisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gZGljdCgKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj1vYmou
VkVSU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgc3VpdGU9b2JqLnN1aXRlLAorICAgICAgICAg
ICAgICAgICAgICBjb25maWd1cmF0aW9uPW9iai5jb25maWd1cmF0aW9uIG9yIG9iai5jcmVhdGVf
Y29uZmlndXJhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBjb21taXRzPW9iai5jb21taXRz
LAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHM9ZGljdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRldGFpbHM9ZGV0YWlscywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9z
dGF0cz1vYmoucnVuX3N0YXRzIG9yIG9iai5jcmVhdGVfcnVuX3N0YXRzKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRzPXJlc3VsdHMsCisgICAgICAgICAgICAgICAgICAgICksCisg
ICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGlmIG9iai50aW1lc3RhbXA6CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFsndGltZXN0YW1wJ10gPSBvYmoudGltZXN0YW1wCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFVwbG9h
ZC5FbmNvZGVyLCBzZWxmKS5kZWZhdWx0KG9iaikKKworICAgIGRlZiB1cGxvYWQoc2VsZiwgdXJs
LCBsb2dfbGluZT1sYW1iZGEgdmFsOiBzeXMuc3Rkb3V0LndyaXRlKHZhbCArICdcbicpKToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wb3N0KHVybCArIHNl
bGYuVVBMT0FEX0VORFBPSU5ULCBkYXRhPWpzb24uZHVtcHMoc2VsZiwgY2xzPVVwbG9hZC5FbmNv
ZGVyKSkKKyAgICAgICAgZXhjZXB0IHJlcXVlc3RzLmV4Y2VwdGlvbnMuQ29ubmVjdGlvbkVycm9y
OgorICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdGYWlsZWQgdG8gdXBsb2FkIHRvIHt9
LCByZXN1bHRzIHNlcnZlciBub3Qgb25saW5lJy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAg
bG9nX2xpbmUoJyAnICogNCArICdGYWlsZWQgdG8gZW5jb2RlIHVwbG9hZCBkYXRhOiB7fScuZm9y
bWF0KGUpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgcmVzcG9uc2Uu
c3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogNCArICdFcnJv
ciB1cGxvYWRpbmcgdG8ge306Jy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgIGxvZ19saW5lKCcg
JyAqIDggKyByZXNwb25zZS5qc29uKClbJ2Rlc2NyaXB0aW9uJ10pCisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ1VwbG9hZGVkIHJlc3VsdHMg
dG8ge30nLmZvcm1hdCh1cmwpKQorICAgICAgICByZXR1cm4gVHJ1ZQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWRfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3Rh
bGxlZC5yZXF1ZXN0cworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBqc29uCitpbXBvcnQg
bW9jaworaW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zy
b20gd2Via2l0cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVwbG9hZAorCisKK2NsYXNzIFVwbG9h
ZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgT3B0aW9ucyhvYmplY3QpOgor
ICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAgICAgZm9yIGtl
eSwgdmFsdWUgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIo
c2VsZiwga2V5LCB2YWx1ZSkKKworICAgIGNsYXNzIE1vY2tSZXNwb25zZShvYmplY3QpOgorICAg
ICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzX2NvZGU9MjAwLCB0ZXh0PScnKToKKyAgICAg
ICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSBzdGF0dXNfY29kZQorICAgICAgICAgICAgc2VsZi50
ZXh0ID0gdGV4dAorCisgICAgICAgIGRlZiBqc29uKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJu
IGpzb24ubG9hZHMoc2VsZi50ZXh0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBub3Jt
YWxpemUoZGF0YSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgYmFzZXN0cmluZyk6Cisg
ICAgICAgICAgICByZXR1cm4gc3RyKGRhdGEpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkYXRh
LCBjb2xsZWN0aW9ucy5NYXBwaW5nKToKKyAgICAgICAgICAgIHJldHVybiBkaWN0KG1hcChVcGxv
YWRUZXN0Lm5vcm1hbGl6ZSwgZGF0YS5pdGVyaXRlbXMoKSkpCisgICAgICAgIGVsaWYgaXNpbnN0
YW5jZShkYXRhLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gdHlw
ZShkYXRhKShtYXAoVXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEpKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgor
ICAgICAgICBzdGFydF90aW1lLCBlbmRfdGltZSA9IHRpbWUudGltZSgpIC0gMywgdGltZS50aW1l
KCkKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5
LXRlc3RzJywKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249VXBsb2FkLmNyZWF0ZV9jb25maWd1
cmF0aW9uKAorICAgICAgICAgICAgICAgIHBsYXRmb3JtPSdtYWMnLAorICAgICAgICAgICAgICAg
IHZlcnNpb249JzEwLjEzLjAnLAorICAgICAgICAgICAgICAgIHZlcnNpb25fbmFtZT0nSGlnaCBT
aWVycmEnLAorICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZT0neDg2XzY0JywKKyAgICAgICAg
ICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgZGV0YWls
cz1VcGxvYWQuY3JlYXRlX2RldGFpbHMobGluaz0naHR0cHM6Ly93ZWJraXQub3JnJyksCisgICAg
ICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICBy
ZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAg
ICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgcnVu
X3N0YXRzPVVwbG9hZC5jcmVhdGVfcnVuX3N0YXRzKAorICAgICAgICAgICAgICAgIHN0YXJ0X3Rp
bWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICBlbmRfdGltZT1lbmRfdGltZSwKKyAgICAg
ICAgICAgICAgICB0ZXN0c19za2lwcGVkPTAsCisgICAgICAgICAgICApLAorICAgICAgICAgICAg
cmVzdWx0cz17CisgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisgICAgICAg
ICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChleHBl
Y3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25z
LkZBSUwpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGlj
dCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxv
YWQuRW5jb2RlcikpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3Rb
J3ZlcnNpb24nXSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsn
c3VpdGUnXSwgJ3dlYmtpdHB5LXRlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5l
cmF0ZWRfZGljdFsnY29uZmlndXJhdGlvbiddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KAorICAgICAg
ICAgICAgcGxhdGZvcm09J21hYycsCisgICAgICAgICAgICBpc19zaW11bGF0b3I9RmFsc2UsCisg
ICAgICAgICAgICB2ZXJzaW9uPScxMC4xMy4wJywKKyAgICAgICAgICAgIHZlcnNpb25fbmFtZT0n
SGlnaCBTaWVycmEnLAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPSd4ODZfNjQnLAorICAgICAg
ICAgICAgc2RrPScxN0E0MDUnLAorICAgICAgICApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChnZW5lcmF0ZWRfZGljdFsnY29tbWl0cyddLCBbZGljdCgKKyAgICAgICAgICAgIHJlcG9zaXRv
cnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICBicmFuY2g9
J3RydW5rJywKKyAgICAgICAgKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVk
X2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9ybWFsaXplKGRpY3QobGlu
az0naHR0cHM6Ly93ZWJraXQub3JnJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVy
YXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncnVuX3N0YXRzJ10sIHNlbGYubm9ybWFsaXplKGRp
Y3QoCisgICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAgICAgICAgICBlbmRf
dGltZT1lbmRfdGltZSwKKyAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwKKyAgICAgICAgKSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cydd
WydyZXN1bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICd3ZWJraXRweS50ZXN0
MSc6IHt9LAorICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0
X3Jlc3VsdChleHBlY3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFjdHVhbD1VcGxvYWQu
RXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICB9KSkKKworICAgIGRlZiB0ZXN0X3VwbG9hZChz
ZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtp
dHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAor
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAg
aWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0s
CisgICAgICAgICkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBu
ZXc9bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoKSk6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydFRydWUodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMn
LCBsb2dfbGluZT1sYW1iZGEgXzogTm9uZSkpCisKKyAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlv
bih1cmwsIGRhdGEpOgorICAgICAgICAgICAgcmFpc2UgcmVxdWVzdHMuZXhjZXB0aW9ucy5Db25u
ZWN0aW9uRXJyb3IoKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVzdHMucG9zdCcs
IG5ldz1yYWlzZV9leGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxv
YWQudXBsb2FkKCdodHRwczovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBf
OiBOb25lKSkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBuZXc9
bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoCisgICAgICAgICAgICBzdGF0dXNf
Y29kZT00MDQsCisgICAgICAgICAgICB0ZXh0PWpzb24uZHVtcHMoZGljdChkZXNjcmlwdGlvbj0n
Tm8gc3VjaCBhZGRyZXNzJykpLAorICAgICAgICApKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMnLCBsb2dfbGlu
ZT1sYW1iZGEgXzogTm9uZSkpCisKKyAgICBkZWYgdGVzdF9wYWNrZWRfdGVzdChzZWxmKToKKyAg
ICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3Rz
JywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAg
ICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAor
ICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAg
ICAgICByZXN1bHRzPXsKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90ZXN0MSc6IFVw
bG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCks
CisgICAgICAgICAgICAgICAgJ2RpcjEvc3ViLWRpcjEvdGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rl
c3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLlRJTUVPVVQpLAorICAgICAgICAg
ICAgICAgICdkaXIxL3N1Yi1kaXIyL3Rlc3QzJzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjEv
c3ViLWRpcjIvdGVzdDQnOiB7fSwKKyAgICAgICAgICAgICAgICAnZGlyMi9zdWItZGlyMy90ZXN0
NSc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIyL3Rlc3Q2Jzoge30sCisgICAgICAgICAgICB9
CisgICAgICAgICkKKyAgICAgICAgZ2VuZXJhdGVkX2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29u
LmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMn
XSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAgJ2RpcjEnOiB7CisgICAgICAgICAgICAg
ICAgJ3N1Yi1kaXIxJzogeworICAgICAgICAgICAgICAgICAgICAndGVzdDEnOiB7J2FjdHVhbCc6
IFVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTH0sCisgICAgICAgICAgICAgICAgICAgICd0ZXN0Mic6
IHsnYWN0dWFsJzogVXBsb2FkLkV4cGVjdGF0aW9ucy5USU1FT1VUfSwKKyAgICAgICAgICAgICAg
ICB9LCAnc3ViLWRpcjInOiB7CisgICAgICAgICAgICAgICAgICAgICd0ZXN0Myc6IHt9LAorICAg
ICAgICAgICAgICAgICAgICAndGVzdDQnOiB7fSwKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9LCAnZGlyMic6IHsKKyAgICAgICAgICAgICAgICAnc3ViLWRpcjMnOiB7J3Rlc3Q1Jzog
e319LAorICAgICAgICAgICAgICAgICd0ZXN0Nic6IHt9LAorICAgICAgICAgICAgfSwKKyAgICAg
ICAgfSkpCisKKyAgICBkZWYgdGVzdF9ub19zdWl0ZShzZWxmKToKKyAgICAgICAgdXBsb2FkID0g
VXBsb2FkKAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0n
NScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAg
ICAgICAgKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAg
ICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRl
ZiB0ZXN0X25vX2NvbW1pdHMoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAg
ICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICkKKyAgICAgICAgd2l0aCBz
ZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBs
b2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICBkZWYgdGVzdF9idWlsZGJvdChzZWxmKToK
KyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRl
c3RzJywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAg
ICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUn
LAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAg
ICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhvcHRpb25zPXNlbGYuT3B0aW9u
cygKKyAgICAgICAgICAgICAgICBidWlsZGJvdF9tYXN0ZXI9J3dlYmtpdC5vcmcnLAorICAgICAg
ICAgICAgICAgIGJ1aWxkZXJfbmFtZT0nUXVldWUtMScsCisgICAgICAgICAgICAgICAgYnVpbGRf
bnVtYmVyPTEsCisgICAgICAgICkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZh
bHVlRXJyb3IpOgorICAgICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5j
b2RlcikKKworICAgICAgICB1cGxvYWQuZGV0YWlsc1snYnVpbGRib3Qtd29ya2VyJ10gPSAnYm90
MTIzJworICAgICAgICBnZW5lcmF0ZWRfZGljdCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMo
anNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsnZGV0YWlscyddLCBzZWxm
Lm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAnYnVpbGRib3QtbWFzdGVyJzogJ3dlYmtpdC5vcmcn
LAorICAgICAgICAgICAgJ2J1aWxkZXItbmFtZSc6ICdRdWV1ZS0xJywKKyAgICAgICAgICAgICdi
dWlsZC1udW1iZXInOiAxLAorICAgICAgICAgICAgJ2J1aWxkYm90LXdvcmtlcic6ICdib3QxMjMn
LAorICAgICAgICB9KSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9naXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY2hlY2tvdXQvc2NtL2dpdC5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MjkwLDYgKzI5MCwxNCBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYg
bmF0aXZlX3JldmlzaW9uKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dp
dChbJy1DJywgc2VsZi5maW5kX2NoZWNrb3V0X3Jvb3QocGF0aCksICdsb2cnLCAnLTEnLCAnLS1w
cmV0dHk9Zm9ybWF0OiVIJ10pCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBwYXRoKToK
KyAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX2dpdChbJy1DJywgc2VsZi5maW5kX2NoZWNrb3V0
X3Jvb3QocGF0aCksICdyZXYtcGFyc2UnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQnXSkucnN0cmlw
KCkKKworICAgICAgICAjIEZvciBnaXQtc3ZuCisgICAgICAgIGlmIHJlc3VsdC5zdGFydHN3aXRo
KCdoZWFkcycpOgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFs2Ol0KKyAgICAgICAgcmV0dXJu
IHJlc3VsdAorCiAgICAgZGVmIHN2bl91cmwoc2VsZik6CiAgICAgICAgIGdpdF9jb21tYW5kID0g
Wydzdm4nLCAnaW5mbyddCiAgICAgICAgIHN0YXR1cyA9IHNlbGYuX3J1bl9naXQoZ2l0X2NvbW1h
bmQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2Nt
X21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3NjbV9tb2NrLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHkJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDYgKzg3LDkgQEAgY2xhc3MgTW9ja1NDTShvYmplY3QpOgogICAgIGRlZiBuYXRpdmVf
cmV2aXNpb24oc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBzZWxmLnN2bl9yZXZpc2lvbihw
YXRoKQogCisgICAgZGVmIG5hdGl2ZV9icmFuY2goc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVy
biAndHJ1bmsnCisKICAgICBkZWYgdGltZXN0YW1wX29mX3JldmlzaW9uKHNlbGYsIHBhdGgsIHJl
dmlzaW9uKToKICAgICAgICAgcmV0dXJuICcyMDEzLTAyLTAxIDA4OjQ4OjA1ICswMDAwJwogCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9zY21fdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTkwOSw2ICs5MDksOSBAQCBFTkQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLnNjbS5oZWFkX3N2bl9yZXZpc2lvbigpLCBzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24oJy4n
KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24oJy4n
KSwgJzUnKQogCisgICAgZGVmIHRlc3RfbmF0aXZlX2JyYW5jaChzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfYnJhbmNoKCcuJyksICd0cnVuaycpCisKICAg
ICBkZWYgdGVzdF9wcm9wc2V0X3Byb3BnZXQoc2VsZik6CiAgICAgICAgIGZpbGVwYXRoID0gb3Mu
cGF0aC5qb2luKHNlbGYuc3ZuX2NoZWNrb3V0X3BhdGgsICJ0ZXN0X2ZpbGUiKQogICAgICAgICBl
eHBlY3RlZF9taW1lX3R5cGUgPSAieC1hcHBsaWNhdGlvbi9mb28tYmFyIgpAQCAtMTExMiw2ICsx
MTE1LDEwIEBAIGNsYXNzIEdpdFRlc3QoU0NNVGVzdCk6CiAgICAgICAgIGNvbW1hbmQgPSBbJ2dp
dCcsICctQycsIHNjbS5jaGVja291dF9yb290LCAncmV2LXBhcnNlJywgJ0hFQUQnXQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNjbS5uYXRpdmVfcmV2aXNpb24oc2NtLmNoZWNrb3V0X3Jvb3Qp
LCBydW5fY29tbWFuZChjb21tYW5kKS5zdHJpcCgpKQogCisgICAgZGVmIHRlc3RfbmF0aXZlX2Jy
YW5jaChzZWxmKToKKyAgICAgICAgc2NtID0gc2VsZi50cmFja2luZ19zY20KKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnbWFzdGVyJywgc2NtLm5hdGl2ZV9icmFuY2goc2NtLmNoZWNrb3V0X3Jv
b3QpKQorCiAgICAgZGVmIHRlc3RfcmVuYW1lX2ZpbGVzKHNlbGYpOgogICAgICAgICBzY20gPSBz
ZWxmLnRyYWNraW5nX3NjbQogCkBAIC0xNjI3LDYgKzE2MzQsOSBAQCBjbGFzcyBHaXRTVk5UZXN0
KFNDTVRlc3QpOgogICAgICAgICBjb21tYW5kID0gWydnaXQnLCAnLUMnLCBzZWxmLmdpdF9jaGVj
a291dF9wYXRoLCAncmV2LXBhcnNlJywgJ0hFQUQnXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuc2NtLm5hdGl2ZV9yZXZpc2lvbihzZWxmLmdpdF9jaGVja291dF9wYXRoKSwgcnVuX2Nv
bW1hbmQoY29tbWFuZCkuc3RyaXAoKSkKIAorICAgIGRlZiB0ZXN0X25hdGl2ZV9icmFuY2goc2Vs
Zik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3RydW5rJywgc2VsZi5zY20ubmF0aXZlX2Jy
YW5jaChzZWxmLmdpdF9jaGVja291dF9wYXRoKSkKKwogICAgIGRlZiB0ZXN0X3RvX29iamVjdF9u
YW1lKHNlbGYpOgogICAgICAgICByZWxwYXRoID0gJ3Rlc3RfZmlsZV9jb21taXQxJwogICAgICAg
ICBmdWxscGF0aCA9IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKHNlbGYuZ2l0X2NoZWNr
b3V0X3BhdGgsIHJlbHBhdGgpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y2hlY2tvdXQvc2NtL3N2bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC04Myw3ICs4Myw3IEBAIGNsYXNzIFNWTihTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgICAg
ICBTQ00uX19pbml0X18oc2VsZiwgY3dkLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5fYm9ndXNf
ZGlyID0gTm9uZQogICAgICAgICBpZiBwYXRjaF9kaXJlY3RvcmllcyA9PSBbXToKLSAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbihtZXNzYWdlPSdFbXB0eSBsaXN0IG9mIHBhdGNoIGRpcmVjdG9y
aWVzIHBhc3NlZCB0byBTQ00uX19pbml0X18nKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCdFbXB0eSBsaXN0IG9mIHBhdGNoIGRpcmVjdG9yaWVzIHBhc3NlZCB0byBTQ00uX19pbml0X18n
KQogICAgICAgICBlbGlmIHBhdGNoX2RpcmVjdG9yaWVzID09IE5vbmU6CiAgICAgICAgICAgICBz
ZWxmLl9wYXRjaF9kaXJlY3RvcmllcyA9IFtzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgoY3dkLCBz
ZWxmLmNoZWNrb3V0X3Jvb3QpXQogICAgICAgICBlbHNlOgpAQCAtMjc4LDYgKzI3OCwxNCBAQCBj
bGFzcyBTVk4oU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYgbmF0aXZlX3JldmlzaW9uKHNl
bGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5zdm5fcmV2aXNpb24ocGF0aCkKIAorICAg
IGRlZiBuYXRpdmVfYnJhbmNoKHNlbGYsIHBhdGgpOgorICAgICAgICByZWxhdGl2ZV91cmwgPSBz
ZWxmLnZhbHVlX2Zyb21fc3ZuX2luZm8ocGF0aCwgJ1JlbGF0aXZlIFVSTCcpWzI6XQorICAgICAg
ICBpZiByZWxhdGl2ZV91cmwuc3RhcnRzd2l0aCgndHJ1bmsnKToKKyAgICAgICAgICAgIHJldHVy
biAndHJ1bmsnCisgICAgICAgIGVsaWYgcmVsYXRpdmVfdXJsLnN0YXJ0c3dpdGgoJ2JyYW5jaCcp
OgorICAgICAgICAgICAgcmV0dXJuIHJlbGF0aXZlX3VybC5zcGxpdCgnLycpWzFdCisgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbigne30gaXMgbm90IGEgYnJhbmNoJy5mb3JtYXQocmVsYXRpdmVfdXJs
LnNwbGl0KCcvJylbMF0pKQorCiAgICAgZGVmIHRpbWVzdGFtcF9vZl9yZXZpc2lvbihzZWxmLCBw
YXRoLCByZXZpc2lvbik6CiAgICAgICAgICMgV2UgdXNlIC0teG1sIHRvIGdldCB0aW1lc3RhbXBz
IGxpa2UgMjAxMy0wMi0wOFQwODoxODowNC45NjQ0MDlaCiAgICAgICAgIHJlcG9zaXRvcnlfcm9v
dCA9IHNlbGYudmFsdWVfZnJvbV9zdm5faW5mbyhzZWxmLmNoZWNrb3V0X3Jvb3QsICdSZXBvc2l0
b3J5IFJvb3QnKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Bs
YXRmb3JtaW5mby5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CShyZXZpc2lvbiAyNDI5MjIpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0xNDYsNiArMTQ2LDExIEBAIGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAg
ICBleGNlcHQ6CiAgICAgICAgICAgICByZXR1cm4gc3lzLm1heGludAogCisgICAgZGVmIGJ1aWxk
X3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnL3Vzci9iaW4vc3dfdmVycycsICct
YnVpbGRWZXJzaW9uJ10sIHJldHVybl9zdGRlcnI9RmFsc2UsIGlnbm9yZV9lcnJvcnM9VHJ1ZSku
cnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiB4Y29kZV9zZGtfdmVyc2lv
bihzZWxmLCBzZGtfbmFtZSk6CiAgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CiAgICAgICAgICAg
ICAjIEFzc3VtZXMgdGhhdCB4Y3J1biBkb2VzIG5vdCB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQg
b24gZmFpbHVyZSAoZS5nLiBTREsgZG9lcyBub3QgZXhpc3QpLgpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9j
ay5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3
IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW0KIAogCiBjbGFzcyBN
b2NrUGxhdGZvcm1JbmZvKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9zX25hbWU9
J21hYycsIG9zX3ZlcnNpb249VmVyc2lvbi5mcm9tX25hbWUoJ1Nub3cgTGVvcGFyZCcpKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgb3NfbmFtZT0nbWFjJywgb3NfdmVyc2lvbj1WZXJzaW9uLmZy
b21fbmFtZSgnSGlnaCBTaWVycmEnKSk6CiAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9zX3Zl
cnNpb24sIFZlcnNpb24pCiAgICAgICAgIHNlbGYub3NfbmFtZSA9IG9zX25hbWUKICAgICAgICAg
c2VsZi5vc192ZXJzaW9uID0gb3NfdmVyc2lvbgpAQCAtNzgsNiArNzgsMTEgQEAgY2xhc3MgTW9j
a1BsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRlZiB0ZXJtaW5hbF93aWR0aChzZWxmKToKICAg
ICAgICAgcmV0dXJuIDgwCiAKKyAgICBkZWYgYnVpbGRfdmVyc2lvbihzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5pc19tYWMoKToKKyAgICAgICAgICAgIHJldHVybiAnMTdBNDA1JworICAgICAgICBy
ZXR1cm4gTm9uZQorCiAgICAgZGVmIHhjb2RlX3Nka192ZXJzaW9uKHNlbGYsIHNka19uYW1lKToK
ICAgICAgICAgcmV0dXJuIFZlcnNpb24oOCwgMSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9yZXN1bHRzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MyBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3Ig
bW9kdWxlIGZpbGVzCisKKyMgS2VlcCB0aGlzIGZpbGUgZnJlZSBvZiBhbnkgY29kZSBvciBpbXBv
cnQgc3RhdGVtZW50cyB0aGF0IGNvdWxkCisjIGNhdXNlIGVpdGhlciBhbiBlcnJvciB0byBvY2N1
ciBvciBhIGxvZyBtZXNzYWdlIHRvIGJlIGxvZ2dlZC4KKyMgVGhpcyBlbnN1cmVzIHRoYXQgY2Fs
bGluZyBjb2RlIGNhbiBpbXBvcnQgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tCisjIHdlYmtpdHB5
IGJlZm9yZSBhbnkgZXJyb3JzIG9yIGxvZyBtZXNzYWdlcyBkdWUgdG8gY29kZSBpbiB0aGlzIGZp
bGUuCisjIEluaXRpYWxpemF0aW9uIGNvZGUgY2FuIGluY2x1ZGUgdGhpbmdzIGxpa2UgdmVyc2lv
bi1jaGVja2luZyBjb2RlIGFuZAorIyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gY29kZS4KKyMKKyMg
V2UgZG8gbm90IGV4ZWN1dGUgYW55IHZlcnNpb24tY2hlY2tpbmcgY29kZSBvciBsb2dnaW5nIGNv
bmZpZ3VyYXRpb24KKyMgY29kZSBpbiB0aGlzIGZpbGUgc28gdGhhdCBjYWxsZXJzIGNhbiBvcHQt
aW4gYXMgdGhleSB3YW50LiAgVGhpcyBhbHNvCisjIGFsbG93cyBkaWZmZXJlbnQgY2FsbGVycyB0
byBjaG9vc2UgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uIGNvZGUsCisjIGFzIG5lY2Vzc2FyeS4K
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IG9wdHBhcnNlCisKKworZGVmIHVwbG9hZF9vcHRpb25zKCk6Cisg
ICAgcmV0dXJuIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcmVwb3J0JywgYWN0
aW9uPSdhcHBlbmQnLCBkZXN0PSdyZXBvcnRfdXJscycsIGhlbHA9J1VSTCAob3IgVVJMcykgdG8g
cmVwb3J0IHRlc3QgcmVzdWx0cyB0bycpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1idWlsZGJvdC1tYXN0ZXInLCBoZWxwPSdUaGUgdXJsIG9mIHRoZSBidWlsZGJvdCBtYXN0ZXIu
JyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkZXItbmFtZScsIGhlbHA9
J1RoZSBuYW1lIG9mIHRoZSBidWlsZGJvdCBidWlsZGVyIHRlc3RzIHdlcmUgcnVuIG9uLicpLAor
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZC1udW1iZXInLCBoZWxwPSdUaGUg
YnVpbGRib3QgYnVpbGQgbnVtYmVyIHRlc3RzIGFyZSBhc3NvY2lhdGVkIHdpdGguJyksCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkYm90LXdvcmtlcicsIGhlbHA9J1RoZSBi
dWlsZGJvdCB3b3JrZXIgdGVzdHMgd2VyZSBydW4gb24uJyksCisgICAgXQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5CShub25leGlzdGVudCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxODkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5yZXF1ZXN0cworCitpbXBvcnQg
anNvbgoraW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBwbGF0Zm9ybSBhcyBw
bGF0Zm9ybV8KKworCitjbGFzcyBVcGxvYWQob2JqZWN0KToKKyAgICBVUExPQURfRU5EUE9JTlQg
PSAnL2FwaS91cGxvYWQnCisgICAgQlVJTERCT1RfREVUQUlMUyA9IFsnYnVpbGRib3QtbWFzdGVy
JywgJ2J1aWxkZXItbmFtZScsICdidWlsZC1udW1iZXInLCAnYnVpbGRib3Qtd29ya2VyJ10KKyAg
ICBWRVJTSU9OID0gMAorCisgICAgY2xhc3MgRXhwZWN0YXRpb25zOgorICAgICAgICAjIFRoZXNl
IGFyZSBvcmRlcmVkIGJ5IHByaW9yaXR5LCBtZWFuaW5nIHRoYXQgYSB0ZXN0IHdoaWNoIGJvdGgg
Y3Jhc2hlcyBhbmQgaGFzCisgICAgICAgICMgYSB3YXJuaW5nIHNob3VsZCBiZSBjb25zaWRlcmVk
IHRvIGhhdmUgY3Jhc2hlZC4KKyAgICAgICAgT1JERVIgPSBbCisgICAgICAgICAgICAnQ1JBU0gn
LAorICAgICAgICAgICAgJ1RJTUVPVVQnLAorICAgICAgICAgICAgJ0lNQUdFJywgICAjIEltYWdl
LWRpZmYKKyAgICAgICAgICAgICdBVURJTycsICAgIyBBdWRpby1kaWZmCisgICAgICAgICAgICAn
VEVYVCcsICAgICMgVGV4dC1kaWZmCisgICAgICAgICAgICAnRkFJTCcsCisgICAgICAgICAgICAn
RVJST1InLAorICAgICAgICAgICAgJ1dBUk5JTkcnLAorICAgICAgICAgICAgJ1BBU1MnLAorICAg
ICAgICBdCisgICAgICAgIENSQVNILCBUSU1FT1VULCBJTUFHRSwgQVVESU8sIFRFWFQsIEZBSUws
IEVSUk9SLCBXQVJOSU5HLCBQQVNTID0gT1JERVIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICBwbGF0Zm9ybT1Ob25lLAorICAg
ICAgICAgICAgaXNfc2ltdWxhdG9yPUZhbHNlLAorICAgICAgICAgICAgdmVyc2lvbj1Ob25lLAor
ICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPU5vbmUsCisgICAgICAgICAgICB2ZXJzaW9uX25hbWU9
Tm9uZSwKKyAgICAgICAgICAgIG1vZGVsPU5vbmUsCisgICAgICAgICAgICBzdHlsZT1Ob25lLCAg
ICMgRGVidWcvUHJvZHVjdGlvbi9SZWxlYXNlCisgICAgICAgICAgICBmbGF2b3I9Tm9uZSwgICMg
RHVtcGluZyBncm91bmQgc3VpdGUtd2lkZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgKGllLCBHdWFy
ZE1hbGxvYykKKyAgICAgICAgICAgIHNkaz1Ob25lLAorICAgICAgICApOgorCisgICAgICAgICMg
VGhpcyBkZXZpYXRlcyBzbGlnaHRseSBmcm9tIHRoZSByZXN0IG9mIHdlYmtpdHB5LCBidXQgaXQg
YWxsb3dzIHRoaXMgZmlsZSB0byBiZSBlbnRpcmVseSBwb3J0YWJsZS4KKyAgICAgICAgY29uZmln
ID0gZGljdCgKKyAgICAgICAgICAgIHBsYXRmb3JtPXBsYXRmb3JtIG9yIChwbGF0Zm9ybV8uc3lz
dGVtKCkgaWYgcGxhdGZvcm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVsc2UgJ21hYycpLmxvd2Vy
KCksCisgICAgICAgICAgICBpc19zaW11bGF0b3I9aXNfc2ltdWxhdG9yLAorICAgICAgICAgICAg
dmVyc2lvbj12ZXJzaW9uIG9yIChwbGF0Zm9ybV8ucmVsZWFzZSgpIGlmIHBsYXRmb3JtXy5zeXN0
ZW0oKSAhPSAnRGFyd2luJyBlbHNlIHBsYXRmb3JtXy5tYWNfdmVyKClbMF0pLAorICAgICAgICAg
ICAgYXJjaGl0ZWN0dXJlPWFyY2hpdGVjdHVyZSBvciBwbGF0Zm9ybV8ubWFjaGluZSgpLAorICAg
ICAgICApCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbmZpZy5pdGVyaXRlbXMoKToKKyAg
ICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcigne30gbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uJy5mb3JtYXQoa2V5
KSkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGljdCh2ZXJzaW9uX25hbWU9dmVyc2lvbl9u
YW1lLCBtb2RlbD1tb2RlbCwgc3R5bGU9c3R5bGUsIGZsYXZvcj1mbGF2b3IsIHNkaz1zZGspLml0
ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICAgICAgY29uZmlnW2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gY29uZmlnCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9jb21taXQocmVwb3NpdG9yeV9pZD1Ob25lLCBp
ZD1Ob25lLCBicmFuY2g9Tm9uZSk6CisgICAgICAgIGNvbW1pdCA9IGRpY3QocmVwb3NpdG9yeV9p
ZD1yZXBvc2l0b3J5X2lkLCBpZD1pZCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gY29tbWl0
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRlZmluZWQgaW4gYSBjb21taXQnLmZv
cm1hdChrZXkpKQorICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICBjb21taXRbJ2JyYW5j
aCddID0gYnJhbmNoCisgICAgICAgIHJldHVybiBjb21taXQKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgY3JlYXRlX2RldGFpbHMobGluaz1Ob25lLCBvcHRpb25zPU5vbmUsICoqa3dhcmdz
KToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgaWYgbGluazoKKyAg
ICAgICAgICAgIHJlc3VsdFsnbGluayddID0gbGluaworCisgICAgICAgIGlmIG9wdGlvbnM6Cisg
ICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBVcGxvYWQuQlVJTERCT1RfREVUQUlMUzoKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob3B0aW9ucywgZWxlbWVudC5yZXBsYWNlKCctJywg
J18nKSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0W2VsZW1lbnRdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHJl
c3VsdAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfcnVuX3N0YXRzKHN0YXJ0
X3RpbWU9Tm9uZSwgZW5kX3RpbWU9Tm9uZSwgdGVzdHNfc2tpcHBlZD1Ob25lLCAqKmt3YXJncyk6
CisgICAgICAgIHN0YXRzID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgZm9yIGtleSwgdmFsdWUg
aW4gZGljdChzdGFydF90aW1lPXN0YXJ0X3RpbWUsIGVuZF90aW1lPWVuZF90aW1lLCB0ZXN0c19z
a2lwcGVkPXRlc3RzX3NraXBwZWQpLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RhdHNba2V5XSA9IHZhbHVlCisgICAgICAg
IHJldHVybiBzdGF0cworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfdGVzdF9y
ZXN1bHQoZXhwZWN0ZWQ9Tm9uZSwgYWN0dWFsPU5vbmUsIGxvZz1Ob25lLCAqKmt3YXJncyk6Cisg
ICAgICAgIHJlc3VsdCA9IGRpY3QoKiprd2FyZ3MpCisKKyAgICAgICAgIyBUZXN0cyB3aGljaCBk
b24ndCBkZWNsYXJlIGV4cGVjdGF0aW9ucyBvciByZXN1bHRzIGFyZSBhc3N1bWVkIHRvIGhhdmUg
cGFzc2VkLgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KGV4cGVjdGVkPWV4cGVjdGVk
LCBhY3R1YWw9YWN0dWFsLCBsb2c9bG9nKS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZh
bHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1aXRlPU5vbmUs
IGNvbmZpZ3VyYXRpb249Tm9uZSwgY29tbWl0cz1bXSwgdGltZXN0YW1wPU5vbmUsIGRldGFpbHM9
Tm9uZSwgcnVuX3N0YXRzPU5vbmUsIHJlc3VsdHM9e30pOgorICAgICAgICBzZWxmLnN1aXRlID0g
c3VpdGUKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorICAgICAg
ICBzZWxmLmNvbW1pdHMgPSBjb21taXRzCisgICAgICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0
YW1wCisgICAgICAgIHNlbGYuZGV0YWlscyA9IGRldGFpbHMKKyAgICAgICAgc2VsZi5ydW5fc3Rh
dHMgPSBydW5fc3RhdHMKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gcmVzdWx0cworCisgICAgY2xh
c3MgRW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKToKKworICAgICAgICBkZWYgZGVmYXVsdChzZWxm
LCBvYmopOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIFVwbG9hZCk6CisgICAgICAg
ICAgICAgICAgaWYgbm90IG9iai5zdWl0ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignTm8gc3VpdGUgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKyAgICAgICAg
ICAgICAgICBpZiBub3Qgb2JqLmNvbW1pdHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoJ05vIGNvbW1pdHMgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKworICAg
ICAgICAgICAgICAgIGRldGFpbHMgPSBvYmouZGV0YWlscyBvciBvYmouY3JlYXRlX2RldGFpbHMo
KQorICAgICAgICAgICAgICAgIGJ1aWxkYm90X2FyZ3MgPSBbZGV0YWlscy5nZXQoYXJnLCBOb25l
KSBpcyBOb25lIGZvciBhcmcgaW4gb2JqLkJVSUxEQk9UX0RFVEFJTFNdCisgICAgICAgICAgICAg
ICAgaWYgYW55KGJ1aWxkYm90X2FyZ3MpIGFuZCBub3QgYWxsKGJ1aWxkYm90X2FyZ3MpOgorICAg
ICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBbGwgYnVpbGRib3QgZGV0YWlscyBt
dXN0IGJlIGRlZmluZWQgZm9yIHVwbG9hZCcpCisKKyAgICAgICAgICAgICAgICBkZWYgdW5wYWNr
X3Rlc3QoY3VycmVudCwgcGF0aF90b190ZXN0LCBkYXRhKToKKyAgICAgICAgICAgICAgICAgICAg
aWYgbGVuKHBhdGhfdG9fdGVzdCkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRbcGF0aF90b190ZXN0WzBdXSA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3VycmVudC5nZXQocGF0aF90b190ZXN0WzBd
KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbcGF0aF90b190ZXN0WzBdXSA9IHt9
CisgICAgICAgICAgICAgICAgICAgIHVucGFja190ZXN0KGN1cnJlbnRbcGF0aF90b190ZXN0WzBd
XSwgcGF0aF90b190ZXN0WzE6XSwgZGF0YSkKKworICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB7
fQorICAgICAgICAgICAgICAgIGZvciB0ZXN0LCBkYXRhIGluIG9iai5yZXN1bHRzLml0ZXJpdGVt
cygpOgorICAgICAgICAgICAgICAgICAgICB1bnBhY2tfdGVzdChyZXN1bHRzLCB0ZXN0LnNwbGl0
KCcvJyksIGRhdGEpCisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkaWN0KAorICAgICAgICAg
ICAgICAgICAgICB2ZXJzaW9uPW9iai5WRVJTSU9OLAorICAgICAgICAgICAgICAgICAgICBzdWl0
ZT1vYmouc3VpdGUsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249b2JqLmNvbmZp
Z3VyYXRpb24gb3Igb2JqLmNyZWF0ZV9jb25maWd1cmF0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgIGNvbW1pdHM9b2JqLmNvbW1pdHMsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0
cz1kaWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscz1kZXRhaWxzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcnVuX3N0YXRzPW9iai5ydW5fc3RhdHMgb3Igb2JqLmNyZWF0ZV9y
dW5fc3RhdHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHM9cmVzdWx0cywKKyAg
ICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAg
aWYgb2JqLnRpbWVzdGFtcDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Wyd0aW1lc3RhbXAn
XSA9IG9iai50aW1lc3RhbXAKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAg
ICAgICByZXR1cm4gc3VwZXIoVXBsb2FkLkVuY29kZXIsIHNlbGYpLmRlZmF1bHQob2JqKQorCisg
ICAgZGVmIHVwbG9hZChzZWxmLCB1cmwsIGxvZ19saW5lPWxhbWJkYSB2YWw6IHN5cy5zdGRvdXQu
d3JpdGUodmFsICsgJ1xuJykpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwb25zZSA9
IHJlcXVlc3RzLnBvc3QodXJsICsgc2VsZi5VUExPQURfRU5EUE9JTlQsIGRhdGE9anNvbi5kdW1w
cyhzZWxmLCBjbHM9VXBsb2FkLkVuY29kZXIpKQorICAgICAgICBleGNlcHQgcmVxdWVzdHMuZXhj
ZXB0aW9ucy5Db25uZWN0aW9uRXJyb3I6CisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsg
J0ZhaWxlZCB0byB1cGxvYWQgdG8ge30sIHJlc3VsdHMgc2VydmVyIG5vdCBvbmxpbmUnLmZvcm1h
dCh1cmwpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVy
cm9yIGFzIGU6CisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA0ICsgJ0ZhaWxlZCB0byBlbmNv
ZGUgdXBsb2FkIGRhdGE6IHt9Jy5mb3JtYXQoZSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICBs
b2dfbGluZSgnICcgKiA0ICsgJ0Vycm9yIHVwbG9hZGluZyB0byB7fTonLmZvcm1hdCh1cmwpKQor
ICAgICAgICAgICAgbG9nX2xpbmUoJyAnICogOCArIHJlc3BvbnNlLmpzb24oKVsnZGVzY3JpcHRp
b24nXSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGxvZ19saW5lKCcgJyAq
IDQgKyAnVXBsb2FkZWQgcmVzdWx0cyB0byB7fScuZm9ybWF0KHVybCkpCisgICAgICAgIHJldHVy
biBUcnVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxv
YWRfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9y
ZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxNSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgd2Via2l0
cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnJlcXVlc3RzCisKK2ltcG9ydCBjb2xsZWN0aW9u
cworaW1wb3J0IGpzb24KK2ltcG9ydCBtb2NrCitpbXBvcnQgcmVxdWVzdHMKK2ltcG9ydCB0aW1l
CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5yZXN1bHRzLnVwbG9hZCBpbXBvcnQg
VXBsb2FkCisKKworY2xhc3MgVXBsb2FkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBj
bGFzcyBPcHRpb25zKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJn
cyk6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2FyZ3MuaXRlcml0ZW1zKCk6Cisg
ICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbHVlKQorCisgICAgY2xhc3MgTW9j
a1Jlc3BvbnNlKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0dXNfY29k
ZT0yMDAsIHRleHQ9JycpOgorICAgICAgICAgICAgc2VsZi5zdGF0dXNfY29kZSA9IHN0YXR1c19j
b2RlCisgICAgICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisKKyAgICAgICAgZGVmIGpzb24oc2Vs
Zik6CisgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhzZWxmLnRleHQpCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIG5vcm1hbGl6ZShkYXRhKToKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShkYXRhLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBzdHIoZGF0YSkKKyAgICAg
ICAgZWxpZiBpc2luc3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLk1hcHBpbmcpOgorICAgICAgICAg
ICAgcmV0dXJuIGRpY3QobWFwKFVwbG9hZFRlc3Qubm9ybWFsaXplLCBkYXRhLml0ZXJpdGVtcygp
KSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKToK
KyAgICAgICAgICAgIHJldHVybiB0eXBlKGRhdGEpKG1hcChVcGxvYWRUZXN0Lm5vcm1hbGl6ZSwg
ZGF0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVm
IHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHN0YXJ0X3RpbWUsIGVuZF90aW1lID0gdGlt
ZS50aW1lKCkgLSAzLCB0aW1lLnRpbWUoKQorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAg
ICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29uZmlndXJhdGlv
bj1VcGxvYWQuY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICAgICAgcGxhdGZvcm09
J21hYycsCisgICAgICAgICAgICAgICAgdmVyc2lvbj0nMTAuMTMuMCcsCisgICAgICAgICAgICAg
ICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJyYScsCisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0
dXJlPSd4ODZfNjQnLAorICAgICAgICAgICAgICAgIHNkaz0nMTdBNDA1JywKKyAgICAgICAgICAg
ICksCisgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhsaW5rPSdodHRw
czovL3dlYmtpdC5vcmcnKSwKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29t
bWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAg
ICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAg
ICAgKV0sCisgICAgICAgICAgICBydW5fc3RhdHM9VXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisg
ICAgICAgICAgICAgICAgc3RhcnRfdGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgICAgIGVu
ZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwKKyAgICAg
ICAgICAgICksCisgICAgICAgICAgICByZXN1bHRzPXsKKyAgICAgICAgICAgICAgICAnd2Via2l0
cHkudGVzdDEnOiB7fSwKKyAgICAgICAgICAgICAgICAnd2Via2l0cHkudGVzdDInOiBVcGxvYWQu
Y3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0
dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgICAgICB9LAorICAgICAgICAp
CisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29u
LmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKSkpCisKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndmVyc2lvbiddLCAwKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGdlbmVyYXRlZF9kaWN0WydzdWl0ZSddLCAnd2Via2l0cHktdGVzdHMnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wydjb25maWd1cmF0aW9uJ10sIHNlbGYu
bm9ybWFsaXplKGRpY3QoCisgICAgICAgICAgICBwbGF0Zm9ybT0nbWFjJywKKyAgICAgICAgICAg
IGlzX3NpbXVsYXRvcj1GYWxzZSwKKyAgICAgICAgICAgIHZlcnNpb249JzEwLjEzLjAnLAorICAg
ICAgICAgICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJyYScsCisgICAgICAgICAgICBhcmNoaXRl
Y3R1cmU9J3g4Nl82NCcsCisgICAgICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICkpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wydjb21taXRzJ10sIFtkaWN0
KAorICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgIGlkPSc1
JywKKyAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICApXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwg
c2VsZi5ub3JtYWxpemUoZGljdChsaW5rPSdodHRwczovL3dlYmtpdC5vcmcnKSkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydydW5fc3Rh
dHMnXSwgc2VsZi5ub3JtYWxpemUoZGljdCgKKyAgICAgICAgICAgIHN0YXJ0X3RpbWU9c3RhcnRf
dGltZSwKKyAgICAgICAgICAgIGVuZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgdGVzdHNf
c2tpcHBlZD0wLAorICAgICAgICApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0
ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAg
ICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisgICAgICAgICAgICAnd2Via2l0cHkudGVz
dDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlv
bnMuUEFTUywgYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgIH0pKQor
CisgICAgZGVmIHRlc3RfdXBsb2FkKHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisg
ICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1b
VXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Vi
a2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0
cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAgKQorCisgICAgICAgIHdpdGggbW9jay5w
YXRjaCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNw
b25zZSgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cGxvYWQudXBsb2FkKCdodHRw
czovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAg
ICAgICBkZWYgcmFpc2VfZXhjZXB0aW9uKHVybCwgZGF0YSk6CisgICAgICAgICAgICByYWlzZSBy
ZXF1ZXN0cy5leGNlcHRpb25zLkNvbm5lY3Rpb25FcnJvcigpCisKKyAgICAgICAgd2l0aCBtb2Nr
LnBhdGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PXJhaXNlX2V4Y2VwdGlvbik6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHVwbG9hZC51cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1
bHRzJywgbG9nX2xpbmU9bGFtYmRhIF86IE5vbmUpKQorCisgICAgICAgIHdpdGggbW9jay5wYXRj
aCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNwb25z
ZSgKKyAgICAgICAgICAgIHN0YXR1c19jb2RlPTQwNCwKKyAgICAgICAgICAgIHRleHQ9anNvbi5k
dW1wcyhkaWN0KGRlc2NyaXB0aW9uPSdObyBzdWNoIGFkZHJlc3MnKSksCisgICAgICAgICkpOgor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dlYmtp
dC5vcmcvcmVzdWx0cycsIGxvZ19saW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAgIGRlZiB0ZXN0
X3BhY2tlZF90ZXN0KHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAg
ICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNy
ZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAg
ICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisg
ICAgICAgICAgICApXSwKKyAgICAgICAgICAgIHJlc3VsdHM9eworICAgICAgICAgICAgICAgICdk
aXIxL3N1Yi1kaXIxL3Rlc3QxJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBs
b2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90
ZXN0Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlv
bnMuVElNRU9VVCksCisgICAgICAgICAgICAgICAgJ2RpcjEvc3ViLWRpcjIvdGVzdDMnOiB7fSwK
KyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMi90ZXN0NCc6IHt9LAorICAgICAgICAgICAg
ICAgICdkaXIyL3N1Yi1kaXIzL3Rlc3Q1Jzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjIvdGVz
dDYnOiB7fSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGlj
dCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxv
YWQuRW5jb2RlcikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0
ZXN0X3Jlc3VsdHMnXVsncmVzdWx0cyddLCBzZWxmLm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAn
ZGlyMSc6IHsKKyAgICAgICAgICAgICAgICAnc3ViLWRpcjEnOiB7CisgICAgICAgICAgICAgICAg
ICAgICd0ZXN0MSc6IHsnYWN0dWFsJzogVXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMfSwKKyAgICAg
ICAgICAgICAgICAgICAgJ3Rlc3QyJzogeydhY3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLlRJ
TUVPVVR9LAorICAgICAgICAgICAgICAgIH0sICdzdWItZGlyMic6IHsKKyAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3QzJzoge30sCisgICAgICAgICAgICAgICAgICAgICd0ZXN0NCc6IHt9LAorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sICdkaXIyJzogeworICAgICAgICAgICAgICAg
ICdzdWItZGlyMyc6IHsndGVzdDUnOiB7fX0sCisgICAgICAgICAgICAgICAgJ3Rlc3Q2Jzoge30s
CisgICAgICAgICAgICB9LAorICAgICAgICB9KSkKKworICAgIGRlZiB0ZXN0X25vX3N1aXRlKHNl
bGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBjb21taXRzPVtVcGxv
YWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQn
LAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5r
JywKKyAgICAgICAgICAgICldLAorICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVw
bG9hZC5FbmNvZGVyKQorCisgICAgZGVmIHRlc3Rfbm9fY29tbWl0cyhzZWxmKToKKyAgICAgICAg
dXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAg
ICAgICAgKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAg
ICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRl
ZiB0ZXN0X2J1aWxkYm90KHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAg
ICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2Fk
LmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywK
KyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycs
CisgICAgICAgICAgICApXSwKKyAgICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRh
aWxzKG9wdGlvbnM9c2VsZi5PcHRpb25zKAorICAgICAgICAgICAgICAgIGJ1aWxkYm90X21hc3Rl
cj0nd2Via2l0Lm9yZycsCisgICAgICAgICAgICAgICAgYnVpbGRlcl9uYW1lPSdRdWV1ZS0xJywK
KyAgICAgICAgICAgICAgICBidWlsZF9udW1iZXI9MSwKKyAgICAgICAgKSkpCisgICAgICAgIHdp
dGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBz
KHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQorCisgICAgICAgIHVwbG9hZC5kZXRhaWxzWydi
dWlsZGJvdC13b3JrZXInXSA9ICdib3QxMjMnCisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2Vs
Zi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNv
ZGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVz
dWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICdidWlsZGJv
dC1tYXN0ZXInOiAnd2Via2l0Lm9yZycsCisgICAgICAgICAgICAnYnVpbGRlci1uYW1lJzogJ1F1
ZXVlLTEnLAorICAgICAgICAgICAgJ2J1aWxkLW51bWJlcic6IDEsCisgICAgICAgICAgICAnYnVp
bGRib3Qtd29ya2VyJzogJ2JvdDEyMycsCisgICAgICAgIH0pKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L21haW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90ZXN0L21haW4ucHkJKHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdGVzdC9tYWluLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCiAjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBK
ZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCi0jIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzgsMTcgKzM4LDE5IEBAIGltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCB1bml0dGVzdAog
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ubG9ndXRpbHMgaW1wb3J0IGNvbmZpZ3VyZV9s
b2dnaW5nCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVj
dXRpdmUsIFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZl
IGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0
ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1o
b3N0IGltcG9ydCBTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBI
b3N0CiBmcm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBDb25maWcKIGZyb20gd2Via2l0
cHkudGVzdC5maW5kZXIgaW1wb3J0IEZpbmRlcgogZnJvbSB3ZWJraXRweS50ZXN0LnByaW50ZXIg
aW1wb3J0IFByaW50ZXIKIGZyb20gd2Via2l0cHkudGVzdC5ydW5uZXIgaW1wb3J0IFJ1bm5lciwg
dW5pdF90ZXN0X25hbWUKK2Zyb20gd2Via2l0cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVwbG9h
ZAorZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9wdGlvbnMgaW1wb3J0IHVwbG9hZF9vcHRpb25zCiAK
IF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAotX2hvc3QgPSBTeXN0ZW1Ib3N0
KCkKK19ob3N0ID0gSG9zdCgpCiBfd2Via2l0X3Jvb3QgPSBOb25lCiAKIApAQCAtMTI0LDEyICsx
MjYsMTUgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIHBhcnNlciA9IG9wdHBhcnNl
Lk9wdGlvblBhcnNlcih1c2FnZT0ndXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBbYXJncy4uLl0nKQog
CiAgICAgICAgICMgIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbmx5IGVmZmVjdCB0aGUgYnVpbGRp
bmcgb2YgbGxkYldlYktpdFRlc3Rlci4KLSAgICAgICAgY29uZmlndXJhdGlvbl9ncm91cCA9IG9w
dHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgJ0NvbmZpZ3VyYXRpb24gb3B0aW9ucycpCi0gICAg
ICAgIGNvbmZpZ3VyYXRpb25fZ3JvdXAuYWRkX29wdGlvbignLS1kZWJ1ZycsIGFjdGlvbj0nc3Rv
cmVfY29uc3QnLCBjb25zdD0nRGVidWcnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKLSAgICAgICAg
ICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBEZWJ1ZycpCi0gICAgICAgIGNvbmZp
Z3VyYXRpb25fZ3JvdXAuYWRkX29wdGlvbignLS1yZWxlYXNlJywgYWN0aW9uPSdzdG9yZV9jb25z
dCcsIGNvbnN0PSdSZWxlYXNlJywgZGVzdD0iY29uZmlndXJhdGlvbiIsCi0gICAgICAgICAgICBo
ZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gUmVsZWFzZScpCi0gICAgICAgIHBhcnNlci5h
ZGRfb3B0aW9uX2dyb3VwKGNvbmZpZ3VyYXRpb25fZ3JvdXApCisgICAgICAgIGZvciBncm91cF9u
YW1lLCBncm91cF9vcHRpb25zIGluIHsnVXBsb2FkIE9wdGlvbnMnOiB1cGxvYWRfb3B0aW9ucygp
LCAnQ29uZmlndXJhdGlvbiBPcHRpb25zJzogWworICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oJy0tZGVidWcnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J0RlYnVnJywgZGVz
dD0iY29uZmlndXJhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gRGVidWcnKSwKKyAgICAgICAgICAgIG9wdHBhcnNl
Lm1ha2Vfb3B0aW9uKCctLXJlbGVhc2UnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J1Jl
bGVhc2UnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBSZWxlYXNlJyksCisgICAgICAg
IF19Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgb3B0aW9uX2dyb3VwID0gb3B0cGFyc2UuT3B0
aW9uR3JvdXAocGFyc2VyLCBncm91cF9uYW1lKQorICAgICAgICAgICAgb3B0aW9uX2dyb3VwLmFk
ZF9vcHRpb25zKGdyb3VwX29wdGlvbnMpCisgICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9n
cm91cChvcHRpb25fZ3JvdXApCiAKICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1hJywgJy0t
YWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVscD0ncnVuIGFsbCB0aGUgdGVzdHMnKQpAQCAtMTgxLDExICsxODYsMTIg
QEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0
eSBpbXBvcnQgYXV0b2luc3RhbGxfZXZlcnl0aGluZwogICAgICAgICBhdXRvaW5zdGFsbF9ldmVy
eXRoaW5nKCkKIAorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgY29u
ZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIuZmlsZXN5c3RlbSkKKyAg
ICAgICAgY29uZmlndXJhdGlvbl90b191c2UgPSBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24g
b3IgY29uZmlnLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAgICAgICAgIGlmIHdpbGxfcnVuX2xs
ZGJfd2Via2l0X3Rlc3RzOgogICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgn
QnVpbGRpbmcgbGxkYldlYktpdFRlc3RlciAuLi4nKQogICAgICAgICAgICAgYnVpbGRfbGxkYndl
YmtpdHRlc3RlciA9IHNlbGYuZmluZGVyLmZpbGVzeXN0ZW0uam9pbihfd2Via2l0X3Jvb3QsICdU
b29scycsICdTY3JpcHRzJywgJ2J1aWxkLWxsZGJ3ZWJraXR0ZXN0ZXInKQotICAgICAgICAgICAg
Y29uZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIuZmlsZXN5c3RlbSkK
LSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25fdG9fdXNlID0gc2VsZi5fb3B0aW9ucy5jb25maWd1
cmF0aW9uIG9yIGNvbmZpZy5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQogICAgICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgICAgIF9ob3N0LmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwo
W2J1aWxkX2xsZGJ3ZWJraXR0ZXN0ZXIsIGNvbmZpZy5mbGFnX2Zvcl9jb25maWd1cmF0aW9uKGNv
bmZpZ3VyYXRpb25fdG9fdXNlKV0sIHF1aWV0PShub3QgYm9vbChzZWxmLl9vcHRpb25zLnZlcmJv
c2UpKSkKICAgICAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciBhcyBlOgpAQCAtMjE4LDYgKzIy
NCw3IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICB0ZXN0X3J1bm5lciA9IFJ1bm5l
cihzZWxmLnByaW50ZXIsIGxvYWRlcikKICAgICAgICAgdGVzdF9ydW5uZXIucnVuKHBhcmFsbGVs
X3Rlc3RzLCBzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykKICAgICAgICAgdGVzdF9ydW5u
ZXIucnVuKHNlcmlhbF90ZXN0cywgMSkKKyAgICAgICAgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQog
CiAgICAgICAgIHNlbGYucHJpbnRlci5wcmludF9yZXN1bHQodGltZS50aW1lKCkgLSBzdGFydCkK
IApAQCAtMjMyLDkgKzIzOSw1MCBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKICAgICAgICAgICAgIGNvdi5zdG9wKCkKICAgICAgICAg
ICAgIGNvdi5zYXZlKCkKKworICAgICAgICBmYWlsZWRfdXBsb2FkcyA9IDAKKyAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5yZXBvcnRfdXJsczoKKyAgICAgICAgICAgIHNlbGYucHJpbnRlci5tZXRl
ci53cml0ZWxuKCdcbicpCisgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKCdQ
cmVwYXJpbmcgdXBsb2FkIGRhdGEgLi4uJykKKworICAgICAgICAgICAgcmVzdWx0cyA9IHt0ZXN0
OiB7fSBmb3IgdGVzdCBpbiB0ZXN0X3J1bm5lci50ZXN0c19ydW59CisgICAgICAgICAgICBmb3Ig
dGVzdCwgZXJyb3JzIGluIHRlc3RfcnVubmVyLmVycm9yczoKKyAgICAgICAgICAgICAgICByZXN1
bHRzW3Rlc3RdID0gVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4cGVj
dGF0aW9ucy5FUlJPUiwgbG9nPScvbicuam9pbihlcnJvcnMpKQorICAgICAgICAgICAgZm9yIHRl
c3QsIGZhaWx1cmVzIGluIHRlc3RfcnVubmVyLmZhaWx1cmVzOgorICAgICAgICAgICAgICAgIHJl
c3VsdHNbdGVzdF0gPSBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhw
ZWN0YXRpb25zLkZBSUwsIGxvZz0nL24nLmpvaW4oZmFpbHVyZXMpKQorCisgICAgICAgICAgICBf
aG9zdC5pbml0aWFsaXplX3NjbSgpCisgICAgICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAg
ICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgICAgICBjb25m
aWd1cmF0aW9uPVVwbG9hZC5jcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgICAgICAg
ICAgcGxhdGZvcm09X2hvc3QucGxhdGZvcm0ub3NfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
dmVyc2lvbj1zdHIoX2hvc3QucGxhdGZvcm0ub3NfdmVyc2lvbiksCisgICAgICAgICAgICAgICAg
ICAgIHZlcnNpb25fbmFtZT1faG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uX25hbWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgc3R5bGU9Y29uZmlndXJhdGlvbl90b191c2UsCisgICAgICAgICAgICAg
ICAgICAgIHNkaz1faG9zdC5wbGF0Zm9ybS5idWlsZF92ZXJzaW9uKCksCisgICAgICAgICAgICAg
ICAgKSwKKyAgICAgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhvcHRp
b25zPXNlbGYuX29wdGlvbnMpLAorICAgICAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVh
dGVfY29tbWl0KAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAor
ICAgICAgICAgICAgICAgICAgICBpZD1faG9zdC5zY20oKS5uYXRpdmVfcmV2aXNpb24oX3dlYmtp
dF9yb290KSwKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoPV9ob3N0LnNjbSgpLm5hdGl2ZV9i
cmFuY2goX3dlYmtpdF9yb290KSwKKyAgICAgICAgICAgICAgICApXSwKKyAgICAgICAgICAgICAg
ICBydW5fc3RhdHM9VXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisgICAgICAgICAgICAgICAgICAg
IHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgZW5kX3RpbWU9ZW5k
X3RpbWUsCisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9bGVuKHRlc3RfcnVubmVy
LnRlc3RzX3J1bikgLSBsZW4ocGFyYWxsZWxfdGVzdHMpIC0gbGVuKHNlcmlhbF90ZXN0cyksCisg
ICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICByZXN1bHRzPXJlc3VsdHMsCisgICAg
ICAgICAgICApCisgICAgICAgICAgICBmb3IgdXJsIGluIHNlbGYuX29wdGlvbnMucmVwb3J0X3Vy
bHM6CisgICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgnVXBsb2FkaW5n
IHRvIHt9IC4uLicuZm9ybWF0KHVybCkpCisgICAgICAgICAgICAgICAgZmFpbGVkX3VwbG9hZHMg
PSBmYWlsZWRfdXBsb2FkcyBpZiB1cGxvYWQudXBsb2FkKHVybCwgbG9nX2xpbmU9c2VsZi5wcmlu
dGVyLm1ldGVyLndyaXRlbG4pIGVsc2UgKGZhaWxlZF91cGxvYWRzICsgMSkKKyAgICAgICAgICAg
IHNlbGYucHJpbnRlci5tZXRlci53cml0ZWxuKCdVcGxvYWRzIGNvbXBsZXRlZCEnKQorCisgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMuY292ZXJhZ2U6CiAgICAgICAgICAgICBjb3YucmVwb3J0KHNo
b3dfbWlzc2luZz1GYWxzZSkKIAotICAgICAgICByZXR1cm4gbm90IHNlbGYucHJpbnRlci5udW1f
ZXJyb3JzIGFuZCBub3Qgc2VsZi5wcmludGVyLm51bV9mYWlsdXJlcworICAgICAgICByZXR1cm4g
bm90IHNlbGYucHJpbnRlci5udW1fZXJyb3JzIGFuZCBub3Qgc2VsZi5wcmludGVyLm51bV9mYWls
dXJlcyBhbmQgbm90IGZhaWxlZF91cGxvYWRzCiAKICAgICBkZWYgX2NoZWNrX2ltcG9ydHMoc2Vs
ZiwgbmFtZXMpOgogICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0L3J1bm5lci5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L3J1bm5lci5weQkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBjbGFzcyBSdW5uZXIob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJpbnRlciwg
bG9hZGVyKToKICAgICAgICAgc2VsZi5wcmludGVyID0gcHJpbnRlcgogICAgICAgICBzZWxmLmxv
YWRlciA9IGxvYWRlcgotICAgICAgICBzZWxmLnRlc3RzX3J1biA9IDAKKyAgICAgICAgc2VsZi50
ZXN0c19ydW4gPSBbXQogICAgICAgICBzZWxmLmVycm9ycyA9IFtdCiAgICAgICAgIHNlbGYuZmFp
bHVyZXMgPSBbXQogICAgICAgICBzZWxmLndvcmtlcl9mYWN0b3J5ID0gbGFtYmRhIGNhbGxlcjog
X1dvcmtlcihjYWxsZXIsIHNlbGYubG9hZGVyKQpAQCAtNjAsNyArNjAsNyBAQCBjbGFzcyBSdW5u
ZXIob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYucHJpbnRlci5wcmludF9zdGFydGVkX3Rlc3Qo
c291cmNlLCB0ZXN0X25hbWUpCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBzZWxmLnRl
c3RzX3J1biArPSAxCisgICAgICAgIHNlbGYudGVzdHNfcnVuLmFwcGVuZCh0ZXN0X25hbWUpCiAg
ICAgICAgIGlmIGZhaWx1cmVzOgogICAgICAgICAgICAgc2VsZi5mYWlsdXJlcy5hcHBlbmQoKHRl
c3RfbmFtZSwgZmFpbHVyZXMpKQogICAgICAgICBpZiBlcnJvcnM6CkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0Mjky
MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDYgQEAgY2xhc3MgUnVubmVyVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCd0ZXN0MyAoRm9vKScsICdF
JywgJ3Rlc3QzXG5lcnJlZCcpKQogICAgICAgICBydW5uZXIgPSBSdW5uZXIoUHJpbnRlcihzdHJl
YW0sIG9wdGlvbnMpLCBsb2FkZXIpCiAgICAgICAgIHJ1bm5lci5ydW4oWydGb28udGVzdDEnLCAn
Rm9vLnRlc3QyJywgJ0Zvby50ZXN0MyddLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1
bm5lci50ZXN0c19ydW4sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJ1bm5lci50
ZXN0c19ydW4pLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5uZXIuZmFpbHVy
ZXMpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5uZXIuZXJyb3JzKSwgMSkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkJ
KHJldmlzaW9uIDI0MjkyMikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9f
X2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw4IEBAIGNsYXNzIEF1dG9p
bnN0YWxsSW1wb3J0SG9vayhvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9weXRl
c3RfdGltZW91dCgpCiAgICAgICAgIGVsaWYgJy5weXRlc3QnIGluIGZ1bGxuYW1lOgogICAgICAg
ICAgICAgc2VsZi5faW5zdGFsbF9weXRlc3QoKQorICAgICAgICBlbGlmICcucmVxdWVzdHMnIGlu
IGZ1bGxuYW1lOgorICAgICAgICAgICAgc2VsZi5faW5zdGFsbF9yZXF1ZXN0cygpCiAKICAgICBk
ZWYgX2luc3RhbGxfbWVjaGFuaXplKHNlbGYpOgogICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRw
czovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvc291cmNlL20vbWVjaGFuaXplL21l
Y2hhbml6ZS0wLjIuNS50YXIuZ3oiLApAQCAtMTYxLDYgKzE2MywzNCBAQCBjbGFzcyBBdXRvaW5z
dGFsbEltcG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9m
aWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2EyL2VjLzQxNWQwY2NjYzFlZDQxY2Q3ZmRm
NjlhZDk4OWRhMTZhOGQxMzA1Nzk5NjM3MTAwNGNhYjRiYWZjNDhmMy9weXRlc3QtMy42LjIudGFy
Lmd6IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRlc3QtMy42LjIvc3JjL3B5
dGVzdC5weSIpCiAKKyAgICBkZWYgX2luc3RhbGxfcmVxdWVzdHMoc2VsZik6CisgICAgICAgIHJl
cXVlc3RfcGFja2FnZXMgPSBbCisgICAgICAgICAgICBkaWN0KAorICAgICAgICAgICAgICAgIHVy
bD0iaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzLzA2L2I4L2QxZWEzODUx
M2MyMmU4YzkwNjI3NWQxMzU4MThmZWUxNmFkODQ5NTk4NTk1NmE5YjdlMmJiMjE5NDJhMS9jZXJ0
aWZpLTIwMTkuMy45LnRhci5neiIsCisgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9ImNlcnRp
ZmktMjAxOS4zLjkvY2VydGlmaSIsCisgICAgICAgICAgICAgICAgdGFyZ2V0X25hbWU9ImNlcnRp
ZmkiLAorICAgICAgICAgICAgKSwgZGljdCgKKyAgICAgICAgICAgICAgICB1cmw9Imh0dHBzOi8v
ZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9mYy9iYi9hNTc2OGMyMzBmOWRkYjAzYWNj
OWVmM2YwZDRhM2NmOTM0NjI0NzM3OTVkMThlOTUzNTQ5OGM4ZjkyOWQvY2hhcmRldC0zLjAuNC50
YXIuZ3oiLAorICAgICAgICAgICAgICAgIHVybF9zdWJwYXRoPSJjaGFyZGV0LTMuMC40L2NoYXJk
ZXQiLAorICAgICAgICAgICAgICAgIHRhcmdldF9uYW1lPSJjaGFyZGV0IiwKKyAgICAgICAgICAg
ICksIGRpY3QoCisgICAgICAgICAgICAgICAgdXJsPSJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3Rl
ZC5vcmcvcGFja2FnZXMvYWQvMTMvZWI1Njk1MWI2Zjc5NTBjYWRiNTc5Y2ExNjZlNDQ4YmE3N2Y5
ZDI0ZWZjMDNlZGQ3ZTU1ZmE1N2QwNGI3L2lkbmEtMi44LnRhci5neiIsCisgICAgICAgICAgICAg
ICAgdXJsX3N1YnBhdGg9ImlkbmEtMi44L2lkbmEiLAorICAgICAgICAgICAgICAgIHRhcmdldF9u
YW1lPSdpZG5hJywKKyAgICAgICAgICAgICksIGRpY3QoCisgICAgICAgICAgICAgICAgdXJsPSJo
dHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvYjEvNTMvMzdkODJhYjM5MTM5
MzU2NWYyZjgzMWI4ZWVkYmZmZDU3ZGI1YTcxODIxNmY4MmYxYThiNGQzODFhMWMxL3VybGxpYjMt
MS4yNC4xLnRhci5neiIsCisgICAgICAgICAgICAgICAgdXJsX3N1YnBhdGg9InVybGxpYjMtMS4y
NC4xIiwKKyAgICAgICAgICAgICAgICB0YXJnZXRfbmFtZT0idXJsbGliMyIsCisgICAgICAgICAg
ICApLCBkaWN0KAorICAgICAgICAgICAgICAgIHVybD0iaHR0cHM6Ly9maWxlcy5weXRob25ob3N0
ZWQub3JnL3BhY2thZ2VzLzUyLzJjLzUxNGU0YWMyNWRhMmIwOGNhNWE0NjRjNTA0NjM2ODIxMjYz
ODVjNDI3MmMxODE5Mzg3NmU5MWY0YmMzOC9yZXF1ZXN0cy0yLjIxLjAudGFyLmd6IiwKKyAgICAg
ICAgICAgICAgICB1cmxfc3VicGF0aD0icmVxdWVzdHMtMi4yMS4wL3JlcXVlc3RzIiwKKyAgICAg
ICAgICAgICAgICB0YXJnZXRfbmFtZT0icmVxdWVzdHMiLAorICAgICAgICAgICAgKSwKKyAgICAg
ICAgXQorICAgICAgICBmb3IgcGFja2FnZSBpbiByZXF1ZXN0X3BhY2thZ2VzOgorICAgICAgICAg
ICAgaW5zdGFsbGVyID0gQXV0b0luc3RhbGxlcihwcmVwZW5kX3RvX3NlYXJjaF9wYXRoPVRydWUs
IHRhcmdldF9kaXI9c2VsZi5fZnMuam9pbihfQVVUT0lOU1RBTExFRF9ESVIsIHBhY2thZ2VbInRh
cmdldF9uYW1lIl0pKQorICAgICAgICAgICAgaW5zdGFsbGVyLmluc3RhbGwodXJsPXBhY2thZ2Vb
InVybCJdLCB1cmxfc3VicGF0aD1wYWNrYWdlWyJ1cmxfc3VicGF0aCJdKQorCiAgICAgZGVmIF9p
bnN0YWxsX3B5bGludChzZWxmKToKICAgICAgICAgc2VsZi5fZW5zdXJlX2F1dG9pbnN0YWxsZWRf
ZGlyX2lzX2luX3N5c19wYXRoKCkKICAgICAgICAgaWYgKG5vdCBzZWxmLl9mcy5leGlzdHMoc2Vs
Zi5fZnMuam9pbihfQVVUT0lOU1RBTExFRF9ESVIsICJweWxpbnQiKSkgb3IKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVlc191bml0
dGVzdC5weQkocmV2aXNpb24gMjQyOTIyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL3F1ZXVlc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMTgzLDEwICsx
ODMsMTAgQEAgY2xhc3MgUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0KENvbW1hbmRzVAogICAgICAg
ICBxdWV1ZS5fb3B0aW9ucyA9IE1vY2soKQogICAgICAgICBxdWV1ZS5fb3B0aW9ucy5wb3J0ID0g
Tm9uZQogICAgICAgICBwYXRjaCA9IHF1ZXVlLl90b29sLmJ1Z3MuZmV0Y2hfYXR0YWNobWVudCgx
MDAwMSkKLSAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICIiIk1PQ0sgYWRkX2F0dGFjaG1lbnRfdG9f
YnVnOiBidWdfaWQ9NTAwMDAsIGRlc2NyaXB0aW9uPUFyY2hpdmUgb2YgbGF5b3V0LXRlc3QtcmVz
dWx0cyBmcm9tIGJvdCBmb3IgbWFjLXNub3dsZW9wYXJkIGZpbGVuYW1lPWxheW91dC10ZXN0LXJl
c3VsdHMuemlwIG1pbWV0eXBlPU5vbmUKKyAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICIiIk1PQ0sg
YWRkX2F0dGFjaG1lbnRfdG9fYnVnOiBidWdfaWQ9NTAwMDAsIGRlc2NyaXB0aW9uPUFyY2hpdmUg
b2YgbGF5b3V0LXRlc3QtcmVzdWx0cyBmcm9tIGJvdCBmb3IgbWFjLWhpZ2hzaWVycmEgZmlsZW5h
bWU9bGF5b3V0LXRlc3QtcmVzdWx0cy56aXAgbWltZXR5cGU9Tm9uZQogLS0gQmVnaW4gY29tbWVu
dCAtLQogVGhlIGF0dGFjaGVkIHRlc3QgZmFpbHVyZXMgd2VyZSBzZWVuIHdoaWxlIHJ1bm5pbmcg
cnVuLXdlYmtpdC10ZXN0cyBvbiB0aGUgbW9jay1xdWV1ZS4KLVBvcnQ6IG1hYy1zbm93bGVvcGFy
ZCAgUGxhdGZvcm06IE1vY2tQbGF0Zm9ybSAxLjAKK1BvcnQ6IG1hYy1oaWdoc2llcnJhICBQbGF0
Zm9ybTogTW9ja1BsYXRmb3JtIDEuMAogLS0gRW5kIGNvbW1lbnQgLS0KICIiIgogICAgICAgICBP
dXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcXVldWUuX3VwbG9hZF9yZXN1bHRz
X2FyY2hpdmVfZm9yX3BhdGNoLCBbcGF0Y2gsIE1vY2soKV0sIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0
ZWRfbG9ncykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364810</attachid>
            <date>2019-03-15 10:46:08 -0700</date>
            <delta_ts>2019-03-15 11:10:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190315091629.patch</filename>
            <type>text/plain</type>
            <size>41485</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0Mjk5OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE5LTAzLTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6Cisg
ICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOiBBZGQgcmVxdWVzdHMg
YXV0by1pbnN0YWxsLgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxsX3Jl
cXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBs
b2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGlu
Zy4KKwogMjAxOS0wMy0xNCAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNv
bT4KIAogICAgICAgICBbV2luXVtNaW5Ccm93c2VyXVtXSzJdIEltcGxlbWVudCBjcmVhdGVOZXdQ
YWdlIG9mIFdLUGFnZVVJQ2xpZW50IHRvIG9wZW4gYSBuZXcgd2luZG93CkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5pdF9fLnB5CShub25leGlzdGVudCkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzIEBACisjIFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGly
ZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKKworIyBLZWVwIHRoaXMgZmlsZSBmcmVlIG9mIGFueSBj
b2RlIG9yIGltcG9ydCBzdGF0ZW1lbnRzIHRoYXQgY291bGQKKyMgY2F1c2UgZWl0aGVyIGFuIGVy
cm9yIHRvIG9jY3VyIG9yIGEgbG9nIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLgorIyBUaGlzIGVuc3Vy
ZXMgdGhhdCBjYWxsaW5nIGNvZGUgY2FuIGltcG9ydCBpbml0aWFsaXphdGlvbiBjb2RlIGZyb20K
KyMgd2Via2l0cHkgYmVmb3JlIGFueSBlcnJvcnMgb3IgbG9nIG1lc3NhZ2VzIGR1ZSB0byBjb2Rl
IGluIHRoaXMgZmlsZS4KKyMgSW5pdGlhbGl6YXRpb24gY29kZSBjYW4gaW5jbHVkZSB0aGluZ3Mg
bGlrZSB2ZXJzaW9uLWNoZWNraW5nIGNvZGUgYW5kCisjIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBj
b2RlLgorIworIyBXZSBkbyBub3QgZXhlY3V0ZSBhbnkgdmVyc2lvbi1jaGVja2luZyBjb2RlIG9y
IGxvZ2dpbmcgY29uZmlndXJhdGlvbgorIyBjb2RlIGluIHRoaXMgZmlsZSBzbyB0aGF0IGNhbGxl
cnMgY2FuIG9wdC1pbiBhcyB0aGV5IHdhbnQuICBUaGlzIGFsc28KKyMgYWxsb3dzIGRpZmZlcmVu
dCBjYWxsZXJzIHRvIGNob29zZSBkaWZmZXJlbnQgaW5pdGlhbGl6YXRpb24gY29kZSwKKyMgYXMg
bmVjZXNzYXJ5LgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlv
bnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3B0cGFyc2UKKworCitkZWYgdXBsb2FkX29w
dGlvbnMoKToKKyAgICByZXR1cm4gWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1y
ZXBvcnQnLCBhY3Rpb249J2FwcGVuZCcsIGRlc3Q9J3JlcG9ydF91cmxzJywgaGVscD0nVVJMIChv
ciBVUkxzKSB0byByZXBvcnQgdGVzdCByZXN1bHRzIHRvJyksCisgICAgICAgIG9wdHBhcnNlLm1h
a2Vfb3B0aW9uKCctLWJ1aWxkYm90LW1hc3RlcicsIGhlbHA9J1RoZSB1cmwgb2YgdGhlIGJ1aWxk
Ym90IG1hc3Rlci4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRlci1u
YW1lJywgaGVscD0nVGhlIG5hbWUgb2YgdGhlIGJ1aWxkYm90IGJ1aWxkZXIgdGVzdHMgd2VyZSBy
dW4gb24uJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkLW51bWJlcics
IGhlbHA9J1RoZSBidWlsZGJvdCBidWlsZCBudW1iZXIgdGVzdHMgYXJlIGFzc29jaWF0ZWQgd2l0
aC4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRib3Qtd29ya2VyJywg
aGVscD0nVGhlIGJ1aWxkYm90IHdvcmtlciB0ZXN0cyB3ZXJlIHJ1biBvbi4nKSwKKyAgICBdCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE4OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMg
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
IyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnJlcXVlc3Rz
CisKK2ltcG9ydCBqc29uCitpbXBvcnQgcmVxdWVzdHMKK2ltcG9ydCBzeXMKKworaW1wb3J0IHBs
YXRmb3JtIGFzIHBsYXRmb3JtXworCisKK2NsYXNzIFVwbG9hZChvYmplY3QpOgorICAgIFVQTE9B
RF9FTkRQT0lOVCA9ICcvYXBpL3VwbG9hZCcKKyAgICBCVUlMREJPVF9ERVRBSUxTID0gWydidWls
ZGJvdC1tYXN0ZXInLCAnYnVpbGRlci1uYW1lJywgJ2J1aWxkLW51bWJlcicsICdidWlsZGJvdC13
b3JrZXInXQorICAgIFZFUlNJT04gPSAwCisKKyAgICBjbGFzcyBFeHBlY3RhdGlvbnM6CisgICAg
ICAgICMgVGhlc2UgYXJlIG9yZGVyZWQgYnkgcHJpb3JpdHksIG1lYW5pbmcgdGhhdCBhIHRlc3Qg
d2hpY2ggYm90aCBjcmFzaGVzIGFuZCBoYXMKKyAgICAgICAgIyBhIHdhcm5pbmcgc2hvdWxkIGJl
IGNvbnNpZGVyZWQgdG8gaGF2ZSBjcmFzaGVkLgorICAgICAgICBPUkRFUiA9IFsKKyAgICAgICAg
ICAgICdDUkFTSCcsCisgICAgICAgICAgICAnVElNRU9VVCcsCisgICAgICAgICAgICAnSU1BR0Un
LCAgICMgSW1hZ2UtZGlmZgorICAgICAgICAgICAgJ0FVRElPJywgICAjIEF1ZGlvLWRpZmYKKyAg
ICAgICAgICAgICdURVhUJywgICAgIyBUZXh0LWRpZmYKKyAgICAgICAgICAgICdGQUlMJywKKyAg
ICAgICAgICAgICdFUlJPUicsCisgICAgICAgICAgICAnV0FSTklORycsCisgICAgICAgICAgICAn
UEFTUycsCisgICAgICAgIF0KKyAgICAgICAgQ1JBU0gsIFRJTUVPVVQsIElNQUdFLCBBVURJTywg
VEVYVCwgRkFJTCwgRVJST1IsIFdBUk5JTkcsIFBBU1MgPSBPUkRFUgorCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBjcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgIHBsYXRmb3Jt
PU5vbmUsCisgICAgICAgICAgICBpc19zaW11bGF0b3I9RmFsc2UsCisgICAgICAgICAgICB2ZXJz
aW9uPU5vbmUsCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9Tm9uZSwKKyAgICAgICAgICAgIHZl
cnNpb25fbmFtZT1Ob25lLAorICAgICAgICAgICAgbW9kZWw9Tm9uZSwKKyAgICAgICAgICAgIHN0
eWxlPU5vbmUsICAgIyBEZWJ1Zy9Qcm9kdWN0aW9uL1JlbGVhc2UKKyAgICAgICAgICAgIGZsYXZv
cj1Ob25lLCAgIyBEdW1waW5nIGdyb3VuZCBzdWl0ZS13aWRlIGNvbmZpZ3VyYXRpb24gY2hhbmdl
cyAoaWUsIEd1YXJkTWFsbG9jKQorICAgICAgICAgICAgc2RrPU5vbmUsCisgICAgICAgICk6CisK
KyAgICAgICAgIyBUaGlzIGRldmlhdGVzIHNsaWdodGx5IGZyb20gdGhlIHJlc3Qgb2Ygd2Via2l0
cHksIGJ1dCBpdCBhbGxvd3MgdGhpcyBmaWxlIHRvIGJlIGVudGlyZWx5IHBvcnRhYmxlLgorICAg
ICAgICBjb25maWcgPSBkaWN0KAorICAgICAgICAgICAgcGxhdGZvcm09cGxhdGZvcm0gb3IgKHBs
YXRmb3JtXy5zeXN0ZW0oKSBpZiBwbGF0Zm9ybV8uc3lzdGVtKCkgIT0gJ0RhcndpbicgZWxzZSAn
bWFjJykubG93ZXIoKSwKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1pc19zaW11bGF0b3IsCisg
ICAgICAgICAgICB2ZXJzaW9uPXZlcnNpb24gb3IgKHBsYXRmb3JtXy5yZWxlYXNlKCkgaWYgcGxh
dGZvcm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVsc2UgcGxhdGZvcm1fLm1hY192ZXIoKVswXSks
CisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlIG9yIHBsYXRmb3JtXy5tYWNo
aW5lKCksCisgICAgICAgICkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gY29uZmlnLml0ZXJp
dGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24n
LmZvcm1hdChrZXkpKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KHZlcnNpb25fbmFt
ZT12ZXJzaW9uX25hbWUsIG1vZGVsPW1vZGVsLCBzdHlsZT1zdHlsZSwgZmxhdm9yPWZsYXZvciwg
c2RrPXNkaykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgICAgICBjb25maWdba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiBjb25m
aWcKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2NvbW1pdChyZXBvc2l0b3J5
X2lkPU5vbmUsIGlkPU5vbmUsIGJyYW5jaD1Ob25lKToKKyAgICAgICAgY29tbWl0ID0gZGljdChy
ZXBvc2l0b3J5X2lkPXJlcG9zaXRvcnlfaWQsIGlkPWlkKQorICAgICAgICBmb3Iga2V5LCB2YWx1
ZSBpbiBjb21taXQuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgor
ICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IG11c3QgYmUgZGVmaW5lZCBpbiBh
IGNvbW1pdCcuZm9ybWF0KGtleSkpCisgICAgICAgIGlmIGJyYW5jaDoKKyAgICAgICAgICAgIGNv
bW1pdFsnYnJhbmNoJ10gPSBicmFuY2gKKyAgICAgICAgcmV0dXJuIGNvbW1pdAorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfZGV0YWlscyhsaW5rPU5vbmUsIG9wdGlvbnM9Tm9u
ZSwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCoqa3dhcmdzKQorICAgICAgICBp
ZiBsaW5rOgorICAgICAgICAgICAgcmVzdWx0WydsaW5rJ10gPSBsaW5rCisKKyAgICAgICAgaWYg
b3B0aW9uczoKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIFVwbG9hZC5CVUlMREJPVF9ERVRB
SUxTOgorICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihvcHRpb25zLCBlbGVtZW50LnJl
cGxhY2UoJy0nLCAnXycpLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbZWxlbWVudF0gPSB2YWx1ZQorICAgICAg
ICByZXR1cm4gcmVzdWx0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9ydW5f
c3RhdHMoc3RhcnRfdGltZT1Ob25lLCBlbmRfdGltZT1Ob25lLCB0ZXN0c19za2lwcGVkPU5vbmUs
ICoqa3dhcmdzKToKKyAgICAgICAgc3RhdHMgPSBkaWN0KCoqa3dhcmdzKQorICAgICAgICBmb3Ig
a2V5LCB2YWx1ZSBpbiBkaWN0KHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwgZW5kX3RpbWU9ZW5kX3Rp
bWUsIHRlc3RzX3NraXBwZWQ9dGVzdHNfc2tpcHBlZCkuaXRlcml0ZW1zKCk6CisgICAgICAgICAg
ICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzdGF0c1trZXldID0gdmFs
dWUKKyAgICAgICAgcmV0dXJuIHN0YXRzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNy
ZWF0ZV90ZXN0X3Jlc3VsdChleHBlY3RlZD1Ob25lLCBhY3R1YWw9Tm9uZSwgbG9nPU5vbmUsICoq
a3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgqKmt3YXJncykKKworICAgICAgICAjIFRl
c3RzIHdoaWNoIGRvbid0IGRlY2xhcmUgZXhwZWN0YXRpb25zIG9yIHJlc3VsdHMgYXJlIGFzc3Vt
ZWQgdG8gaGF2ZSBwYXNzZWQuCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRpY3QoZXhwZWN0
ZWQ9ZXhwZWN0ZWQsIGFjdHVhbD1hY3R1YWwsIGxvZz1sb2cpLml0ZXJpdGVtcygpOgorICAgICAg
ICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0g
PSB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
c3VpdGU9Tm9uZSwgY29uZmlndXJhdGlvbj1Ob25lLCBjb21taXRzPVtdLCB0aW1lc3RhbXA9Tm9u
ZSwgZGV0YWlscz1Ob25lLCBydW5fc3RhdHM9Tm9uZSwgcmVzdWx0cz17fSk6CisgICAgICAgIHNl
bGYuc3VpdGUgPSBzdWl0ZQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0
aW9uCisgICAgICAgIHNlbGYuY29tbWl0cyA9IGNvbW1pdHMKKyAgICAgICAgc2VsZi50aW1lc3Rh
bXAgPSB0aW1lc3RhbXAKKyAgICAgICAgc2VsZi5kZXRhaWxzID0gZGV0YWlscworICAgICAgICBz
ZWxmLnJ1bl9zdGF0cyA9IHJ1bl9zdGF0cworICAgICAgICBzZWxmLnJlc3VsdHMgPSByZXN1bHRz
CisKKyAgICBjbGFzcyBFbmNvZGVyKGpzb24uSlNPTkVuY29kZXIpOgorCisgICAgICAgIGRlZiBk
ZWZhdWx0KHNlbGYsIG9iaik6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgVXBsb2Fk
KToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb2JqLnN1aXRlOgorICAgICAgICAgICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCdObyBzdWl0ZSBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxvYWQn
KQorICAgICAgICAgICAgICAgIGlmIG5vdCBvYmouY29tbWl0czoKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignTm8gY29tbWl0cyBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxv
YWQnKQorCisgICAgICAgICAgICAgICAgZGV0YWlscyA9IG9iai5kZXRhaWxzIG9yIG9iai5jcmVh
dGVfZGV0YWlscygpCisgICAgICAgICAgICAgICAgYnVpbGRib3RfYXJncyA9IFtkZXRhaWxzLmdl
dChhcmcsIE5vbmUpIGlzIE5vbmUgZm9yIGFyZyBpbiBvYmouQlVJTERCT1RfREVUQUlMU10KKyAg
ICAgICAgICAgICAgICBpZiBhbnkoYnVpbGRib3RfYXJncykgYW5kIG5vdCBhbGwoYnVpbGRib3Rf
YXJncyk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0FsbCBidWlsZGJv
dCBkZXRhaWxzIG11c3QgYmUgZGVmaW5lZCBmb3IgdXBsb2FkJykKKworICAgICAgICAgICAgICAg
IGRlZiB1bnBhY2tfdGVzdChjdXJyZW50LCBwYXRoX3RvX3Rlc3QsIGRhdGEpOgorICAgICAgICAg
ICAgICAgICAgICBpZiBsZW4ocGF0aF90b190ZXN0KSA9PSAxOgorICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1dID0gZGF0YQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjdXJyZW50LmdldChwYXRo
X3RvX3Rlc3RbMF0pOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFtwYXRoX3RvX3Rl
c3RbMF1dID0ge30KKyAgICAgICAgICAgICAgICAgICAgdW5wYWNrX3Rlc3QoY3VycmVudFtwYXRo
X3RvX3Rlc3RbMF1dLCBwYXRoX3RvX3Rlc3RbMTpdLCBkYXRhKQorCisgICAgICAgICAgICAgICAg
cmVzdWx0cyA9IHt9CisgICAgICAgICAgICAgICAgZm9yIHRlc3QsIGRhdGEgaW4gb2JqLnJlc3Vs
dHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHVucGFja190ZXN0KHJlc3VsdHMs
IHRlc3Quc3BsaXQoJy8nKSwgZGF0YSkKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRpY3Qo
CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb249b2JqLlZFUlNJT04sCisgICAgICAgICAgICAg
ICAgICAgIHN1aXRlPW9iai5zdWl0ZSwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlv
bj1vYmouY29uZmlndXJhdGlvbiBvciBvYmouY3JlYXRlX2NvbmZpZ3VyYXRpb24oKSwKKyAgICAg
ICAgICAgICAgICAgICAgY29tbWl0cz1vYmouY29tbWl0cywKKyAgICAgICAgICAgICAgICAgICAg
dGVzdF9yZXN1bHRzPWRpY3QoCisgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzPWRldGFp
bHMsCisgICAgICAgICAgICAgICAgICAgICAgICBydW5fc3RhdHM9b2JqLnJ1bl9zdGF0cyBvciBv
YmouY3JlYXRlX3J1bl9zdGF0cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cz1y
ZXN1bHRzLAorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICkKKyAgICAg
ICAgICAgICAgICBpZiBvYmoudGltZXN0YW1wOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRb
J3RpbWVzdGFtcCddID0gb2JqLnRpbWVzdGFtcAorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihVcGxvYWQuRW5jb2Rlciwgc2VsZikuZGVmYXVs
dChvYmopCisKKyAgICBkZWYgdXBsb2FkKHNlbGYsIHVybCwgbG9nX2xpbmU9bGFtYmRhIHZhbDog
c3lzLnN0ZG91dC53cml0ZSh2YWwgKyAnXG4nKSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHJlc3BvbnNlID0gcmVxdWVzdHMucG9zdCh1cmwgKyBzZWxmLlVQTE9BRF9FTkRQT0lOVCwgZGF0
YT1qc29uLmR1bXBzKHNlbGYsIGNscz1VcGxvYWQuRW5jb2RlcikpCisgICAgICAgIGV4Y2VwdCBy
ZXF1ZXN0cy5leGNlcHRpb25zLkNvbm5lY3Rpb25FcnJvcjoKKyAgICAgICAgICAgIGxvZ19saW5l
KCcgJyAqIDQgKyAnRmFpbGVkIHRvIHVwbG9hZCB0byB7fSwgcmVzdWx0cyBzZXJ2ZXIgbm90IG9u
bGluZScuZm9ybWF0KHVybCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGxvZ19saW5lKCcgJyAqIDQgKyAnRmFp
bGVkIHRvIGVuY29kZSB1cGxvYWQgZGF0YToge30nLmZvcm1hdChlKSkKKyAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAg
ICAgICAgICAgIGxvZ19saW5lKCcgJyAqIDQgKyAnRXJyb3IgdXBsb2FkaW5nIHRvIHt9OicuZm9y
bWF0KHVybCkpCisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA4ICsgcmVzcG9uc2UuanNvbigp
WydkZXNjcmlwdGlvbiddKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgbG9n
X2xpbmUoJyAnICogNCArICdVcGxvYWRlZCByZXN1bHRzIHRvIHt9Jy5mb3JtYXQodXJsKSkKKyAg
ICAgICAgcmV0dXJuIFRydWUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91
cGxvYWRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9y
ZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjE1IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2lt
cG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQucmVxdWVzdHMKKworaW1wb3J0
IGNvbGxlY3Rpb25zCitpbXBvcnQganNvbgoraW1wb3J0IG1vY2sKK2ltcG9ydCByZXF1ZXN0cwor
aW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LnJlc3VsdHMudXBs
b2FkIGltcG9ydCBVcGxvYWQKKworCitjbGFzcyBVcGxvYWRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKKworICAgIGNsYXNzIE9wdGlvbnMob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNl
bGYsICoqa3dhcmdzKToKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGt3YXJncy5pdGVy
aXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsdWUpCisKKyAg
ICBjbGFzcyBNb2NrUmVzcG9uc2Uob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHN0YXR1c19jb2RlPTIwMCwgdGV4dD0nJyk6CisgICAgICAgICAgICBzZWxmLnN0YXR1c19jb2Rl
ID0gc3RhdHVzX2NvZGUKKyAgICAgICAgICAgIHNlbGYudGV4dCA9IHRleHQKKworICAgICAgICBk
ZWYganNvbihzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHNlbGYudGV4dCkK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbm9ybWFsaXplKGRhdGEpOgorICAgICAgICBp
ZiBpc2luc3RhbmNlKGRhdGEsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmV0dXJuIHN0cihk
YXRhKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YSwgY29sbGVjdGlvbnMuTWFwcGluZyk6
CisgICAgICAgICAgICByZXR1cm4gZGljdChtYXAoVXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEu
aXRlcml0ZW1zKCkpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YSwgY29sbGVjdGlvbnMu
SXRlcmFibGUpOgorICAgICAgICAgICAgcmV0dXJuIHR5cGUoZGF0YSkobWFwKFVwbG9hZFRlc3Qu
bm9ybWFsaXplLCBkYXRhKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBkYXRh
CisKKyAgICBkZWYgdGVzdF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc3RhcnRfdGltZSwgZW5k
X3RpbWUgPSB0aW1lLnRpbWUoKSAtIDMsIHRpbWUudGltZSgpCisgICAgICAgIHVwbG9hZCA9IFVw
bG9hZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBj
b25maWd1cmF0aW9uPVVwbG9hZC5jcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgICAg
ICBwbGF0Zm9ybT0nbWFjJywKKyAgICAgICAgICAgICAgICB2ZXJzaW9uPScxMC4xMy4wJywKKyAg
ICAgICAgICAgICAgICB2ZXJzaW9uX25hbWU9J0hpZ2ggU2llcnJhJywKKyAgICAgICAgICAgICAg
ICBhcmNoaXRlY3R1cmU9J3g4Nl82NCcsCisgICAgICAgICAgICAgICAgc2RrPScxN0E0MDUnLAor
ICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRhaWxz
KGxpbms9J2h0dHBzOi8vd2Via2l0Lm9yZycpLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2Fk
LmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywK
KyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycs
CisgICAgICAgICAgICApXSwKKyAgICAgICAgICAgIHJ1bl9zdGF0cz1VcGxvYWQuY3JlYXRlX3J1
bl9zdGF0cygKKyAgICAgICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAgICAg
ICAgICAgICAgZW5kX3RpbWU9ZW5kX3RpbWUsCisgICAgICAgICAgICAgICAgdGVzdHNfc2tpcHBl
ZD0wLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIHJlc3VsdHM9eworICAgICAgICAgICAg
ICAgICd3ZWJraXRweS50ZXN0MSc6IHt9LAorICAgICAgICAgICAgICAgICd3ZWJraXRweS50ZXN0
Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoZXhwZWN0ZWQ9VXBsb2FkLkV4cGVjdGF0aW9u
cy5QQVNTLCBhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAgICAgICAgICAgIH0s
CisgICAgICAgICkKKyAgICAgICAgZ2VuZXJhdGVkX2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29u
LmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpKSkKKworICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd2ZXJzaW9uJ10sIDApCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3N1aXRlJ10sICd3ZWJraXRweS10ZXN0
cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ2NvbmZpZ3VyYXRp
b24nXSwgc2VsZi5ub3JtYWxpemUoZGljdCgKKyAgICAgICAgICAgIHBsYXRmb3JtPSdtYWMnLAor
ICAgICAgICAgICAgaXNfc2ltdWxhdG9yPUZhbHNlLAorICAgICAgICAgICAgdmVyc2lvbj0nMTAu
MTMuMCcsCisgICAgICAgICAgICB2ZXJzaW9uX25hbWU9J0hpZ2ggU2llcnJhJywKKyAgICAgICAg
ICAgIGFyY2hpdGVjdHVyZT0neDg2XzY0JywKKyAgICAgICAgICAgIHNkaz0nMTdBNDA1JywKKyAg
ICAgICAgKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ2NvbW1p
dHMnXSwgW2RpY3QoCisgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAg
ICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICldKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsn
ZGV0YWlscyddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KGxpbms9J2h0dHBzOi8vd2Via2l0Lm9yZycp
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRz
J11bJ3J1bl9zdGF0cyddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KAorICAgICAgICAgICAgc3RhcnRf
dGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgZW5kX3RpbWU9ZW5kX3RpbWUsCisgICAgICAg
ICAgICB0ZXN0c19za2lwcGVkPTAsCisgICAgICAgICkpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncmVzdWx0cyddLCBzZWxmLm5vcm1h
bGl6ZSh7CisgICAgICAgICAgICAnd2Via2l0cHkudGVzdDEnOiB7fSwKKyAgICAgICAgICAgICd3
ZWJraXRweS50ZXN0Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoZXhwZWN0ZWQ9VXBsb2Fk
LkV4cGVjdGF0aW9ucy5QQVNTLCBhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAg
ICAgICAgfSkpCisKKyAgICBkZWYgdGVzdF91cGxvYWQoc2VsZik6CisgICAgICAgIHVwbG9hZCA9
IFVwbG9hZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAg
ICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0
b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAg
ICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICApCisKKyAgICAgICAg
d2l0aCBtb2NrLnBhdGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PWxhbWJkYSB1cmwsIGRhdGE6IHNl
bGYuTW9ja1Jlc3BvbnNlKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVwbG9hZC51
cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1bHRzJywgbG9nX2xpbmU9bGFtYmRhIF86IE5v
bmUpKQorCisgICAgICAgIGRlZiByYWlzZV9leGNlcHRpb24odXJsLCBkYXRhKToKKyAgICAgICAg
ICAgIHJhaXNlIHJlcXVlc3RzLmV4Y2VwdGlvbnMuQ29ubmVjdGlvbkVycm9yKCkKKworICAgICAg
ICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBuZXc9cmFpc2VfZXhjZXB0aW9uKToK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJr
aXQub3JnL3Jlc3VsdHMnLCBsb2dfbGluZT1sYW1iZGEgXzogTm9uZSkpCisKKyAgICAgICAgd2l0
aCBtb2NrLnBhdGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PWxhbWJkYSB1cmwsIGRhdGE6IHNlbGYu
TW9ja1Jlc3BvbnNlKAorICAgICAgICAgICAgc3RhdHVzX2NvZGU9NDA0LAorICAgICAgICAgICAg
dGV4dD1qc29uLmR1bXBzKGRpY3QoZGVzY3JpcHRpb249J05vIHN1Y2ggYWRkcmVzcycpKSwKKyAg
ICAgICAgKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHVwbG9hZC51cGxvYWQoJ2h0
dHBzOi8vd2Via2l0Lm9yZy9yZXN1bHRzJywgbG9nX2xpbmU9bGFtYmRhIF86IE5vbmUpKQorCisg
ICAgZGVmIHRlc3RfcGFja2VkX3Rlc3Qoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgK
KyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb21taXRz
PVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3
ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9
J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgcmVzdWx0cz17CisgICAgICAg
ICAgICAgICAgJ2RpcjEvc3ViLWRpcjEvdGVzdDEnOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0
KGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICAgICAgICAgICdkaXIx
L3N1Yi1kaXIxL3Rlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2Fk
LkV4cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMi90
ZXN0Myc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIxL3N1Yi1kaXIyL3Rlc3Q0Jzoge30sCisg
ICAgICAgICAgICAgICAgJ2RpcjIvc3ViLWRpcjMvdGVzdDUnOiB7fSwKKyAgICAgICAgICAgICAg
ICAnZGlyMi90ZXN0Nic6IHt9LAorICAgICAgICAgICAgfQorICAgICAgICApCisgICAgICAgIGdl
bmVyYXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9h
ZCwgY2xzPVVwbG9hZC5FbmNvZGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJh
dGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydyZXN1bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAg
ICAgICAgICAgICdkaXIxJzogeworICAgICAgICAgICAgICAgICdzdWItZGlyMSc6IHsKKyAgICAg
ICAgICAgICAgICAgICAgJ3Rlc3QxJzogeydhY3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLkZB
SUx9LAorICAgICAgICAgICAgICAgICAgICAndGVzdDInOiB7J2FjdHVhbCc6IFVwbG9hZC5FeHBl
Y3RhdGlvbnMuVElNRU9VVH0sCisgICAgICAgICAgICAgICAgfSwgJ3N1Yi1kaXIyJzogeworICAg
ICAgICAgICAgICAgICAgICAndGVzdDMnOiB7fSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3Q0
Jzoge30sCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgJ2RpcjInOiB7CisgICAg
ICAgICAgICAgICAgJ3N1Yi1kaXIzJzogeyd0ZXN0NSc6IHt9fSwKKyAgICAgICAgICAgICAgICAn
dGVzdDYnOiB7fSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0pKQorCisgICAgZGVmIHRlc3Rf
bm9fc3VpdGUoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIGNv
bW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlf
aWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJy
YW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICkKKyAgICAgICAgd2l0aCBz
ZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBs
b2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICBkZWYgdGVzdF9ub19jb21taXRzKHNlbGYp
OgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHkt
dGVzdHMnLAorICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVF
cnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVy
KQorCisgICAgZGVmIHRlc3RfYnVpbGRib3Qoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9h
ZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb21t
aXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lk
PSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFu
Y2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgZGV0YWlscz1VcGxvYWQu
Y3JlYXRlX2RldGFpbHMob3B0aW9ucz1zZWxmLk9wdGlvbnMoCisgICAgICAgICAgICAgICAgYnVp
bGRib3RfbWFzdGVyPSd3ZWJraXQub3JnJywKKyAgICAgICAgICAgICAgICBidWlsZGVyX25hbWU9
J1F1ZXVlLTEnLAorICAgICAgICAgICAgICAgIGJ1aWxkX251bWJlcj0xLAorICAgICAgICApKSkK
KyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAg
IGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICAgICAgdXBsb2Fk
LmRldGFpbHNbJ2J1aWxkYm90LXdvcmtlciddID0gJ2JvdDEyMycKKyAgICAgICAgZ2VuZXJhdGVk
X2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29uLmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9
VXBsb2FkLkVuY29kZXIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGlj
dFsndGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAg
ICAgJ2J1aWxkYm90LW1hc3Rlcic6ICd3ZWJraXQub3JnJywKKyAgICAgICAgICAgICdidWlsZGVy
LW5hbWUnOiAnUXVldWUtMScsCisgICAgICAgICAgICAnYnVpbGQtbnVtYmVyJzogMSwKKyAgICAg
ICAgICAgICdidWlsZGJvdC13b3JrZXInOiAnYm90MTIzJywKKyAgICAgICAgfSkpCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkJ
KHJldmlzaW9uIDI0Mjk5OSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9naXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw2ICsyOTAsMTQgQEAgY2xhc3Mg
R2l0KFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVmIG5hdGl2ZV9yZXZpc2lvbihzZWxmLCBw
YXRoKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWyctQycsIHNlbGYuZmluZF9jaGVj
a291dF9yb290KHBhdGgpLCAnbG9nJywgJy0xJywgJy0tcHJldHR5PWZvcm1hdDolSCddKQogCisg
ICAgZGVmIG5hdGl2ZV9icmFuY2goc2VsZiwgcGF0aCk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYu
X3J1bl9naXQoWyctQycsIHNlbGYuZmluZF9jaGVja291dF9yb290KHBhdGgpLCAncmV2LXBhcnNl
JywgJy0tYWJicmV2LXJlZicsICdIRUFEJ10pLnJzdHJpcCgpCisKKyAgICAgICAgIyBGb3IgZ2l0
LXN2bgorICAgICAgICBpZiByZXN1bHQuc3RhcnRzd2l0aCgnaGVhZHMnKToKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHRbNjpdCisgICAgICAgIHJldHVybiByZXN1bHQKKwogICAgIGRlZiBzdm5f
dXJsKHNlbGYpOgogICAgICAgICBnaXRfY29tbWFuZCA9IFsnc3ZuJywgJ2luZm8nXQogICAgICAg
ICBzdGF0dXMgPSBzZWxmLl9ydW5fZ2l0KGdpdF9jb21tYW5kKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weQko
cmV2aXNpb24gMjQyOTk5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvc2NtL3NjbV9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw5IEBAIGNsYXNz
IE1vY2tTQ00ob2JqZWN0KToKICAgICBkZWYgbmF0aXZlX3JldmlzaW9uKHNlbGYsIHBhdGgpOgog
ICAgICAgICByZXR1cm4gc2VsZi5zdm5fcmV2aXNpb24ocGF0aCkKIAorICAgIGRlZiBuYXRpdmVf
YnJhbmNoKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gJ3RydW5rJworCiAgICAgZGVmIHRp
bWVzdGFtcF9vZl9yZXZpc2lvbihzZWxmLCBwYXRoLCByZXZpc2lvbik6CiAgICAgICAgIHJldHVy
biAnMjAxMy0wMi0wMSAwODo0ODowNSArMDAwMCcKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5
CShyZXZpc2lvbiAyNDI5OTkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC05MDksNiArOTA5LDkg
QEAgRU5ECiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20uaGVhZF9zdm5fcmV2aXNp
b24oKSwgc2VsZi5zY20ubmF0aXZlX3JldmlzaW9uKCcuJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VsZi5zY20ubmF0aXZlX3JldmlzaW9uKCcuJyksICc1JykKIAorICAgIGRlZiB0ZXN0
X25hdGl2ZV9icmFuY2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20u
bmF0aXZlX2JyYW5jaCgnLicpLCAndHJ1bmsnKQorCiAgICAgZGVmIHRlc3RfcHJvcHNldF9wcm9w
Z2V0KHNlbGYpOgogICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnN2bl9jaGVj
a291dF9wYXRoLCAidGVzdF9maWxlIikKICAgICAgICAgZXhwZWN0ZWRfbWltZV90eXBlID0gIngt
YXBwbGljYXRpb24vZm9vLWJhciIKQEAgLTExMTIsNiArMTExNSwxMCBAQCBjbGFzcyBHaXRUZXN0
KFNDTVRlc3QpOgogICAgICAgICBjb21tYW5kID0gWydnaXQnLCAnLUMnLCBzY20uY2hlY2tvdXRf
cm9vdCwgJ3Jldi1wYXJzZScsICdIRUFEJ10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY20u
bmF0aXZlX3JldmlzaW9uKHNjbS5jaGVja291dF9yb290KSwgcnVuX2NvbW1hbmQoY29tbWFuZCku
c3RyaXAoKSkKIAorICAgIGRlZiB0ZXN0X25hdGl2ZV9icmFuY2goc2VsZik6CisgICAgICAgIHNj
bSA9IHNlbGYudHJhY2tpbmdfc2NtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ21hc3Rlcics
IHNjbS5uYXRpdmVfYnJhbmNoKHNjbS5jaGVja291dF9yb290KSkKKwogICAgIGRlZiB0ZXN0X3Jl
bmFtZV9maWxlcyhzZWxmKToKICAgICAgICAgc2NtID0gc2VsZi50cmFja2luZ19zY20KIApAQCAt
MTYyNyw2ICsxNjM0LDkgQEAgY2xhc3MgR2l0U1ZOVGVzdChTQ01UZXN0KToKICAgICAgICAgY29t
bWFuZCA9IFsnZ2l0JywgJy1DJywgc2VsZi5naXRfY2hlY2tvdXRfcGF0aCwgJ3Jldi1wYXJzZScs
ICdIRUFEJ10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfcmV2aXNp
b24oc2VsZi5naXRfY2hlY2tvdXRfcGF0aCksIHJ1bl9jb21tYW5kKGNvbW1hbmQpLnN0cmlwKCkp
CiAKKyAgICBkZWYgdGVzdF9uYXRpdmVfYnJhbmNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCd0cnVuaycsIHNlbGYuc2NtLm5hdGl2ZV9icmFuY2goc2VsZi5naXRfY2hlY2tvdXRf
cGF0aCkpCisKICAgICBkZWYgdGVzdF90b19vYmplY3RfbmFtZShzZWxmKToKICAgICAgICAgcmVs
cGF0aCA9ICd0ZXN0X2ZpbGVfY29tbWl0MScKICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLnJl
YWxwYXRoKG9zLnBhdGguam9pbihzZWxmLmdpdF9jaGVja291dF9wYXRoLCByZWxwYXRoKSkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2
bi5weQkocmV2aXNpb24gMjQyOTk5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y2hlY2tvdXQvc2NtL3N2bi5weQkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBjbGFz
cyBTVk4oU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICAgICAgU0NNLl9faW5pdF9fKHNlbGYsIGN3
ZCwgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX2JvZ3VzX2RpciA9IE5vbmUKICAgICAgICAgaWYg
cGF0Y2hfZGlyZWN0b3JpZXMgPT0gW106Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24obWVz
c2FnZT0nRW1wdHkgbGlzdCBvZiBwYXRjaCBkaXJlY3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5p
dF9fJykKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRW1wdHkgbGlzdCBvZiBwYXRjaCBk
aXJlY3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5pdF9fJykKICAgICAgICAgZWxpZiBwYXRjaF9k
aXJlY3RvcmllcyA9PSBOb25lOgogICAgICAgICAgICAgc2VsZi5fcGF0Y2hfZGlyZWN0b3JpZXMg
PSBbc2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRoKGN3ZCwgc2VsZi5jaGVja291dF9yb290KV0KICAg
ICAgICAgZWxzZToKQEAgLTI3OCw2ICsyNzgsMTQgQEAgY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3Np
dG9yeSk6CiAgICAgZGVmIG5hdGl2ZV9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgcmV0
dXJuIHNlbGYuc3ZuX3JldmlzaW9uKHBhdGgpCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxm
LCBwYXRoKToKKyAgICAgICAgcmVsYXRpdmVfdXJsID0gc2VsZi52YWx1ZV9mcm9tX3N2bl9pbmZv
KHBhdGgsICdSZWxhdGl2ZSBVUkwnKVsyOl0KKyAgICAgICAgaWYgcmVsYXRpdmVfdXJsLnN0YXJ0
c3dpdGgoJ3RydW5rJyk6CisgICAgICAgICAgICByZXR1cm4gJ3RydW5rJworICAgICAgICBlbGlm
IHJlbGF0aXZlX3VybC5zdGFydHN3aXRoKCdicmFuY2gnKToKKyAgICAgICAgICAgIHJldHVybiBy
ZWxhdGl2ZV91cmwuc3BsaXQoJy8nKVsxXQorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3t9IGlz
IG5vdCBhIGJyYW5jaCcuZm9ybWF0KHJlbGF0aXZlX3VybC5zcGxpdCgnLycpWzBdKSkKKwogICAg
IGRlZiB0aW1lc3RhbXBfb2ZfcmV2aXNpb24oc2VsZiwgcGF0aCwgcmV2aXNpb24pOgogICAgICAg
ICAjIFdlIHVzZSAtLXhtbCB0byBnZXQgdGltZXN0YW1wcyBsaWtlIDIwMTMtMDItMDhUMDg6MTg6
MDQuOTY0NDA5WgogICAgICAgICByZXBvc2l0b3J5X3Jvb3QgPSBzZWxmLnZhbHVlX2Zyb21fc3Zu
X2luZm8oc2VsZi5jaGVja291dF9yb290LCAnUmVwb3NpdG9yeSBSb290JykKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5w
eQkocmV2aXNpb24gMjQyOTk5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3BsYXRmb3JtaW5mby5weQkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0NiwxMSBAQCBj
bGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAg
cmV0dXJuIHN5cy5tYXhpbnQKIAorICAgIGRlZiBidWlsZF92ZXJzaW9uKHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLmlzX21hYygpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5y
dW5fY29tbWFuZChbJy91c3IvYmluL3N3X3ZlcnMnLCAnLWJ1aWxkVmVyc2lvbiddLCByZXR1cm5f
c3RkZXJyPUZhbHNlLCBpZ25vcmVfZXJyb3JzPVRydWUpLnJzdHJpcCgpCisgICAgICAgIHJldHVy
biBOb25lCisKICAgICBkZWYgeGNvZGVfc2RrX3ZlcnNpb24oc2VsZiwgc2RrX25hbWUpOgogICAg
ICAgICBpZiBzZWxmLmlzX21hYygpOgogICAgICAgICAgICAgIyBBc3N1bWVzIHRoYXQgeGNydW4g
ZG9lcyBub3Qgd3JpdGUgdG8gc3RhbmRhcmQgb3V0cHV0IG9uIGZhaWx1cmUgKGUuZy4gU0RLIGRv
ZXMgbm90IGV4aXN0KS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wbGF0Zm9ybWluZm9fbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHJldmlzaW9uIDI0Mjk5OSkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9j
ay5weQkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1v
bi52ZXJzaW9uX25hbWVfbWFwIGltCiAKIAogY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3Qp
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPVZlcnNp
b24uZnJvbV9uYW1lKCdTbm93IExlb3BhcmQnKSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9z
X25hbWU9J21hYycsIG9zX3ZlcnNpb249VmVyc2lvbi5mcm9tX25hbWUoJ0hpZ2ggU2llcnJhJykp
OgogICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvc192ZXJzaW9uLCBWZXJzaW9uKQogICAgICAg
ICBzZWxmLm9zX25hbWUgPSBvc19uYW1lCiAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IG9zX3Zl
cnNpb24KQEAgLTc4LDYgKzc4LDExIEBAIGNsYXNzIE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToK
ICAgICBkZWYgdGVybWluYWxfd2lkdGgoc2VsZik6CiAgICAgICAgIHJldHVybiA4MAogCisgICAg
ZGVmIGJ1aWxkX3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CisgICAg
ICAgICAgICByZXR1cm4gJzE3QTQwNScKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiB4
Y29kZV9zZGtfdmVyc2lvbihzZWxmLCBzZGtfbmFtZSk6CiAgICAgICAgIHJldHVybiBWZXJzaW9u
KDgsIDEpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CShyZXZpc2lvbiAy
NDI5OTkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKICMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgog
IyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3Jn
KQotIyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IyBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDE3ICszOCwxOSBAQCBpbXBvcnQg
dHJhY2ViYWNrCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmxvZ3V0aWxzIGltcG9ydCBjb25maWd1cmVfbG9nZ2luZwotZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCi1mcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAorZnJvbSB3
ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAogZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZp
ZyBpbXBvcnQgQ29uZmlnCiBmcm9tIHdlYmtpdHB5LnRlc3QuZmluZGVyIGltcG9ydCBGaW5kZXIK
IGZyb20gd2Via2l0cHkudGVzdC5wcmludGVyIGltcG9ydCBQcmludGVyCiBmcm9tIHdlYmtpdHB5
LnRlc3QucnVubmVyIGltcG9ydCBSdW5uZXIsIHVuaXRfdGVzdF9uYW1lCitmcm9tIHdlYmtpdHB5
LnJlc3VsdHMudXBsb2FkIGltcG9ydCBVcGxvYWQKK2Zyb20gd2Via2l0cHkucmVzdWx0cy5vcHRp
b25zIGltcG9ydCB1cGxvYWRfb3B0aW9ucwogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCiAKLV9ob3N0ID0gU3lzdGVtSG9zdCgpCitfaG9zdCA9IEhvc3QoKQogX3dlYmtpdF9y
b290ID0gTm9uZQogCiAKQEAgLTEyNCwxMiArMTI2LDE1IEBAIGNsYXNzIFRlc3RlcihvYmplY3Qp
OgogICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9J3VzYWdlOiAl
cHJvZyBbb3B0aW9uc10gW2FyZ3MuLi5dJykKIAogICAgICAgICAjICBDb25maWd1cmF0aW9uIG9w
dGlvbnMgb25seSBlZmZlY3QgdGhlIGJ1aWxkaW5nIG9mIGxsZGJXZWJLaXRUZXN0ZXIuCi0gICAg
ICAgIGNvbmZpZ3VyYXRpb25fZ3JvdXAgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdD
b25maWd1cmF0aW9uIG9wdGlvbnMnKQotICAgICAgICBjb25maWd1cmF0aW9uX2dyb3VwLmFkZF9v
cHRpb24oJy0tZGVidWcnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J0RlYnVnJywgZGVz
dD0iY29uZmlndXJhdGlvbiIsCi0gICAgICAgICAgICBoZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRp
b24gdG8gRGVidWcnKQotICAgICAgICBjb25maWd1cmF0aW9uX2dyb3VwLmFkZF9vcHRpb24oJy0t
cmVsZWFzZScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nUmVsZWFzZScsIGRlc3Q9ImNv
bmZpZ3VyYXRpb24iLAotICAgICAgICAgICAgaGVscD0nU2V0IHRoZSBjb25maWd1cmF0aW9uIHRv
IFJlbGVhc2UnKQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cChjb25maWd1cmF0aW9u
X2dyb3VwKQorICAgICAgICBmb3IgZ3JvdXBfbmFtZSwgZ3JvdXBfb3B0aW9ucyBpbiB7J1VwbG9h
ZCBPcHRpb25zJzogdXBsb2FkX29wdGlvbnMoKSwgJ0NvbmZpZ3VyYXRpb24gT3B0aW9ucyc6IFsK
KyAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWRlYnVnJywgYWN0aW9uPSdzdG9y
ZV9jb25zdCcsIGNvbnN0PSdEZWJ1ZycsIGRlc3Q9ImNvbmZpZ3VyYXRpb24iLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIERl
YnVnJyksCisgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1yZWxlYXNlJywgYWN0
aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdSZWxlYXNlJywgZGVzdD0iY29uZmlndXJhdGlvbiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTZXQgdGhlIGNvbmZpZ3Vy
YXRpb24gdG8gUmVsZWFzZScpLAorICAgICAgICBdfS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAg
IG9wdGlvbl9ncm91cCA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgZ3JvdXBfbmFtZSkK
KyAgICAgICAgICAgIG9wdGlvbl9ncm91cC5hZGRfb3B0aW9ucyhncm91cF9vcHRpb25zKQorICAg
ICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAob3B0aW9uX2dyb3VwKQogCiAgICAgICAg
IHBhcnNlci5hZGRfb3B0aW9uKCctYScsICctLWFsbCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRl
ZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biBhbGwgdGhl
IHRlc3RzJykKQEAgLTE4MSwxMSArMTg2LDEyIEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAg
ICAgICBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkgaW1wb3J0IGF1dG9pbnN0YWxsX2V2ZXJ5dGhp
bmcKICAgICAgICAgYXV0b2luc3RhbGxfZXZlcnl0aGluZygpCiAKKyAgICAgICAgc3RhcnRfdGlt
ZSA9IHRpbWUudGltZSgpCisgICAgICAgIGNvbmZpZyA9IENvbmZpZyhfaG9zdC5leGVjdXRpdmUs
IHNlbGYuZmluZGVyLmZpbGVzeXN0ZW0pCisgICAgICAgIGNvbmZpZ3VyYXRpb25fdG9fdXNlID0g
c2VsZi5fb3B0aW9ucy5jb25maWd1cmF0aW9uIG9yIGNvbmZpZy5kZWZhdWx0X2NvbmZpZ3VyYXRp
b24oKQogICAgICAgICBpZiB3aWxsX3J1bl9sbGRiX3dlYmtpdF90ZXN0czoKICAgICAgICAgICAg
IHNlbGYucHJpbnRlci53cml0ZV91cGRhdGUoJ0J1aWxkaW5nIGxsZGJXZWJLaXRUZXN0ZXIgLi4u
JykKICAgICAgICAgICAgIGJ1aWxkX2xsZGJ3ZWJraXR0ZXN0ZXIgPSBzZWxmLmZpbmRlci5maWxl
c3lzdGVtLmpvaW4oX3dlYmtpdF9yb290LCAnVG9vbHMnLCAnU2NyaXB0cycsICdidWlsZC1sbGRi
d2Via2l0dGVzdGVyJykKLSAgICAgICAgICAgIGNvbmZpZyA9IENvbmZpZyhfaG9zdC5leGVjdXRp
dmUsIHNlbGYuZmluZGVyLmZpbGVzeXN0ZW0pCi0gICAgICAgICAgICBjb25maWd1cmF0aW9uX3Rv
X3VzZSA9IHNlbGYuX29wdGlvbnMuY29uZmlndXJhdGlvbiBvciBjb25maWcuZGVmYXVsdF9jb25m
aWd1cmF0aW9uKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBfaG9zdC5leGVj
dXRpdmUucnVuX2FuZF90aHJvd19pZl9mYWlsKFtidWlsZF9sbGRid2Via2l0dGVzdGVyLCBjb25m
aWcuZmxhZ19mb3JfY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uX3RvX3VzZSldLCBxdWlldD0o
bm90IGJvb2woc2VsZi5fb3B0aW9ucy52ZXJib3NlKSkpCiAgICAgICAgICAgICBleGNlcHQgU2Ny
aXB0RXJyb3IgYXMgZToKQEAgLTIxOCw2ICsyMjQsNyBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToK
ICAgICAgICAgdGVzdF9ydW5uZXIgPSBSdW5uZXIoc2VsZi5wcmludGVyLCBsb2FkZXIpCiAgICAg
ICAgIHRlc3RfcnVubmVyLnJ1bihwYXJhbGxlbF90ZXN0cywgc2VsZi5fb3B0aW9ucy5jaGlsZF9w
cm9jZXNzZXMpCiAgICAgICAgIHRlc3RfcnVubmVyLnJ1bihzZXJpYWxfdGVzdHMsIDEpCisgICAg
ICAgIGVuZF90aW1lID0gdGltZS50aW1lKCkKIAogICAgICAgICBzZWxmLnByaW50ZXIucHJpbnRf
cmVzdWx0KHRpbWUudGltZSgpIC0gc3RhcnQpCiAKQEAgLTIzMiw5ICsyMzksNTAgQEAgY2xhc3Mg
VGVzdGVyKG9iamVjdCk6CiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuY292ZXJhZ2U6CiAgICAg
ICAgICAgICBjb3Yuc3RvcCgpCiAgICAgICAgICAgICBjb3Yuc2F2ZSgpCisKKyAgICAgICAgZmFp
bGVkX3VwbG9hZHMgPSAwCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmVwb3J0X3VybHM6Cisg
ICAgICAgICAgICBzZWxmLnByaW50ZXIubWV0ZXIud3JpdGVsbignXG4nKQorICAgICAgICAgICAg
c2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgnUHJlcGFyaW5nIHVwbG9hZCBkYXRhIC4uLicpCisK
KyAgICAgICAgICAgIHJlc3VsdHMgPSB7dGVzdDoge30gZm9yIHRlc3QgaW4gdGVzdF9ydW5uZXIu
dGVzdHNfcnVufQorICAgICAgICAgICAgZm9yIHRlc3QsIGVycm9ycyBpbiB0ZXN0X3J1bm5lci5l
cnJvcnM6CisgICAgICAgICAgICAgICAgcmVzdWx0c1t0ZXN0XSA9IFVwbG9hZC5jcmVhdGVfdGVz
dF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRVJST1IsIGxvZz0nL24nLmpvaW4o
ZXJyb3JzKSkKKyAgICAgICAgICAgIGZvciB0ZXN0LCBmYWlsdXJlcyBpbiB0ZXN0X3J1bm5lci5m
YWlsdXJlczoKKyAgICAgICAgICAgICAgICByZXN1bHRzW3Rlc3RdID0gVXBsb2FkLmNyZWF0ZV90
ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMLCBsb2c9Jy9uJy5qb2lu
KGZhaWx1cmVzKSkKKworICAgICAgICAgICAgX2hvc3QuaW5pdGlhbGl6ZV9zY20oKQorICAgICAg
ICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10
ZXN0cycsCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbj1VcGxvYWQuY3JlYXRlX2NvbmZp
Z3VyYXRpb24oCisgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtPV9ob3N0LnBsYXRmb3JtLm9z
X25hbWUsCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb249c3RyKF9ob3N0LnBsYXRmb3JtLm9z
X3ZlcnNpb24pLAorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uX25hbWU9X2hvc3QucGxhdGZv
cm0ub3NfdmVyc2lvbl9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgIHN0eWxlPWNvbmZpZ3Vy
YXRpb25fdG9fdXNlLAorICAgICAgICAgICAgICAgICAgICBzZGs9X2hvc3QucGxhdGZvcm0uYnVp
bGRfdmVyc2lvbigpLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgZGV0YWls
cz1VcGxvYWQuY3JlYXRlX2RldGFpbHMob3B0aW9ucz1zZWxmLl9vcHRpb25zKSwKKyAgICAgICAg
ICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICAg
ICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICAgICAgaWQ9X2hvc3Qu
c2NtKCkubmF0aXZlX3JldmlzaW9uKF93ZWJraXRfcm9vdCksCisgICAgICAgICAgICAgICAgICAg
IGJyYW5jaD1faG9zdC5zY20oKS5uYXRpdmVfYnJhbmNoKF93ZWJraXRfcm9vdCksCisgICAgICAg
ICAgICAgICAgKV0sCisgICAgICAgICAgICAgICAgcnVuX3N0YXRzPVVwbG9hZC5jcmVhdGVfcnVu
X3N0YXRzKAorICAgICAgICAgICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAg
ICAgICAgICAgICAgICAgIGVuZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgICAgICAgICB0
ZXN0c19za2lwcGVkPWxlbih0ZXN0X3J1bm5lci50ZXN0c19ydW4pIC0gbGVuKHBhcmFsbGVsX3Rl
c3RzKSAtIGxlbihzZXJpYWxfdGVzdHMpLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAg
ICAgICAgcmVzdWx0cz1yZXN1bHRzLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgZm9yIHVy
bCBpbiBzZWxmLl9vcHRpb25zLnJlcG9ydF91cmxzOgorICAgICAgICAgICAgICAgIHNlbGYucHJp
bnRlci53cml0ZV91cGRhdGUoJ1VwbG9hZGluZyB0byB7fSAuLi4nLmZvcm1hdCh1cmwpKQorICAg
ICAgICAgICAgICAgIGZhaWxlZF91cGxvYWRzID0gZmFpbGVkX3VwbG9hZHMgaWYgdXBsb2FkLnVw
bG9hZCh1cmwsIGxvZ19saW5lPXNlbGYucHJpbnRlci5tZXRlci53cml0ZWxuKSBlbHNlIChmYWls
ZWRfdXBsb2FkcyArIDEpCisgICAgICAgICAgICBzZWxmLnByaW50ZXIubWV0ZXIud3JpdGVsbign
VXBsb2FkcyBjb21wbGV0ZWQhJykKKworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdl
OgogICAgICAgICAgICAgY292LnJlcG9ydChzaG93X21pc3Npbmc9RmFsc2UpCiAKLSAgICAgICAg
cmV0dXJuIG5vdCBzZWxmLnByaW50ZXIubnVtX2Vycm9ycyBhbmQgbm90IHNlbGYucHJpbnRlci5u
dW1fZmFpbHVyZXMKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLnByaW50ZXIubnVtX2Vycm9ycyBh
bmQgbm90IHNlbGYucHJpbnRlci5udW1fZmFpbHVyZXMgYW5kIG5vdCBmYWlsZWRfdXBsb2Fkcwog
CiAgICAgZGVmIF9jaGVja19pbXBvcnRzKHNlbGYsIG5hbWVzKToKICAgICAgICAgZm9yIG5hbWUg
aW4gbmFtZXM6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkJKHJldmlz
aW9uIDI0Mjk5OSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgUnVubmVyKG9iamVjdCk6CiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHByaW50ZXIsIGxvYWRlcik6CiAgICAgICAgIHNlbGYucHJpbnRl
ciA9IHByaW50ZXIKICAgICAgICAgc2VsZi5sb2FkZXIgPSBsb2FkZXIKLSAgICAgICAgc2VsZi50
ZXN0c19ydW4gPSAwCisgICAgICAgIHNlbGYudGVzdHNfcnVuID0gW10KICAgICAgICAgc2VsZi5l
cnJvcnMgPSBbXQogICAgICAgICBzZWxmLmZhaWx1cmVzID0gW10KICAgICAgICAgc2VsZi53b3Jr
ZXJfZmFjdG9yeSA9IGxhbWJkYSBjYWxsZXI6IF9Xb3JrZXIoY2FsbGVyLCBzZWxmLmxvYWRlcikK
QEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgUnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxm
LnByaW50ZXIucHJpbnRfc3RhcnRlZF90ZXN0KHNvdXJjZSwgdGVzdF9uYW1lKQogICAgICAgICAg
ICAgcmV0dXJuCiAKLSAgICAgICAgc2VsZi50ZXN0c19ydW4gKz0gMQorICAgICAgICBzZWxmLnRl
c3RzX3J1bi5hcHBlbmQodGVzdF9uYW1lKQogICAgICAgICBpZiBmYWlsdXJlczoKICAgICAgICAg
ICAgIHNlbGYuZmFpbHVyZXMuYXBwZW5kKCh0ZXN0X25hbWUsIGZhaWx1cmVzKSkKICAgICAgICAg
aWYgZXJyb3JzOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L3J1bm5lcl91bml0
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVy
X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNDI5OTkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw2IEBA
IGNsYXNzIFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgndGVzdDMgKEZvbyknLCAnRScsICd0ZXN0M1xuZXJyZWQnKSkKICAgICAgICAg
cnVubmVyID0gUnVubmVyKFByaW50ZXIoc3RyZWFtLCBvcHRpb25zKSwgbG9hZGVyKQogICAgICAg
ICBydW5uZXIucnVuKFsnRm9vLnRlc3QxJywgJ0Zvby50ZXN0MicsICdGb28udGVzdDMnXSwgMSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5uZXIudGVzdHNfcnVuLCAzKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGxlbihydW5uZXIudGVzdHNfcnVuKSwgMykKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChsZW4ocnVubmVyLmZhaWx1cmVzKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChsZW4ocnVubmVyLmVycm9ycyksIDEpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNDI5OTkpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTEsNCArMSw1IEBACiAjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRv
bmVrQHdlYmtpdC5vcmcpCisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNCw2ICsxMTUs
OCBAQCBjbGFzcyBBdXRvaW5zdGFsbEltcG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgICAgIHNl
bGYuX2luc3RhbGxfcHl0ZXN0X3RpbWVvdXQoKQogICAgICAgICBlbGlmICcucHl0ZXN0JyBpbiBm
dWxsbmFtZToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfcHl0ZXN0KCkKKyAgICAgICAgZWxp
ZiAnLnJlcXVlc3RzJyBpbiBmdWxsbmFtZToKKyAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfcmVx
dWVzdHMoKQogCiAgICAgZGVmIF9pbnN0YWxsX21lY2hhbml6ZShzZWxmKToKICAgICAgICAgc2Vs
Zi5faW5zdGFsbCgiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJj
ZS9tL21lY2hhbml6ZS9tZWNoYW5pemUtMC4yLjUudGFyLmd6IiwKQEAgLTE2MSw2ICsxNjQsMjEg
QEAgY2xhc3MgQXV0b2luc3RhbGxJbXBvcnRIb29rKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2lu
c3RhbGwoImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9hMi9lYy80MTVk
MGNjY2MxZWQ0MWNkN2ZkZjY5YWQ5ODlkYTE2YThkMTMwNTc5OTYzNzEwMDRjYWI0YmFmYzQ4ZjMv
cHl0ZXN0LTMuNi4yLnRhci5neiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0
ZXN0LTMuNi4yL3NyYy9weXRlc3QucHkiKQogCisgICAgZGVmIF9pbnN0YWxsX3JlcXVlc3RzKHNl
bGYpOgorICAgICAgICBzZWxmLl9lbnN1cmVfYXV0b2luc3RhbGxlZF9kaXJfaXNfaW5fc3lzX3Bh
dGgoKQorICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5v
cmcvcGFja2FnZXMvMDYvYjgvZDFlYTM4NTEzYzIyZThjOTA2Mjc1ZDEzNTgxOGZlZTE2YWQ4NDk1
OTg1OTU2YTliN2UyYmIyMTk0MmExL2NlcnRpZmktMjAxOS4zLjkudGFyLmd6IiwKKyAgICAgICAg
ICAgICAgICAgICAgICAiY2VydGlmaS0yMDE5LjMuOS9jZXJ0aWZpIikKKyAgICAgICAgc2VsZi5f
aW5zdGFsbCgiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2ZjL2JiL2E1
NzY4YzIzMGY5ZGRiMDNhY2M5ZWYzZjBkNGEzY2Y5MzQ2MjQ3Mzc5NWQxOGU5NTM1NDk4YzhmOTI5
ZC9jaGFyZGV0LTMuMC40LnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImNoYXJkZXQt
My4wLjQvY2hhcmRldCIpCisgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0
aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9mYy9iYi9hNTc2OGMyMzBmOWRkYjAzYWNjOWVmM2YwZDRh
M2NmOTM0NjI0NzM3OTVkMThlOTUzNTQ5OGM4ZjkyOWQvY2hhcmRldC0zLjAuNC50YXIuZ3oiLAor
ICAgICAgICAgICAgICAgICAgICAgICJjaGFyZGV0LTMuMC40L2NoYXJkZXQiKQorICAgICAgICBz
ZWxmLl9pbnN0YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvYWQv
MTMvZWI1Njk1MWI2Zjc5NTBjYWRiNTc5Y2ExNjZlNDQ4YmE3N2Y5ZDI0ZWZjMDNlZGQ3ZTU1ZmE1
N2QwNGI3L2lkbmEtMi44LnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImlkbmEtMi44
L2lkbmEiKQorICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3Rl
ZC5vcmcvcGFja2FnZXMvYjEvNTMvMzdkODJhYjM5MTM5MzU2NWYyZjgzMWI4ZWVkYmZmZDU3ZGI1
YTcxODIxNmY4MmYxYThiNGQzODFhMWMxL3VybGxpYjMtMS4yNC4xLnRhci5neiIsCisgICAgICAg
ICAgICAgICAgICAgICAgInVybGxpYjMtMS4yNC4xL3NyYy91cmxsaWIzIikKKyAgICAgICAgc2Vs
Zi5faW5zdGFsbCgiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzLzUyLzJj
LzUxNGU0YWMyNWRhMmIwOGNhNWE0NjRjNTA0NjM2ODIxMjYzODVjNDI3MmMxODE5Mzg3NmU5MWY0
YmMzOC9yZXF1ZXN0cy0yLjIxLjAudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAicmVx
dWVzdHMtMi4yMS4wL3JlcXVlc3RzIikKKwogICAgIGRlZiBfaW5zdGFsbF9weWxpbnQoc2VsZik6
CiAgICAgICAgIHNlbGYuX2Vuc3VyZV9hdXRvaW5zdGFsbGVkX2Rpcl9pc19pbl9zeXNfcGF0aCgp
CiAgICAgICAgIGlmIChub3Qgc2VsZi5fZnMuZXhpc3RzKHNlbGYuX2ZzLmpvaW4oX0FVVE9JTlNU
QUxMRURfRElSLCAicHlsaW50IikpIG9yCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0
Mjk5OSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5p
dHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTE4MywxMCArMTgzLDEwIEBAIGNsYXNzIFBhdGNo
UHJvY2Vzc2luZ1F1ZXVlVGVzdChDb21tYW5kc1QKICAgICAgICAgcXVldWUuX29wdGlvbnMgPSBN
b2NrKCkKICAgICAgICAgcXVldWUuX29wdGlvbnMucG9ydCA9IE5vbmUKICAgICAgICAgcGF0Y2gg
PSBxdWV1ZS5fdG9vbC5idWdzLmZldGNoX2F0dGFjaG1lbnQoMTAwMDEpCi0gICAgICAgIGV4cGVj
dGVkX2xvZ3MgPSAiIiJNT0NLIGFkZF9hdHRhY2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAwLCBk
ZXNjcmlwdGlvbj1BcmNoaXZlIG9mIGxheW91dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9yIG1h
Yy1zbm93bGVvcGFyZCBmaWxlbmFtZT1sYXlvdXQtdGVzdC1yZXN1bHRzLnppcCBtaW1ldHlwZT1O
b25lCisgICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJNT0NLIGFkZF9hdHRhY2htZW50X3RvX2J1
ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlwdGlvbj1BcmNoaXZlIG9mIGxheW91dC10ZXN0LXJlc3Vs
dHMgZnJvbSBib3QgZm9yIG1hYy1oaWdoc2llcnJhIGZpbGVuYW1lPWxheW91dC10ZXN0LXJlc3Vs
dHMuemlwIG1pbWV0eXBlPU5vbmUKIC0tIEJlZ2luIGNvbW1lbnQgLS0KIFRoZSBhdHRhY2hlZCB0
ZXN0IGZhaWx1cmVzIHdlcmUgc2VlbiB3aGlsZSBydW5uaW5nIHJ1bi13ZWJraXQtdGVzdHMgb24g
dGhlIG1vY2stcXVldWUuCi1Qb3J0OiBtYWMtc25vd2xlb3BhcmQgIFBsYXRmb3JtOiBNb2NrUGxh
dGZvcm0gMS4wCitQb3J0OiBtYWMtaGlnaHNpZXJyYSAgUGxhdGZvcm06IE1vY2tQbGF0Zm9ybSAx
LjAKIC0tIEVuZCBjb21tZW50IC0tCiAiIiIKICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2Vy
dF9vdXRwdXRzKHNlbGYsIHF1ZXVlLl91cGxvYWRfcmVzdWx0c19hcmNoaXZlX2Zvcl9wYXRjaCwg
W3BhdGNoLCBNb2NrKCldLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364814</attachid>
            <date>2019-03-15 11:10:38 -0700</date>
            <delta_ts>2019-03-15 11:29:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190315091629.patch</filename>
            <type>text/plain</type>
            <size>41485</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0Mjk5OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE5LTAzLTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6Cisg
ICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOiBBZGQgcmVxdWVzdHMg
YXV0by1pbnN0YWxsLgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxsX3Jl
cXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBs
b2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGlu
Zy4KKwogMjAxOS0wMy0xNCAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNv
bT4KIAogICAgICAgICBbV2luXVtNaW5Ccm93c2VyXVtXSzJdIEltcGxlbWVudCBjcmVhdGVOZXdQ
YWdlIG9mIFdLUGFnZVVJQ2xpZW50IHRvIG9wZW4gYSBuZXcgd2luZG93CkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5pdF9fLnB5CShub25leGlzdGVudCkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzIEBACisjIFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGly
ZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKKworIyBLZWVwIHRoaXMgZmlsZSBmcmVlIG9mIGFueSBj
b2RlIG9yIGltcG9ydCBzdGF0ZW1lbnRzIHRoYXQgY291bGQKKyMgY2F1c2UgZWl0aGVyIGFuIGVy
cm9yIHRvIG9jY3VyIG9yIGEgbG9nIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLgorIyBUaGlzIGVuc3Vy
ZXMgdGhhdCBjYWxsaW5nIGNvZGUgY2FuIGltcG9ydCBpbml0aWFsaXphdGlvbiBjb2RlIGZyb20K
KyMgd2Via2l0cHkgYmVmb3JlIGFueSBlcnJvcnMgb3IgbG9nIG1lc3NhZ2VzIGR1ZSB0byBjb2Rl
IGluIHRoaXMgZmlsZS4KKyMgSW5pdGlhbGl6YXRpb24gY29kZSBjYW4gaW5jbHVkZSB0aGluZ3Mg
bGlrZSB2ZXJzaW9uLWNoZWNraW5nIGNvZGUgYW5kCisjIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBj
b2RlLgorIworIyBXZSBkbyBub3QgZXhlY3V0ZSBhbnkgdmVyc2lvbi1jaGVja2luZyBjb2RlIG9y
IGxvZ2dpbmcgY29uZmlndXJhdGlvbgorIyBjb2RlIGluIHRoaXMgZmlsZSBzbyB0aGF0IGNhbGxl
cnMgY2FuIG9wdC1pbiBhcyB0aGV5IHdhbnQuICBUaGlzIGFsc28KKyMgYWxsb3dzIGRpZmZlcmVu
dCBjYWxsZXJzIHRvIGNob29zZSBkaWZmZXJlbnQgaW5pdGlhbGl6YXRpb24gY29kZSwKKyMgYXMg
bmVjZXNzYXJ5LgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlv
bnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3B0cGFyc2UKKworCitkZWYgdXBsb2FkX29w
dGlvbnMoKToKKyAgICByZXR1cm4gWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1y
ZXBvcnQnLCBhY3Rpb249J2FwcGVuZCcsIGRlc3Q9J3JlcG9ydF91cmxzJywgaGVscD0nVVJMIChv
ciBVUkxzKSB0byByZXBvcnQgdGVzdCByZXN1bHRzIHRvJyksCisgICAgICAgIG9wdHBhcnNlLm1h
a2Vfb3B0aW9uKCctLWJ1aWxkYm90LW1hc3RlcicsIGhlbHA9J1RoZSB1cmwgb2YgdGhlIGJ1aWxk
Ym90IG1hc3Rlci4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRlci1u
YW1lJywgaGVscD0nVGhlIG5hbWUgb2YgdGhlIGJ1aWxkYm90IGJ1aWxkZXIgdGVzdHMgd2VyZSBy
dW4gb24uJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkLW51bWJlcics
IGhlbHA9J1RoZSBidWlsZGJvdCBidWlsZCBudW1iZXIgdGVzdHMgYXJlIGFzc29jaWF0ZWQgd2l0
aC4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRib3Qtd29ya2VyJywg
aGVscD0nVGhlIGJ1aWxkYm90IHdvcmtlciB0ZXN0cyB3ZXJlIHJ1biBvbi4nKSwKKyAgICBdCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE4OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMg
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
IyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnJlcXVlc3Rz
CisKK2ltcG9ydCBqc29uCitpbXBvcnQgcmVxdWVzdHMKK2ltcG9ydCBzeXMKKworaW1wb3J0IHBs
YXRmb3JtIGFzIHBsYXRmb3JtXworCisKK2NsYXNzIFVwbG9hZChvYmplY3QpOgorICAgIFVQTE9B
RF9FTkRQT0lOVCA9ICcvYXBpL3VwbG9hZCcKKyAgICBCVUlMREJPVF9ERVRBSUxTID0gWydidWls
ZGJvdC1tYXN0ZXInLCAnYnVpbGRlci1uYW1lJywgJ2J1aWxkLW51bWJlcicsICdidWlsZGJvdC13
b3JrZXInXQorICAgIFZFUlNJT04gPSAwCisKKyAgICBjbGFzcyBFeHBlY3RhdGlvbnM6CisgICAg
ICAgICMgVGhlc2UgYXJlIG9yZGVyZWQgYnkgcHJpb3JpdHksIG1lYW5pbmcgdGhhdCBhIHRlc3Qg
d2hpY2ggYm90aCBjcmFzaGVzIGFuZCBoYXMKKyAgICAgICAgIyBhIHdhcm5pbmcgc2hvdWxkIGJl
IGNvbnNpZGVyZWQgdG8gaGF2ZSBjcmFzaGVkLgorICAgICAgICBPUkRFUiA9IFsKKyAgICAgICAg
ICAgICdDUkFTSCcsCisgICAgICAgICAgICAnVElNRU9VVCcsCisgICAgICAgICAgICAnSU1BR0Un
LCAgICMgSW1hZ2UtZGlmZgorICAgICAgICAgICAgJ0FVRElPJywgICAjIEF1ZGlvLWRpZmYKKyAg
ICAgICAgICAgICdURVhUJywgICAgIyBUZXh0LWRpZmYKKyAgICAgICAgICAgICdGQUlMJywKKyAg
ICAgICAgICAgICdFUlJPUicsCisgICAgICAgICAgICAnV0FSTklORycsCisgICAgICAgICAgICAn
UEFTUycsCisgICAgICAgIF0KKyAgICAgICAgQ1JBU0gsIFRJTUVPVVQsIElNQUdFLCBBVURJTywg
VEVYVCwgRkFJTCwgRVJST1IsIFdBUk5JTkcsIFBBU1MgPSBPUkRFUgorCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBjcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgIHBsYXRmb3Jt
PU5vbmUsCisgICAgICAgICAgICBpc19zaW11bGF0b3I9RmFsc2UsCisgICAgICAgICAgICB2ZXJz
aW9uPU5vbmUsCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9Tm9uZSwKKyAgICAgICAgICAgIHZl
cnNpb25fbmFtZT1Ob25lLAorICAgICAgICAgICAgbW9kZWw9Tm9uZSwKKyAgICAgICAgICAgIHN0
eWxlPU5vbmUsICAgIyBEZWJ1Zy9Qcm9kdWN0aW9uL1JlbGVhc2UKKyAgICAgICAgICAgIGZsYXZv
cj1Ob25lLCAgIyBEdW1waW5nIGdyb3VuZCBzdWl0ZS13aWRlIGNvbmZpZ3VyYXRpb24gY2hhbmdl
cyAoaWUsIEd1YXJkTWFsbG9jKQorICAgICAgICAgICAgc2RrPU5vbmUsCisgICAgICAgICk6CisK
KyAgICAgICAgIyBUaGlzIGRldmlhdGVzIHNsaWdodGx5IGZyb20gdGhlIHJlc3Qgb2Ygd2Via2l0
cHksIGJ1dCBpdCBhbGxvd3MgdGhpcyBmaWxlIHRvIGJlIGVudGlyZWx5IHBvcnRhYmxlLgorICAg
ICAgICBjb25maWcgPSBkaWN0KAorICAgICAgICAgICAgcGxhdGZvcm09cGxhdGZvcm0gb3IgKHBs
YXRmb3JtXy5zeXN0ZW0oKSBpZiBwbGF0Zm9ybV8uc3lzdGVtKCkgIT0gJ0RhcndpbicgZWxzZSAn
bWFjJykubG93ZXIoKSwKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1pc19zaW11bGF0b3IsCisg
ICAgICAgICAgICB2ZXJzaW9uPXZlcnNpb24gb3IgKHBsYXRmb3JtXy5yZWxlYXNlKCkgaWYgcGxh
dGZvcm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVsc2UgcGxhdGZvcm1fLm1hY192ZXIoKVswXSks
CisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlIG9yIHBsYXRmb3JtXy5tYWNo
aW5lKCksCisgICAgICAgICkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gY29uZmlnLml0ZXJp
dGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24n
LmZvcm1hdChrZXkpKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KHZlcnNpb25fbmFt
ZT12ZXJzaW9uX25hbWUsIG1vZGVsPW1vZGVsLCBzdHlsZT1zdHlsZSwgZmxhdm9yPWZsYXZvciwg
c2RrPXNkaykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgICAgICBjb25maWdba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiBjb25m
aWcKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2NvbW1pdChyZXBvc2l0b3J5
X2lkPU5vbmUsIGlkPU5vbmUsIGJyYW5jaD1Ob25lKToKKyAgICAgICAgY29tbWl0ID0gZGljdChy
ZXBvc2l0b3J5X2lkPXJlcG9zaXRvcnlfaWQsIGlkPWlkKQorICAgICAgICBmb3Iga2V5LCB2YWx1
ZSBpbiBjb21taXQuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgor
ICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IG11c3QgYmUgZGVmaW5lZCBpbiBh
IGNvbW1pdCcuZm9ybWF0KGtleSkpCisgICAgICAgIGlmIGJyYW5jaDoKKyAgICAgICAgICAgIGNv
bW1pdFsnYnJhbmNoJ10gPSBicmFuY2gKKyAgICAgICAgcmV0dXJuIGNvbW1pdAorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfZGV0YWlscyhsaW5rPU5vbmUsIG9wdGlvbnM9Tm9u
ZSwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCoqa3dhcmdzKQorICAgICAgICBp
ZiBsaW5rOgorICAgICAgICAgICAgcmVzdWx0WydsaW5rJ10gPSBsaW5rCisKKyAgICAgICAgaWYg
b3B0aW9uczoKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIFVwbG9hZC5CVUlMREJPVF9ERVRB
SUxTOgorICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihvcHRpb25zLCBlbGVtZW50LnJl
cGxhY2UoJy0nLCAnXycpLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbZWxlbWVudF0gPSB2YWx1ZQorICAgICAg
ICByZXR1cm4gcmVzdWx0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9ydW5f
c3RhdHMoc3RhcnRfdGltZT1Ob25lLCBlbmRfdGltZT1Ob25lLCB0ZXN0c19za2lwcGVkPU5vbmUs
ICoqa3dhcmdzKToKKyAgICAgICAgc3RhdHMgPSBkaWN0KCoqa3dhcmdzKQorICAgICAgICBmb3Ig
a2V5LCB2YWx1ZSBpbiBkaWN0KHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwgZW5kX3RpbWU9ZW5kX3Rp
bWUsIHRlc3RzX3NraXBwZWQ9dGVzdHNfc2tpcHBlZCkuaXRlcml0ZW1zKCk6CisgICAgICAgICAg
ICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzdGF0c1trZXldID0gdmFs
dWUKKyAgICAgICAgcmV0dXJuIHN0YXRzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNy
ZWF0ZV90ZXN0X3Jlc3VsdChleHBlY3RlZD1Ob25lLCBhY3R1YWw9Tm9uZSwgbG9nPU5vbmUsICoq
a3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgqKmt3YXJncykKKworICAgICAgICAjIFRl
c3RzIHdoaWNoIGRvbid0IGRlY2xhcmUgZXhwZWN0YXRpb25zIG9yIHJlc3VsdHMgYXJlIGFzc3Vt
ZWQgdG8gaGF2ZSBwYXNzZWQuCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRpY3QoZXhwZWN0
ZWQ9ZXhwZWN0ZWQsIGFjdHVhbD1hY3R1YWwsIGxvZz1sb2cpLml0ZXJpdGVtcygpOgorICAgICAg
ICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0g
PSB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
c3VpdGU9Tm9uZSwgY29uZmlndXJhdGlvbj1Ob25lLCBjb21taXRzPVtdLCB0aW1lc3RhbXA9Tm9u
ZSwgZGV0YWlscz1Ob25lLCBydW5fc3RhdHM9Tm9uZSwgcmVzdWx0cz17fSk6CisgICAgICAgIHNl
bGYuc3VpdGUgPSBzdWl0ZQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0
aW9uCisgICAgICAgIHNlbGYuY29tbWl0cyA9IGNvbW1pdHMKKyAgICAgICAgc2VsZi50aW1lc3Rh
bXAgPSB0aW1lc3RhbXAKKyAgICAgICAgc2VsZi5kZXRhaWxzID0gZGV0YWlscworICAgICAgICBz
ZWxmLnJ1bl9zdGF0cyA9IHJ1bl9zdGF0cworICAgICAgICBzZWxmLnJlc3VsdHMgPSByZXN1bHRz
CisKKyAgICBjbGFzcyBFbmNvZGVyKGpzb24uSlNPTkVuY29kZXIpOgorCisgICAgICAgIGRlZiBk
ZWZhdWx0KHNlbGYsIG9iaik6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgVXBsb2Fk
KToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb2JqLnN1aXRlOgorICAgICAgICAgICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCdObyBzdWl0ZSBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxvYWQn
KQorICAgICAgICAgICAgICAgIGlmIG5vdCBvYmouY29tbWl0czoKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignTm8gY29tbWl0cyBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxv
YWQnKQorCisgICAgICAgICAgICAgICAgZGV0YWlscyA9IG9iai5kZXRhaWxzIG9yIG9iai5jcmVh
dGVfZGV0YWlscygpCisgICAgICAgICAgICAgICAgYnVpbGRib3RfYXJncyA9IFtkZXRhaWxzLmdl
dChhcmcsIE5vbmUpIGlzIE5vbmUgZm9yIGFyZyBpbiBvYmouQlVJTERCT1RfREVUQUlMU10KKyAg
ICAgICAgICAgICAgICBpZiBhbnkoYnVpbGRib3RfYXJncykgYW5kIG5vdCBhbGwoYnVpbGRib3Rf
YXJncyk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0FsbCBidWlsZGJv
dCBkZXRhaWxzIG11c3QgYmUgZGVmaW5lZCBmb3IgdXBsb2FkJykKKworICAgICAgICAgICAgICAg
IGRlZiB1bnBhY2tfdGVzdChjdXJyZW50LCBwYXRoX3RvX3Rlc3QsIGRhdGEpOgorICAgICAgICAg
ICAgICAgICAgICBpZiBsZW4ocGF0aF90b190ZXN0KSA9PSAxOgorICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1dID0gZGF0YQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjdXJyZW50LmdldChwYXRo
X3RvX3Rlc3RbMF0pOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFtwYXRoX3RvX3Rl
c3RbMF1dID0ge30KKyAgICAgICAgICAgICAgICAgICAgdW5wYWNrX3Rlc3QoY3VycmVudFtwYXRo
X3RvX3Rlc3RbMF1dLCBwYXRoX3RvX3Rlc3RbMTpdLCBkYXRhKQorCisgICAgICAgICAgICAgICAg
cmVzdWx0cyA9IHt9CisgICAgICAgICAgICAgICAgZm9yIHRlc3QsIGRhdGEgaW4gb2JqLnJlc3Vs
dHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHVucGFja190ZXN0KHJlc3VsdHMs
IHRlc3Quc3BsaXQoJy8nKSwgZGF0YSkKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRpY3Qo
CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb249b2JqLlZFUlNJT04sCisgICAgICAgICAgICAg
ICAgICAgIHN1aXRlPW9iai5zdWl0ZSwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlv
bj1vYmouY29uZmlndXJhdGlvbiBvciBvYmouY3JlYXRlX2NvbmZpZ3VyYXRpb24oKSwKKyAgICAg
ICAgICAgICAgICAgICAgY29tbWl0cz1vYmouY29tbWl0cywKKyAgICAgICAgICAgICAgICAgICAg
dGVzdF9yZXN1bHRzPWRpY3QoCisgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzPWRldGFp
bHMsCisgICAgICAgICAgICAgICAgICAgICAgICBydW5fc3RhdHM9b2JqLnJ1bl9zdGF0cyBvciBv
YmouY3JlYXRlX3J1bl9zdGF0cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cz1y
ZXN1bHRzLAorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICkKKyAgICAg
ICAgICAgICAgICBpZiBvYmoudGltZXN0YW1wOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRb
J3RpbWVzdGFtcCddID0gb2JqLnRpbWVzdGFtcAorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihVcGxvYWQuRW5jb2Rlciwgc2VsZikuZGVmYXVs
dChvYmopCisKKyAgICBkZWYgdXBsb2FkKHNlbGYsIHVybCwgbG9nX2xpbmU9bGFtYmRhIHZhbDog
c3lzLnN0ZG91dC53cml0ZSh2YWwgKyAnXG4nKSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHJlc3BvbnNlID0gcmVxdWVzdHMucG9zdCh1cmwgKyBzZWxmLlVQTE9BRF9FTkRQT0lOVCwgZGF0
YT1qc29uLmR1bXBzKHNlbGYsIGNscz1VcGxvYWQuRW5jb2RlcikpCisgICAgICAgIGV4Y2VwdCBy
ZXF1ZXN0cy5leGNlcHRpb25zLkNvbm5lY3Rpb25FcnJvcjoKKyAgICAgICAgICAgIGxvZ19saW5l
KCcgJyAqIDQgKyAnRmFpbGVkIHRvIHVwbG9hZCB0byB7fSwgcmVzdWx0cyBzZXJ2ZXIgbm90IG9u
bGluZScuZm9ybWF0KHVybCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGxvZ19saW5lKCcgJyAqIDQgKyAnRmFp
bGVkIHRvIGVuY29kZSB1cGxvYWQgZGF0YToge30nLmZvcm1hdChlKSkKKyAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAg
ICAgICAgICAgIGxvZ19saW5lKCcgJyAqIDQgKyAnRXJyb3IgdXBsb2FkaW5nIHRvIHt9OicuZm9y
bWF0KHVybCkpCisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA4ICsgcmVzcG9uc2UuanNvbigp
WydkZXNjcmlwdGlvbiddKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgbG9n
X2xpbmUoJyAnICogNCArICdVcGxvYWRlZCByZXN1bHRzIHRvIHt9Jy5mb3JtYXQodXJsKSkKKyAg
ICAgICAgcmV0dXJuIFRydWUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91
cGxvYWRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9y
ZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjE1IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2lt
cG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQucmVxdWVzdHMKKworaW1wb3J0
IGNvbGxlY3Rpb25zCitpbXBvcnQganNvbgoraW1wb3J0IG1vY2sKK2ltcG9ydCByZXF1ZXN0cwor
aW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LnJlc3VsdHMudXBs
b2FkIGltcG9ydCBVcGxvYWQKKworCitjbGFzcyBVcGxvYWRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKKworICAgIGNsYXNzIE9wdGlvbnMob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNl
bGYsICoqa3dhcmdzKToKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGt3YXJncy5pdGVy
aXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsdWUpCisKKyAg
ICBjbGFzcyBNb2NrUmVzcG9uc2Uob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHN0YXR1c19jb2RlPTIwMCwgdGV4dD0nJyk6CisgICAgICAgICAgICBzZWxmLnN0YXR1c19jb2Rl
ID0gc3RhdHVzX2NvZGUKKyAgICAgICAgICAgIHNlbGYudGV4dCA9IHRleHQKKworICAgICAgICBk
ZWYganNvbihzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHNlbGYudGV4dCkK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbm9ybWFsaXplKGRhdGEpOgorICAgICAgICBp
ZiBpc2luc3RhbmNlKGRhdGEsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmV0dXJuIHN0cihk
YXRhKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YSwgY29sbGVjdGlvbnMuTWFwcGluZyk6
CisgICAgICAgICAgICByZXR1cm4gZGljdChtYXAoVXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEu
aXRlcml0ZW1zKCkpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YSwgY29sbGVjdGlvbnMu
SXRlcmFibGUpOgorICAgICAgICAgICAgcmV0dXJuIHR5cGUoZGF0YSkobWFwKFVwbG9hZFRlc3Qu
bm9ybWFsaXplLCBkYXRhKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBkYXRh
CisKKyAgICBkZWYgdGVzdF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc3RhcnRfdGltZSwgZW5k
X3RpbWUgPSB0aW1lLnRpbWUoKSAtIDMsIHRpbWUudGltZSgpCisgICAgICAgIHVwbG9hZCA9IFVw
bG9hZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBj
b25maWd1cmF0aW9uPVVwbG9hZC5jcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgICAg
ICBwbGF0Zm9ybT0nbWFjJywKKyAgICAgICAgICAgICAgICB2ZXJzaW9uPScxMC4xMy4wJywKKyAg
ICAgICAgICAgICAgICB2ZXJzaW9uX25hbWU9J0hpZ2ggU2llcnJhJywKKyAgICAgICAgICAgICAg
ICBhcmNoaXRlY3R1cmU9J3g4Nl82NCcsCisgICAgICAgICAgICAgICAgc2RrPScxN0E0MDUnLAor
ICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRhaWxz
KGxpbms9J2h0dHBzOi8vd2Via2l0Lm9yZycpLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2Fk
LmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywK
KyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycs
CisgICAgICAgICAgICApXSwKKyAgICAgICAgICAgIHJ1bl9zdGF0cz1VcGxvYWQuY3JlYXRlX3J1
bl9zdGF0cygKKyAgICAgICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAgICAg
ICAgICAgICAgZW5kX3RpbWU9ZW5kX3RpbWUsCisgICAgICAgICAgICAgICAgdGVzdHNfc2tpcHBl
ZD0wLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIHJlc3VsdHM9eworICAgICAgICAgICAg
ICAgICd3ZWJraXRweS50ZXN0MSc6IHt9LAorICAgICAgICAgICAgICAgICd3ZWJraXRweS50ZXN0
Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoZXhwZWN0ZWQ9VXBsb2FkLkV4cGVjdGF0aW9u
cy5QQVNTLCBhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAgICAgICAgICAgIH0s
CisgICAgICAgICkKKyAgICAgICAgZ2VuZXJhdGVkX2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29u
LmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpKSkKKworICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd2ZXJzaW9uJ10sIDApCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3N1aXRlJ10sICd3ZWJraXRweS10ZXN0
cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ2NvbmZpZ3VyYXRp
b24nXSwgc2VsZi5ub3JtYWxpemUoZGljdCgKKyAgICAgICAgICAgIHBsYXRmb3JtPSdtYWMnLAor
ICAgICAgICAgICAgaXNfc2ltdWxhdG9yPUZhbHNlLAorICAgICAgICAgICAgdmVyc2lvbj0nMTAu
MTMuMCcsCisgICAgICAgICAgICB2ZXJzaW9uX25hbWU9J0hpZ2ggU2llcnJhJywKKyAgICAgICAg
ICAgIGFyY2hpdGVjdHVyZT0neDg2XzY0JywKKyAgICAgICAgICAgIHNkaz0nMTdBNDA1JywKKyAg
ICAgICAgKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ2NvbW1p
dHMnXSwgW2RpY3QoCisgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAg
ICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICldKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsn
ZGV0YWlscyddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KGxpbms9J2h0dHBzOi8vd2Via2l0Lm9yZycp
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRz
J11bJ3J1bl9zdGF0cyddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KAorICAgICAgICAgICAgc3RhcnRf
dGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgZW5kX3RpbWU9ZW5kX3RpbWUsCisgICAgICAg
ICAgICB0ZXN0c19za2lwcGVkPTAsCisgICAgICAgICkpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncmVzdWx0cyddLCBzZWxmLm5vcm1h
bGl6ZSh7CisgICAgICAgICAgICAnd2Via2l0cHkudGVzdDEnOiB7fSwKKyAgICAgICAgICAgICd3
ZWJraXRweS50ZXN0Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoZXhwZWN0ZWQ9VXBsb2Fk
LkV4cGVjdGF0aW9ucy5QQVNTLCBhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAg
ICAgICAgfSkpCisKKyAgICBkZWYgdGVzdF91cGxvYWQoc2VsZik6CisgICAgICAgIHVwbG9hZCA9
IFVwbG9hZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAg
ICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0
b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAg
ICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICApCisKKyAgICAgICAg
d2l0aCBtb2NrLnBhdGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PWxhbWJkYSB1cmwsIGRhdGE6IHNl
bGYuTW9ja1Jlc3BvbnNlKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVwbG9hZC51
cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1bHRzJywgbG9nX2xpbmU9bGFtYmRhIF86IE5v
bmUpKQorCisgICAgICAgIGRlZiByYWlzZV9leGNlcHRpb24odXJsLCBkYXRhKToKKyAgICAgICAg
ICAgIHJhaXNlIHJlcXVlc3RzLmV4Y2VwdGlvbnMuQ29ubmVjdGlvbkVycm9yKCkKKworICAgICAg
ICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBuZXc9cmFpc2VfZXhjZXB0aW9uKToK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJr
aXQub3JnL3Jlc3VsdHMnLCBsb2dfbGluZT1sYW1iZGEgXzogTm9uZSkpCisKKyAgICAgICAgd2l0
aCBtb2NrLnBhdGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PWxhbWJkYSB1cmwsIGRhdGE6IHNlbGYu
TW9ja1Jlc3BvbnNlKAorICAgICAgICAgICAgc3RhdHVzX2NvZGU9NDA0LAorICAgICAgICAgICAg
dGV4dD1qc29uLmR1bXBzKGRpY3QoZGVzY3JpcHRpb249J05vIHN1Y2ggYWRkcmVzcycpKSwKKyAg
ICAgICAgKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHVwbG9hZC51cGxvYWQoJ2h0
dHBzOi8vd2Via2l0Lm9yZy9yZXN1bHRzJywgbG9nX2xpbmU9bGFtYmRhIF86IE5vbmUpKQorCisg
ICAgZGVmIHRlc3RfcGFja2VkX3Rlc3Qoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgK
KyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb21taXRz
PVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3
ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9
J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgcmVzdWx0cz17CisgICAgICAg
ICAgICAgICAgJ2RpcjEvc3ViLWRpcjEvdGVzdDEnOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0
KGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICAgICAgICAgICdkaXIx
L3N1Yi1kaXIxL3Rlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2Fk
LkV4cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMi90
ZXN0Myc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIxL3N1Yi1kaXIyL3Rlc3Q0Jzoge30sCisg
ICAgICAgICAgICAgICAgJ2RpcjIvc3ViLWRpcjMvdGVzdDUnOiB7fSwKKyAgICAgICAgICAgICAg
ICAnZGlyMi90ZXN0Nic6IHt9LAorICAgICAgICAgICAgfQorICAgICAgICApCisgICAgICAgIGdl
bmVyYXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9h
ZCwgY2xzPVVwbG9hZC5FbmNvZGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJh
dGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydyZXN1bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAg
ICAgICAgICAgICdkaXIxJzogeworICAgICAgICAgICAgICAgICdzdWItZGlyMSc6IHsKKyAgICAg
ICAgICAgICAgICAgICAgJ3Rlc3QxJzogeydhY3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLkZB
SUx9LAorICAgICAgICAgICAgICAgICAgICAndGVzdDInOiB7J2FjdHVhbCc6IFVwbG9hZC5FeHBl
Y3RhdGlvbnMuVElNRU9VVH0sCisgICAgICAgICAgICAgICAgfSwgJ3N1Yi1kaXIyJzogeworICAg
ICAgICAgICAgICAgICAgICAndGVzdDMnOiB7fSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3Q0
Jzoge30sCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgJ2RpcjInOiB7CisgICAg
ICAgICAgICAgICAgJ3N1Yi1kaXIzJzogeyd0ZXN0NSc6IHt9fSwKKyAgICAgICAgICAgICAgICAn
dGVzdDYnOiB7fSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0pKQorCisgICAgZGVmIHRlc3Rf
bm9fc3VpdGUoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIGNv
bW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlf
aWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJy
YW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICkKKyAgICAgICAgd2l0aCBz
ZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBs
b2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICBkZWYgdGVzdF9ub19jb21taXRzKHNlbGYp
OgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHkt
dGVzdHMnLAorICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVF
cnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVy
KQorCisgICAgZGVmIHRlc3RfYnVpbGRib3Qoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9h
ZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb21t
aXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lk
PSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFu
Y2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgZGV0YWlscz1VcGxvYWQu
Y3JlYXRlX2RldGFpbHMob3B0aW9ucz1zZWxmLk9wdGlvbnMoCisgICAgICAgICAgICAgICAgYnVp
bGRib3RfbWFzdGVyPSd3ZWJraXQub3JnJywKKyAgICAgICAgICAgICAgICBidWlsZGVyX25hbWU9
J1F1ZXVlLTEnLAorICAgICAgICAgICAgICAgIGJ1aWxkX251bWJlcj0xLAorICAgICAgICApKSkK
KyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAg
IGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICAgICAgdXBsb2Fk
LmRldGFpbHNbJ2J1aWxkYm90LXdvcmtlciddID0gJ2JvdDEyMycKKyAgICAgICAgZ2VuZXJhdGVk
X2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29uLmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9
VXBsb2FkLkVuY29kZXIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGlj
dFsndGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAg
ICAgJ2J1aWxkYm90LW1hc3Rlcic6ICd3ZWJraXQub3JnJywKKyAgICAgICAgICAgICdidWlsZGVy
LW5hbWUnOiAnUXVldWUtMScsCisgICAgICAgICAgICAnYnVpbGQtbnVtYmVyJzogMSwKKyAgICAg
ICAgICAgICdidWlsZGJvdC13b3JrZXInOiAnYm90MTIzJywKKyAgICAgICAgfSkpCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkJ
KHJldmlzaW9uIDI0Mjk5OSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNr
b3V0L3NjbS9naXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw2ICsyOTAsMTQgQEAgY2xhc3Mg
R2l0KFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVmIG5hdGl2ZV9yZXZpc2lvbihzZWxmLCBw
YXRoKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWyctQycsIHNlbGYuZmluZF9jaGVj
a291dF9yb290KHBhdGgpLCAnbG9nJywgJy0xJywgJy0tcHJldHR5PWZvcm1hdDolSCddKQogCisg
ICAgZGVmIG5hdGl2ZV9icmFuY2goc2VsZiwgcGF0aCk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYu
X3J1bl9naXQoWyctQycsIHNlbGYuZmluZF9jaGVja291dF9yb290KHBhdGgpLCAncmV2LXBhcnNl
JywgJy0tYWJicmV2LXJlZicsICdIRUFEJ10pLnJzdHJpcCgpCisKKyAgICAgICAgIyBGb3IgZ2l0
LXN2bgorICAgICAgICBpZiByZXN1bHQuc3RhcnRzd2l0aCgnaGVhZHMnKToKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHRbNjpdCisgICAgICAgIHJldHVybiByZXN1bHQKKwogICAgIGRlZiBzdm5f
dXJsKHNlbGYpOgogICAgICAgICBnaXRfY29tbWFuZCA9IFsnc3ZuJywgJ2luZm8nXQogICAgICAg
ICBzdGF0dXMgPSBzZWxmLl9ydW5fZ2l0KGdpdF9jb21tYW5kKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weQko
cmV2aXNpb24gMjQyOTk5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvc2NtL3NjbV9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw5IEBAIGNsYXNz
IE1vY2tTQ00ob2JqZWN0KToKICAgICBkZWYgbmF0aXZlX3JldmlzaW9uKHNlbGYsIHBhdGgpOgog
ICAgICAgICByZXR1cm4gc2VsZi5zdm5fcmV2aXNpb24ocGF0aCkKIAorICAgIGRlZiBuYXRpdmVf
YnJhbmNoKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gJ3RydW5rJworCiAgICAgZGVmIHRp
bWVzdGFtcF9vZl9yZXZpc2lvbihzZWxmLCBwYXRoLCByZXZpc2lvbik6CiAgICAgICAgIHJldHVy
biAnMjAxMy0wMi0wMSAwODo0ODowNSArMDAwMCcKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5
CShyZXZpc2lvbiAyNDI5OTkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC05MDksNiArOTA5LDkg
QEAgRU5ECiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20uaGVhZF9zdm5fcmV2aXNp
b24oKSwgc2VsZi5zY20ubmF0aXZlX3JldmlzaW9uKCcuJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VsZi5zY20ubmF0aXZlX3JldmlzaW9uKCcuJyksICc1JykKIAorICAgIGRlZiB0ZXN0
X25hdGl2ZV9icmFuY2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20u
bmF0aXZlX2JyYW5jaCgnLicpLCAndHJ1bmsnKQorCiAgICAgZGVmIHRlc3RfcHJvcHNldF9wcm9w
Z2V0KHNlbGYpOgogICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnN2bl9jaGVj
a291dF9wYXRoLCAidGVzdF9maWxlIikKICAgICAgICAgZXhwZWN0ZWRfbWltZV90eXBlID0gIngt
YXBwbGljYXRpb24vZm9vLWJhciIKQEAgLTExMTIsNiArMTExNSwxMCBAQCBjbGFzcyBHaXRUZXN0
KFNDTVRlc3QpOgogICAgICAgICBjb21tYW5kID0gWydnaXQnLCAnLUMnLCBzY20uY2hlY2tvdXRf
cm9vdCwgJ3Jldi1wYXJzZScsICdIRUFEJ10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY20u
bmF0aXZlX3JldmlzaW9uKHNjbS5jaGVja291dF9yb290KSwgcnVuX2NvbW1hbmQoY29tbWFuZCku
c3RyaXAoKSkKIAorICAgIGRlZiB0ZXN0X25hdGl2ZV9icmFuY2goc2VsZik6CisgICAgICAgIHNj
bSA9IHNlbGYudHJhY2tpbmdfc2NtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ21hc3Rlcics
IHNjbS5uYXRpdmVfYnJhbmNoKHNjbS5jaGVja291dF9yb290KSkKKwogICAgIGRlZiB0ZXN0X3Jl
bmFtZV9maWxlcyhzZWxmKToKICAgICAgICAgc2NtID0gc2VsZi50cmFja2luZ19zY20KIApAQCAt
MTYyNyw2ICsxNjM0LDkgQEAgY2xhc3MgR2l0U1ZOVGVzdChTQ01UZXN0KToKICAgICAgICAgY29t
bWFuZCA9IFsnZ2l0JywgJy1DJywgc2VsZi5naXRfY2hlY2tvdXRfcGF0aCwgJ3Jldi1wYXJzZScs
ICdIRUFEJ10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfcmV2aXNp
b24oc2VsZi5naXRfY2hlY2tvdXRfcGF0aCksIHJ1bl9jb21tYW5kKGNvbW1hbmQpLnN0cmlwKCkp
CiAKKyAgICBkZWYgdGVzdF9uYXRpdmVfYnJhbmNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCd0cnVuaycsIHNlbGYuc2NtLm5hdGl2ZV9icmFuY2goc2VsZi5naXRfY2hlY2tvdXRf
cGF0aCkpCisKICAgICBkZWYgdGVzdF90b19vYmplY3RfbmFtZShzZWxmKToKICAgICAgICAgcmVs
cGF0aCA9ICd0ZXN0X2ZpbGVfY29tbWl0MScKICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLnJl
YWxwYXRoKG9zLnBhdGguam9pbihzZWxmLmdpdF9jaGVja291dF9wYXRoLCByZWxwYXRoKSkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2
bi5weQkocmV2aXNpb24gMjQyOTk5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
Y2hlY2tvdXQvc2NtL3N2bi5weQkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBjbGFz
cyBTVk4oU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICAgICAgU0NNLl9faW5pdF9fKHNlbGYsIGN3
ZCwgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX2JvZ3VzX2RpciA9IE5vbmUKICAgICAgICAgaWYg
cGF0Y2hfZGlyZWN0b3JpZXMgPT0gW106Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24obWVz
c2FnZT0nRW1wdHkgbGlzdCBvZiBwYXRjaCBkaXJlY3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5p
dF9fJykKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRW1wdHkgbGlzdCBvZiBwYXRjaCBk
aXJlY3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5pdF9fJykKICAgICAgICAgZWxpZiBwYXRjaF9k
aXJlY3RvcmllcyA9PSBOb25lOgogICAgICAgICAgICAgc2VsZi5fcGF0Y2hfZGlyZWN0b3JpZXMg
PSBbc2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRoKGN3ZCwgc2VsZi5jaGVja291dF9yb290KV0KICAg
ICAgICAgZWxzZToKQEAgLTI3OCw2ICsyNzgsMTQgQEAgY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3Np
dG9yeSk6CiAgICAgZGVmIG5hdGl2ZV9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgcmV0
dXJuIHNlbGYuc3ZuX3JldmlzaW9uKHBhdGgpCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxm
LCBwYXRoKToKKyAgICAgICAgcmVsYXRpdmVfdXJsID0gc2VsZi52YWx1ZV9mcm9tX3N2bl9pbmZv
KHBhdGgsICdSZWxhdGl2ZSBVUkwnKVsyOl0KKyAgICAgICAgaWYgcmVsYXRpdmVfdXJsLnN0YXJ0
c3dpdGgoJ3RydW5rJyk6CisgICAgICAgICAgICByZXR1cm4gJ3RydW5rJworICAgICAgICBlbGlm
IHJlbGF0aXZlX3VybC5zdGFydHN3aXRoKCdicmFuY2gnKToKKyAgICAgICAgICAgIHJldHVybiBy
ZWxhdGl2ZV91cmwuc3BsaXQoJy8nKVsxXQorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3t9IGlz
IG5vdCBhIGJyYW5jaCcuZm9ybWF0KHJlbGF0aXZlX3VybC5zcGxpdCgnLycpWzBdKSkKKwogICAg
IGRlZiB0aW1lc3RhbXBfb2ZfcmV2aXNpb24oc2VsZiwgcGF0aCwgcmV2aXNpb24pOgogICAgICAg
ICAjIFdlIHVzZSAtLXhtbCB0byBnZXQgdGltZXN0YW1wcyBsaWtlIDIwMTMtMDItMDhUMDg6MTg6
MDQuOTY0NDA5WgogICAgICAgICByZXBvc2l0b3J5X3Jvb3QgPSBzZWxmLnZhbHVlX2Zyb21fc3Zu
X2luZm8oc2VsZi5jaGVja291dF9yb290LCAnUmVwb3NpdG9yeSBSb290JykKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5w
eQkocmV2aXNpb24gMjQyOTk5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3BsYXRmb3JtaW5mby5weQkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0NiwxMSBAQCBj
bGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAg
cmV0dXJuIHN5cy5tYXhpbnQKIAorICAgIGRlZiBidWlsZF92ZXJzaW9uKHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLmlzX21hYygpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5y
dW5fY29tbWFuZChbJy91c3IvYmluL3N3X3ZlcnMnLCAnLWJ1aWxkVmVyc2lvbiddLCByZXR1cm5f
c3RkZXJyPUZhbHNlLCBpZ25vcmVfZXJyb3JzPVRydWUpLnJzdHJpcCgpCisgICAgICAgIHJldHVy
biBOb25lCisKICAgICBkZWYgeGNvZGVfc2RrX3ZlcnNpb24oc2VsZiwgc2RrX25hbWUpOgogICAg
ICAgICBpZiBzZWxmLmlzX21hYygpOgogICAgICAgICAgICAgIyBBc3N1bWVzIHRoYXQgeGNydW4g
ZG9lcyBub3Qgd3JpdGUgdG8gc3RhbmRhcmQgb3V0cHV0IG9uIGZhaWx1cmUgKGUuZy4gU0RLIGRv
ZXMgbm90IGV4aXN0KS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wbGF0Zm9ybWluZm9fbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHJldmlzaW9uIDI0Mjk5OSkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9j
ay5weQkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1v
bi52ZXJzaW9uX25hbWVfbWFwIGltCiAKIAogY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3Qp
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPVZlcnNp
b24uZnJvbV9uYW1lKCdTbm93IExlb3BhcmQnKSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9z
X25hbWU9J21hYycsIG9zX3ZlcnNpb249VmVyc2lvbi5mcm9tX25hbWUoJ0hpZ2ggU2llcnJhJykp
OgogICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvc192ZXJzaW9uLCBWZXJzaW9uKQogICAgICAg
ICBzZWxmLm9zX25hbWUgPSBvc19uYW1lCiAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IG9zX3Zl
cnNpb24KQEAgLTc4LDYgKzc4LDExIEBAIGNsYXNzIE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToK
ICAgICBkZWYgdGVybWluYWxfd2lkdGgoc2VsZik6CiAgICAgICAgIHJldHVybiA4MAogCisgICAg
ZGVmIGJ1aWxkX3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CisgICAg
ICAgICAgICByZXR1cm4gJzE3QTQwNScKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiB4
Y29kZV9zZGtfdmVyc2lvbihzZWxmLCBzZGtfbmFtZSk6CiAgICAgICAgIHJldHVybiBWZXJzaW9u
KDgsIDEpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CShyZXZpc2lvbiAy
NDI5OTkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKICMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgog
IyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3Jn
KQotIyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IyBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDE3ICszOCwxOSBAQCBpbXBvcnQg
dHJhY2ViYWNrCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmxvZ3V0aWxzIGltcG9ydCBjb25maWd1cmVfbG9nZ2luZwotZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCi1mcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAorZnJvbSB3
ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAogZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZp
ZyBpbXBvcnQgQ29uZmlnCiBmcm9tIHdlYmtpdHB5LnRlc3QuZmluZGVyIGltcG9ydCBGaW5kZXIK
IGZyb20gd2Via2l0cHkudGVzdC5wcmludGVyIGltcG9ydCBQcmludGVyCiBmcm9tIHdlYmtpdHB5
LnRlc3QucnVubmVyIGltcG9ydCBSdW5uZXIsIHVuaXRfdGVzdF9uYW1lCitmcm9tIHdlYmtpdHB5
LnJlc3VsdHMudXBsb2FkIGltcG9ydCBVcGxvYWQKK2Zyb20gd2Via2l0cHkucmVzdWx0cy5vcHRp
b25zIGltcG9ydCB1cGxvYWRfb3B0aW9ucwogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCiAKLV9ob3N0ID0gU3lzdGVtSG9zdCgpCitfaG9zdCA9IEhvc3QoKQogX3dlYmtpdF9y
b290ID0gTm9uZQogCiAKQEAgLTEyNCwxMiArMTI2LDE1IEBAIGNsYXNzIFRlc3RlcihvYmplY3Qp
OgogICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9J3VzYWdlOiAl
cHJvZyBbb3B0aW9uc10gW2FyZ3MuLi5dJykKIAogICAgICAgICAjICBDb25maWd1cmF0aW9uIG9w
dGlvbnMgb25seSBlZmZlY3QgdGhlIGJ1aWxkaW5nIG9mIGxsZGJXZWJLaXRUZXN0ZXIuCi0gICAg
ICAgIGNvbmZpZ3VyYXRpb25fZ3JvdXAgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdD
b25maWd1cmF0aW9uIG9wdGlvbnMnKQotICAgICAgICBjb25maWd1cmF0aW9uX2dyb3VwLmFkZF9v
cHRpb24oJy0tZGVidWcnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9J0RlYnVnJywgZGVz
dD0iY29uZmlndXJhdGlvbiIsCi0gICAgICAgICAgICBoZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRp
b24gdG8gRGVidWcnKQotICAgICAgICBjb25maWd1cmF0aW9uX2dyb3VwLmFkZF9vcHRpb24oJy0t
cmVsZWFzZScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nUmVsZWFzZScsIGRlc3Q9ImNv
bmZpZ3VyYXRpb24iLAotICAgICAgICAgICAgaGVscD0nU2V0IHRoZSBjb25maWd1cmF0aW9uIHRv
IFJlbGVhc2UnKQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cChjb25maWd1cmF0aW9u
X2dyb3VwKQorICAgICAgICBmb3IgZ3JvdXBfbmFtZSwgZ3JvdXBfb3B0aW9ucyBpbiB7J1VwbG9h
ZCBPcHRpb25zJzogdXBsb2FkX29wdGlvbnMoKSwgJ0NvbmZpZ3VyYXRpb24gT3B0aW9ucyc6IFsK
KyAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWRlYnVnJywgYWN0aW9uPSdzdG9y
ZV9jb25zdCcsIGNvbnN0PSdEZWJ1ZycsIGRlc3Q9ImNvbmZpZ3VyYXRpb24iLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIERl
YnVnJyksCisgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1yZWxlYXNlJywgYWN0
aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PSdSZWxlYXNlJywgZGVzdD0iY29uZmlndXJhdGlvbiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTZXQgdGhlIGNvbmZpZ3Vy
YXRpb24gdG8gUmVsZWFzZScpLAorICAgICAgICBdfS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAg
IG9wdGlvbl9ncm91cCA9IG9wdHBhcnNlLk9wdGlvbkdyb3VwKHBhcnNlciwgZ3JvdXBfbmFtZSkK
KyAgICAgICAgICAgIG9wdGlvbl9ncm91cC5hZGRfb3B0aW9ucyhncm91cF9vcHRpb25zKQorICAg
ICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAob3B0aW9uX2dyb3VwKQogCiAgICAgICAg
IHBhcnNlci5hZGRfb3B0aW9uKCctYScsICctLWFsbCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRl
ZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biBhbGwgdGhl
IHRlc3RzJykKQEAgLTE4MSwxMSArMTg2LDEyIEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAg
ICAgICBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkgaW1wb3J0IGF1dG9pbnN0YWxsX2V2ZXJ5dGhp
bmcKICAgICAgICAgYXV0b2luc3RhbGxfZXZlcnl0aGluZygpCiAKKyAgICAgICAgc3RhcnRfdGlt
ZSA9IHRpbWUudGltZSgpCisgICAgICAgIGNvbmZpZyA9IENvbmZpZyhfaG9zdC5leGVjdXRpdmUs
IHNlbGYuZmluZGVyLmZpbGVzeXN0ZW0pCisgICAgICAgIGNvbmZpZ3VyYXRpb25fdG9fdXNlID0g
c2VsZi5fb3B0aW9ucy5jb25maWd1cmF0aW9uIG9yIGNvbmZpZy5kZWZhdWx0X2NvbmZpZ3VyYXRp
b24oKQogICAgICAgICBpZiB3aWxsX3J1bl9sbGRiX3dlYmtpdF90ZXN0czoKICAgICAgICAgICAg
IHNlbGYucHJpbnRlci53cml0ZV91cGRhdGUoJ0J1aWxkaW5nIGxsZGJXZWJLaXRUZXN0ZXIgLi4u
JykKICAgICAgICAgICAgIGJ1aWxkX2xsZGJ3ZWJraXR0ZXN0ZXIgPSBzZWxmLmZpbmRlci5maWxl
c3lzdGVtLmpvaW4oX3dlYmtpdF9yb290LCAnVG9vbHMnLCAnU2NyaXB0cycsICdidWlsZC1sbGRi
d2Via2l0dGVzdGVyJykKLSAgICAgICAgICAgIGNvbmZpZyA9IENvbmZpZyhfaG9zdC5leGVjdXRp
dmUsIHNlbGYuZmluZGVyLmZpbGVzeXN0ZW0pCi0gICAgICAgICAgICBjb25maWd1cmF0aW9uX3Rv
X3VzZSA9IHNlbGYuX29wdGlvbnMuY29uZmlndXJhdGlvbiBvciBjb25maWcuZGVmYXVsdF9jb25m
aWd1cmF0aW9uKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBfaG9zdC5leGVj
dXRpdmUucnVuX2FuZF90aHJvd19pZl9mYWlsKFtidWlsZF9sbGRid2Via2l0dGVzdGVyLCBjb25m
aWcuZmxhZ19mb3JfY29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uX3RvX3VzZSldLCBxdWlldD0o
bm90IGJvb2woc2VsZi5fb3B0aW9ucy52ZXJib3NlKSkpCiAgICAgICAgICAgICBleGNlcHQgU2Ny
aXB0RXJyb3IgYXMgZToKQEAgLTIxOCw2ICsyMjQsNyBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToK
ICAgICAgICAgdGVzdF9ydW5uZXIgPSBSdW5uZXIoc2VsZi5wcmludGVyLCBsb2FkZXIpCiAgICAg
ICAgIHRlc3RfcnVubmVyLnJ1bihwYXJhbGxlbF90ZXN0cywgc2VsZi5fb3B0aW9ucy5jaGlsZF9w
cm9jZXNzZXMpCiAgICAgICAgIHRlc3RfcnVubmVyLnJ1bihzZXJpYWxfdGVzdHMsIDEpCisgICAg
ICAgIGVuZF90aW1lID0gdGltZS50aW1lKCkKIAogICAgICAgICBzZWxmLnByaW50ZXIucHJpbnRf
cmVzdWx0KHRpbWUudGltZSgpIC0gc3RhcnQpCiAKQEAgLTIzMiw5ICsyMzksNTAgQEAgY2xhc3Mg
VGVzdGVyKG9iamVjdCk6CiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuY292ZXJhZ2U6CiAgICAg
ICAgICAgICBjb3Yuc3RvcCgpCiAgICAgICAgICAgICBjb3Yuc2F2ZSgpCisKKyAgICAgICAgZmFp
bGVkX3VwbG9hZHMgPSAwCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmVwb3J0X3VybHM6Cisg
ICAgICAgICAgICBzZWxmLnByaW50ZXIubWV0ZXIud3JpdGVsbignXG4nKQorICAgICAgICAgICAg
c2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgnUHJlcGFyaW5nIHVwbG9hZCBkYXRhIC4uLicpCisK
KyAgICAgICAgICAgIHJlc3VsdHMgPSB7dGVzdDoge30gZm9yIHRlc3QgaW4gdGVzdF9ydW5uZXIu
dGVzdHNfcnVufQorICAgICAgICAgICAgZm9yIHRlc3QsIGVycm9ycyBpbiB0ZXN0X3J1bm5lci5l
cnJvcnM6CisgICAgICAgICAgICAgICAgcmVzdWx0c1t0ZXN0XSA9IFVwbG9hZC5jcmVhdGVfdGVz
dF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRVJST1IsIGxvZz0nL24nLmpvaW4o
ZXJyb3JzKSkKKyAgICAgICAgICAgIGZvciB0ZXN0LCBmYWlsdXJlcyBpbiB0ZXN0X3J1bm5lci5m
YWlsdXJlczoKKyAgICAgICAgICAgICAgICByZXN1bHRzW3Rlc3RdID0gVXBsb2FkLmNyZWF0ZV90
ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMLCBsb2c9Jy9uJy5qb2lu
KGZhaWx1cmVzKSkKKworICAgICAgICAgICAgX2hvc3QuaW5pdGlhbGl6ZV9zY20oKQorICAgICAg
ICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10
ZXN0cycsCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbj1VcGxvYWQuY3JlYXRlX2NvbmZp
Z3VyYXRpb24oCisgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtPV9ob3N0LnBsYXRmb3JtLm9z
X25hbWUsCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb249c3RyKF9ob3N0LnBsYXRmb3JtLm9z
X3ZlcnNpb24pLAorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uX25hbWU9X2hvc3QucGxhdGZv
cm0ub3NfdmVyc2lvbl9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgIHN0eWxlPWNvbmZpZ3Vy
YXRpb25fdG9fdXNlLAorICAgICAgICAgICAgICAgICAgICBzZGs9X2hvc3QucGxhdGZvcm0uYnVp
bGRfdmVyc2lvbigpLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgZGV0YWls
cz1VcGxvYWQuY3JlYXRlX2RldGFpbHMob3B0aW9ucz1zZWxmLl9vcHRpb25zKSwKKyAgICAgICAg
ICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICAg
ICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICAgICAgaWQ9X2hvc3Qu
c2NtKCkubmF0aXZlX3JldmlzaW9uKF93ZWJraXRfcm9vdCksCisgICAgICAgICAgICAgICAgICAg
IGJyYW5jaD1faG9zdC5zY20oKS5uYXRpdmVfYnJhbmNoKF93ZWJraXRfcm9vdCksCisgICAgICAg
ICAgICAgICAgKV0sCisgICAgICAgICAgICAgICAgcnVuX3N0YXRzPVVwbG9hZC5jcmVhdGVfcnVu
X3N0YXRzKAorICAgICAgICAgICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAg
ICAgICAgICAgICAgICAgIGVuZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgICAgICAgICB0
ZXN0c19za2lwcGVkPWxlbih0ZXN0X3J1bm5lci50ZXN0c19ydW4pIC0gbGVuKHBhcmFsbGVsX3Rl
c3RzKSAtIGxlbihzZXJpYWxfdGVzdHMpLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAg
ICAgICAgcmVzdWx0cz1yZXN1bHRzLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgZm9yIHVy
bCBpbiBzZWxmLl9vcHRpb25zLnJlcG9ydF91cmxzOgorICAgICAgICAgICAgICAgIHNlbGYucHJp
bnRlci53cml0ZV91cGRhdGUoJ1VwbG9hZGluZyB0byB7fSAuLi4nLmZvcm1hdCh1cmwpKQorICAg
ICAgICAgICAgICAgIGZhaWxlZF91cGxvYWRzID0gZmFpbGVkX3VwbG9hZHMgaWYgdXBsb2FkLnVw
bG9hZCh1cmwsIGxvZ19saW5lPXNlbGYucHJpbnRlci5tZXRlci53cml0ZWxuKSBlbHNlIChmYWls
ZWRfdXBsb2FkcyArIDEpCisgICAgICAgICAgICBzZWxmLnByaW50ZXIubWV0ZXIud3JpdGVsbign
VXBsb2FkcyBjb21wbGV0ZWQhJykKKworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdl
OgogICAgICAgICAgICAgY292LnJlcG9ydChzaG93X21pc3Npbmc9RmFsc2UpCiAKLSAgICAgICAg
cmV0dXJuIG5vdCBzZWxmLnByaW50ZXIubnVtX2Vycm9ycyBhbmQgbm90IHNlbGYucHJpbnRlci5u
dW1fZmFpbHVyZXMKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLnByaW50ZXIubnVtX2Vycm9ycyBh
bmQgbm90IHNlbGYucHJpbnRlci5udW1fZmFpbHVyZXMgYW5kIG5vdCBmYWlsZWRfdXBsb2Fkcwog
CiAgICAgZGVmIF9jaGVja19pbXBvcnRzKHNlbGYsIG5hbWVzKToKICAgICAgICAgZm9yIG5hbWUg
aW4gbmFtZXM6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkJKHJldmlz
aW9uIDI0Mjk5OSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgUnVubmVyKG9iamVjdCk6CiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHByaW50ZXIsIGxvYWRlcik6CiAgICAgICAgIHNlbGYucHJpbnRl
ciA9IHByaW50ZXIKICAgICAgICAgc2VsZi5sb2FkZXIgPSBsb2FkZXIKLSAgICAgICAgc2VsZi50
ZXN0c19ydW4gPSAwCisgICAgICAgIHNlbGYudGVzdHNfcnVuID0gW10KICAgICAgICAgc2VsZi5l
cnJvcnMgPSBbXQogICAgICAgICBzZWxmLmZhaWx1cmVzID0gW10KICAgICAgICAgc2VsZi53b3Jr
ZXJfZmFjdG9yeSA9IGxhbWJkYSBjYWxsZXI6IF9Xb3JrZXIoY2FsbGVyLCBzZWxmLmxvYWRlcikK
QEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgUnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxm
LnByaW50ZXIucHJpbnRfc3RhcnRlZF90ZXN0KHNvdXJjZSwgdGVzdF9uYW1lKQogICAgICAgICAg
ICAgcmV0dXJuCiAKLSAgICAgICAgc2VsZi50ZXN0c19ydW4gKz0gMQorICAgICAgICBzZWxmLnRl
c3RzX3J1bi5hcHBlbmQodGVzdF9uYW1lKQogICAgICAgICBpZiBmYWlsdXJlczoKICAgICAgICAg
ICAgIHNlbGYuZmFpbHVyZXMuYXBwZW5kKCh0ZXN0X25hbWUsIGZhaWx1cmVzKSkKICAgICAgICAg
aWYgZXJyb3JzOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L3J1bm5lcl91bml0
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVy
X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNDI5OTkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw2IEBA
IGNsYXNzIFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgndGVzdDMgKEZvbyknLCAnRScsICd0ZXN0M1xuZXJyZWQnKSkKICAgICAgICAg
cnVubmVyID0gUnVubmVyKFByaW50ZXIoc3RyZWFtLCBvcHRpb25zKSwgbG9hZGVyKQogICAgICAg
ICBydW5uZXIucnVuKFsnRm9vLnRlc3QxJywgJ0Zvby50ZXN0MicsICdGb28udGVzdDMnXSwgMSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5uZXIudGVzdHNfcnVuLCAzKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGxlbihydW5uZXIudGVzdHNfcnVuKSwgMykKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChsZW4ocnVubmVyLmZhaWx1cmVzKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChsZW4ocnVubmVyLmVycm9ycyksIDEpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3RoaXJkcGFydHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNDI5OTkpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTEsNCArMSw1IEBACiAjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRv
bmVrQHdlYmtpdC5vcmcpCisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNCw2ICsxMTUs
OCBAQCBjbGFzcyBBdXRvaW5zdGFsbEltcG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgICAgIHNl
bGYuX2luc3RhbGxfcHl0ZXN0X3RpbWVvdXQoKQogICAgICAgICBlbGlmICcucHl0ZXN0JyBpbiBm
dWxsbmFtZToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfcHl0ZXN0KCkKKyAgICAgICAgZWxp
ZiAnLnJlcXVlc3RzJyBpbiBmdWxsbmFtZToKKyAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfcmVx
dWVzdHMoKQogCiAgICAgZGVmIF9pbnN0YWxsX21lY2hhbml6ZShzZWxmKToKICAgICAgICAgc2Vs
Zi5faW5zdGFsbCgiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJj
ZS9tL21lY2hhbml6ZS9tZWNoYW5pemUtMC4yLjUudGFyLmd6IiwKQEAgLTE2MSw2ICsxNjQsMjEg
QEAgY2xhc3MgQXV0b2luc3RhbGxJbXBvcnRIb29rKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2lu
c3RhbGwoImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9hMi9lYy80MTVk
MGNjY2MxZWQ0MWNkN2ZkZjY5YWQ5ODlkYTE2YThkMTMwNTc5OTYzNzEwMDRjYWI0YmFmYzQ4ZjMv
cHl0ZXN0LTMuNi4yLnRhci5neiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0
ZXN0LTMuNi4yL3NyYy9weXRlc3QucHkiKQogCisgICAgZGVmIF9pbnN0YWxsX3JlcXVlc3RzKHNl
bGYpOgorICAgICAgICBzZWxmLl9lbnN1cmVfYXV0b2luc3RhbGxlZF9kaXJfaXNfaW5fc3lzX3Bh
dGgoKQorICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5v
cmcvcGFja2FnZXMvMDYvYjgvZDFlYTM4NTEzYzIyZThjOTA2Mjc1ZDEzNTgxOGZlZTE2YWQ4NDk1
OTg1OTU2YTliN2UyYmIyMTk0MmExL2NlcnRpZmktMjAxOS4zLjkudGFyLmd6IiwKKyAgICAgICAg
ICAgICAgICAgICAgICAiY2VydGlmaS0yMDE5LjMuOS9jZXJ0aWZpIikKKyAgICAgICAgc2VsZi5f
aW5zdGFsbCgiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2ZjL2JiL2E1
NzY4YzIzMGY5ZGRiMDNhY2M5ZWYzZjBkNGEzY2Y5MzQ2MjQ3Mzc5NWQxOGU5NTM1NDk4YzhmOTI5
ZC9jaGFyZGV0LTMuMC40LnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImNoYXJkZXQt
My4wLjQvY2hhcmRldCIpCisgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0
aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9mYy9iYi9hNTc2OGMyMzBmOWRkYjAzYWNjOWVmM2YwZDRh
M2NmOTM0NjI0NzM3OTVkMThlOTUzNTQ5OGM4ZjkyOWQvY2hhcmRldC0zLjAuNC50YXIuZ3oiLAor
ICAgICAgICAgICAgICAgICAgICAgICJjaGFyZGV0LTMuMC40L2NoYXJkZXQiKQorICAgICAgICBz
ZWxmLl9pbnN0YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvYWQv
MTMvZWI1Njk1MWI2Zjc5NTBjYWRiNTc5Y2ExNjZlNDQ4YmE3N2Y5ZDI0ZWZjMDNlZGQ3ZTU1ZmE1
N2QwNGI3L2lkbmEtMi44LnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImlkbmEtMi44
L2lkbmEiKQorICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3Rl
ZC5vcmcvcGFja2FnZXMvYjEvNTMvMzdkODJhYjM5MTM5MzU2NWYyZjgzMWI4ZWVkYmZmZDU3ZGI1
YTcxODIxNmY4MmYxYThiNGQzODFhMWMxL3VybGxpYjMtMS4yNC4xLnRhci5neiIsCisgICAgICAg
ICAgICAgICAgICAgICAgInVybGxpYjMtMS4yNC4xL3NyYy91cmxsaWIzIikKKyAgICAgICAgc2Vs
Zi5faW5zdGFsbCgiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzLzUyLzJj
LzUxNGU0YWMyNWRhMmIwOGNhNWE0NjRjNTA0NjM2ODIxMjYzODVjNDI3MmMxODE5Mzg3NmU5MWY0
YmMzOC9yZXF1ZXN0cy0yLjIxLjAudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAicmVx
dWVzdHMtMi4yMS4wL3JlcXVlc3RzIikKKwogICAgIGRlZiBfaW5zdGFsbF9weWxpbnQoc2VsZik6
CiAgICAgICAgIHNlbGYuX2Vuc3VyZV9hdXRvaW5zdGFsbGVkX2Rpcl9pc19pbl9zeXNfcGF0aCgp
CiAgICAgICAgIGlmIChub3Qgc2VsZi5fZnMuZXhpc3RzKHNlbGYuX2ZzLmpvaW4oX0FVVE9JTlNU
QUxMRURfRElSLCAicHlsaW50IikpIG9yCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0
Mjk5OSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5p
dHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTE4MywxMCArMTgzLDEwIEBAIGNsYXNzIFBhdGNo
UHJvY2Vzc2luZ1F1ZXVlVGVzdChDb21tYW5kc1QKICAgICAgICAgcXVldWUuX29wdGlvbnMgPSBN
b2NrKCkKICAgICAgICAgcXVldWUuX29wdGlvbnMucG9ydCA9IE5vbmUKICAgICAgICAgcGF0Y2gg
PSBxdWV1ZS5fdG9vbC5idWdzLmZldGNoX2F0dGFjaG1lbnQoMTAwMDEpCi0gICAgICAgIGV4cGVj
dGVkX2xvZ3MgPSAiIiJNT0NLIGFkZF9hdHRhY2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAwLCBk
ZXNjcmlwdGlvbj1BcmNoaXZlIG9mIGxheW91dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9yIG1h
Yy1zbm93bGVvcGFyZCBmaWxlbmFtZT1sYXlvdXQtdGVzdC1yZXN1bHRzLnppcCBtaW1ldHlwZT1O
b25lCisgICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJNT0NLIGFkZF9hdHRhY2htZW50X3RvX2J1
ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlwdGlvbj1BcmNoaXZlIG9mIGxheW91dC10ZXN0LXJlc3Vs
dHMgZnJvbSBib3QgZm9yIG1hYy1oaWdoc2llcnJhIGZpbGVuYW1lPWxheW91dC10ZXN0LXJlc3Vs
dHMuemlwIG1pbWV0eXBlPU5vbmUKIC0tIEJlZ2luIGNvbW1lbnQgLS0KIFRoZSBhdHRhY2hlZCB0
ZXN0IGZhaWx1cmVzIHdlcmUgc2VlbiB3aGlsZSBydW5uaW5nIHJ1bi13ZWJraXQtdGVzdHMgb24g
dGhlIG1vY2stcXVldWUuCi1Qb3J0OiBtYWMtc25vd2xlb3BhcmQgIFBsYXRmb3JtOiBNb2NrUGxh
dGZvcm0gMS4wCitQb3J0OiBtYWMtaGlnaHNpZXJyYSAgUGxhdGZvcm06IE1vY2tQbGF0Zm9ybSAx
LjAKIC0tIEVuZCBjb21tZW50IC0tCiAiIiIKICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2Vy
dF9vdXRwdXRzKHNlbGYsIHF1ZXVlLl91cGxvYWRfcmVzdWx0c19hcmNoaXZlX2Zvcl9wYXRjaCwg
W3BhdGNoLCBNb2NrKCldLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364816</attachid>
            <date>2019-03-15 11:29:48 -0700</date>
            <delta_ts>2019-03-15 15:20:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190315091629.patch</filename>
            <type>text/plain</type>
            <size>41510</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0Mjk5OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE5LTAzLTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6Cisg
ICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOiBBZGQgcmVxdWVzdHMg
YXV0by1pbnN0YWxsLgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxsX3Jl
cXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBs
b2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGlu
Zy4KKwogMjAxOS0wMy0xNCAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNv
bT4KIAogICAgICAgICBbV2luXVtNaW5Ccm93c2VyXVtXSzJdIEltcGxlbWVudCBjcmVhdGVOZXdQ
YWdlIG9mIFdLUGFnZVVJQ2xpZW50IHRvIG9wZW4gYSBuZXcgd2luZG93CkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5pdF9fLnB5CShub25leGlzdGVudCkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzIEBACisjIFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGly
ZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKKworIyBLZWVwIHRoaXMgZmlsZSBmcmVlIG9mIGFueSBj
b2RlIG9yIGltcG9ydCBzdGF0ZW1lbnRzIHRoYXQgY291bGQKKyMgY2F1c2UgZWl0aGVyIGFuIGVy
cm9yIHRvIG9jY3VyIG9yIGEgbG9nIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLgorIyBUaGlzIGVuc3Vy
ZXMgdGhhdCBjYWxsaW5nIGNvZGUgY2FuIGltcG9ydCBpbml0aWFsaXphdGlvbiBjb2RlIGZyb20K
KyMgd2Via2l0cHkgYmVmb3JlIGFueSBlcnJvcnMgb3IgbG9nIG1lc3NhZ2VzIGR1ZSB0byBjb2Rl
IGluIHRoaXMgZmlsZS4KKyMgSW5pdGlhbGl6YXRpb24gY29kZSBjYW4gaW5jbHVkZSB0aGluZ3Mg
bGlrZSB2ZXJzaW9uLWNoZWNraW5nIGNvZGUgYW5kCisjIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBj
b2RlLgorIworIyBXZSBkbyBub3QgZXhlY3V0ZSBhbnkgdmVyc2lvbi1jaGVja2luZyBjb2RlIG9y
IGxvZ2dpbmcgY29uZmlndXJhdGlvbgorIyBjb2RlIGluIHRoaXMgZmlsZSBzbyB0aGF0IGNhbGxl
cnMgY2FuIG9wdC1pbiBhcyB0aGV5IHdhbnQuICBUaGlzIGFsc28KKyMgYWxsb3dzIGRpZmZlcmVu
dCBjYWxsZXJzIHRvIGNob29zZSBkaWZmZXJlbnQgaW5pdGlhbGl6YXRpb24gY29kZSwKKyMgYXMg
bmVjZXNzYXJ5LgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlv
bnMucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3B0cGFyc2UKKworCitkZWYgdXBsb2FkX29w
dGlvbnMoKToKKyAgICByZXR1cm4gWworICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1y
ZXBvcnQnLCBhY3Rpb249J2FwcGVuZCcsIGRlc3Q9J3JlcG9ydF91cmxzJywgaGVscD0nVVJMIChv
ciBVUkxzKSB0byByZXBvcnQgdGVzdCByZXN1bHRzIHRvJyksCisgICAgICAgIG9wdHBhcnNlLm1h
a2Vfb3B0aW9uKCctLWJ1aWxkYm90LW1hc3RlcicsIGhlbHA9J1RoZSB1cmwgb2YgdGhlIGJ1aWxk
Ym90IG1hc3Rlci4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRlci1u
YW1lJywgaGVscD0nVGhlIG5hbWUgb2YgdGhlIGJ1aWxkYm90IGJ1aWxkZXIgdGVzdHMgd2VyZSBy
dW4gb24uJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkLW51bWJlcics
IGhlbHA9J1RoZSBidWlsZGJvdCBidWlsZCBudW1iZXIgdGVzdHMgYXJlIGFzc29jaWF0ZWQgd2l0
aC4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRib3Qtd29ya2VyJywg
aGVscD0nVGhlIGJ1aWxkYm90IHdvcmtlciB0ZXN0cyB3ZXJlIHJ1biBvbi4nKSwKKyAgICBdCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE4OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMg
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
IyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnJlcXVlc3Rz
CisKK2ltcG9ydCBqc29uCitpbXBvcnQgcmVxdWVzdHMKK2ltcG9ydCBzeXMKKworaW1wb3J0IHBs
YXRmb3JtIGFzIHBsYXRmb3JtXworCisKK2NsYXNzIFVwbG9hZChvYmplY3QpOgorICAgIFVQTE9B
RF9FTkRQT0lOVCA9ICcvYXBpL3VwbG9hZCcKKyAgICBCVUlMREJPVF9ERVRBSUxTID0gWydidWls
ZGJvdC1tYXN0ZXInLCAnYnVpbGRlci1uYW1lJywgJ2J1aWxkLW51bWJlcicsICdidWlsZGJvdC13
b3JrZXInXQorICAgIFZFUlNJT04gPSAwCisKKyAgICBjbGFzcyBFeHBlY3RhdGlvbnM6CisgICAg
ICAgICMgVGhlc2UgYXJlIG9yZGVyZWQgYnkgcHJpb3JpdHksIG1lYW5pbmcgdGhhdCBhIHRlc3Qg
d2hpY2ggYm90aCBjcmFzaGVzIGFuZCBoYXMKKyAgICAgICAgIyBhIHdhcm5pbmcgc2hvdWxkIGJl
IGNvbnNpZGVyZWQgdG8gaGF2ZSBjcmFzaGVkLgorICAgICAgICBPUkRFUiA9IFsKKyAgICAgICAg
ICAgICdDUkFTSCcsCisgICAgICAgICAgICAnVElNRU9VVCcsCisgICAgICAgICAgICAnSU1BR0Un
LCAgICMgSW1hZ2UtZGlmZgorICAgICAgICAgICAgJ0FVRElPJywgICAjIEF1ZGlvLWRpZmYKKyAg
ICAgICAgICAgICdURVhUJywgICAgIyBUZXh0LWRpZmYKKyAgICAgICAgICAgICdGQUlMJywKKyAg
ICAgICAgICAgICdFUlJPUicsCisgICAgICAgICAgICAnV0FSTklORycsCisgICAgICAgICAgICAn
UEFTUycsCisgICAgICAgIF0KKyAgICAgICAgQ1JBU0gsIFRJTUVPVVQsIElNQUdFLCBBVURJTywg
VEVYVCwgRkFJTCwgRVJST1IsIFdBUk5JTkcsIFBBU1MgPSBPUkRFUgorCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBjcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgIHBsYXRmb3Jt
PU5vbmUsCisgICAgICAgICAgICBpc19zaW11bGF0b3I9RmFsc2UsCisgICAgICAgICAgICB2ZXJz
aW9uPU5vbmUsCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9Tm9uZSwKKyAgICAgICAgICAgIHZl
cnNpb25fbmFtZT1Ob25lLAorICAgICAgICAgICAgbW9kZWw9Tm9uZSwKKyAgICAgICAgICAgIHN0
eWxlPU5vbmUsICAgIyBEZWJ1Zy9Qcm9kdWN0aW9uL1JlbGVhc2UKKyAgICAgICAgICAgIGZsYXZv
cj1Ob25lLCAgIyBEdW1waW5nIGdyb3VuZCBzdWl0ZS13aWRlIGNvbmZpZ3VyYXRpb24gY2hhbmdl
cyAoaWUsIEd1YXJkTWFsbG9jKQorICAgICAgICAgICAgc2RrPU5vbmUsCisgICAgICAgICk6CisK
KyAgICAgICAgIyBUaGlzIGRldmlhdGVzIHNsaWdodGx5IGZyb20gdGhlIHJlc3Qgb2Ygd2Via2l0
cHksIGJ1dCBpdCBhbGxvd3MgdGhpcyBmaWxlIHRvIGJlIGVudGlyZWx5IHBvcnRhYmxlLgorICAg
ICAgICBjb25maWcgPSBkaWN0KAorICAgICAgICAgICAgcGxhdGZvcm09cGxhdGZvcm0gb3IgKHBs
YXRmb3JtXy5zeXN0ZW0oKSBpZiBwbGF0Zm9ybV8uc3lzdGVtKCkgIT0gJ0RhcndpbicgZWxzZSAn
bWFjJykubG93ZXIoKSwKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1pc19zaW11bGF0b3IsCisg
ICAgICAgICAgICB2ZXJzaW9uPXZlcnNpb24gb3IgKHBsYXRmb3JtXy5yZWxlYXNlKCkgaWYgcGxh
dGZvcm1fLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVsc2UgcGxhdGZvcm1fLm1hY192ZXIoKVswXSks
CisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlIG9yIHBsYXRmb3JtXy5tYWNo
aW5lKCksCisgICAgICAgICkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gY29uZmlnLml0ZXJp
dGVtcygpOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCd7fSBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24n
LmZvcm1hdChrZXkpKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkaWN0KHZlcnNpb25fbmFt
ZT12ZXJzaW9uX25hbWUsIG1vZGVsPW1vZGVsLCBzdHlsZT1zdHlsZSwgZmxhdm9yPWZsYXZvciwg
c2RrPXNkaykuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgICAgICBjb25maWdba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiBjb25m
aWcKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2NvbW1pdChyZXBvc2l0b3J5
X2lkPU5vbmUsIGlkPU5vbmUsIGJyYW5jaD1Ob25lKToKKyAgICAgICAgY29tbWl0ID0gZGljdChy
ZXBvc2l0b3J5X2lkPXJlcG9zaXRvcnlfaWQsIGlkPWlkKQorICAgICAgICBmb3Iga2V5LCB2YWx1
ZSBpbiBjb21taXQuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgor
ICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IG11c3QgYmUgZGVmaW5lZCBpbiBh
IGNvbW1pdCcuZm9ybWF0KGtleSkpCisgICAgICAgIGlmIGJyYW5jaDoKKyAgICAgICAgICAgIGNv
bW1pdFsnYnJhbmNoJ10gPSBicmFuY2gKKyAgICAgICAgcmV0dXJuIGNvbW1pdAorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfZGV0YWlscyhsaW5rPU5vbmUsIG9wdGlvbnM9Tm9u
ZSwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCoqa3dhcmdzKQorICAgICAgICBp
ZiBsaW5rOgorICAgICAgICAgICAgcmVzdWx0WydsaW5rJ10gPSBsaW5rCisKKyAgICAgICAgaWYg
b3B0aW9uczoKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIFVwbG9hZC5CVUlMREJPVF9ERVRB
SUxTOgorICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihvcHRpb25zLCBlbGVtZW50LnJl
cGxhY2UoJy0nLCAnXycpLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbZWxlbWVudF0gPSB2YWx1ZQorICAgICAg
ICByZXR1cm4gcmVzdWx0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9ydW5f
c3RhdHMoc3RhcnRfdGltZT1Ob25lLCBlbmRfdGltZT1Ob25lLCB0ZXN0c19za2lwcGVkPU5vbmUs
ICoqa3dhcmdzKToKKyAgICAgICAgc3RhdHMgPSBkaWN0KCoqa3dhcmdzKQorICAgICAgICBmb3Ig
a2V5LCB2YWx1ZSBpbiBkaWN0KHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwgZW5kX3RpbWU9ZW5kX3Rp
bWUsIHRlc3RzX3NraXBwZWQ9dGVzdHNfc2tpcHBlZCkuaXRlcml0ZW1zKCk6CisgICAgICAgICAg
ICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzdGF0c1trZXldID0gdmFs
dWUKKyAgICAgICAgcmV0dXJuIHN0YXRzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNy
ZWF0ZV90ZXN0X3Jlc3VsdChleHBlY3RlZD1Ob25lLCBhY3R1YWw9Tm9uZSwgbG9nPU5vbmUsICoq
a3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgqKmt3YXJncykKKworICAgICAgICAjIFRl
c3RzIHdoaWNoIGRvbid0IGRlY2xhcmUgZXhwZWN0YXRpb25zIG9yIHJlc3VsdHMgYXJlIGFzc3Vt
ZWQgdG8gaGF2ZSBwYXNzZWQuCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRpY3QoZXhwZWN0
ZWQ9ZXhwZWN0ZWQsIGFjdHVhbD1hY3R1YWwsIGxvZz1sb2cpLml0ZXJpdGVtcygpOgorICAgICAg
ICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0g
PSB2YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
c3VpdGU9Tm9uZSwgY29uZmlndXJhdGlvbj1Ob25lLCBjb21taXRzPVtdLCB0aW1lc3RhbXA9Tm9u
ZSwgZGV0YWlscz1Ob25lLCBydW5fc3RhdHM9Tm9uZSwgcmVzdWx0cz17fSk6CisgICAgICAgIHNl
bGYuc3VpdGUgPSBzdWl0ZQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0
aW9uCisgICAgICAgIHNlbGYuY29tbWl0cyA9IGNvbW1pdHMKKyAgICAgICAgc2VsZi50aW1lc3Rh
bXAgPSB0aW1lc3RhbXAKKyAgICAgICAgc2VsZi5kZXRhaWxzID0gZGV0YWlscworICAgICAgICBz
ZWxmLnJ1bl9zdGF0cyA9IHJ1bl9zdGF0cworICAgICAgICBzZWxmLnJlc3VsdHMgPSByZXN1bHRz
CisKKyAgICBjbGFzcyBFbmNvZGVyKGpzb24uSlNPTkVuY29kZXIpOgorCisgICAgICAgIGRlZiBk
ZWZhdWx0KHNlbGYsIG9iaik6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgVXBsb2Fk
KToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb2JqLnN1aXRlOgorICAgICAgICAgICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCdObyBzdWl0ZSBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxvYWQn
KQorICAgICAgICAgICAgICAgIGlmIG5vdCBvYmouY29tbWl0czoKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignTm8gY29tbWl0cyBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxv
YWQnKQorCisgICAgICAgICAgICAgICAgZGV0YWlscyA9IG9iai5kZXRhaWxzIG9yIG9iai5jcmVh
dGVfZGV0YWlscygpCisgICAgICAgICAgICAgICAgYnVpbGRib3RfYXJncyA9IFtkZXRhaWxzLmdl
dChhcmcsIE5vbmUpIGlzIE5vbmUgZm9yIGFyZyBpbiBvYmouQlVJTERCT1RfREVUQUlMU10KKyAg
ICAgICAgICAgICAgICBpZiBhbnkoYnVpbGRib3RfYXJncykgYW5kIG5vdCBhbGwoYnVpbGRib3Rf
YXJncyk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0FsbCBidWlsZGJv
dCBkZXRhaWxzIG11c3QgYmUgZGVmaW5lZCBmb3IgdXBsb2FkJykKKworICAgICAgICAgICAgICAg
IGRlZiB1bnBhY2tfdGVzdChjdXJyZW50LCBwYXRoX3RvX3Rlc3QsIGRhdGEpOgorICAgICAgICAg
ICAgICAgICAgICBpZiBsZW4ocGF0aF90b190ZXN0KSA9PSAxOgorICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1dID0gZGF0YQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjdXJyZW50LmdldChwYXRo
X3RvX3Rlc3RbMF0pOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFtwYXRoX3RvX3Rl
c3RbMF1dID0ge30KKyAgICAgICAgICAgICAgICAgICAgdW5wYWNrX3Rlc3QoY3VycmVudFtwYXRo
X3RvX3Rlc3RbMF1dLCBwYXRoX3RvX3Rlc3RbMTpdLCBkYXRhKQorCisgICAgICAgICAgICAgICAg
cmVzdWx0cyA9IHt9CisgICAgICAgICAgICAgICAgZm9yIHRlc3QsIGRhdGEgaW4gb2JqLnJlc3Vs
dHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHVucGFja190ZXN0KHJlc3VsdHMs
IHRlc3Quc3BsaXQoJy8nKSwgZGF0YSkKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRpY3Qo
CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb249b2JqLlZFUlNJT04sCisgICAgICAgICAgICAg
ICAgICAgIHN1aXRlPW9iai5zdWl0ZSwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlv
bj1vYmouY29uZmlndXJhdGlvbiBvciBvYmouY3JlYXRlX2NvbmZpZ3VyYXRpb24oKSwKKyAgICAg
ICAgICAgICAgICAgICAgY29tbWl0cz1vYmouY29tbWl0cywKKyAgICAgICAgICAgICAgICAgICAg
dGVzdF9yZXN1bHRzPWRpY3QoCisgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzPWRldGFp
bHMsCisgICAgICAgICAgICAgICAgICAgICAgICBydW5fc3RhdHM9b2JqLnJ1bl9zdGF0cyBvciBv
YmouY3JlYXRlX3J1bl9zdGF0cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cz1y
ZXN1bHRzLAorICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICkKKyAgICAg
ICAgICAgICAgICBpZiBvYmoudGltZXN0YW1wOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRb
J3RpbWVzdGFtcCddID0gb2JqLnRpbWVzdGFtcAorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihVcGxvYWQuRW5jb2Rlciwgc2VsZikuZGVmYXVs
dChvYmopCisKKyAgICBkZWYgdXBsb2FkKHNlbGYsIHVybCwgbG9nX2xpbmU9bGFtYmRhIHZhbDog
c3lzLnN0ZG91dC53cml0ZSh2YWwgKyAnXG4nKSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHJlc3BvbnNlID0gcmVxdWVzdHMucG9zdCh1cmwgKyBzZWxmLlVQTE9BRF9FTkRQT0lOVCwgZGF0
YT1qc29uLmR1bXBzKHNlbGYsIGNscz1VcGxvYWQuRW5jb2RlcikpCisgICAgICAgIGV4Y2VwdCBy
ZXF1ZXN0cy5leGNlcHRpb25zLkNvbm5lY3Rpb25FcnJvcjoKKyAgICAgICAgICAgIGxvZ19saW5l
KCcgJyAqIDQgKyAnRmFpbGVkIHRvIHVwbG9hZCB0byB7fSwgcmVzdWx0cyBzZXJ2ZXIgbm90IG9u
bGluZScuZm9ybWF0KHVybCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGxvZ19saW5lKCcgJyAqIDQgKyAnRmFp
bGVkIHRvIGVuY29kZSB1cGxvYWQgZGF0YToge30nLmZvcm1hdChlKSkKKyAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAg
ICAgICAgICAgIGxvZ19saW5lKCcgJyAqIDQgKyAnRXJyb3IgdXBsb2FkaW5nIHRvIHt9OicuZm9y
bWF0KHVybCkpCisgICAgICAgICAgICBsb2dfbGluZSgnICcgKiA4ICsgcmVzcG9uc2UuanNvbigp
WydkZXNjcmlwdGlvbiddKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgbG9n
X2xpbmUoJyAnICogNCArICdVcGxvYWRlZCByZXN1bHRzIHRvIHt9Jy5mb3JtYXQodXJsKSkKKyAg
ICAgICAgcmV0dXJuIFRydWUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91
cGxvYWRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9y
ZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjE1IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2lt
cG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQucmVxdWVzdHMKKworaW1wb3J0
IGNvbGxlY3Rpb25zCitpbXBvcnQganNvbgoraW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgdGltZQor
aW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVw
bG9hZAorZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5IGltcG9ydCBtb2NrCisKKworY2xhc3MgVXBs
b2FkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBPcHRpb25zKG9iamVjdCk6
CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgICAgICBmb3Ig
a2V5LCB2YWx1ZSBpbiBrd2FyZ3MuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2V0YXR0
cihzZWxmLCBrZXksIHZhbHVlKQorCisgICAgY2xhc3MgTW9ja1Jlc3BvbnNlKG9iamVjdCk6Cisg
ICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0dXNfY29kZT0yMDAsIHRleHQ9JycpOgorICAg
ICAgICAgICAgc2VsZi5zdGF0dXNfY29kZSA9IHN0YXR1c19jb2RlCisgICAgICAgICAgICBzZWxm
LnRleHQgPSB0ZXh0CisKKyAgICAgICAgZGVmIGpzb24oc2VsZik6CisgICAgICAgICAgICByZXR1
cm4ganNvbi5sb2FkcyhzZWxmLnRleHQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG5v
cm1hbGl6ZShkYXRhKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBiYXNlc3RyaW5nKToK
KyAgICAgICAgICAgIHJldHVybiBzdHIoZGF0YSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRh
dGEsIGNvbGxlY3Rpb25zLk1hcHBpbmcpOgorICAgICAgICAgICAgcmV0dXJuIGRpY3QobWFwKFVw
bG9hZFRlc3Qubm9ybWFsaXplLCBkYXRhLml0ZXJpdGVtcygpKSkKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKToKKyAgICAgICAgICAgIHJldHVybiB0
eXBlKGRhdGEpKG1hcChVcGxvYWRUZXN0Lm5vcm1hbGl6ZSwgZGF0YSkpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmcoc2VsZik6
CisgICAgICAgIHN0YXJ0X3RpbWUsIGVuZF90aW1lID0gdGltZS50aW1lKCkgLSAzLCB0aW1lLnRp
bWUoKQorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0
cHktdGVzdHMnLAorICAgICAgICAgICAgY29uZmlndXJhdGlvbj1VcGxvYWQuY3JlYXRlX2NvbmZp
Z3VyYXRpb24oCisgICAgICAgICAgICAgICAgcGxhdGZvcm09J21hYycsCisgICAgICAgICAgICAg
ICAgdmVyc2lvbj0nMTAuMTMuMCcsCisgICAgICAgICAgICAgICAgdmVyc2lvbl9uYW1lPSdIaWdo
IFNpZXJyYScsCisgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPSd4ODZfNjQnLAorICAgICAg
ICAgICAgICAgIHNkaz0nMTdBNDA1JywKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBkZXRh
aWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhsaW5rPSdodHRwczovL3dlYmtpdC5vcmcnKSwKKyAg
ICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAg
IHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAg
ICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICAgICBy
dW5fc3RhdHM9VXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisgICAgICAgICAgICAgICAgc3RhcnRf
dGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgICAgIGVuZF90aW1lPWVuZF90aW1lLAorICAg
ICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwKKyAgICAgICAgICAgICksCisgICAgICAgICAg
ICByZXN1bHRzPXsKKyAgICAgICAgICAgICAgICAnd2Via2l0cHkudGVzdDEnOiB7fSwKKyAgICAg
ICAgICAgICAgICAnd2Via2l0cHkudGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGV4
cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlv
bnMuRkFJTCksCisgICAgICAgICAgICB9LAorICAgICAgICApCisgICAgICAgIGdlbmVyYXRlZF9k
aWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVw
bG9hZC5FbmNvZGVyKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGlj
dFsndmVyc2lvbiddLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0
WydzdWl0ZSddLCAnd2Via2l0cHktdGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdl
bmVyYXRlZF9kaWN0Wydjb25maWd1cmF0aW9uJ10sIHNlbGYubm9ybWFsaXplKGRpY3QoCisgICAg
ICAgICAgICBwbGF0Zm9ybT0nbWFjJywKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1GYWxzZSwK
KyAgICAgICAgICAgIHZlcnNpb249JzEwLjEzLjAnLAorICAgICAgICAgICAgdmVyc2lvbl9uYW1l
PSdIaWdoIFNpZXJyYScsCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9J3g4Nl82NCcsCisgICAg
ICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICkpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGdlbmVyYXRlZF9kaWN0Wydjb21taXRzJ10sIFtkaWN0KAorICAgICAgICAgICAgcmVwb3Np
dG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgIGJyYW5j
aD0ndHJ1bmsnLAorICAgICAgICApXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0
ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwgc2VsZi5ub3JtYWxpemUoZGljdChs
aW5rPSdodHRwczovL3dlYmtpdC5vcmcnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2Vu
ZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydydW5fc3RhdHMnXSwgc2VsZi5ub3JtYWxpemUo
ZGljdCgKKyAgICAgICAgICAgIHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgIGVu
ZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgdGVzdHNfc2tpcHBlZD0wLAorICAgICAgICAp
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRz
J11bJ3Jlc3VsdHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAgJ3dlYmtpdHB5LnRl
c3QxJzoge30sCisgICAgICAgICAgICAnd2Via2l0cHkudGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rl
c3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0dWFsPVVwbG9h
ZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgIH0pKQorCisgICAgZGVmIHRlc3RfdXBsb2Fk
KHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Vi
a2l0cHktdGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQo
CisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAg
ICBpZD0nNScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICAp
XSwKKyAgICAgICAgKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVzdHMucG9zdCcs
IG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNwb25zZSgpKToKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dlYmtpdC5vcmcvcmVzdWx0
cycsIGxvZ19saW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAgICAgICBkZWYgcmFpc2VfZXhjZXB0
aW9uKHVybCwgZGF0YSk6CisgICAgICAgICAgICByYWlzZSByZXF1ZXN0cy5leGNlcHRpb25zLkNv
bm5lY3Rpb25FcnJvcigpCisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdyZXF1ZXN0cy5wb3N0
JywgbmV3PXJhaXNlX2V4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHVw
bG9hZC51cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1bHRzJywgbG9nX2xpbmU9bGFtYmRh
IF86IE5vbmUpKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVzdHMucG9zdCcsIG5l
dz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNwb25zZSgKKyAgICAgICAgICAgIHN0YXR1
c19jb2RlPTQwNCwKKyAgICAgICAgICAgIHRleHQ9anNvbi5kdW1wcyhkaWN0KGRlc2NyaXB0aW9u
PSdObyBzdWNoIGFkZHJlc3MnKSksCisgICAgICAgICkpOgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19s
aW5lPWxhbWJkYSBfOiBOb25lKSkKKworICAgIGRlZiB0ZXN0X3BhY2tlZF90ZXN0KHNlbGYpOgor
ICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVz
dHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAg
ICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScs
CisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAg
ICAgICAgIHJlc3VsdHM9eworICAgICAgICAgICAgICAgICdkaXIxL3N1Yi1kaXIxL3Rlc3QxJzog
VXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlM
KSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90ZXN0Mic6IFVwbG9hZC5jcmVhdGVf
dGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuVElNRU9VVCksCisgICAgICAg
ICAgICAgICAgJ2RpcjEvc3ViLWRpcjIvdGVzdDMnOiB7fSwKKyAgICAgICAgICAgICAgICAnZGly
MS9zdWItZGlyMi90ZXN0NCc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIyL3N1Yi1kaXIzL3Rl
c3Q1Jzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjIvdGVzdDYnOiB7fSwKKyAgICAgICAgICAg
IH0KKyAgICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGljdCA9IHNlbGYubm9ybWFsaXplKGpz
b24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncmVzdWx0
cyddLCBzZWxmLm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAnZGlyMSc6IHsKKyAgICAgICAgICAg
ICAgICAnc3ViLWRpcjEnOiB7CisgICAgICAgICAgICAgICAgICAgICd0ZXN0MSc6IHsnYWN0dWFs
JzogVXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMfSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3Qy
JzogeydhY3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLlRJTUVPVVR9LAorICAgICAgICAgICAg
ICAgIH0sICdzdWItZGlyMic6IHsKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3QzJzoge30sCisg
ICAgICAgICAgICAgICAgICAgICd0ZXN0NCc6IHt9LAorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0sICdkaXIyJzogeworICAgICAgICAgICAgICAgICdzdWItZGlyMyc6IHsndGVzdDUn
OiB7fX0sCisgICAgICAgICAgICAgICAgJ3Rlc3Q2Jzoge30sCisgICAgICAgICAgICB9LAorICAg
ICAgICB9KSkKKworICAgIGRlZiB0ZXN0X25vX3N1aXRlKHNlbGYpOgorICAgICAgICB1cGxvYWQg
PSBVcGxvYWQoCisgICAgICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAg
ICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlk
PSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAor
ICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Cisg
ICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQorCisgICAg
ZGVmIHRlc3Rfbm9fY29tbWl0cyhzZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAg
ICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgKQorICAgICAgICB3aXRo
IHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAganNvbi5kdW1wcyh1
cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRlZiB0ZXN0X2J1aWxkYm90KHNlbGYp
OgorICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHkt
dGVzdHMnLAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0n
NScsCisgICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAg
ICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRhaWxzKG9wdGlvbnM9c2VsZi5PcHRp
b25zKAorICAgICAgICAgICAgICAgIGJ1aWxkYm90X21hc3Rlcj0nd2Via2l0Lm9yZycsCisgICAg
ICAgICAgICAgICAgYnVpbGRlcl9uYW1lPSdRdWV1ZS0xJywKKyAgICAgICAgICAgICAgICBidWls
ZF9udW1iZXI9MSwKKyAgICAgICAgKSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMo
VmFsdWVFcnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5F
bmNvZGVyKQorCisgICAgICAgIHVwbG9hZC5kZXRhaWxzWydidWlsZGJvdC13b3JrZXInXSA9ICdi
b3QxMjMnCisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fk
cyhqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKSkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydkZXRhaWxzJ10sIHNl
bGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICdidWlsZGJvdC1tYXN0ZXInOiAnd2Via2l0Lm9y
ZycsCisgICAgICAgICAgICAnYnVpbGRlci1uYW1lJzogJ1F1ZXVlLTEnLAorICAgICAgICAgICAg
J2J1aWxkLW51bWJlcic6IDEsCisgICAgICAgICAgICAnYnVpbGRib3Qtd29ya2VyJzogJ2JvdDEy
MycsCisgICAgICAgIH0pKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL2dpdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5CShyZXZpc2lvbiAyNDI5OTkpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0yOTAsNiArMjkwLDE0IEBAIGNsYXNzIEdpdChTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgIGRl
ZiBuYXRpdmVfcmV2aXNpb24oc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBzZWxmLl9ydW5f
Z2l0KFsnLUMnLCBzZWxmLmZpbmRfY2hlY2tvdXRfcm9vdChwYXRoKSwgJ2xvZycsICctMScsICct
LXByZXR0eT1mb3JtYXQ6JUgnXSkKIAorICAgIGRlZiBuYXRpdmVfYnJhbmNoKHNlbGYsIHBhdGgp
OgorICAgICAgICByZXN1bHQgPSBzZWxmLl9ydW5fZ2l0KFsnLUMnLCBzZWxmLmZpbmRfY2hlY2tv
dXRfcm9vdChwYXRoKSwgJ3Jldi1wYXJzZScsICctLWFiYnJldi1yZWYnLCAnSEVBRCddKS5yc3Ry
aXAoKQorCisgICAgICAgICMgRm9yIGdpdC1zdm4KKyAgICAgICAgaWYgcmVzdWx0LnN0YXJ0c3dp
dGgoJ2hlYWRzJyk6CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0WzY6XQorICAgICAgICByZXR1
cm4gcmVzdWx0CisKICAgICBkZWYgc3ZuX3VybChzZWxmKToKICAgICAgICAgZ2l0X2NvbW1hbmQg
PSBbJ3N2bicsICdpbmZvJ10KICAgICAgICAgc3RhdHVzID0gc2VsZi5fcnVuX2dpdChnaXRfY29t
bWFuZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9z
Y21fbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9zY20vc2NtX21vY2sucHkJKHJldmlzaW9uIDI0Mjk5OSkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weQkod29ya2luZyBjb3B5
KQpAQCAtODcsNiArODcsOSBAQCBjbGFzcyBNb2NrU0NNKG9iamVjdCk6CiAgICAgZGVmIG5hdGl2
ZV9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIHNlbGYuc3ZuX3JldmlzaW9u
KHBhdGgpCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0
dXJuICd0cnVuaycKKwogICAgIGRlZiB0aW1lc3RhbXBfb2ZfcmV2aXNpb24oc2VsZiwgcGF0aCwg
cmV2aXNpb24pOgogICAgICAgICByZXR1cm4gJzIwMTMtMDItMDEgMDg6NDg6MDUgKzAwMDAnCiAK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQkocmV2aXNpb24gMjQyOTk5KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtOTA5LDYgKzkwOSw5IEBAIEVORAogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuc2NtLmhlYWRfc3ZuX3JldmlzaW9uKCksIHNlbGYuc2NtLm5hdGl2ZV9yZXZpc2lvbign
LicpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NtLm5hdGl2ZV9yZXZpc2lvbign
LicpLCAnNScpCiAKKyAgICBkZWYgdGVzdF9uYXRpdmVfYnJhbmNoKHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NtLm5hdGl2ZV9icmFuY2goJy4nKSwgJ3RydW5rJykKKwog
ICAgIGRlZiB0ZXN0X3Byb3BzZXRfcHJvcGdldChzZWxmKToKICAgICAgICAgZmlsZXBhdGggPSBv
cy5wYXRoLmpvaW4oc2VsZi5zdm5fY2hlY2tvdXRfcGF0aCwgInRlc3RfZmlsZSIpCiAgICAgICAg
IGV4cGVjdGVkX21pbWVfdHlwZSA9ICJ4LWFwcGxpY2F0aW9uL2Zvby1iYXIiCkBAIC0xMTEyLDYg
KzExMTUsMTAgQEAgY2xhc3MgR2l0VGVzdChTQ01UZXN0KToKICAgICAgICAgY29tbWFuZCA9IFsn
Z2l0JywgJy1DJywgc2NtLmNoZWNrb3V0X3Jvb3QsICdyZXYtcGFyc2UnLCAnSEVBRCddCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2NtLm5hdGl2ZV9yZXZpc2lvbihzY20uY2hlY2tvdXRfcm9v
dCksIHJ1bl9jb21tYW5kKGNvbW1hbmQpLnN0cmlwKCkpCiAKKyAgICBkZWYgdGVzdF9uYXRpdmVf
YnJhbmNoKHNlbGYpOgorICAgICAgICBzY20gPSBzZWxmLnRyYWNraW5nX3NjbQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCdtYXN0ZXInLCBzY20ubmF0aXZlX2JyYW5jaChzY20uY2hlY2tvdXRf
cm9vdCkpCisKICAgICBkZWYgdGVzdF9yZW5hbWVfZmlsZXMoc2VsZik6CiAgICAgICAgIHNjbSA9
IHNlbGYudHJhY2tpbmdfc2NtCiAKQEAgLTE2MjcsNiArMTYzNCw5IEBAIGNsYXNzIEdpdFNWTlRl
c3QoU0NNVGVzdCk6CiAgICAgICAgIGNvbW1hbmQgPSBbJ2dpdCcsICctQycsIHNlbGYuZ2l0X2No
ZWNrb3V0X3BhdGgsICdyZXYtcGFyc2UnLCAnSEVBRCddCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5zY20ubmF0aXZlX3JldmlzaW9uKHNlbGYuZ2l0X2NoZWNrb3V0X3BhdGgpLCBydW5f
Y29tbWFuZChjb21tYW5kKS5zdHJpcCgpKQogCisgICAgZGVmIHRlc3RfbmF0aXZlX2JyYW5jaChz
ZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgndHJ1bmsnLCBzZWxmLnNjbS5uYXRpdmVf
YnJhbmNoKHNlbGYuZ2l0X2NoZWNrb3V0X3BhdGgpKQorCiAgICAgZGVmIHRlc3RfdG9fb2JqZWN0
X25hbWUoc2VsZik6CiAgICAgICAgIHJlbHBhdGggPSAndGVzdF9maWxlX2NvbW1pdDEnCiAgICAg
ICAgIGZ1bGxwYXRoID0gb3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmpvaW4oc2VsZi5naXRfY2hl
Y2tvdXRfcGF0aCwgcmVscGF0aCkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9jaGVja291dC9zY20vc3ZuLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkJKHJldmlzaW9uIDI0Mjk5OSkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDcgKzgzLDcgQEAgY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAg
ICAgIFNDTS5fX2luaXRfXyhzZWxmLCBjd2QsICoqa3dhcmdzKQogICAgICAgICBzZWxmLl9ib2d1
c19kaXIgPSBOb25lCiAgICAgICAgIGlmIHBhdGNoX2RpcmVjdG9yaWVzID09IFtdOgotICAgICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKG1lc3NhZ2U9J0VtcHR5IGxpc3Qgb2YgcGF0Y2ggZGlyZWN0
b3JpZXMgcGFzc2VkIHRvIFNDTS5fX2luaXRfXycpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oJ0VtcHR5IGxpc3Qgb2YgcGF0Y2ggZGlyZWN0b3JpZXMgcGFzc2VkIHRvIFNDTS5fX2luaXRf
XycpCiAgICAgICAgIGVsaWYgcGF0Y2hfZGlyZWN0b3JpZXMgPT0gTm9uZToKICAgICAgICAgICAg
IHNlbGYuX3BhdGNoX2RpcmVjdG9yaWVzID0gW3NlbGYuX2ZpbGVzeXN0ZW0ucmVscGF0aChjd2Qs
IHNlbGYuY2hlY2tvdXRfcm9vdCldCiAgICAgICAgIGVsc2U6CkBAIC0yNzgsNiArMjc4LDE0IEBA
IGNsYXNzIFNWTihTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgIGRlZiBuYXRpdmVfcmV2aXNpb24o
c2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBzZWxmLnN2bl9yZXZpc2lvbihwYXRoKQogCisg
ICAgZGVmIG5hdGl2ZV9icmFuY2goc2VsZiwgcGF0aCk6CisgICAgICAgIHJlbGF0aXZlX3VybCA9
IHNlbGYudmFsdWVfZnJvbV9zdm5faW5mbyhwYXRoLCAnUmVsYXRpdmUgVVJMJylbMjpdCisgICAg
ICAgIGlmIHJlbGF0aXZlX3VybC5zdGFydHN3aXRoKCd0cnVuaycpOgorICAgICAgICAgICAgcmV0
dXJuICd0cnVuaycKKyAgICAgICAgZWxpZiByZWxhdGl2ZV91cmwuc3RhcnRzd2l0aCgnYnJhbmNo
Jyk6CisgICAgICAgICAgICByZXR1cm4gcmVsYXRpdmVfdXJsLnNwbGl0KCcvJylbMV0KKyAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCd7fSBpcyBub3QgYSBicmFuY2gnLmZvcm1hdChyZWxhdGl2ZV91
cmwuc3BsaXQoJy8nKVswXSkpCisKICAgICBkZWYgdGltZXN0YW1wX29mX3JldmlzaW9uKHNlbGYs
IHBhdGgsIHJldmlzaW9uKToKICAgICAgICAgIyBXZSB1c2UgLS14bWwgdG8gZ2V0IHRpbWVzdGFt
cHMgbGlrZSAyMDEzLTAyLTA4VDA4OjE4OjA0Ljk2NDQwOVoKICAgICAgICAgcmVwb3NpdG9yeV9y
b290ID0gc2VsZi52YWx1ZV9mcm9tX3N2bl9pbmZvKHNlbGYuY2hlY2tvdXRfcm9vdCwgJ1JlcG9z
aXRvcnkgUm9vdCcpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
cGxhdGZvcm1pbmZvLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHJldmlzaW9uIDI0Mjk5OSkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Niw2ICsxNDYsMTEgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAg
ICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHJldHVybiBzeXMubWF4aW50CiAKKyAgICBkZWYgYnVp
bGRfdmVyc2lvbihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pc19tYWMoKToKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWycvdXNyL2Jpbi9zd192ZXJzJywg
Jy1idWlsZFZlcnNpb24nXSwgcmV0dXJuX3N0ZGVycj1GYWxzZSwgaWdub3JlX2Vycm9ycz1UcnVl
KS5yc3RyaXAoKQorICAgICAgICByZXR1cm4gTm9uZQorCiAgICAgZGVmIHhjb2RlX3Nka192ZXJz
aW9uKHNlbGYsIHNka19uYW1lKToKICAgICAgICAgaWYgc2VsZi5pc19tYWMoKToKICAgICAgICAg
ICAgICMgQXNzdW1lcyB0aGF0IHhjcnVuIGRvZXMgbm90IHdyaXRlIHRvIHN0YW5kYXJkIG91dHB1
dCBvbiBmYWlsdXJlIChlLmcuIFNESyBkb2VzIG5vdCBleGlzdCkuCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19t
b2NrLnB5CShyZXZpc2lvbiAyNDI5OTkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMy
LDcgQEAgZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbl9uYW1lX21hcCBpbQogCiAKIGNsYXNz
IE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3NfbmFt
ZT0nbWFjJywgb3NfdmVyc2lvbj1WZXJzaW9uLmZyb21fbmFtZSgnU25vdyBMZW9wYXJkJykpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPVZlcnNpb24u
ZnJvbV9uYW1lKCdIaWdoIFNpZXJyYScpKToKICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob3Nf
dmVyc2lvbiwgVmVyc2lvbikKICAgICAgICAgc2VsZi5vc19uYW1lID0gb3NfbmFtZQogICAgICAg
ICBzZWxmLm9zX3ZlcnNpb24gPSBvc192ZXJzaW9uCkBAIC03OCw2ICs3OCwxMSBAQCBjbGFzcyBN
b2NrUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgZGVmIHRlcm1pbmFsX3dpZHRoKHNlbGYpOgog
ICAgICAgICByZXR1cm4gODAKIAorICAgIGRlZiBidWlsZF92ZXJzaW9uKHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLmlzX21hYygpOgorICAgICAgICAgICAgcmV0dXJuICcxN0E0MDUnCisgICAgICAg
IHJldHVybiBOb25lCisKICAgICBkZWYgeGNvZGVfc2RrX3ZlcnNpb24oc2VsZiwgc2RrX25hbWUp
OgogICAgICAgICByZXR1cm4gVmVyc2lvbig4LCAxKQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rlc3QvbWFpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rlc3QvbWFpbi5weQkocmV2aXNpb24gMjQyOTk5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90ZXN0L21haW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUsIEluYy4KICMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRv
bmVrIChjamVyZG9uZWtAd2Via2l0Lm9yZykKLSMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zOCwxNyArMzgsMTkgQEAgaW1wb3J0IHRyYWNlYmFjawogaW1wb3J0IHVuaXR0ZXN0CiAKIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5sb2d1dGlscyBpbXBvcnQgY29uZmlndXJlX2xvZ2dp
bmcKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2
ZSwgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1w
b3J0IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbSBp
bXBvcnQgRmlsZVN5c3RlbQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3Qg
aW1wb3J0IFN5c3RlbUhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QK
IGZyb20gd2Via2l0cHkucG9ydC5jb25maWcgaW1wb3J0IENvbmZpZwogZnJvbSB3ZWJraXRweS50
ZXN0LmZpbmRlciBpbXBvcnQgRmluZGVyCiBmcm9tIHdlYmtpdHB5LnRlc3QucHJpbnRlciBpbXBv
cnQgUHJpbnRlcgogZnJvbSB3ZWJraXRweS50ZXN0LnJ1bm5lciBpbXBvcnQgUnVubmVyLCB1bml0
X3Rlc3RfbmFtZQorZnJvbSB3ZWJraXRweS5yZXN1bHRzLnVwbG9hZCBpbXBvcnQgVXBsb2FkCitm
cm9tIHdlYmtpdHB5LnJlc3VsdHMub3B0aW9ucyBpbXBvcnQgdXBsb2FkX29wdGlvbnMKIAogX2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCi1faG9zdCA9IFN5c3RlbUhvc3QoKQor
X2hvc3QgPSBIb3N0KCkKIF93ZWJraXRfcm9vdCA9IE5vbmUKIAogCkBAIC0xMjQsMTIgKzEyNiwx
NSBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0
aW9uUGFyc2VyKHVzYWdlPSd1c2FnZTogJXByb2cgW29wdGlvbnNdIFthcmdzLi4uXScpCiAKICAg
ICAgICAgIyAgQ29uZmlndXJhdGlvbiBvcHRpb25zIG9ubHkgZWZmZWN0IHRoZSBidWlsZGluZyBv
ZiBsbGRiV2ViS2l0VGVzdGVyLgotICAgICAgICBjb25maWd1cmF0aW9uX2dyb3VwID0gb3B0cGFy
c2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnQ29uZmlndXJhdGlvbiBvcHRpb25zJykKLSAgICAgICAg
Y29uZmlndXJhdGlvbl9ncm91cC5hZGRfb3B0aW9uKCctLWRlYnVnJywgYWN0aW9uPSdzdG9yZV9j
b25zdCcsIGNvbnN0PSdEZWJ1ZycsIGRlc3Q9ImNvbmZpZ3VyYXRpb24iLAotICAgICAgICAgICAg
aGVscD0nU2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIERlYnVnJykKLSAgICAgICAgY29uZmlndXJh
dGlvbl9ncm91cC5hZGRfb3B0aW9uKCctLXJlbGVhc2UnLCBhY3Rpb249J3N0b3JlX2NvbnN0Jywg
Y29uc3Q9J1JlbGVhc2UnLCBkZXN0PSJjb25maWd1cmF0aW9uIiwKLSAgICAgICAgICAgIGhlbHA9
J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBSZWxlYXNlJykKLSAgICAgICAgcGFyc2VyLmFkZF9v
cHRpb25fZ3JvdXAoY29uZmlndXJhdGlvbl9ncm91cCkKKyAgICAgICAgZm9yIGdyb3VwX25hbWUs
IGdyb3VwX29wdGlvbnMgaW4geydVcGxvYWQgT3B0aW9ucyc6IHVwbG9hZF9vcHRpb25zKCksICdD
b25maWd1cmF0aW9uIE9wdGlvbnMnOiBbCisgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlv
bignLS1kZWJ1ZycsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nRGVidWcnLCBkZXN0PSJj
b25maWd1cmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Nl
dCB0aGUgY29uZmlndXJhdGlvbiB0byBEZWJ1ZycpLAorICAgICAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oJy0tcmVsZWFzZScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0nUmVsZWFz
ZScsIGRlc3Q9ImNvbmZpZ3VyYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscD0nU2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIFJlbGVhc2UnKSwKKyAgICAgICAgXX0u
aXRlcml0ZW1zKCk6CisgICAgICAgICAgICBvcHRpb25fZ3JvdXAgPSBvcHRwYXJzZS5PcHRpb25H
cm91cChwYXJzZXIsIGdyb3VwX25hbWUpCisgICAgICAgICAgICBvcHRpb25fZ3JvdXAuYWRkX29w
dGlvbnMoZ3JvdXBfb3B0aW9ucykKKyAgICAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uX2dyb3Vw
KG9wdGlvbl9ncm91cCkKIAogICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWEnLCAnLS1hbGwn
LCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwPSdydW4gYWxsIHRoZSB0ZXN0cycpCkBAIC0xODEsMTEgKzE4NiwxMiBAQCBj
bGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5IGlt
cG9ydCBhdXRvaW5zdGFsbF9ldmVyeXRoaW5nCiAgICAgICAgIGF1dG9pbnN0YWxsX2V2ZXJ5dGhp
bmcoKQogCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBjb25maWcg
PSBDb25maWcoX2hvc3QuZXhlY3V0aXZlLCBzZWxmLmZpbmRlci5maWxlc3lzdGVtKQorICAgICAg
ICBjb25maWd1cmF0aW9uX3RvX3VzZSA9IHNlbGYuX29wdGlvbnMuY29uZmlndXJhdGlvbiBvciBj
b25maWcuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkKICAgICAgICAgaWYgd2lsbF9ydW5fbGxkYl93
ZWJraXRfdGVzdHM6CiAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKCdCdWls
ZGluZyBsbGRiV2ViS2l0VGVzdGVyIC4uLicpCiAgICAgICAgICAgICBidWlsZF9sbGRid2Via2l0
dGVzdGVyID0gc2VsZi5maW5kZXIuZmlsZXN5c3RlbS5qb2luKF93ZWJraXRfcm9vdCwgJ1Rvb2xz
JywgJ1NjcmlwdHMnLCAnYnVpbGQtbGxkYndlYmtpdHRlc3RlcicpCi0gICAgICAgICAgICBjb25m
aWcgPSBDb25maWcoX2hvc3QuZXhlY3V0aXZlLCBzZWxmLmZpbmRlci5maWxlc3lzdGVtKQotICAg
ICAgICAgICAgY29uZmlndXJhdGlvbl90b191c2UgPSBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRp
b24gb3IgY29uZmlnLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAgICAgICAgICAgICB0cnk6CiAg
ICAgICAgICAgICAgICAgX2hvc3QuZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChbYnVp
bGRfbGxkYndlYmtpdHRlc3RlciwgY29uZmlnLmZsYWdfZm9yX2NvbmZpZ3VyYXRpb24oY29uZmln
dXJhdGlvbl90b191c2UpXSwgcXVpZXQ9KG5vdCBib29sKHNlbGYuX29wdGlvbnMudmVyYm9zZSkp
KQogICAgICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yIGFzIGU6CkBAIC0yMTgsNiArMjI0LDcg
QEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIHRlc3RfcnVubmVyID0gUnVubmVyKHNl
bGYucHJpbnRlciwgbG9hZGVyKQogICAgICAgICB0ZXN0X3J1bm5lci5ydW4ocGFyYWxsZWxfdGVz
dHMsIHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQogICAgICAgICB0ZXN0X3J1bm5lci5y
dW4oc2VyaWFsX3Rlc3RzLCAxKQorICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCiAKICAg
ICAgICAgc2VsZi5wcmludGVyLnByaW50X3Jlc3VsdCh0aW1lLnRpbWUoKSAtIHN0YXJ0KQogCkBA
IC0yMzIsOSArMjM5LDUwIEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLmNvdmVyYWdlOgogICAgICAgICAgICAgY292LnN0b3AoKQogICAgICAgICAgICAg
Y292LnNhdmUoKQorCisgICAgICAgIGZhaWxlZF91cGxvYWRzID0gMAorICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLnJlcG9ydF91cmxzOgorICAgICAgICAgICAgc2VsZi5wcmludGVyLm1ldGVyLndy
aXRlbG4oJ1xuJykKKyAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZV91cGRhdGUoJ1ByZXBh
cmluZyB1cGxvYWQgZGF0YSAuLi4nKQorCisgICAgICAgICAgICByZXN1bHRzID0ge3Rlc3Q6IHt9
IGZvciB0ZXN0IGluIHRlc3RfcnVubmVyLnRlc3RzX3J1bn0KKyAgICAgICAgICAgIGZvciB0ZXN0
LCBlcnJvcnMgaW4gdGVzdF9ydW5uZXIuZXJyb3JzOgorICAgICAgICAgICAgICAgIHJlc3VsdHNb
dGVzdF0gPSBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRp
b25zLkVSUk9SLCBsb2c9Jy9uJy5qb2luKGVycm9ycykpCisgICAgICAgICAgICBmb3IgdGVzdCwg
ZmFpbHVyZXMgaW4gdGVzdF9ydW5uZXIuZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgcmVzdWx0
c1t0ZXN0XSA9IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3Rh
dGlvbnMuRkFJTCwgbG9nPScvbicuam9pbihmYWlsdXJlcykpCisKKyAgICAgICAgICAgIF9ob3N0
LmluaXRpYWxpemVfc2NtKCkKKyAgICAgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAg
ICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgICAgIGNvbmZpZ3Vy
YXRpb249VXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9uKAorICAgICAgICAgICAgICAgICAgICBw
bGF0Zm9ybT1faG9zdC5wbGF0Zm9ybS5vc19uYW1lLAorICAgICAgICAgICAgICAgICAgICB2ZXJz
aW9uPXN0cihfaG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uKSwKKyAgICAgICAgICAgICAgICAgICAg
dmVyc2lvbl9uYW1lPV9ob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb25fbmFtZSgpLAorICAgICAgICAg
ICAgICAgICAgICBzdHlsZT1jb25maWd1cmF0aW9uX3RvX3VzZSwKKyAgICAgICAgICAgICAgICAg
ICAgc2RrPV9ob3N0LnBsYXRmb3JtLmJ1aWxkX3ZlcnNpb24oKSwKKyAgICAgICAgICAgICAgICAp
LAorICAgICAgICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRhaWxzKG9wdGlvbnM9
c2VsZi5fb3B0aW9ucyksCisgICAgICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9j
b21taXQoCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAg
ICAgICAgICAgICAgICAgIGlkPV9ob3N0LnNjbSgpLm5hdGl2ZV9yZXZpc2lvbihfd2Via2l0X3Jv
b3QpLAorICAgICAgICAgICAgICAgICAgICBicmFuY2g9X2hvc3Quc2NtKCkubmF0aXZlX2JyYW5j
aChfd2Via2l0X3Jvb3QpLAorICAgICAgICAgICAgICAgICldLAorICAgICAgICAgICAgICAgIHJ1
bl9zdGF0cz1VcGxvYWQuY3JlYXRlX3J1bl9zdGF0cygKKyAgICAgICAgICAgICAgICAgICAgc3Rh
cnRfdGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAgICBlbmRfdGltZT1lbmRfdGlt
ZSwKKyAgICAgICAgICAgICAgICAgICAgdGVzdHNfc2tpcHBlZD1sZW4odGVzdF9ydW5uZXIudGVz
dHNfcnVuKSAtIGxlbihwYXJhbGxlbF90ZXN0cykgLSBsZW4oc2VyaWFsX3Rlc3RzKSwKKyAgICAg
ICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIHJlc3VsdHM9cmVzdWx0cywKKyAgICAgICAg
ICAgICkKKyAgICAgICAgICAgIGZvciB1cmwgaW4gc2VsZi5fb3B0aW9ucy5yZXBvcnRfdXJsczoK
KyAgICAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKCdVcGxvYWRpbmcgdG8g
e30gLi4uJy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgICAgICBmYWlsZWRfdXBsb2FkcyA9IGZh
aWxlZF91cGxvYWRzIGlmIHVwbG9hZC51cGxvYWQodXJsLCBsb2dfbGluZT1zZWxmLnByaW50ZXIu
bWV0ZXIud3JpdGVsbikgZWxzZSAoZmFpbGVkX3VwbG9hZHMgKyAxKQorICAgICAgICAgICAgc2Vs
Zi5wcmludGVyLm1ldGVyLndyaXRlbG4oJ1VwbG9hZHMgY29tcGxldGVkIScpCisKKyAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKICAgICAgICAgICAgIGNvdi5yZXBvcnQoc2hvd19t
aXNzaW5nPUZhbHNlKQogCi0gICAgICAgIHJldHVybiBub3Qgc2VsZi5wcmludGVyLm51bV9lcnJv
cnMgYW5kIG5vdCBzZWxmLnByaW50ZXIubnVtX2ZhaWx1cmVzCisgICAgICAgIHJldHVybiBub3Qg
c2VsZi5wcmludGVyLm51bV9lcnJvcnMgYW5kIG5vdCBzZWxmLnByaW50ZXIubnVtX2ZhaWx1cmVz
IGFuZCBub3QgZmFpbGVkX3VwbG9hZHMKIAogICAgIGRlZiBfY2hlY2tfaW1wb3J0cyhzZWxmLCBu
YW1lcyk6CiAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90ZXN0L3J1bm5lci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rlc3QvcnVubmVyLnB5CShyZXZpc2lvbiAyNDI5OTkpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rlc3QvcnVubmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNs
YXNzIFJ1bm5lcihvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcmludGVyLCBsb2Fk
ZXIpOgogICAgICAgICBzZWxmLnByaW50ZXIgPSBwcmludGVyCiAgICAgICAgIHNlbGYubG9hZGVy
ID0gbG9hZGVyCi0gICAgICAgIHNlbGYudGVzdHNfcnVuID0gMAorICAgICAgICBzZWxmLnRlc3Rz
X3J1biA9IFtdCiAgICAgICAgIHNlbGYuZXJyb3JzID0gW10KICAgICAgICAgc2VsZi5mYWlsdXJl
cyA9IFtdCiAgICAgICAgIHNlbGYud29ya2VyX2ZhY3RvcnkgPSBsYW1iZGEgY2FsbGVyOiBfV29y
a2VyKGNhbGxlciwgc2VsZi5sb2FkZXIpCkBAIC02MCw3ICs2MCw3IEBAIGNsYXNzIFJ1bm5lcihv
YmplY3QpOgogICAgICAgICAgICAgc2VsZi5wcmludGVyLnByaW50X3N0YXJ0ZWRfdGVzdChzb3Vy
Y2UsIHRlc3RfbmFtZSkKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIHNlbGYudGVzdHNf
cnVuICs9IDEKKyAgICAgICAgc2VsZi50ZXN0c19ydW4uYXBwZW5kKHRlc3RfbmFtZSkKICAgICAg
ICAgaWYgZmFpbHVyZXM6CiAgICAgICAgICAgICBzZWxmLmZhaWx1cmVzLmFwcGVuZCgodGVzdF9u
YW1lLCBmYWlsdXJlcykpCiAgICAgICAgIGlmIGVycm9yczoKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90ZXN0L3J1bm5lcl91bml0dGVzdC5weQkocmV2aXNpb24gMjQyOTk5KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L3J1bm5lcl91bml0dGVzdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtOTIsNiArOTIsNiBAQCBjbGFzcyBSdW5uZXJUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3Rlc3QzIChGb28pJywgJ0UnLCAn
dGVzdDNcbmVycmVkJykpCiAgICAgICAgIHJ1bm5lciA9IFJ1bm5lcihQcmludGVyKHN0cmVhbSwg
b3B0aW9ucyksIGxvYWRlcikKICAgICAgICAgcnVubmVyLnJ1bihbJ0Zvby50ZXN0MScsICdGb28u
dGVzdDInLCAnRm9vLnRlc3QzJ10sIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVubmVy
LnRlc3RzX3J1biwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocnVubmVyLnRlc3Rz
X3J1biksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJ1bm5lci5mYWlsdXJlcyks
IDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJ1bm5lci5lcnJvcnMpLCAxKQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQkocmV2
aXNpb24gMjQyOTk5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5p
dF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNSBAQAogIyBDb3B5cmlnaHQgKEMpIDIw
MTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQorIyBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMTQsNiArMTE1LDggQEAgY2xhc3MgQXV0b2luc3RhbGxJbXBvcnRIb29r
KG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX3B5dGVzdF90aW1lb3V0KCkKICAg
ICAgICAgZWxpZiAnLnB5dGVzdCcgaW4gZnVsbG5hbWU6CiAgICAgICAgICAgICBzZWxmLl9pbnN0
YWxsX3B5dGVzdCgpCisgICAgICAgIGVsaWYgJy5yZXF1ZXN0cycgaW4gZnVsbG5hbWU6CisgICAg
ICAgICAgICBzZWxmLl9pbnN0YWxsX3JlcXVlc3RzKCkKIAogICAgIGRlZiBfaW5zdGFsbF9tZWNo
YW5pemUoc2VsZik6CiAgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0aG9u
aG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUvbWVjaGFuaXplLTAuMi41LnRh
ci5neiIsCkBAIC0xNjEsNiArMTY0LDIxIEBAIGNsYXNzIEF1dG9pbnN0YWxsSW1wb3J0SG9vayhv
YmplY3QpOgogICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3Rl
ZC5vcmcvcGFja2FnZXMvYTIvZWMvNDE1ZDBjY2NjMWVkNDFjZDdmZGY2OWFkOTg5ZGExNmE4ZDEz
MDU3OTk2MzcxMDA0Y2FiNGJhZmM0OGYzL3B5dGVzdC0zLjYuMi50YXIuZ3oiLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInB5dGVzdC0zLjYuMi9zcmMvcHl0ZXN0LnB5IikKIAorICAg
IGRlZiBfaW5zdGFsbF9yZXF1ZXN0cyhzZWxmKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX2F1dG9p
bnN0YWxsZWRfZGlyX2lzX2luX3N5c19wYXRoKCkKKyAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0
cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzLzA2L2I4L2QxZWEzODUxM2MyMmU4
YzkwNjI3NWQxMzU4MThmZWUxNmFkODQ5NTk4NTk1NmE5YjdlMmJiMjE5NDJhMS9jZXJ0aWZpLTIw
MTkuMy45LnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImNlcnRpZmktMjAxOS4zLjkv
Y2VydGlmaSIpCisgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0aG9uaG9z
dGVkLm9yZy9wYWNrYWdlcy9mYy9iYi9hNTc2OGMyMzBmOWRkYjAzYWNjOWVmM2YwZDRhM2NmOTM0
NjI0NzM3OTVkMThlOTUzNTQ5OGM4ZjkyOWQvY2hhcmRldC0zLjAuNC50YXIuZ3oiLAorICAgICAg
ICAgICAgICAgICAgICAgICJjaGFyZGV0LTMuMC40L2NoYXJkZXQiKQorICAgICAgICBzZWxmLl9p
bnN0YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvZmMvYmIvYTU3
NjhjMjMwZjlkZGIwM2FjYzllZjNmMGQ0YTNjZjkzNDYyNDczNzk1ZDE4ZTk1MzU0OThjOGY5Mjlk
L2NoYXJkZXQtMy4wLjQudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiY2hhcmRldC0z
LjAuNC9jaGFyZGV0IikKKyAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9maWxlcy5weXRo
b25ob3N0ZWQub3JnL3BhY2thZ2VzL2FkLzEzL2ViNTY5NTFiNmY3OTUwY2FkYjU3OWNhMTY2ZTQ0
OGJhNzdmOWQyNGVmYzAzZWRkN2U1NWZhNTdkMDRiNy9pZG5hLTIuOC50YXIuZ3oiLAorICAgICAg
ICAgICAgICAgICAgICAgICJpZG5hLTIuOC9pZG5hIikKKyAgICAgICAgc2VsZi5faW5zdGFsbCgi
aHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2IxLzUzLzM3ZDgyYWIzOTEz
OTM1NjVmMmY4MzFiOGVlZGJmZmQ1N2RiNWE3MTgyMTZmODJmMWE4YjRkMzgxYTFjMS91cmxsaWIz
LTEuMjQuMS50YXIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgICJ1cmxsaWIzLTEuMjQuMS9z
cmMvdXJsbGliMyIpCisgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0aG9u
aG9zdGVkLm9yZy9wYWNrYWdlcy81Mi8yYy81MTRlNGFjMjVkYTJiMDhjYTVhNDY0YzUwNDYzNjgy
MTI2Mzg1YzQyNzJjMTgxOTM4NzZlOTFmNGJjMzgvcmVxdWVzdHMtMi4yMS4wLnRhci5neiIsCisg
ICAgICAgICAgICAgICAgICAgICAgInJlcXVlc3RzLTIuMjEuMC9yZXF1ZXN0cyIpCisKICAgICBk
ZWYgX2luc3RhbGxfcHlsaW50KHNlbGYpOgogICAgICAgICBzZWxmLl9lbnN1cmVfYXV0b2luc3Rh
bGxlZF9kaXJfaXNfaW5fc3lzX3BhdGgoKQogICAgICAgICBpZiAobm90IHNlbGYuX2ZzLmV4aXN0
cyhzZWxmLl9mcy5qb2luKF9BVVRPSU5TVEFMTEVEX0RJUiwgInB5bGludCIpKSBvcgpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVlc191bml0dGVzdC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNDI5OTkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xODMs
MTAgKzE4MywxMCBAQCBjbGFzcyBQYXRjaFByb2Nlc3NpbmdRdWV1ZVRlc3QoQ29tbWFuZHNUCiAg
ICAgICAgIHF1ZXVlLl9vcHRpb25zID0gTW9jaygpCiAgICAgICAgIHF1ZXVlLl9vcHRpb25zLnBv
cnQgPSBOb25lCiAgICAgICAgIHBhdGNoID0gcXVldWUuX3Rvb2wuYnVncy5mZXRjaF9hdHRhY2ht
ZW50KDEwMDAxKQotICAgICAgICBleHBlY3RlZF9sb2dzID0gIiIiTU9DSyBhZGRfYXR0YWNobWVu
dF90b19idWc6IGJ1Z19pZD01MDAwMCwgZGVzY3JpcHRpb249QXJjaGl2ZSBvZiBsYXlvdXQtdGVz
dC1yZXN1bHRzIGZyb20gYm90IGZvciBtYWMtc25vd2xlb3BhcmQgZmlsZW5hbWU9bGF5b3V0LXRl
c3QtcmVzdWx0cy56aXAgbWltZXR5cGU9Tm9uZQorICAgICAgICBleHBlY3RlZF9sb2dzID0gIiIi
TU9DSyBhZGRfYXR0YWNobWVudF90b19idWc6IGJ1Z19pZD01MDAwMCwgZGVzY3JpcHRpb249QXJj
aGl2ZSBvZiBsYXlvdXQtdGVzdC1yZXN1bHRzIGZyb20gYm90IGZvciBtYWMtaGlnaHNpZXJyYSBm
aWxlbmFtZT1sYXlvdXQtdGVzdC1yZXN1bHRzLnppcCBtaW1ldHlwZT1Ob25lCiAtLSBCZWdpbiBj
b21tZW50IC0tCiBUaGUgYXR0YWNoZWQgdGVzdCBmYWlsdXJlcyB3ZXJlIHNlZW4gd2hpbGUgcnVu
bmluZyBydW4td2Via2l0LXRlc3RzIG9uIHRoZSBtb2NrLXF1ZXVlLgotUG9ydDogbWFjLXNub3ds
ZW9wYXJkICBQbGF0Zm9ybTogTW9ja1BsYXRmb3JtIDEuMAorUG9ydDogbWFjLWhpZ2hzaWVycmEg
IFBsYXRmb3JtOiBNb2NrUGxhdGZvcm0gMS4wCiAtLSBFbmQgY29tbWVudCAtLQogIiIiCiAgICAg
ICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBxdWV1ZS5fdXBsb2FkX3Jl
c3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gsIFtwYXRjaCwgTW9jaygpXSwgZXhwZWN0ZWRfbG9ncz1l
eHBlY3RlZF9sb2dzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364856</attachid>
            <date>2019-03-15 15:20:44 -0700</date>
            <delta_ts>2019-03-15 15:57:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190315091629.patch</filename>
            <type>text/plain</type>
            <size>40435</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE5LTAzLTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6Cisg
ICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOiBBZGQgcmVxdWVzdHMg
YXV0by1pbnN0YWxsLgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxsX3Jl
cXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBs
b2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGlu
Zy4KKwogMjAxOS0wMy0xNSAgU2hhd24gUm9iZXJ0cyAgPHNyb2JlcnRzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjQyOTUyLgpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMyBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVj
dG9yeSBmb3IgbW9kdWxlIGZpbGVzCisKKyMgS2VlcCB0aGlzIGZpbGUgZnJlZSBvZiBhbnkgY29k
ZSBvciBpbXBvcnQgc3RhdGVtZW50cyB0aGF0IGNvdWxkCisjIGNhdXNlIGVpdGhlciBhbiBlcnJv
ciB0byBvY2N1ciBvciBhIGxvZyBtZXNzYWdlIHRvIGJlIGxvZ2dlZC4KKyMgVGhpcyBlbnN1cmVz
IHRoYXQgY2FsbGluZyBjb2RlIGNhbiBpbXBvcnQgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tCisj
IHdlYmtpdHB5IGJlZm9yZSBhbnkgZXJyb3JzIG9yIGxvZyBtZXNzYWdlcyBkdWUgdG8gY29kZSBp
biB0aGlzIGZpbGUuCisjIEluaXRpYWxpemF0aW9uIGNvZGUgY2FuIGluY2x1ZGUgdGhpbmdzIGxp
a2UgdmVyc2lvbi1jaGVja2luZyBjb2RlIGFuZAorIyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gY29k
ZS4KKyMKKyMgV2UgZG8gbm90IGV4ZWN1dGUgYW55IHZlcnNpb24tY2hlY2tpbmcgY29kZSBvciBs
b2dnaW5nIGNvbmZpZ3VyYXRpb24KKyMgY29kZSBpbiB0aGlzIGZpbGUgc28gdGhhdCBjYWxsZXJz
IGNhbiBvcHQtaW4gYXMgdGhleSB3YW50LiAgVGhpcyBhbHNvCisjIGFsbG93cyBkaWZmZXJlbnQg
Y2FsbGVycyB0byBjaG9vc2UgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uIGNvZGUsCisjIGFzIG5l
Y2Vzc2FyeS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5
CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25z
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9wdHBhcnNlCisKKworZGVmIHVwbG9hZF9vcHRp
b25zKCk6CisgICAgcmV0dXJuIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcmVw
b3J0JywgYWN0aW9uPSdhcHBlbmQnLCBkZXN0PSdyZXBvcnRfdXJscycsIGhlbHA9J1VSTCAob3Ig
VVJMcykgdG8gcmVwb3J0IHRlc3QgcmVzdWx0cyB0bycpLAorICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLS1idWlsZGJvdC1tYXN0ZXInLCBoZWxwPSdUaGUgdXJsIG9mIHRoZSBidWlsZGJv
dCBtYXN0ZXIuJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkZXItbmFt
ZScsIGhlbHA9J1RoZSBuYW1lIG9mIHRoZSBidWlsZGJvdCBidWlsZGVyIHRlc3RzIHdlcmUgcnVu
IG9uLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZC1udW1iZXInLCBo
ZWxwPSdUaGUgYnVpbGRib3QgYnVpbGQgbnVtYmVyIHRlc3RzIGFyZSBhc3NvY2lhdGVkIHdpdGgu
JyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkYm90LXdvcmtlcicsIGhl
bHA9J1RoZSBidWlsZGJvdCB3b3JrZXIgdGVzdHMgd2VyZSBydW4gb24uJyksCisgICAgXQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5CShub25leGlzdGVudCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5yZXF1ZXN0cwor
CitpbXBvcnQganNvbgoraW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBwbGF0
Zm9ybSBhcyBob3N0X3BsYXRmb3JtCisKKworY2xhc3MgVXBsb2FkKG9iamVjdCk6CisgICAgVVBM
T0FEX0VORFBPSU5UID0gJy9hcGkvdXBsb2FkJworICAgIEJVSUxEQk9UX0RFVEFJTFMgPSBbJ2J1
aWxkYm90LW1hc3RlcicsICdidWlsZGVyLW5hbWUnLCAnYnVpbGQtbnVtYmVyJywgJ2J1aWxkYm90
LXdvcmtlciddCisgICAgVkVSU0lPTiA9IDAKKworICAgIGNsYXNzIEV4cGVjdGF0aW9uczoKKyAg
ICAgICAgIyBUaGVzZSBhcmUgb3JkZXJlZCBieSBwcmlvcml0eSwgbWVhbmluZyB0aGF0IGEgdGVz
dCB3aGljaCBib3RoIGNyYXNoZXMgYW5kIGhhcworICAgICAgICAjIGEgd2FybmluZyBzaG91bGQg
YmUgY29uc2lkZXJlZCB0byBoYXZlIGNyYXNoZWQuCisgICAgICAgIE9SREVSID0gWworICAgICAg
ICAgICAgJ0NSQVNIJywKKyAgICAgICAgICAgICdUSU1FT1VUJywKKyAgICAgICAgICAgICdJTUFH
RScsICAgIyBJbWFnZS1kaWZmCisgICAgICAgICAgICAnQVVESU8nLCAgICMgQXVkaW8tZGlmZgor
ICAgICAgICAgICAgJ1RFWFQnLCAgICAjIFRleHQtZGlmZgorICAgICAgICAgICAgJ0ZBSUwnLAor
ICAgICAgICAgICAgJ0VSUk9SJywKKyAgICAgICAgICAgICdXQVJOSU5HJywKKyAgICAgICAgICAg
ICdQQVNTJywKKyAgICAgICAgXQorICAgICAgICBDUkFTSCwgVElNRU9VVCwgSU1BR0UsIEFVRElP
LCBURVhULCBGQUlMLCBFUlJPUiwgV0FSTklORywgUEFTUyA9IE9SREVSCisKKyAgICBjbGFzcyBF
bmNvZGVyKGpzb24uSlNPTkVuY29kZXIpOgorCisgICAgICAgIGRlZiBkZWZhdWx0KHNlbGYsIG9i
aik6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgVXBsb2FkKToKKyAgICAgICAgICAg
ICAgICBpZiBub3Qgb2JqLnN1aXRlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCdObyBzdWl0ZSBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxvYWQnKQorICAgICAgICAgICAg
ICAgIGlmIG5vdCBvYmouY29tbWl0czoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcignTm8gY29tbWl0cyBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxvYWQnKQorCisgICAgICAg
ICAgICAgICAgZGV0YWlscyA9IG9iai5kZXRhaWxzIG9yIG9iai5jcmVhdGVfZGV0YWlscygpCisg
ICAgICAgICAgICAgICAgYnVpbGRib3RfYXJncyA9IFtkZXRhaWxzLmdldChhcmcsIE5vbmUpIGlz
IE5vbmUgZm9yIGFyZyBpbiBvYmouQlVJTERCT1RfREVUQUlMU10KKyAgICAgICAgICAgICAgICBp
ZiBhbnkoYnVpbGRib3RfYXJncykgYW5kIG5vdCBhbGwoYnVpbGRib3RfYXJncyk6CisgICAgICAg
ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0FsbCBidWlsZGJvdCBkZXRhaWxzIG11c3Qg
YmUgZGVmaW5lZCBmb3IgdXBsb2FkJykKKworICAgICAgICAgICAgICAgIGRlZiB1bnBhY2tfdGVz
dChjdXJyZW50LCBwYXRoX3RvX3Rlc3QsIGRhdGEpOgorICAgICAgICAgICAgICAgICAgICBpZiBs
ZW4ocGF0aF90b190ZXN0KSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFtw
YXRoX3RvX3Rlc3RbMF1dID0gZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisg
ICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjdXJyZW50LmdldChwYXRoX3RvX3Rlc3RbMF0pOgor
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1dID0ge30KKyAg
ICAgICAgICAgICAgICAgICAgdW5wYWNrX3Rlc3QoY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1dLCBw
YXRoX3RvX3Rlc3RbMTpdLCBkYXRhKQorCisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHt9Cisg
ICAgICAgICAgICAgICAgZm9yIHRlc3QsIGRhdGEgaW4gb2JqLnJlc3VsdHMuaXRlcml0ZW1zKCk6
CisgICAgICAgICAgICAgICAgICAgIHVucGFja190ZXN0KHJlc3VsdHMsIHRlc3Quc3BsaXQoJy8n
KSwgZGF0YSkKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRpY3QoCisgICAgICAgICAgICAg
ICAgICAgIHZlcnNpb249b2JqLlZFUlNJT04sCisgICAgICAgICAgICAgICAgICAgIHN1aXRlPW9i
ai5zdWl0ZSwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbj1vYmouY29uZmlndXJh
dGlvbiBvciBvYmouY3JlYXRlX2NvbmZpZ3VyYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAg
Y29tbWl0cz1vYmouY29tbWl0cywKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzPWRp
Y3QoCisgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzPWRldGFpbHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICBydW5fc3RhdHM9b2JqLnJ1bl9zdGF0cyBvciBvYmouY3JlYXRlX3J1bl9z
dGF0cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cz1yZXN1bHRzLAorICAgICAg
ICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBpZiBv
YmoudGltZXN0YW1wOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRbJ3RpbWVzdGFtcCddID0g
b2JqLnRpbWVzdGFtcAorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgICAg
IHJldHVybiBzdXBlcihVcGxvYWQuRW5jb2Rlciwgc2VsZikuZGVmYXVsdChvYmopCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9jb25maWd1cmF0aW9uKAorICAgICAgICAgICAg
cGxhdGZvcm09Tm9uZSwKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1GYWxzZSwKKyAgICAgICAg
ICAgIHZlcnNpb249Tm9uZSwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVyZT1Ob25lLAorICAgICAg
ICAgICAgdmVyc2lvbl9uYW1lPU5vbmUsCisgICAgICAgICAgICBtb2RlbD1Ob25lLAorICAgICAg
ICAgICAgc3R5bGU9Tm9uZSwgICAjIERlYnVnL1Byb2R1Y3Rpb24vUmVsZWFzZQorICAgICAgICAg
ICAgZmxhdm9yPU5vbmUsICAjIER1bXBpbmcgZ3JvdW5kIHN1aXRlLXdpZGUgY29uZmlndXJhdGlv
biBjaGFuZ2VzIChpZSwgR3VhcmRNYWxsb2MpCisgICAgICAgICAgICBzZGs9Tm9uZSwKKyAgICAg
ICAgKToKKworICAgICAgICAjIFRoaXMgZGV2aWF0ZXMgc2xpZ2h0bHkgZnJvbSB0aGUgcmVzdCBv
ZiB3ZWJraXRweSwgYnV0IGl0IGFsbG93cyB0aGlzIGZpbGUgdG8gYmUgZW50aXJlbHkgcG9ydGFi
bGUuCisgICAgICAgIGNvbmZpZyA9IGRpY3QoCisgICAgICAgICAgICBwbGF0Zm9ybT1wbGF0Zm9y
bSBvciAoaG9zdF9wbGF0Zm9ybS5zeXN0ZW0oKSBpZiBob3N0X3BsYXRmb3JtLnN5c3RlbSgpICE9
ICdEYXJ3aW4nIGVsc2UgJ21hYycpLmxvd2VyKCksCisgICAgICAgICAgICBpc19zaW11bGF0b3I9
aXNfc2ltdWxhdG9yLAorICAgICAgICAgICAgdmVyc2lvbj12ZXJzaW9uIG9yIChob3N0X3BsYXRm
b3JtLnJlbGVhc2UoKSBpZiBob3N0X3BsYXRmb3JtLnN5c3RlbSgpICE9ICdEYXJ3aW4nIGVsc2Ug
aG9zdF9wbGF0Zm9ybS5tYWNfdmVyKClbMF0pLAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPWFy
Y2hpdGVjdHVyZSBvciBob3N0X3BsYXRmb3JtLm1hY2hpbmUoKSwKKyAgICAgICAgKQorICAgICAg
ICBvcHRpb25hbF9kYXRhID0gZGljdCh2ZXJzaW9uX25hbWU9dmVyc2lvbl9uYW1lLCBtb2RlbD1t
b2RlbCwgc3R5bGU9c3R5bGUsIGZsYXZvcj1mbGF2b3IsIHNkaz1zZGspCisgICAgICAgIGNvbmZp
Zy51cGRhdGUoe2tleTogdmFsdWUgZm9yIGtleSwgdmFsdWUgaW4gb3B0aW9uYWxfZGF0YS5pdGVy
aXRlbXMoKSBpZiB2YWx1ZSBpcyBub3QgTm9uZX0pCisgICAgICAgIHJldHVybiBjb25maWcKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2NvbW1pdChyZXBvc2l0b3J5X2lkLCBp
ZCwgYnJhbmNoPU5vbmUpOgorICAgICAgICBjb21taXQgPSBkaWN0KHJlcG9zaXRvcnlfaWQ9cmVw
b3NpdG9yeV9pZCwgaWQ9aWQpCisgICAgICAgIGlmIGJyYW5jaDoKKyAgICAgICAgICAgIGNvbW1p
dFsnYnJhbmNoJ10gPSBicmFuY2gKKyAgICAgICAgcmV0dXJuIGNvbW1pdAorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBjcmVhdGVfZGV0YWlscyhsaW5rPU5vbmUsIG9wdGlvbnM9Tm9uZSwg
Kiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCoqa3dhcmdzKQorICAgICAgICBpZiBs
aW5rOgorICAgICAgICAgICAgcmVzdWx0WydsaW5rJ10gPSBsaW5rCisgICAgICAgIGlmIG5vdCBv
cHRpb25zOgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgIGZvciBlbGVtZW50
IGluIFVwbG9hZC5CVUlMREJPVF9ERVRBSUxTOgorICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRy
KG9wdGlvbnMsIGVsZW1lbnQucmVwbGFjZSgnLScsICdfJyksIE5vbmUpCisgICAgICAgICAgICBp
ZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXN1bHRbZWxlbWVudF0gPSB2
YWx1ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IGNyZWF0ZV9ydW5fc3RhdHMoc3RhcnRfdGltZT1Ob25lLCBlbmRfdGltZT1Ob25lLCB0ZXN0c19z
a2lwcGVkPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc3RhdHMgPSBkaWN0KCoqa3dhcmdzKQor
ICAgICAgICBvcHRpb25hbF9kYXRhID0gZGljdChzdGFydF90aW1lPXN0YXJ0X3RpbWUsIGVuZF90
aW1lPWVuZF90aW1lLCB0ZXN0c19za2lwcGVkPXRlc3RzX3NraXBwZWQpCisgICAgICAgIHN0YXRz
LnVwZGF0ZSh7a2V5OiB2YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBvcHRpb25hbF9kYXRhLml0ZXJp
dGVtcygpIGlmIHZhbHVlIGlzIG5vdCBOb25lfSkKKyAgICAgICAgcmV0dXJuIHN0YXRzCisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV90ZXN0X3Jlc3VsdChleHBlY3RlZD1Ob25l
LCBhY3R1YWw9Tm9uZSwgbG9nPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gZGlj
dCgqKmt3YXJncykKKworICAgICAgICAjIFRlc3RzIHdoaWNoIGRvbid0IGRlY2xhcmUgZXhwZWN0
YXRpb25zIG9yIHJlc3VsdHMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBwYXNzZWQuCisgICAgICAgIG9w
dGlvbmFsX2RhdGEgPSBkaWN0KGV4cGVjdGVkPWV4cGVjdGVkLCBhY3R1YWw9YWN0dWFsLCBsb2c9
bG9nKQorICAgICAgICByZXN1bHQudXBkYXRlKHtrZXk6IHZhbHVlIGZvciBrZXksIHZhbHVlIGlu
IG9wdGlvbmFsX2RhdGEuaXRlcml0ZW1zKCkgaWYgdmFsdWUgaXMgbm90IE5vbmV9KQorICAgICAg
ICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3VpdGU9Tm9uZSwgY29u
ZmlndXJhdGlvbj1Ob25lLCBjb21taXRzPVtdLCB0aW1lc3RhbXA9Tm9uZSwgZGV0YWlscz1Ob25l
LCBydW5fc3RhdHM9Tm9uZSwgcmVzdWx0cz17fSk6CisgICAgICAgIHNlbGYuc3VpdGUgPSBzdWl0
ZQorICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uCisgICAgICAgIHNl
bGYuY29tbWl0cyA9IGNvbW1pdHMKKyAgICAgICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAK
KyAgICAgICAgc2VsZi5kZXRhaWxzID0gZGV0YWlscworICAgICAgICBzZWxmLnJ1bl9zdGF0cyA9
IHJ1bl9zdGF0cworICAgICAgICBzZWxmLnJlc3VsdHMgPSByZXN1bHRzCisKKyAgICBkZWYgdXBs
b2FkKHNlbGYsIHVybCwgbG9nX2xpbmVfZnVuYz1sYW1iZGEgdmFsOiBzeXMuc3Rkb3V0LndyaXRl
KHZhbCArICdcbicpKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1
ZXN0cy5wb3N0KHVybCArIHNlbGYuVVBMT0FEX0VORFBPSU5ULCBkYXRhPWpzb24uZHVtcHMoc2Vs
ZiwgY2xzPVVwbG9hZC5FbmNvZGVyKSkKKyAgICAgICAgZXhjZXB0IHJlcXVlc3RzLmV4Y2VwdGlv
bnMuQ29ubmVjdGlvbkVycm9yOgorICAgICAgICAgICAgbG9nX2xpbmVfZnVuYygnICcgKiA0ICsg
J0ZhaWxlZCB0byB1cGxvYWQgdG8ge30sIHJlc3VsdHMgc2VydmVyIG5vdCBvbmxpbmUnLmZvcm1h
dCh1cmwpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVy
cm9yIGFzIGU6CisgICAgICAgICAgICBsb2dfbGluZV9mdW5jKCcgJyAqIDQgKyAnRmFpbGVkIHRv
IGVuY29kZSB1cGxvYWQgZGF0YToge30nLmZvcm1hdChlKSkKKyAgICAgICAgICAgIHJldHVybiBG
YWxzZQorCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAg
ICAgIGxvZ19saW5lX2Z1bmMoJyAnICogNCArICdFcnJvciB1cGxvYWRpbmcgdG8ge306Jy5mb3Jt
YXQodXJsKSkKKyAgICAgICAgICAgIGxvZ19saW5lX2Z1bmMoJyAnICogOCArIHJlc3BvbnNlLmpz
b24oKVsnZGVzY3JpcHRpb24nXSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAg
IGxvZ19saW5lX2Z1bmMoJyAnICogNCArICdVcGxvYWRlZCByZXN1bHRzIHRvIHt9Jy5mb3JtYXQo
dXJsKSkKKyAgICAgICAgcmV0dXJuIFRydWUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cmVzdWx0cy91cGxvYWRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjE2IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQucmVxdWVzdHMK
KworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQganNvbgoraW1wb3J0IHJlcXVlc3RzCitpbXBv
cnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkucmVzdWx0cy51cGxvYWQg
aW1wb3J0IFVwbG9hZAorZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5IGltcG9ydCBtb2NrCisKKwor
Y2xhc3MgVXBsb2FkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBPcHRpb25z
KG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAg
ICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2FyZ3MuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAg
ICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbHVlKQorCisgICAgY2xhc3MgTW9ja1Jlc3BvbnNlKG9i
amVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0dXNfY29kZT0yMDAsIHRleHQ9
JycpOgorICAgICAgICAgICAgc2VsZi5zdGF0dXNfY29kZSA9IHN0YXR1c19jb2RlCisgICAgICAg
ICAgICBzZWxmLnRleHQgPSB0ZXh0CisKKyAgICAgICAgZGVmIGpzb24oc2VsZik6CisgICAgICAg
ICAgICByZXR1cm4ganNvbi5sb2FkcyhzZWxmLnRleHQpCisKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIG5vcm1hbGl6ZShkYXRhKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBiYXNl
c3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBzdHIoZGF0YSkKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLk1hcHBpbmcpOgorICAgICAgICAgICAgcmV0dXJuIGRp
Y3QobWFwKFVwbG9hZFRlc3Qubm9ybWFsaXplLCBkYXRhLml0ZXJpdGVtcygpKSkKKyAgICAgICAg
ZWxpZiBpc2luc3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKToKKyAgICAgICAgICAg
IHJldHVybiB0eXBlKGRhdGEpKG1hcChVcGxvYWRUZXN0Lm5vcm1hbGl6ZSwgZGF0YSkpCisgICAg
ICAgIHJldHVybiBkYXRhCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHJhaXNlX3JlcXVl
c3RzX0Nvbm5lY3Rpb25FcnJvcigpOgorICAgICAgICByYWlzZSByZXF1ZXN0cy5leGNlcHRpb25z
LkNvbm5lY3Rpb25FcnJvcigpCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZyhzZWxmKToKKyAgICAg
ICAgc3RhcnRfdGltZSwgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKSAtIDMsIHRpbWUudGltZSgpCisg
ICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0
cycsCisgICAgICAgICAgICBjb25maWd1cmF0aW9uPVVwbG9hZC5jcmVhdGVfY29uZmlndXJhdGlv
bigKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybT0nbWFjJywKKyAgICAgICAgICAgICAgICB2ZXJz
aW9uPScxMC4xMy4wJywKKyAgICAgICAgICAgICAgICB2ZXJzaW9uX25hbWU9J0hpZ2ggU2llcnJh
JywKKyAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmU9J3g4Nl82NCcsCisgICAgICAgICAgICAg
ICAgc2RrPScxN0E0MDUnLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIGRldGFpbHM9VXBs
b2FkLmNyZWF0ZV9kZXRhaWxzKGxpbms9J2h0dHBzOi8vd2Via2l0Lm9yZycpLAorICAgICAgICAg
ICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3Np
dG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAg
ICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAgICAgIHJ1bl9zdGF0
cz1VcGxvYWQuY3JlYXRlX3J1bl9zdGF0cygKKyAgICAgICAgICAgICAgICBzdGFydF90aW1lPXN0
YXJ0X3RpbWUsCisgICAgICAgICAgICAgICAgZW5kX3RpbWU9ZW5kX3RpbWUsCisgICAgICAgICAg
ICAgICAgdGVzdHNfc2tpcHBlZD0wLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIHJlc3Vs
dHM9eworICAgICAgICAgICAgICAgICd3ZWJraXRweS50ZXN0MSc6IHt9LAorICAgICAgICAgICAg
ICAgICd3ZWJraXRweS50ZXN0Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoZXhwZWN0ZWQ9
VXBsb2FkLkV4cGVjdGF0aW9ucy5QQVNTLCBhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlM
KSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICkKKyAgICAgICAgZ2VuZXJhdGVkX2RpY3QgPSBz
ZWxmLm5vcm1hbGl6ZShqc29uLmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVu
Y29kZXIpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd2ZXJz
aW9uJ10sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3N1aXRl
J10sICd3ZWJraXRweS10ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVk
X2RpY3RbJ2NvbmZpZ3VyYXRpb24nXSwgc2VsZi5ub3JtYWxpemUoZGljdCgKKyAgICAgICAgICAg
IHBsYXRmb3JtPSdtYWMnLAorICAgICAgICAgICAgaXNfc2ltdWxhdG9yPUZhbHNlLAorICAgICAg
ICAgICAgdmVyc2lvbj0nMTAuMTMuMCcsCisgICAgICAgICAgICB2ZXJzaW9uX25hbWU9J0hpZ2gg
U2llcnJhJywKKyAgICAgICAgICAgIGFyY2hpdGVjdHVyZT0neDg2XzY0JywKKyAgICAgICAgICAg
IHNkaz0nMTdBNDA1JywKKyAgICAgICAgKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2Vu
ZXJhdGVkX2RpY3RbJ2NvbW1pdHMnXSwgW2RpY3QoCisgICAgICAgICAgICByZXBvc2l0b3J5X2lk
PSd3ZWJraXQnLAorICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgYnJhbmNoPSd0cnVu
aycsCisgICAgICAgICldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0
Wyd0ZXN0X3Jlc3VsdHMnXVsnZGV0YWlscyddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KGxpbms9J2h0
dHBzOi8vd2Via2l0Lm9yZycpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRf
ZGljdFsndGVzdF9yZXN1bHRzJ11bJ3J1bl9zdGF0cyddLCBzZWxmLm5vcm1hbGl6ZShkaWN0KAor
ICAgICAgICAgICAgc3RhcnRfdGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgZW5kX3RpbWU9
ZW5kX3RpbWUsCisgICAgICAgICAgICB0ZXN0c19za2lwcGVkPTAsCisgICAgICAgICkpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncmVz
dWx0cyddLCBzZWxmLm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAnd2Via2l0cHkudGVzdDEnOiB7
fSwKKyAgICAgICAgICAgICd3ZWJraXRweS50ZXN0Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1
bHQoZXhwZWN0ZWQ9VXBsb2FkLkV4cGVjdGF0aW9ucy5QQVNTLCBhY3R1YWw9VXBsb2FkLkV4cGVj
dGF0aW9ucy5GQUlMKSwKKyAgICAgICAgfSkpCisKKyAgICBkZWYgdGVzdF91cGxvYWQoc2VsZik6
CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10
ZXN0cycsCisgICAgICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAg
ICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1
JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAg
ICAgICApCisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PWxh
bWJkYSB1cmwsIGRhdGE6IHNlbGYuTW9ja1Jlc3BvbnNlKCkpOgorICAgICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKHVwbG9hZC51cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1bHRzJywgbG9n
X2xpbmVfZnVuYz1sYW1iZGEgXzogTm9uZSkpCisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdy
ZXF1ZXN0cy5wb3N0JywgbmV3PWxhbWJkYSB1cmwsIGRhdGE6IHNlbGYucmFpc2VfcmVxdWVzdHNf
Q29ubmVjdGlvbkVycm9yKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxvYWQu
dXBsb2FkKCdodHRwczovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lX2Z1bmM9bGFtYmRh
IF86IE5vbmUpKQorCisgICAgICAgIG1vY2tfNDA0ID0gbW9jay5wYXRjaCgncmVxdWVzdHMucG9z
dCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNwb25zZSgKKyAgICAgICAgICAg
IHN0YXR1c19jb2RlPTQwNCwKKyAgICAgICAgICAgIHRleHQ9anNvbi5kdW1wcyhkaWN0KGRlc2Ny
aXB0aW9uPSdObyBzdWNoIGFkZHJlc3MnKSksCisgICAgICAgICkpCisgICAgICAgIHdpdGggbW9j
a180MDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHVwbG9hZC51cGxvYWQoJ2h0dHBz
Oi8vd2Via2l0Lm9yZy9yZXN1bHRzJywgbG9nX2xpbmVfZnVuYz1sYW1iZGEgXzogTm9uZSkpCisK
KyAgICBkZWYgdGVzdF9wYWNrZWRfdGVzdChzZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2Fk
KAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNvbW1p
dHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9
J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5j
aD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICAgICByZXN1bHRzPXsKKyAgICAg
ICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90ZXN0MSc6IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1
bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisgICAgICAgICAgICAgICAgJ2Rp
cjEvc3ViLWRpcjEvdGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxv
YWQuRXhwZWN0YXRpb25zLlRJTUVPVVQpLAorICAgICAgICAgICAgICAgICdkaXIxL3N1Yi1kaXIy
L3Rlc3QzJzoge30sCisgICAgICAgICAgICAgICAgJ2RpcjEvc3ViLWRpcjIvdGVzdDQnOiB7fSwK
KyAgICAgICAgICAgICAgICAnZGlyMi9zdWItZGlyMy90ZXN0NSc6IHt9LAorICAgICAgICAgICAg
ICAgICdkaXIyL3Rlc3Q2Jzoge30sCisgICAgICAgICAgICB9CisgICAgICAgICkKKyAgICAgICAg
Z2VuZXJhdGVkX2RpY3QgPSBzZWxmLm5vcm1hbGl6ZShqc29uLmxvYWRzKGpzb24uZHVtcHModXBs
b2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5l
cmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMnXSwgc2VsZi5ub3JtYWxpemUoewor
ICAgICAgICAgICAgJ2RpcjEnOiB7CisgICAgICAgICAgICAgICAgJ3N1Yi1kaXIxJzogeworICAg
ICAgICAgICAgICAgICAgICAndGVzdDEnOiB7J2FjdHVhbCc6IFVwbG9hZC5FeHBlY3RhdGlvbnMu
RkFJTH0sCisgICAgICAgICAgICAgICAgICAgICd0ZXN0Mic6IHsnYWN0dWFsJzogVXBsb2FkLkV4
cGVjdGF0aW9ucy5USU1FT1VUfSwKKyAgICAgICAgICAgICAgICB9LCAnc3ViLWRpcjInOiB7Cisg
ICAgICAgICAgICAgICAgICAgICd0ZXN0Myc6IHt9LAorICAgICAgICAgICAgICAgICAgICAndGVz
dDQnOiB7fSwKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCAnZGlyMic6IHsKKyAg
ICAgICAgICAgICAgICAnc3ViLWRpcjMnOiB7J3Rlc3Q1Jzoge319LAorICAgICAgICAgICAgICAg
ICd0ZXN0Nic6IHt9LAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSkpCisKKyAgICBkZWYgdGVz
dF9ub19zdWl0ZShzZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAg
Y29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAgICAgcmVwb3NpdG9y
eV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAgICAgICAgICAgICAg
YnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAgKQorICAgICAgICB3aXRo
IHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAganNvbi5kdW1wcyh1
cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRlZiB0ZXN0X25vX2NvbW1pdHMoc2Vs
Zik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRw
eS10ZXN0cycsCisgICAgICAgICkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1
ZUVycm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29k
ZXIpCisKKyAgICBkZWYgdGVzdF9idWlsZGJvdChzZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBs
b2FkKAorICAgICAgICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNv
bW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlf
aWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJy
YW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICAgICBkZXRhaWxzPVVwbG9h
ZC5jcmVhdGVfZGV0YWlscyhvcHRpb25zPXNlbGYuT3B0aW9ucygKKyAgICAgICAgICAgICAgICBi
dWlsZGJvdF9tYXN0ZXI9J3dlYmtpdC5vcmcnLAorICAgICAgICAgICAgICAgIGJ1aWxkZXJfbmFt
ZT0nUXVldWUtMScsCisgICAgICAgICAgICAgICAgYnVpbGRfbnVtYmVyPTEsCisgICAgICAgICkp
KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAg
ICAganNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgICAgICB1cGxv
YWQuZGV0YWlsc1snYnVpbGRib3Qtd29ya2VyJ10gPSAnYm90MTIzJworICAgICAgICBnZW5lcmF0
ZWRfZGljdCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNs
cz1VcGxvYWQuRW5jb2RlcikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9k
aWN0Wyd0ZXN0X3Jlc3VsdHMnXVsnZGV0YWlscyddLCBzZWxmLm5vcm1hbGl6ZSh7CisgICAgICAg
ICAgICAnYnVpbGRib3QtbWFzdGVyJzogJ3dlYmtpdC5vcmcnLAorICAgICAgICAgICAgJ2J1aWxk
ZXItbmFtZSc6ICdRdWV1ZS0xJywKKyAgICAgICAgICAgICdidWlsZC1udW1iZXInOiAxLAorICAg
ICAgICAgICAgJ2J1aWxkYm90LXdvcmtlcic6ICdib3QxMjMnLAorICAgICAgICB9KSkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5w
eQkocmV2aXNpb24gMjQzMDA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL2dpdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjkwLDYgKzI5MCwxNCBAQCBjbGFz
cyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYgbmF0aXZlX3JldmlzaW9uKHNlbGYs
IHBhdGgpOgogICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2dpdChbJy1DJywgc2VsZi5maW5kX2No
ZWNrb3V0X3Jvb3QocGF0aCksICdsb2cnLCAnLTEnLCAnLS1wcmV0dHk9Zm9ybWF0OiVIJ10pCiAK
KyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBwYXRoKToKKyAgICAgICAgcmVzdWx0ID0gc2Vs
Zi5fcnVuX2dpdChbJy1DJywgc2VsZi5maW5kX2NoZWNrb3V0X3Jvb3QocGF0aCksICdyZXYtcGFy
c2UnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQnXSkucnN0cmlwKCkKKworICAgICAgICAjIEZvciBn
aXQtc3ZuCisgICAgICAgIGlmIHJlc3VsdC5zdGFydHN3aXRoKCdoZWFkcycpOgorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdFs2Ol0KKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCiAgICAgZGVmIHN2
bl91cmwoc2VsZik6CiAgICAgICAgIGdpdF9jb21tYW5kID0gWydzdm4nLCAnaW5mbyddCiAgICAg
ICAgIHN0YXR1cyA9IHNlbGYuX3J1bl9naXQoZ2l0X2NvbW1hbmQpCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX21vY2sucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5
CShyZXZpc2lvbiAyNDMwMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20vc2NtX21vY2sucHkJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDkgQEAgY2xh
c3MgTW9ja1NDTShvYmplY3QpOgogICAgIGRlZiBuYXRpdmVfcmV2aXNpb24oc2VsZiwgcGF0aCk6
CiAgICAgICAgIHJldHVybiBzZWxmLnN2bl9yZXZpc2lvbihwYXRoKQogCisgICAgZGVmIG5hdGl2
ZV9icmFuY2goc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiAndHJ1bmsnCisKICAgICBkZWYg
dGltZXN0YW1wX29mX3JldmlzaW9uKHNlbGYsIHBhdGgsIHJldmlzaW9uKToKICAgICAgICAgcmV0
dXJuICcyMDEzLTAyLTAxIDA4OjQ4OjA1ICswMDAwJwogCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3Qu
cHkJKHJldmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2No
ZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTkwOSw2ICs5MDks
OSBAQCBFTkQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjbS5oZWFkX3N2bl9yZXZp
c2lvbigpLCBzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24oJy4nKSkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24oJy4nKSwgJzUnKQogCisgICAgZGVmIHRl
c3RfbmF0aXZlX2JyYW5jaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNj
bS5uYXRpdmVfYnJhbmNoKCcuJyksICd0cnVuaycpCisKICAgICBkZWYgdGVzdF9wcm9wc2V0X3By
b3BnZXQoc2VsZik6CiAgICAgICAgIGZpbGVwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuc3ZuX2No
ZWNrb3V0X3BhdGgsICJ0ZXN0X2ZpbGUiKQogICAgICAgICBleHBlY3RlZF9taW1lX3R5cGUgPSAi
eC1hcHBsaWNhdGlvbi9mb28tYmFyIgpAQCAtMTExMiw2ICsxMTE1LDEwIEBAIGNsYXNzIEdpdFRl
c3QoU0NNVGVzdCk6CiAgICAgICAgIGNvbW1hbmQgPSBbJ2dpdCcsICctQycsIHNjbS5jaGVja291
dF9yb290LCAncmV2LXBhcnNlJywgJ0hFQUQnXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNj
bS5uYXRpdmVfcmV2aXNpb24oc2NtLmNoZWNrb3V0X3Jvb3QpLCBydW5fY29tbWFuZChjb21tYW5k
KS5zdHJpcCgpKQogCisgICAgZGVmIHRlc3RfbmF0aXZlX2JyYW5jaChzZWxmKToKKyAgICAgICAg
c2NtID0gc2VsZi50cmFja2luZ19zY20KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnbWFzdGVy
Jywgc2NtLm5hdGl2ZV9icmFuY2goc2NtLmNoZWNrb3V0X3Jvb3QpKQorCiAgICAgZGVmIHRlc3Rf
cmVuYW1lX2ZpbGVzKHNlbGYpOgogICAgICAgICBzY20gPSBzZWxmLnRyYWNraW5nX3NjbQogCkBA
IC0xNjI3LDYgKzE2MzQsOSBAQCBjbGFzcyBHaXRTVk5UZXN0KFNDTVRlc3QpOgogICAgICAgICBj
b21tYW5kID0gWydnaXQnLCAnLUMnLCBzZWxmLmdpdF9jaGVja291dF9wYXRoLCAncmV2LXBhcnNl
JywgJ0hFQUQnXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NtLm5hdGl2ZV9yZXZp
c2lvbihzZWxmLmdpdF9jaGVja291dF9wYXRoKSwgcnVuX2NvbW1hbmQoY29tbWFuZCkuc3RyaXAo
KSkKIAorICAgIGRlZiB0ZXN0X25hdGl2ZV9icmFuY2goc2VsZik6CisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ3RydW5rJywgc2VsZi5zY20ubmF0aXZlX2JyYW5jaChzZWxmLmdpdF9jaGVja291
dF9wYXRoKSkKKwogICAgIGRlZiB0ZXN0X3RvX29iamVjdF9uYW1lKHNlbGYpOgogICAgICAgICBy
ZWxwYXRoID0gJ3Rlc3RfZmlsZV9jb21taXQxJwogICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGgu
cmVhbHBhdGgob3MucGF0aC5qb2luKHNlbGYuZ2l0X2NoZWNrb3V0X3BhdGgsIHJlbHBhdGgpKQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20v
c3ZuLnB5CShyZXZpc2lvbiAyNDMwMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9jaGVja291dC9zY20vc3ZuLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIGNs
YXNzIFNWTihTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgICAgICBTQ00uX19pbml0X18oc2VsZiwg
Y3dkLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5fYm9ndXNfZGlyID0gTm9uZQogICAgICAgICBp
ZiBwYXRjaF9kaXJlY3RvcmllcyA9PSBbXToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiht
ZXNzYWdlPSdFbXB0eSBsaXN0IG9mIHBhdGNoIGRpcmVjdG9yaWVzIHBhc3NlZCB0byBTQ00uX19p
bml0X18nKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdFbXB0eSBsaXN0IG9mIHBhdGNo
IGRpcmVjdG9yaWVzIHBhc3NlZCB0byBTQ00uX19pbml0X18nKQogICAgICAgICBlbGlmIHBhdGNo
X2RpcmVjdG9yaWVzID09IE5vbmU6CiAgICAgICAgICAgICBzZWxmLl9wYXRjaF9kaXJlY3Rvcmll
cyA9IFtzZWxmLl9maWxlc3lzdGVtLnJlbHBhdGgoY3dkLCBzZWxmLmNoZWNrb3V0X3Jvb3QpXQog
ICAgICAgICBlbHNlOgpAQCAtMjc4LDYgKzI3OCwxNCBAQCBjbGFzcyBTVk4oU0NNLCBTVk5SZXBv
c2l0b3J5KToKICAgICBkZWYgbmF0aXZlX3JldmlzaW9uKHNlbGYsIHBhdGgpOgogICAgICAgICBy
ZXR1cm4gc2VsZi5zdm5fcmV2aXNpb24ocGF0aCkKIAorICAgIGRlZiBuYXRpdmVfYnJhbmNoKHNl
bGYsIHBhdGgpOgorICAgICAgICByZWxhdGl2ZV91cmwgPSBzZWxmLnZhbHVlX2Zyb21fc3ZuX2lu
Zm8ocGF0aCwgJ1JlbGF0aXZlIFVSTCcpWzI6XQorICAgICAgICBpZiByZWxhdGl2ZV91cmwuc3Rh
cnRzd2l0aCgndHJ1bmsnKToKKyAgICAgICAgICAgIHJldHVybiAndHJ1bmsnCisgICAgICAgIGVs
aWYgcmVsYXRpdmVfdXJsLnN0YXJ0c3dpdGgoJ2JyYW5jaCcpOgorICAgICAgICAgICAgcmV0dXJu
IHJlbGF0aXZlX3VybC5zcGxpdCgnLycpWzFdCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigne30g
aXMgbm90IGEgYnJhbmNoJy5mb3JtYXQocmVsYXRpdmVfdXJsLnNwbGl0KCcvJylbMF0pKQorCiAg
ICAgZGVmIHRpbWVzdGFtcF9vZl9yZXZpc2lvbihzZWxmLCBwYXRoLCByZXZpc2lvbik6CiAgICAg
ICAgICMgV2UgdXNlIC0teG1sIHRvIGdldCB0aW1lc3RhbXBzIGxpa2UgMjAxMy0wMi0wOFQwODox
ODowNC45NjQ0MDlaCiAgICAgICAgIHJlcG9zaXRvcnlfcm9vdCA9IHNlbGYudmFsdWVfZnJvbV9z
dm5faW5mbyhzZWxmLmNoZWNrb3V0X3Jvb3QsICdSZXBvc2l0b3J5IFJvb3QnKQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZv
LnB5CShyZXZpc2lvbiAyNDMwMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNiArMTQ2LDExIEBA
IGNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAg
ICByZXR1cm4gc3lzLm1heGludAogCisgICAgZGVmIGJ1aWxkX3ZlcnNpb24oc2VsZik6CisgICAg
ICAgIGlmIHNlbGYuaXNfbWFjKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZl
LnJ1bl9jb21tYW5kKFsnL3Vzci9iaW4vc3dfdmVycycsICctYnVpbGRWZXJzaW9uJ10sIHJldHVy
bl9zdGRlcnI9RmFsc2UsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkucnN0cmlwKCkKKyAgICAgICAgcmV0
dXJuIE5vbmUKKwogICAgIGRlZiB4Y29kZV9zZGtfdmVyc2lvbihzZWxmLCBzZGtfbmFtZSk6CiAg
ICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CiAgICAgICAgICAgICAjIEFzc3VtZXMgdGhhdCB4Y3J1
biBkb2VzIG5vdCB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQgb24gZmFpbHVyZSAoZS5nLiBTREsg
ZG9lcyBub3QgZXhpc3QpLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5weQkocmV2aXNpb24gMjQzMDA4
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19t
b2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGZyb20gd2Via2l0cHkuY29t
bW9uLnZlcnNpb25fbmFtZV9tYXAgaW0KIAogCiBjbGFzcyBNb2NrUGxhdGZvcm1JbmZvKG9iamVj
dCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9zX25hbWU9J21hYycsIG9zX3ZlcnNpb249VmVy
c2lvbi5mcm9tX25hbWUoJ1Nub3cgTGVvcGFyZCcpKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
b3NfbmFtZT0nbWFjJywgb3NfdmVyc2lvbj1WZXJzaW9uLmZyb21fbmFtZSgnSGlnaCBTaWVycmEn
KSk6CiAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9zX3ZlcnNpb24sIFZlcnNpb24pCiAgICAg
ICAgIHNlbGYub3NfbmFtZSA9IG9zX25hbWUKICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gb3Nf
dmVyc2lvbgpAQCAtNzgsNiArNzgsMTEgQEAgY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3Qp
OgogICAgIGRlZiB0ZXJtaW5hbF93aWR0aChzZWxmKToKICAgICAgICAgcmV0dXJuIDgwCiAKKyAg
ICBkZWYgYnVpbGRfdmVyc2lvbihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pc19tYWMoKToKKyAg
ICAgICAgICAgIHJldHVybiAnMTdBNDA1JworICAgICAgICByZXR1cm4gTm9uZQorCiAgICAgZGVm
IHhjb2RlX3Nka192ZXJzaW9uKHNlbGYsIHNka19uYW1lKToKICAgICAgICAgcmV0dXJuIFZlcnNp
b24oOCwgMSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkJKHJldmlzaW9u
IDI0MzAwOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMu
CiAjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5v
cmcpCi0jIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsMTcgKzM4LDE5IEBAIGltcG9y
dCB0cmFjZWJhY2sKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0ubG9ndXRpbHMgaW1wb3J0IGNvbmZpZ3VyZV9sb2dnaW5nCi1mcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIFNjcmlwdEVycm9yCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KLWZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0ZW1Ib3N0Citmcm9t
IHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0CiBmcm9tIHdlYmtpdHB5LnBvcnQuY29u
ZmlnIGltcG9ydCBDb25maWcKIGZyb20gd2Via2l0cHkudGVzdC5maW5kZXIgaW1wb3J0IEZpbmRl
cgogZnJvbSB3ZWJraXRweS50ZXN0LnByaW50ZXIgaW1wb3J0IFByaW50ZXIKIGZyb20gd2Via2l0
cHkudGVzdC5ydW5uZXIgaW1wb3J0IFJ1bm5lciwgdW5pdF90ZXN0X25hbWUKK2Zyb20gd2Via2l0
cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVwbG9hZAorZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9w
dGlvbnMgaW1wb3J0IHVwbG9hZF9vcHRpb25zCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihf
X25hbWVfXykKIAotX2hvc3QgPSBTeXN0ZW1Ib3N0KCkKK19ob3N0ID0gSG9zdCgpCiBfd2Via2l0
X3Jvb3QgPSBOb25lCiAKIApAQCAtMTMxLDYgKzEzMywxMCBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0
KToKICAgICAgICAgICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBSZWxlYXNlJykK
ICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAoY29uZmlndXJhdGlvbl9ncm91cCkKIAor
ICAgICAgICB1cGxvYWRfZ3JvdXAgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdVcGxv
YWQgT3B0aW9ucycpCisgICAgICAgIHVwbG9hZF9ncm91cC5hZGRfb3B0aW9ucyh1cGxvYWRfb3B0
aW9ucygpKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cCh1cGxvYWRfZ3JvdXApCisK
ICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1hJywgJy0tYWxsJywgYWN0aW9uPSdzdG9yZV90
cnVlJywgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVu
IGFsbCB0aGUgdGVzdHMnKQogICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWMnLCAnLS1jb3Zl
cmFnZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCkBAIC0xODEsMTEgKzE4
NywxMiBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgZnJvbSB3ZWJraXRweS50aGly
ZHBhcnR5IGltcG9ydCBhdXRvaW5zdGFsbF9ldmVyeXRoaW5nCiAgICAgICAgIGF1dG9pbnN0YWxs
X2V2ZXJ5dGhpbmcoKQogCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAg
ICBjb25maWcgPSBDb25maWcoX2hvc3QuZXhlY3V0aXZlLCBzZWxmLmZpbmRlci5maWxlc3lzdGVt
KQorICAgICAgICBjb25maWd1cmF0aW9uX3RvX3VzZSA9IHNlbGYuX29wdGlvbnMuY29uZmlndXJh
dGlvbiBvciBjb25maWcuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkKICAgICAgICAgaWYgd2lsbF9y
dW5fbGxkYl93ZWJraXRfdGVzdHM6CiAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBk
YXRlKCdCdWlsZGluZyBsbGRiV2ViS2l0VGVzdGVyIC4uLicpCiAgICAgICAgICAgICBidWlsZF9s
bGRid2Via2l0dGVzdGVyID0gc2VsZi5maW5kZXIuZmlsZXN5c3RlbS5qb2luKF93ZWJraXRfcm9v
dCwgJ1Rvb2xzJywgJ1NjcmlwdHMnLCAnYnVpbGQtbGxkYndlYmtpdHRlc3RlcicpCi0gICAgICAg
ICAgICBjb25maWcgPSBDb25maWcoX2hvc3QuZXhlY3V0aXZlLCBzZWxmLmZpbmRlci5maWxlc3lz
dGVtKQotICAgICAgICAgICAgY29uZmlndXJhdGlvbl90b191c2UgPSBzZWxmLl9vcHRpb25zLmNv
bmZpZ3VyYXRpb24gb3IgY29uZmlnLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAgICAgICAgICAg
ICB0cnk6CiAgICAgICAgICAgICAgICAgX2hvc3QuZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZf
ZmFpbChbYnVpbGRfbGxkYndlYmtpdHRlc3RlciwgY29uZmlnLmZsYWdfZm9yX2NvbmZpZ3VyYXRp
b24oY29uZmlndXJhdGlvbl90b191c2UpXSwgcXVpZXQ9KG5vdCBib29sKHNlbGYuX29wdGlvbnMu
dmVyYm9zZSkpKQogICAgICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yIGFzIGU6CkBAIC0yMTgs
NiArMjI1LDcgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIHRlc3RfcnVubmVyID0g
UnVubmVyKHNlbGYucHJpbnRlciwgbG9hZGVyKQogICAgICAgICB0ZXN0X3J1bm5lci5ydW4ocGFy
YWxsZWxfdGVzdHMsIHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQogICAgICAgICB0ZXN0
X3J1bm5lci5ydW4oc2VyaWFsX3Rlc3RzLCAxKQorICAgICAgICBlbmRfdGltZSA9IHRpbWUudGlt
ZSgpCiAKICAgICAgICAgc2VsZi5wcmludGVyLnByaW50X3Jlc3VsdCh0aW1lLnRpbWUoKSAtIHN0
YXJ0KQogCkBAIC0yMzIsOSArMjQwLDUxIEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdlOgogICAgICAgICAgICAgY292LnN0b3AoKQogICAg
ICAgICAgICAgY292LnNhdmUoKQorCisgICAgICAgIGZhaWxlZF91cGxvYWRzID0gMAorICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnJlcG9ydF91cmxzOgorICAgICAgICAgICAgc2VsZi5wcmludGVy
Lm1ldGVyLndyaXRlbG4oJ1xuJykKKyAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZV91cGRh
dGUoJ1ByZXBhcmluZyB1cGxvYWQgZGF0YSAuLi4nKQorCisgICAgICAgICAgICAjIEVtcHR5IHRl
c3QgcmVzdWx0cyBpbmRpY2F0ZSBhIFBBU1MuCisgICAgICAgICAgICByZXN1bHRzID0ge3Rlc3Q6
IHt9IGZvciB0ZXN0IGluIHRlc3RfcnVubmVyLnRlc3RzX3J1bn0KKyAgICAgICAgICAgIGZvciB0
ZXN0LCBlcnJvcnMgaW4gdGVzdF9ydW5uZXIuZXJyb3JzOgorICAgICAgICAgICAgICAgIHJlc3Vs
dHNbdGVzdF0gPSBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhwZWN0
YXRpb25zLkVSUk9SLCBsb2c9Jy9uJy5qb2luKGVycm9ycykpCisgICAgICAgICAgICBmb3IgdGVz
dCwgZmFpbHVyZXMgaW4gdGVzdF9ydW5uZXIuZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgcmVz
dWx0c1t0ZXN0XSA9IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBl
Y3RhdGlvbnMuRkFJTCwgbG9nPScvbicuam9pbihmYWlsdXJlcykpCisKKyAgICAgICAgICAgIF9o
b3N0LmluaXRpYWxpemVfc2NtKCkKKyAgICAgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAg
ICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgICAgIGNvbmZp
Z3VyYXRpb249VXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9uKAorICAgICAgICAgICAgICAgICAg
ICBwbGF0Zm9ybT1faG9zdC5wbGF0Zm9ybS5vc19uYW1lLAorICAgICAgICAgICAgICAgICAgICB2
ZXJzaW9uPXN0cihfaG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uKSwKKyAgICAgICAgICAgICAgICAg
ICAgdmVyc2lvbl9uYW1lPV9ob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb25fbmFtZSgpLAorICAgICAg
ICAgICAgICAgICAgICBzdHlsZT1jb25maWd1cmF0aW9uX3RvX3VzZSwKKyAgICAgICAgICAgICAg
ICAgICAgc2RrPV9ob3N0LnBsYXRmb3JtLmJ1aWxkX3ZlcnNpb24oKSwKKyAgICAgICAgICAgICAg
ICApLAorICAgICAgICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRhaWxzKG9wdGlv
bnM9c2VsZi5fb3B0aW9ucyksCisgICAgICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0
ZV9jb21taXQoCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisg
ICAgICAgICAgICAgICAgICAgIGlkPV9ob3N0LnNjbSgpLm5hdGl2ZV9yZXZpc2lvbihfd2Via2l0
X3Jvb3QpLAorICAgICAgICAgICAgICAgICAgICBicmFuY2g9X2hvc3Quc2NtKCkubmF0aXZlX2Jy
YW5jaChfd2Via2l0X3Jvb3QpLAorICAgICAgICAgICAgICAgICldLAorICAgICAgICAgICAgICAg
IHJ1bl9zdGF0cz1VcGxvYWQuY3JlYXRlX3J1bl9zdGF0cygKKyAgICAgICAgICAgICAgICAgICAg
c3RhcnRfdGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAgICBlbmRfdGltZT1lbmRf
dGltZSwKKyAgICAgICAgICAgICAgICAgICAgdGVzdHNfc2tpcHBlZD1sZW4odGVzdF9ydW5uZXIu
dGVzdHNfcnVuKSAtIGxlbihwYXJhbGxlbF90ZXN0cykgLSBsZW4oc2VyaWFsX3Rlc3RzKSwKKyAg
ICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIHJlc3VsdHM9cmVzdWx0cywKKyAgICAg
ICAgICAgICkKKyAgICAgICAgICAgIGZvciB1cmwgaW4gc2VsZi5fb3B0aW9ucy5yZXBvcnRfdXJs
czoKKyAgICAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKCdVcGxvYWRpbmcg
dG8ge30gLi4uJy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgICAgICBmYWlsZWRfdXBsb2FkcyA9
IGZhaWxlZF91cGxvYWRzIGlmIHVwbG9hZC51cGxvYWQodXJsLCBsb2dfbGluZV9mdW5jPXNlbGYu
cHJpbnRlci5tZXRlci53cml0ZWxuKSBlbHNlIChmYWlsZWRfdXBsb2FkcyArIDEpCisgICAgICAg
ICAgICBzZWxmLnByaW50ZXIubWV0ZXIud3JpdGVsbignVXBsb2FkcyBjb21wbGV0ZWQhJykKKwor
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdlOgogICAgICAgICAgICAgY292LnJlcG9y
dChzaG93X21pc3Npbmc9RmFsc2UpCiAKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmLnByaW50ZXIu
bnVtX2Vycm9ycyBhbmQgbm90IHNlbGYucHJpbnRlci5udW1fZmFpbHVyZXMKKyAgICAgICAgcmV0
dXJuIG5vdCBzZWxmLnByaW50ZXIubnVtX2Vycm9ycyBhbmQgbm90IHNlbGYucHJpbnRlci5udW1f
ZmFpbHVyZXMgYW5kIG5vdCBmYWlsZWRfdXBsb2FkcwogCiAgICAgZGVmIF9jaGVja19pbXBvcnRz
KHNlbGYsIG5hbWVzKToKICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkJKHJldmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgY2xhc3MgUnVubmVyKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByaW50
ZXIsIGxvYWRlcik6CiAgICAgICAgIHNlbGYucHJpbnRlciA9IHByaW50ZXIKICAgICAgICAgc2Vs
Zi5sb2FkZXIgPSBsb2FkZXIKLSAgICAgICAgc2VsZi50ZXN0c19ydW4gPSAwCisgICAgICAgIHNl
bGYudGVzdHNfcnVuID0gW10KICAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQogICAgICAgICBzZWxm
LmZhaWx1cmVzID0gW10KICAgICAgICAgc2VsZi53b3JrZXJfZmFjdG9yeSA9IGxhbWJkYSBjYWxs
ZXI6IF9Xb3JrZXIoY2FsbGVyLCBzZWxmLmxvYWRlcikKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3Mg
UnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLnByaW50ZXIucHJpbnRfc3RhcnRlZF90
ZXN0KHNvdXJjZSwgdGVzdF9uYW1lKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgc2Vs
Zi50ZXN0c19ydW4gKz0gMQorICAgICAgICBzZWxmLnRlc3RzX3J1bi5hcHBlbmQodGVzdF9uYW1l
KQogICAgICAgICBpZiBmYWlsdXJlczoKICAgICAgICAgICAgIHNlbGYuZmFpbHVyZXMuYXBwZW5k
KCh0ZXN0X25hbWUsIGZhaWx1cmVzKSkKICAgICAgICAgaWYgZXJyb3JzOgpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90ZXN0L3J1bm5lcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAy
NDMwMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw2IEBAIGNsYXNzIFJ1bm5lclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgndGVzdDMgKEZvbykn
LCAnRScsICd0ZXN0M1xuZXJyZWQnKSkKICAgICAgICAgcnVubmVyID0gUnVubmVyKFByaW50ZXIo
c3RyZWFtLCBvcHRpb25zKSwgbG9hZGVyKQogICAgICAgICBydW5uZXIucnVuKFsnRm9vLnRlc3Qx
JywgJ0Zvby50ZXN0MicsICdGb28udGVzdDMnXSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChydW5uZXIudGVzdHNfcnVuLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5u
ZXIudGVzdHNfcnVuKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocnVubmVyLmZh
aWx1cmVzKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocnVubmVyLmVycm9ycyks
IDEpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9f
LnB5CShyZXZpc2lvbiAyNDMwMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAjIENvcHlyaWdo
dCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCisjIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNCw2ICsxMTUsOCBAQCBjbGFzcyBBdXRvaW5zdGFsbElt
cG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfcHl0ZXN0X3RpbWVv
dXQoKQogICAgICAgICBlbGlmICcucHl0ZXN0JyBpbiBmdWxsbmFtZToKICAgICAgICAgICAgIHNl
bGYuX2luc3RhbGxfcHl0ZXN0KCkKKyAgICAgICAgZWxpZiAnLnJlcXVlc3RzJyBpbiBmdWxsbmFt
ZToKKyAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfcmVxdWVzdHMoKQogCiAgICAgZGVmIF9pbnN0
YWxsX21lY2hhbml6ZShzZWxmKToKICAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9maWxl
cy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9tZWNoYW5pemUt
MC4yLjUudGFyLmd6IiwKQEAgLTE2MSw2ICsxNjQsMjEgQEAgY2xhc3MgQXV0b2luc3RhbGxJbXBv
cnRIb29rKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0
aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9hMi9lYy80MTVkMGNjY2MxZWQ0MWNkN2ZkZjY5YWQ5ODlk
YTE2YThkMTMwNTc5OTYzNzEwMDRjYWI0YmFmYzQ4ZjMvcHl0ZXN0LTMuNi4yLnRhci5neiIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0ZXN0LTMuNi4yL3NyYy9weXRlc3QucHki
KQogCisgICAgZGVmIF9pbnN0YWxsX3JlcXVlc3RzKHNlbGYpOgorICAgICAgICBzZWxmLl9lbnN1
cmVfYXV0b2luc3RhbGxlZF9kaXJfaXNfaW5fc3lzX3BhdGgoKQorICAgICAgICBzZWxmLl9pbnN0
YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvMDYvYjgvZDFlYTM4
NTEzYzIyZThjOTA2Mjc1ZDEzNTgxOGZlZTE2YWQ4NDk1OTg1OTU2YTliN2UyYmIyMTk0MmExL2Nl
cnRpZmktMjAxOS4zLjkudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiY2VydGlmaS0y
MDE5LjMuOS9jZXJ0aWZpIikKKyAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9maWxlcy5w
eXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2ZjL2JiL2E1NzY4YzIzMGY5ZGRiMDNhY2M5ZWYzZjBk
NGEzY2Y5MzQ2MjQ3Mzc5NWQxOGU5NTM1NDk4YzhmOTI5ZC9jaGFyZGV0LTMuMC40LnRhci5neiIs
CisgICAgICAgICAgICAgICAgICAgICAgImNoYXJkZXQtMy4wLjQvY2hhcmRldCIpCisgICAgICAg
IHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9m
Yy9iYi9hNTc2OGMyMzBmOWRkYjAzYWNjOWVmM2YwZDRhM2NmOTM0NjI0NzM3OTVkMThlOTUzNTQ5
OGM4ZjkyOWQvY2hhcmRldC0zLjAuNC50YXIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgICJj
aGFyZGV0LTMuMC40L2NoYXJkZXQiKQorICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwczovL2Zp
bGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvYWQvMTMvZWI1Njk1MWI2Zjc5NTBjYWRiNTc5
Y2ExNjZlNDQ4YmE3N2Y5ZDI0ZWZjMDNlZGQ3ZTU1ZmE1N2QwNGI3L2lkbmEtMi44LnRhci5neiIs
CisgICAgICAgICAgICAgICAgICAgICAgImlkbmEtMi44L2lkbmEiKQorICAgICAgICBzZWxmLl9p
bnN0YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvYjEvNTMvMzdk
ODJhYjM5MTM5MzU2NWYyZjgzMWI4ZWVkYmZmZDU3ZGI1YTcxODIxNmY4MmYxYThiNGQzODFhMWMx
L3VybGxpYjMtMS4yNC4xLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgInVybGxpYjMt
MS4yNC4xL3NyYy91cmxsaWIzIikKKyAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9maWxl
cy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzLzUyLzJjLzUxNGU0YWMyNWRhMmIwOGNhNWE0NjRj
NTA0NjM2ODIxMjYzODVjNDI3MmMxODE5Mzg3NmU5MWY0YmMzOC9yZXF1ZXN0cy0yLjIxLjAudGFy
Lmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAicmVxdWVzdHMtMi4yMS4wL3JlcXVlc3RzIikK
KwogICAgIGRlZiBfaW5zdGFsbF9weWxpbnQoc2VsZik6CiAgICAgICAgIHNlbGYuX2Vuc3VyZV9h
dXRvaW5zdGFsbGVkX2Rpcl9pc19pbl9zeXNfcGF0aCgpCiAgICAgICAgIGlmIChub3Qgc2VsZi5f
ZnMuZXhpc3RzKHNlbGYuX2ZzLmpvaW4oX0FVVE9JTlNUQUxMRURfRElSLCAicHlsaW50IikpIG9y
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9xdWV1ZXNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTE4MywxMCArMTgzLDEwIEBAIGNsYXNzIFBhdGNoUHJvY2Vzc2luZ1F1ZXVlVGVzdChDb21t
YW5kc1QKICAgICAgICAgcXVldWUuX29wdGlvbnMgPSBNb2NrKCkKICAgICAgICAgcXVldWUuX29w
dGlvbnMucG9ydCA9IE5vbmUKICAgICAgICAgcGF0Y2ggPSBxdWV1ZS5fdG9vbC5idWdzLmZldGNo
X2F0dGFjaG1lbnQoMTAwMDEpCi0gICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJNT0NLIGFkZF9h
dHRhY2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlwdGlvbj1BcmNoaXZlIG9mIGxh
eW91dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9yIG1hYy1zbm93bGVvcGFyZCBmaWxlbmFtZT1s
YXlvdXQtdGVzdC1yZXN1bHRzLnppcCBtaW1ldHlwZT1Ob25lCisgICAgICAgIGV4cGVjdGVkX2xv
Z3MgPSAiIiJNT0NLIGFkZF9hdHRhY2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlw
dGlvbj1BcmNoaXZlIG9mIGxheW91dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9yIG1hYy1oaWdo
c2llcnJhIGZpbGVuYW1lPWxheW91dC10ZXN0LXJlc3VsdHMuemlwIG1pbWV0eXBlPU5vbmUKIC0t
IEJlZ2luIGNvbW1lbnQgLS0KIFRoZSBhdHRhY2hlZCB0ZXN0IGZhaWx1cmVzIHdlcmUgc2VlbiB3
aGlsZSBydW5uaW5nIHJ1bi13ZWJraXQtdGVzdHMgb24gdGhlIG1vY2stcXVldWUuCi1Qb3J0OiBt
YWMtc25vd2xlb3BhcmQgIFBsYXRmb3JtOiBNb2NrUGxhdGZvcm0gMS4wCitQb3J0OiBtYWMtaGln
aHNpZXJyYSAgUGxhdGZvcm06IE1vY2tQbGF0Zm9ybSAxLjAKIC0tIEVuZCBjb21tZW50IC0tCiAi
IiIKICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHF1ZXVlLl91
cGxvYWRfcmVzdWx0c19hcmNoaXZlX2Zvcl9wYXRjaCwgW3BhdGNoLCBNb2NrKCldLCBleHBlY3Rl
ZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364863</attachid>
            <date>2019-03-15 15:57:00 -0700</date>
            <delta_ts>2019-03-15 15:59:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190315091629.patch</filename>
            <type>text/plain</type>
            <size>60670</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE5LTAzLTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6Cisg
ICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOiBBZGQgcmVxdWVzdHMg
YXV0by1pbnN0YWxsLgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxsX3Jl
cXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBs
b2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGlu
Zy4KKwogMjAxOS0wMy0xNSAgU2hhd24gUm9iZXJ0cyAgPHNyb2JlcnRzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjQyOTUyLgpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMyBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVj
dG9yeSBmb3IgbW9kdWxlIGZpbGVzCisKKyMgS2VlcCB0aGlzIGZpbGUgZnJlZSBvZiBhbnkgY29k
ZSBvciBpbXBvcnQgc3RhdGVtZW50cyB0aGF0IGNvdWxkCisjIGNhdXNlIGVpdGhlciBhbiBlcnJv
ciB0byBvY2N1ciBvciBhIGxvZyBtZXNzYWdlIHRvIGJlIGxvZ2dlZC4KKyMgVGhpcyBlbnN1cmVz
IHRoYXQgY2FsbGluZyBjb2RlIGNhbiBpbXBvcnQgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tCisj
IHdlYmtpdHB5IGJlZm9yZSBhbnkgZXJyb3JzIG9yIGxvZyBtZXNzYWdlcyBkdWUgdG8gY29kZSBp
biB0aGlzIGZpbGUuCisjIEluaXRpYWxpemF0aW9uIGNvZGUgY2FuIGluY2x1ZGUgdGhpbmdzIGxp
a2UgdmVyc2lvbi1jaGVja2luZyBjb2RlIGFuZAorIyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gY29k
ZS4KKyMKKyMgV2UgZG8gbm90IGV4ZWN1dGUgYW55IHZlcnNpb24tY2hlY2tpbmcgY29kZSBvciBs
b2dnaW5nIGNvbmZpZ3VyYXRpb24KKyMgY29kZSBpbiB0aGlzIGZpbGUgc28gdGhhdCBjYWxsZXJz
IGNhbiBvcHQtaW4gYXMgdGhleSB3YW50LiAgVGhpcyBhbHNvCisjIGFsbG93cyBkaWZmZXJlbnQg
Y2FsbGVycyB0byBjaG9vc2UgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uIGNvZGUsCisjIGFzIG5l
Y2Vzc2FyeS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5
CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25z
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9wdHBhcnNlCisKKworZGVmIHVwbG9hZF9vcHRp
b25zKCk6CisgICAgcmV0dXJuIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcmVw
b3J0JywgYWN0aW9uPSdhcHBlbmQnLCBkZXN0PSdyZXBvcnRfdXJscycsIGhlbHA9J1VSTCAob3Ig
VVJMcykgdG8gcmVwb3J0IHRlc3QgcmVzdWx0cyB0bycpLAorICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLS1idWlsZGJvdC1tYXN0ZXInLCBoZWxwPSdUaGUgdXJsIG9mIHRoZSBidWlsZGJv
dCBtYXN0ZXIuJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkZXItbmFt
ZScsIGhlbHA9J1RoZSBuYW1lIG9mIHRoZSBidWlsZGJvdCBidWlsZGVyIHRlc3RzIHdlcmUgcnVu
IG9uLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZC1udW1iZXInLCBo
ZWxwPSdUaGUgYnVpbGRib3QgYnVpbGQgbnVtYmVyIHRlc3RzIGFyZSBhc3NvY2lhdGVkIHdpdGgu
JyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkYm90LXdvcmtlcicsIGhl
bHA9J1RoZSBidWlsZGJvdCB3b3JrZXIgdGVzdHMgd2VyZSBydW4gb24uJyksCisgICAgXQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5CShub25leGlzdGVudCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5yZXF1ZXN0cwor
CitpbXBvcnQganNvbgoraW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBwbGF0
Zm9ybSBhcyBob3N0X3BsYXRmb3JtCisKKworY2xhc3MgVXBsb2FkKG9iamVjdCk6CisgICAgVVBM
T0FEX0VORFBPSU5UID0gJy9hcGkvdXBsb2FkJworICAgIEJVSUxEQk9UX0RFVEFJTFMgPSBbJ2J1
aWxkYm90LW1hc3RlcicsICdidWlsZGVyLW5hbWUnLCAnYnVpbGQtbnVtYmVyJywgJ2J1aWxkYm90
LXdvcmtlciddCisgICAgVkVSU0lPTiA9IDAKKworICAgIGNsYXNzIEV4cGVjdGF0aW9uczoKKyAg
ICAgICAgIyBUaGVzZSBhcmUgb3JkZXJlZCBieSBwcmlvcml0eSwgbWVhbmluZyB0aGF0IGEgdGVz
dCB3aGljaCBib3RoIGNyYXNoZXMgYW5kIGhhcworICAgICAgICAjIGEgd2FybmluZyBzaG91bGQg
YmUgY29uc2lkZXJlZCB0byBoYXZlIGNyYXNoZWQuCisgICAgICAgIE9SREVSID0gWworICAgICAg
ICAgICAgJ0NSQVNIJywKKyAgICAgICAgICAgICdUSU1FT1VUJywKKyAgICAgICAgICAgICdJTUFH
RScsICAgIyBJbWFnZS1kaWZmCisgICAgICAgICAgICAnQVVESU8nLCAgICMgQXVkaW8tZGlmZgor
ICAgICAgICAgICAgJ1RFWFQnLCAgICAjIFRleHQtZGlmZgorICAgICAgICAgICAgJ0ZBSUwnLAor
ICAgICAgICAgICAgJ0VSUk9SJywKKyAgICAgICAgICAgICdXQVJOSU5HJywKKyAgICAgICAgICAg
ICdQQVNTJywKKyAgICAgICAgXQorICAgICAgICBDUkFTSCwgVElNRU9VVCwgSU1BR0UsIEFVRElP
LCBURVhULCBGQUlMLCBFUlJPUiwgV0FSTklORywgUEFTUyA9IE9SREVSCisKKyAgICBjbGFzcyBF
bmNvZGVyKGpzb24uSlNPTkVuY29kZXIpOgorCisgICAgICAgIGRlZiBkZWZhdWx0KHNlbGYsIG9i
aik6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvYmosIFVwbG9hZCk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN1cGVyKFVwbG9hZC5FbmNvZGVyLCBzZWxmKS5kZWZhdWx0KG9iaikK
KworICAgICAgICAgICAgaWYgbm90IG9iai5zdWl0ZToKKyAgICAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCdObyBzdWl0ZSBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxvYWQnKQorICAgICAg
ICAgICAgaWYgbm90IG9iai5jb21taXRzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ05vIGNvbW1pdHMgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKworICAgICAgICAg
ICAgZGV0YWlscyA9IG9iai5kZXRhaWxzIG9yIG9iai5jcmVhdGVfZGV0YWlscygpCisgICAgICAg
ICAgICBidWlsZGJvdF9hcmdzID0gW2RldGFpbHMuZ2V0KGFyZywgTm9uZSkgaXMgTm9uZSBmb3Ig
YXJnIGluIG9iai5CVUlMREJPVF9ERVRBSUxTXQorICAgICAgICAgICAgaWYgYW55KGJ1aWxkYm90
X2FyZ3MpIGFuZCBub3QgYWxsKGJ1aWxkYm90X2FyZ3MpOgorICAgICAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoJ0FsbCBidWlsZGJvdCBkZXRhaWxzIG11c3QgYmUgZGVmaW5lZCBmb3IgdXBs
b2FkLCBkZXRhaWxzIG1pc3Npbmc6IHt9Jy5mb3JtYXQoJywgJy5qb2luKAorICAgICAgICAgICAg
ICAgICAgICBbb2JqLkJVSUxEQk9UX0RFVEFJTFNbaV0gZm9yIGkgaW4geHJhbmdlKGxlbihvYmou
QlVJTERCT1RfREVUQUlMUykpIGlmIGJ1aWxkYm90X2FyZ3NbaV1dLAorICAgICAgICAgICAgICAg
ICkpKQorCisgICAgICAgICAgICBkZWYgdW5wYWNrX3Rlc3QoY3VycmVudCwgcGF0aF90b190ZXN0
LCBkYXRhKToKKyAgICAgICAgICAgICAgICBpZiBsZW4ocGF0aF90b190ZXN0KSA9PSAxOgorICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0gPSBkYXRhCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGlmIG5vdCBjdXJyZW50LmdldChw
YXRoX3RvX3Rlc3RbMF0pOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50W3BhdGhfdG9fdGVz
dFswXV0gPSB7fQorICAgICAgICAgICAgICAgIHVucGFja190ZXN0KGN1cnJlbnRbcGF0aF90b190
ZXN0WzBdXSwgcGF0aF90b190ZXN0WzE6XSwgZGF0YSkKKworICAgICAgICAgICAgcmVzdWx0cyA9
IHt9CisgICAgICAgICAgICBmb3IgdGVzdCwgZGF0YSBpbiBvYmoucmVzdWx0cy5pdGVyaXRlbXMo
KToKKyAgICAgICAgICAgICAgICB1bnBhY2tfdGVzdChyZXN1bHRzLCB0ZXN0LnNwbGl0KCcvJyks
IGRhdGEpCisKKyAgICAgICAgICAgIHJlc3VsdCA9IGRpY3QoCisgICAgICAgICAgICAgICAgdmVy
c2lvbj1vYmouVkVSU0lPTiwKKyAgICAgICAgICAgICAgICBzdWl0ZT1vYmouc3VpdGUsCisgICAg
ICAgICAgICAgICAgY29uZmlndXJhdGlvbj1vYmouY29uZmlndXJhdGlvbiBvciBvYmouY3JlYXRl
X2NvbmZpZ3VyYXRpb24oKSwKKyAgICAgICAgICAgICAgICBjb21taXRzPW9iai5jb21taXRzLAor
ICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0cz1kaWN0KAorICAgICAgICAgICAgICAgICAgICBk
ZXRhaWxzPWRldGFpbHMsCisgICAgICAgICAgICAgICAgICAgIHJ1bl9zdGF0cz1vYmoucnVuX3N0
YXRzIG9yIG9iai5jcmVhdGVfcnVuX3N0YXRzKCksCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dHM9cmVzdWx0cywKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgKQorICAgICAgICAg
ICAgaWYgb2JqLnRpbWVzdGFtcDoKKyAgICAgICAgICAgICAgICByZXN1bHRbJ3RpbWVzdGFtcCdd
ID0gb2JqLnRpbWVzdGFtcAorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBjcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgIHBsYXRm
b3JtPU5vbmUsCisgICAgICAgICAgICBpc19zaW11bGF0b3I9RmFsc2UsCisgICAgICAgICAgICB2
ZXJzaW9uPU5vbmUsCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9Tm9uZSwKKyAgICAgICAgICAg
IHZlcnNpb25fbmFtZT1Ob25lLAorICAgICAgICAgICAgbW9kZWw9Tm9uZSwKKyAgICAgICAgICAg
IHN0eWxlPU5vbmUsICAgIyBEZWJ1Zy9Qcm9kdWN0aW9uL1JlbGVhc2UKKyAgICAgICAgICAgIGZs
YXZvcj1Ob25lLCAgIyBEdW1waW5nIGdyb3VuZCBzdWl0ZS13aWRlIGNvbmZpZ3VyYXRpb24gY2hh
bmdlcyAoaWUsIEd1YXJkTWFsbG9jKQorICAgICAgICAgICAgc2RrPU5vbmUsCisgICAgICAgICk6
CisKKyAgICAgICAgIyBUaGlzIGRldmlhdGVzIHNsaWdodGx5IGZyb20gdGhlIHJlc3Qgb2Ygd2Vi
a2l0cHksIGJ1dCBpdCBhbGxvd3MgdGhpcyBmaWxlIHRvIGJlIGVudGlyZWx5IHBvcnRhYmxlLgor
ICAgICAgICBjb25maWcgPSBkaWN0KAorICAgICAgICAgICAgcGxhdGZvcm09cGxhdGZvcm0gb3Ig
KGhvc3RfcGxhdGZvcm0uc3lzdGVtKCkgaWYgaG9zdF9wbGF0Zm9ybS5zeXN0ZW0oKSAhPSAnRGFy
d2luJyBlbHNlICdtYWMnKS5sb3dlcigpLAorICAgICAgICAgICAgaXNfc2ltdWxhdG9yPWlzX3Np
bXVsYXRvciwKKyAgICAgICAgICAgIHZlcnNpb249dmVyc2lvbiBvciAoaG9zdF9wbGF0Zm9ybS5y
ZWxlYXNlKCkgaWYgaG9zdF9wbGF0Zm9ybS5zeXN0ZW0oKSAhPSAnRGFyd2luJyBlbHNlIGhvc3Rf
cGxhdGZvcm0ubWFjX3ZlcigpWzBdKSwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVyZT1hcmNoaXRl
Y3R1cmUgb3IgaG9zdF9wbGF0Zm9ybS5tYWNoaW5lKCksCisgICAgICAgICkKKyAgICAgICAgb3B0
aW9uYWxfZGF0YSA9IGRpY3QodmVyc2lvbl9uYW1lPXZlcnNpb25fbmFtZSwgbW9kZWw9bW9kZWws
IHN0eWxlPXN0eWxlLCBmbGF2b3I9Zmxhdm9yLCBzZGs9c2RrKQorICAgICAgICBjb25maWcudXBk
YXRlKHtrZXk6IHZhbHVlIGZvciBrZXksIHZhbHVlIGluIG9wdGlvbmFsX2RhdGEuaXRlcml0ZW1z
KCkgaWYgdmFsdWUgaXMgbm90IE5vbmV9KQorICAgICAgICByZXR1cm4gY29uZmlnCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgc3VpdGU9Tm9uZSwgY29uZmlndXJhdGlvbj1Ob25lLCBjb21taXRz
PVtdLCB0aW1lc3RhbXA9Tm9uZSwgZGV0YWlscz1Ob25lLCBydW5fc3RhdHM9Tm9uZSwgcmVzdWx0
cz17fSk6CisgICAgICAgIHNlbGYuc3VpdGUgPSBzdWl0ZQorICAgICAgICBzZWxmLmNvbmZpZ3Vy
YXRpb24gPSBjb25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuY29tbWl0cyA9IGNvbW1pdHMKKyAg
ICAgICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAKKyAgICAgICAgc2VsZi5kZXRhaWxzID0g
ZGV0YWlscworICAgICAgICBzZWxmLnJ1bl9zdGF0cyA9IHJ1bl9zdGF0cworICAgICAgICBzZWxm
LnJlc3VsdHMgPSByZXN1bHRzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9j
b21taXQocmVwb3NpdG9yeV9pZCwgaWQsIGJyYW5jaD1Ob25lKToKKyAgICAgICAgY29tbWl0ID0g
ZGljdChyZXBvc2l0b3J5X2lkPXJlcG9zaXRvcnlfaWQsIGlkPWlkKQorICAgICAgICBpZiBicmFu
Y2g6CisgICAgICAgICAgICBjb21taXRbJ2JyYW5jaCddID0gYnJhbmNoCisgICAgICAgIHJldHVy
biBjb21taXQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2RldGFpbHMobGlu
az1Ob25lLCBvcHRpb25zPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgq
Kmt3YXJncykKKyAgICAgICAgaWYgbGluazoKKyAgICAgICAgICAgIHJlc3VsdFsnbGluayddID0g
bGluaworICAgICAgICBpZiBub3Qgb3B0aW9uczoKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQK
KworICAgICAgICBmb3IgZWxlbWVudCBpbiBVcGxvYWQuQlVJTERCT1RfREVUQUlMUzoKKyAgICAg
ICAgICAgIHZhbHVlID0gZ2V0YXR0cihvcHRpb25zLCBlbGVtZW50LnJlcGxhY2UoJy0nLCAnXycp
LCBOb25lKQorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAg
ICAgcmVzdWx0W2VsZW1lbnRdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfcnVuX3N0YXRzKHN0YXJ0X3RpbWU9Tm9uZSwg
ZW5kX3RpbWU9Tm9uZSwgdGVzdHNfc2tpcHBlZD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHN0
YXRzID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgb3B0aW9uYWxfZGF0YSA9IGRpY3Qoc3RhcnRf
dGltZT1zdGFydF90aW1lLCBlbmRfdGltZT1lbmRfdGltZSwgdGVzdHNfc2tpcHBlZD10ZXN0c19z
a2lwcGVkKQorICAgICAgICBzdGF0cy51cGRhdGUoe2tleTogdmFsdWUgZm9yIGtleSwgdmFsdWUg
aW4gb3B0aW9uYWxfZGF0YS5pdGVyaXRlbXMoKSBpZiB2YWx1ZSBpcyBub3QgTm9uZX0pCisgICAg
ICAgIHJldHVybiBzdGF0cworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfdGVz
dF9yZXN1bHQoZXhwZWN0ZWQ9Tm9uZSwgYWN0dWFsPU5vbmUsIGxvZz1Ob25lLCAqKmt3YXJncyk6
CisgICAgICAgIHJlc3VsdCA9IGRpY3QoKiprd2FyZ3MpCisKKyAgICAgICAgIyBUZXN0cyB3aGlj
aCBkb24ndCBkZWNsYXJlIGV4cGVjdGF0aW9ucyBvciByZXN1bHRzIGFyZSBhc3N1bWVkIHRvIGhh
dmUgcGFzc2VkLgorICAgICAgICBvcHRpb25hbF9kYXRhID0gZGljdChleHBlY3RlZD1leHBlY3Rl
ZCwgYWN0dWFsPWFjdHVhbCwgbG9nPWxvZykKKyAgICAgICAgcmVzdWx0LnVwZGF0ZSh7a2V5OiB2
YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBvcHRpb25hbF9kYXRhLml0ZXJpdGVtcygpIGlmIHZhbHVl
IGlzIG5vdCBOb25lfSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHVwbG9hZChz
ZWxmLCB1cmwsIGxvZ19saW5lX2Z1bmM9bGFtYmRhIHZhbDogc3lzLnN0ZG91dC53cml0ZSh2YWwg
KyAnXG4nKSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMu
cG9zdCh1cmwgKyBzZWxmLlVQTE9BRF9FTkRQT0lOVCwgZGF0YT1qc29uLmR1bXBzKHNlbGYsIGNs
cz1VcGxvYWQuRW5jb2RlcikpCisgICAgICAgIGV4Y2VwdCByZXF1ZXN0cy5leGNlcHRpb25zLkNv
bm5lY3Rpb25FcnJvcjoKKyAgICAgICAgICAgIGxvZ19saW5lX2Z1bmMoJyAnICogNCArICdGYWls
ZWQgdG8gdXBsb2FkIHRvIHt9LCByZXN1bHRzIHNlcnZlciBub3Qgb25saW5lJy5mb3JtYXQodXJs
KSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBh
cyBlOgorICAgICAgICAgICAgbG9nX2xpbmVfZnVuYygnICcgKiA0ICsgJ0ZhaWxlZCB0byBlbmNv
ZGUgdXBsb2FkIGRhdGE6IHt9Jy5mb3JtYXQoZSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICBs
b2dfbGluZV9mdW5jKCcgJyAqIDQgKyAnRXJyb3IgdXBsb2FkaW5nIHRvIHt9OicuZm9ybWF0KHVy
bCkpCisgICAgICAgICAgICBsb2dfbGluZV9mdW5jKCcgJyAqIDggKyByZXNwb25zZS5qc29uKClb
J2Rlc2NyaXB0aW9uJ10pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBsb2df
bGluZV9mdW5jKCcgJyAqIDQgKyAnVXBsb2FkZWQgcmVzdWx0cyB0byB7fScuZm9ybWF0KHVybCkp
CisgICAgICAgIHJldHVybiBUcnVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3Vs
dHMvdXBsb2FkX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcmVzdWx0cy91cGxvYWRfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIxNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CitpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnJlcXVlc3RzCisKK2lt
cG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGpzb24KK2ltcG9ydCByZXF1ZXN0cworaW1wb3J0IHRp
bWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LnJlc3VsdHMudXBsb2FkIGltcG9y
dCBVcGxvYWQKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eSBpbXBvcnQgbW9jaworCisKK2NsYXNz
IFVwbG9hZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgT3B0aW9ucyhvYmpl
Y3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAgICAg
Zm9yIGtleSwgdmFsdWUgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNl
dGF0dHIoc2VsZiwga2V5LCB2YWx1ZSkKKworICAgIGNsYXNzIE1vY2tSZXNwb25zZShvYmplY3Qp
OgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzX2NvZGU9MjAwLCB0ZXh0PScnKToK
KyAgICAgICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSBzdGF0dXNfY29kZQorICAgICAgICAgICAg
c2VsZi50ZXh0ID0gdGV4dAorCisgICAgICAgIGRlZiBqc29uKHNlbGYpOgorICAgICAgICAgICAg
cmV0dXJuIGpzb24ubG9hZHMoc2VsZi50ZXh0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBub3JtYWxpemUoZGF0YSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgYmFzZXN0cmlu
Zyk6CisgICAgICAgICAgICByZXR1cm4gc3RyKGRhdGEpCisgICAgICAgIGVsaWYgaXNpbnN0YW5j
ZShkYXRhLCBjb2xsZWN0aW9ucy5NYXBwaW5nKToKKyAgICAgICAgICAgIHJldHVybiBkaWN0KG1h
cChVcGxvYWRUZXN0Lm5vcm1hbGl6ZSwgZGF0YS5pdGVyaXRlbXMoKSkpCisgICAgICAgIGVsaWYg
aXNpbnN0YW5jZShkYXRhLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1
cm4gdHlwZShkYXRhKShtYXAoVXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEpKQorICAgICAgICBy
ZXR1cm4gZGF0YQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiByYWlzZV9yZXF1ZXN0c19D
b25uZWN0aW9uRXJyb3IoKToKKyAgICAgICAgcmFpc2UgcmVxdWVzdHMuZXhjZXB0aW9ucy5Db25u
ZWN0aW9uRXJyb3IoKQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHN0
YXJ0X3RpbWUsIGVuZF90aW1lID0gdGltZS50aW1lKCkgLSAzLCB0aW1lLnRpbWUoKQorICAgICAg
ICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAor
ICAgICAgICAgICAgY29uZmlndXJhdGlvbj1VcGxvYWQuY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisg
ICAgICAgICAgICAgICAgcGxhdGZvcm09J21hYycsCisgICAgICAgICAgICAgICAgdmVyc2lvbj0n
MTAuMTMuMCcsCisgICAgICAgICAgICAgICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJyYScsCisg
ICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPSd4ODZfNjQnLAorICAgICAgICAgICAgICAgIHNk
az0nMTdBNDA1JywKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5j
cmVhdGVfZGV0YWlscyhsaW5rPSdodHRwczovL3dlYmtpdC5vcmcnKSwKKyAgICAgICAgICAgIGNv
bW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlf
aWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJy
YW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICAgICBydW5fc3RhdHM9VXBs
b2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisgICAgICAgICAgICAgICAgc3RhcnRfdGltZT1zdGFydF90
aW1lLAorICAgICAgICAgICAgICAgIGVuZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgICAg
IHRlc3RzX3NraXBwZWQ9MCwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICByZXN1bHRzPXsK
KyAgICAgICAgICAgICAgICAnd2Via2l0cHkudGVzdDEnOiB7fSwKKyAgICAgICAgICAgICAgICAn
d2Via2l0cHkudGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9h
ZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisg
ICAgICAgICAgICB9LAorICAgICAgICApCisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2VsZi5u
b3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVy
KSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndmVyc2lvbidd
LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0WydzdWl0ZSddLCAn
d2Via2l0cHktdGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0
Wydjb25maWd1cmF0aW9uJ10sIHNlbGYubm9ybWFsaXplKGRpY3QoCisgICAgICAgICAgICBwbGF0
Zm9ybT0nbWFjJywKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1GYWxzZSwKKyAgICAgICAgICAg
IHZlcnNpb249JzEwLjEzLjAnLAorICAgICAgICAgICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJy
YScsCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9J3g4Nl82NCcsCisgICAgICAgICAgICBzZGs9
JzE3QTQwNScsCisgICAgICAgICkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRl
ZF9kaWN0Wydjb21taXRzJ10sIFtkaWN0KAorICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Vi
a2l0JywKKyAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAor
ICAgICAgICApXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVz
dF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwgc2VsZi5ub3JtYWxpemUoZGljdChsaW5rPSdodHRwczov
L3dlYmtpdC5vcmcnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3Rb
J3Rlc3RfcmVzdWx0cyddWydydW5fc3RhdHMnXSwgc2VsZi5ub3JtYWxpemUoZGljdCgKKyAgICAg
ICAgICAgIHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgIGVuZF90aW1lPWVuZF90
aW1lLAorICAgICAgICAgICAgdGVzdHNfc2tpcHBlZD0wLAorICAgICAgICApKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMn
XSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisg
ICAgICAgICAgICAnd2Via2l0cHkudGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGV4
cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlv
bnMuRkFJTCksCisgICAgICAgIH0pKQorCisgICAgZGVmIHRlc3RfdXBsb2FkKHNlbGYpOgorICAg
ICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMn
LAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAg
ICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisg
ICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAg
KQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEg
dXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNwb25zZSgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5l
X2Z1bmM9bGFtYmRhIF86IE5vbmUpKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVz
dHMucG9zdCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLnJhaXNlX3JlcXVlc3RzX0Nvbm5l
Y3Rpb25FcnJvcigpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodXBsb2FkLnVwbG9h
ZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMnLCBsb2dfbGluZV9mdW5jPWxhbWJkYSBfOiBO
b25lKSkKKworICAgICAgICBtb2NrXzQwNCA9IG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBu
ZXc9bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoCisgICAgICAgICAgICBzdGF0
dXNfY29kZT00MDQsCisgICAgICAgICAgICB0ZXh0PWpzb24uZHVtcHMoZGljdChkZXNjcmlwdGlv
bj0nTm8gc3VjaCBhZGRyZXNzJykpLAorICAgICAgICApKQorICAgICAgICB3aXRoIG1vY2tfNDA0
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dl
YmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lX2Z1bmM9bGFtYmRhIF86IE5vbmUpKQorCisgICAg
ZGVmIHRlc3RfcGFja2VkX3Rlc3Qoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAg
ICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb21taXRzPVtV
cGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJr
aXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3Ry
dW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgcmVzdWx0cz17CisgICAgICAgICAg
ICAgICAgJ2RpcjEvc3ViLWRpcjEvdGVzdDEnOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFj
dHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICAgICAgICAgICdkaXIxL3N1
Yi1kaXIxL3Rlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4
cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMi90ZXN0
Myc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIxL3N1Yi1kaXIyL3Rlc3Q0Jzoge30sCisgICAg
ICAgICAgICAgICAgJ2RpcjIvc3ViLWRpcjMvdGVzdDUnOiB7fSwKKyAgICAgICAgICAgICAgICAn
ZGlyMi90ZXN0Nic6IHt9LAorICAgICAgICAgICAgfQorICAgICAgICApCisgICAgICAgIGdlbmVy
YXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwg
Y2xzPVVwbG9hZC5FbmNvZGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVk
X2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydyZXN1bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAg
ICAgICAgICdkaXIxJzogeworICAgICAgICAgICAgICAgICdzdWItZGlyMSc6IHsKKyAgICAgICAg
ICAgICAgICAgICAgJ3Rlc3QxJzogeydhY3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLkZBSUx9
LAorICAgICAgICAgICAgICAgICAgICAndGVzdDInOiB7J2FjdHVhbCc6IFVwbG9hZC5FeHBlY3Rh
dGlvbnMuVElNRU9VVH0sCisgICAgICAgICAgICAgICAgfSwgJ3N1Yi1kaXIyJzogeworICAgICAg
ICAgICAgICAgICAgICAndGVzdDMnOiB7fSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3Q0Jzog
e30sCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgJ2RpcjInOiB7CisgICAgICAg
ICAgICAgICAgJ3N1Yi1kaXIzJzogeyd0ZXN0NSc6IHt9fSwKKyAgICAgICAgICAgICAgICAndGVz
dDYnOiB7fSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0pKQorCisgICAgZGVmIHRlc3Rfbm9f
c3VpdGUoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIGNvbW1p
dHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9
J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5j
aD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICkKKyAgICAgICAgd2l0aCBzZWxm
LmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBsb2Fk
LCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICBkZWYgdGVzdF9ub19jb21taXRzKHNlbGYpOgor
ICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVz
dHMnLAorICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
cik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQor
CisgICAgZGVmIHRlc3RfYnVpbGRib3Qoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgK
KyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb21taXRz
PVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3
ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9
J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgZGV0YWlscz1VcGxvYWQuY3Jl
YXRlX2RldGFpbHMob3B0aW9ucz1zZWxmLk9wdGlvbnMoCisgICAgICAgICAgICAgICAgYnVpbGRi
b3RfbWFzdGVyPSd3ZWJraXQub3JnJywKKyAgICAgICAgICAgICAgICBidWlsZGVyX25hbWU9J1F1
ZXVlLTEnLAorICAgICAgICAgICAgICAgIGJ1aWxkX251bWJlcj0xLAorICAgICAgICApKSkKKyAg
ICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpz
b24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICAgICAgdXBsb2FkLmRl
dGFpbHNbJ2J1aWxkYm90LXdvcmtlciddID0gJ2JvdDEyMycKKyAgICAgICAgZ2VuZXJhdGVkX2Rp
Y3QgPSBzZWxmLm5vcm1hbGl6ZShqc29uLmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBs
b2FkLkVuY29kZXIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsn
dGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAg
J2J1aWxkYm90LW1hc3Rlcic6ICd3ZWJraXQub3JnJywKKyAgICAgICAgICAgICdidWlsZGVyLW5h
bWUnOiAnUXVldWUtMScsCisgICAgICAgICAgICAnYnVpbGQtbnVtYmVyJzogMSwKKyAgICAgICAg
ICAgICdidWlsZGJvdC13b3JrZXInOiAnYm90MTIzJywKKyAgICAgICAgfSkpCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkJKHJl
dmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0
L3NjbS9naXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw2ICsyOTAsMTQgQEAgY2xhc3MgR2l0
KFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVmIG5hdGl2ZV9yZXZpc2lvbihzZWxmLCBwYXRo
KToKICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWyctQycsIHNlbGYuZmluZF9jaGVja291
dF9yb290KHBhdGgpLCAnbG9nJywgJy0xJywgJy0tcHJldHR5PWZvcm1hdDolSCddKQogCisgICAg
ZGVmIG5hdGl2ZV9icmFuY2goc2VsZiwgcGF0aCk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1
bl9naXQoWyctQycsIHNlbGYuZmluZF9jaGVja291dF9yb290KHBhdGgpLCAncmV2LXBhcnNlJywg
Jy0tYWJicmV2LXJlZicsICdIRUFEJ10pLnJzdHJpcCgpCisKKyAgICAgICAgIyBGb3IgZ2l0LXN2
bgorICAgICAgICBpZiByZXN1bHQuc3RhcnRzd2l0aCgnaGVhZHMnKToKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHRbNjpdCisgICAgICAgIHJldHVybiByZXN1bHQKKwogICAgIGRlZiBzdm5fdXJs
KHNlbGYpOgogICAgICAgICBnaXRfY29tbWFuZCA9IFsnc3ZuJywgJ2luZm8nXQogICAgICAgICBz
dGF0dXMgPSBzZWxmLl9ydW5fZ2l0KGdpdF9jb21tYW5kKQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weQkocmV2
aXNpb24gMjQzMDA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
c2NtL3NjbV9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw5IEBAIGNsYXNzIE1v
Y2tTQ00ob2JqZWN0KToKICAgICBkZWYgbmF0aXZlX3JldmlzaW9uKHNlbGYsIHBhdGgpOgogICAg
ICAgICByZXR1cm4gc2VsZi5zdm5fcmV2aXNpb24ocGF0aCkKIAorICAgIGRlZiBuYXRpdmVfYnJh
bmNoKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gJ3RydW5rJworCiAgICAgZGVmIHRpbWVz
dGFtcF9vZl9yZXZpc2lvbihzZWxmLCBwYXRoLCByZXZpc2lvbik6CiAgICAgICAgIHJldHVybiAn
MjAxMy0wMi0wMSAwODo0ODowNSArMDAwMCcKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiAyNDMwMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291
dC9zY20vc2NtX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC05MDksNiArOTA5LDkgQEAg
RU5ECiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20uaGVhZF9zdm5fcmV2aXNpb24o
KSwgc2VsZi5zY20ubmF0aXZlX3JldmlzaW9uKCcuJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5zY20ubmF0aXZlX3JldmlzaW9uKCcuJyksICc1JykKIAorICAgIGRlZiB0ZXN0X25h
dGl2ZV9icmFuY2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20ubmF0
aXZlX2JyYW5jaCgnLicpLCAndHJ1bmsnKQorCiAgICAgZGVmIHRlc3RfcHJvcHNldF9wcm9wZ2V0
KHNlbGYpOgogICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnN2bl9jaGVja291
dF9wYXRoLCAidGVzdF9maWxlIikKICAgICAgICAgZXhwZWN0ZWRfbWltZV90eXBlID0gIngtYXBw
bGljYXRpb24vZm9vLWJhciIKQEAgLTExMTIsNiArMTExNSwxMCBAQCBjbGFzcyBHaXRUZXN0KFND
TVRlc3QpOgogICAgICAgICBjb21tYW5kID0gWydnaXQnLCAnLUMnLCBzY20uY2hlY2tvdXRfcm9v
dCwgJ3Jldi1wYXJzZScsICdIRUFEJ10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY20ubmF0
aXZlX3JldmlzaW9uKHNjbS5jaGVja291dF9yb290KSwgcnVuX2NvbW1hbmQoY29tbWFuZCkuc3Ry
aXAoKSkKIAorICAgIGRlZiB0ZXN0X25hdGl2ZV9icmFuY2goc2VsZik6CisgICAgICAgIHNjbSA9
IHNlbGYudHJhY2tpbmdfc2NtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ21hc3RlcicsIHNj
bS5uYXRpdmVfYnJhbmNoKHNjbS5jaGVja291dF9yb290KSkKKwogICAgIGRlZiB0ZXN0X3JlbmFt
ZV9maWxlcyhzZWxmKToKICAgICAgICAgc2NtID0gc2VsZi50cmFja2luZ19zY20KIApAQCAtMTYy
Nyw2ICsxNjM0LDkgQEAgY2xhc3MgR2l0U1ZOVGVzdChTQ01UZXN0KToKICAgICAgICAgY29tbWFu
ZCA9IFsnZ2l0JywgJy1DJywgc2VsZi5naXRfY2hlY2tvdXRfcGF0aCwgJ3Jldi1wYXJzZScsICdI
RUFEJ10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24o
c2VsZi5naXRfY2hlY2tvdXRfcGF0aCksIHJ1bl9jb21tYW5kKGNvbW1hbmQpLnN0cmlwKCkpCiAK
KyAgICBkZWYgdGVzdF9uYXRpdmVfYnJhbmNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCd0cnVuaycsIHNlbGYuc2NtLm5hdGl2ZV9icmFuY2goc2VsZi5naXRfY2hlY2tvdXRfcGF0
aCkpCisKICAgICBkZWYgdGVzdF90b19vYmplY3RfbmFtZShzZWxmKToKICAgICAgICAgcmVscGF0
aCA9ICd0ZXN0X2ZpbGVfY29tbWl0MScKICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLnJlYWxw
YXRoKG9zLnBhdGguam9pbihzZWxmLmdpdF9jaGVja291dF9wYXRoLCByZWxwYXRoKSkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5w
eQkocmV2aXNpb24gMjQzMDA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3N2bi5weQkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBjbGFzcyBT
Vk4oU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICAgICAgU0NNLl9faW5pdF9fKHNlbGYsIGN3ZCwg
Kiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX2JvZ3VzX2RpciA9IE5vbmUKICAgICAgICAgaWYgcGF0
Y2hfZGlyZWN0b3JpZXMgPT0gW106Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24obWVzc2Fn
ZT0nRW1wdHkgbGlzdCBvZiBwYXRjaCBkaXJlY3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5pdF9f
JykKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRW1wdHkgbGlzdCBvZiBwYXRjaCBkaXJl
Y3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5pdF9fJykKICAgICAgICAgZWxpZiBwYXRjaF9kaXJl
Y3RvcmllcyA9PSBOb25lOgogICAgICAgICAgICAgc2VsZi5fcGF0Y2hfZGlyZWN0b3JpZXMgPSBb
c2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRoKGN3ZCwgc2VsZi5jaGVja291dF9yb290KV0KICAgICAg
ICAgZWxzZToKQEAgLTI3OCw2ICsyNzgsMTQgQEAgY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3NpdG9y
eSk6CiAgICAgZGVmIG5hdGl2ZV9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJu
IHNlbGYuc3ZuX3JldmlzaW9uKHBhdGgpCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBw
YXRoKToKKyAgICAgICAgcmVsYXRpdmVfdXJsID0gc2VsZi52YWx1ZV9mcm9tX3N2bl9pbmZvKHBh
dGgsICdSZWxhdGl2ZSBVUkwnKVsyOl0KKyAgICAgICAgaWYgcmVsYXRpdmVfdXJsLnN0YXJ0c3dp
dGgoJ3RydW5rJyk6CisgICAgICAgICAgICByZXR1cm4gJ3RydW5rJworICAgICAgICBlbGlmIHJl
bGF0aXZlX3VybC5zdGFydHN3aXRoKCdicmFuY2gnKToKKyAgICAgICAgICAgIHJldHVybiByZWxh
dGl2ZV91cmwuc3BsaXQoJy8nKVsxXQorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3t9IGlzIG5v
dCBhIGJyYW5jaCcuZm9ybWF0KHJlbGF0aXZlX3VybC5zcGxpdCgnLycpWzBdKSkKKwogICAgIGRl
ZiB0aW1lc3RhbXBfb2ZfcmV2aXNpb24oc2VsZiwgcGF0aCwgcmV2aXNpb24pOgogICAgICAgICAj
IFdlIHVzZSAtLXhtbCB0byBnZXQgdGltZXN0YW1wcyBsaWtlIDIwMTMtMDItMDhUMDg6MTg6MDQu
OTY0NDA5WgogICAgICAgICByZXBvc2l0b3J5X3Jvb3QgPSBzZWxmLnZhbHVlX2Zyb21fc3ZuX2lu
Zm8oc2VsZi5jaGVja291dF9yb290LCAnUmVwb3NpdG9yeSBSb290JykKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQko
cmV2aXNpb24gMjQzMDA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3BsYXRmb3JtaW5mby5weQkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0NiwxMSBAQCBjbGFz
cyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcmV0
dXJuIHN5cy5tYXhpbnQKIAorICAgIGRlZiBidWlsZF92ZXJzaW9uKHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLmlzX21hYygpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5f
Y29tbWFuZChbJy91c3IvYmluL3N3X3ZlcnMnLCAnLWJ1aWxkVmVyc2lvbiddLCByZXR1cm5fc3Rk
ZXJyPUZhbHNlLCBpZ25vcmVfZXJyb3JzPVRydWUpLnJzdHJpcCgpCisgICAgICAgIHJldHVybiBO
b25lCisKICAgICBkZWYgeGNvZGVfc2RrX3ZlcnNpb24oc2VsZiwgc2RrX25hbWUpOgogICAgICAg
ICBpZiBzZWxmLmlzX21hYygpOgogICAgICAgICAgICAgIyBBc3N1bWVzIHRoYXQgeGNydW4gZG9l
cyBub3Qgd3JpdGUgdG8gc3RhbmRhcmQgb3V0cHV0IG9uIGZhaWx1cmUgKGUuZy4gU0RLIGRvZXMg
bm90IGV4aXN0KS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm9fbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHJldmlzaW9uIDI0MzAwOCkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eQkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi52
ZXJzaW9uX25hbWVfbWFwIGltCiAKIAogY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3QpOgot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPVZlcnNpb24u
ZnJvbV9uYW1lKCdTbm93IExlb3BhcmQnKSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9zX25h
bWU9J21hYycsIG9zX3ZlcnNpb249VmVyc2lvbi5mcm9tX25hbWUoJ0hpZ2ggU2llcnJhJykpOgog
ICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvc192ZXJzaW9uLCBWZXJzaW9uKQogICAgICAgICBz
ZWxmLm9zX25hbWUgPSBvc19uYW1lCiAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IG9zX3ZlcnNp
b24KQEAgLTc4LDYgKzc4LDExIEBAIGNsYXNzIE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAg
ICBkZWYgdGVybWluYWxfd2lkdGgoc2VsZik6CiAgICAgICAgIHJldHVybiA4MAogCisgICAgZGVm
IGJ1aWxkX3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CisgICAgICAg
ICAgICByZXR1cm4gJzE3QTQwNScKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiB4Y29k
ZV9zZGtfdmVyc2lvbihzZWxmLCBzZGtfbmFtZSk6CiAgICAgICAgIHJldHVybiBWZXJzaW9uKDgs
IDEpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5pdF9f
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhv
biB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCisjIEtlZXAgdGhp
cyBmaWxlIGZyZWUgb2YgYW55IGNvZGUgb3IgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBjb3VsZAor
IyBjYXVzZSBlaXRoZXIgYW4gZXJyb3IgdG8gb2NjdXIgb3IgYSBsb2cgbWVzc2FnZSB0byBiZSBs
b2dnZWQuCisjIFRoaXMgZW5zdXJlcyB0aGF0IGNhbGxpbmcgY29kZSBjYW4gaW1wb3J0IGluaXRp
YWxpemF0aW9uIGNvZGUgZnJvbQorIyB3ZWJraXRweSBiZWZvcmUgYW55IGVycm9ycyBvciBsb2cg
bWVzc2FnZXMgZHVlIHRvIGNvZGUgaW4gdGhpcyBmaWxlLgorIyBJbml0aWFsaXphdGlvbiBjb2Rl
IGNhbiBpbmNsdWRlIHRoaW5ncyBsaWtlIHZlcnNpb24tY2hlY2tpbmcgY29kZSBhbmQKKyMgbG9n
Z2luZyBjb25maWd1cmF0aW9uIGNvZGUuCisjCisjIFdlIGRvIG5vdCBleGVjdXRlIGFueSB2ZXJz
aW9uLWNoZWNraW5nIGNvZGUgb3IgbG9nZ2luZyBjb25maWd1cmF0aW9uCisjIGNvZGUgaW4gdGhp
cyBmaWxlIHNvIHRoYXQgY2FsbGVycyBjYW4gb3B0LWluIGFzIHRoZXkgd2FudC4gIFRoaXMgYWxz
bworIyBhbGxvd3MgZGlmZmVyZW50IGNhbGxlcnMgdG8gY2hvb3NlIGRpZmZlcmVudCBpbml0aWFs
aXphdGlvbiBjb2RlLAorIyBhcyBuZWNlc3NhcnkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Jlc3VsdHMvb3B0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBA
CisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
CisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcHRwYXJz
ZQorCisKK2RlZiB1cGxvYWRfb3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCctLXJlcG9ydCcsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0ncmVwb3J0
X3VybHMnLCBoZWxwPSdVUkwgKG9yIFVSTHMpIHRvIHJlcG9ydCB0ZXN0IHJlc3VsdHMgdG8nKSwK
KyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRib3QtbWFzdGVyJywgaGVscD0n
VGhlIHVybCBvZiB0aGUgYnVpbGRib3QgbWFzdGVyLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLS1idWlsZGVyLW5hbWUnLCBoZWxwPSdUaGUgbmFtZSBvZiB0aGUgYnVpbGRib3Qg
YnVpbGRlciB0ZXN0cyB3ZXJlIHJ1biBvbi4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0tYnVpbGQtbnVtYmVyJywgaGVscD0nVGhlIGJ1aWxkYm90IGJ1aWxkIG51bWJlciB0ZXN0
cyBhcmUgYXNzb2NpYXRlZCB3aXRoLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1idWlsZGJvdC13b3JrZXInLCBoZWxwPSdUaGUgYnVpbGRib3Qgd29ya2VyIHRlc3RzIHdlcmUg
cnVuIG9uLicpLAorICAgIF0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91
cGxvYWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3Vw
bG9hZC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMv
dXBsb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg0IEBACisjIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisj
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1
dG9pbnN0YWxsZWQucmVxdWVzdHMKKworaW1wb3J0IGpzb24KK2ltcG9ydCByZXF1ZXN0cworaW1w
b3J0IHN5cworCitpbXBvcnQgcGxhdGZvcm0gYXMgaG9zdF9wbGF0Zm9ybQorCisKK2NsYXNzIFVw
bG9hZChvYmplY3QpOgorICAgIFVQTE9BRF9FTkRQT0lOVCA9ICcvYXBpL3VwbG9hZCcKKyAgICBC
VUlMREJPVF9ERVRBSUxTID0gWydidWlsZGJvdC1tYXN0ZXInLCAnYnVpbGRlci1uYW1lJywgJ2J1
aWxkLW51bWJlcicsICdidWlsZGJvdC13b3JrZXInXQorICAgIFZFUlNJT04gPSAwCisKKyAgICBj
bGFzcyBFeHBlY3RhdGlvbnM6CisgICAgICAgICMgVGhlc2UgYXJlIG9yZGVyZWQgYnkgcHJpb3Jp
dHksIG1lYW5pbmcgdGhhdCBhIHRlc3Qgd2hpY2ggYm90aCBjcmFzaGVzIGFuZCBoYXMKKyAgICAg
ICAgIyBhIHdhcm5pbmcgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gaGF2ZSBjcmFzaGVkLgorICAg
ICAgICBPUkRFUiA9IFsKKyAgICAgICAgICAgICdDUkFTSCcsCisgICAgICAgICAgICAnVElNRU9V
VCcsCisgICAgICAgICAgICAnSU1BR0UnLCAgICMgSW1hZ2UtZGlmZgorICAgICAgICAgICAgJ0FV
RElPJywgICAjIEF1ZGlvLWRpZmYKKyAgICAgICAgICAgICdURVhUJywgICAgIyBUZXh0LWRpZmYK
KyAgICAgICAgICAgICdGQUlMJywKKyAgICAgICAgICAgICdFUlJPUicsCisgICAgICAgICAgICAn
V0FSTklORycsCisgICAgICAgICAgICAnUEFTUycsCisgICAgICAgIF0KKyAgICAgICAgQ1JBU0gs
IFRJTUVPVVQsIElNQUdFLCBBVURJTywgVEVYVCwgRkFJTCwgRVJST1IsIFdBUk5JTkcsIFBBU1Mg
PSBPUkRFUgorCisgICAgY2xhc3MgRW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKToKKworICAgICAg
ICBkZWYgZGVmYXVsdChzZWxmLCBvYmopOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
b2JqLCBVcGxvYWQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihVcGxvYWQuRW5jb2Rl
ciwgc2VsZikuZGVmYXVsdChvYmopCisKKyAgICAgICAgICAgIGlmIG5vdCBvYmouc3VpdGU6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm8gc3VpdGUgc3BlY2lmaWVkIHRvIHJl
c3VsdHMgdXBsb2FkJykKKyAgICAgICAgICAgIGlmIG5vdCBvYmouY29tbWl0czoKKyAgICAgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBjb21taXRzIHNwZWNpZmllZCB0byByZXN1bHRz
IHVwbG9hZCcpCisKKyAgICAgICAgICAgIGRldGFpbHMgPSBvYmouZGV0YWlscyBvciBvYmouY3Jl
YXRlX2RldGFpbHMoKQorICAgICAgICAgICAgYnVpbGRib3RfYXJncyA9IFtkZXRhaWxzLmdldChh
cmcsIE5vbmUpIGlzIE5vbmUgZm9yIGFyZyBpbiBvYmouQlVJTERCT1RfREVUQUlMU10KKyAgICAg
ICAgICAgIGlmIGFueShidWlsZGJvdF9hcmdzKSBhbmQgbm90IGFsbChidWlsZGJvdF9hcmdzKToK
KyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBbGwgYnVpbGRib3QgZGV0YWlscyBt
dXN0IGJlIGRlZmluZWQgZm9yIHVwbG9hZCwgZGV0YWlscyBtaXNzaW5nOiB7fScuZm9ybWF0KCcs
ICcuam9pbigKKyAgICAgICAgICAgICAgICAgICAgW29iai5CVUlMREJPVF9ERVRBSUxTW2ldIGZv
ciBpIGluIHhyYW5nZShsZW4ob2JqLkJVSUxEQk9UX0RFVEFJTFMpKSBpZiBidWlsZGJvdF9hcmdz
W2ldXSwKKyAgICAgICAgICAgICAgICApKSkKKworICAgICAgICAgICAgZGVmIHVucGFja190ZXN0
KGN1cnJlbnQsIHBhdGhfdG9fdGVzdCwgZGF0YSk6CisgICAgICAgICAgICAgICAgaWYgbGVuKHBh
dGhfdG9fdGVzdCkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFtwYXRoX3RvX3Rl
c3RbMF1dID0gZGF0YQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAg
ICBpZiBub3QgY3VycmVudC5nZXQocGF0aF90b190ZXN0WzBdKToKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1dID0ge30KKyAgICAgICAgICAgICAgICB1bnBhY2tf
dGVzdChjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0sIHBhdGhfdG9fdGVzdFsxOl0sIGRhdGEpCisK
KyAgICAgICAgICAgIHJlc3VsdHMgPSB7fQorICAgICAgICAgICAgZm9yIHRlc3QsIGRhdGEgaW4g
b2JqLnJlc3VsdHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgdW5wYWNrX3Rlc3QocmVz
dWx0cywgdGVzdC5zcGxpdCgnLycpLCBkYXRhKQorCisgICAgICAgICAgICByZXN1bHQgPSBkaWN0
KAorICAgICAgICAgICAgICAgIHZlcnNpb249b2JqLlZFUlNJT04sCisgICAgICAgICAgICAgICAg
c3VpdGU9b2JqLnN1aXRlLAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249b2JqLmNvbmZp
Z3VyYXRpb24gb3Igb2JqLmNyZWF0ZV9jb25maWd1cmF0aW9uKCksCisgICAgICAgICAgICAgICAg
Y29tbWl0cz1vYmouY29tbWl0cywKKyAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHM9ZGljdCgK
KyAgICAgICAgICAgICAgICAgICAgZGV0YWlscz1kZXRhaWxzLAorICAgICAgICAgICAgICAgICAg
ICBydW5fc3RhdHM9b2JqLnJ1bl9zdGF0cyBvciBvYmouY3JlYXRlX3J1bl9zdGF0cygpLAorICAg
ICAgICAgICAgICAgICAgICByZXN1bHRzPXJlc3VsdHMsCisgICAgICAgICAgICAgICAgKSwKKyAg
ICAgICAgICAgICkKKyAgICAgICAgICAgIGlmIG9iai50aW1lc3RhbXA6CisgICAgICAgICAgICAg
ICAgcmVzdWx0Wyd0aW1lc3RhbXAnXSA9IG9iai50aW1lc3RhbXAKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2NvbmZpZ3VyYXRp
b24oCisgICAgICAgICAgICBwbGF0Zm9ybT1Ob25lLAorICAgICAgICAgICAgaXNfc2ltdWxhdG9y
PUZhbHNlLAorICAgICAgICAgICAgdmVyc2lvbj1Ob25lLAorICAgICAgICAgICAgYXJjaGl0ZWN0
dXJlPU5vbmUsCisgICAgICAgICAgICB2ZXJzaW9uX25hbWU9Tm9uZSwKKyAgICAgICAgICAgIG1v
ZGVsPU5vbmUsCisgICAgICAgICAgICBzdHlsZT1Ob25lLCAgICMgRGVidWcvUHJvZHVjdGlvbi9S
ZWxlYXNlCisgICAgICAgICAgICBmbGF2b3I9Tm9uZSwgICMgRHVtcGluZyBncm91bmQgc3VpdGUt
d2lkZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgKGllLCBHdWFyZE1hbGxvYykKKyAgICAgICAgICAg
IHNkaz1Ob25lLAorICAgICAgICApOgorCisgICAgICAgICMgVGhpcyBkZXZpYXRlcyBzbGlnaHRs
eSBmcm9tIHRoZSByZXN0IG9mIHdlYmtpdHB5LCBidXQgaXQgYWxsb3dzIHRoaXMgZmlsZSB0byBi
ZSBlbnRpcmVseSBwb3J0YWJsZS4KKyAgICAgICAgY29uZmlnID0gZGljdCgKKyAgICAgICAgICAg
IHBsYXRmb3JtPXBsYXRmb3JtIG9yIChob3N0X3BsYXRmb3JtLnN5c3RlbSgpIGlmIGhvc3RfcGxh
dGZvcm0uc3lzdGVtKCkgIT0gJ0RhcndpbicgZWxzZSAnbWFjJykubG93ZXIoKSwKKyAgICAgICAg
ICAgIGlzX3NpbXVsYXRvcj1pc19zaW11bGF0b3IsCisgICAgICAgICAgICB2ZXJzaW9uPXZlcnNp
b24gb3IgKGhvc3RfcGxhdGZvcm0ucmVsZWFzZSgpIGlmIGhvc3RfcGxhdGZvcm0uc3lzdGVtKCkg
IT0gJ0RhcndpbicgZWxzZSBob3N0X3BsYXRmb3JtLm1hY192ZXIoKVswXSksCisgICAgICAgICAg
ICBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlIG9yIGhvc3RfcGxhdGZvcm0ubWFjaGluZSgpLAor
ICAgICAgICApCisgICAgICAgIG9wdGlvbmFsX2RhdGEgPSBkaWN0KHZlcnNpb25fbmFtZT12ZXJz
aW9uX25hbWUsIG1vZGVsPW1vZGVsLCBzdHlsZT1zdHlsZSwgZmxhdm9yPWZsYXZvciwgc2RrPXNk
aykKKyAgICAgICAgY29uZmlnLnVwZGF0ZSh7a2V5OiB2YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBv
cHRpb25hbF9kYXRhLml0ZXJpdGVtcygpIGlmIHZhbHVlIGlzIG5vdCBOb25lfSkKKyAgICAgICAg
cmV0dXJuIGNvbmZpZworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1aXRlPU5vbmUsIGNvbmZp
Z3VyYXRpb249Tm9uZSwgY29tbWl0cz1bXSwgdGltZXN0YW1wPU5vbmUsIGRldGFpbHM9Tm9uZSwg
cnVuX3N0YXRzPU5vbmUsIHJlc3VsdHM9e30pOgorICAgICAgICBzZWxmLnN1aXRlID0gc3VpdGUK
KyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorICAgICAgICBzZWxm
LmNvbW1pdHMgPSBjb21taXRzCisgICAgICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wCisg
ICAgICAgIHNlbGYuZGV0YWlscyA9IGRldGFpbHMKKyAgICAgICAgc2VsZi5ydW5fc3RhdHMgPSBy
dW5fc3RhdHMKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gcmVzdWx0cworCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBjcmVhdGVfY29tbWl0KHJlcG9zaXRvcnlfaWQsIGlkLCBicmFuY2g9Tm9u
ZSk6CisgICAgICAgIGNvbW1pdCA9IGRpY3QocmVwb3NpdG9yeV9pZD1yZXBvc2l0b3J5X2lkLCBp
ZD1pZCkKKyAgICAgICAgaWYgYnJhbmNoOgorICAgICAgICAgICAgY29tbWl0WydicmFuY2gnXSA9
IGJyYW5jaAorICAgICAgICByZXR1cm4gY29tbWl0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIGNyZWF0ZV9kZXRhaWxzKGxpbms9Tm9uZSwgb3B0aW9ucz1Ob25lLCAqKmt3YXJncyk6Cisg
ICAgICAgIHJlc3VsdCA9IGRpY3QoKiprd2FyZ3MpCisgICAgICAgIGlmIGxpbms6CisgICAgICAg
ICAgICByZXN1bHRbJ2xpbmsnXSA9IGxpbmsKKyAgICAgICAgaWYgbm90IG9wdGlvbnM6CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gVXBsb2FkLkJV
SUxEQk9UX0RFVEFJTFM6CisgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob3B0aW9ucywgZWxl
bWVudC5yZXBsYWNlKCctJywgJ18nKSwgTm9uZSkKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdFtlbGVtZW50XSA9IHZhbHVlCisgICAgICAg
IHJldHVybiByZXN1bHQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX3J1bl9z
dGF0cyhzdGFydF90aW1lPU5vbmUsIGVuZF90aW1lPU5vbmUsIHRlc3RzX3NraXBwZWQ9Tm9uZSwg
Kiprd2FyZ3MpOgorICAgICAgICBzdGF0cyA9IGRpY3QoKiprd2FyZ3MpCisgICAgICAgIG9wdGlv
bmFsX2RhdGEgPSBkaWN0KHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwgZW5kX3RpbWU9ZW5kX3RpbWUs
IHRlc3RzX3NraXBwZWQ9dGVzdHNfc2tpcHBlZCkKKyAgICAgICAgc3RhdHMudXBkYXRlKHtrZXk6
IHZhbHVlIGZvciBrZXksIHZhbHVlIGluIG9wdGlvbmFsX2RhdGEuaXRlcml0ZW1zKCkgaWYgdmFs
dWUgaXMgbm90IE5vbmV9KQorICAgICAgICByZXR1cm4gc3RhdHMKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPU5vbmUsIGFjdHVhbD1Ob25l
LCBsb2c9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCoqa3dhcmdzKQor
CisgICAgICAgICMgVGVzdHMgd2hpY2ggZG9uJ3QgZGVjbGFyZSBleHBlY3RhdGlvbnMgb3IgcmVz
dWx0cyBhcmUgYXNzdW1lZCB0byBoYXZlIHBhc3NlZC4KKyAgICAgICAgb3B0aW9uYWxfZGF0YSA9
IGRpY3QoZXhwZWN0ZWQ9ZXhwZWN0ZWQsIGFjdHVhbD1hY3R1YWwsIGxvZz1sb2cpCisgICAgICAg
IHJlc3VsdC51cGRhdGUoe2tleTogdmFsdWUgZm9yIGtleSwgdmFsdWUgaW4gb3B0aW9uYWxfZGF0
YS5pdGVyaXRlbXMoKSBpZiB2YWx1ZSBpcyBub3QgTm9uZX0pCisgICAgICAgIHJldHVybiByZXN1
bHQKKworICAgIGRlZiB1cGxvYWQoc2VsZiwgdXJsLCBsb2dfbGluZV9mdW5jPWxhbWJkYSB2YWw6
IHN5cy5zdGRvdXQud3JpdGUodmFsICsgJ1xuJykpOgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICByZXNwb25zZSA9IHJlcXVlc3RzLnBvc3QodXJsICsgc2VsZi5VUExPQURfRU5EUE9JTlQsIGRh
dGE9anNvbi5kdW1wcyhzZWxmLCBjbHM9VXBsb2FkLkVuY29kZXIpKQorICAgICAgICBleGNlcHQg
cmVxdWVzdHMuZXhjZXB0aW9ucy5Db25uZWN0aW9uRXJyb3I6CisgICAgICAgICAgICBsb2dfbGlu
ZV9mdW5jKCcgJyAqIDQgKyAnRmFpbGVkIHRvIHVwbG9hZCB0byB7fSwgcmVzdWx0cyBzZXJ2ZXIg
bm90IG9ubGluZScuZm9ybWF0KHVybCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGxvZ19saW5lX2Z1bmMoJyAn
ICogNCArICdGYWlsZWQgdG8gZW5jb2RlIHVwbG9hZCBkYXRhOiB7fScuZm9ybWF0KGUpKQorICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUg
IT0gMjAwOgorICAgICAgICAgICAgbG9nX2xpbmVfZnVuYygnICcgKiA0ICsgJ0Vycm9yIHVwbG9h
ZGluZyB0byB7fTonLmZvcm1hdCh1cmwpKQorICAgICAgICAgICAgbG9nX2xpbmVfZnVuYygnICcg
KiA4ICsgcmVzcG9uc2UuanNvbigpWydkZXNjcmlwdGlvbiddKQorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICAgICAgbG9nX2xpbmVfZnVuYygnICcgKiA0ICsgJ1VwbG9hZGVkIHJlc3Vs
dHMgdG8ge30nLmZvcm1hdCh1cmwpKQorICAgICAgICByZXR1cm4gVHJ1ZQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5CShub25l
eGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWRfdW5pdHRl
c3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTYgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2lu
c3RhbGxlZC5yZXF1ZXN0cworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBqc29uCitpbXBv
cnQgcmVxdWVzdHMKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRw
eS5yZXN1bHRzLnVwbG9hZCBpbXBvcnQgVXBsb2FkCitmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkg
aW1wb3J0IG1vY2sKKworCitjbGFzcyBVcGxvYWRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKwor
ICAgIGNsYXNzIE9wdGlvbnMob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICoq
a3dhcmdzKToKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGt3YXJncy5pdGVyaXRlbXMo
KToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsdWUpCisKKyAgICBjbGFz
cyBNb2NrUmVzcG9uc2Uob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXR1
c19jb2RlPTIwMCwgdGV4dD0nJyk6CisgICAgICAgICAgICBzZWxmLnN0YXR1c19jb2RlID0gc3Rh
dHVzX2NvZGUKKyAgICAgICAgICAgIHNlbGYudGV4dCA9IHRleHQKKworICAgICAgICBkZWYganNv
bihzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHNlbGYudGV4dCkKKworICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbm9ybWFsaXplKGRhdGEpOgorICAgICAgICBpZiBpc2lu
c3RhbmNlKGRhdGEsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmV0dXJuIHN0cihkYXRhKQor
ICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YSwgY29sbGVjdGlvbnMuTWFwcGluZyk6CisgICAg
ICAgICAgICByZXR1cm4gZGljdChtYXAoVXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEuaXRlcml0
ZW1zKCkpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YSwgY29sbGVjdGlvbnMuSXRlcmFi
bGUpOgorICAgICAgICAgICAgcmV0dXJuIHR5cGUoZGF0YSkobWFwKFVwbG9hZFRlc3Qubm9ybWFs
aXplLCBkYXRhKSkKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgcmFpc2VfcmVxdWVzdHNfQ29ubmVjdGlvbkVycm9yKCk6CisgICAgICAgIHJhaXNlIHJl
cXVlc3RzLmV4Y2VwdGlvbnMuQ29ubmVjdGlvbkVycm9yKCkKKworICAgIGRlZiB0ZXN0X2VuY29k
aW5nKHNlbGYpOgorICAgICAgICBzdGFydF90aW1lLCBlbmRfdGltZSA9IHRpbWUudGltZSgpIC0g
MywgdGltZS50aW1lKCkKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3Vp
dGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249VXBsb2FkLmNy
ZWF0ZV9jb25maWd1cmF0aW9uKAorICAgICAgICAgICAgICAgIHBsYXRmb3JtPSdtYWMnLAorICAg
ICAgICAgICAgICAgIHZlcnNpb249JzEwLjEzLjAnLAorICAgICAgICAgICAgICAgIHZlcnNpb25f
bmFtZT0nSGlnaCBTaWVycmEnLAorICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZT0neDg2XzY0
JywKKyAgICAgICAgICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICAgICApLAorICAgICAg
ICAgICAgZGV0YWlscz1VcGxvYWQuY3JlYXRlX2RldGFpbHMobGluaz0naHR0cHM6Ly93ZWJraXQu
b3JnJyksCisgICAgICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAg
ICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1
JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAg
ICAgICAgICAgcnVuX3N0YXRzPVVwbG9hZC5jcmVhdGVfcnVuX3N0YXRzKAorICAgICAgICAgICAg
ICAgIHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICBlbmRfdGltZT1lbmRf
dGltZSwKKyAgICAgICAgICAgICAgICB0ZXN0c19za2lwcGVkPTAsCisgICAgICAgICAgICApLAor
ICAgICAgICAgICAgcmVzdWx0cz17CisgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzog
e30sCisgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0
X3Jlc3VsdChleHBlY3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFjdHVhbD1VcGxvYWQu
RXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgKQorICAgICAgICBn
ZW5lcmF0ZWRfZGljdCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxv
YWQsIGNscz1VcGxvYWQuRW5jb2RlcikpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2Vu
ZXJhdGVkX2RpY3RbJ3ZlcnNpb24nXSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5l
cmF0ZWRfZGljdFsnc3VpdGUnXSwgJ3dlYmtpdHB5LXRlc3RzJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChnZW5lcmF0ZWRfZGljdFsnY29uZmlndXJhdGlvbiddLCBzZWxmLm5vcm1hbGl6ZShk
aWN0KAorICAgICAgICAgICAgcGxhdGZvcm09J21hYycsCisgICAgICAgICAgICBpc19zaW11bGF0
b3I9RmFsc2UsCisgICAgICAgICAgICB2ZXJzaW9uPScxMC4xMy4wJywKKyAgICAgICAgICAgIHZl
cnNpb25fbmFtZT0nSGlnaCBTaWVycmEnLAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPSd4ODZf
NjQnLAorICAgICAgICAgICAgc2RrPScxN0E0MDUnLAorICAgICAgICApKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsnY29tbWl0cyddLCBbZGljdCgKKyAgICAgICAg
ICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICBpZD0nNScsCisgICAgICAg
ICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9ybWFs
aXplKGRpY3QobGluaz0naHR0cHM6Ly93ZWJraXQub3JnJykpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncnVuX3N0YXRzJ10sIHNlbGYu
bm9ybWFsaXplKGRpY3QoCisgICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAg
ICAgICAgICBlbmRfdGltZT1lbmRfdGltZSwKKyAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwK
KyAgICAgICAgKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rl
c3RfcmVzdWx0cyddWydyZXN1bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICd3
ZWJraXRweS50ZXN0MSc6IHt9LAorICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2Fk
LmNyZWF0ZV90ZXN0X3Jlc3VsdChleHBlY3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFj
dHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICB9KSkKKworICAgIGRlZiB0
ZXN0X3VwbG9hZChzZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAg
c3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVh
dGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAg
ICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAg
ICAgICAgICAgKV0sCisgICAgICAgICkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVl
c3RzLnBvc3QnLCBuZXc9bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoKSk6Cisg
ICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQu
b3JnL3Jlc3VsdHMnLCBsb2dfbGluZV9mdW5jPWxhbWJkYSBfOiBOb25lKSkKKworICAgICAgICB3
aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBuZXc9bGFtYmRhIHVybCwgZGF0YTogc2Vs
Zi5yYWlzZV9yZXF1ZXN0c19Db25uZWN0aW9uRXJyb3IoKSk6CisgICAgICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKHVwbG9hZC51cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1bHRzJywgbG9n
X2xpbmVfZnVuYz1sYW1iZGEgXzogTm9uZSkpCisKKyAgICAgICAgbW9ja180MDQgPSBtb2NrLnBh
dGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PWxhbWJkYSB1cmwsIGRhdGE6IHNlbGYuTW9ja1Jlc3Bv
bnNlKAorICAgICAgICAgICAgc3RhdHVzX2NvZGU9NDA0LAorICAgICAgICAgICAgdGV4dD1qc29u
LmR1bXBzKGRpY3QoZGVzY3JpcHRpb249J05vIHN1Y2ggYWRkcmVzcycpKSwKKyAgICAgICAgKSkK
KyAgICAgICAgd2l0aCBtb2NrXzQwNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodXBs
b2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMnLCBsb2dfbGluZV9mdW5jPWxh
bWJkYSBfOiBOb25lKSkKKworICAgIGRlZiB0ZXN0X3BhY2tlZF90ZXN0KHNlbGYpOgorICAgICAg
ICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAor
ICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAg
ICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAg
ICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAgICAg
IHJlc3VsdHM9eworICAgICAgICAgICAgICAgICdkaXIxL3N1Yi1kaXIxL3Rlc3QxJzogVXBsb2Fk
LmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAg
ICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90ZXN0Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9y
ZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuVElNRU9VVCksCisgICAgICAgICAgICAg
ICAgJ2RpcjEvc3ViLWRpcjIvdGVzdDMnOiB7fSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWIt
ZGlyMi90ZXN0NCc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIyL3N1Yi1kaXIzL3Rlc3Q1Jzog
e30sCisgICAgICAgICAgICAgICAgJ2RpcjIvdGVzdDYnOiB7fSwKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGljdCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9h
ZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncmVzdWx0cyddLCBz
ZWxmLm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAnZGlyMSc6IHsKKyAgICAgICAgICAgICAgICAn
c3ViLWRpcjEnOiB7CisgICAgICAgICAgICAgICAgICAgICd0ZXN0MSc6IHsnYWN0dWFsJzogVXBs
b2FkLkV4cGVjdGF0aW9ucy5GQUlMfSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3QyJzogeydh
Y3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLlRJTUVPVVR9LAorICAgICAgICAgICAgICAgIH0s
ICdzdWItZGlyMic6IHsKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3QzJzoge30sCisgICAgICAg
ICAgICAgICAgICAgICd0ZXN0NCc6IHt9LAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0sICdkaXIyJzogeworICAgICAgICAgICAgICAgICdzdWItZGlyMyc6IHsndGVzdDUnOiB7fX0s
CisgICAgICAgICAgICAgICAgJ3Rlc3Q2Jzoge30sCisgICAgICAgICAgICB9LAorICAgICAgICB9
KSkKKworICAgIGRlZiB0ZXN0X25vX3N1aXRlKHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxv
YWQoCisgICAgICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAg
ICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywK
KyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAg
ICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAg
ICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQorCisgICAgZGVmIHRl
c3Rfbm9fY29tbWl0cyhzZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAg
ICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgKQorICAgICAgICB3aXRoIHNlbGYu
YXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQs
IGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRlZiB0ZXN0X2J1aWxkYm90KHNlbGYpOgorICAg
ICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMn
LAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAg
ICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisg
ICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAg
ICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRhaWxzKG9wdGlvbnM9c2VsZi5PcHRpb25zKAor
ICAgICAgICAgICAgICAgIGJ1aWxkYm90X21hc3Rlcj0nd2Via2l0Lm9yZycsCisgICAgICAgICAg
ICAgICAgYnVpbGRlcl9uYW1lPSdRdWV1ZS0xJywKKyAgICAgICAgICAgICAgICBidWlsZF9udW1i
ZXI9MSwKKyAgICAgICAgKSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVF
cnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVy
KQorCisgICAgICAgIHVwbG9hZC5kZXRhaWxzWydidWlsZGJvdC13b3JrZXInXSA9ICdib3QxMjMn
CisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29u
LmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9y
bWFsaXplKHsKKyAgICAgICAgICAgICdidWlsZGJvdC1tYXN0ZXInOiAnd2Via2l0Lm9yZycsCisg
ICAgICAgICAgICAnYnVpbGRlci1uYW1lJzogJ1F1ZXVlLTEnLAorICAgICAgICAgICAgJ2J1aWxk
LW51bWJlcic6IDEsCisgICAgICAgICAgICAnYnVpbGRib3Qtd29ya2VyJzogJ2JvdDEyMycsCisg
ICAgICAgIH0pKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkJKHJldmlzaW9u
IDI0MzAwOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMu
CiAjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5v
cmcpCi0jIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsMTcgKzM4LDE5IEBAIGltcG9y
dCB0cmFjZWJhY2sKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0ubG9ndXRpbHMgaW1wb3J0IGNvbmZpZ3VyZV9sb2dnaW5nCi1mcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIFNjcmlwdEVycm9yCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KLWZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0ZW1Ib3N0Citmcm9t
IHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0CiBmcm9tIHdlYmtpdHB5LnBvcnQuY29u
ZmlnIGltcG9ydCBDb25maWcKIGZyb20gd2Via2l0cHkudGVzdC5maW5kZXIgaW1wb3J0IEZpbmRl
cgogZnJvbSB3ZWJraXRweS50ZXN0LnByaW50ZXIgaW1wb3J0IFByaW50ZXIKIGZyb20gd2Via2l0
cHkudGVzdC5ydW5uZXIgaW1wb3J0IFJ1bm5lciwgdW5pdF90ZXN0X25hbWUKK2Zyb20gd2Via2l0
cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVwbG9hZAorZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9w
dGlvbnMgaW1wb3J0IHVwbG9hZF9vcHRpb25zCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihf
X25hbWVfXykKIAotX2hvc3QgPSBTeXN0ZW1Ib3N0KCkKK19ob3N0ID0gSG9zdCgpCiBfd2Via2l0
X3Jvb3QgPSBOb25lCiAKIApAQCAtMTMxLDYgKzEzMywxMCBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0
KToKICAgICAgICAgICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBSZWxlYXNlJykK
ICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAoY29uZmlndXJhdGlvbl9ncm91cCkKIAor
ICAgICAgICB1cGxvYWRfZ3JvdXAgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdVcGxv
YWQgT3B0aW9ucycpCisgICAgICAgIHVwbG9hZF9ncm91cC5hZGRfb3B0aW9ucyh1cGxvYWRfb3B0
aW9ucygpKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cCh1cGxvYWRfZ3JvdXApCisK
ICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1hJywgJy0tYWxsJywgYWN0aW9uPSdzdG9yZV90
cnVlJywgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVu
IGFsbCB0aGUgdGVzdHMnKQogICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWMnLCAnLS1jb3Zl
cmFnZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCkBAIC0xODEsMTEgKzE4
NywxMiBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgZnJvbSB3ZWJraXRweS50aGly
ZHBhcnR5IGltcG9ydCBhdXRvaW5zdGFsbF9ldmVyeXRoaW5nCiAgICAgICAgIGF1dG9pbnN0YWxs
X2V2ZXJ5dGhpbmcoKQogCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAg
ICBjb25maWcgPSBDb25maWcoX2hvc3QuZXhlY3V0aXZlLCBzZWxmLmZpbmRlci5maWxlc3lzdGVt
KQorICAgICAgICBjb25maWd1cmF0aW9uX3RvX3VzZSA9IHNlbGYuX29wdGlvbnMuY29uZmlndXJh
dGlvbiBvciBjb25maWcuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkKICAgICAgICAgaWYgd2lsbF9y
dW5fbGxkYl93ZWJraXRfdGVzdHM6CiAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBk
YXRlKCdCdWlsZGluZyBsbGRiV2ViS2l0VGVzdGVyIC4uLicpCiAgICAgICAgICAgICBidWlsZF9s
bGRid2Via2l0dGVzdGVyID0gc2VsZi5maW5kZXIuZmlsZXN5c3RlbS5qb2luKF93ZWJraXRfcm9v
dCwgJ1Rvb2xzJywgJ1NjcmlwdHMnLCAnYnVpbGQtbGxkYndlYmtpdHRlc3RlcicpCi0gICAgICAg
ICAgICBjb25maWcgPSBDb25maWcoX2hvc3QuZXhlY3V0aXZlLCBzZWxmLmZpbmRlci5maWxlc3lz
dGVtKQotICAgICAgICAgICAgY29uZmlndXJhdGlvbl90b191c2UgPSBzZWxmLl9vcHRpb25zLmNv
bmZpZ3VyYXRpb24gb3IgY29uZmlnLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAgICAgICAgICAg
ICB0cnk6CiAgICAgICAgICAgICAgICAgX2hvc3QuZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZf
ZmFpbChbYnVpbGRfbGxkYndlYmtpdHRlc3RlciwgY29uZmlnLmZsYWdfZm9yX2NvbmZpZ3VyYXRp
b24oY29uZmlndXJhdGlvbl90b191c2UpXSwgcXVpZXQ9KG5vdCBib29sKHNlbGYuX29wdGlvbnMu
dmVyYm9zZSkpKQogICAgICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yIGFzIGU6CkBAIC0yMTgs
NiArMjI1LDcgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIHRlc3RfcnVubmVyID0g
UnVubmVyKHNlbGYucHJpbnRlciwgbG9hZGVyKQogICAgICAgICB0ZXN0X3J1bm5lci5ydW4ocGFy
YWxsZWxfdGVzdHMsIHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQogICAgICAgICB0ZXN0
X3J1bm5lci5ydW4oc2VyaWFsX3Rlc3RzLCAxKQorICAgICAgICBlbmRfdGltZSA9IHRpbWUudGlt
ZSgpCiAKICAgICAgICAgc2VsZi5wcmludGVyLnByaW50X3Jlc3VsdCh0aW1lLnRpbWUoKSAtIHN0
YXJ0KQogCkBAIC0yMzIsOSArMjQwLDUxIEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdlOgogICAgICAgICAgICAgY292LnN0b3AoKQogICAg
ICAgICAgICAgY292LnNhdmUoKQorCisgICAgICAgIGZhaWxlZF91cGxvYWRzID0gMAorICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnJlcG9ydF91cmxzOgorICAgICAgICAgICAgc2VsZi5wcmludGVy
Lm1ldGVyLndyaXRlbG4oJ1xuJykKKyAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZV91cGRh
dGUoJ1ByZXBhcmluZyB1cGxvYWQgZGF0YSAuLi4nKQorCisgICAgICAgICAgICAjIEVtcHR5IHRl
c3QgcmVzdWx0cyBpbmRpY2F0ZSBhIFBBU1MuCisgICAgICAgICAgICByZXN1bHRzID0ge3Rlc3Q6
IHt9IGZvciB0ZXN0IGluIHRlc3RfcnVubmVyLnRlc3RzX3J1bn0KKyAgICAgICAgICAgIGZvciB0
ZXN0LCBlcnJvcnMgaW4gdGVzdF9ydW5uZXIuZXJyb3JzOgorICAgICAgICAgICAgICAgIHJlc3Vs
dHNbdGVzdF0gPSBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhwZWN0
YXRpb25zLkVSUk9SLCBsb2c9Jy9uJy5qb2luKGVycm9ycykpCisgICAgICAgICAgICBmb3IgdGVz
dCwgZmFpbHVyZXMgaW4gdGVzdF9ydW5uZXIuZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgcmVz
dWx0c1t0ZXN0XSA9IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBl
Y3RhdGlvbnMuRkFJTCwgbG9nPScvbicuam9pbihmYWlsdXJlcykpCisKKyAgICAgICAgICAgIF9o
b3N0LmluaXRpYWxpemVfc2NtKCkKKyAgICAgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAg
ICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgICAgIGNvbmZp
Z3VyYXRpb249VXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9uKAorICAgICAgICAgICAgICAgICAg
ICBwbGF0Zm9ybT1faG9zdC5wbGF0Zm9ybS5vc19uYW1lLAorICAgICAgICAgICAgICAgICAgICB2
ZXJzaW9uPXN0cihfaG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uKSwKKyAgICAgICAgICAgICAgICAg
ICAgdmVyc2lvbl9uYW1lPV9ob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb25fbmFtZSgpLAorICAgICAg
ICAgICAgICAgICAgICBzdHlsZT1jb25maWd1cmF0aW9uX3RvX3VzZSwKKyAgICAgICAgICAgICAg
ICAgICAgc2RrPV9ob3N0LnBsYXRmb3JtLmJ1aWxkX3ZlcnNpb24oKSwKKyAgICAgICAgICAgICAg
ICApLAorICAgICAgICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRhaWxzKG9wdGlv
bnM9c2VsZi5fb3B0aW9ucyksCisgICAgICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0
ZV9jb21taXQoCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisg
ICAgICAgICAgICAgICAgICAgIGlkPV9ob3N0LnNjbSgpLm5hdGl2ZV9yZXZpc2lvbihfd2Via2l0
X3Jvb3QpLAorICAgICAgICAgICAgICAgICAgICBicmFuY2g9X2hvc3Quc2NtKCkubmF0aXZlX2Jy
YW5jaChfd2Via2l0X3Jvb3QpLAorICAgICAgICAgICAgICAgICldLAorICAgICAgICAgICAgICAg
IHJ1bl9zdGF0cz1VcGxvYWQuY3JlYXRlX3J1bl9zdGF0cygKKyAgICAgICAgICAgICAgICAgICAg
c3RhcnRfdGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAgICBlbmRfdGltZT1lbmRf
dGltZSwKKyAgICAgICAgICAgICAgICAgICAgdGVzdHNfc2tpcHBlZD1sZW4odGVzdF9ydW5uZXIu
dGVzdHNfcnVuKSAtIGxlbihwYXJhbGxlbF90ZXN0cykgLSBsZW4oc2VyaWFsX3Rlc3RzKSwKKyAg
ICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIHJlc3VsdHM9cmVzdWx0cywKKyAgICAg
ICAgICAgICkKKyAgICAgICAgICAgIGZvciB1cmwgaW4gc2VsZi5fb3B0aW9ucy5yZXBvcnRfdXJs
czoKKyAgICAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKCdVcGxvYWRpbmcg
dG8ge30gLi4uJy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgICAgICBmYWlsZWRfdXBsb2FkcyA9
IGZhaWxlZF91cGxvYWRzIGlmIHVwbG9hZC51cGxvYWQodXJsLCBsb2dfbGluZV9mdW5jPXNlbGYu
cHJpbnRlci5tZXRlci53cml0ZWxuKSBlbHNlIChmYWlsZWRfdXBsb2FkcyArIDEpCisgICAgICAg
ICAgICBzZWxmLnByaW50ZXIubWV0ZXIud3JpdGVsbignVXBsb2FkcyBjb21wbGV0ZWQhJykKKwor
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdlOgogICAgICAgICAgICAgY292LnJlcG9y
dChzaG93X21pc3Npbmc9RmFsc2UpCiAKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmLnByaW50ZXIu
bnVtX2Vycm9ycyBhbmQgbm90IHNlbGYucHJpbnRlci5udW1fZmFpbHVyZXMKKyAgICAgICAgcmV0
dXJuIG5vdCBzZWxmLnByaW50ZXIubnVtX2Vycm9ycyBhbmQgbm90IHNlbGYucHJpbnRlci5udW1f
ZmFpbHVyZXMgYW5kIG5vdCBmYWlsZWRfdXBsb2FkcwogCiAgICAgZGVmIF9jaGVja19pbXBvcnRz
KHNlbGYsIG5hbWVzKToKICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkJKHJldmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgY2xhc3MgUnVubmVyKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByaW50
ZXIsIGxvYWRlcik6CiAgICAgICAgIHNlbGYucHJpbnRlciA9IHByaW50ZXIKICAgICAgICAgc2Vs
Zi5sb2FkZXIgPSBsb2FkZXIKLSAgICAgICAgc2VsZi50ZXN0c19ydW4gPSAwCisgICAgICAgIHNl
bGYudGVzdHNfcnVuID0gW10KICAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQogICAgICAgICBzZWxm
LmZhaWx1cmVzID0gW10KICAgICAgICAgc2VsZi53b3JrZXJfZmFjdG9yeSA9IGxhbWJkYSBjYWxs
ZXI6IF9Xb3JrZXIoY2FsbGVyLCBzZWxmLmxvYWRlcikKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3Mg
UnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLnByaW50ZXIucHJpbnRfc3RhcnRlZF90
ZXN0KHNvdXJjZSwgdGVzdF9uYW1lKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgc2Vs
Zi50ZXN0c19ydW4gKz0gMQorICAgICAgICBzZWxmLnRlc3RzX3J1bi5hcHBlbmQodGVzdF9uYW1l
KQogICAgICAgICBpZiBmYWlsdXJlczoKICAgICAgICAgICAgIHNlbGYuZmFpbHVyZXMuYXBwZW5k
KCh0ZXN0X25hbWUsIGZhaWx1cmVzKSkKICAgICAgICAgaWYgZXJyb3JzOgpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90ZXN0L3J1bm5lcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAy
NDMwMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw2IEBAIGNsYXNzIFJ1bm5lclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgndGVzdDMgKEZvbykn
LCAnRScsICd0ZXN0M1xuZXJyZWQnKSkKICAgICAgICAgcnVubmVyID0gUnVubmVyKFByaW50ZXIo
c3RyZWFtLCBvcHRpb25zKSwgbG9hZGVyKQogICAgICAgICBydW5uZXIucnVuKFsnRm9vLnRlc3Qx
JywgJ0Zvby50ZXN0MicsICdGb28udGVzdDMnXSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChydW5uZXIudGVzdHNfcnVuLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5u
ZXIudGVzdHNfcnVuKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocnVubmVyLmZh
aWx1cmVzKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocnVubmVyLmVycm9ycyks
IDEpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9f
LnB5CShyZXZpc2lvbiAyNDMwMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAjIENvcHlyaWdo
dCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCisjIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNCw2ICsxMTUsOCBAQCBjbGFzcyBBdXRvaW5zdGFsbElt
cG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfcHl0ZXN0X3RpbWVv
dXQoKQogICAgICAgICBlbGlmICcucHl0ZXN0JyBpbiBmdWxsbmFtZToKICAgICAgICAgICAgIHNl
bGYuX2luc3RhbGxfcHl0ZXN0KCkKKyAgICAgICAgZWxpZiAnLnJlcXVlc3RzJyBpbiBmdWxsbmFt
ZToKKyAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfcmVxdWVzdHMoKQogCiAgICAgZGVmIF9pbnN0
YWxsX21lY2hhbml6ZShzZWxmKToKICAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9maWxl
cy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9tZWNoYW5pemUt
MC4yLjUudGFyLmd6IiwKQEAgLTE2MSw2ICsxNjQsMjEgQEAgY2xhc3MgQXV0b2luc3RhbGxJbXBv
cnRIb29rKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0
aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9hMi9lYy80MTVkMGNjY2MxZWQ0MWNkN2ZkZjY5YWQ5ODlk
YTE2YThkMTMwNTc5OTYzNzEwMDRjYWI0YmFmYzQ4ZjMvcHl0ZXN0LTMuNi4yLnRhci5neiIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0ZXN0LTMuNi4yL3NyYy9weXRlc3QucHki
KQogCisgICAgZGVmIF9pbnN0YWxsX3JlcXVlc3RzKHNlbGYpOgorICAgICAgICBzZWxmLl9lbnN1
cmVfYXV0b2luc3RhbGxlZF9kaXJfaXNfaW5fc3lzX3BhdGgoKQorICAgICAgICBzZWxmLl9pbnN0
YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvMDYvYjgvZDFlYTM4
NTEzYzIyZThjOTA2Mjc1ZDEzNTgxOGZlZTE2YWQ4NDk1OTg1OTU2YTliN2UyYmIyMTk0MmExL2Nl
cnRpZmktMjAxOS4zLjkudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiY2VydGlmaS0y
MDE5LjMuOS9jZXJ0aWZpIikKKyAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9maWxlcy5w
eXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2ZjL2JiL2E1NzY4YzIzMGY5ZGRiMDNhY2M5ZWYzZjBk
NGEzY2Y5MzQ2MjQ3Mzc5NWQxOGU5NTM1NDk4YzhmOTI5ZC9jaGFyZGV0LTMuMC40LnRhci5neiIs
CisgICAgICAgICAgICAgICAgICAgICAgImNoYXJkZXQtMy4wLjQvY2hhcmRldCIpCisgICAgICAg
IHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9m
Yy9iYi9hNTc2OGMyMzBmOWRkYjAzYWNjOWVmM2YwZDRhM2NmOTM0NjI0NzM3OTVkMThlOTUzNTQ5
OGM4ZjkyOWQvY2hhcmRldC0zLjAuNC50YXIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgICJj
aGFyZGV0LTMuMC40L2NoYXJkZXQiKQorICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwczovL2Zp
bGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvYWQvMTMvZWI1Njk1MWI2Zjc5NTBjYWRiNTc5
Y2ExNjZlNDQ4YmE3N2Y5ZDI0ZWZjMDNlZGQ3ZTU1ZmE1N2QwNGI3L2lkbmEtMi44LnRhci5neiIs
CisgICAgICAgICAgICAgICAgICAgICAgImlkbmEtMi44L2lkbmEiKQorICAgICAgICBzZWxmLl9p
bnN0YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvYjEvNTMvMzdk
ODJhYjM5MTM5MzU2NWYyZjgzMWI4ZWVkYmZmZDU3ZGI1YTcxODIxNmY4MmYxYThiNGQzODFhMWMx
L3VybGxpYjMtMS4yNC4xLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgInVybGxpYjMt
MS4yNC4xL3NyYy91cmxsaWIzIikKKyAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9maWxl
cy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzLzUyLzJjLzUxNGU0YWMyNWRhMmIwOGNhNWE0NjRj
NTA0NjM2ODIxMjYzODVjNDI3MmMxODE5Mzg3NmU5MWY0YmMzOC9yZXF1ZXN0cy0yLjIxLjAudGFy
Lmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAicmVxdWVzdHMtMi4yMS4wL3JlcXVlc3RzIikK
KwogICAgIGRlZiBfaW5zdGFsbF9weWxpbnQoc2VsZik6CiAgICAgICAgIHNlbGYuX2Vuc3VyZV9h
dXRvaW5zdGFsbGVkX2Rpcl9pc19pbl9zeXNfcGF0aCgpCiAgICAgICAgIGlmIChub3Qgc2VsZi5f
ZnMuZXhpc3RzKHNlbGYuX2ZzLmpvaW4oX0FVVE9JTlNUQUxMRURfRElSLCAicHlsaW50IikpIG9y
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9xdWV1ZXNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTE4MywxMCArMTgzLDEwIEBAIGNsYXNzIFBhdGNoUHJvY2Vzc2luZ1F1ZXVlVGVzdChDb21t
YW5kc1QKICAgICAgICAgcXVldWUuX29wdGlvbnMgPSBNb2NrKCkKICAgICAgICAgcXVldWUuX29w
dGlvbnMucG9ydCA9IE5vbmUKICAgICAgICAgcGF0Y2ggPSBxdWV1ZS5fdG9vbC5idWdzLmZldGNo
X2F0dGFjaG1lbnQoMTAwMDEpCi0gICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJNT0NLIGFkZF9h
dHRhY2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlwdGlvbj1BcmNoaXZlIG9mIGxh
eW91dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9yIG1hYy1zbm93bGVvcGFyZCBmaWxlbmFtZT1s
YXlvdXQtdGVzdC1yZXN1bHRzLnppcCBtaW1ldHlwZT1Ob25lCisgICAgICAgIGV4cGVjdGVkX2xv
Z3MgPSAiIiJNT0NLIGFkZF9hdHRhY2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlw
dGlvbj1BcmNoaXZlIG9mIGxheW91dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9yIG1hYy1oaWdo
c2llcnJhIGZpbGVuYW1lPWxheW91dC10ZXN0LXJlc3VsdHMuemlwIG1pbWV0eXBlPU5vbmUKIC0t
IEJlZ2luIGNvbW1lbnQgLS0KIFRoZSBhdHRhY2hlZCB0ZXN0IGZhaWx1cmVzIHdlcmUgc2VlbiB3
aGlsZSBydW5uaW5nIHJ1bi13ZWJraXQtdGVzdHMgb24gdGhlIG1vY2stcXVldWUuCi1Qb3J0OiBt
YWMtc25vd2xlb3BhcmQgIFBsYXRmb3JtOiBNb2NrUGxhdGZvcm0gMS4wCitQb3J0OiBtYWMtaGln
aHNpZXJyYSAgUGxhdGZvcm06IE1vY2tQbGF0Zm9ybSAxLjAKIC0tIEVuZCBjb21tZW50IC0tCiAi
IiIKICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHF1ZXVlLl91
cGxvYWRfcmVzdWx0c19hcmNoaXZlX2Zvcl9wYXRjaCwgW3BhdGNoLCBNb2NrKCldLCBleHBlY3Rl
ZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364866</attachid>
            <date>2019-03-15 15:59:19 -0700</date>
            <delta_ts>2019-03-15 16:01:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190315091629.patch</filename>
            <type>text/plain</type>
            <size>60670</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE5LTAzLTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6Cisg
ICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOiBBZGQgcmVxdWVzdHMg
YXV0by1pbnN0YWxsLgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxsX3Jl
cXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBs
b2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGlu
Zy4KKwogMjAxOS0wMy0xNSAgU2hhd24gUm9iZXJ0cyAgPHNyb2JlcnRzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjQyOTUyLgpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMyBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVj
dG9yeSBmb3IgbW9kdWxlIGZpbGVzCisKKyMgS2VlcCB0aGlzIGZpbGUgZnJlZSBvZiBhbnkgY29k
ZSBvciBpbXBvcnQgc3RhdGVtZW50cyB0aGF0IGNvdWxkCisjIGNhdXNlIGVpdGhlciBhbiBlcnJv
ciB0byBvY2N1ciBvciBhIGxvZyBtZXNzYWdlIHRvIGJlIGxvZ2dlZC4KKyMgVGhpcyBlbnN1cmVz
IHRoYXQgY2FsbGluZyBjb2RlIGNhbiBpbXBvcnQgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tCisj
IHdlYmtpdHB5IGJlZm9yZSBhbnkgZXJyb3JzIG9yIGxvZyBtZXNzYWdlcyBkdWUgdG8gY29kZSBp
biB0aGlzIGZpbGUuCisjIEluaXRpYWxpemF0aW9uIGNvZGUgY2FuIGluY2x1ZGUgdGhpbmdzIGxp
a2UgdmVyc2lvbi1jaGVja2luZyBjb2RlIGFuZAorIyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gY29k
ZS4KKyMKKyMgV2UgZG8gbm90IGV4ZWN1dGUgYW55IHZlcnNpb24tY2hlY2tpbmcgY29kZSBvciBs
b2dnaW5nIGNvbmZpZ3VyYXRpb24KKyMgY29kZSBpbiB0aGlzIGZpbGUgc28gdGhhdCBjYWxsZXJz
IGNhbiBvcHQtaW4gYXMgdGhleSB3YW50LiAgVGhpcyBhbHNvCisjIGFsbG93cyBkaWZmZXJlbnQg
Y2FsbGVycyB0byBjaG9vc2UgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uIGNvZGUsCisjIGFzIG5l
Y2Vzc2FyeS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5
CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25z
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9wdHBhcnNlCisKKworZGVmIHVwbG9hZF9vcHRp
b25zKCk6CisgICAgcmV0dXJuIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcmVw
b3J0JywgYWN0aW9uPSdhcHBlbmQnLCBkZXN0PSdyZXBvcnRfdXJscycsIGhlbHA9J1VSTCAob3Ig
VVJMcykgdG8gcmVwb3J0IHRlc3QgcmVzdWx0cyB0bycpLAorICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLS1idWlsZGJvdC1tYXN0ZXInLCBoZWxwPSdUaGUgdXJsIG9mIHRoZSBidWlsZGJv
dCBtYXN0ZXIuJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkZXItbmFt
ZScsIGhlbHA9J1RoZSBuYW1lIG9mIHRoZSBidWlsZGJvdCBidWlsZGVyIHRlc3RzIHdlcmUgcnVu
IG9uLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZC1udW1iZXInLCBo
ZWxwPSdUaGUgYnVpbGRib3QgYnVpbGQgbnVtYmVyIHRlc3RzIGFyZSBhc3NvY2lhdGVkIHdpdGgu
JyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkYm90LXdvcmtlcicsIGhl
bHA9J1RoZSBidWlsZGJvdCB3b3JrZXIgdGVzdHMgd2VyZSBydW4gb24uJyksCisgICAgXQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5CShub25leGlzdGVudCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5yZXF1ZXN0cwor
CitpbXBvcnQganNvbgoraW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBwbGF0
Zm9ybSBhcyBob3N0X3BsYXRmb3JtCisKKworY2xhc3MgVXBsb2FkKG9iamVjdCk6CisgICAgVVBM
T0FEX0VORFBPSU5UID0gJy9hcGkvdXBsb2FkJworICAgIEJVSUxEQk9UX0RFVEFJTFMgPSBbJ2J1
aWxkYm90LW1hc3RlcicsICdidWlsZGVyLW5hbWUnLCAnYnVpbGQtbnVtYmVyJywgJ2J1aWxkYm90
LXdvcmtlciddCisgICAgVkVSU0lPTiA9IDAKKworICAgIGNsYXNzIEV4cGVjdGF0aW9uczoKKyAg
ICAgICAgIyBUaGVzZSBhcmUgb3JkZXJlZCBieSBwcmlvcml0eSwgbWVhbmluZyB0aGF0IGEgdGVz
dCB3aGljaCBib3RoIGNyYXNoZXMgYW5kIGhhcworICAgICAgICAjIGEgd2FybmluZyBzaG91bGQg
YmUgY29uc2lkZXJlZCB0byBoYXZlIGNyYXNoZWQuCisgICAgICAgIE9SREVSID0gWworICAgICAg
ICAgICAgJ0NSQVNIJywKKyAgICAgICAgICAgICdUSU1FT1VUJywKKyAgICAgICAgICAgICdJTUFH
RScsICAgIyBJbWFnZS1kaWZmCisgICAgICAgICAgICAnQVVESU8nLCAgICMgQXVkaW8tZGlmZgor
ICAgICAgICAgICAgJ1RFWFQnLCAgICAjIFRleHQtZGlmZgorICAgICAgICAgICAgJ0ZBSUwnLAor
ICAgICAgICAgICAgJ0VSUk9SJywKKyAgICAgICAgICAgICdXQVJOSU5HJywKKyAgICAgICAgICAg
ICdQQVNTJywKKyAgICAgICAgXQorICAgICAgICBDUkFTSCwgVElNRU9VVCwgSU1BR0UsIEFVRElP
LCBURVhULCBGQUlMLCBFUlJPUiwgV0FSTklORywgUEFTUyA9IE9SREVSCisKKyAgICBjbGFzcyBF
bmNvZGVyKGpzb24uSlNPTkVuY29kZXIpOgorCisgICAgICAgIGRlZiBkZWZhdWx0KHNlbGYsIG9i
aik6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvYmosIFVwbG9hZCk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN1cGVyKFVwbG9hZC5FbmNvZGVyLCBzZWxmKS5kZWZhdWx0KG9iaikK
KworICAgICAgICAgICAgaWYgbm90IG9iai5zdWl0ZToKKyAgICAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCdObyBzdWl0ZSBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxvYWQnKQorICAgICAg
ICAgICAgaWYgbm90IG9iai5jb21taXRzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ05vIGNvbW1pdHMgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKworICAgICAgICAg
ICAgZGV0YWlscyA9IG9iai5kZXRhaWxzIG9yIG9iai5jcmVhdGVfZGV0YWlscygpCisgICAgICAg
ICAgICBidWlsZGJvdF9hcmdzID0gW2RldGFpbHMuZ2V0KGFyZywgTm9uZSkgaXMgTm9uZSBmb3Ig
YXJnIGluIG9iai5CVUlMREJPVF9ERVRBSUxTXQorICAgICAgICAgICAgaWYgYW55KGJ1aWxkYm90
X2FyZ3MpIGFuZCBub3QgYWxsKGJ1aWxkYm90X2FyZ3MpOgorICAgICAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoJ0FsbCBidWlsZGJvdCBkZXRhaWxzIG11c3QgYmUgZGVmaW5lZCBmb3IgdXBs
b2FkLCBkZXRhaWxzIG1pc3Npbmc6IHt9Jy5mb3JtYXQoJywgJy5qb2luKAorICAgICAgICAgICAg
ICAgICAgICBbb2JqLkJVSUxEQk9UX0RFVEFJTFNbaV0gZm9yIGkgaW4geHJhbmdlKGxlbihvYmou
QlVJTERCT1RfREVUQUlMUykpIGlmIGJ1aWxkYm90X2FyZ3NbaV1dLAorICAgICAgICAgICAgICAg
ICkpKQorCisgICAgICAgICAgICBkZWYgdW5wYWNrX3Rlc3QoY3VycmVudCwgcGF0aF90b190ZXN0
LCBkYXRhKToKKyAgICAgICAgICAgICAgICBpZiBsZW4ocGF0aF90b190ZXN0KSA9PSAxOgorICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0gPSBkYXRhCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGlmIG5vdCBjdXJyZW50LmdldChw
YXRoX3RvX3Rlc3RbMF0pOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50W3BhdGhfdG9fdGVz
dFswXV0gPSB7fQorICAgICAgICAgICAgICAgIHVucGFja190ZXN0KGN1cnJlbnRbcGF0aF90b190
ZXN0WzBdXSwgcGF0aF90b190ZXN0WzE6XSwgZGF0YSkKKworICAgICAgICAgICAgcmVzdWx0cyA9
IHt9CisgICAgICAgICAgICBmb3IgdGVzdCwgZGF0YSBpbiBvYmoucmVzdWx0cy5pdGVyaXRlbXMo
KToKKyAgICAgICAgICAgICAgICB1bnBhY2tfdGVzdChyZXN1bHRzLCB0ZXN0LnNwbGl0KCcvJyks
IGRhdGEpCisKKyAgICAgICAgICAgIHJlc3VsdCA9IGRpY3QoCisgICAgICAgICAgICAgICAgdmVy
c2lvbj1vYmouVkVSU0lPTiwKKyAgICAgICAgICAgICAgICBzdWl0ZT1vYmouc3VpdGUsCisgICAg
ICAgICAgICAgICAgY29uZmlndXJhdGlvbj1vYmouY29uZmlndXJhdGlvbiBvciBvYmouY3JlYXRl
X2NvbmZpZ3VyYXRpb24oKSwKKyAgICAgICAgICAgICAgICBjb21taXRzPW9iai5jb21taXRzLAor
ICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0cz1kaWN0KAorICAgICAgICAgICAgICAgICAgICBk
ZXRhaWxzPWRldGFpbHMsCisgICAgICAgICAgICAgICAgICAgIHJ1bl9zdGF0cz1vYmoucnVuX3N0
YXRzIG9yIG9iai5jcmVhdGVfcnVuX3N0YXRzKCksCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dHM9cmVzdWx0cywKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgKQorICAgICAgICAg
ICAgaWYgb2JqLnRpbWVzdGFtcDoKKyAgICAgICAgICAgICAgICByZXN1bHRbJ3RpbWVzdGFtcCdd
ID0gb2JqLnRpbWVzdGFtcAorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBjcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgIHBsYXRm
b3JtPU5vbmUsCisgICAgICAgICAgICBpc19zaW11bGF0b3I9RmFsc2UsCisgICAgICAgICAgICB2
ZXJzaW9uPU5vbmUsCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9Tm9uZSwKKyAgICAgICAgICAg
IHZlcnNpb25fbmFtZT1Ob25lLAorICAgICAgICAgICAgbW9kZWw9Tm9uZSwKKyAgICAgICAgICAg
IHN0eWxlPU5vbmUsICAgIyBEZWJ1Zy9Qcm9kdWN0aW9uL1JlbGVhc2UKKyAgICAgICAgICAgIGZs
YXZvcj1Ob25lLCAgIyBEdW1waW5nIGdyb3VuZCBzdWl0ZS13aWRlIGNvbmZpZ3VyYXRpb24gY2hh
bmdlcyAoaWUsIEd1YXJkTWFsbG9jKQorICAgICAgICAgICAgc2RrPU5vbmUsCisgICAgICAgICk6
CisKKyAgICAgICAgIyBUaGlzIGRldmlhdGVzIHNsaWdodGx5IGZyb20gdGhlIHJlc3Qgb2Ygd2Vi
a2l0cHksIGJ1dCBpdCBhbGxvd3MgdGhpcyBmaWxlIHRvIGJlIGVudGlyZWx5IHBvcnRhYmxlLgor
ICAgICAgICBjb25maWcgPSBkaWN0KAorICAgICAgICAgICAgcGxhdGZvcm09cGxhdGZvcm0gb3Ig
KGhvc3RfcGxhdGZvcm0uc3lzdGVtKCkgaWYgaG9zdF9wbGF0Zm9ybS5zeXN0ZW0oKSAhPSAnRGFy
d2luJyBlbHNlICdtYWMnKS5sb3dlcigpLAorICAgICAgICAgICAgaXNfc2ltdWxhdG9yPWlzX3Np
bXVsYXRvciwKKyAgICAgICAgICAgIHZlcnNpb249dmVyc2lvbiBvciAoaG9zdF9wbGF0Zm9ybS5y
ZWxlYXNlKCkgaWYgaG9zdF9wbGF0Zm9ybS5zeXN0ZW0oKSAhPSAnRGFyd2luJyBlbHNlIGhvc3Rf
cGxhdGZvcm0ubWFjX3ZlcigpWzBdKSwKKyAgICAgICAgICAgIGFyY2hpdGVjdHVyZT1hcmNoaXRl
Y3R1cmUgb3IgaG9zdF9wbGF0Zm9ybS5tYWNoaW5lKCksCisgICAgICAgICkKKyAgICAgICAgb3B0
aW9uYWxfZGF0YSA9IGRpY3QodmVyc2lvbl9uYW1lPXZlcnNpb25fbmFtZSwgbW9kZWw9bW9kZWws
IHN0eWxlPXN0eWxlLCBmbGF2b3I9Zmxhdm9yLCBzZGs9c2RrKQorICAgICAgICBjb25maWcudXBk
YXRlKHtrZXk6IHZhbHVlIGZvciBrZXksIHZhbHVlIGluIG9wdGlvbmFsX2RhdGEuaXRlcml0ZW1z
KCkgaWYgdmFsdWUgaXMgbm90IE5vbmV9KQorICAgICAgICByZXR1cm4gY29uZmlnCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgc3VpdGU9Tm9uZSwgY29uZmlndXJhdGlvbj1Ob25lLCBjb21taXRz
PVtdLCB0aW1lc3RhbXA9Tm9uZSwgZGV0YWlscz1Ob25lLCBydW5fc3RhdHM9Tm9uZSwgcmVzdWx0
cz17fSk6CisgICAgICAgIHNlbGYuc3VpdGUgPSBzdWl0ZQorICAgICAgICBzZWxmLmNvbmZpZ3Vy
YXRpb24gPSBjb25maWd1cmF0aW9uCisgICAgICAgIHNlbGYuY29tbWl0cyA9IGNvbW1pdHMKKyAg
ICAgICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAKKyAgICAgICAgc2VsZi5kZXRhaWxzID0g
ZGV0YWlscworICAgICAgICBzZWxmLnJ1bl9zdGF0cyA9IHJ1bl9zdGF0cworICAgICAgICBzZWxm
LnJlc3VsdHMgPSByZXN1bHRzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9j
b21taXQocmVwb3NpdG9yeV9pZCwgaWQsIGJyYW5jaD1Ob25lKToKKyAgICAgICAgY29tbWl0ID0g
ZGljdChyZXBvc2l0b3J5X2lkPXJlcG9zaXRvcnlfaWQsIGlkPWlkKQorICAgICAgICBpZiBicmFu
Y2g6CisgICAgICAgICAgICBjb21taXRbJ2JyYW5jaCddID0gYnJhbmNoCisgICAgICAgIHJldHVy
biBjb21taXQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2RldGFpbHMobGlu
az1Ob25lLCBvcHRpb25zPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgq
Kmt3YXJncykKKyAgICAgICAgaWYgbGluazoKKyAgICAgICAgICAgIHJlc3VsdFsnbGluayddID0g
bGluaworICAgICAgICBpZiBub3Qgb3B0aW9uczoKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQK
KworICAgICAgICBmb3IgZWxlbWVudCBpbiBVcGxvYWQuQlVJTERCT1RfREVUQUlMUzoKKyAgICAg
ICAgICAgIHZhbHVlID0gZ2V0YXR0cihvcHRpb25zLCBlbGVtZW50LnJlcGxhY2UoJy0nLCAnXycp
LCBOb25lKQorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAg
ICAgcmVzdWx0W2VsZW1lbnRdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfcnVuX3N0YXRzKHN0YXJ0X3RpbWU9Tm9uZSwg
ZW5kX3RpbWU9Tm9uZSwgdGVzdHNfc2tpcHBlZD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHN0
YXRzID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgb3B0aW9uYWxfZGF0YSA9IGRpY3Qoc3RhcnRf
dGltZT1zdGFydF90aW1lLCBlbmRfdGltZT1lbmRfdGltZSwgdGVzdHNfc2tpcHBlZD10ZXN0c19z
a2lwcGVkKQorICAgICAgICBzdGF0cy51cGRhdGUoe2tleTogdmFsdWUgZm9yIGtleSwgdmFsdWUg
aW4gb3B0aW9uYWxfZGF0YS5pdGVyaXRlbXMoKSBpZiB2YWx1ZSBpcyBub3QgTm9uZX0pCisgICAg
ICAgIHJldHVybiBzdGF0cworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfdGVz
dF9yZXN1bHQoZXhwZWN0ZWQ9Tm9uZSwgYWN0dWFsPU5vbmUsIGxvZz1Ob25lLCAqKmt3YXJncyk6
CisgICAgICAgIHJlc3VsdCA9IGRpY3QoKiprd2FyZ3MpCisKKyAgICAgICAgIyBUZXN0cyB3aGlj
aCBkb24ndCBkZWNsYXJlIGV4cGVjdGF0aW9ucyBvciByZXN1bHRzIGFyZSBhc3N1bWVkIHRvIGhh
dmUgcGFzc2VkLgorICAgICAgICBvcHRpb25hbF9kYXRhID0gZGljdChleHBlY3RlZD1leHBlY3Rl
ZCwgYWN0dWFsPWFjdHVhbCwgbG9nPWxvZykKKyAgICAgICAgcmVzdWx0LnVwZGF0ZSh7a2V5OiB2
YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBvcHRpb25hbF9kYXRhLml0ZXJpdGVtcygpIGlmIHZhbHVl
IGlzIG5vdCBOb25lfSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHVwbG9hZChz
ZWxmLCB1cmwsIGxvZ19saW5lX2Z1bmM9bGFtYmRhIHZhbDogc3lzLnN0ZG91dC53cml0ZSh2YWwg
KyAnXG4nKSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMu
cG9zdCh1cmwgKyBzZWxmLlVQTE9BRF9FTkRQT0lOVCwgZGF0YT1qc29uLmR1bXBzKHNlbGYsIGNs
cz1VcGxvYWQuRW5jb2RlcikpCisgICAgICAgIGV4Y2VwdCByZXF1ZXN0cy5leGNlcHRpb25zLkNv
bm5lY3Rpb25FcnJvcjoKKyAgICAgICAgICAgIGxvZ19saW5lX2Z1bmMoJyAnICogNCArICdGYWls
ZWQgdG8gdXBsb2FkIHRvIHt9LCByZXN1bHRzIHNlcnZlciBub3Qgb25saW5lJy5mb3JtYXQodXJs
KSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBh
cyBlOgorICAgICAgICAgICAgbG9nX2xpbmVfZnVuYygnICcgKiA0ICsgJ0ZhaWxlZCB0byBlbmNv
ZGUgdXBsb2FkIGRhdGE6IHt9Jy5mb3JtYXQoZSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICBs
b2dfbGluZV9mdW5jKCcgJyAqIDQgKyAnRXJyb3IgdXBsb2FkaW5nIHRvIHt9OicuZm9ybWF0KHVy
bCkpCisgICAgICAgICAgICBsb2dfbGluZV9mdW5jKCcgJyAqIDggKyByZXNwb25zZS5qc29uKClb
J2Rlc2NyaXB0aW9uJ10pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBsb2df
bGluZV9mdW5jKCcgJyAqIDQgKyAnVXBsb2FkZWQgcmVzdWx0cyB0byB7fScuZm9ybWF0KHVybCkp
CisgICAgICAgIHJldHVybiBUcnVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3Vs
dHMvdXBsb2FkX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcmVzdWx0cy91cGxvYWRfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIxNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CitpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnJlcXVlc3RzCisKK2lt
cG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGpzb24KK2ltcG9ydCByZXF1ZXN0cworaW1wb3J0IHRp
bWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LnJlc3VsdHMudXBsb2FkIGltcG9y
dCBVcGxvYWQKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eSBpbXBvcnQgbW9jaworCisKK2NsYXNz
IFVwbG9hZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgT3B0aW9ucyhvYmpl
Y3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAgICAg
Zm9yIGtleSwgdmFsdWUgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNl
dGF0dHIoc2VsZiwga2V5LCB2YWx1ZSkKKworICAgIGNsYXNzIE1vY2tSZXNwb25zZShvYmplY3Qp
OgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzX2NvZGU9MjAwLCB0ZXh0PScnKToK
KyAgICAgICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSBzdGF0dXNfY29kZQorICAgICAgICAgICAg
c2VsZi50ZXh0ID0gdGV4dAorCisgICAgICAgIGRlZiBqc29uKHNlbGYpOgorICAgICAgICAgICAg
cmV0dXJuIGpzb24ubG9hZHMoc2VsZi50ZXh0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBub3JtYWxpemUoZGF0YSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgYmFzZXN0cmlu
Zyk6CisgICAgICAgICAgICByZXR1cm4gc3RyKGRhdGEpCisgICAgICAgIGVsaWYgaXNpbnN0YW5j
ZShkYXRhLCBjb2xsZWN0aW9ucy5NYXBwaW5nKToKKyAgICAgICAgICAgIHJldHVybiBkaWN0KG1h
cChVcGxvYWRUZXN0Lm5vcm1hbGl6ZSwgZGF0YS5pdGVyaXRlbXMoKSkpCisgICAgICAgIGVsaWYg
aXNpbnN0YW5jZShkYXRhLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1
cm4gdHlwZShkYXRhKShtYXAoVXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEpKQorICAgICAgICBy
ZXR1cm4gZGF0YQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiByYWlzZV9yZXF1ZXN0c19D
b25uZWN0aW9uRXJyb3IoKToKKyAgICAgICAgcmFpc2UgcmVxdWVzdHMuZXhjZXB0aW9ucy5Db25u
ZWN0aW9uRXJyb3IoKQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHN0
YXJ0X3RpbWUsIGVuZF90aW1lID0gdGltZS50aW1lKCkgLSAzLCB0aW1lLnRpbWUoKQorICAgICAg
ICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAor
ICAgICAgICAgICAgY29uZmlndXJhdGlvbj1VcGxvYWQuY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisg
ICAgICAgICAgICAgICAgcGxhdGZvcm09J21hYycsCisgICAgICAgICAgICAgICAgdmVyc2lvbj0n
MTAuMTMuMCcsCisgICAgICAgICAgICAgICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJyYScsCisg
ICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPSd4ODZfNjQnLAorICAgICAgICAgICAgICAgIHNk
az0nMTdBNDA1JywKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5j
cmVhdGVfZGV0YWlscyhsaW5rPSdodHRwczovL3dlYmtpdC5vcmcnKSwKKyAgICAgICAgICAgIGNv
bW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlf
aWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJy
YW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICAgICBydW5fc3RhdHM9VXBs
b2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisgICAgICAgICAgICAgICAgc3RhcnRfdGltZT1zdGFydF90
aW1lLAorICAgICAgICAgICAgICAgIGVuZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgICAg
IHRlc3RzX3NraXBwZWQ9MCwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICByZXN1bHRzPXsK
KyAgICAgICAgICAgICAgICAnd2Via2l0cHkudGVzdDEnOiB7fSwKKyAgICAgICAgICAgICAgICAn
d2Via2l0cHkudGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9h
ZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisg
ICAgICAgICAgICB9LAorICAgICAgICApCisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2VsZi5u
b3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVy
KSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndmVyc2lvbidd
LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0WydzdWl0ZSddLCAn
d2Via2l0cHktdGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0
Wydjb25maWd1cmF0aW9uJ10sIHNlbGYubm9ybWFsaXplKGRpY3QoCisgICAgICAgICAgICBwbGF0
Zm9ybT0nbWFjJywKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1GYWxzZSwKKyAgICAgICAgICAg
IHZlcnNpb249JzEwLjEzLjAnLAorICAgICAgICAgICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJy
YScsCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9J3g4Nl82NCcsCisgICAgICAgICAgICBzZGs9
JzE3QTQwNScsCisgICAgICAgICkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRl
ZF9kaWN0Wydjb21taXRzJ10sIFtkaWN0KAorICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Vi
a2l0JywKKyAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAor
ICAgICAgICApXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVz
dF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwgc2VsZi5ub3JtYWxpemUoZGljdChsaW5rPSdodHRwczov
L3dlYmtpdC5vcmcnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3Rb
J3Rlc3RfcmVzdWx0cyddWydydW5fc3RhdHMnXSwgc2VsZi5ub3JtYWxpemUoZGljdCgKKyAgICAg
ICAgICAgIHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgIGVuZF90aW1lPWVuZF90
aW1lLAorICAgICAgICAgICAgdGVzdHNfc2tpcHBlZD0wLAorICAgICAgICApKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMn
XSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisg
ICAgICAgICAgICAnd2Via2l0cHkudGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGV4
cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlv
bnMuRkFJTCksCisgICAgICAgIH0pKQorCisgICAgZGVmIHRlc3RfdXBsb2FkKHNlbGYpOgorICAg
ICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMn
LAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAg
ICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisg
ICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAg
KQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEg
dXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNwb25zZSgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5l
X2Z1bmM9bGFtYmRhIF86IE5vbmUpKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVz
dHMucG9zdCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLnJhaXNlX3JlcXVlc3RzX0Nvbm5l
Y3Rpb25FcnJvcigpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodXBsb2FkLnVwbG9h
ZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMnLCBsb2dfbGluZV9mdW5jPWxhbWJkYSBfOiBO
b25lKSkKKworICAgICAgICBtb2NrXzQwNCA9IG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBu
ZXc9bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoCisgICAgICAgICAgICBzdGF0
dXNfY29kZT00MDQsCisgICAgICAgICAgICB0ZXh0PWpzb24uZHVtcHMoZGljdChkZXNjcmlwdGlv
bj0nTm8gc3VjaCBhZGRyZXNzJykpLAorICAgICAgICApKQorICAgICAgICB3aXRoIG1vY2tfNDA0
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dl
YmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lX2Z1bmM9bGFtYmRhIF86IE5vbmUpKQorCisgICAg
ZGVmIHRlc3RfcGFja2VkX3Rlc3Qoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAg
ICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb21taXRzPVtV
cGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJr
aXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3Ry
dW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgcmVzdWx0cz17CisgICAgICAgICAg
ICAgICAgJ2RpcjEvc3ViLWRpcjEvdGVzdDEnOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFj
dHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICAgICAgICAgICdkaXIxL3N1
Yi1kaXIxL3Rlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4
cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMi90ZXN0
Myc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIxL3N1Yi1kaXIyL3Rlc3Q0Jzoge30sCisgICAg
ICAgICAgICAgICAgJ2RpcjIvc3ViLWRpcjMvdGVzdDUnOiB7fSwKKyAgICAgICAgICAgICAgICAn
ZGlyMi90ZXN0Nic6IHt9LAorICAgICAgICAgICAgfQorICAgICAgICApCisgICAgICAgIGdlbmVy
YXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwg
Y2xzPVVwbG9hZC5FbmNvZGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVk
X2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydyZXN1bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAg
ICAgICAgICdkaXIxJzogeworICAgICAgICAgICAgICAgICdzdWItZGlyMSc6IHsKKyAgICAgICAg
ICAgICAgICAgICAgJ3Rlc3QxJzogeydhY3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLkZBSUx9
LAorICAgICAgICAgICAgICAgICAgICAndGVzdDInOiB7J2FjdHVhbCc6IFVwbG9hZC5FeHBlY3Rh
dGlvbnMuVElNRU9VVH0sCisgICAgICAgICAgICAgICAgfSwgJ3N1Yi1kaXIyJzogeworICAgICAg
ICAgICAgICAgICAgICAndGVzdDMnOiB7fSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3Q0Jzog
e30sCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgJ2RpcjInOiB7CisgICAgICAg
ICAgICAgICAgJ3N1Yi1kaXIzJzogeyd0ZXN0NSc6IHt9fSwKKyAgICAgICAgICAgICAgICAndGVz
dDYnOiB7fSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0pKQorCisgICAgZGVmIHRlc3Rfbm9f
c3VpdGUoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIGNvbW1p
dHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9
J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5j
aD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICkKKyAgICAgICAgd2l0aCBzZWxm
LmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBsb2Fk
LCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICBkZWYgdGVzdF9ub19jb21taXRzKHNlbGYpOgor
ICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVz
dHMnLAorICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
cik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQor
CisgICAgZGVmIHRlc3RfYnVpbGRib3Qoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgK
KyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb21taXRz
PVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3
ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9
J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgZGV0YWlscz1VcGxvYWQuY3Jl
YXRlX2RldGFpbHMob3B0aW9ucz1zZWxmLk9wdGlvbnMoCisgICAgICAgICAgICAgICAgYnVpbGRi
b3RfbWFzdGVyPSd3ZWJraXQub3JnJywKKyAgICAgICAgICAgICAgICBidWlsZGVyX25hbWU9J1F1
ZXVlLTEnLAorICAgICAgICAgICAgICAgIGJ1aWxkX251bWJlcj0xLAorICAgICAgICApKSkKKyAg
ICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpz
b24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICAgICAgdXBsb2FkLmRl
dGFpbHNbJ2J1aWxkYm90LXdvcmtlciddID0gJ2JvdDEyMycKKyAgICAgICAgZ2VuZXJhdGVkX2Rp
Y3QgPSBzZWxmLm5vcm1hbGl6ZShqc29uLmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBs
b2FkLkVuY29kZXIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsn
dGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAg
J2J1aWxkYm90LW1hc3Rlcic6ICd3ZWJraXQub3JnJywKKyAgICAgICAgICAgICdidWlsZGVyLW5h
bWUnOiAnUXVldWUtMScsCisgICAgICAgICAgICAnYnVpbGQtbnVtYmVyJzogMSwKKyAgICAgICAg
ICAgICdidWlsZGJvdC13b3JrZXInOiAnYm90MTIzJywKKyAgICAgICAgfSkpCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkJKHJl
dmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0
L3NjbS9naXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw2ICsyOTAsMTQgQEAgY2xhc3MgR2l0
KFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVmIG5hdGl2ZV9yZXZpc2lvbihzZWxmLCBwYXRo
KToKICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWyctQycsIHNlbGYuZmluZF9jaGVja291
dF9yb290KHBhdGgpLCAnbG9nJywgJy0xJywgJy0tcHJldHR5PWZvcm1hdDolSCddKQogCisgICAg
ZGVmIG5hdGl2ZV9icmFuY2goc2VsZiwgcGF0aCk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1
bl9naXQoWyctQycsIHNlbGYuZmluZF9jaGVja291dF9yb290KHBhdGgpLCAncmV2LXBhcnNlJywg
Jy0tYWJicmV2LXJlZicsICdIRUFEJ10pLnJzdHJpcCgpCisKKyAgICAgICAgIyBGb3IgZ2l0LXN2
bgorICAgICAgICBpZiByZXN1bHQuc3RhcnRzd2l0aCgnaGVhZHMnKToKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHRbNjpdCisgICAgICAgIHJldHVybiByZXN1bHQKKwogICAgIGRlZiBzdm5fdXJs
KHNlbGYpOgogICAgICAgICBnaXRfY29tbWFuZCA9IFsnc3ZuJywgJ2luZm8nXQogICAgICAgICBz
dGF0dXMgPSBzZWxmLl9ydW5fZ2l0KGdpdF9jb21tYW5kKQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weQkocmV2
aXNpb24gMjQzMDA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
c2NtL3NjbV9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw5IEBAIGNsYXNzIE1v
Y2tTQ00ob2JqZWN0KToKICAgICBkZWYgbmF0aXZlX3JldmlzaW9uKHNlbGYsIHBhdGgpOgogICAg
ICAgICByZXR1cm4gc2VsZi5zdm5fcmV2aXNpb24ocGF0aCkKIAorICAgIGRlZiBuYXRpdmVfYnJh
bmNoKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gJ3RydW5rJworCiAgICAgZGVmIHRpbWVz
dGFtcF9vZl9yZXZpc2lvbihzZWxmLCBwYXRoLCByZXZpc2lvbik6CiAgICAgICAgIHJldHVybiAn
MjAxMy0wMi0wMSAwODo0ODowNSArMDAwMCcKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiAyNDMwMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291
dC9zY20vc2NtX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC05MDksNiArOTA5LDkgQEAg
RU5ECiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20uaGVhZF9zdm5fcmV2aXNpb24o
KSwgc2VsZi5zY20ubmF0aXZlX3JldmlzaW9uKCcuJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5zY20ubmF0aXZlX3JldmlzaW9uKCcuJyksICc1JykKIAorICAgIGRlZiB0ZXN0X25h
dGl2ZV9icmFuY2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20ubmF0
aXZlX2JyYW5jaCgnLicpLCAndHJ1bmsnKQorCiAgICAgZGVmIHRlc3RfcHJvcHNldF9wcm9wZ2V0
KHNlbGYpOgogICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnN2bl9jaGVja291
dF9wYXRoLCAidGVzdF9maWxlIikKICAgICAgICAgZXhwZWN0ZWRfbWltZV90eXBlID0gIngtYXBw
bGljYXRpb24vZm9vLWJhciIKQEAgLTExMTIsNiArMTExNSwxMCBAQCBjbGFzcyBHaXRUZXN0KFND
TVRlc3QpOgogICAgICAgICBjb21tYW5kID0gWydnaXQnLCAnLUMnLCBzY20uY2hlY2tvdXRfcm9v
dCwgJ3Jldi1wYXJzZScsICdIRUFEJ10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY20ubmF0
aXZlX3JldmlzaW9uKHNjbS5jaGVja291dF9yb290KSwgcnVuX2NvbW1hbmQoY29tbWFuZCkuc3Ry
aXAoKSkKIAorICAgIGRlZiB0ZXN0X25hdGl2ZV9icmFuY2goc2VsZik6CisgICAgICAgIHNjbSA9
IHNlbGYudHJhY2tpbmdfc2NtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ21hc3RlcicsIHNj
bS5uYXRpdmVfYnJhbmNoKHNjbS5jaGVja291dF9yb290KSkKKwogICAgIGRlZiB0ZXN0X3JlbmFt
ZV9maWxlcyhzZWxmKToKICAgICAgICAgc2NtID0gc2VsZi50cmFja2luZ19zY20KIApAQCAtMTYy
Nyw2ICsxNjM0LDkgQEAgY2xhc3MgR2l0U1ZOVGVzdChTQ01UZXN0KToKICAgICAgICAgY29tbWFu
ZCA9IFsnZ2l0JywgJy1DJywgc2VsZi5naXRfY2hlY2tvdXRfcGF0aCwgJ3Jldi1wYXJzZScsICdI
RUFEJ10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24o
c2VsZi5naXRfY2hlY2tvdXRfcGF0aCksIHJ1bl9jb21tYW5kKGNvbW1hbmQpLnN0cmlwKCkpCiAK
KyAgICBkZWYgdGVzdF9uYXRpdmVfYnJhbmNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCd0cnVuaycsIHNlbGYuc2NtLm5hdGl2ZV9icmFuY2goc2VsZi5naXRfY2hlY2tvdXRfcGF0
aCkpCisKICAgICBkZWYgdGVzdF90b19vYmplY3RfbmFtZShzZWxmKToKICAgICAgICAgcmVscGF0
aCA9ICd0ZXN0X2ZpbGVfY29tbWl0MScKICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLnJlYWxw
YXRoKG9zLnBhdGguam9pbihzZWxmLmdpdF9jaGVja291dF9wYXRoLCByZWxwYXRoKSkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5w
eQkocmV2aXNpb24gMjQzMDA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3N2bi5weQkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBjbGFzcyBT
Vk4oU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICAgICAgU0NNLl9faW5pdF9fKHNlbGYsIGN3ZCwg
Kiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX2JvZ3VzX2RpciA9IE5vbmUKICAgICAgICAgaWYgcGF0
Y2hfZGlyZWN0b3JpZXMgPT0gW106Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24obWVzc2Fn
ZT0nRW1wdHkgbGlzdCBvZiBwYXRjaCBkaXJlY3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5pdF9f
JykKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRW1wdHkgbGlzdCBvZiBwYXRjaCBkaXJl
Y3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5pdF9fJykKICAgICAgICAgZWxpZiBwYXRjaF9kaXJl
Y3RvcmllcyA9PSBOb25lOgogICAgICAgICAgICAgc2VsZi5fcGF0Y2hfZGlyZWN0b3JpZXMgPSBb
c2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRoKGN3ZCwgc2VsZi5jaGVja291dF9yb290KV0KICAgICAg
ICAgZWxzZToKQEAgLTI3OCw2ICsyNzgsMTQgQEAgY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3NpdG9y
eSk6CiAgICAgZGVmIG5hdGl2ZV9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJu
IHNlbGYuc3ZuX3JldmlzaW9uKHBhdGgpCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBw
YXRoKToKKyAgICAgICAgcmVsYXRpdmVfdXJsID0gc2VsZi52YWx1ZV9mcm9tX3N2bl9pbmZvKHBh
dGgsICdSZWxhdGl2ZSBVUkwnKVsyOl0KKyAgICAgICAgaWYgcmVsYXRpdmVfdXJsLnN0YXJ0c3dp
dGgoJ3RydW5rJyk6CisgICAgICAgICAgICByZXR1cm4gJ3RydW5rJworICAgICAgICBlbGlmIHJl
bGF0aXZlX3VybC5zdGFydHN3aXRoKCdicmFuY2gnKToKKyAgICAgICAgICAgIHJldHVybiByZWxh
dGl2ZV91cmwuc3BsaXQoJy8nKVsxXQorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3t9IGlzIG5v
dCBhIGJyYW5jaCcuZm9ybWF0KHJlbGF0aXZlX3VybC5zcGxpdCgnLycpWzBdKSkKKwogICAgIGRl
ZiB0aW1lc3RhbXBfb2ZfcmV2aXNpb24oc2VsZiwgcGF0aCwgcmV2aXNpb24pOgogICAgICAgICAj
IFdlIHVzZSAtLXhtbCB0byBnZXQgdGltZXN0YW1wcyBsaWtlIDIwMTMtMDItMDhUMDg6MTg6MDQu
OTY0NDA5WgogICAgICAgICByZXBvc2l0b3J5X3Jvb3QgPSBzZWxmLnZhbHVlX2Zyb21fc3ZuX2lu
Zm8oc2VsZi5jaGVja291dF9yb290LCAnUmVwb3NpdG9yeSBSb290JykKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQko
cmV2aXNpb24gMjQzMDA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3BsYXRmb3JtaW5mby5weQkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0NiwxMSBAQCBjbGFz
cyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcmV0
dXJuIHN5cy5tYXhpbnQKIAorICAgIGRlZiBidWlsZF92ZXJzaW9uKHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLmlzX21hYygpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5f
Y29tbWFuZChbJy91c3IvYmluL3N3X3ZlcnMnLCAnLWJ1aWxkVmVyc2lvbiddLCByZXR1cm5fc3Rk
ZXJyPUZhbHNlLCBpZ25vcmVfZXJyb3JzPVRydWUpLnJzdHJpcCgpCisgICAgICAgIHJldHVybiBO
b25lCisKICAgICBkZWYgeGNvZGVfc2RrX3ZlcnNpb24oc2VsZiwgc2RrX25hbWUpOgogICAgICAg
ICBpZiBzZWxmLmlzX21hYygpOgogICAgICAgICAgICAgIyBBc3N1bWVzIHRoYXQgeGNydW4gZG9l
cyBub3Qgd3JpdGUgdG8gc3RhbmRhcmQgb3V0cHV0IG9uIGZhaWx1cmUgKGUuZy4gU0RLIGRvZXMg
bm90IGV4aXN0KS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm9fbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHJldmlzaW9uIDI0MzAwOCkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eQkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi52
ZXJzaW9uX25hbWVfbWFwIGltCiAKIAogY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3QpOgot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPVZlcnNpb24u
ZnJvbV9uYW1lKCdTbm93IExlb3BhcmQnKSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9zX25h
bWU9J21hYycsIG9zX3ZlcnNpb249VmVyc2lvbi5mcm9tX25hbWUoJ0hpZ2ggU2llcnJhJykpOgog
ICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvc192ZXJzaW9uLCBWZXJzaW9uKQogICAgICAgICBz
ZWxmLm9zX25hbWUgPSBvc19uYW1lCiAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IG9zX3ZlcnNp
b24KQEAgLTc4LDYgKzc4LDExIEBAIGNsYXNzIE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAg
ICBkZWYgdGVybWluYWxfd2lkdGgoc2VsZik6CiAgICAgICAgIHJldHVybiA4MAogCisgICAgZGVm
IGJ1aWxkX3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CisgICAgICAg
ICAgICByZXR1cm4gJzE3QTQwNScKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiB4Y29k
ZV9zZGtfdmVyc2lvbihzZWxmLCBzZGtfbmFtZSk6CiAgICAgICAgIHJldHVybiBWZXJzaW9uKDgs
IDEpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5pdF9f
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhv
biB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCisjIEtlZXAgdGhp
cyBmaWxlIGZyZWUgb2YgYW55IGNvZGUgb3IgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBjb3VsZAor
IyBjYXVzZSBlaXRoZXIgYW4gZXJyb3IgdG8gb2NjdXIgb3IgYSBsb2cgbWVzc2FnZSB0byBiZSBs
b2dnZWQuCisjIFRoaXMgZW5zdXJlcyB0aGF0IGNhbGxpbmcgY29kZSBjYW4gaW1wb3J0IGluaXRp
YWxpemF0aW9uIGNvZGUgZnJvbQorIyB3ZWJraXRweSBiZWZvcmUgYW55IGVycm9ycyBvciBsb2cg
bWVzc2FnZXMgZHVlIHRvIGNvZGUgaW4gdGhpcyBmaWxlLgorIyBJbml0aWFsaXphdGlvbiBjb2Rl
IGNhbiBpbmNsdWRlIHRoaW5ncyBsaWtlIHZlcnNpb24tY2hlY2tpbmcgY29kZSBhbmQKKyMgbG9n
Z2luZyBjb25maWd1cmF0aW9uIGNvZGUuCisjCisjIFdlIGRvIG5vdCBleGVjdXRlIGFueSB2ZXJz
aW9uLWNoZWNraW5nIGNvZGUgb3IgbG9nZ2luZyBjb25maWd1cmF0aW9uCisjIGNvZGUgaW4gdGhp
cyBmaWxlIHNvIHRoYXQgY2FsbGVycyBjYW4gb3B0LWluIGFzIHRoZXkgd2FudC4gIFRoaXMgYWxz
bworIyBhbGxvd3MgZGlmZmVyZW50IGNhbGxlcnMgdG8gY2hvb3NlIGRpZmZlcmVudCBpbml0aWFs
aXphdGlvbiBjb2RlLAorIyBhcyBuZWNlc3NhcnkuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Jlc3VsdHMvb3B0aW9ucy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Jlc3VsdHMvb3B0aW9ucy5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBA
CisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
CisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcHRwYXJz
ZQorCisKK2RlZiB1cGxvYWRfb3B0aW9ucygpOgorICAgIHJldHVybiBbCisgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCctLXJlcG9ydCcsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0ncmVwb3J0
X3VybHMnLCBoZWxwPSdVUkwgKG9yIFVSTHMpIHRvIHJlcG9ydCB0ZXN0IHJlc3VsdHMgdG8nKSwK
KyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tYnVpbGRib3QtbWFzdGVyJywgaGVscD0n
VGhlIHVybCBvZiB0aGUgYnVpbGRib3QgbWFzdGVyLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLS1idWlsZGVyLW5hbWUnLCBoZWxwPSdUaGUgbmFtZSBvZiB0aGUgYnVpbGRib3Qg
YnVpbGRlciB0ZXN0cyB3ZXJlIHJ1biBvbi4nKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRp
b24oJy0tYnVpbGQtbnVtYmVyJywgaGVscD0nVGhlIGJ1aWxkYm90IGJ1aWxkIG51bWJlciB0ZXN0
cyBhcmUgYXNzb2NpYXRlZCB3aXRoLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1idWlsZGJvdC13b3JrZXInLCBoZWxwPSdUaGUgYnVpbGRib3Qgd29ya2VyIHRlc3RzIHdlcmUg
cnVuIG9uLicpLAorICAgIF0KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91
cGxvYWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3Vw
bG9hZC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMv
dXBsb2FkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg0IEBACisjIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisj
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1
dG9pbnN0YWxsZWQucmVxdWVzdHMKKworaW1wb3J0IGpzb24KK2ltcG9ydCByZXF1ZXN0cworaW1w
b3J0IHN5cworCitpbXBvcnQgcGxhdGZvcm0gYXMgaG9zdF9wbGF0Zm9ybQorCisKK2NsYXNzIFVw
bG9hZChvYmplY3QpOgorICAgIFVQTE9BRF9FTkRQT0lOVCA9ICcvYXBpL3VwbG9hZCcKKyAgICBC
VUlMREJPVF9ERVRBSUxTID0gWydidWlsZGJvdC1tYXN0ZXInLCAnYnVpbGRlci1uYW1lJywgJ2J1
aWxkLW51bWJlcicsICdidWlsZGJvdC13b3JrZXInXQorICAgIFZFUlNJT04gPSAwCisKKyAgICBj
bGFzcyBFeHBlY3RhdGlvbnM6CisgICAgICAgICMgVGhlc2UgYXJlIG9yZGVyZWQgYnkgcHJpb3Jp
dHksIG1lYW5pbmcgdGhhdCBhIHRlc3Qgd2hpY2ggYm90aCBjcmFzaGVzIGFuZCBoYXMKKyAgICAg
ICAgIyBhIHdhcm5pbmcgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gaGF2ZSBjcmFzaGVkLgorICAg
ICAgICBPUkRFUiA9IFsKKyAgICAgICAgICAgICdDUkFTSCcsCisgICAgICAgICAgICAnVElNRU9V
VCcsCisgICAgICAgICAgICAnSU1BR0UnLCAgICMgSW1hZ2UtZGlmZgorICAgICAgICAgICAgJ0FV
RElPJywgICAjIEF1ZGlvLWRpZmYKKyAgICAgICAgICAgICdURVhUJywgICAgIyBUZXh0LWRpZmYK
KyAgICAgICAgICAgICdGQUlMJywKKyAgICAgICAgICAgICdFUlJPUicsCisgICAgICAgICAgICAn
V0FSTklORycsCisgICAgICAgICAgICAnUEFTUycsCisgICAgICAgIF0KKyAgICAgICAgQ1JBU0gs
IFRJTUVPVVQsIElNQUdFLCBBVURJTywgVEVYVCwgRkFJTCwgRVJST1IsIFdBUk5JTkcsIFBBU1Mg
PSBPUkRFUgorCisgICAgY2xhc3MgRW5jb2Rlcihqc29uLkpTT05FbmNvZGVyKToKKworICAgICAg
ICBkZWYgZGVmYXVsdChzZWxmLCBvYmopOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
b2JqLCBVcGxvYWQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihVcGxvYWQuRW5jb2Rl
ciwgc2VsZikuZGVmYXVsdChvYmopCisKKyAgICAgICAgICAgIGlmIG5vdCBvYmouc3VpdGU6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm8gc3VpdGUgc3BlY2lmaWVkIHRvIHJl
c3VsdHMgdXBsb2FkJykKKyAgICAgICAgICAgIGlmIG5vdCBvYmouY29tbWl0czoKKyAgICAgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdObyBjb21taXRzIHNwZWNpZmllZCB0byByZXN1bHRz
IHVwbG9hZCcpCisKKyAgICAgICAgICAgIGRldGFpbHMgPSBvYmouZGV0YWlscyBvciBvYmouY3Jl
YXRlX2RldGFpbHMoKQorICAgICAgICAgICAgYnVpbGRib3RfYXJncyA9IFtkZXRhaWxzLmdldChh
cmcsIE5vbmUpIGlzIE5vbmUgZm9yIGFyZyBpbiBvYmouQlVJTERCT1RfREVUQUlMU10KKyAgICAg
ICAgICAgIGlmIGFueShidWlsZGJvdF9hcmdzKSBhbmQgbm90IGFsbChidWlsZGJvdF9hcmdzKToK
KyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBbGwgYnVpbGRib3QgZGV0YWlscyBt
dXN0IGJlIGRlZmluZWQgZm9yIHVwbG9hZCwgZGV0YWlscyBtaXNzaW5nOiB7fScuZm9ybWF0KCcs
ICcuam9pbigKKyAgICAgICAgICAgICAgICAgICAgW29iai5CVUlMREJPVF9ERVRBSUxTW2ldIGZv
ciBpIGluIHhyYW5nZShsZW4ob2JqLkJVSUxEQk9UX0RFVEFJTFMpKSBpZiBidWlsZGJvdF9hcmdz
W2ldXSwKKyAgICAgICAgICAgICAgICApKSkKKworICAgICAgICAgICAgZGVmIHVucGFja190ZXN0
KGN1cnJlbnQsIHBhdGhfdG9fdGVzdCwgZGF0YSk6CisgICAgICAgICAgICAgICAgaWYgbGVuKHBh
dGhfdG9fdGVzdCkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFtwYXRoX3RvX3Rl
c3RbMF1dID0gZGF0YQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAg
ICBpZiBub3QgY3VycmVudC5nZXQocGF0aF90b190ZXN0WzBdKToKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFtwYXRoX3RvX3Rlc3RbMF1dID0ge30KKyAgICAgICAgICAgICAgICB1bnBhY2tf
dGVzdChjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0sIHBhdGhfdG9fdGVzdFsxOl0sIGRhdGEpCisK
KyAgICAgICAgICAgIHJlc3VsdHMgPSB7fQorICAgICAgICAgICAgZm9yIHRlc3QsIGRhdGEgaW4g
b2JqLnJlc3VsdHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgdW5wYWNrX3Rlc3QocmVz
dWx0cywgdGVzdC5zcGxpdCgnLycpLCBkYXRhKQorCisgICAgICAgICAgICByZXN1bHQgPSBkaWN0
KAorICAgICAgICAgICAgICAgIHZlcnNpb249b2JqLlZFUlNJT04sCisgICAgICAgICAgICAgICAg
c3VpdGU9b2JqLnN1aXRlLAorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249b2JqLmNvbmZp
Z3VyYXRpb24gb3Igb2JqLmNyZWF0ZV9jb25maWd1cmF0aW9uKCksCisgICAgICAgICAgICAgICAg
Y29tbWl0cz1vYmouY29tbWl0cywKKyAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHM9ZGljdCgK
KyAgICAgICAgICAgICAgICAgICAgZGV0YWlscz1kZXRhaWxzLAorICAgICAgICAgICAgICAgICAg
ICBydW5fc3RhdHM9b2JqLnJ1bl9zdGF0cyBvciBvYmouY3JlYXRlX3J1bl9zdGF0cygpLAorICAg
ICAgICAgICAgICAgICAgICByZXN1bHRzPXJlc3VsdHMsCisgICAgICAgICAgICAgICAgKSwKKyAg
ICAgICAgICAgICkKKyAgICAgICAgICAgIGlmIG9iai50aW1lc3RhbXA6CisgICAgICAgICAgICAg
ICAgcmVzdWx0Wyd0aW1lc3RhbXAnXSA9IG9iai50aW1lc3RhbXAKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2NvbmZpZ3VyYXRp
b24oCisgICAgICAgICAgICBwbGF0Zm9ybT1Ob25lLAorICAgICAgICAgICAgaXNfc2ltdWxhdG9y
PUZhbHNlLAorICAgICAgICAgICAgdmVyc2lvbj1Ob25lLAorICAgICAgICAgICAgYXJjaGl0ZWN0
dXJlPU5vbmUsCisgICAgICAgICAgICB2ZXJzaW9uX25hbWU9Tm9uZSwKKyAgICAgICAgICAgIG1v
ZGVsPU5vbmUsCisgICAgICAgICAgICBzdHlsZT1Ob25lLCAgICMgRGVidWcvUHJvZHVjdGlvbi9S
ZWxlYXNlCisgICAgICAgICAgICBmbGF2b3I9Tm9uZSwgICMgRHVtcGluZyBncm91bmQgc3VpdGUt
d2lkZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgKGllLCBHdWFyZE1hbGxvYykKKyAgICAgICAgICAg
IHNkaz1Ob25lLAorICAgICAgICApOgorCisgICAgICAgICMgVGhpcyBkZXZpYXRlcyBzbGlnaHRs
eSBmcm9tIHRoZSByZXN0IG9mIHdlYmtpdHB5LCBidXQgaXQgYWxsb3dzIHRoaXMgZmlsZSB0byBi
ZSBlbnRpcmVseSBwb3J0YWJsZS4KKyAgICAgICAgY29uZmlnID0gZGljdCgKKyAgICAgICAgICAg
IHBsYXRmb3JtPXBsYXRmb3JtIG9yIChob3N0X3BsYXRmb3JtLnN5c3RlbSgpIGlmIGhvc3RfcGxh
dGZvcm0uc3lzdGVtKCkgIT0gJ0RhcndpbicgZWxzZSAnbWFjJykubG93ZXIoKSwKKyAgICAgICAg
ICAgIGlzX3NpbXVsYXRvcj1pc19zaW11bGF0b3IsCisgICAgICAgICAgICB2ZXJzaW9uPXZlcnNp
b24gb3IgKGhvc3RfcGxhdGZvcm0ucmVsZWFzZSgpIGlmIGhvc3RfcGxhdGZvcm0uc3lzdGVtKCkg
IT0gJ0RhcndpbicgZWxzZSBob3N0X3BsYXRmb3JtLm1hY192ZXIoKVswXSksCisgICAgICAgICAg
ICBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlIG9yIGhvc3RfcGxhdGZvcm0ubWFjaGluZSgpLAor
ICAgICAgICApCisgICAgICAgIG9wdGlvbmFsX2RhdGEgPSBkaWN0KHZlcnNpb25fbmFtZT12ZXJz
aW9uX25hbWUsIG1vZGVsPW1vZGVsLCBzdHlsZT1zdHlsZSwgZmxhdm9yPWZsYXZvciwgc2RrPXNk
aykKKyAgICAgICAgY29uZmlnLnVwZGF0ZSh7a2V5OiB2YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBv
cHRpb25hbF9kYXRhLml0ZXJpdGVtcygpIGlmIHZhbHVlIGlzIG5vdCBOb25lfSkKKyAgICAgICAg
cmV0dXJuIGNvbmZpZworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1aXRlPU5vbmUsIGNvbmZp
Z3VyYXRpb249Tm9uZSwgY29tbWl0cz1bXSwgdGltZXN0YW1wPU5vbmUsIGRldGFpbHM9Tm9uZSwg
cnVuX3N0YXRzPU5vbmUsIHJlc3VsdHM9e30pOgorICAgICAgICBzZWxmLnN1aXRlID0gc3VpdGUK
KyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbgorICAgICAgICBzZWxm
LmNvbW1pdHMgPSBjb21taXRzCisgICAgICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wCisg
ICAgICAgIHNlbGYuZGV0YWlscyA9IGRldGFpbHMKKyAgICAgICAgc2VsZi5ydW5fc3RhdHMgPSBy
dW5fc3RhdHMKKyAgICAgICAgc2VsZi5yZXN1bHRzID0gcmVzdWx0cworCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBjcmVhdGVfY29tbWl0KHJlcG9zaXRvcnlfaWQsIGlkLCBicmFuY2g9Tm9u
ZSk6CisgICAgICAgIGNvbW1pdCA9IGRpY3QocmVwb3NpdG9yeV9pZD1yZXBvc2l0b3J5X2lkLCBp
ZD1pZCkKKyAgICAgICAgaWYgYnJhbmNoOgorICAgICAgICAgICAgY29tbWl0WydicmFuY2gnXSA9
IGJyYW5jaAorICAgICAgICByZXR1cm4gY29tbWl0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIGNyZWF0ZV9kZXRhaWxzKGxpbms9Tm9uZSwgb3B0aW9ucz1Ob25lLCAqKmt3YXJncyk6Cisg
ICAgICAgIHJlc3VsdCA9IGRpY3QoKiprd2FyZ3MpCisgICAgICAgIGlmIGxpbms6CisgICAgICAg
ICAgICByZXN1bHRbJ2xpbmsnXSA9IGxpbmsKKyAgICAgICAgaWYgbm90IG9wdGlvbnM6CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gVXBsb2FkLkJV
SUxEQk9UX0RFVEFJTFM6CisgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob3B0aW9ucywgZWxl
bWVudC5yZXBsYWNlKCctJywgJ18nKSwgTm9uZSkKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdFtlbGVtZW50XSA9IHZhbHVlCisgICAgICAg
IHJldHVybiByZXN1bHQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX3J1bl9z
dGF0cyhzdGFydF90aW1lPU5vbmUsIGVuZF90aW1lPU5vbmUsIHRlc3RzX3NraXBwZWQ9Tm9uZSwg
Kiprd2FyZ3MpOgorICAgICAgICBzdGF0cyA9IGRpY3QoKiprd2FyZ3MpCisgICAgICAgIG9wdGlv
bmFsX2RhdGEgPSBkaWN0KHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwgZW5kX3RpbWU9ZW5kX3RpbWUs
IHRlc3RzX3NraXBwZWQ9dGVzdHNfc2tpcHBlZCkKKyAgICAgICAgc3RhdHMudXBkYXRlKHtrZXk6
IHZhbHVlIGZvciBrZXksIHZhbHVlIGluIG9wdGlvbmFsX2RhdGEuaXRlcml0ZW1zKCkgaWYgdmFs
dWUgaXMgbm90IE5vbmV9KQorICAgICAgICByZXR1cm4gc3RhdHMKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPU5vbmUsIGFjdHVhbD1Ob25l
LCBsb2c9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBkaWN0KCoqa3dhcmdzKQor
CisgICAgICAgICMgVGVzdHMgd2hpY2ggZG9uJ3QgZGVjbGFyZSBleHBlY3RhdGlvbnMgb3IgcmVz
dWx0cyBhcmUgYXNzdW1lZCB0byBoYXZlIHBhc3NlZC4KKyAgICAgICAgb3B0aW9uYWxfZGF0YSA9
IGRpY3QoZXhwZWN0ZWQ9ZXhwZWN0ZWQsIGFjdHVhbD1hY3R1YWwsIGxvZz1sb2cpCisgICAgICAg
IHJlc3VsdC51cGRhdGUoe2tleTogdmFsdWUgZm9yIGtleSwgdmFsdWUgaW4gb3B0aW9uYWxfZGF0
YS5pdGVyaXRlbXMoKSBpZiB2YWx1ZSBpcyBub3QgTm9uZX0pCisgICAgICAgIHJldHVybiByZXN1
bHQKKworICAgIGRlZiB1cGxvYWQoc2VsZiwgdXJsLCBsb2dfbGluZV9mdW5jPWxhbWJkYSB2YWw6
IHN5cy5zdGRvdXQud3JpdGUodmFsICsgJ1xuJykpOgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICByZXNwb25zZSA9IHJlcXVlc3RzLnBvc3QodXJsICsgc2VsZi5VUExPQURfRU5EUE9JTlQsIGRh
dGE9anNvbi5kdW1wcyhzZWxmLCBjbHM9VXBsb2FkLkVuY29kZXIpKQorICAgICAgICBleGNlcHQg
cmVxdWVzdHMuZXhjZXB0aW9ucy5Db25uZWN0aW9uRXJyb3I6CisgICAgICAgICAgICBsb2dfbGlu
ZV9mdW5jKCcgJyAqIDQgKyAnRmFpbGVkIHRvIHVwbG9hZCB0byB7fSwgcmVzdWx0cyBzZXJ2ZXIg
bm90IG9ubGluZScuZm9ybWF0KHVybCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGxvZ19saW5lX2Z1bmMoJyAn
ICogNCArICdGYWlsZWQgdG8gZW5jb2RlIHVwbG9hZCBkYXRhOiB7fScuZm9ybWF0KGUpKQorICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUg
IT0gMjAwOgorICAgICAgICAgICAgbG9nX2xpbmVfZnVuYygnICcgKiA0ICsgJ0Vycm9yIHVwbG9h
ZGluZyB0byB7fTonLmZvcm1hdCh1cmwpKQorICAgICAgICAgICAgbG9nX2xpbmVfZnVuYygnICcg
KiA4ICsgcmVzcG9uc2UuanNvbigpWydkZXNjcmlwdGlvbiddKQorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICAgICAgbG9nX2xpbmVfZnVuYygnICcgKiA0ICsgJ1VwbG9hZGVkIHJlc3Vs
dHMgdG8ge30nLmZvcm1hdCh1cmwpKQorICAgICAgICByZXR1cm4gVHJ1ZQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5CShub25l
eGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWRfdW5pdHRl
c3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTYgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2lu
c3RhbGxlZC5yZXF1ZXN0cworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBqc29uCitpbXBv
cnQgcmVxdWVzdHMKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRw
eS5yZXN1bHRzLnVwbG9hZCBpbXBvcnQgVXBsb2FkCitmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkg
aW1wb3J0IG1vY2sKKworCitjbGFzcyBVcGxvYWRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKwor
ICAgIGNsYXNzIE9wdGlvbnMob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICoq
a3dhcmdzKToKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGt3YXJncy5pdGVyaXRlbXMo
KToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleSwgdmFsdWUpCisKKyAgICBjbGFz
cyBNb2NrUmVzcG9uc2Uob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXR1
c19jb2RlPTIwMCwgdGV4dD0nJyk6CisgICAgICAgICAgICBzZWxmLnN0YXR1c19jb2RlID0gc3Rh
dHVzX2NvZGUKKyAgICAgICAgICAgIHNlbGYudGV4dCA9IHRleHQKKworICAgICAgICBkZWYganNv
bihzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHNlbGYudGV4dCkKKworICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbm9ybWFsaXplKGRhdGEpOgorICAgICAgICBpZiBpc2lu
c3RhbmNlKGRhdGEsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmV0dXJuIHN0cihkYXRhKQor
ICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YSwgY29sbGVjdGlvbnMuTWFwcGluZyk6CisgICAg
ICAgICAgICByZXR1cm4gZGljdChtYXAoVXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEuaXRlcml0
ZW1zKCkpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YSwgY29sbGVjdGlvbnMuSXRlcmFi
bGUpOgorICAgICAgICAgICAgcmV0dXJuIHR5cGUoZGF0YSkobWFwKFVwbG9hZFRlc3Qubm9ybWFs
aXplLCBkYXRhKSkKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgcmFpc2VfcmVxdWVzdHNfQ29ubmVjdGlvbkVycm9yKCk6CisgICAgICAgIHJhaXNlIHJl
cXVlc3RzLmV4Y2VwdGlvbnMuQ29ubmVjdGlvbkVycm9yKCkKKworICAgIGRlZiB0ZXN0X2VuY29k
aW5nKHNlbGYpOgorICAgICAgICBzdGFydF90aW1lLCBlbmRfdGltZSA9IHRpbWUudGltZSgpIC0g
MywgdGltZS50aW1lKCkKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAgc3Vp
dGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249VXBsb2FkLmNy
ZWF0ZV9jb25maWd1cmF0aW9uKAorICAgICAgICAgICAgICAgIHBsYXRmb3JtPSdtYWMnLAorICAg
ICAgICAgICAgICAgIHZlcnNpb249JzEwLjEzLjAnLAorICAgICAgICAgICAgICAgIHZlcnNpb25f
bmFtZT0nSGlnaCBTaWVycmEnLAorICAgICAgICAgICAgICAgIGFyY2hpdGVjdHVyZT0neDg2XzY0
JywKKyAgICAgICAgICAgICAgICBzZGs9JzE3QTQwNScsCisgICAgICAgICAgICApLAorICAgICAg
ICAgICAgZGV0YWlscz1VcGxvYWQuY3JlYXRlX2RldGFpbHMobGluaz0naHR0cHM6Ly93ZWJraXQu
b3JnJyksCisgICAgICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAg
ICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1
JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAg
ICAgICAgICAgcnVuX3N0YXRzPVVwbG9hZC5jcmVhdGVfcnVuX3N0YXRzKAorICAgICAgICAgICAg
ICAgIHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICBlbmRfdGltZT1lbmRf
dGltZSwKKyAgICAgICAgICAgICAgICB0ZXN0c19za2lwcGVkPTAsCisgICAgICAgICAgICApLAor
ICAgICAgICAgICAgcmVzdWx0cz17CisgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzog
e30sCisgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0
X3Jlc3VsdChleHBlY3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFjdHVhbD1VcGxvYWQu
RXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgKQorICAgICAgICBn
ZW5lcmF0ZWRfZGljdCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9hZHMoanNvbi5kdW1wcyh1cGxv
YWQsIGNscz1VcGxvYWQuRW5jb2RlcikpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2Vu
ZXJhdGVkX2RpY3RbJ3ZlcnNpb24nXSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5l
cmF0ZWRfZGljdFsnc3VpdGUnXSwgJ3dlYmtpdHB5LXRlc3RzJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChnZW5lcmF0ZWRfZGljdFsnY29uZmlndXJhdGlvbiddLCBzZWxmLm5vcm1hbGl6ZShk
aWN0KAorICAgICAgICAgICAgcGxhdGZvcm09J21hYycsCisgICAgICAgICAgICBpc19zaW11bGF0
b3I9RmFsc2UsCisgICAgICAgICAgICB2ZXJzaW9uPScxMC4xMy4wJywKKyAgICAgICAgICAgIHZl
cnNpb25fbmFtZT0nSGlnaCBTaWVycmEnLAorICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPSd4ODZf
NjQnLAorICAgICAgICAgICAgc2RrPScxN0E0MDUnLAorICAgICAgICApKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsnY29tbWl0cyddLCBbZGljdCgKKyAgICAgICAg
ICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAgICAgICAgICBpZD0nNScsCisgICAgICAg
ICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9ybWFs
aXplKGRpY3QobGluaz0naHR0cHM6Ly93ZWJraXQub3JnJykpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncnVuX3N0YXRzJ10sIHNlbGYu
bm9ybWFsaXplKGRpY3QoCisgICAgICAgICAgICBzdGFydF90aW1lPXN0YXJ0X3RpbWUsCisgICAg
ICAgICAgICBlbmRfdGltZT1lbmRfdGltZSwKKyAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9MCwK
KyAgICAgICAgKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rl
c3RfcmVzdWx0cyddWydyZXN1bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAgICAgICAgICd3
ZWJraXRweS50ZXN0MSc6IHt9LAorICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QyJzogVXBsb2Fk
LmNyZWF0ZV90ZXN0X3Jlc3VsdChleHBlY3RlZD1VcGxvYWQuRXhwZWN0YXRpb25zLlBBU1MsIGFj
dHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICB9KSkKKworICAgIGRlZiB0
ZXN0X3VwbG9hZChzZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAgICAg
c3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVh
dGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisgICAg
ICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAorICAg
ICAgICAgICAgKV0sCisgICAgICAgICkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3JlcXVl
c3RzLnBvc3QnLCBuZXc9bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoKSk6Cisg
ICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodXBsb2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQu
b3JnL3Jlc3VsdHMnLCBsb2dfbGluZV9mdW5jPWxhbWJkYSBfOiBOb25lKSkKKworICAgICAgICB3
aXRoIG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBuZXc9bGFtYmRhIHVybCwgZGF0YTogc2Vs
Zi5yYWlzZV9yZXF1ZXN0c19Db25uZWN0aW9uRXJyb3IoKSk6CisgICAgICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKHVwbG9hZC51cGxvYWQoJ2h0dHBzOi8vd2Via2l0Lm9yZy9yZXN1bHRzJywgbG9n
X2xpbmVfZnVuYz1sYW1iZGEgXzogTm9uZSkpCisKKyAgICAgICAgbW9ja180MDQgPSBtb2NrLnBh
dGNoKCdyZXF1ZXN0cy5wb3N0JywgbmV3PWxhbWJkYSB1cmwsIGRhdGE6IHNlbGYuTW9ja1Jlc3Bv
bnNlKAorICAgICAgICAgICAgc3RhdHVzX2NvZGU9NDA0LAorICAgICAgICAgICAgdGV4dD1qc29u
LmR1bXBzKGRpY3QoZGVzY3JpcHRpb249J05vIHN1Y2ggYWRkcmVzcycpKSwKKyAgICAgICAgKSkK
KyAgICAgICAgd2l0aCBtb2NrXzQwNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodXBs
b2FkLnVwbG9hZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMnLCBsb2dfbGluZV9mdW5jPWxh
bWJkYSBfOiBOb25lKSkKKworICAgIGRlZiB0ZXN0X3BhY2tlZF90ZXN0KHNlbGYpOgorICAgICAg
ICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAor
ICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAgICAg
ICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisgICAg
ICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAgICAg
IHJlc3VsdHM9eworICAgICAgICAgICAgICAgICdkaXIxL3N1Yi1kaXIxL3Rlc3QxJzogVXBsb2Fk
LmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9ucy5GQUlMKSwKKyAg
ICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMS90ZXN0Mic6IFVwbG9hZC5jcmVhdGVfdGVzdF9y
ZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuVElNRU9VVCksCisgICAgICAgICAgICAg
ICAgJ2RpcjEvc3ViLWRpcjIvdGVzdDMnOiB7fSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWIt
ZGlyMi90ZXN0NCc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIyL3N1Yi1kaXIzL3Rlc3Q1Jzog
e30sCisgICAgICAgICAgICAgICAgJ2RpcjIvdGVzdDYnOiB7fSwKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgKQorICAgICAgICBnZW5lcmF0ZWRfZGljdCA9IHNlbGYubm9ybWFsaXplKGpzb24ubG9h
ZHMoanNvbi5kdW1wcyh1cGxvYWQsIGNscz1VcGxvYWQuRW5jb2RlcikpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0Wyd0ZXN0X3Jlc3VsdHMnXVsncmVzdWx0cyddLCBz
ZWxmLm5vcm1hbGl6ZSh7CisgICAgICAgICAgICAnZGlyMSc6IHsKKyAgICAgICAgICAgICAgICAn
c3ViLWRpcjEnOiB7CisgICAgICAgICAgICAgICAgICAgICd0ZXN0MSc6IHsnYWN0dWFsJzogVXBs
b2FkLkV4cGVjdGF0aW9ucy5GQUlMfSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3QyJzogeydh
Y3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLlRJTUVPVVR9LAorICAgICAgICAgICAgICAgIH0s
ICdzdWItZGlyMic6IHsKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3QzJzoge30sCisgICAgICAg
ICAgICAgICAgICAgICd0ZXN0NCc6IHt9LAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0sICdkaXIyJzogeworICAgICAgICAgICAgICAgICdzdWItZGlyMyc6IHsndGVzdDUnOiB7fX0s
CisgICAgICAgICAgICAgICAgJ3Rlc3Q2Jzoge30sCisgICAgICAgICAgICB9LAorICAgICAgICB9
KSkKKworICAgIGRlZiB0ZXN0X25vX3N1aXRlKHNlbGYpOgorICAgICAgICB1cGxvYWQgPSBVcGxv
YWQoCisgICAgICAgICAgICBjb21taXRzPVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAg
ICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywK
KyAgICAgICAgICAgICAgICBicmFuY2g9J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAg
ICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAg
ICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQorCisgICAgZGVmIHRl
c3Rfbm9fY29tbWl0cyhzZWxmKToKKyAgICAgICAgdXBsb2FkID0gVXBsb2FkKAorICAgICAgICAg
ICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgKQorICAgICAgICB3aXRoIHNlbGYu
YXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAganNvbi5kdW1wcyh1cGxvYWQs
IGNscz1VcGxvYWQuRW5jb2RlcikKKworICAgIGRlZiB0ZXN0X2J1aWxkYm90KHNlbGYpOgorICAg
ICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMn
LAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAg
ICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisg
ICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAg
ICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRhaWxzKG9wdGlvbnM9c2VsZi5PcHRpb25zKAor
ICAgICAgICAgICAgICAgIGJ1aWxkYm90X21hc3Rlcj0nd2Via2l0Lm9yZycsCisgICAgICAgICAg
ICAgICAgYnVpbGRlcl9uYW1lPSdRdWV1ZS0xJywKKyAgICAgICAgICAgICAgICBidWlsZF9udW1i
ZXI9MSwKKyAgICAgICAgKSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVF
cnJvcik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVy
KQorCisgICAgICAgIHVwbG9hZC5kZXRhaWxzWydidWlsZGJvdC13b3JrZXInXSA9ICdib3QxMjMn
CisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29u
LmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZ2VuZXJhdGVkX2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydkZXRhaWxzJ10sIHNlbGYubm9y
bWFsaXplKHsKKyAgICAgICAgICAgICdidWlsZGJvdC1tYXN0ZXInOiAnd2Via2l0Lm9yZycsCisg
ICAgICAgICAgICAnYnVpbGRlci1uYW1lJzogJ1F1ZXVlLTEnLAorICAgICAgICAgICAgJ2J1aWxk
LW51bWJlcic6IDEsCisgICAgICAgICAgICAnYnVpbGRib3Qtd29ya2VyJzogJ2JvdDEyMycsCisg
ICAgICAgIH0pKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkJKHJldmlzaW9u
IDI0MzAwOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMu
CiAjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5v
cmcpCi0jIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsMTcgKzM4LDE5IEBAIGltcG9y
dCB0cmFjZWJhY2sKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0ubG9ndXRpbHMgaW1wb3J0IGNvbmZpZ3VyZV9sb2dnaW5nCi1mcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIFNjcmlwdEVycm9yCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KLWZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0ZW1Ib3N0Citmcm9t
IHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0CiBmcm9tIHdlYmtpdHB5LnBvcnQuY29u
ZmlnIGltcG9ydCBDb25maWcKIGZyb20gd2Via2l0cHkudGVzdC5maW5kZXIgaW1wb3J0IEZpbmRl
cgogZnJvbSB3ZWJraXRweS50ZXN0LnByaW50ZXIgaW1wb3J0IFByaW50ZXIKIGZyb20gd2Via2l0
cHkudGVzdC5ydW5uZXIgaW1wb3J0IFJ1bm5lciwgdW5pdF90ZXN0X25hbWUKK2Zyb20gd2Via2l0
cHkucmVzdWx0cy51cGxvYWQgaW1wb3J0IFVwbG9hZAorZnJvbSB3ZWJraXRweS5yZXN1bHRzLm9w
dGlvbnMgaW1wb3J0IHVwbG9hZF9vcHRpb25zCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihf
X25hbWVfXykKIAotX2hvc3QgPSBTeXN0ZW1Ib3N0KCkKK19ob3N0ID0gSG9zdCgpCiBfd2Via2l0
X3Jvb3QgPSBOb25lCiAKIApAQCAtMTMxLDYgKzEzMywxMCBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0
KToKICAgICAgICAgICAgIGhlbHA9J1NldCB0aGUgY29uZmlndXJhdGlvbiB0byBSZWxlYXNlJykK
ICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAoY29uZmlndXJhdGlvbl9ncm91cCkKIAor
ICAgICAgICB1cGxvYWRfZ3JvdXAgPSBvcHRwYXJzZS5PcHRpb25Hcm91cChwYXJzZXIsICdVcGxv
YWQgT3B0aW9ucycpCisgICAgICAgIHVwbG9hZF9ncm91cC5hZGRfb3B0aW9ucyh1cGxvYWRfb3B0
aW9ucygpKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cCh1cGxvYWRfZ3JvdXApCisK
ICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1hJywgJy0tYWxsJywgYWN0aW9uPSdzdG9yZV90
cnVlJywgZGVmYXVsdD1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVu
IGFsbCB0aGUgdGVzdHMnKQogICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWMnLCAnLS1jb3Zl
cmFnZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCkBAIC0xODEsMTEgKzE4
NywxMiBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgZnJvbSB3ZWJraXRweS50aGly
ZHBhcnR5IGltcG9ydCBhdXRvaW5zdGFsbF9ldmVyeXRoaW5nCiAgICAgICAgIGF1dG9pbnN0YWxs
X2V2ZXJ5dGhpbmcoKQogCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAg
ICBjb25maWcgPSBDb25maWcoX2hvc3QuZXhlY3V0aXZlLCBzZWxmLmZpbmRlci5maWxlc3lzdGVt
KQorICAgICAgICBjb25maWd1cmF0aW9uX3RvX3VzZSA9IHNlbGYuX29wdGlvbnMuY29uZmlndXJh
dGlvbiBvciBjb25maWcuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkKICAgICAgICAgaWYgd2lsbF9y
dW5fbGxkYl93ZWJraXRfdGVzdHM6CiAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBk
YXRlKCdCdWlsZGluZyBsbGRiV2ViS2l0VGVzdGVyIC4uLicpCiAgICAgICAgICAgICBidWlsZF9s
bGRid2Via2l0dGVzdGVyID0gc2VsZi5maW5kZXIuZmlsZXN5c3RlbS5qb2luKF93ZWJraXRfcm9v
dCwgJ1Rvb2xzJywgJ1NjcmlwdHMnLCAnYnVpbGQtbGxkYndlYmtpdHRlc3RlcicpCi0gICAgICAg
ICAgICBjb25maWcgPSBDb25maWcoX2hvc3QuZXhlY3V0aXZlLCBzZWxmLmZpbmRlci5maWxlc3lz
dGVtKQotICAgICAgICAgICAgY29uZmlndXJhdGlvbl90b191c2UgPSBzZWxmLl9vcHRpb25zLmNv
bmZpZ3VyYXRpb24gb3IgY29uZmlnLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAgICAgICAgICAg
ICB0cnk6CiAgICAgICAgICAgICAgICAgX2hvc3QuZXhlY3V0aXZlLnJ1bl9hbmRfdGhyb3dfaWZf
ZmFpbChbYnVpbGRfbGxkYndlYmtpdHRlc3RlciwgY29uZmlnLmZsYWdfZm9yX2NvbmZpZ3VyYXRp
b24oY29uZmlndXJhdGlvbl90b191c2UpXSwgcXVpZXQ9KG5vdCBib29sKHNlbGYuX29wdGlvbnMu
dmVyYm9zZSkpKQogICAgICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yIGFzIGU6CkBAIC0yMTgs
NiArMjI1LDcgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIHRlc3RfcnVubmVyID0g
UnVubmVyKHNlbGYucHJpbnRlciwgbG9hZGVyKQogICAgICAgICB0ZXN0X3J1bm5lci5ydW4ocGFy
YWxsZWxfdGVzdHMsIHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQogICAgICAgICB0ZXN0
X3J1bm5lci5ydW4oc2VyaWFsX3Rlc3RzLCAxKQorICAgICAgICBlbmRfdGltZSA9IHRpbWUudGlt
ZSgpCiAKICAgICAgICAgc2VsZi5wcmludGVyLnByaW50X3Jlc3VsdCh0aW1lLnRpbWUoKSAtIHN0
YXJ0KQogCkBAIC0yMzIsOSArMjQwLDUxIEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdlOgogICAgICAgICAgICAgY292LnN0b3AoKQogICAg
ICAgICAgICAgY292LnNhdmUoKQorCisgICAgICAgIGZhaWxlZF91cGxvYWRzID0gMAorICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnJlcG9ydF91cmxzOgorICAgICAgICAgICAgc2VsZi5wcmludGVy
Lm1ldGVyLndyaXRlbG4oJ1xuJykKKyAgICAgICAgICAgIHNlbGYucHJpbnRlci53cml0ZV91cGRh
dGUoJ1ByZXBhcmluZyB1cGxvYWQgZGF0YSAuLi4nKQorCisgICAgICAgICAgICAjIEVtcHR5IHRl
c3QgcmVzdWx0cyBpbmRpY2F0ZSBhIFBBU1MuCisgICAgICAgICAgICByZXN1bHRzID0ge3Rlc3Q6
IHt9IGZvciB0ZXN0IGluIHRlc3RfcnVubmVyLnRlc3RzX3J1bn0KKyAgICAgICAgICAgIGZvciB0
ZXN0LCBlcnJvcnMgaW4gdGVzdF9ydW5uZXIuZXJyb3JzOgorICAgICAgICAgICAgICAgIHJlc3Vs
dHNbdGVzdF0gPSBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhwZWN0
YXRpb25zLkVSUk9SLCBsb2c9Jy9uJy5qb2luKGVycm9ycykpCisgICAgICAgICAgICBmb3IgdGVz
dCwgZmFpbHVyZXMgaW4gdGVzdF9ydW5uZXIuZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgcmVz
dWx0c1t0ZXN0XSA9IFVwbG9hZC5jcmVhdGVfdGVzdF9yZXN1bHQoYWN0dWFsPVVwbG9hZC5FeHBl
Y3RhdGlvbnMuRkFJTCwgbG9nPScvbicuam9pbihmYWlsdXJlcykpCisKKyAgICAgICAgICAgIF9o
b3N0LmluaXRpYWxpemVfc2NtKCkKKyAgICAgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAg
ICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAorICAgICAgICAgICAgICAgIGNvbmZp
Z3VyYXRpb249VXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9uKAorICAgICAgICAgICAgICAgICAg
ICBwbGF0Zm9ybT1faG9zdC5wbGF0Zm9ybS5vc19uYW1lLAorICAgICAgICAgICAgICAgICAgICB2
ZXJzaW9uPXN0cihfaG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uKSwKKyAgICAgICAgICAgICAgICAg
ICAgdmVyc2lvbl9uYW1lPV9ob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb25fbmFtZSgpLAorICAgICAg
ICAgICAgICAgICAgICBzdHlsZT1jb25maWd1cmF0aW9uX3RvX3VzZSwKKyAgICAgICAgICAgICAg
ICAgICAgc2RrPV9ob3N0LnBsYXRmb3JtLmJ1aWxkX3ZlcnNpb24oKSwKKyAgICAgICAgICAgICAg
ICApLAorICAgICAgICAgICAgICAgIGRldGFpbHM9VXBsb2FkLmNyZWF0ZV9kZXRhaWxzKG9wdGlv
bnM9c2VsZi5fb3B0aW9ucyksCisgICAgICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0
ZV9jb21taXQoCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9J3dlYmtpdCcsCisg
ICAgICAgICAgICAgICAgICAgIGlkPV9ob3N0LnNjbSgpLm5hdGl2ZV9yZXZpc2lvbihfd2Via2l0
X3Jvb3QpLAorICAgICAgICAgICAgICAgICAgICBicmFuY2g9X2hvc3Quc2NtKCkubmF0aXZlX2Jy
YW5jaChfd2Via2l0X3Jvb3QpLAorICAgICAgICAgICAgICAgICldLAorICAgICAgICAgICAgICAg
IHJ1bl9zdGF0cz1VcGxvYWQuY3JlYXRlX3J1bl9zdGF0cygKKyAgICAgICAgICAgICAgICAgICAg
c3RhcnRfdGltZT1zdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAgICBlbmRfdGltZT1lbmRf
dGltZSwKKyAgICAgICAgICAgICAgICAgICAgdGVzdHNfc2tpcHBlZD1sZW4odGVzdF9ydW5uZXIu
dGVzdHNfcnVuKSAtIGxlbihwYXJhbGxlbF90ZXN0cykgLSBsZW4oc2VyaWFsX3Rlc3RzKSwKKyAg
ICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIHJlc3VsdHM9cmVzdWx0cywKKyAgICAg
ICAgICAgICkKKyAgICAgICAgICAgIGZvciB1cmwgaW4gc2VsZi5fb3B0aW9ucy5yZXBvcnRfdXJs
czoKKyAgICAgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKCdVcGxvYWRpbmcg
dG8ge30gLi4uJy5mb3JtYXQodXJsKSkKKyAgICAgICAgICAgICAgICBmYWlsZWRfdXBsb2FkcyA9
IGZhaWxlZF91cGxvYWRzIGlmIHVwbG9hZC51cGxvYWQodXJsLCBsb2dfbGluZV9mdW5jPXNlbGYu
cHJpbnRlci5tZXRlci53cml0ZWxuKSBlbHNlIChmYWlsZWRfdXBsb2FkcyArIDEpCisgICAgICAg
ICAgICBzZWxmLnByaW50ZXIubWV0ZXIud3JpdGVsbignVXBsb2FkcyBjb21wbGV0ZWQhJykKKwor
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdlOgogICAgICAgICAgICAgY292LnJlcG9y
dChzaG93X21pc3Npbmc9RmFsc2UpCiAKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmLnByaW50ZXIu
bnVtX2Vycm9ycyBhbmQgbm90IHNlbGYucHJpbnRlci5udW1fZmFpbHVyZXMKKyAgICAgICAgcmV0
dXJuIG5vdCBzZWxmLnByaW50ZXIubnVtX2Vycm9ycyBhbmQgbm90IHNlbGYucHJpbnRlci5udW1f
ZmFpbHVyZXMgYW5kIG5vdCBmYWlsZWRfdXBsb2FkcwogCiAgICAgZGVmIF9jaGVja19pbXBvcnRz
KHNlbGYsIG5hbWVzKToKICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkJKHJldmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgY2xhc3MgUnVubmVyKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByaW50
ZXIsIGxvYWRlcik6CiAgICAgICAgIHNlbGYucHJpbnRlciA9IHByaW50ZXIKICAgICAgICAgc2Vs
Zi5sb2FkZXIgPSBsb2FkZXIKLSAgICAgICAgc2VsZi50ZXN0c19ydW4gPSAwCisgICAgICAgIHNl
bGYudGVzdHNfcnVuID0gW10KICAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQogICAgICAgICBzZWxm
LmZhaWx1cmVzID0gW10KICAgICAgICAgc2VsZi53b3JrZXJfZmFjdG9yeSA9IGxhbWJkYSBjYWxs
ZXI6IF9Xb3JrZXIoY2FsbGVyLCBzZWxmLmxvYWRlcikKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3Mg
UnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLnByaW50ZXIucHJpbnRfc3RhcnRlZF90
ZXN0KHNvdXJjZSwgdGVzdF9uYW1lKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgc2Vs
Zi50ZXN0c19ydW4gKz0gMQorICAgICAgICBzZWxmLnRlc3RzX3J1bi5hcHBlbmQodGVzdF9uYW1l
KQogICAgICAgICBpZiBmYWlsdXJlczoKICAgICAgICAgICAgIHNlbGYuZmFpbHVyZXMuYXBwZW5k
KCh0ZXN0X25hbWUsIGZhaWx1cmVzKSkKICAgICAgICAgaWYgZXJyb3JzOgpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90ZXN0L3J1bm5lcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAy
NDMwMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvcnVubmVyX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw2IEBAIGNsYXNzIFJ1bm5lclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgndGVzdDMgKEZvbykn
LCAnRScsICd0ZXN0M1xuZXJyZWQnKSkKICAgICAgICAgcnVubmVyID0gUnVubmVyKFByaW50ZXIo
c3RyZWFtLCBvcHRpb25zKSwgbG9hZGVyKQogICAgICAgICBydW5uZXIucnVuKFsnRm9vLnRlc3Qx
JywgJ0Zvby50ZXN0MicsICdGb28udGVzdDMnXSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChydW5uZXIudGVzdHNfcnVuLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihydW5u
ZXIudGVzdHNfcnVuKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocnVubmVyLmZh
aWx1cmVzKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocnVubmVyLmVycm9ycyks
IDEpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9f
LnB5CShyZXZpc2lvbiAyNDMwMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFy
dHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAjIENvcHlyaWdo
dCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCisjIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNCw2ICsxMTUsOCBAQCBjbGFzcyBBdXRvaW5zdGFsbElt
cG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfcHl0ZXN0X3RpbWVv
dXQoKQogICAgICAgICBlbGlmICcucHl0ZXN0JyBpbiBmdWxsbmFtZToKICAgICAgICAgICAgIHNl
bGYuX2luc3RhbGxfcHl0ZXN0KCkKKyAgICAgICAgZWxpZiAnLnJlcXVlc3RzJyBpbiBmdWxsbmFt
ZToKKyAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfcmVxdWVzdHMoKQogCiAgICAgZGVmIF9pbnN0
YWxsX21lY2hhbml6ZShzZWxmKToKICAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9maWxl
cy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL3NvdXJjZS9tL21lY2hhbml6ZS9tZWNoYW5pemUt
MC4yLjUudGFyLmd6IiwKQEAgLTE2MSw2ICsxNjQsMjEgQEAgY2xhc3MgQXV0b2luc3RhbGxJbXBv
cnRIb29rKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0
aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9hMi9lYy80MTVkMGNjY2MxZWQ0MWNkN2ZkZjY5YWQ5ODlk
YTE2YThkMTMwNTc5OTYzNzEwMDRjYWI0YmFmYzQ4ZjMvcHl0ZXN0LTMuNi4yLnRhci5neiIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0ZXN0LTMuNi4yL3NyYy9weXRlc3QucHki
KQogCisgICAgZGVmIF9pbnN0YWxsX3JlcXVlc3RzKHNlbGYpOgorICAgICAgICBzZWxmLl9lbnN1
cmVfYXV0b2luc3RhbGxlZF9kaXJfaXNfaW5fc3lzX3BhdGgoKQorICAgICAgICBzZWxmLl9pbnN0
YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvMDYvYjgvZDFlYTM4
NTEzYzIyZThjOTA2Mjc1ZDEzNTgxOGZlZTE2YWQ4NDk1OTg1OTU2YTliN2UyYmIyMTk0MmExL2Nl
cnRpZmktMjAxOS4zLjkudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiY2VydGlmaS0y
MDE5LjMuOS9jZXJ0aWZpIikKKyAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9maWxlcy5w
eXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2ZjL2JiL2E1NzY4YzIzMGY5ZGRiMDNhY2M5ZWYzZjBk
NGEzY2Y5MzQ2MjQ3Mzc5NWQxOGU5NTM1NDk4YzhmOTI5ZC9jaGFyZGV0LTMuMC40LnRhci5neiIs
CisgICAgICAgICAgICAgICAgICAgICAgImNoYXJkZXQtMy4wLjQvY2hhcmRldCIpCisgICAgICAg
IHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9m
Yy9iYi9hNTc2OGMyMzBmOWRkYjAzYWNjOWVmM2YwZDRhM2NmOTM0NjI0NzM3OTVkMThlOTUzNTQ5
OGM4ZjkyOWQvY2hhcmRldC0zLjAuNC50YXIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgICJj
aGFyZGV0LTMuMC40L2NoYXJkZXQiKQorICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwczovL2Zp
bGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvYWQvMTMvZWI1Njk1MWI2Zjc5NTBjYWRiNTc5
Y2ExNjZlNDQ4YmE3N2Y5ZDI0ZWZjMDNlZGQ3ZTU1ZmE1N2QwNGI3L2lkbmEtMi44LnRhci5neiIs
CisgICAgICAgICAgICAgICAgICAgICAgImlkbmEtMi44L2lkbmEiKQorICAgICAgICBzZWxmLl9p
bnN0YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvYjEvNTMvMzdk
ODJhYjM5MTM5MzU2NWYyZjgzMWI4ZWVkYmZmZDU3ZGI1YTcxODIxNmY4MmYxYThiNGQzODFhMWMx
L3VybGxpYjMtMS4yNC4xLnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgInVybGxpYjMt
MS4yNC4xL3NyYy91cmxsaWIzIikKKyAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9maWxl
cy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzLzUyLzJjLzUxNGU0YWMyNWRhMmIwOGNhNWE0NjRj
NTA0NjM2ODIxMjYzODVjNDI3MmMxODE5Mzg3NmU5MWY0YmMzOC9yZXF1ZXN0cy0yLjIxLjAudGFy
Lmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAicmVxdWVzdHMtMi4yMS4wL3JlcXVlc3RzIikK
KwogICAgIGRlZiBfaW5zdGFsbF9weWxpbnQoc2VsZik6CiAgICAgICAgIHNlbGYuX2Vuc3VyZV9h
dXRvaW5zdGFsbGVkX2Rpcl9pc19pbl9zeXNfcGF0aCgpCiAgICAgICAgIGlmIChub3Qgc2VsZi5f
ZnMuZXhpc3RzKHNlbGYuX2ZzLmpvaW4oX0FVVE9JTlNUQUxMRURfRElSLCAicHlsaW50IikpIG9y
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9xdWV1ZXNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTE4MywxMCArMTgzLDEwIEBAIGNsYXNzIFBhdGNoUHJvY2Vzc2luZ1F1ZXVlVGVzdChDb21t
YW5kc1QKICAgICAgICAgcXVldWUuX29wdGlvbnMgPSBNb2NrKCkKICAgICAgICAgcXVldWUuX29w
dGlvbnMucG9ydCA9IE5vbmUKICAgICAgICAgcGF0Y2ggPSBxdWV1ZS5fdG9vbC5idWdzLmZldGNo
X2F0dGFjaG1lbnQoMTAwMDEpCi0gICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJNT0NLIGFkZF9h
dHRhY2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlwdGlvbj1BcmNoaXZlIG9mIGxh
eW91dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9yIG1hYy1zbm93bGVvcGFyZCBmaWxlbmFtZT1s
YXlvdXQtdGVzdC1yZXN1bHRzLnppcCBtaW1ldHlwZT1Ob25lCisgICAgICAgIGV4cGVjdGVkX2xv
Z3MgPSAiIiJNT0NLIGFkZF9hdHRhY2htZW50X3RvX2J1ZzogYnVnX2lkPTUwMDAwLCBkZXNjcmlw
dGlvbj1BcmNoaXZlIG9mIGxheW91dC10ZXN0LXJlc3VsdHMgZnJvbSBib3QgZm9yIG1hYy1oaWdo
c2llcnJhIGZpbGVuYW1lPWxheW91dC10ZXN0LXJlc3VsdHMuemlwIG1pbWV0eXBlPU5vbmUKIC0t
IEJlZ2luIGNvbW1lbnQgLS0KIFRoZSBhdHRhY2hlZCB0ZXN0IGZhaWx1cmVzIHdlcmUgc2VlbiB3
aGlsZSBydW5uaW5nIHJ1bi13ZWJraXQtdGVzdHMgb24gdGhlIG1vY2stcXVldWUuCi1Qb3J0OiBt
YWMtc25vd2xlb3BhcmQgIFBsYXRmb3JtOiBNb2NrUGxhdGZvcm0gMS4wCitQb3J0OiBtYWMtaGln
aHNpZXJyYSAgUGxhdGZvcm06IE1vY2tQbGF0Zm9ybSAxLjAKIC0tIEVuZCBjb21tZW50IC0tCiAi
IiIKICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIHF1ZXVlLl91
cGxvYWRfcmVzdWx0c19hcmNoaXZlX2Zvcl9wYXRjaCwgW3BhdGNoLCBNb2NrKCldLCBleHBlY3Rl
ZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364868</attachid>
            <date>2019-03-15 16:00:51 -0700</date>
            <delta_ts>2019-03-15 19:49:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195755-20190315091629.patch</filename>
            <type>text/plain</type>
            <size>40487</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE5LTAzLTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogVXBsb2FkIHRlc3QgcmVzdWx0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzU1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80ODg5NjE4Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFc3RhYmxpc2ggYSBuZXcgZm9ybWF0IGZvciB1cGxvYWRpbmcgcmVzdWx0
cyB0aGF0IGlzIG5vdCB0aWVkIHRvIGxheW91dCB0ZXN0cywgYXBwbHkKKyAgICAgICAgdGhhdCBm
b3JtYXQgdG8gd2Via2l0cHkgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9jaGVja291dC9zY20vZ2l0LnB5OgorICAgICAgICAoR2l0Lm5hdGl2ZV9icmFuY2gpOiBS
ZXR1cm4gd2hhdCBicmFuY2ggdGhlIGN1cnJlbnQgY2hlY2tvdXQgaXMgb24uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fdW5pdHRlc3QucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weToK
KyAgICAgICAgKFNWTi5uYXRpdmVfYnJhbmNoKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAgKFBsYXRmb3Jt
SW5mby5idWlsZF92ZXJzaW9uKTogUmV0dXJuIGEgYnVpbGQgdmVyc2lvbiBmb3IgTWFjLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoTW9ja1Bs
YXRmb3JtSW5mby5idWlsZF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jl
c3VsdHM6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRf
Xy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL29wdGlvbnMu
cHk6IEFkZGVkLgorICAgICAgICAodXBsb2FkX29wdGlvbnMpOiBPcHRQYXJzZSBsaXN0IGZvciB1
cGxvYWQgb3B0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2Fk
LnB5OiBBZGRlZC4KKyAgICAgICAgKFVwbG9hZCk6IENsYXNzIHdoaWNoIGVuZm9yY2VzIHRoZSB1
cGxvYWQgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSByZXN1bHRzIHNlcnZlci4KKyAgICAgICAgKFVw
bG9hZC5FeHBlY3RhdGlvbnMpOgorICAgICAgICAoVXBsb2FkLmNyZWF0ZV9jb25maWd1cmF0aW9u
KToKKyAgICAgICAgKFVwbG9hZC5jcmVhdGVfY29tbWl0KToKKyAgICAgICAgKFVwbG9hZC5jcmVh
dGVfZGV0YWlscyk6CisgICAgICAgIChVcGxvYWQuY3JlYXRlX3J1bl9zdGF0cyk6CisgICAgICAg
IChVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KToKKyAgICAgICAgKFVwbG9hZC5fX2luaXRfXyk6
CisgICAgICAgIChVcGxvYWQuRW5jb2Rlcik6IEVuY29kZSBVcGxvYWQgb2JqZWN0IGFzIGpzb24u
CisgICAgICAgIChVcGxvYWQudXBsb2FkKTogVXBsb2FkIHJlc3VsdHMgdG8gdGhlIHJlc3VsdHMg
c2VydmVyLCByZXR1cm5pbmcgJ1RydWUnIGlmIHRoZSB1cGxvYWQgaXMgc3VjY2Vzc2Z1bC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkX3VuaXR0ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weToKKyAgICAgICAgKFRl
c3Rlci5fcGFyc2VfYXJncyk6IEFkZCB1cGxvYWQgYXJndW1lbnRzLgorICAgICAgICAoVGVzdGVy
Ll9ydW5fdGVzdHMpOiBBbGxvdyByZXN1bHRzIHRvIGJlIHVwbG9hZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdGVzdC9ydW5uZXIucHk6CisgICAgICAgIChSdW5uZXIuX19pbml0X18p
OiBSZWNvcmQgd2hpY2ggdGVzdHMgd2VyZSBydW4sIHJhdGhlciB0aGFuIGp1c3QgY291bnRpbmcg
dGhlbS4KKyAgICAgICAgKFJ1bm5lci5oYW5kbGUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSdW5uZXJUZXN0LnRlc3RfcnVu
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvX19pbml0X18ucHk6Cisg
ICAgICAgIChBdXRvaW5zdGFsbEltcG9ydEhvb2suZmluZF9tb2R1bGUpOiBBZGQgcmVxdWVzdHMg
YXV0by1pbnN0YWxsLgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxsX3Jl
cXVlc3RzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVz
X3VuaXR0ZXN0LnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWVUZXN0LnRlc3RfdXBs
b2FkX3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gpOiBVcGRhdGUgb3MgbmFtZSBmb3IgdGVzdGlu
Zy4KKwogMjAxOS0wMy0xNSAgU2hhd24gUm9iZXJ0cyAgPHNyb2JlcnRzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjQyOTUyLgpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9yZXN1bHRzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcmVzdWx0cy9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMyBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVj
dG9yeSBmb3IgbW9kdWxlIGZpbGVzCisKKyMgS2VlcCB0aGlzIGZpbGUgZnJlZSBvZiBhbnkgY29k
ZSBvciBpbXBvcnQgc3RhdGVtZW50cyB0aGF0IGNvdWxkCisjIGNhdXNlIGVpdGhlciBhbiBlcnJv
ciB0byBvY2N1ciBvciBhIGxvZyBtZXNzYWdlIHRvIGJlIGxvZ2dlZC4KKyMgVGhpcyBlbnN1cmVz
IHRoYXQgY2FsbGluZyBjb2RlIGNhbiBpbXBvcnQgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tCisj
IHdlYmtpdHB5IGJlZm9yZSBhbnkgZXJyb3JzIG9yIGxvZyBtZXNzYWdlcyBkdWUgdG8gY29kZSBp
biB0aGlzIGZpbGUuCisjIEluaXRpYWxpemF0aW9uIGNvZGUgY2FuIGluY2x1ZGUgdGhpbmdzIGxp
a2UgdmVyc2lvbi1jaGVja2luZyBjb2RlIGFuZAorIyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gY29k
ZS4KKyMKKyMgV2UgZG8gbm90IGV4ZWN1dGUgYW55IHZlcnNpb24tY2hlY2tpbmcgY29kZSBvciBs
b2dnaW5nIGNvbmZpZ3VyYXRpb24KKyMgY29kZSBpbiB0aGlzIGZpbGUgc28gdGhhdCBjYWxsZXJz
IGNhbiBvcHQtaW4gYXMgdGhleSB3YW50LiAgVGhpcyBhbHNvCisjIGFsbG93cyBkaWZmZXJlbnQg
Y2FsbGVycyB0byBjaG9vc2UgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uIGNvZGUsCisjIGFzIG5l
Y2Vzc2FyeS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25zLnB5
CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy9vcHRpb25z
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9wdHBhcnNlCisKKworZGVmIHVwbG9hZF9vcHRp
b25zKCk6CisgICAgcmV0dXJuIFsKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tcmVw
b3J0JywgYWN0aW9uPSdhcHBlbmQnLCBkZXN0PSdyZXBvcnRfdXJscycsIGhlbHA9J1VSTCAob3Ig
VVJMcykgdG8gcmVwb3J0IHRlc3QgcmVzdWx0cyB0bycpLAorICAgICAgICBvcHRwYXJzZS5tYWtl
X29wdGlvbignLS1idWlsZGJvdC1tYXN0ZXInLCBoZWxwPSdUaGUgdXJsIG9mIHRoZSBidWlsZGJv
dCBtYXN0ZXIuJyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkZXItbmFt
ZScsIGhlbHA9J1RoZSBuYW1lIG9mIHRoZSBidWlsZGJvdCBidWlsZGVyIHRlc3RzIHdlcmUgcnVu
IG9uLicpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1idWlsZC1udW1iZXInLCBo
ZWxwPSdUaGUgYnVpbGRib3QgYnVpbGQgbnVtYmVyIHRlc3RzIGFyZSBhc3NvY2lhdGVkIHdpdGgu
JyksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWJ1aWxkYm90LXdvcmtlcicsIGhl
bHA9J1RoZSBidWlsZGJvdCB3b3JrZXIgdGVzdHMgd2VyZSBydW4gb24uJyksCisgICAgXQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZC5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3VsdHMvdXBsb2FkLnB5CShub25leGlzdGVudCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcmVzdWx0cy91cGxvYWQucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC5yZXF1ZXN0cwor
CitpbXBvcnQganNvbgoraW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgc3lzCisKK2ltcG9ydCBwbGF0
Zm9ybSBhcyBob3N0X3BsYXRmb3JtCisKKworY2xhc3MgVXBsb2FkKG9iamVjdCk6CisgICAgVVBM
T0FEX0VORFBPSU5UID0gJy9hcGkvdXBsb2FkJworICAgIEJVSUxEQk9UX0RFVEFJTFMgPSBbJ2J1
aWxkYm90LW1hc3RlcicsICdidWlsZGVyLW5hbWUnLCAnYnVpbGQtbnVtYmVyJywgJ2J1aWxkYm90
LXdvcmtlciddCisgICAgVkVSU0lPTiA9IDAKKworICAgIGNsYXNzIEV4cGVjdGF0aW9uczoKKyAg
ICAgICAgIyBUaGVzZSBhcmUgb3JkZXJlZCBieSBwcmlvcml0eSwgbWVhbmluZyB0aGF0IGEgdGVz
dCB3aGljaCBib3RoIGNyYXNoZXMgYW5kIGhhcworICAgICAgICAjIGEgd2FybmluZyBzaG91bGQg
YmUgY29uc2lkZXJlZCB0byBoYXZlIGNyYXNoZWQuCisgICAgICAgIE9SREVSID0gWworICAgICAg
ICAgICAgJ0NSQVNIJywKKyAgICAgICAgICAgICdUSU1FT1VUJywKKyAgICAgICAgICAgICdJTUFH
RScsICAgIyBJbWFnZS1kaWZmCisgICAgICAgICAgICAnQVVESU8nLCAgICMgQXVkaW8tZGlmZgor
ICAgICAgICAgICAgJ1RFWFQnLCAgICAjIFRleHQtZGlmZgorICAgICAgICAgICAgJ0ZBSUwnLAor
ICAgICAgICAgICAgJ0VSUk9SJywKKyAgICAgICAgICAgICdXQVJOSU5HJywKKyAgICAgICAgICAg
ICdQQVNTJywKKyAgICAgICAgXQorICAgICAgICBDUkFTSCwgVElNRU9VVCwgSU1BR0UsIEFVRElP
LCBURVhULCBGQUlMLCBFUlJPUiwgV0FSTklORywgUEFTUyA9IE9SREVSCisKKyAgICBjbGFzcyBF
bmNvZGVyKGpzb24uSlNPTkVuY29kZXIpOgorCisgICAgICAgIGRlZiBkZWZhdWx0KHNlbGYsIG9i
aik6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvYmosIFVwbG9hZCk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN1cGVyKFVwbG9hZC5FbmNvZGVyLCBzZWxmKS5kZWZhdWx0KG9iaikK
KworICAgICAgICAgICAgaWYgbm90IG9iai5zdWl0ZToKKyAgICAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCdObyBzdWl0ZSBzcGVjaWZpZWQgdG8gcmVzdWx0cyB1cGxvYWQnKQorICAgICAg
ICAgICAgaWYgbm90IG9iai5jb21taXRzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ05vIGNvbW1pdHMgc3BlY2lmaWVkIHRvIHJlc3VsdHMgdXBsb2FkJykKKworICAgICAgICAg
ICAgZGV0YWlscyA9IG9iai5kZXRhaWxzIG9yIG9iai5jcmVhdGVfZGV0YWlscygpCisgICAgICAg
ICAgICBidWlsZGJvdF9hcmdzID0gW2RldGFpbHMuZ2V0KGFyZywgTm9uZSkgaXMgTm9uZSBmb3Ig
YXJnIGluIG9iai5CVUlMREJPVF9ERVRBSUxTXQorICAgICAgICAgICAgaWYgYW55KGJ1aWxkYm90
X2FyZ3MpIGFuZCBub3QgYWxsKGJ1aWxkYm90X2FyZ3MpOgorICAgICAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoJ0FsbCBidWlsZGJvdCBkZXRhaWxzIG11c3QgYmUgZGVmaW5lZCBmb3IgdXBs
b2FkLCBkZXRhaWxzIG1pc3Npbmc6IHt9Jy5mb3JtYXQoJywgJy5qb2luKAorICAgICAgICAgICAg
ICAgICAgICBbb2JqLkJVSUxEQk9UX0RFVEFJTFNbaV0gZm9yIGkgaW4geHJhbmdlKGxlbihvYmou
QlVJTERCT1RfREVUQUlMUykpIGlmIGJ1aWxkYm90X2FyZ3NbaV1dLAorICAgICAgICAgICAgICAg
ICkpKQorCisgICAgICAgICAgICBkZWYgdW5wYWNrX3Rlc3QoY3VycmVudCwgcGF0aF90b190ZXN0
LCBkYXRhKToKKyAgICAgICAgICAgICAgICBpZiBsZW4ocGF0aF90b190ZXN0KSA9PSAxOgorICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50W3BhdGhfdG9fdGVzdFswXV0gPSBkYXRhCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGlmIG5vdCBjdXJyZW50LmdldChw
YXRoX3RvX3Rlc3RbMF0pOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50W3BhdGhfdG9fdGVz
dFswXV0gPSB7fQorICAgICAgICAgICAgICAgIHVucGFja190ZXN0KGN1cnJlbnRbcGF0aF90b190
ZXN0WzBdXSwgcGF0aF90b190ZXN0WzE6XSwgZGF0YSkKKworICAgICAgICAgICAgcmVzdWx0cyA9
IHt9CisgICAgICAgICAgICBmb3IgdGVzdCwgZGF0YSBpbiBvYmoucmVzdWx0cy5pdGVyaXRlbXMo
KToKKyAgICAgICAgICAgICAgICB1bnBhY2tfdGVzdChyZXN1bHRzLCB0ZXN0LnNwbGl0KCcvJyks
IGRhdGEpCisKKyAgICAgICAgICAgIHJlc3VsdCA9IGRpY3QoCisgICAgICAgICAgICAgICAgdmVy
c2lvbj1vYmouVkVSU0lPTiwKKyAgICAgICAgICAgICAgICBzdWl0ZT1vYmouc3VpdGUsCisgICAg
ICAgICAgICAgICAgY29uZmlndXJhdGlvbj1vYmouY29uZmlndXJhdGlvbiBvciBvYmouY3JlYXRl
X2NvbmZpZ3VyYXRpb24oKSwKKyAgICAgICAgICAgICAgICBjb21taXRzPW9iai5jb21taXRzLAor
ICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0cz1kaWN0KAorICAgICAgICAgICAgICAgICAgICBk
ZXRhaWxzPWRldGFpbHMsCisgICAgICAgICAgICAgICAgICAgIHJ1bl9zdGF0cz1vYmoucnVuX3N0
YXRzIG9yIG9iai5jcmVhdGVfcnVuX3N0YXRzKCksCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dHM9cmVzdWx0cywKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgKQorICAgICAgICAg
ICAgaWYgb2JqLnRpbWVzdGFtcDoKKyAgICAgICAgICAgICAgICByZXN1bHRbJ3RpbWVzdGFtcCdd
ID0gb2JqLnRpbWVzdGFtcAorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHN1aXRlPU5vbmUsIGNvbmZpZ3VyYXRpb249Tm9uZSwgY29tbWl0cz1bXSwg
dGltZXN0YW1wPU5vbmUsIGRldGFpbHM9Tm9uZSwgcnVuX3N0YXRzPU5vbmUsIHJlc3VsdHM9e30p
OgorICAgICAgICBzZWxmLnN1aXRlID0gc3VpdGUKKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9u
ID0gY29uZmlndXJhdGlvbgorICAgICAgICBzZWxmLmNvbW1pdHMgPSBjb21taXRzCisgICAgICAg
IHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wCisgICAgICAgIHNlbGYuZGV0YWlscyA9IGRldGFp
bHMKKyAgICAgICAgc2VsZi5ydW5fc3RhdHMgPSBydW5fc3RhdHMKKyAgICAgICAgc2VsZi5yZXN1
bHRzID0gcmVzdWx0cworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfY29uZmln
dXJhdGlvbigKKyAgICAgICAgICAgIHBsYXRmb3JtPU5vbmUsCisgICAgICAgICAgICBpc19zaW11
bGF0b3I9RmFsc2UsCisgICAgICAgICAgICB2ZXJzaW9uPU5vbmUsCisgICAgICAgICAgICBhcmNo
aXRlY3R1cmU9Tm9uZSwKKyAgICAgICAgICAgIHZlcnNpb25fbmFtZT1Ob25lLAorICAgICAgICAg
ICAgbW9kZWw9Tm9uZSwKKyAgICAgICAgICAgIHN0eWxlPU5vbmUsICAgIyBEZWJ1Zy9Qcm9kdWN0
aW9uL1JlbGVhc2UKKyAgICAgICAgICAgIGZsYXZvcj1Ob25lLCAgIyBEdW1waW5nIGdyb3VuZCBz
dWl0ZS13aWRlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyAoaWUsIEd1YXJkTWFsbG9jKQorICAgICAg
ICAgICAgc2RrPU5vbmUsCisgICAgICAgICk6CisKKyAgICAgICAgIyBUaGlzIGRldmlhdGVzIHNs
aWdodGx5IGZyb20gdGhlIHJlc3Qgb2Ygd2Via2l0cHksIGJ1dCBpdCBhbGxvd3MgdGhpcyBmaWxl
IHRvIGJlIGVudGlyZWx5IHBvcnRhYmxlLgorICAgICAgICBjb25maWcgPSBkaWN0KAorICAgICAg
ICAgICAgcGxhdGZvcm09cGxhdGZvcm0gb3IgKGhvc3RfcGxhdGZvcm0uc3lzdGVtKCkgaWYgaG9z
dF9wbGF0Zm9ybS5zeXN0ZW0oKSAhPSAnRGFyd2luJyBlbHNlICdtYWMnKS5sb3dlcigpLAorICAg
ICAgICAgICAgaXNfc2ltdWxhdG9yPWlzX3NpbXVsYXRvciwKKyAgICAgICAgICAgIHZlcnNpb249
dmVyc2lvbiBvciAoaG9zdF9wbGF0Zm9ybS5yZWxlYXNlKCkgaWYgaG9zdF9wbGF0Zm9ybS5zeXN0
ZW0oKSAhPSAnRGFyd2luJyBlbHNlIGhvc3RfcGxhdGZvcm0ubWFjX3ZlcigpWzBdKSwKKyAgICAg
ICAgICAgIGFyY2hpdGVjdHVyZT1hcmNoaXRlY3R1cmUgb3IgaG9zdF9wbGF0Zm9ybS5tYWNoaW5l
KCksCisgICAgICAgICkKKyAgICAgICAgb3B0aW9uYWxfZGF0YSA9IGRpY3QodmVyc2lvbl9uYW1l
PXZlcnNpb25fbmFtZSwgbW9kZWw9bW9kZWwsIHN0eWxlPXN0eWxlLCBmbGF2b3I9Zmxhdm9yLCBz
ZGs9c2RrKQorICAgICAgICBjb25maWcudXBkYXRlKHtrZXk6IHZhbHVlIGZvciBrZXksIHZhbHVl
IGluIG9wdGlvbmFsX2RhdGEuaXRlcml0ZW1zKCkgaWYgdmFsdWUgaXMgbm90IE5vbmV9KQorICAg
ICAgICByZXR1cm4gY29uZmlnCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9j
b21taXQocmVwb3NpdG9yeV9pZCwgaWQsIGJyYW5jaD1Ob25lKToKKyAgICAgICAgY29tbWl0ID0g
ZGljdChyZXBvc2l0b3J5X2lkPXJlcG9zaXRvcnlfaWQsIGlkPWlkKQorICAgICAgICBpZiBicmFu
Y2g6CisgICAgICAgICAgICBjb21taXRbJ2JyYW5jaCddID0gYnJhbmNoCisgICAgICAgIHJldHVy
biBjb21taXQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3JlYXRlX2RldGFpbHMobGlu
az1Ob25lLCBvcHRpb25zPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgcmVzdWx0ID0gZGljdCgq
Kmt3YXJncykKKyAgICAgICAgaWYgbGluazoKKyAgICAgICAgICAgIHJlc3VsdFsnbGluayddID0g
bGluaworICAgICAgICBpZiBub3Qgb3B0aW9uczoKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQK
KworICAgICAgICBmb3IgZWxlbWVudCBpbiBVcGxvYWQuQlVJTERCT1RfREVUQUlMUzoKKyAgICAg
ICAgICAgIHZhbHVlID0gZ2V0YXR0cihvcHRpb25zLCBlbGVtZW50LnJlcGxhY2UoJy0nLCAnXycp
LCBOb25lKQorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAg
ICAgcmVzdWx0W2VsZW1lbnRdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfcnVuX3N0YXRzKHN0YXJ0X3RpbWU9Tm9uZSwg
ZW5kX3RpbWU9Tm9uZSwgdGVzdHNfc2tpcHBlZD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHN0
YXRzID0gZGljdCgqKmt3YXJncykKKyAgICAgICAgb3B0aW9uYWxfZGF0YSA9IGRpY3Qoc3RhcnRf
dGltZT1zdGFydF90aW1lLCBlbmRfdGltZT1lbmRfdGltZSwgdGVzdHNfc2tpcHBlZD10ZXN0c19z
a2lwcGVkKQorICAgICAgICBzdGF0cy51cGRhdGUoe2tleTogdmFsdWUgZm9yIGtleSwgdmFsdWUg
aW4gb3B0aW9uYWxfZGF0YS5pdGVyaXRlbXMoKSBpZiB2YWx1ZSBpcyBub3QgTm9uZX0pCisgICAg
ICAgIHJldHVybiBzdGF0cworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfdGVz
dF9yZXN1bHQoZXhwZWN0ZWQ9Tm9uZSwgYWN0dWFsPU5vbmUsIGxvZz1Ob25lLCAqKmt3YXJncyk6
CisgICAgICAgIHJlc3VsdCA9IGRpY3QoKiprd2FyZ3MpCisKKyAgICAgICAgIyBUZXN0cyB3aGlj
aCBkb24ndCBkZWNsYXJlIGV4cGVjdGF0aW9ucyBvciByZXN1bHRzIGFyZSBhc3N1bWVkIHRvIGhh
dmUgcGFzc2VkLgorICAgICAgICBvcHRpb25hbF9kYXRhID0gZGljdChleHBlY3RlZD1leHBlY3Rl
ZCwgYWN0dWFsPWFjdHVhbCwgbG9nPWxvZykKKyAgICAgICAgcmVzdWx0LnVwZGF0ZSh7a2V5OiB2
YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBvcHRpb25hbF9kYXRhLml0ZXJpdGVtcygpIGlmIHZhbHVl
IGlzIG5vdCBOb25lfSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHVwbG9hZChz
ZWxmLCB1cmwsIGxvZ19saW5lX2Z1bmM9bGFtYmRhIHZhbDogc3lzLnN0ZG91dC53cml0ZSh2YWwg
KyAnXG4nKSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMu
cG9zdCh1cmwgKyBzZWxmLlVQTE9BRF9FTkRQT0lOVCwgZGF0YT1qc29uLmR1bXBzKHNlbGYsIGNs
cz1VcGxvYWQuRW5jb2RlcikpCisgICAgICAgIGV4Y2VwdCByZXF1ZXN0cy5leGNlcHRpb25zLkNv
bm5lY3Rpb25FcnJvcjoKKyAgICAgICAgICAgIGxvZ19saW5lX2Z1bmMoJyAnICogNCArICdGYWls
ZWQgdG8gdXBsb2FkIHRvIHt9LCByZXN1bHRzIHNlcnZlciBub3Qgb25saW5lJy5mb3JtYXQodXJs
KSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBh
cyBlOgorICAgICAgICAgICAgbG9nX2xpbmVfZnVuYygnICcgKiA0ICsgJ0ZhaWxlZCB0byBlbmNv
ZGUgdXBsb2FkIGRhdGE6IHt9Jy5mb3JtYXQoZSkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICBs
b2dfbGluZV9mdW5jKCcgJyAqIDQgKyAnRXJyb3IgdXBsb2FkaW5nIHRvIHt9OicuZm9ybWF0KHVy
bCkpCisgICAgICAgICAgICBsb2dfbGluZV9mdW5jKCcgJyAqIDggKyByZXNwb25zZS5qc29uKClb
J2Rlc2NyaXB0aW9uJ10pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBsb2df
bGluZV9mdW5jKCcgJyAqIDQgKyAnVXBsb2FkZWQgcmVzdWx0cyB0byB7fScuZm9ybWF0KHVybCkp
CisgICAgICAgIHJldHVybiBUcnVlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Jlc3Vs
dHMvdXBsb2FkX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcmVzdWx0cy91cGxvYWRfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9yZXN1bHRzL3VwbG9hZF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIxNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CitpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnJlcXVlc3RzCisKK2lt
cG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGpzb24KK2ltcG9ydCByZXF1ZXN0cworaW1wb3J0IHRp
bWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LnJlc3VsdHMudXBsb2FkIGltcG9y
dCBVcGxvYWQKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eSBpbXBvcnQgbW9jaworCisKK2NsYXNz
IFVwbG9hZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgT3B0aW9ucyhvYmpl
Y3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICAgICAg
Zm9yIGtleSwgdmFsdWUgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNl
dGF0dHIoc2VsZiwga2V5LCB2YWx1ZSkKKworICAgIGNsYXNzIE1vY2tSZXNwb25zZShvYmplY3Qp
OgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzX2NvZGU9MjAwLCB0ZXh0PScnKToK
KyAgICAgICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSBzdGF0dXNfY29kZQorICAgICAgICAgICAg
c2VsZi50ZXh0ID0gdGV4dAorCisgICAgICAgIGRlZiBqc29uKHNlbGYpOgorICAgICAgICAgICAg
cmV0dXJuIGpzb24ubG9hZHMoc2VsZi50ZXh0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBub3JtYWxpemUoZGF0YSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgYmFzZXN0cmlu
Zyk6CisgICAgICAgICAgICByZXR1cm4gc3RyKGRhdGEpCisgICAgICAgIGVsaWYgaXNpbnN0YW5j
ZShkYXRhLCBjb2xsZWN0aW9ucy5NYXBwaW5nKToKKyAgICAgICAgICAgIHJldHVybiBkaWN0KG1h
cChVcGxvYWRUZXN0Lm5vcm1hbGl6ZSwgZGF0YS5pdGVyaXRlbXMoKSkpCisgICAgICAgIGVsaWYg
aXNpbnN0YW5jZShkYXRhLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1
cm4gdHlwZShkYXRhKShtYXAoVXBsb2FkVGVzdC5ub3JtYWxpemUsIGRhdGEpKQorICAgICAgICBy
ZXR1cm4gZGF0YQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiByYWlzZV9yZXF1ZXN0c19D
b25uZWN0aW9uRXJyb3IoKToKKyAgICAgICAgcmFpc2UgcmVxdWVzdHMuZXhjZXB0aW9ucy5Db25u
ZWN0aW9uRXJyb3IoKQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHN0
YXJ0X3RpbWUsIGVuZF90aW1lID0gdGltZS50aW1lKCkgLSAzLCB0aW1lLnRpbWUoKQorICAgICAg
ICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMnLAor
ICAgICAgICAgICAgY29uZmlndXJhdGlvbj1VcGxvYWQuY3JlYXRlX2NvbmZpZ3VyYXRpb24oCisg
ICAgICAgICAgICAgICAgcGxhdGZvcm09J21hYycsCisgICAgICAgICAgICAgICAgdmVyc2lvbj0n
MTAuMTMuMCcsCisgICAgICAgICAgICAgICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJyYScsCisg
ICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlPSd4ODZfNjQnLAorICAgICAgICAgICAgICAgIHNk
az0nMTdBNDA1JywKKyAgICAgICAgICAgICksCisgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5j
cmVhdGVfZGV0YWlscyhsaW5rPSdodHRwczovL3dlYmtpdC5vcmcnKSwKKyAgICAgICAgICAgIGNv
bW1pdHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlf
aWQ9J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJy
YW5jaD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICAgICBydW5fc3RhdHM9VXBs
b2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisgICAgICAgICAgICAgICAgc3RhcnRfdGltZT1zdGFydF90
aW1lLAorICAgICAgICAgICAgICAgIGVuZF90aW1lPWVuZF90aW1lLAorICAgICAgICAgICAgICAg
IHRlc3RzX3NraXBwZWQ9MCwKKyAgICAgICAgICAgICksCisgICAgICAgICAgICByZXN1bHRzPXsK
KyAgICAgICAgICAgICAgICAnd2Via2l0cHkudGVzdDEnOiB7fSwKKyAgICAgICAgICAgICAgICAn
d2Via2l0cHkudGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGV4cGVjdGVkPVVwbG9h
ZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlvbnMuRkFJTCksCisg
ICAgICAgICAgICB9LAorICAgICAgICApCisgICAgICAgIGdlbmVyYXRlZF9kaWN0ID0gc2VsZi5u
b3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVy
KSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndmVyc2lvbidd
LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0WydzdWl0ZSddLCAn
d2Via2l0cHktdGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRlZF9kaWN0
Wydjb25maWd1cmF0aW9uJ10sIHNlbGYubm9ybWFsaXplKGRpY3QoCisgICAgICAgICAgICBwbGF0
Zm9ybT0nbWFjJywKKyAgICAgICAgICAgIGlzX3NpbXVsYXRvcj1GYWxzZSwKKyAgICAgICAgICAg
IHZlcnNpb249JzEwLjEzLjAnLAorICAgICAgICAgICAgdmVyc2lvbl9uYW1lPSdIaWdoIFNpZXJy
YScsCisgICAgICAgICAgICBhcmNoaXRlY3R1cmU9J3g4Nl82NCcsCisgICAgICAgICAgICBzZGs9
JzE3QTQwNScsCisgICAgICAgICkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyYXRl
ZF9kaWN0Wydjb21taXRzJ10sIFtkaWN0KAorICAgICAgICAgICAgcmVwb3NpdG9yeV9pZD0nd2Vi
a2l0JywKKyAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgIGJyYW5jaD0ndHJ1bmsnLAor
ICAgICAgICApXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVz
dF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwgc2VsZi5ub3JtYWxpemUoZGljdChsaW5rPSdodHRwczov
L3dlYmtpdC5vcmcnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVkX2RpY3Rb
J3Rlc3RfcmVzdWx0cyddWydydW5fc3RhdHMnXSwgc2VsZi5ub3JtYWxpemUoZGljdCgKKyAgICAg
ICAgICAgIHN0YXJ0X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgIGVuZF90aW1lPWVuZF90
aW1lLAorICAgICAgICAgICAgdGVzdHNfc2tpcHBlZD0wLAorICAgICAgICApKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsndGVzdF9yZXN1bHRzJ11bJ3Jlc3VsdHMn
XSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAgJ3dlYmtpdHB5LnRlc3QxJzoge30sCisg
ICAgICAgICAgICAnd2Via2l0cHkudGVzdDInOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGV4
cGVjdGVkPVVwbG9hZC5FeHBlY3RhdGlvbnMuUEFTUywgYWN0dWFsPVVwbG9hZC5FeHBlY3RhdGlv
bnMuRkFJTCksCisgICAgICAgIH0pKQorCisgICAgZGVmIHRlc3RfdXBsb2FkKHNlbGYpOgorICAg
ICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVzdHMn
LAorICAgICAgICAgICAgY29tbWl0cz1bVXBsb2FkLmNyZWF0ZV9jb21taXQoCisgICAgICAgICAg
ICAgICAgcmVwb3NpdG9yeV9pZD0nd2Via2l0JywKKyAgICAgICAgICAgICAgICBpZD0nNScsCisg
ICAgICAgICAgICAgICAgYnJhbmNoPSd0cnVuaycsCisgICAgICAgICAgICApXSwKKyAgICAgICAg
KQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEg
dXJsLCBkYXRhOiBzZWxmLk1vY2tSZXNwb25zZSgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dlYmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5l
X2Z1bmM9bGFtYmRhIF86IE5vbmUpKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgncmVxdWVz
dHMucG9zdCcsIG5ldz1sYW1iZGEgdXJsLCBkYXRhOiBzZWxmLnJhaXNlX3JlcXVlc3RzX0Nvbm5l
Y3Rpb25FcnJvcigpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodXBsb2FkLnVwbG9h
ZCgnaHR0cHM6Ly93ZWJraXQub3JnL3Jlc3VsdHMnLCBsb2dfbGluZV9mdW5jPWxhbWJkYSBfOiBO
b25lKSkKKworICAgICAgICBtb2NrXzQwNCA9IG1vY2sucGF0Y2goJ3JlcXVlc3RzLnBvc3QnLCBu
ZXc9bGFtYmRhIHVybCwgZGF0YTogc2VsZi5Nb2NrUmVzcG9uc2UoCisgICAgICAgICAgICBzdGF0
dXNfY29kZT00MDQsCisgICAgICAgICAgICB0ZXh0PWpzb24uZHVtcHMoZGljdChkZXNjcmlwdGlv
bj0nTm8gc3VjaCBhZGRyZXNzJykpLAorICAgICAgICApKQorICAgICAgICB3aXRoIG1vY2tfNDA0
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cGxvYWQudXBsb2FkKCdodHRwczovL3dl
YmtpdC5vcmcvcmVzdWx0cycsIGxvZ19saW5lX2Z1bmM9bGFtYmRhIF86IE5vbmUpKQorCisgICAg
ZGVmIHRlc3RfcGFja2VkX3Rlc3Qoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAg
ICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb21taXRzPVtV
cGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJr
aXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9J3Ry
dW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgcmVzdWx0cz17CisgICAgICAgICAg
ICAgICAgJ2RpcjEvc3ViLWRpcjEvdGVzdDEnOiBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFj
dHVhbD1VcGxvYWQuRXhwZWN0YXRpb25zLkZBSUwpLAorICAgICAgICAgICAgICAgICdkaXIxL3N1
Yi1kaXIxL3Rlc3QyJzogVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4
cGVjdGF0aW9ucy5USU1FT1VUKSwKKyAgICAgICAgICAgICAgICAnZGlyMS9zdWItZGlyMi90ZXN0
Myc6IHt9LAorICAgICAgICAgICAgICAgICdkaXIxL3N1Yi1kaXIyL3Rlc3Q0Jzoge30sCisgICAg
ICAgICAgICAgICAgJ2RpcjIvc3ViLWRpcjMvdGVzdDUnOiB7fSwKKyAgICAgICAgICAgICAgICAn
ZGlyMi90ZXN0Nic6IHt9LAorICAgICAgICAgICAgfQorICAgICAgICApCisgICAgICAgIGdlbmVy
YXRlZF9kaWN0ID0gc2VsZi5ub3JtYWxpemUoanNvbi5sb2Fkcyhqc29uLmR1bXBzKHVwbG9hZCwg
Y2xzPVVwbG9hZC5FbmNvZGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVk
X2RpY3RbJ3Rlc3RfcmVzdWx0cyddWydyZXN1bHRzJ10sIHNlbGYubm9ybWFsaXplKHsKKyAgICAg
ICAgICAgICdkaXIxJzogeworICAgICAgICAgICAgICAgICdzdWItZGlyMSc6IHsKKyAgICAgICAg
ICAgICAgICAgICAgJ3Rlc3QxJzogeydhY3R1YWwnOiBVcGxvYWQuRXhwZWN0YXRpb25zLkZBSUx9
LAorICAgICAgICAgICAgICAgICAgICAndGVzdDInOiB7J2FjdHVhbCc6IFVwbG9hZC5FeHBlY3Rh
dGlvbnMuVElNRU9VVH0sCisgICAgICAgICAgICAgICAgfSwgJ3N1Yi1kaXIyJzogeworICAgICAg
ICAgICAgICAgICAgICAndGVzdDMnOiB7fSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3Q0Jzog
e30sCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgJ2RpcjInOiB7CisgICAgICAg
ICAgICAgICAgJ3N1Yi1kaXIzJzogeyd0ZXN0NSc6IHt9fSwKKyAgICAgICAgICAgICAgICAndGVz
dDYnOiB7fSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0pKQorCisgICAgZGVmIHRlc3Rfbm9f
c3VpdGUoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgKKyAgICAgICAgICAgIGNvbW1p
dHM9W1VwbG9hZC5jcmVhdGVfY29tbWl0KAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlfaWQ9
J3dlYmtpdCcsCisgICAgICAgICAgICAgICAgaWQ9JzUnLAorICAgICAgICAgICAgICAgIGJyYW5j
aD0ndHJ1bmsnLAorICAgICAgICAgICAgKV0sCisgICAgICAgICkKKyAgICAgICAgd2l0aCBzZWxm
LmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpzb24uZHVtcHModXBsb2Fk
LCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICBkZWYgdGVzdF9ub19jb21taXRzKHNlbGYpOgor
ICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAgICBzdWl0ZT0nd2Via2l0cHktdGVz
dHMnLAorICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJv
cik6CisgICAgICAgICAgICBqc29uLmR1bXBzKHVwbG9hZCwgY2xzPVVwbG9hZC5FbmNvZGVyKQor
CisgICAgZGVmIHRlc3RfYnVpbGRib3Qoc2VsZik6CisgICAgICAgIHVwbG9hZCA9IFVwbG9hZCgK
KyAgICAgICAgICAgIHN1aXRlPSd3ZWJraXRweS10ZXN0cycsCisgICAgICAgICAgICBjb21taXRz
PVtVcGxvYWQuY3JlYXRlX2NvbW1pdCgKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3
ZWJraXQnLAorICAgICAgICAgICAgICAgIGlkPSc1JywKKyAgICAgICAgICAgICAgICBicmFuY2g9
J3RydW5rJywKKyAgICAgICAgICAgICldLAorICAgICAgICAgICAgZGV0YWlscz1VcGxvYWQuY3Jl
YXRlX2RldGFpbHMob3B0aW9ucz1zZWxmLk9wdGlvbnMoCisgICAgICAgICAgICAgICAgYnVpbGRi
b3RfbWFzdGVyPSd3ZWJraXQub3JnJywKKyAgICAgICAgICAgICAgICBidWlsZGVyX25hbWU9J1F1
ZXVlLTEnLAorICAgICAgICAgICAgICAgIGJ1aWxkX251bWJlcj0xLAorICAgICAgICApKSkKKyAg
ICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGpz
b24uZHVtcHModXBsb2FkLCBjbHM9VXBsb2FkLkVuY29kZXIpCisKKyAgICAgICAgdXBsb2FkLmRl
dGFpbHNbJ2J1aWxkYm90LXdvcmtlciddID0gJ2JvdDEyMycKKyAgICAgICAgZ2VuZXJhdGVkX2Rp
Y3QgPSBzZWxmLm5vcm1hbGl6ZShqc29uLmxvYWRzKGpzb24uZHVtcHModXBsb2FkLCBjbHM9VXBs
b2FkLkVuY29kZXIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZWRfZGljdFsn
dGVzdF9yZXN1bHRzJ11bJ2RldGFpbHMnXSwgc2VsZi5ub3JtYWxpemUoeworICAgICAgICAgICAg
J2J1aWxkYm90LW1hc3Rlcic6ICd3ZWJraXQub3JnJywKKyAgICAgICAgICAgICdidWlsZGVyLW5h
bWUnOiAnUXVldWUtMScsCisgICAgICAgICAgICAnYnVpbGQtbnVtYmVyJzogMSwKKyAgICAgICAg
ICAgICdidWlsZGJvdC13b3JrZXInOiAnYm90MTIzJywKKyAgICAgICAgfSkpCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHkJKHJl
dmlzaW9uIDI0MzAwOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0
L3NjbS9naXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw2ICsyOTAsMTQgQEAgY2xhc3MgR2l0
KFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgZGVmIG5hdGl2ZV9yZXZpc2lvbihzZWxmLCBwYXRo
KToKICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9naXQoWyctQycsIHNlbGYuZmluZF9jaGVja291
dF9yb290KHBhdGgpLCAnbG9nJywgJy0xJywgJy0tcHJldHR5PWZvcm1hdDolSCddKQogCisgICAg
ZGVmIG5hdGl2ZV9icmFuY2goc2VsZiwgcGF0aCk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1
bl9naXQoWyctQycsIHNlbGYuZmluZF9jaGVja291dF9yb290KHBhdGgpLCAncmV2LXBhcnNlJywg
Jy0tYWJicmV2LXJlZicsICdIRUFEJ10pLnJzdHJpcCgpCisKKyAgICAgICAgIyBGb3IgZ2l0LXN2
bgorICAgICAgICBpZiByZXN1bHQuc3RhcnRzd2l0aCgnaGVhZHMnKToKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHRbNjpdCisgICAgICAgIHJldHVybiByZXN1bHQKKwogICAgIGRlZiBzdm5fdXJs
KHNlbGYpOgogICAgICAgICBnaXRfY29tbWFuZCA9IFsnc3ZuJywgJ2luZm8nXQogICAgICAgICBz
dGF0dXMgPSBzZWxmLl9ydW5fZ2l0KGdpdF9jb21tYW5kKQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV9tb2NrLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY21fbW9jay5weQkocmV2
aXNpb24gMjQzMDA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
c2NtL3NjbV9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw5IEBAIGNsYXNzIE1v
Y2tTQ00ob2JqZWN0KToKICAgICBkZWYgbmF0aXZlX3JldmlzaW9uKHNlbGYsIHBhdGgpOgogICAg
ICAgICByZXR1cm4gc2VsZi5zdm5fcmV2aXNpb24ocGF0aCkKIAorICAgIGRlZiBuYXRpdmVfYnJh
bmNoKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gJ3RydW5rJworCiAgICAgZGVmIHRpbWVz
dGFtcF9vZl9yZXZpc2lvbihzZWxmLCBwYXRoLCByZXZpc2lvbik6CiAgICAgICAgIHJldHVybiAn
MjAxMy0wMi0wMSAwODo0ODowNSArMDAwMCcKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiAyNDMwMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291
dC9zY20vc2NtX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC05MDksNiArOTA5LDkgQEAg
RU5ECiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20uaGVhZF9zdm5fcmV2aXNpb24o
KSwgc2VsZi5zY20ubmF0aXZlX3JldmlzaW9uKCcuJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5zY20ubmF0aXZlX3JldmlzaW9uKCcuJyksICc1JykKIAorICAgIGRlZiB0ZXN0X25h
dGl2ZV9icmFuY2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY20ubmF0
aXZlX2JyYW5jaCgnLicpLCAndHJ1bmsnKQorCiAgICAgZGVmIHRlc3RfcHJvcHNldF9wcm9wZ2V0
KHNlbGYpOgogICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnN2bl9jaGVja291
dF9wYXRoLCAidGVzdF9maWxlIikKICAgICAgICAgZXhwZWN0ZWRfbWltZV90eXBlID0gIngtYXBw
bGljYXRpb24vZm9vLWJhciIKQEAgLTExMTIsNiArMTExNSwxMCBAQCBjbGFzcyBHaXRUZXN0KFND
TVRlc3QpOgogICAgICAgICBjb21tYW5kID0gWydnaXQnLCAnLUMnLCBzY20uY2hlY2tvdXRfcm9v
dCwgJ3Jldi1wYXJzZScsICdIRUFEJ10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY20ubmF0
aXZlX3JldmlzaW9uKHNjbS5jaGVja291dF9yb290KSwgcnVuX2NvbW1hbmQoY29tbWFuZCkuc3Ry
aXAoKSkKIAorICAgIGRlZiB0ZXN0X25hdGl2ZV9icmFuY2goc2VsZik6CisgICAgICAgIHNjbSA9
IHNlbGYudHJhY2tpbmdfc2NtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ21hc3RlcicsIHNj
bS5uYXRpdmVfYnJhbmNoKHNjbS5jaGVja291dF9yb290KSkKKwogICAgIGRlZiB0ZXN0X3JlbmFt
ZV9maWxlcyhzZWxmKToKICAgICAgICAgc2NtID0gc2VsZi50cmFja2luZ19zY20KIApAQCAtMTYy
Nyw2ICsxNjM0LDkgQEAgY2xhc3MgR2l0U1ZOVGVzdChTQ01UZXN0KToKICAgICAgICAgY29tbWFu
ZCA9IFsnZ2l0JywgJy1DJywgc2VsZi5naXRfY2hlY2tvdXRfcGF0aCwgJ3Jldi1wYXJzZScsICdI
RUFEJ10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjbS5uYXRpdmVfcmV2aXNpb24o
c2VsZi5naXRfY2hlY2tvdXRfcGF0aCksIHJ1bl9jb21tYW5kKGNvbW1hbmQpLnN0cmlwKCkpCiAK
KyAgICBkZWYgdGVzdF9uYXRpdmVfYnJhbmNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCd0cnVuaycsIHNlbGYuc2NtLm5hdGl2ZV9icmFuY2goc2VsZi5naXRfY2hlY2tvdXRfcGF0
aCkpCisKICAgICBkZWYgdGVzdF90b19vYmplY3RfbmFtZShzZWxmKToKICAgICAgICAgcmVscGF0
aCA9ICd0ZXN0X2ZpbGVfY29tbWl0MScKICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLnJlYWxw
YXRoKG9zLnBhdGguam9pbihzZWxmLmdpdF9jaGVja291dF9wYXRoLCByZWxwYXRoKSkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5w
eQkocmV2aXNpb24gMjQzMDA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3N2bi5weQkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBjbGFzcyBT
Vk4oU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICAgICAgU0NNLl9faW5pdF9fKHNlbGYsIGN3ZCwg
Kiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX2JvZ3VzX2RpciA9IE5vbmUKICAgICAgICAgaWYgcGF0
Y2hfZGlyZWN0b3JpZXMgPT0gW106Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24obWVzc2Fn
ZT0nRW1wdHkgbGlzdCBvZiBwYXRjaCBkaXJlY3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5pdF9f
JykKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRW1wdHkgbGlzdCBvZiBwYXRjaCBkaXJl
Y3RvcmllcyBwYXNzZWQgdG8gU0NNLl9faW5pdF9fJykKICAgICAgICAgZWxpZiBwYXRjaF9kaXJl
Y3RvcmllcyA9PSBOb25lOgogICAgICAgICAgICAgc2VsZi5fcGF0Y2hfZGlyZWN0b3JpZXMgPSBb
c2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRoKGN3ZCwgc2VsZi5jaGVja291dF9yb290KV0KICAgICAg
ICAgZWxzZToKQEAgLTI3OCw2ICsyNzgsMTQgQEAgY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3NpdG9y
eSk6CiAgICAgZGVmIG5hdGl2ZV9yZXZpc2lvbihzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJu
IHNlbGYuc3ZuX3JldmlzaW9uKHBhdGgpCiAKKyAgICBkZWYgbmF0aXZlX2JyYW5jaChzZWxmLCBw
YXRoKToKKyAgICAgICAgcmVsYXRpdmVfdXJsID0gc2VsZi52YWx1ZV9mcm9tX3N2bl9pbmZvKHBh
dGgsICdSZWxhdGl2ZSBVUkwnKVsyOl0KKyAgICAgICAgaWYgcmVsYXRpdmVfdXJsLnN0YXJ0c3dp
dGgoJ3RydW5rJyk6CisgICAgICAgICAgICByZXR1cm4gJ3RydW5rJworICAgICAgICBlbGlmIHJl
bGF0aXZlX3VybC5zdGFydHN3aXRoKCdicmFuY2gnKToKKyAgICAgICAgICAgIHJldHVybiByZWxh
dGl2ZV91cmwuc3BsaXQoJy8nKVsxXQorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3t9IGlzIG5v
dCBhIGJyYW5jaCcuZm9ybWF0KHJlbGF0aXZlX3VybC5zcGxpdCgnLycpWzBdKSkKKwogICAgIGRl
ZiB0aW1lc3RhbXBfb2ZfcmV2aXNpb24oc2VsZiwgcGF0aCwgcmV2aXNpb24pOgogICAgICAgICAj
IFdlIHVzZSAtLXhtbCB0byBnZXQgdGltZXN0YW1wcyBsaWtlIDIwMTMtMDItMDhUMDg6MTg6MDQu
OTY0NDA5WgogICAgICAgICByZXBvc2l0b3J5X3Jvb3QgPSBzZWxmLnZhbHVlX2Zyb21fc3ZuX2lu
Zm8oc2VsZi5jaGVja291dF9yb290LCAnUmVwb3NpdG9yeSBSb290JykKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQko
cmV2aXNpb24gMjQzMDA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3BsYXRmb3JtaW5mby5weQkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0NiwxMSBAQCBjbGFz
cyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcmV0
dXJuIHN5cy5tYXhpbnQKIAorICAgIGRlZiBidWlsZF92ZXJzaW9uKHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLmlzX21hYygpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5f
Y29tbWFuZChbJy91c3IvYmluL3N3X3ZlcnMnLCAnLWJ1aWxkVmVyc2lvbiddLCByZXR1cm5fc3Rk
ZXJyPUZhbHNlLCBpZ25vcmVfZXJyb3JzPVRydWUpLnJzdHJpcCgpCisgICAgICAgIHJldHVybiBO
b25lCisKICAgICBkZWYgeGNvZGVfc2RrX3ZlcnNpb24oc2VsZiwgc2RrX25hbWUpOgogICAgICAg
ICBpZiBzZWxmLmlzX21hYygpOgogICAgICAgICAgICAgIyBBc3N1bWVzIHRoYXQgeGNydW4gZG9l
cyBub3Qgd3JpdGUgdG8gc3RhbmRhcmQgb3V0cHV0IG9uIGZhaWx1cmUgKGUuZy4gU0RLIGRvZXMg
bm90IGV4aXN0KS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm9fbW9jay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHJldmlzaW9uIDI0MzAwOCkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fbW9jay5w
eQkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi52
ZXJzaW9uX25hbWVfbWFwIGltCiAKIAogY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3QpOgot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPVZlcnNpb24u
ZnJvbV9uYW1lKCdTbm93IExlb3BhcmQnKSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9zX25h
bWU9J21hYycsIG9zX3ZlcnNpb249VmVyc2lvbi5mcm9tX25hbWUoJ0hpZ2ggU2llcnJhJykpOgog
ICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvc192ZXJzaW9uLCBWZXJzaW9uKQogICAgICAgICBz
ZWxmLm9zX25hbWUgPSBvc19uYW1lCiAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IG9zX3ZlcnNp
b24KQEAgLTc4LDYgKzc4LDExIEBAIGNsYXNzIE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAg
ICBkZWYgdGVybWluYWxfd2lkdGgoc2VsZik6CiAgICAgICAgIHJldHVybiA4MAogCisgICAgZGVm
IGJ1aWxkX3ZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfbWFjKCk6CisgICAgICAg
ICAgICByZXR1cm4gJzE3QTQwNScKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiB4Y29k
ZV9zZGtfdmVyc2lvbihzZWxmLCBzZGtfbmFtZSk6CiAgICAgICAgIHJldHVybiBWZXJzaW9uKDgs
IDEpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CShyZXZpc2lvbiAyNDMw
MDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKICMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgogIyBD
b3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQot
IyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDE3ICszOCwxOSBAQCBpbXBvcnQgdHJh
Y2ViYWNrCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmxv
Z3V0aWxzIGltcG9ydCBjb25maWd1cmVfbG9nZ2luZwotZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCi1mcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAorZnJvbSB3ZWJr
aXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAogZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBp
bXBvcnQgQ29uZmlnCiBmcm9tIHdlYmtpdHB5LnRlc3QuZmluZGVyIGltcG9ydCBGaW5kZXIKIGZy
b20gd2Via2l0cHkudGVzdC5wcmludGVyIGltcG9ydCBQcmludGVyCiBmcm9tIHdlYmtpdHB5LnRl
c3QucnVubmVyIGltcG9ydCBSdW5uZXIsIHVuaXRfdGVzdF9uYW1lCitmcm9tIHdlYmtpdHB5LnJl
c3VsdHMudXBsb2FkIGltcG9ydCBVcGxvYWQKK2Zyb20gd2Via2l0cHkucmVzdWx0cy5vcHRpb25z
IGltcG9ydCB1cGxvYWRfb3B0aW9ucwogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1l
X18pCiAKLV9ob3N0ID0gU3lzdGVtSG9zdCgpCitfaG9zdCA9IEhvc3QoKQogX3dlYmtpdF9yb290
ID0gTm9uZQogCiAKQEAgLTEzMSw2ICsxMzMsMTAgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAg
ICAgICAgICAgICBoZWxwPSdTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gUmVsZWFzZScpCiAgICAg
ICAgIHBhcnNlci5hZGRfb3B0aW9uX2dyb3VwKGNvbmZpZ3VyYXRpb25fZ3JvdXApCiAKKyAgICAg
ICAgdXBsb2FkX2dyb3VwID0gb3B0cGFyc2UuT3B0aW9uR3JvdXAocGFyc2VyLCAnVXBsb2FkIE9w
dGlvbnMnKQorICAgICAgICB1cGxvYWRfZ3JvdXAuYWRkX29wdGlvbnModXBsb2FkX29wdGlvbnMo
KSkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAodXBsb2FkX2dyb3VwKQorCiAgICAg
ICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYScsICctLWFsbCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScs
IGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biBhbGwg
dGhlIHRlc3RzJykKICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY292ZXJhZ2Un
LCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLApAQCAtMTgxLDExICsxODcsMTIg
QEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0
eSBpbXBvcnQgYXV0b2luc3RhbGxfZXZlcnl0aGluZwogICAgICAgICBhdXRvaW5zdGFsbF9ldmVy
eXRoaW5nKCkKIAorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgY29u
ZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIuZmlsZXN5c3RlbSkKKyAg
ICAgICAgY29uZmlndXJhdGlvbl90b191c2UgPSBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24g
b3IgY29uZmlnLmRlZmF1bHRfY29uZmlndXJhdGlvbigpCiAgICAgICAgIGlmIHdpbGxfcnVuX2xs
ZGJfd2Via2l0X3Rlc3RzOgogICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgn
QnVpbGRpbmcgbGxkYldlYktpdFRlc3RlciAuLi4nKQogICAgICAgICAgICAgYnVpbGRfbGxkYndl
YmtpdHRlc3RlciA9IHNlbGYuZmluZGVyLmZpbGVzeXN0ZW0uam9pbihfd2Via2l0X3Jvb3QsICdU
b29scycsICdTY3JpcHRzJywgJ2J1aWxkLWxsZGJ3ZWJraXR0ZXN0ZXInKQotICAgICAgICAgICAg
Y29uZmlnID0gQ29uZmlnKF9ob3N0LmV4ZWN1dGl2ZSwgc2VsZi5maW5kZXIuZmlsZXN5c3RlbSkK
LSAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25fdG9fdXNlID0gc2VsZi5fb3B0aW9ucy5jb25maWd1
cmF0aW9uIG9yIGNvbmZpZy5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKQogICAgICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgICAgIF9ob3N0LmV4ZWN1dGl2ZS5ydW5fYW5kX3Rocm93X2lmX2ZhaWwo
W2J1aWxkX2xsZGJ3ZWJraXR0ZXN0ZXIsIGNvbmZpZy5mbGFnX2Zvcl9jb25maWd1cmF0aW9uKGNv
bmZpZ3VyYXRpb25fdG9fdXNlKV0sIHF1aWV0PShub3QgYm9vbChzZWxmLl9vcHRpb25zLnZlcmJv
c2UpKSkKICAgICAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciBhcyBlOgpAQCAtMjE4LDYgKzIy
NSw3IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICB0ZXN0X3J1bm5lciA9IFJ1bm5l
cihzZWxmLnByaW50ZXIsIGxvYWRlcikKICAgICAgICAgdGVzdF9ydW5uZXIucnVuKHBhcmFsbGVs
X3Rlc3RzLCBzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykKICAgICAgICAgdGVzdF9ydW5u
ZXIucnVuKHNlcmlhbF90ZXN0cywgMSkKKyAgICAgICAgZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQog
CiAgICAgICAgIHNlbGYucHJpbnRlci5wcmludF9yZXN1bHQodGltZS50aW1lKCkgLSBzdGFydCkK
IApAQCAtMjMyLDkgKzI0MCw1MSBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKICAgICAgICAgICAgIGNvdi5zdG9wKCkKICAgICAgICAg
ICAgIGNvdi5zYXZlKCkKKworICAgICAgICBmYWlsZWRfdXBsb2FkcyA9IDAKKyAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5yZXBvcnRfdXJsczoKKyAgICAgICAgICAgIHNlbGYucHJpbnRlci5tZXRl
ci53cml0ZWxuKCdcbicpCisgICAgICAgICAgICBzZWxmLnByaW50ZXIud3JpdGVfdXBkYXRlKCdQ
cmVwYXJpbmcgdXBsb2FkIGRhdGEgLi4uJykKKworICAgICAgICAgICAgIyBFbXB0eSB0ZXN0IHJl
c3VsdHMgaW5kaWNhdGUgYSBQQVNTLgorICAgICAgICAgICAgcmVzdWx0cyA9IHt0ZXN0OiB7fSBm
b3IgdGVzdCBpbiB0ZXN0X3J1bm5lci50ZXN0c19ydW59CisgICAgICAgICAgICBmb3IgdGVzdCwg
ZXJyb3JzIGluIHRlc3RfcnVubmVyLmVycm9yczoKKyAgICAgICAgICAgICAgICByZXN1bHRzW3Rl
c3RdID0gVXBsb2FkLmNyZWF0ZV90ZXN0X3Jlc3VsdChhY3R1YWw9VXBsb2FkLkV4cGVjdGF0aW9u
cy5FUlJPUiwgbG9nPScvbicuam9pbihlcnJvcnMpKQorICAgICAgICAgICAgZm9yIHRlc3QsIGZh
aWx1cmVzIGluIHRlc3RfcnVubmVyLmZhaWx1cmVzOgorICAgICAgICAgICAgICAgIHJlc3VsdHNb
dGVzdF0gPSBVcGxvYWQuY3JlYXRlX3Rlc3RfcmVzdWx0KGFjdHVhbD1VcGxvYWQuRXhwZWN0YXRp
b25zLkZBSUwsIGxvZz0nL24nLmpvaW4oZmFpbHVyZXMpKQorCisgICAgICAgICAgICBfaG9zdC5p
bml0aWFsaXplX3NjbSgpCisgICAgICAgICAgICB1cGxvYWQgPSBVcGxvYWQoCisgICAgICAgICAg
ICAgICAgc3VpdGU9J3dlYmtpdHB5LXRlc3RzJywKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0
aW9uPVVwbG9hZC5jcmVhdGVfY29uZmlndXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgcGxh
dGZvcm09X2hvc3QucGxhdGZvcm0ub3NfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgdmVyc2lv
bj1zdHIoX2hvc3QucGxhdGZvcm0ub3NfdmVyc2lvbiksCisgICAgICAgICAgICAgICAgICAgIHZl
cnNpb25fbmFtZT1faG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uX25hbWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgc3R5bGU9Y29uZmlndXJhdGlvbl90b191c2UsCisgICAgICAgICAgICAgICAgICAg
IHNkaz1faG9zdC5wbGF0Zm9ybS5idWlsZF92ZXJzaW9uKCksCisgICAgICAgICAgICAgICAgKSwK
KyAgICAgICAgICAgICAgICBkZXRhaWxzPVVwbG9hZC5jcmVhdGVfZGV0YWlscyhvcHRpb25zPXNl
bGYuX29wdGlvbnMpLAorICAgICAgICAgICAgICAgIGNvbW1pdHM9W1VwbG9hZC5jcmVhdGVfY29t
bWl0KAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5X2lkPSd3ZWJraXQnLAorICAgICAg
ICAgICAgICAgICAgICBpZD1faG9zdC5zY20oKS5uYXRpdmVfcmV2aXNpb24oX3dlYmtpdF9yb290
KSwKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoPV9ob3N0LnNjbSgpLm5hdGl2ZV9icmFuY2go
X3dlYmtpdF9yb290KSwKKyAgICAgICAgICAgICAgICApXSwKKyAgICAgICAgICAgICAgICBydW5f
c3RhdHM9VXBsb2FkLmNyZWF0ZV9ydW5fc3RhdHMoCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0
X3RpbWU9c3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgZW5kX3RpbWU9ZW5kX3RpbWUs
CisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3NraXBwZWQ9bGVuKHRlc3RfcnVubmVyLnRlc3Rz
X3J1bikgLSBsZW4ocGFyYWxsZWxfdGVzdHMpIC0gbGVuKHNlcmlhbF90ZXN0cyksCisgICAgICAg
ICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICByZXN1bHRzPXJlc3VsdHMsCisgICAgICAgICAg
ICApCisgICAgICAgICAgICBmb3IgdXJsIGluIHNlbGYuX29wdGlvbnMucmVwb3J0X3VybHM6Cisg
ICAgICAgICAgICAgICAgc2VsZi5wcmludGVyLndyaXRlX3VwZGF0ZSgnVXBsb2FkaW5nIHRvIHt9
IC4uLicuZm9ybWF0KHVybCkpCisgICAgICAgICAgICAgICAgZmFpbGVkX3VwbG9hZHMgPSBmYWls
ZWRfdXBsb2FkcyBpZiB1cGxvYWQudXBsb2FkKHVybCwgbG9nX2xpbmVfZnVuYz1zZWxmLnByaW50
ZXIubWV0ZXIud3JpdGVsbikgZWxzZSAoZmFpbGVkX3VwbG9hZHMgKyAxKQorICAgICAgICAgICAg
c2VsZi5wcmludGVyLm1ldGVyLndyaXRlbG4oJ1VwbG9hZHMgY29tcGxldGVkIScpCisKKyAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKICAgICAgICAgICAgIGNvdi5yZXBvcnQoc2hv
d19taXNzaW5nPUZhbHNlKQogCi0gICAgICAgIHJldHVybiBub3Qgc2VsZi5wcmludGVyLm51bV9l
cnJvcnMgYW5kIG5vdCBzZWxmLnByaW50ZXIubnVtX2ZhaWx1cmVzCisgICAgICAgIHJldHVybiBu
b3Qgc2VsZi5wcmludGVyLm51bV9lcnJvcnMgYW5kIG5vdCBzZWxmLnByaW50ZXIubnVtX2ZhaWx1
cmVzIGFuZCBub3QgZmFpbGVkX3VwbG9hZHMKIAogICAgIGRlZiBfY2hlY2tfaW1wb3J0cyhzZWxm
LCBuYW1lcyk6CiAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90ZXN0L3J1bm5lci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rlc3QvcnVubmVyLnB5CShyZXZpc2lvbiAyNDMwMDgpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rlc3QvcnVubmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBA
IGNsYXNzIFJ1bm5lcihvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcmludGVyLCBs
b2FkZXIpOgogICAgICAgICBzZWxmLnByaW50ZXIgPSBwcmludGVyCiAgICAgICAgIHNlbGYubG9h
ZGVyID0gbG9hZGVyCi0gICAgICAgIHNlbGYudGVzdHNfcnVuID0gMAorICAgICAgICBzZWxmLnRl
c3RzX3J1biA9IFtdCiAgICAgICAgIHNlbGYuZXJyb3JzID0gW10KICAgICAgICAgc2VsZi5mYWls
dXJlcyA9IFtdCiAgICAgICAgIHNlbGYud29ya2VyX2ZhY3RvcnkgPSBsYW1iZGEgY2FsbGVyOiBf
V29ya2VyKGNhbGxlciwgc2VsZi5sb2FkZXIpCkBAIC02MCw3ICs2MCw3IEBAIGNsYXNzIFJ1bm5l
cihvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5wcmludGVyLnByaW50X3N0YXJ0ZWRfdGVzdChz
b3VyY2UsIHRlc3RfbmFtZSkKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIHNlbGYudGVz
dHNfcnVuICs9IDEKKyAgICAgICAgc2VsZi50ZXN0c19ydW4uYXBwZW5kKHRlc3RfbmFtZSkKICAg
ICAgICAgaWYgZmFpbHVyZXM6CiAgICAgICAgICAgICBzZWxmLmZhaWx1cmVzLmFwcGVuZCgodGVz
dF9uYW1lLCBmYWlsdXJlcykpCiAgICAgICAgIGlmIGVycm9yczoKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9ydW5uZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90ZXN0L3J1bm5lcl91bml0dGVzdC5weQkocmV2aXNpb24gMjQzMDA4
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L3J1bm5lcl91bml0dGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNiBAQCBjbGFzcyBSdW5uZXJUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3Rlc3QzIChGb28pJywgJ0Un
LCAndGVzdDNcbmVycmVkJykpCiAgICAgICAgIHJ1bm5lciA9IFJ1bm5lcihQcmludGVyKHN0cmVh
bSwgb3B0aW9ucyksIGxvYWRlcikKICAgICAgICAgcnVubmVyLnJ1bihbJ0Zvby50ZXN0MScsICdG
b28udGVzdDInLCAnRm9vLnRlc3QzJ10sIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVu
bmVyLnRlc3RzX3J1biwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocnVubmVyLnRl
c3RzX3J1biksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJ1bm5lci5mYWlsdXJl
cyksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJ1bm5lci5lcnJvcnMpLCAxKQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19faW5pdF9fLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQko
cmV2aXNpb24gMjQzMDA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5L19f
aW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNSBAQAogIyBDb3B5cmlnaHQgKEMp
IDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQorIyBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMTQsNiArMTE1LDggQEAgY2xhc3MgQXV0b2luc3RhbGxJbXBvcnRI
b29rKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX3B5dGVzdF90aW1lb3V0KCkK
ICAgICAgICAgZWxpZiAnLnB5dGVzdCcgaW4gZnVsbG5hbWU6CiAgICAgICAgICAgICBzZWxmLl9p
bnN0YWxsX3B5dGVzdCgpCisgICAgICAgIGVsaWYgJy5yZXF1ZXN0cycgaW4gZnVsbG5hbWU6Cisg
ICAgICAgICAgICBzZWxmLl9pbnN0YWxsX3JlcXVlc3RzKCkKIAogICAgIGRlZiBfaW5zdGFsbF9t
ZWNoYW5pemUoc2VsZik6CiAgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0
aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUvbWVjaGFuaXplLTAuMi41
LnRhci5neiIsCkBAIC0xNjEsNiArMTY0LDIxIEBAIGNsYXNzIEF1dG9pbnN0YWxsSW1wb3J0SG9v
ayhvYmplY3QpOgogICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhv
c3RlZC5vcmcvcGFja2FnZXMvYTIvZWMvNDE1ZDBjY2NjMWVkNDFjZDdmZGY2OWFkOTg5ZGExNmE4
ZDEzMDU3OTk2MzcxMDA0Y2FiNGJhZmM0OGYzL3B5dGVzdC0zLjYuMi50YXIuZ3oiLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInB5dGVzdC0zLjYuMi9zcmMvcHl0ZXN0LnB5IikKIAor
ICAgIGRlZiBfaW5zdGFsbF9yZXF1ZXN0cyhzZWxmKToKKyAgICAgICAgc2VsZi5fZW5zdXJlX2F1
dG9pbnN0YWxsZWRfZGlyX2lzX2luX3N5c19wYXRoKCkKKyAgICAgICAgc2VsZi5faW5zdGFsbCgi
aHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzLzA2L2I4L2QxZWEzODUxM2My
MmU4YzkwNjI3NWQxMzU4MThmZWUxNmFkODQ5NTk4NTk1NmE5YjdlMmJiMjE5NDJhMS9jZXJ0aWZp
LTIwMTkuMy45LnRhci5neiIsCisgICAgICAgICAgICAgICAgICAgICAgImNlcnRpZmktMjAxOS4z
LjkvY2VydGlmaSIpCisgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0aG9u
aG9zdGVkLm9yZy9wYWNrYWdlcy9mYy9iYi9hNTc2OGMyMzBmOWRkYjAzYWNjOWVmM2YwZDRhM2Nm
OTM0NjI0NzM3OTVkMThlOTUzNTQ5OGM4ZjkyOWQvY2hhcmRldC0zLjAuNC50YXIuZ3oiLAorICAg
ICAgICAgICAgICAgICAgICAgICJjaGFyZGV0LTMuMC40L2NoYXJkZXQiKQorICAgICAgICBzZWxm
Ll9pbnN0YWxsKCJodHRwczovL2ZpbGVzLnB5dGhvbmhvc3RlZC5vcmcvcGFja2FnZXMvZmMvYmIv
YTU3NjhjMjMwZjlkZGIwM2FjYzllZjNmMGQ0YTNjZjkzNDYyNDczNzk1ZDE4ZTk1MzU0OThjOGY5
MjlkL2NoYXJkZXQtMy4wLjQudGFyLmd6IiwKKyAgICAgICAgICAgICAgICAgICAgICAiY2hhcmRl
dC0zLjAuNC9jaGFyZGV0IikKKyAgICAgICAgc2VsZi5faW5zdGFsbCgiaHR0cHM6Ly9maWxlcy5w
eXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2FkLzEzL2ViNTY5NTFiNmY3OTUwY2FkYjU3OWNhMTY2
ZTQ0OGJhNzdmOWQyNGVmYzAzZWRkN2U1NWZhNTdkMDRiNy9pZG5hLTIuOC50YXIuZ3oiLAorICAg
ICAgICAgICAgICAgICAgICAgICJpZG5hLTIuOC9pZG5hIikKKyAgICAgICAgc2VsZi5faW5zdGFs
bCgiaHR0cHM6Ly9maWxlcy5weXRob25ob3N0ZWQub3JnL3BhY2thZ2VzL2IxLzUzLzM3ZDgyYWIz
OTEzOTM1NjVmMmY4MzFiOGVlZGJmZmQ1N2RiNWE3MTgyMTZmODJmMWE4YjRkMzgxYTFjMS91cmxs
aWIzLTEuMjQuMS50YXIuZ3oiLAorICAgICAgICAgICAgICAgICAgICAgICJ1cmxsaWIzLTEuMjQu
MS9zcmMvdXJsbGliMyIpCisgICAgICAgIHNlbGYuX2luc3RhbGwoImh0dHBzOi8vZmlsZXMucHl0
aG9uaG9zdGVkLm9yZy9wYWNrYWdlcy81Mi8yYy81MTRlNGFjMjVkYTJiMDhjYTVhNDY0YzUwNDYz
NjgyMTI2Mzg1YzQyNzJjMTgxOTM4NzZlOTFmNGJjMzgvcmVxdWVzdHMtMi4yMS4wLnRhci5neiIs
CisgICAgICAgICAgICAgICAgICAgICAgInJlcXVlc3RzLTIuMjEuMC9yZXF1ZXN0cyIpCisKICAg
ICBkZWYgX2luc3RhbGxfcHlsaW50KHNlbGYpOgogICAgICAgICBzZWxmLl9lbnN1cmVfYXV0b2lu
c3RhbGxlZF9kaXJfaXNfaW5fc3lzX3BhdGgoKQogICAgICAgICBpZiAobm90IHNlbGYuX2ZzLmV4
aXN0cyhzZWxmLl9mcy5qb2luKF9BVVRPSU5TVEFMTEVEX0RJUiwgInB5bGludCIpKSBvcgpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVlc191bml0dGVzdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVl
dWVzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNDMwMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0x
ODMsMTAgKzE4MywxMCBAQCBjbGFzcyBQYXRjaFByb2Nlc3NpbmdRdWV1ZVRlc3QoQ29tbWFuZHNU
CiAgICAgICAgIHF1ZXVlLl9vcHRpb25zID0gTW9jaygpCiAgICAgICAgIHF1ZXVlLl9vcHRpb25z
LnBvcnQgPSBOb25lCiAgICAgICAgIHBhdGNoID0gcXVldWUuX3Rvb2wuYnVncy5mZXRjaF9hdHRh
Y2htZW50KDEwMDAxKQotICAgICAgICBleHBlY3RlZF9sb2dzID0gIiIiTU9DSyBhZGRfYXR0YWNo
bWVudF90b19idWc6IGJ1Z19pZD01MDAwMCwgZGVzY3JpcHRpb249QXJjaGl2ZSBvZiBsYXlvdXQt
dGVzdC1yZXN1bHRzIGZyb20gYm90IGZvciBtYWMtc25vd2xlb3BhcmQgZmlsZW5hbWU9bGF5b3V0
LXRlc3QtcmVzdWx0cy56aXAgbWltZXR5cGU9Tm9uZQorICAgICAgICBleHBlY3RlZF9sb2dzID0g
IiIiTU9DSyBhZGRfYXR0YWNobWVudF90b19idWc6IGJ1Z19pZD01MDAwMCwgZGVzY3JpcHRpb249
QXJjaGl2ZSBvZiBsYXlvdXQtdGVzdC1yZXN1bHRzIGZyb20gYm90IGZvciBtYWMtaGlnaHNpZXJy
YSBmaWxlbmFtZT1sYXlvdXQtdGVzdC1yZXN1bHRzLnppcCBtaW1ldHlwZT1Ob25lCiAtLSBCZWdp
biBjb21tZW50IC0tCiBUaGUgYXR0YWNoZWQgdGVzdCBmYWlsdXJlcyB3ZXJlIHNlZW4gd2hpbGUg
cnVubmluZyBydW4td2Via2l0LXRlc3RzIG9uIHRoZSBtb2NrLXF1ZXVlLgotUG9ydDogbWFjLXNu
b3dsZW9wYXJkICBQbGF0Zm9ybTogTW9ja1BsYXRmb3JtIDEuMAorUG9ydDogbWFjLWhpZ2hzaWVy
cmEgIFBsYXRmb3JtOiBNb2NrUGxhdGZvcm0gMS4wCiAtLSBFbmQgY29tbWVudCAtLQogIiIiCiAg
ICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBxdWV1ZS5fdXBsb2Fk
X3Jlc3VsdHNfYXJjaGl2ZV9mb3JfcGF0Y2gsIFtwYXRjaCwgTW9jaygpXSwgZXhwZWN0ZWRfbG9n
cz1leHBlY3RlZF9sb2dzKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>